KIM-JINO5 hace 4 meses
padre
commit
7496141236
Se han modificado 100 ficheros con 3420 adiciones y 1654 borrados
  1. 0 5
      .hintrc
  2. 4 5
      app/Helpers/common.php
  3. 2 2
      app/Http/Controllers/Account/CertifyController.php
  4. 1 2
      app/Http/Controllers/Account/CommentController.php
  5. 3 1
      app/Http/Controllers/Account/ModifyController.php
  6. 1 1
      app/Http/Controllers/Account/ProfileController.php
  7. 11 3
      app/Http/Controllers/Admin/Config/Form/EmailController.php
  8. 1 1
      app/Http/Controllers/Admin/Config/Layout/LogoController.php
  9. 4 4
      app/Http/Controllers/Admin/Config/Register/BasicController.php
  10. 7 2
      app/Http/Controllers/Admin/Config/Setting/CompanyController.php
  11. 14 2
      app/Http/Controllers/Admin/Page/MenuController.php
  12. 81 1
      app/Http/Controllers/AdminController.php
  13. 21 18
      app/Http/Controllers/ApiController.php
  14. 65 0
      app/Http/Controllers/Auth/ForgotAccountController.php
  15. 2 2
      app/Http/Controllers/Auth/LoginController.php
  16. 115 15
      app/Http/Controllers/Auth/RegisterController.php
  17. 5 3
      app/Http/Controllers/Board/CommentController.php
  18. 11 2
      app/Http/Controllers/Board/PostController.php
  19. 53 0
      app/Http/Controllers/Board/TagController.php
  20. 1 1
      app/Http/Kernel.php
  21. 0 1
      app/Http/Middleware/Board/BoardAccess.php
  22. 28 10
      app/Http/Middleware/Prepare/Admin.php
  23. 4 4
      app/Http/Middleware/Prepare/Front.php
  24. 1 1
      app/Http/Middleware/TrustProxies.php
  25. 15 10
      app/Http/Traits/AgentTrait.php
  26. 7 7
      app/Http/Traits/CommonTrait.php
  27. 68 0
      app/Http/Traits/CryptTrait.php
  28. 6 9
      app/Mail/VerifyCode.php
  29. 70 0
      app/Mail/VerifyLink.php
  30. 1 2
      app/Models/BoardMeta.php
  31. 1 1
      app/Models/Comment.php
  32. 1 1
      app/Models/CommentLike.php
  33. 16 22
      app/Models/Config.php
  34. 65 26
      app/Models/DTO/SearchData.php
  35. 4 4
      app/Models/EmailLib.php
  36. 7 7
      app/Models/FileLib.php
  37. 4 2
      app/Models/Menu.php
  38. 1 1
      app/Models/PostBookmark.php
  39. 1 1
      app/Models/PostLike.php
  40. 3 3
      app/Models/PostLink.php
  41. 75 1
      app/Models/PostTag.php
  42. 94 22
      app/Models/User.php
  43. 62 8
      app/Models/Visit.php
  44. 0 45
      app/Models/Visits.php
  45. 7 7
      app/Providers/AppServiceProvider.php
  46. 1 1
      app/Rules/IsPhone.php
  47. 1 1
      app/Services/BoardService.php
  48. 1 0
      app/Services/CommentService.php
  49. 10 0
      app/Services/PostService.php
  50. 55 0
      app/Services/TagService.php
  51. 0 1
      composer.json
  52. 1 1
      config/app.php
  53. 275 307
      config/constants.php
  54. 1 1
      config/logging.php
  55. 1 1
      config/menus.php
  56. 1 1
      config/visitor.php
  57. BIN
      node_modules/.bin/sass
  58. 88 29
      node_modules/.package-lock.json
  59. 16 4
      node_modules/@fortawesome/fontawesome-free/css/all.css
  60. 1 1
      node_modules/@fortawesome/fontawesome-free/css/all.min.css
  61. 1 1
      node_modules/@fortawesome/fontawesome-free/css/brands.css
  62. 1 1
      node_modules/@fortawesome/fontawesome-free/css/brands.min.css
  63. 16 4
      node_modules/@fortawesome/fontawesome-free/css/fontawesome.css
  64. 1 1
      node_modules/@fortawesome/fontawesome-free/css/fontawesome.min.css
  65. 1 1
      node_modules/@fortawesome/fontawesome-free/css/regular.css
  66. 1 1
      node_modules/@fortawesome/fontawesome-free/css/regular.min.css
  67. 1 1
      node_modules/@fortawesome/fontawesome-free/css/solid.css
  68. 1 1
      node_modules/@fortawesome/fontawesome-free/css/solid.min.css
  69. 9 7
      node_modules/@fortawesome/fontawesome-free/css/svg-with-js.css
  70. 1 1
      node_modules/@fortawesome/fontawesome-free/css/svg-with-js.min.css
  71. 5 5
      node_modules/@fortawesome/fontawesome-free/css/svg.css
  72. 1 1
      node_modules/@fortawesome/fontawesome-free/css/svg.min.css
  73. 1 1
      node_modules/@fortawesome/fontawesome-free/css/v4-font-face.css
  74. 1 1
      node_modules/@fortawesome/fontawesome-free/css/v4-font-face.min.css
  75. 1 1
      node_modules/@fortawesome/fontawesome-free/css/v4-shims.css
  76. 1 1
      node_modules/@fortawesome/fontawesome-free/css/v4-shims.min.css
  77. 1 1
      node_modules/@fortawesome/fontawesome-free/css/v5-font-face.css
  78. 1 1
      node_modules/@fortawesome/fontawesome-free/css/v5-font-face.min.css
  79. 440 272
      node_modules/@fortawesome/fontawesome-free/js/all.js
  80. 1 1
      node_modules/@fortawesome/fontawesome-free/js/all.min.js
  81. 161 98
      node_modules/@fortawesome/fontawesome-free/js/brands.js
  82. 1 1
      node_modules/@fortawesome/fontawesome-free/js/brands.min.js
  83. 161 98
      node_modules/@fortawesome/fontawesome-free/js/conflict-detection.js
  84. 1 1
      node_modules/@fortawesome/fontawesome-free/js/conflict-detection.min.js
  85. 208 115
      node_modules/@fortawesome/fontawesome-free/js/fontawesome.js
  86. 1 1
      node_modules/@fortawesome/fontawesome-free/js/fontawesome.min.js
  87. 165 102
      node_modules/@fortawesome/fontawesome-free/js/regular.js
  88. 1 1
      node_modules/@fortawesome/fontawesome-free/js/regular.min.js
  89. 177 114
      node_modules/@fortawesome/fontawesome-free/js/solid.js
  90. 1 1
      node_modules/@fortawesome/fontawesome-free/js/solid.min.js
  91. 161 98
      node_modules/@fortawesome/fontawesome-free/js/v4-shims.js
  92. 1 1
      node_modules/@fortawesome/fontawesome-free/js/v4-shims.min.js
  93. 202 101
      node_modules/@fortawesome/fontawesome-free/metadata/icon-families.json
  94. 126 0
      node_modules/@fortawesome/fontawesome-free/metadata/icon-families.yml
  95. 126 0
      node_modules/@fortawesome/fontawesome-free/metadata/icons.yml
  96. 25 0
      node_modules/@fortawesome/fontawesome-free/metadata/sponsors.yml
  97. 1 1
      node_modules/@fortawesome/fontawesome-free/package.json
  98. 15 1
      node_modules/@fortawesome/fontawesome-free/scss/_core.scss
  99. 4 2
      node_modules/@fortawesome/fontawesome-free/scss/_stacked.scss
  100. 1 1
      node_modules/@fortawesome/fontawesome-free/scss/brands.scss

+ 0 - 5
.hintrc

@@ -1,5 +0,0 @@
-{
-  "extends": [
-    "development"
-  ]
-}

+ 4 - 5
app/Helpers/common.php

@@ -277,10 +277,9 @@ function loginCheck(string $callback = null): Illuminate\Http\Response|\Illumina
     $s = "<script>";
     $s .= "if (confirm(\"로그인 후 이용하실 수 있습니다.\\n로그인 화면으로 이동하시겠습니까?\")) {";
     $s .= "location.href = \"" . route('login') . "?callback=" . urlencode(url($_SERVER['REQUEST_URI']) ?? $callback) . "\";";
-    $s .= "}else{";
-    $s .= "history.go(-1);";
-    $s .= "}";
-    $s .= "</script>";
+    $s .= '} else if(document.referrer) { history.go(-1); ';
+    $s .= '} else { window.close(); }';
+    $s .= '</script>';
     return response($s, 200, ['Content-Type', 'text/javascript']);
 }
 
@@ -411,5 +410,5 @@ function listNum(int $total, int $page, int $perPage): int
  */
 function layout(string $viewPath): string
 {
-    return (DEVICE_TYPE != DEVICE_TYPE_1 ? ('mobile.' . $viewPath) : 'desktop.' . $viewPath);
+    return (DEVICE_TYPE != DEVICE_TYPE_1 ? 'mobile.' : 'desktop.') . $viewPath;
 }

+ 2 - 2
app/Http/Controllers/Account/CertifyController.php

@@ -39,11 +39,11 @@ class CertifyController extends Controller
     public function update(Request $request)
     {
         $certified = $this->passwordAuthed($request->post('password'));
-        if($certified) {
+        if ($certified) {
             $request->session()->flash('is-certified', 1);
             $callbackUrl = urldecode($request->post('callback_url'));
             return redirect($callbackUrl);
-        }else{
+        } else {
             return back()->withErrors(['password' => '비밀번호가 일치하지 않습니다.'])->withInput();
         }
     }

+ 1 - 2
app/Http/Controllers/Account/CommentController.php

@@ -20,8 +20,7 @@ class CommentController extends Controller
 
     public function __construct(
         UserService $userService, CommentService $commentService
-    )
-    {
+    ) {
         $this->middleware(['front', 'auth']);
 
         $this->userService = $userService;

+ 3 - 1
app/Http/Controllers/Account/ModifyController.php

@@ -46,6 +46,7 @@ class ModifyController extends Controller
         $changeEmailDayLeft = $this->userEmailLogModel->getDayLeft(UID);
         $userThumbWidth = config('user_thumb_width', THUMB_MAX_WIDTH);
         $userThumbHeight = config('user_thumb_height', THUMB_MAX_HEIGHT);
+        $useUserThumb = config('use_user_thumb', 0);
 
         return view(layout('account.modify'), [
             'user' => $request->user(),
@@ -53,6 +54,7 @@ class ModifyController extends Controller
             'changeEmailDayLeft' => $changeEmailDayLeft,
             'userThumbWidth' => $userThumbWidth,
             'userThumbHeight' => $userThumbHeight,
+            'useUserThumb' => $useUserThumb,
             'menuID' => 'MODIFY'
         ]);
     }
@@ -93,7 +95,7 @@ class ModifyController extends Controller
         $user = $request->user();
 
         if(!$this->userNameLogModel->isUpdateAble($user->id)) {
-            $posts['nickname'] = $user->name;
+            $posts['nickname'] = $user->nickname;
         }
         if(!$request->has('is_open_profile')) {
             $posts['is_open_profile'] = 0;

+ 1 - 1
app/Http/Controllers/Account/ProfileController.php

@@ -18,7 +18,7 @@ class ProfileController extends Controller
     /**
      * 내 정보
      * @method GET
-     * @see /account/profile
+     * @see /account
      */
     public function index()
     {

+ 11 - 3
app/Http/Controllers/Admin/Config/Form/EmailController.php

@@ -22,7 +22,9 @@ class EmailController extends Controller
      */
     public function index()
     {
-        return view('admin.config.form.email', []);
+        return view('admin.config.form.email', [
+            'config' => $this->configModel
+        ]);
     }
 
     /**
@@ -39,8 +41,12 @@ class EmailController extends Controller
             'send_email_changepw_form_content' => 'string|nullable',
             'send_email_withdraw_form_title' => 'string|nullable',
             'send_email_withdraw_form_content' => 'string|nullable',
+            /*
             'send_email_auth_form_title' => 'string|nullable',
             'send_email_auth_form_content' => 'string|nullable',
+            'send_email_verify_code_form_title' => 'string|nullable',
+            'send_email_verify_code_form_content' => 'string|nullable',
+            */
             'send_email_find_form_title' => 'string|nullable',
             'send_email_find_form_content' => 'string|nullable',
             'send_email_post_form_title' => 'string|nullable',
@@ -60,14 +66,16 @@ class EmailController extends Controller
         $attributes = [
             'send_email_register_form_title' => '회원가입 - 제목',
             'send_email_register_form_content' => '회원가입 - 내용',
-            'send_email_withdraw_form_title' => '회원탈퇴 - 제목',
-            'send_email_withdraw_form_content' => '회원탈퇴 - 내용',
             'send_email_changepw_form_title' => '비밀번호 변경 - 제목',
             'send_email_changepw_form_content' => '비밀번호 변경 - 내용',
+            'send_email_withdraw_form_title' => '회원탈퇴 - 제목',
+            'send_email_withdraw_form_content' => '회원탈퇴 - 내용',
+            /*
             'send_email_auth_form_title' => '이메일 인증',
             'send_email_auth_form_content' => '이메일 인증',
             'send_email_verify_code_form_title' => '인증번호 - 제목',
             'send_email_verify_code_form_content' => '인증번호 - 내용',
+            */
             'send_email_find_form_title' => '회원정보 찾기 - 제목',
             'send_email_find_form_content' => '회원정보 찾기 - 내용',
             'send_email_post_form_title' => '게시글 작성 - 제목',

+ 1 - 1
app/Http/Controllers/Admin/Config/Layout/LogoController.php

@@ -51,7 +51,7 @@ class LogoController extends Controller
         if($request->hasFile('site_favicon')) {
             $siteFavicon = $request->file('site_favicon');
             $siteFavicon->store(UPLOAD_PATH_PUBLIC . DIRECTORY_SEPARATOR . UPLOAD_PATH_FAVICON);
-            $updateData['site_favicon'] = ($storage . UPLOAD_PATH_LOGO . DIRECTORY_SEPARATOR . $siteFavicon->hashName());
+            $updateData['site_favicon'] = ($storage . UPLOAD_PATH_FAVICON . DIRECTORY_SEPARATOR . $siteFavicon->hashName());
         }
         if($request->hasFile('site_logo')) {
             $siteLogo = $request->file('site_logo');

+ 4 - 4
app/Http/Controllers/Admin/Config/Register/BasicController.php

@@ -48,8 +48,8 @@ class BasicController extends Controller
             'denied_nickname_list' => 'string|nullable',
             'denied_userid_list' => 'string|nullable',
             'denied_email_list' => 'string|nullable',
-            'user_register_policy1' => 'string|nullable',
-            'user_register_policy2' => 'string|nullable'
+            'user_register_policy_1' => 'string|nullable',
+            'user_register_policy_2' => 'string|nullable'
         ];
 
         $attributes = [
@@ -68,8 +68,8 @@ class BasicController extends Controller
             'denied_nickname_list' => '금지 이름',
             'denied_userid_list' => '금지 ID',
             'denied_email_list' => '금지 E-mail',
-            'user_register_policy1' => '회원가입약관',
-            'user_register_policy2' => '개인정보취급방침'
+            'user_register_policy_1' => '이용약관',
+            'user_register_policy_2' => '개인정보처리방침'
         ];
 
         $posts = $this->validate($request, $rules, [], $attributes);

+ 7 - 2
app/Http/Controllers/Admin/Config/Setting/CompanyController.php

@@ -48,7 +48,7 @@ class CompanyController extends Controller
             'company_admin_name' => 'string|nullable',
             'company_admin_email' => 'string|nullable',
             'company_site_url' => 'string|nullable',
-            'company_bank_name' => 'string|nullable|max:20',
+            'company_bank_code' => 'numeric|nullable',
             'company_bank_owner' => 'string|nullable|max:20',
             'company_bank_number' => 'string|nullable|max:20'
         ];
@@ -67,12 +67,17 @@ class CompanyController extends Controller
             'company_admin_name' => '정보관리책임자명',
             'company_admin_email' => '정보관리책임자 이메일',
             'company_site_url' => '홈페이지 주소',
-            'company_bank_name' => '회사 계좌 정보 - 은행',
+            'company_bank_code' => '회사 계좌 정보 - 은행 번호',
+            'company_bank_name' => '회사 계좌 정보 - 은행명',
             'company_bank_owner' => '회사 계좌 정보 - 예금주',
             'company_bank_number' => '회사 계좌 정보 - 계좌번호'
         ];
 
         $posts = $this->validate($request, $rules, [], $attributes);
+    
+        if ($posts['company_bank_code']) {
+            $posts['company_bank_name'] = $this->tossBanks[$posts['company_bank_code']];
+        }
 
         $this->configModel->save($posts, $attributes);
 

+ 14 - 2
app/Http/Controllers/Admin/Page/MenuController.php

@@ -5,6 +5,7 @@
  */
 namespace App\Http\Controllers\Admin\Page;
 
+use App\Models\Board;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Validator;
 use App\Http\Controllers\Controller;
@@ -13,10 +14,12 @@ use App\Models\Menu;
 class MenuController extends Controller
 {
     private Menu $menuModel;
+    private Board $boardModel;
 
-    public function __construct(Menu $menu)
+    public function __construct(Menu $menu, Board $board)
     {
         $this->menuModel = $menu;
+        $this->boardModel = $board;
     }
 
     /**
@@ -37,9 +40,13 @@ class MenuController extends Controller
             }
         }
 
+        // 게시판 목록 조회
+        $boardList = $this->boardModel->all();
+
         return view('admin.page.menu.index', [
             'actionURL' => route('admin.page.menu.store'),
-            'menuData' => $menuData
+            'menuData' => $menuData,
+            'boardList' => $boardList
         ]);
     }
 
@@ -52,6 +59,7 @@ class MenuController extends Controller
     {
         $rules = [
             'menu_id' => 'nullable|numeric',
+            'board_id' => 'nullable|numeric|exists:tb_board,id',
             'name' => 'string',
             'link' => 'string',
             'target' => 'string|nullable',
@@ -64,6 +72,7 @@ class MenuController extends Controller
 
         $attributes = [
             'menu_id' => '메뉴 PK',
+            'board_id' => '게시판 PK',
             'name' => '메뉴명',
             'link' => 'URL',
             'target' => '새창 여부',
@@ -96,6 +105,7 @@ class MenuController extends Controller
                 $updateData = [
                     'menu_id' => $menuID,
                     'parent_id' => ($posts['parent_id'][$menuID] ?? ''),
+                    'board_id' => ($posts['board_id'][$menuID] ?? ''),
                     'name' => ($posts['name'][$menuID] ?? ''),
                     'link' => ($posts['link'][$menuID] ?? ''),
                     'target' => ($posts['target'][$menuID] ?? ''),
@@ -109,6 +119,7 @@ class MenuController extends Controller
                 $rules = [
                     'menu_id' => 'required|numeric|exists:tb_menu,id',
                     'parent_id' => 'required|numeric|exists:tb_menu,parent_id',
+                    'board_id' => 'required|numeric|exists:tb_board,id',
                     'name' => 'string',
                     'link' => 'string',
                     'target' => 'numeric|in:1,0',
@@ -122,6 +133,7 @@ class MenuController extends Controller
                 $attributes = [
                     'menu_id' => '메뉴 PK',
                     'parent_id' => '부모 메뉴 PK',
+                    'board_id' => '게시판 PK',
                     'name' => '메뉴명',
                     'link' => 'URL',
                     'target' => '새창 여부',

+ 81 - 1
app/Http/Controllers/AdminController.php

@@ -3,9 +3,15 @@
 namespace App\Http\Controllers;
 
 use Illuminate\Http\Request;
+use App\Http\Traits\CommonTrait;
+use App\Models\Visit;
+use App\Models\User;
+use DateTime;
 
 class AdminController extends Controller
 {
+    use CommonTrait;
+
     /**
      * Create a new controller instance.
      *
@@ -28,6 +34,80 @@ class AdminController extends Controller
             abort(401);
         }
 
-        return view('admin.index');
+        $visitStats = $this->_visitStats();
+        $userStats = $this->_userStats();
+
+        return view('admin.index', [
+            'visitStats' => $visitStats,
+            'userStats' => $userStats
+        ]);
+    }
+
+    /**
+     * 방문자 통계
+     */
+    private function _visitStats()
+    {
+        $visitModel = new Visit();
+
+        $monthlyData = $visitModel->getMonthlyData();
+        $arrDt = array_column($monthlyData, 'dt');
+        $arrCntNew = array_column($monthlyData, 'cntNew');
+        $arrCntRe = array_column($monthlyData, 'cntRe');
+        $arrCntTot = array_column($monthlyData, 'cntTot');
+
+        $dates = $this->setArraySingQuote($arrDt);
+        $cntNews = $this->setArraySingQuote($arrCntNew);
+        $cntRes = $this->setArraySingQuote($arrCntRe);
+        $cntTots = $this->setArraySingQuote($arrCntTot);
+
+        return [
+            'monthlyData' => $visitModel->getMonthlyData(),
+            'visitorTodayCount' => $visitModel->todayCount(),
+            'visitorYesterdayCount' => $visitModel->yesterdayCount(),
+            'visitorTotalCount' => $visitModel->totalCount(),
+            'dates' => $dates,
+            'cntNews' => $cntNews,
+            'cntRes' => $cntRes,
+            'cntTots' => $cntTots,
+            'totalCntNew' => array_sum($arrCntNew),
+            'totalCntRe' => array_sum($arrCntRe),
+            'totalCntTo' => array_sum($arrCntTot)
+        ];
+    }
+
+    /**
+     * 회원가입 통계
+     */
+    private function _userStats()
+    {
+        $userModel = new User();
+
+        $dailyData = $userModel->dailyStats();
+        $mapDailyData = array_column($dailyData, 'value', 'date');
+
+        $startDt = new DateTime(now()->subDays(14)->toDateString());
+        $endDt = new DateTime(now()->toDateString());
+
+        $dates = [];
+        for ($i = $startDt; $i <= $endDt; $i->modify('+1 day')) {
+            $dt = $i->format("Y-m-d");
+
+            $dates[$dt] = (array_key_exists($dt, $mapDailyData) ? $mapDailyData[$dt] : 0);
+        }
+
+        $todayCount = $dates[date('Y-m-d')];
+        $cntNews = $this->setArraySingQuote(array_values($dates));
+        $dates = $this->setArraySingQuote(array_keys($dates));
+
+        return [
+            'dailyData' => $dailyData, // 일별 통계
+            'dates' => $dates,
+            'cntNews' => $cntNews,
+            'todayCount' => $todayCount, // 오늘 가입자
+            'weeklyUserCount' => $userModel->totalWeeklyCount(), // 주간 회원가입자 수
+            'monthlyUserCount' => $userModel->totalMonthlyCount(), // 월별 회원가입자 수
+            'totalUserCount' => $userModel->totalUserCount(), // 전체 회원가입자 수
+        ];
     }
 }

+ 21 - 18
app/Http/Controllers/ApiController.php

@@ -19,6 +19,7 @@ class ApiController extends Controller
 {
     public function __construct()
     {
+
     }
 
     /**
@@ -68,25 +69,25 @@ class ApiController extends Controller
      */
     public function isEmailAble(Request $request): bool
     {
-        try{
+        try {
 
             $email = $request->input('email');
-            if(!$email) {
+            if (!$email) {
                 throw new Exception;
             }
 
             // 중복 여부
-            if((new User)->where('email', $email)->exists()) {
+            if ((new User)->where('email', $email)->exists()) {
                 throw new Exception;
             }
 
             // 유효성 확인
-            if(!(new DeniedEmail)->passes(null, $email)) {
+            if (!(new DeniedEmail)->passes(null, $email)) {
                 throw new Exception;
             }
 
             return true;
-        }catch(Exception) {
+        } catch (Exception) {
             return false;
         }
     }
@@ -96,28 +97,28 @@ class ApiController extends Controller
      */
     public function isPasswordAble(Request $request): bool
     {
-        try{
+        try {
 
             $password = $request->input('password');
-            if(!$password) {
+            if (!$password) {
                 throw new Exception;
             }
 
             // 유효성 확인
-            if(!(new SpecialCharLength)->passes(null, $password)) {
+            if (!(new SpecialCharLength)->passes(null, $password)) {
                 throw new Exception;
             }
 
-            if(!(new UppercaseLength)->passes(null, $password)) {
+            if (!(new UppercaseLength)->passes(null, $password)) {
                 throw new Exception;
             }
 
-            if(!(new NumberLength)->passes(null, $password)) {
+            if (!(new NumberLength)->passes(null, $password)) {
                 throw new Exception;
             }
 
             return true;
-        }catch(Exception) {
+        } catch (Exception) {
             return false;
         }
     }
@@ -130,25 +131,27 @@ class ApiController extends Controller
         try {
 
             $nickname = $request->input('nickname');
-            if(!$nickname) {
+            if (!$nickname) {
                 throw new Exception;
             }
 
             // 중복 여부
-            if((new User)->where([
-                ['nickname', $nickname],
-                ['user_id', UID]
-            ])->exists()) {
+            if (
+                (new User)->where([
+                    ['nickname', $nickname],
+                    ['user_id', UID]
+                ])->exists()
+            ) {
                 throw new Exception;
             }
 
             // 유효성 확인
-            if(!(new AllowNickname)->passes(null, $nickname)) {
+            if (!(new AllowNickname)->passes(null, $nickname)) {
                 throw new Exception;
             }
 
             return true;
-        }catch(Exception) {
+        } catch (Exception) {
             return false;
         }
     }

+ 65 - 0
app/Http/Controllers/Auth/ForgotAccountController.php

@@ -0,0 +1,65 @@
+<?php
+
+namespace App\Http\Controllers\Auth;
+
+use Illuminate\Http\Request;
+use App\Http\Controllers\Controller;
+use App\Http\Traits\TossTrait;
+use App\Http\Traits\CryptTrait;
+use App\Models\User;
+use App\Models\TossCertLog;
+use Exception;
+
+class ForgotAccountController extends Controller
+{
+    use TossTrait, CryptTrait;
+
+    public function __construct()
+    {
+        $this->middleware('front');
+    }
+
+    /**
+     * 아이디 찾기
+     * @method GET
+     * @see /auth/findID
+     */
+    public function index()
+    {
+        return view('auth.findID.index', []);
+    }
+
+    /**
+     * 아이디 찾기 결과
+     * @method POST
+     * @see /auth/findID
+     */
+    public function store(Request $request, TossCertLog $tossCertLogModel, User $userModel)
+    {
+        try {
+
+            $token = $request->cookie('tossAccessToken');
+            if (!$token) {
+                throw new Exception('토스 인증 절차가 잘못되었습니다. 다시 시도해주세요.');
+            }
+
+            $txId = $request->post('tx_id');
+            $token = unserialize($token);
+
+            // 토스 본인확인 결과 조회
+            $result = $this->getTossCertResult($token, $txId);
+
+            // 토스 인증 결과 기록
+            $tossCertLogModel->register($result);
+
+            unset($request, $txId, $token, $tossCertLogModel);
+
+            // 아이디 찾기 결과 보기
+            return view('auth.findID.result', [
+                'user' => $userModel->findUserByTossCI($result->success->personalData->ci)
+            ]);
+        } catch (Exception $e) {
+            return redirect()->route('auth.findID')->withErrors('message', $e->getMessage());
+        }
+    }
+}

+ 2 - 2
app/Http/Controllers/Auth/LoginController.php

@@ -142,7 +142,7 @@ class LoginController extends Controller
      */
     public function redirectTo()
     {
-        return request()->post('callback') ?? DIRECTORY_SEPARATOR . config('url_after_login');
+        return request()->post('callback', config('url_after_login', DIRECTORY_SEPARATOR));
     }
 
     /**
@@ -166,7 +166,7 @@ class LoginController extends Controller
      */
     protected function loggedOut(Request $request)
     {
-        if($to = config('url_after_logout')) {
+        if(($to = config('url_after_logout')) && $to != DIRECTORY_SEPARATOR) {
             return redirect($to)->call(function() {
                 Auth::logout();
             });

+ 115 - 15
app/Http/Controllers/Auth/RegisterController.php

@@ -3,19 +3,24 @@
 namespace App\Http\Controllers\Auth;
 
 use Illuminate\Foundation\Auth\RegistersUsers;
+use Illuminate\Support\Carbon;
+use Illuminate\Support\Facades\Mail;
+use Illuminate\Support\Facades\URL;
 use Illuminate\Support\Facades\Validator;
+use Illuminate\Support\Facades\Cache;
 use Illuminate\Http\Request;
-use Illuminate\Auth\Events\Registered;
 use Illuminate\Http\JsonResponse;
 use App\Http\Controllers\Controller;
 use App\Providers\RouteServiceProvider;
 use App\Models\User;
-use App\Models\Document;
+use App\Models\DTO\ResponseData;
+use App\Mail\VerifyLink;
 use App\Rules\AllowNickname;
 use App\Rules\NumberLength;
 use App\Rules\SpecialCharLength;
 use App\Rules\UppercaseLength;
 use App\Rules\DeniedEmail;
+use Exception;
 
 class RegisterController extends Controller
 {
@@ -56,8 +61,8 @@ class RegisterController extends Controller
      */
     public function showRegistrationForm()
     {
-        // 개인정보처리방침
-        $privacy = (new Document)->findByCode('privacy');
+        $policy_1 = nl2br(config('user_register_policy_1')); // 이용약관
+        $policy_2 = nl2br(config('user_register_policy_1')); // 개인정보처리방침
 
         // 비밀번호 조건 확인
         $passwordMinLength = config('password_min_length');
@@ -81,7 +86,8 @@ class RegisterController extends Controller
         $passwordGuideTip = rtrim($passwordGuideTip, ', ');
 
         return view('auth.register', [
-            'privacy' => $privacy,
+            'policy_1' => $policy_1,
+            'policy_2' => $policy_2,
             'passwordGuideTip' => $passwordGuideTip
         ]);
     }
@@ -96,14 +102,14 @@ class RegisterController extends Controller
     {
         return Validator::make($data, [
             'email' => ['required', 'string', 'email', 'max:255', 'unique:users,email', new DeniedEmail],
-            'nickname' => ['required', 'string', 'unique:users,nickname', 'min:2', 'max:20', new AllowNickname],
             'password' => ['required', 'string', 'min:' . config('password_min_length', 4), 'confirmed', new NumberLength, new SpecialCharLength, new UppercaseLength],
+            'nickname' => ['required', 'string', 'min:2', 'max:20', new AllowNickname],
             'agree_1' => 'required|numeric|in:1',
             'agree_2' => 'required|numeric|in:2'
         ], [], [
             'email' => '이메일',
-            'nickname' => '닉네임',
             'password' => '비밀번호',
+            'nickname' => '닉네임',
             'agree_1' => '이용약관 동의',
             'agree_2' => '개인정보처리방침 동의'
         ]);
@@ -129,22 +135,116 @@ class RegisterController extends Controller
     public function register(Request $request)
     {
         // 회원가입 차단 확인
-        if(config('use_register_block')) {
+        if (config('use_register_block')) {
             return back()->withErrors('현재 회원 신청이 차단되어 회원가입을 할 수 없습니다. 관리자에게 문의하십시오.');
         }
 
-        $this->validator($request->all())->validate();
+        $postData = $request->all();
+
+        // 회원가입 유효성 검증
+        $this->validator($postData)->validate();
+
+        $user = $this->create($postData);
+
+        $this->guard()->login($user); // 로그인 처리
+        $user->markEmailAsVerified(); // 이메일 인증 처리
+
+        // 회원가입 이메일 알림
+        $this->registered($request, $user);
+
+        $message = sprintf('%s 님 회원가입을 환영합니다.', $user->name ?? $user->nickname);
+        return $request->wantsJson() ? new JsonResponse([], 201) : redirect($this->redirectPath())->with('message', $message);
+    }
+
+    /**
+     * 이메일 검증 주소 전송
+     * @method POST
+     * @see /auth/register/sendVerifyLink
+     */
+    public function sendVerifyLink(Request $request, ResponseData $response): ResponseData
+    {
+        try {
+
+            $email = $request->post('email');
+
+            if (!$email) {
+                throw new Exception('이메일을 입력해주세요.');
+            }
+
+            if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
+                throw new Exception('이메일 형식이 아닙니다.');
+            }
 
-        event(new Registered($user = $this->create($request->all())));
+            // 중복 여부
+            if ((new User)->where('email', $email)->exists()) {
+                throw new Exception('이미 사용 중인 이메일입니다.');
+            }
 
-        $this->guard()->login($user);
+            // 유효성 확인
+            if (!(new DeniedEmail)->passes(null, $email)) {
+                throw new Exception('입력하신 이메일은 사용하실 수 없습니다.');
+            }
+
+            $token = sha1($email);
+            $verifyExpireTime = Carbon::now()->addMinutes(VERIFY_EXPIRES_AT);
+            $verifyLink = URL::temporarySignedRoute(
+                'auth.register.verifyEmail', $verifyExpireTime, [
+                    'token' => $token
+                ]
+            );
+
+            // 인증 메일 전송
+            Mail::to($email)->send(new VerifyLink($verifyLink, VERIFY_EXPIRES_AT, $email));
+
+            // 인증 메일 캐시 저장
+            Cache::put('verifyEmailToken_' . $token, $token, $verifyExpireTime);
+            Cache::put('verifyEmailStatus_' . $token, 0);
 
-        if ($response = $this->registered($request, $user)) {
             return $response;
+        } catch (Exception $e) {
+            return $response::fromException($e);
         }
+    }
 
-        return $request->wantsJson()
-            ? new JsonResponse([], 201)
-            : redirect($this->redirectPath());
+    /**
+     * 이메일 검증 확인
+     * @method GET
+     * @see /auth/register/verifyEmail/{token}
+     */
+    public function verifyEmail(Request $request)
+    {
+        if (!$request->hasValidSignature()) {
+            abort(404);
+        }
+
+        $token = (string)$request->route('token');
+
+        if (!hash_equals((string)Cache::get('verifyEmailToken_' . $token), $token)) {
+            abort(403);
+        }
+
+        Cache::put('verifyEmailStatus_' . $token, 1);
+
+        return alertClose('이메일 인증이 완료되었습니다.');
+    }
+
+    /**
+     * 이메일 인증 여부 확인
+     * @method GET
+     * @see /auth/register/checkVerifiedEmail
+     */
+    public function checkVerifiedEmail(Request $request): string
+    {
+        return json_encode([
+            'success' => intval(Cache::get('verifyEmailStatus_' . sha1($request->post('email'))))
+        ]);
+    }
+
+    /**
+     * 회원가입 후 처리
+     */
+    public function registered(Request $request, $user)
+    {
+        $this->sendMessageToRegister($user);
     }
 }

+ 5 - 3
app/Http/Controllers/Board/CommentController.php

@@ -121,7 +121,7 @@ class CommentController extends Controller
 
         // 이메일 발송
         $this->commentService->sendEmailNotify($this->comment, (
-            $this->boardMeta->item('use_personal', 0) ? SEND_MAIL_FORM_TYPE_12 : SEND_MAIL_FORM_TYPE_8
+        	$this->boardMeta->item('use_personal', 0) ? SEND_MAIL_FORM_TYPE_12 : SEND_MAIL_FORM_TYPE_8
         ));
 
         unset($result->comment, $this->comment);
@@ -179,7 +179,7 @@ class CommentController extends Controller
 
         // 이메일 발송
         $this->commentService->sendEmailNotify($this->comment, (
-            $this->boardMeta->item('use_personal', 0) ? SEND_MAIL_FORM_TYPE_12 : SEND_MAIL_FORM_TYPE_8
+        	$this->boardMeta->item('use_personal', 0) ? SEND_MAIL_FORM_TYPE_12 : SEND_MAIL_FORM_TYPE_8
         ));
 
         unset($result->comment, $this->comment);
@@ -247,11 +247,13 @@ class CommentController extends Controller
             return $result;
         }
 
-        $this->comment = $request->comment;
+        $this->comment = $result->comment;
 
         // 이메일 발송
         $this->commentService->sendEmailNotify($this->comment, SEND_MAIL_FORM_TYPE_10);
 
+        unset($result->comment, $this->comment);
+
         return $result;
     }
 

+ 11 - 2
app/Http/Controllers/Board/PostController.php

@@ -27,7 +27,8 @@ class PostController extends Controller
         BoardService $boardService,
         PostService $postService
     ) {
-        $this->middleware(['front', 'authed']);
+        $this->middleware('authed');
+        $this->middleware('front')->only(['view', 'write', 'edit', 'uploader']);
 
         // 인증 필수
         $this->middleware('auth')->only([
@@ -184,7 +185,7 @@ class PostController extends Controller
 
         // 이메일 발송
         $this->postService->sendEmailNotify($this->post, (
-            $this->boardMeta->item('use_personal', 0) ? SEND_MAIL_FORM_TYPE_11 : SEND_MAIL_FORM_TYPE_7
+        	$this->boardMeta->item('use_personal', 0) ? SEND_MAIL_FORM_TYPE_11 : SEND_MAIL_FORM_TYPE_7
         ));
 
         return redirect()->route('board.post.view', [
@@ -268,6 +269,8 @@ class PostController extends Controller
             return $result;
         }
 
+        unset($result->post, $this->post);
+
         return $result;
     }
 
@@ -296,6 +299,8 @@ class PostController extends Controller
         // 이메일 발송
         $this->postService->sendEmailNotify($this->post, SEND_MAIL_FORM_TYPE_9);
 
+        unset($result->post, $this->post);
+
         return $result;
     }
 
@@ -326,6 +331,8 @@ class PostController extends Controller
         // 게시글 좋아요 받음 (상대방)
         $this->postService->setUserExp($post, $post->user, EXP_TYPE_19);
 
+        unset($result->post, $this->post);
+
         return $result;
     }
 
@@ -356,6 +363,8 @@ class PostController extends Controller
         // 게시글 싫어요 받음 (상대방)
         $this->postService->setUserExp($post, $post->user, EXP_TYPE_20);
 
+        unset($result->post, $this->post);
+
         return $result;
     }
 

+ 53 - 0
app/Http/Controllers/Board/TagController.php

@@ -0,0 +1,53 @@
+<?php
+
+namespace App\Http\Controllers\Board;
+
+use Illuminate\Http\Request;
+use Illuminate\Http\JsonResponse;
+use App\Http\Controllers\Controller;
+use App\Models\DTO\SearchData;
+use App\Services\TagService;
+
+/**
+ * 2026.01.07 작성
+ */
+class TagController extends Controller
+{
+    private TagService $tagService;
+
+    public function __construct(TagService $tagService) 
+    {
+        $this->middleware('front');
+
+        $this->tagService = $tagService;
+    }
+
+    /**
+     * 태그 보기
+     * @method GET
+     * @see /tags
+     */
+    public function index(Request $request)
+    {
+        $tags = $this->tagService->getAllTags();
+
+        return view(layout('board.tag'), [
+            'tags' => $tags,
+        ]);
+    }
+
+    /**
+     * 태그에 연결된 게시글 조회
+     * @method GET
+     * @see /tag/posts?={tag}
+     */
+    public function posts(Request $request): JsonResponse
+    {
+        $params = SearchData::fromRequest($request);
+        $data = $this->tagService->getPostsByTag($params);
+
+        return response()->json([
+            'data' => $data,
+        ]);
+    }
+}

+ 1 - 1
app/Http/Kernel.php

@@ -20,7 +20,7 @@ class Kernel extends HttpKernel
         \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
         \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
         \App\Http\Middleware\TrimStrings::class,
-        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
+        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class
     ];
 
     /**

+ 0 - 1
app/Http/Middleware/Board/BoardAccess.php

@@ -3,7 +3,6 @@
 namespace App\Http\Middleware\Board;
 
 use Closure;
-use Dflydev\DotAccessData\Data;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Gate;
 use App\Services\BoardService;

+ 28 - 10
app/Http/Middleware/Prepare/Admin.php

@@ -20,7 +20,7 @@ class Admin
      */
     public function handle($request, Closure $next)
     {
-        $menus = config(key: 'menus');
+        $menus = config('menus');
 
         // 관리자 메뉴 설정
         $routers = $this->routers($menus);
@@ -71,19 +71,33 @@ class Admin
     {
         $menu = Menu::new();
 
+        $segments = request()->segments();
         foreach ($menus as $row) {
             $info = (key($row) == '/' ? current($row) : $row);
             $router = (array_key_exists($info[1], $routers) ? $routers[$info[1]] : "");
 
             try {
 
-                $link = Link::to(url($router),
-                    (
-                        ($info[3] ? Html::raw(sprintf('<i class="%s"></i>', $info[3]))->render() : '') .
-                        Html::raw(sprintf('<span class="ps-2">%s</span>', $info[2]))->render()
-                    )
-                )->addClass('nav-link')->setActive(function () use($router) {
-                    return request()->is($router);
+                $link = Link::to(url($router), (
+                    ($info[3] ? Html::raw(sprintf('<i class="%s"></i>', $info[3]))->render() : '') .
+                    Html::raw(sprintf('<span class="ps-2">%s</span>', $info[2]))->render()
+                ))->addClass('nav-link')->setActive(function () use ($router, $routers, $segments) {
+                    $d1 = array_filter($segments);
+                    $d2 = array_filter(explode(DIRECTORY_SEPARATOR, $router));
+                    $c = count(array_diff($d1, $d2));
+                    $e = join(DIRECTORY_SEPARATOR, $d1);
+
+                    if (in_array($e, $routers)) {
+                        if ($c == 0 && ($router == $e)) {
+                            return true;
+                        }
+                    } else if (count($d1) == count($d2)) {
+                        if ($c == 1) {
+                            array_splice($d2, -1, 1);
+                            return request()->is(join(DIRECTORY_SEPARATOR, $d2) . '/*');
+                        }
+                    }
+                    return false;
                 });
 
                 if (isset($info[5]) && $info[5]) {
@@ -97,7 +111,7 @@ class Admin
                             'role' => 'button',
                             'aria-expanded' => 'false',
                             'aria-controls' => $id
-                        ])->setActive(function () use($router) {
+                        ])->setActive(function () use ($router) {
                             return request()->is($router . '/*');
                         }),
 
@@ -109,17 +123,21 @@ class Admin
                                 sprintf('<div id="%s" class="collapse">%s</div>', $id, $this->buildMenu($info[5], $routers))
                             )
                     );
-                }else{
+                } else {
                     $menu->add(
                         $link
                     );
                 }
 
+                unset($info, $router, $link);
+
             } catch (Exception) {
                 exit('관리자 메뉴 설정 값이 잘못되었습니다.');
             }
         }
 
+        unset($menus, $routers, $segments);
+
         return $menu->addClass('nav flex-column');
     }
 }

+ 4 - 4
app/Http/Middleware/Prepare/Front.php

@@ -63,11 +63,11 @@ class Front
         $visit = new Visit();
         $visit->register($request); // 방문자 수 기록
 
-        View::share('visitorTodayCount', $visit->todayCount());
-        View::share('visitorYesterdayCount', $visit->yesterdayCount());
-        View::share('visitorTotalCount', $visit->totalCount());
+        View::share('visitorTodayCount', $visit->todayCount());  // 오늘
+        View::share('visitorYesterdayCount', $visit->yesterdayCount()); // 어제
+        View::share('visitorTotalCount', $visit->totalCount()); // 누적
 
-        unset($menuData, $ret, $visit);
+        unset($menuData, $ret, $visit, $menuModel);
 
         return $next($request);
     }

+ 1 - 1
app/Http/Middleware/TrustProxies.php

@@ -12,7 +12,7 @@ class TrustProxies extends Middleware
      *
      * @var array<int, string>|string|null
      */
-    protected $proxies = "*";
+    protected $proxies = '*';
 
     /**
      * The headers that should be used to detect proxies.

+ 15 - 10
app/Http/Traits/AgentTrait.php

@@ -45,37 +45,42 @@ trait AgentTrait
     // 단말기 정보
     public function deviceType(): int
     {
-        if($this->isDesktop()) {
+        if ($this->isDesktop()) {
             return DEVICE_TYPE_1; // desktop
-        }else if($this->isPhone()) {
+        } else if ($this->isPhone()) {
             return DEVICE_TYPE_2; // phone
-        }else if($this->isMobile()) {
+        } else if ($this->isMobile()) {
             return DEVICE_TYPE_3; // mobile
-        }else if($this->isTablet()) {
+        } else if ($this->isTablet()) {
             return DEVICE_TYPE_4; // tablet
-        }else if($this->isRobot()) {
+        } else if ($this->isRobot()) {
             return DEVICE_TYPE_5; // robot
         }
         return DEVICE_TYPE_0; // ALL
     }
 
-    public function isDesktop() {
+    public function isDesktop()
+    {
         return (new Agent)->isDesktop();
     }
 
-    public function isMobile() {
+    public function isMobile()
+    {
         return (new Agent)->isMobile();
     }
 
-    public function isPhone() {
+    public function isPhone()
+    {
         return (new Agent)->isPhone();
     }
 
-    public function isTablet() {
+    public function isTablet()
+    {
         return (new Agent)->isTablet();
     }
 
-    public function isRobot() {
+    public function isRobot()
+    {
         return (new Agent)->isRobot();
     }
 }

+ 7 - 7
app/Http/Traits/CommonTrait.php

@@ -27,9 +27,9 @@ trait CommonTrait
      */
     public function passwordAuthed(string|null $plainPassword): bool
     {
-        if($plainPassword) {
+        if ($plainPassword) {
             $hashPassword = Auth::user()->getAuthPassword();
-            if(Hash::check($plainPassword, $hashPassword)) {
+            if (Hash::check($plainPassword, $hashPassword)) {
                 return true;
             }
         }
@@ -65,9 +65,9 @@ trait CommonTrait
         } elseif ($y > $diff && $diff >= $d) {
             $ret = round($diff / $d) . '일전';
         } else {
-            if($format) {
+            if ($format) {
                 $ret = now()->setTimeFromTimeString($datetime)->format($format);
-            }else{
+            } else {
                 $ret = date('Y.m.d H:i:s', strtotime($datetime));
             }
         }
@@ -154,7 +154,7 @@ trait CommonTrait
         preg_match_all("/<img[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*>/i", $html, $matches);
 
         if(array_key_exists(1, $matches)) {
-            return current($matches[1]);
+            return current($matches[1]) ?: null;
         }
 
         $iframeVideoSrc = $this->getYoutubeKey(getIframeTag($html, true)); // iframe src 추출
@@ -262,10 +262,10 @@ trait CommonTrait
         return implode('', array_reverse($res));
     }
 
-    /*
+    /**
      * Unique 반환
      */
-    public function makeUniqueKey(int $length): int
+    public function makeUniqueKey(int $length): string
     {
         return Str::random($length);
     }

+ 68 - 0
app/Http/Traits/CryptTrait.php

@@ -0,0 +1,68 @@
+<?php
+
+namespace App\Http\Traits;
+
+use phpseclib3\Crypt\AES;
+use phpseclib3\Crypt\PublicKeyLoader;
+use phpseclib3\Crypt\RSA;
+
+trait CryptTrait
+{
+    protected string $base64PublicKey = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAoVdxG0Qi9pip46Jw9ImSlPVD8+L2mM47ey6EZna7D7utgNdh8Tzkjrm1Yl4h6kPJrhdWvMIJGS51+6dh041IXcJEoUquNblUEqAUXBYwQM8PdfnS12SjlvZrP4q6whBE7IV1SEIBJP0gSK5/8Iu+uld2ctJiU4p8uswL2bCPGWdvVPltxAg6hfAG/ImRUKPRewQsFhkFvqIDCpO6aeaR10q6wwENZltlJeeRnl02VWSneRmPqqypqCxz0Y+yWCYtsA+ngfZmwRMaFkXcWjaWnvSqqV33OAsrQkvuBHWoEEkvQ0P08+h9Fy2+FhY9TeuukQ2CVFz5YyOhp25QtWyQI+IaDKk+hLxJ1APR0c3tmV0ANEIjO6HhJIdu2KQKtgFppvqSrZp2OKtI8EZgVbWuho50xvlaPGzWoMi9HSCb+8ARamlOpesxHH3O0cTRUnft2Zk1FHQb2Pidb2z5onMEnzP2xpTqAIVQyb6nMac9tof5NFxwR/c4pmci+1n8GFJIFN18j2XGad1mNyio/R8LabqnzNwJC6VPnZJz5/pDUIk9yKNOY0KJe64SRiL0a4SNMohtyj6QlA/3SGxaEXb8UHpophv4G9wN1CgfyUamsRqp8zo5qDxBvlaIlfkqJvYPkltj7/23FHDjPi8q8UkSiAeu7IV5FTfB5KsiN8+sGSMCAwEAAQ==";
+
+    protected function generateSessionId(): string
+    {
+        $data = random_bytes(16);
+        $data[6] = chr(ord($data[6]) & 0x0f | 0x40); // set version to 0100
+        $data[8] = chr(ord($data[8]) & 0x3f | 0x80); // set bits 6-7 to 10
+
+        return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
+    }
+
+    protected function generateRandomBytes(int $length): string
+    {
+        return base64_encode(random_bytes($length));
+    }
+
+    protected function generateSessionKey(string $sessionId, string $secretKey, string $iv): string
+    {
+        $sessionAesKey = "AES_GCM$" . $secretKey . "$" . $iv;
+        $encryptedSessionAesKey = $this->encryptSessionAesKey($sessionAesKey);
+
+        return "v1$" . $sessionId . "$" . $encryptedSessionAesKey;
+    }
+
+    protected function encryptSessionAesKey(string $sessionAesKey): string
+    {
+        $rsa = PublicKeyLoader::load($this->base64PublicKey)->withPadding(RSA::ENCRYPTION_OAEP)->withHash('sha1')->withMGFHash('sha1');
+
+        return base64_encode($rsa->encrypt($sessionAesKey));
+    }
+
+    protected function encryptData(string $sessionId, string $secretKey, string $iv, string $data): string
+    {
+        $cipher = new AES('gcm');
+        $cipher->setKey(base64_decode($secretKey));
+        $cipher->setNonce(base64_decode($iv));
+        $cipher->setAAD(base64_decode($secretKey));
+
+        $encrypted = $cipher->encrypt($data);
+        $combined = base64_encode($encrypted . $cipher->getTag());
+        return 'v1$' . $sessionId . '$' . $combined;
+    }
+
+    protected function decryptData(string $secretKey, string $iv, string $encryptedData): string
+    {
+        $parsed = base64_decode(explode('$', $encryptedData)[2]);
+        $encrypted = substr($parsed, 0, strlen($parsed) - 16);
+        $tag = substr($parsed, strlen($parsed) - 16);
+
+        $cipher = new AES('gcm');
+        $cipher->setKey(base64_decode($secretKey));
+        $cipher->setNonce(base64_decode($iv));
+        $cipher->setAAD(base64_decode($secretKey));
+        $cipher->setTag($tag);
+
+        return $cipher->decrypt($encrypted);
+    }
+}

+ 6 - 9
app/Mail/VerifyCode.php

@@ -14,19 +14,17 @@ class VerifyCode extends Mailable implements ShouldQueue
     use Queueable, SerializesModels;
 
     private int $verifyCode;
-    private int $verifyExpiresAt;
-    private int $uid;
+    private string $email;
 
     /**
      * Create a new message instance.
      *
      * @return void
      */
-    public function __construct(int $verifyCode, int $verifyExpiresAt, int $uid)
+    public function __construct(int $verifyCode, string $email)
     {
         $this->verifyCode = $verifyCode;
-        $this->verifyExpiresAt = $verifyExpiresAt;
-        $this->uid = $uid;
+        $this->email = $email;
     }
 
     /**
@@ -37,7 +35,7 @@ class VerifyCode extends Mailable implements ShouldQueue
     public function envelope()
     {
         return new Envelope(
-            subject: '이메일 소유자 확인',
+            subject: '이메일 소유자 확인 인증번호입니다.',
         );
     }
 
@@ -49,11 +47,10 @@ class VerifyCode extends Mailable implements ShouldQueue
     public function content()
     {
         return new Content(
-            view: 'emails.account.email-verify',
+            view: 'emails.verifyCode',
             with: [
                 'verifyCode' => $this->verifyCode,
-                'verifyExpiresAt' => $this->verifyExpiresAt,
-                'uid' => $this->uid
+                'email' => $this->email
             ]
         );
     }

+ 70 - 0
app/Mail/VerifyLink.php

@@ -0,0 +1,70 @@
+<?php
+
+namespace App\Mail;
+
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Mail\Mailable;
+use Illuminate\Mail\Mailables\Content;
+use Illuminate\Mail\Mailables\Envelope;
+use Illuminate\Queue\SerializesModels;
+
+class VerifyLink extends Mailable implements ShouldQueue
+{
+    use Queueable, SerializesModels;
+
+    private string $verifyLink;
+    private int $verifyExpireMinute;
+    private string $email;
+
+    /**
+     * Create a new message instance.
+     *
+     * @return void
+     */
+    public function __construct(string $verifyLink, int $verifyExpireMinute, string $email)
+    {
+        $this->verifyLink = $verifyLink;
+        $this->verifyExpireMinute = $verifyExpireMinute;
+        $this->email = $email;
+    }
+
+    /**
+     * Get the message envelope.
+     *
+     * @return \Illuminate\Mail\Mailables\Envelope
+     */
+    public function envelope()
+    {
+        return new Envelope(
+            subject: '이메일 소유자 확인을 요청합니다.',
+        );
+    }
+
+    /**
+     * Get the message content definition.
+     *
+     * @return \Illuminate\Mail\Mailables\Content
+     */
+    public function content()
+    {
+        return new Content(
+            view: 'emails.verifyLink',
+            with: [
+                'verifyLink' => $this->verifyLink,
+                'verifyExpireMinute' => $this->verifyExpireMinute,
+                'email' => $this->email
+            ]
+        );
+    }
+
+    /**
+     * Get the attachments for the message.
+     *
+     * @return array
+     */
+    public function attachments()
+    {
+        return [];
+    }
+}

+ 1 - 2
app/Models/BoardMeta.php

@@ -17,7 +17,6 @@ class BoardMeta extends Model
     public string $metaKey = 'key';
     public string $metaValue = 'value';
     public string $cachePrefix = 'board-meta-';
-    public int $cacheTime = CACHE_EXPIRE_TIME;
 
     public function __set($name, $value)
     {
@@ -52,7 +51,7 @@ class BoardMeta extends Model
         $cacheName = ($this->cachePrefix . $boardID);
         if (!$ret = Cache::get($cacheName)) {
             $ret = $this->data($boardID);
-            Cache::put($cacheName, $ret, $this->cacheTime);
+            Cache::forever($cacheName, $ret);
         }
         return $ret;
     }

+ 1 - 1
app/Models/Comment.php

@@ -457,7 +457,7 @@ class Comment extends Model
         return DB::selectOne($sql, [
             'commentID' => $commentID,
             'perPage' => $perPage
-        ])->page;
+        ])->page ?? 1;
     }
 
     /**

+ 1 - 1
app/Models/CommentLike.php

@@ -143,7 +143,7 @@ class CommentLike extends Model
     /**
      * 회원이 좋아요/싫어요 둘중 어느것 선택했는지 확인
      */
-    public function isAlready(Comment $comment, int $userID, int $type): bool
+    public function isAlready(Comment $comment, ?int $userID, int $type): bool
     {
         return $this->where([
             ['post_id', $comment->post_id],

+ 16 - 22
app/Models/Config.php

@@ -32,17 +32,17 @@ class Config extends Model
     /**
      * 모든 관리자 설정 값 조회
      */
-    public function getAllMeta(): object|array
+    public function getAllMeta(): ?Config
     {
         $cacheName = $this->cacheName;
         if (!$result = Cache::get($cacheName)) {
             $res = $this->get();
             if ($res) {
-                $result = [];
                 foreach ($res as $val) {
-                    $result[$val[$this->metaKey]] = $val[$this->metaValue];
+                    $this->{$val[$this->metaKey]} = $val[$this->metaValue];
                 }
-                Cache::forever($cacheName, (object)$result);
+                $result = $this;
+                Cache::put($cacheName, $this, $this->cacheTime);
             }
         }
         return $result;
@@ -74,11 +74,11 @@ class Config extends Model
             return false;
         }
 
-        $meta = (array)$this->getAllMeta();
-
-        $return = $default;
-        if (array_key_exists($column, $meta)) {
-            $return = $meta[$column];
+        $data = $this->getAllMeta();
+        if (property_exists($data, $column)) {
+            $return = $data->{$column};
+        } else {
+            $return = $default;
         }
 
         return $return;
@@ -87,32 +87,26 @@ class Config extends Model
     /**
      * 등록/수정
      */
-    private function _metaUpdate($column = '', $value = false, $description = ''): mixed
+    private function _metaUpdate($column = '', $value = false, $description = ''): bool|string
     {
         $column = trim($column);
         if (empty($column)) {
             return false;
         }
 
-        $oldValue = $this->item($column);
+        $items = $this->getAllMeta();
 
-        if (empty($value) && $value != 0) {
-            $value = '';
-        }
-        if ($value === $oldValue) {
-            return false;
-        }
-        if (false === $oldValue) {
+        if (property_exists($items, $column)) {
+            return $this->_updateMeta($column, $value, $description); // 수정
+        } else {
             return $this->_addMeta($column, $value, $description); // 새로 추가
         }
-
-        return $this->_updateMeta($column, $value, $description); // 수정
     }
 
     /**
      * 등록
      */
-    private function _addMeta($column = '', $value = '', $description = ''): mixed
+    private function _addMeta($column = '', $value = '', $description = ''): bool
     {
         $column = trim($column);
         if (empty($column)) {
@@ -131,7 +125,7 @@ class Config extends Model
     /**
      * 수정
      */
-    private function _updateMeta($column = '', $value = '', $description = ''): mixed
+    private function _updateMeta($column = '', $value = '', $description = ''): bool
     {
         $column = trim($column);
         if (empty($column)) {

+ 65 - 26
app/Models/DTO/SearchData.php

@@ -8,47 +8,86 @@ use Illuminate\Http\JsonResponse;
 
 class SearchData implements Responsable
 {
+    private array $extra = [];
+
+    public function __construct(
+        public int $page,
+        public int $perPage,
+        public int $pageCount,
+        public int $offset = 0,
+        public ?int $sort = null,
+        public ?string $field = null,
+        public ?string $keyword = null,
+        public ?string $startDate = null,
+        public ?string $endDate = null,
+        array $extra = []
+    ) {
+        $this->extra = $extra;
+    }
+
     public static function fromRequest(Request $request): static
     {
-        $page = intval($request->input('page', 1));
-        $perPage = intval($request->input('per_page', $request->input('perPage', DEFAULT_LIST_PER_PAGE)));
-        $pageCount = intval($request->input('page_count', $request->input('pageCount', DEFAULT_LIST_PAGE_COUNT)));
-        $offset = (($page - 1) * $perPage);
-
-        $res = new static();
-        $res->page = $page;
-        $res->perPage = $perPage;
-        $res->pageCount = $pageCount;
-        $res->offset = $offset;
-        $res->field = $request->input('field');
-        $res->keyword = $request->input('keyword');
-        $res->startDate = $request->input('start_date');
-        $res->endDate = $request->input('end_date');
-        $res->sort = $request->input('sort', 1);
-
-        foreach(array_merge($request->route()->parameters(), $request->all()) as $k => $v) {
-            if(!property_exists($res, $k)) {
-                $res->{$k} = $v;
+        $page      = max(1, (int)$request->input('page', 1));
+        $perPage   = max(1, (int)$request->input('per_page', $request->input('perPage', DEFAULT_LIST_PER_PAGE)));
+        $pageCount = max(1, (int)$request->input('page_count', $request->input('pageCount', DEFAULT_LIST_PAGE_COUNT)));
+        $offset    = ($page - 1) * $perPage;
+
+        $dto = new self(
+            page: $page,
+            perPage: $perPage,
+            pageCount: $pageCount,
+            offset: $offset,
+            sort: (int)$request->input('sort', 1),
+            field: $request->input('field'),
+            keyword: $request->input('keyword'),
+            startDate: $request->input('start_date'),
+            endDate: $request->input('end_date')
+        );
+
+        $merged = array_merge($request->route()?->parameters() ?? [] , $request->all());
+
+        foreach ($merged as $key => $value) {
+            if (!property_exists($dto, $key)) {
+                $dto->{$key} = $value;
             }
         }
 
-        unset($page, $perPage, $pageCount, $offset);
+        return $dto;
+    }
+
+    public function __set(string $name, mixed $value): void
+    {
+        // readonly core ÇÊµå ¿À¿° ¹æÁö
+        if (property_exists($this, $name)) {
+            throw new \LogicException("Cannot set '{$name}' on SearchData (readonly property).");
+        }
 
-        return $res;
+        $this->extra[$name] = $value;
     }
 
-    public function __set($name, $value)
+    public function __get(string $name): mixed
     {
-        $this->{$name} = $value;
+        return $this->extra[$name] ?? null;
     }
 
-    public function __get($name): mixed
+    public function __isset(string $name): bool
     {
-        return ($this->{$name} ?? null);
+        return isset($this->extra[$name]);
     }
 
     public function toResponse($request): JsonResponse
     {
-        return response()->json($this);
+        return response()->json([
+            'page' => $this->page,
+            'perPage' => $this->perPage,
+            'pageCount' => $this->pageCount,
+            'offset' => $this->offset,
+            'sort' => $this->sort,
+            'field' => $this->field,
+            'keyword' => $this->keyword,
+            'startDate' => $this->startDate,
+            'endDate' => $this->endDate,
+            ...$this->extra
+        ]);
     }
 }

+ 4 - 4
app/Models/EmailLib.php

@@ -108,7 +108,7 @@ class EmailLib
         try {
 
             if (count($this->mails) > 0) {
-                $configs = $this->_replace();
+                $configs = $this->replaceValues();
 
                 foreach ($this->mails as $user) {
                     // 발송 양식
@@ -124,8 +124,8 @@ class EmailLib
                         '{메일수신여부}' => ($user->receive_email ? '동의' : '거부'),
                         '{문자수신여부}' => ($user->receive_sms ? '동의' : '거부'),
                         '{쪽지수신여부}' => ($user->receive_note ? '동의' : '거부'),
-                        '{최종로그인시간}' => $user->last_login_at->format('Y년 m월 d일 H시i분'),
-                        '{휴면전환예정일}' => $user->last_login_at->addYear(1)->format('Y년 m월 d일')
+                        '{최종로그인시간}' => $user->last_login_at?->format('Y년 m월 d일 H시i분'),
+                        '{휴면전환예정일}' => $user->last_login_at?->addYear(1)->format('Y년 m월 d일')
                     ]);
 
                     $html = View::make('component.form.email', ['content' => $content])->render();
@@ -160,7 +160,7 @@ class EmailLib
     /**
      * 치환 대상 변수
      */
-    private function _replace($config = new Config()): array
+    public function replaceValues($config = new Config()): array
     {
         return [
             '{홈페이지명}' => $config->item('site_title'),

+ 7 - 7
app/Models/FileLib.php

@@ -31,14 +31,14 @@ class FileLib
      */
     public function getPublicPath(string $uploadType, string|null $addPath = null): string
     {
-        return (join(DIRECTORY_SEPARATOR, [
+        return join(DIRECTORY_SEPARATOR, [
             UPLOAD_PATH_PUBLIC,
             $uploadType,
             date('Y'),
             date('m'),
             date('d'),
             $addPath
-        ]) . DIRECTORY_SEPARATOR);
+        ]);
     }
 
     /*
@@ -55,7 +55,7 @@ class FileLib
     public function removePath(string $uploadType, string|null $addPath = null): void
     {
         $storagePath = $this->getStoragePath($uploadType, $addPath);
-        if(is_dir($storagePath)) {
+        if (is_dir($storagePath)) {
             foreach (scandir($storagePath) as $file) {
                 if (in_array($file, ['.', '..'])) {
                     continue;
@@ -63,9 +63,9 @@ class FileLib
 
                 $path = ($storagePath . DIRECTORY_SEPARATOR . $file);
 
-                if(is_dir($path)) {
+                if (is_dir($path)) {
                     $this->removePath($uploadType, $addPath . DIRECTORY_SEPARATOR . $file);
-                }else{
+                } else {
                     unlink($path);
                 }
             }
@@ -470,7 +470,7 @@ class FileLib
                 }
 
                 if (!in_array($file, $images)) { // 에디터에 없는 이미지면 삭제
-                    $filePath = ($storagePath . $file);
+                    $filePath = ($storagePath . DIRECTORY_SEPARATOR . $file);
                     if (is_dir($filePath)) {
                         continue;
                     }
@@ -481,7 +481,7 @@ class FileLib
 
             // 이미지가 없으면 디렉토리 삭제
             if (count($images) <= 0) {
-                if(unlink($storagePath . 'index.php')) {
+                if(unlink($storagePath . DIRECTORY_SEPARATOR . 'index.php')) {
                     rmdir($storagePath);
                 }
             }

+ 4 - 2
app/Models/Menu.php

@@ -71,6 +71,7 @@ class Menu extends Model
     {
         $insertData = [
             $insertData['menu_id'],
+            $insertData['board_id'],
             $insertData['name'],
             $insertData['link'],
             $insertData['target'],
@@ -81,7 +82,7 @@ class Menu extends Model
             $insertData['depth']
         ];
 
-        $menuID = DB::selectOne("CALL SP_MENU_SAVE(?, ?, ?, ?, ?, ?, ?, ?, ?);", $insertData)->id;
+        $menuID = DB::selectOne("CALL SP_MENU_SAVE(?, ?, ?, ?, ?, ?, ?, ?, ?, ?);", $insertData)->id;
 
         $this->reload();
         return $menuID;
@@ -92,9 +93,10 @@ class Menu extends Model
      */
     public function updater(array $updateData): void
     {
-        DB::select("CALL SP_MENU_UPDATE(?, ?, ?, ?, ?, ?, ?, ?, ?, ?);", [
+        DB::select("CALL SP_MENU_UPDATE(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);", [
             $updateData['menu_id'],
             $updateData['parent_id'],
+            $updateData['board_id'],
             $updateData['name'],
             $updateData['link'],
             $updateData['target'],

+ 1 - 1
app/Models/PostBookmark.php

@@ -56,7 +56,7 @@ class PostBookmark extends Model
     /**
      * 게시글 즐겨찾기 되어있는지 확인
      */
-    public function isAlready(Post $post, int $userID): bool
+    public function isAlready(Post $post, ?int $userID): bool
     {
         return $this->where([
             ['board_id', $post->board_id],

+ 1 - 1
app/Models/PostLike.php

@@ -136,7 +136,7 @@ class PostLike extends Model
     /**
      * 회원이 좋아요/싫어요 둘중 어느것 선택했는지 확인
      */
-    public function isAlready(Post $post, int $userID, int $type): bool
+    public function isAlready(Post $post, ?int $userID, int $type): bool
     {
         return $this->where([
             ['board_id', $post->board_id],

+ 3 - 3
app/Models/PostLink.php

@@ -118,7 +118,7 @@ class PostLink extends Model
                         'board_id' => $post->board_id,
                         'post_id' => $post->id,
                         'url' => $url,
-                        'hit' => 0,
+                        'hits' => 0,
                         'ip_address' => IP_ADDRESS,
                         'user_agent' => USER_AGENT,
                         'created_at' => now()
@@ -141,7 +141,7 @@ class PostLink extends Model
                 if ($url) {
                     DB::statement("
                         REPLACE INTO tb_post_link
-                        SET id = ?, board_id = ?, post_id = ?, url = ?, hit = ?, ip_address = ?, user_agent = ?, created_at = NOW();
+                        SET id = ?, board_id = ?, post_id = ?, url = ?, hits = ?, ip_address = ?, user_agent = ?, created_at = NOW();
                     ", [
                         $linkID,
                         $post->board_id,
@@ -196,6 +196,6 @@ class PostLink extends Model
      */
     public function increaseHit(int $linkID): int
     {
-        return $this->where('id', $linkID)->increment('hit');
+        return $this->where('id', $linkID)->increment('hits');
     }
 }

+ 75 - 1
app/Models/PostTag.php

@@ -4,6 +4,7 @@ namespace App\Models;
 
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Collection;
 use App\Models\DTO\SearchData;
 
 class PostTag extends Model
@@ -160,4 +161,77 @@ class PostTag extends Model
             ['post_id', $post->id]
         ])->delete();
     }
-}
+
+    /**
+     * 태그 목록 조회
+     */
+    public function getAllTags(): Collection
+    {
+        $sql = "
+            SELECT
+                PSTG.tag AS name,
+                COUNT(DISTINCT PSTG.post_id) AS count
+            FROM tb_post_tag PSTG
+            INNER JOIN tb_post PST
+                ON PST.id = PSTG.post_id
+            WHERE PST.is_delete = 0
+            GROUP BY PSTG.tag
+            ORDER BY PSTG.tag ASC;
+        ";
+
+        return collect(DB::select($sql));
+    }
+
+    /**
+     * 태그별 게시글 조회
+     */
+    public function getPostsByTag(SearchData $params): object
+    {
+        $sql = "
+            SELECT COUNT(DISTINCT PST.id) AS total FROM tb_post PST JOIN tb_post_tag PSTG ON PST.id = PSTG.post_id WHERE PST.is_delete = 0 AND PSTG.tag = ?;
+        ";
+
+        $total = DB::selectOne($sql, [$params->name])->total;
+
+        $sql = "
+             SELECT
+                PST.id,
+                PST.board_id,
+                PST.user_id,
+                PST.thumbnail,
+                PST.subject,
+                PST.content,
+                PST.created_at,
+                BRD.name AS boardName,
+                BRD.code AS boardCode,
+                USR.sid AS userSID,
+                USR.name AS userName,
+                GROUP_CONCAT(DISTINCT PSTG_all.tag ORDER BY PSTG_all.tag SEPARATOR ', ') AS tags
+            FROM tb_post PST
+            INNER JOIN tb_post_tag PSTG ON PSTG.post_id = PST.id
+            INNER JOIN tb_board BRD ON BRD.id = PST.board_id
+            LEFT JOIN users USR ON USR.id = PST.user_id
+            LEFT JOIN tb_post_tag PSTG_all ON PSTG_all.post_id = PST.id
+            WHERE PST.is_delete = 0 AND PSTG.tag = ?
+            GROUP BY
+                PST.id, PST.board_id, PST.user_id, PST.subject, PST.created_at, BRD.name, BRD.code, USR.sid, USR.name
+            ORDER BY
+                PST.created_at DESC, PST.id DESC
+            LIMIT ? OFFSET ?;
+        ";
+
+        $list = DB::select($sql, [
+            $params->name,
+            $params->perPage,
+            $params->offset
+        ]);
+
+        $rows = count($list);
+
+        return (object)[
+            'total' => $total,
+            'rows' => $rows,
+            'list' => $list
+        ];
+    }
+}

+ 94 - 22
app/Models/User.php

@@ -10,13 +10,15 @@ use Laravel\Sanctum\HasApiTokens;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Hash;
 use Illuminate\Support\Facades\DB;
+use App\Http\Traits\CommonTrait;
 use App\Http\Traits\AgentTrait;
+use App\Http\Traits\CryptTrait;
 use App\Models\DTO\SearchData;
 use App\Notifications\VerifyNotify;
 
 class User extends Authenticatable implements MustVerifyEmail
 {
-    use HasApiTokens, HasFactory, Notifiable, AgentTrait;
+    use HasApiTokens, HasFactory, Notifiable, AgentTrait, CommonTrait, CryptTrait;
 
     protected $table = 'users';
     protected $primaryKey = 'id';
@@ -100,10 +102,20 @@ class User extends Authenticatable implements MustVerifyEmail
         'password_updated_at'
     ];
 
+    public function userGroup()
+    {
+        return $this->belongsTo(UserGroup::class)->withDefault();
+    }
+
+    public function userGrade()
+    {
+        return $this->belongsTo(UserGrade::class)->withDefault();
+    }
+
     /**
      * 회원 비밀번호 조회
      */
-    public function getAuthPassword()
+    public function getAuthPassword(): string
     {
         return $this->password;
     }
@@ -128,7 +140,7 @@ class User extends Authenticatable implements MustVerifyEmail
     }
 
     /**
-     * 회원 Email로 조회
+     * 회원 이메일로 조회
      */
     public function findByEmail(string $sid): User
     {
@@ -157,7 +169,7 @@ class User extends Authenticatable implements MustVerifyEmail
     /**
      * 회원 ID Unique 생성
      */
-    public function getHashKey()
+    public function getHashKey(): string
     {
         return md5(bin2hex($this->getKey()));
     }
@@ -186,6 +198,14 @@ class User extends Authenticatable implements MustVerifyEmail
         return $this->remember_token;
     }
 
+    /**
+     * 관리자 여부 확인
+     */
+    public function isAdministrator(): bool
+    {
+        return boolval($this->is_admin);
+    }
+
     /**
      * 인증받은 이메일 조회
      */
@@ -194,14 +214,6 @@ class User extends Authenticatable implements MustVerifyEmail
         return $this->email;
     }
 
-//    /**
-//     * 이메일 인증 알림 메시지 발신자 정보 지정
-//     */
-//    public function routeNotificationForMail($notification)
-//    {
-//        return [$this->email => $this->username];
-//    }
-
     /**
      * 이메일 인증을 받았는지 확인
      */
@@ -210,14 +222,6 @@ class User extends Authenticatable implements MustVerifyEmail
         return (config('use_register_email_auth') ? !is_null($this->email_verified_at) : true);
     }
 
-    /**
-     * 관리자 여부 확인
-     */
-    public function isAdministrator(): bool
-    {
-        return boolval($this->is_admin);
-    }
-
     /**
      * 이메일 인증 완료 후 값 변경
      */
@@ -353,11 +357,19 @@ class User extends Authenticatable implements MustVerifyEmail
             $user = User::create([
                 'sid' => $sid,
                 'email' => $data['email'],
-                'name' => $data['nickname'],
+                'name' => null,
                 'nickname' => $data['nickname'],
+                'phone' => null,
+                'birthday' => null,
+                'gender' => null,
+                'nationality' => null,
                 'password' => Hash::make($data['password']),
                 'register_ip' => $ipAddress,
-                'updated_at' => null
+                'ci' => null,
+                'updated_at' => null,
+                'is_auth_cert' => 1,
+                'is_adult_cert' => 0,
+                'auth_certified_at' => null
             ]);
 
             UserRegister::create([
@@ -421,4 +433,64 @@ class User extends Authenticatable implements MustVerifyEmail
 
         return DB::statement($sql, [$userID]);
     }
+
+    /**
+     * 토스 인증 CI로 회원 정보를 조회
+     */
+    public function findUserByTossCI(string $ci): User
+    {
+        return $this->where('ci', $ci)->firstOrNew();
+    }
+
+    /**
+     * 성인여부 확인 (생년월일로 확인)
+     */
+    public function isAdult(): bool
+    {
+        return boolval(now()->diffInYears($this->birthday) > 19);
+    }
+
+    /**
+     * 회원가입 일별통계
+     */
+    public function dailyStats(): array
+    {
+        $sql = '
+            SELECT DATE(`created_at`) AS `date`, COUNT(*) AS `value` FROM users GROUP BY `created_at`;
+        ';
+
+        return DB::select($sql);
+    }
+
+    /**
+     * 주간 회원가입자 수
+     */
+    public function totalWeeklyCount(): int
+    {
+        $sql = '
+            SELECT COUNT(*) AS `count` FROM users WHERE WEEK(`created_at`) = WEEK(CURRENT_TIMESTAMP);
+        ';
+
+        return DB::selectOne($sql)->count;
+    }
+
+    /**
+     * 월별 회원가입자 수
+     */
+    public function totalMonthlyCount(): int
+    {
+        $sql = '
+            SELECT COUNT(*) AS `count` FROM users WHERE MONTH(`created_at`) = MONTH(CURRENT_TIMESTAMP);
+        ';
+
+        return DB::selectOne($sql)->count;
+    }
+
+    /**
+     * 전체 회원가입자 수
+     */
+    public function totalUserCount(): int
+    {
+        return $this->where('is_withdraw', 0)->count();
+    }
 }

+ 62 - 8
app/Models/Visit.php

@@ -4,6 +4,7 @@ namespace App\Models;
 
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Cache;
 use Illuminate\Http\Request;
 
 class Visit extends Model
@@ -29,12 +30,49 @@ class Visit extends Model
         return visitor()->visit($request->user());
     }
 
+    /**
+     * 월간 방문자 수
+     */
+    public function getMonthlyData(): array
+    {
+        $sql = "
+            SELECT dt
+             , COUNT(n) cntNew
+             , COUNT(r) cntRe
+             , COUNT(*) cntTot
+            FROM (SELECT DATE_FORMAT(created_at, '%Y-%m-%d') AS dt
+                     , ip
+                     , CASE WHEN COUNT(*) = 1 THEN 1 END AS n
+                     , CASE WHEN COUNT(*) > 1 THEN 1 END AS r
+                  FROM visits
+                    WHERE created_at >= (LAST_DAY(NOW() - INTERVAL 1 month) + INTERVAL 1 DAY)
+                    AND created_at < LAST_DAY(NOW())
+                    GROUP BY DATE_FORMAT(created_at, '%Y-%m-%d')
+                    , ip
+                ) f
+            GROUP BY dt;
+        ";
+
+        return DB::select($sql);
+    }
+
     /**
      * 오늘 방문자 수
      */
     public function todayCount(): int
     {
-        return $this->whereDate('created_at', now()->today())->distinct()->count('ip');
+        if (!$result = Cache::get('todayVisitsCount')) 
+        {
+            $sql = "
+                SELECT COUNT(DISTINCT ip) AS total FROM visits WHERE created_at >= CURDATE() AND created_at < CURDATE() + INTERVAL 1 DAY AND ip IS NOT NULL AND ip <> '';
+            ";
+
+            $result = (int)DB::selectOne($sql)->total;
+
+            Cache::put('todayVisitsCount', $result, ttl: 300);
+        }
+
+        return $result;
     }
 
     /**
@@ -42,7 +80,18 @@ class Visit extends Model
      */
     public function yesterdayCount(): int
     {
-        return $this->whereDate('created_at', now()->yesterday())->distinct()->count('ip');
+        if (!$result = Cache::get('yesterdayVisitsCount')) 
+        {
+            $sql = "
+                SELECT COUNT(DISTINCT ip) AS total FROM visits WHERE created_at >= CURDATE() - INTERVAL 1 DAY AND created_at < CURDATE() AND ip IS NOT NULL AND ip <> '';
+            ";
+
+            $result = (int)DB::selectOne($sql)->total;
+
+            Cache::put('yesterdayVisitsCount', $result, 86400);
+        }
+
+        return $result;
     }
 
     /**
@@ -50,12 +99,17 @@ class Visit extends Model
      */
     public function totalCount(): int
     {
-        $sql = "
-            SELECT SUM(`CNT`) AS `total` FROM (
-                SELECT COUNT(DISTINCT `ip`) AS CNT FROM `visits` WHERE 1 GROUP BY DATE_FORMAT(created_at, '%Y%m%d')
-            ) D;
-        ";
+        if (!$result = Cache::get('totalVisitsCount')) 
+        {
+            $sql = "
+                SELECT COUNT(DISTINCT `ip`) AS `total` FROM `visits` WHERE `ip` IS NOT NULL AND `ip` <> '';
+            ";
+
+            $result = (int)DB::selectOne($sql)->total;
+
+            Cache::put('totalVisitsCount', $result, 86400);
+        }
 
-        return DB::selectOne($sql)->total;
+        return $result;
     }
 }

+ 0 - 45
app/Models/Visits.php

@@ -1,45 +0,0 @@
-<?php
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Model;
-
-class Visits extends Model
-{
-    protected $table = 'visits';
-    protected $primaryKey = 'id';
-
-    public $keyType = 'int';
-    public $incrementing = true;
-    public $timestamps = true;
-
-    const CREATED_AT = 'created_at';
-    const UPDATED_AT = 'updated_at';
-    const DELETED_AT = null;
-
-    protected $guarded = [];
-
-    /*
-     * 오늘 방문자 수
-     */
-    public function todayCount(): int
-    {
-        return $this->whereDate('created_at', now()->today())->distinct()->count('ip');
-    }
-
-    /*
-     * 어제 방문자 수
-     */
-    public function yesterdayCount(): int
-    {
-        return $this->whereDate('created_at', now()->yesterday())->distinct()->count('ip');
-    }
-
-    /*
-     * 누적 방문자 수
-     */
-    public function totalCount(): int
-    {
-        return $this->distinct()->count('ip');
-    }
-}

+ 7 - 7
app/Providers/AppServiceProvider.php

@@ -83,13 +83,13 @@ class AppServiceProvider extends ServiceProvider
         });
 
         /*
-         DB::listen(function ($query) use ($request) {
-             if (str_contains($query->sql, 'tb_general_log') || str_contains($query->sql, 'users')) {
-                 unset($query); return;
-             }
+        DB::listen(function ($query) use ($request) {
+            if (str_contains($query->sql, 'tb_general_log') || str_contains($query->sql, 'users')) {
+                unset($query); return;
+            }
 
-             (new GeneralLog)->register($query, $request);
-         });
-         */
+            (new GeneralLog)->register($query, $request);
+        });
+        */
     }
 }

+ 1 - 1
app/Rules/IsPhone.php

@@ -43,6 +43,6 @@ class IsPhone implements Rule
      */
     public function message()
     {
-        return ':attribute 은(는) 사용하실 수 없는 전화번호입니다.';
+        return ':attribute 은(는) 사용하실 수 없는 연락처입니다.';
     }
 }

+ 1 - 1
app/Services/BoardService.php

@@ -22,7 +22,7 @@ class BoardService
 	public BoardMeta $boardMetaModel;
     public BoardCategory $boardCategoryModel;
     public BoardAdmin $boardAdminModel;
-
+    
 	public function __construct()
     {
 		$this->boardModel = new Board();

+ 1 - 0
app/Services/CommentService.php

@@ -465,6 +465,7 @@ class CommentService
 
             $this->commentModel->increaseBlame($comment->id);
 
+            $response->comment = $comment;
             DB::commit();
         } catch (Exception $e) {
             $response = $response::fromException($e);

+ 10 - 0
app/Services/PostService.php

@@ -2,6 +2,7 @@
 
 namespace App\Services;
 
+use Cache;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Http\Request;
 use App\Http\Requests\PostRequest;
@@ -235,6 +236,9 @@ class PostService
             // 게시판 게시글 수 갱신
             $this->boardModel->updatePostRows($boardID);
 
+            // 태그 캐시 삭제
+            Cache::forget('tags');
+
             $response->post = $post;
             DB::commit();
         } catch (Exception $e) {
@@ -311,6 +315,9 @@ class PostService
             // 게시글 File 저장
             $this->postFileModel->updater($post, $request->post('file_is_delete', []), $request->file('files'));
 
+            // 태그 캐시 삭제
+            Cache::forget('tags');
+
             DB::commit();
         } catch (Exception $e) {
             $response = $response::fromException($e);
@@ -341,6 +348,9 @@ class PostService
             // 게시글 삭제 여부 승인
             $this->postModel->remove($post, $user);
 
+            // 태그 캐시 삭제
+            Cache::forget('tags');
+
             DB::commit();
         } catch (Exception $e) {
             $response = $response::fromException($e);

+ 55 - 0
app/Services/TagService.php

@@ -0,0 +1,55 @@
+<?php
+
+namespace App\Services;
+
+use App\Http\Traits\CommonTrait;
+use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Collection;
+use App\Models\Post;
+use App\Models\PostTag;
+use App\Models\DTO\SearchData;
+
+class TagService
+{
+    use CommonTrait;
+
+    public Post $postModel;
+    public PostTag $postTagModel;
+
+	public function __construct(Post $postModel, PostTag $postTagModel)
+    {
+		$this->postModel = $postModel;
+		$this->postTagModel = $postTagModel;
+	}
+
+    // 모든 태그 조회
+    public function getAllTags(): Collection
+    {
+        $cacheName = 'tags';
+        if (!$result = Cache::get($cacheName)) {
+            $result = $this->postTagModel->getAllTags();
+
+            if ($result) {
+                Cache::put($cacheName, $result, now()->addMonths(6));
+            }
+        }
+
+        return $result;
+    }
+
+    // 태그로 관련 게시글 조회
+    public function getPostsByTag(SearchData $params): object
+    {
+        $data = $this->postTagModel->getPostsByTag($params);
+
+        if ($data && $data->total > 0) {
+            foreach ($data->list as $item) {
+                $item->content = $this->strCut(preg_replace('/<img[^>]*>/i', '', $item->content), 300);
+                $item->createdAt = date('Y.m.d H:i:s', strtotime($item->created_at));
+                $item->tags = array_map('trim', explode(',', $item->tags));
+            }
+        }
+
+        return $data;
+    }
+}

+ 0 - 1
composer.json

@@ -16,7 +16,6 @@
         "laravel/sanctum": "^3.0",
         "laravel/tinker": "^2.7",
         "laravel/ui": "*",
-        "predis/predis": "^3.2",
         "shetabit/visitor": "^4.0"
     },
     "require-dev": {

+ 1 - 1
config/app.php

@@ -219,7 +219,7 @@ return [
 
     'aliases' => Facade::defaultAliases()->merge([
         // 'ExampleClass' => App\Example\ExampleClass::class,
-        
+
         /**
          * 새롭게 추가된 것
          */

+ 275 - 307
config/constants.php

@@ -7,236 +7,174 @@
  */
 
 // 해시 암호화 키
-defined('ENCRYPT_KEY') OR define('ENCRYPT_KEY', '@@20120726CHrong');
-defined('ENCRYPT_IV') OR define('ENCRYPT_IV', '@@20120726CHrong');
+const ENCRYPT_KEY = '@@20120726CHrong';
+const ENCRYPT_IV = '@@20120726CHrong';
 
 // 관리자 페이지 경로
-defined('ADMIN_PATH') OR define('ADMIN_PATH', 'admin');
+const ADMIN_PATH = 'admin';
 
 // 새로운 글쓰기 시간
-defined('NEW_POST_SECOND') OR define('NEW_POST_SECOND', 10); // 10회
+const NEW_POST_SECOND = 10; // 10회
 
 // 현재 접속자 기준
-defined('CURRENT_VISITOR_MINUTE') OR define('CURRENT_VISITOR_MINUTE', 5); // 5분
+const CURRENT_VISITOR_MINUTE = 5; // 5분
 
 // 캐시 생성 시간(초)
-defined('CACHE_EXPIRE_TIME') OR define('CACHE_EXPIRE_TIME', 300); // 5분
+const CACHE_EXPIRE_TIME = 300; // 5분
 
 // 인증번호 만료시간(분)
-defined('VERIFY_EXPIRES_AT') OR define('VERIFY_EXPIRES_AT', 5); // 5분
+const VERIFY_EXPIRES_AT = 5; // 5분
 
 // 인증번호 발송 분당 제한 수
-defined('VERIFY_SEND_LIMIT') OR define('VERIFY_SEND_LIMIT', 3); // 3번
-
-// 텔레그램 bot token
-defined('TELEGRAM_BOT_TOKEN') OR define('TELEGRAM_BOT_TOKEN', '5860833809:AAHIeuhK5Y3o7PtZGwGEEkfimjtgksWMnNo');
-defined('TELEGRAM_CHAT_ID') OR define('TELEGRAM_CHAT_ID', 650107127);
+const VERIFY_SEND_LIMIT = 3; // 3번
 
 // 프로필, 아이콘 이미지 크기 기본값
-defined("THUMB_MAX_WIDTH") OR define("THUMB_MAX_WIDTH", 96); // 가로
-defined("THUMB_MAX_HEIGHT") OR define("THUMB_MAX_HEIGHT", 96); // 세로
-defined("ICON_MAX_WIDTH") OR define("ICON_MAX_WIDTH", 16); // 가로
-defined("ICON_MAX_HEIGHT") OR define("ICON_MAX_HEIGHT", 16); // 세로
-
-// 게시글 설정 값
-defined("POST_TITLE_WRITE_MIN_LENGTH") OR define("POST_TITLE_WRITE_MIN_LENGTH", 2); // 게시글 작성 제목 최소입력 값
-defined("POST_TITLE_WRITE_MAX_LENGTH") OR define("POST_TITLE_WRITE_MAX_LENGTH", 60); // 게시글 작성 제목 최대입력 값
-defined("DEFAULT_LIST_PER_PAGE") OR define("DEFAULT_LIST_PER_PAGE", 10); // 게시글 기본 보여줄 수
-defined("DEFAULT_LIST_PAGE_COUNT") OR define("DEFAULT_LIST_PAGE_COUNT", 10); // 게시글 기본 페이지 수
-
-// 기본환경 상수 정의
-defined("NO_IMAGE_NORMAL_SRC") OR define("NO_IMAGE_NORMAL_SRC", "images/default/no_image.png");    // 이미지 없을때 일반 이미지 기본값
-defined("NO_IMAGE_PROFILE_SRC") OR define("NO_IMAGE_PROFILE_SRC",  "images/default_profile.gif");  // 이미지 없을때 프로필 이미지 기본값
-defined("NO_IMAGE_ICON_SRC") OR define("NO_IMAGE_ICON_SRC", "images/default_icon.png");    // 이미지 없을때 Icon 이미지 기본값
-defined("FOOTER_MENU") OR define("FOOTER_MENU", 45); // 하단 메뉴번호
-defined("SIDE_LOGIN") OR define("SIDE_LOGIN", "SIDE_LOGIN"); // 좌측 로그인 사용
-defined("CONTENTS_LOGIN") OR define("CONTENTS_LOGIN", "CONTENTS_LOGIN"); // 우측 로그인 사용
-defined("USER_LOGIN_ACCOUNT_EMAIL") OR define("USER_LOGIN_ACCOUNT_EMAIL", "email"); // 이메일 로그인 방식
-defined("USER_LOGIN_ACCOUNT_UID") OR define("USER_LOGIN_ACCOUNT_UID", "uid"); // 아이디 로그인 방식
-defined("USER_LOGIN_ACCOUNT_BOTH") OR define("USER_LOGIN_ACCOUNT_BOTH", "both"); // 이메일 & 아이디 로그인 방식
-defined("SIDEBAR_WIDTH") OR define("SIDEBAR_WIDTH", 340); // 왼쪽 영역 가로길이
-defined("RIGHT_WIDTH") OR define("RIGHT_WIDTH", 830); // 오른쪽 영역 가로길이
-defined("RANK_VIEW_LIMIT") OR define("RANK_VIEW_LIMIT", 50); // 상위 순위개수 한계값
-
-// 신고기능 종류구분
-defined("BLAME_TARGET_TYPE_POST") OR define("BLAME_TARGET_TYPE_POST", '1'); // 게시판
-defined("BLAME_TARGET_TYPE_COMMENT") OR define("BLAME_TARGET_TYPE_COMMENT", '2'); // 댓글
-defined("BLAME_TARGET_TYPE_NOTE") OR define("BLAME_TARGET_TYPE_NOTE", '3'); // 쪽지
+const THUMB_MAX_WIDTH = 96; // 가로
+const THUMB_MAX_HEIGHT = 96; // 세로
+const ICON_MAX_WIDTH = 16; // 가로
+const ICON_MAX_HEIGHT = 16; // 세로
 
 // 게시글 설정 값
-defined("POST_TITLE_WRITE_MIN_LENGTH") OR define("POST_TITLE_WRITE_MIN_LENGTH", 2); // 게시글 작성 제목 최소입력 값
-defined("POST_TITLE_WRITE_MAX_LENGTH") OR define("POST_TITLE_WRITE_MAX_LENGTH", 60); // 게시글 작성 제목 최대입력 값
-defined("LIST_DEFAULT_PER_PAGE") OR define("LIST_DEFAULT_PER_PAGE", 10); // 게시글 기본 보여줄 수
-defined("LIST_DEFAULT_PAGE_COUNT") OR define("LIST_DEFAULT_PAGE_COUNT", 10); // 게시글 기본 페이지 수
+const DEFAULT_LIST_PER_PAGE = 10; // 게시글 기본 보여줄 수
+const DEFAULT_LIST_PAGE_COUNT = 10; // 게시글 기본 페이지 수
 
 // 기본 이미지 경로
-defined("NO_IMAGE_NORMAL_SRC") OR define("NO_IMAGE_NORMAL_SRC", "images/default/no_image.png");    // 이미지 없을때 일반 이미지 기본값
-defined("NO_IMAGE_THUMB_SRC") OR define("NO_IMAGE_THUMB_SRC",  "images/default/default_thumb.gif");  // 이미지 없을때 프로필 이미지 기본값
-defined("NO_IMAGE_ICON_SRC") OR define("NO_IMAGE_ICON_SRC", "images/default_icon.png");    // 이미지 없을때 Icon 이미지 기본값
+const NO_IMAGE_NORMAL_SRC = "/images/default/no_image.png"; // 이미지 없을때 일반 이미지 기본값
+const NO_IMAGE_THUMB_SRC = "/images/default/thumb.gif"; // 이미지 없을때 프로필 이미지 기본값
+const NO_IMAGE_ICON_SRC = "/images/default/icon.png"; // 이미지 없을때 Icon 이미지 기본값
 
-// 메인 검색순위 조회 개수
-defined("MAIN_GET_SEARCH_KEYWORD_LIMIT") OR define("MAIN_GET_SEARCH_KEYWORD_LIMIT", '10');
+// 파일첨부 경로
+const UPLOAD_PATH_APP = "app";
+const UPLOAD_PATH_PUBLIC = "public";                    // 외부 공개 저장 경로
+const UPLOAD_PATH_STORAGE = "storage";                  // 내부 저장 경로
+const UPLOAD_PATH_FAVICON = "favicon";                  // 파비콘
+const UPLOAD_PATH_LOGO = "logo";                        // 로고
+const UPLOAD_PATH_CACHE = "cache";                      // 캐시파일 저장경로
+const UPLOAD_PATH_CAPTCHA = "captcha";                  // 자동등록방지번호
+const UPLOAD_PATH_NOTE = "note";                        // 쪽지
+const UPLOAD_PATH_BANNER = "banner";                    // 배너
+const UPLOAD_PATH_DOCUMENT = "document";                // 문서
+const UPLOAD_PATH_FAQ = "faq";                          // FAQ
+const UPLOAD_PATH_POPUP = "popup";                      // 팝업
+const UPLOAD_PATH_POST = "post";                        // 게시글
+const UPLOAD_PATH_COMMENT = "comment";                  // 댓글
+const UPLOAD_PATH_EMOTICON = "emoticon";                // 에디터 이모티콘
+const UPLOAD_PATH_EDITOR = "editor";                    // 게시판 에디터 첨부 이미지
+const UPLOAD_PATH_USER_ICON = "user/icon";              // 회원 아이콘
+const UPLOAD_PATH_USER_THUMB = "user/thumb";            // 회원 프로필
+const USER_GROUP_IMAGE_PATH = "user/group";             // 회원 그룹 이미지 경로
+const USER_GRADE_IMAGE_PATH = "user/grade";             // 회원 등급 이미지 경로
+const USER_RANK_IMAGE_PATH = "user/level";              // 회원 레벨 이미지 경로
+const GAME_RATING_IMAGE_PATH = "/images/game/rating";   // 게임이용등급 이미지 저장경로
+const GAME_CONTENT_IMAGE_PATH = "/images/game/content"; // 게임내용표시 이미지 저장경로
+const UPLOAD_PATH_MOBILE = "mobile";                    // 모바일 디렉토리
 
-// 메인 검색어 조회 단위
-defined("MAIN_SEARCH_KEYWORD_MONTH") OR define("MAIN_SEARCH_KEYWORD_MONTH", '1MONTH');
-defined("MAIN_SEARCH_KEYWORD_1WEEK") OR define("MAIN_SEARCH_KEYWORD_1WEEK", '1WEEK');
-defined("MAIN_SEARCH_KEYWORD_1HOUR") OR define("MAIN_SEARCH_KEYWORD_1HOUR", '1HOUR');
-defined("MAIN_SEARCH_KEYWORD_20MINUTES") OR define("MAIN_SEARCH_KEYWORD_20MINUTES", '20MINUTES');
+// 신고기능 종류구분
+const BLAME_TARGET_TYPE_POST = '1'; // 게시판
+const BLAME_TARGET_TYPE_COMMENT = '2'; // 댓글
+const BLAME_TARGET_TYPE_NOTE = '3'; // 쪽지
 
-// 파일첨부 경로
-defined("UPLOAD_PATH_APP") OR define("UPLOAD_PATH_APP", "app");
-defined("UPLOAD_PATH_PUBLIC") OR define("UPLOAD_PATH_PUBLIC", "public");                                // 외부 공개 저장 경로
-defined("UPLOAD_PATH_STORAGE") OR define("UPLOAD_PATH_STORAGE", "storage");                             // 내부 저장 경로
-defined("UPLOAD_PATH_FAVICON") OR define("UPLOAD_PATH_FAVICON", "favicon");                             // 파비콘
-defined("UPLOAD_PATH_LOGO") OR define("UPLOAD_PATH_LOGO", "logo");                                      // 로고
-defined("UPLOAD_PATH_CACHE") OR define("UPLOAD_PATH_CACHE", "cache");                                   // 캐시파일 저장경로
-defined("UPLOAD_PATH_CAPTCHA") OR define("UPLOAD_PATH_CAPTCHA", "captcha");                             // 자동등록방지번호
-defined("UPLOAD_PATH_SHOP_PRODUCT") OR define("UPLOAD_PATH_SHOP_PRODUCT", "shop/product");              // 상품
-defined("UPLOAD_PATH_SHOP_PRODUCT_OPTION") OR define("UPLOAD_PATH_SHOP_PRODUCT_OPTION", "shop/option"); // 상품 옵션
-defined("UPLOAD_PATH_NOTE") OR define("UPLOAD_PATH_NOTE", "note");                                      // 쪽지
-defined("UPLOAD_PATH_BANNER") OR define("UPLOAD_PATH_BANNER", "banner");                                // 배너
-defined("UPLOAD_PATH_DOCUMENT") OR define("UPLOAD_PATH_DOCUMENT", "document");                          // 문서
-defined("UPLOAD_PATH_FAQ") OR define("UPLOAD_PATH_FAQ", "faq");                                         // FAQ
-defined("UPLOAD_PATH_POPUP") OR define("UPLOAD_PATH_POPUP", "popup");                                   // 팝업
-defined("UPLOAD_PATH_POST") OR define("UPLOAD_PATH_POST", "post");                                      // 게시글
-defined("UPLOAD_PATH_COMMENT") OR define("UPLOAD_PATH_COMMENT", "comment");                             // 댓글
-defined("UPLOAD_PATH_EMOTICON") OR define("UPLOAD_PATH_EMOTICON", "emoticon");                          // 게시판 에디터 이모티콘
-defined("UPLOAD_PATH_EDITOR") OR define("UPLOAD_PATH_EDITOR", "editor");                                // 게시판 에디터 첨부 이미지
-defined("UPLOAD_PATH_USER_ICON") OR define("UPLOAD_PATH_USER_ICON", "user/icon");                       // 회원 아이콘
-defined("UPLOAD_PATH_USER_THUMB") OR define("UPLOAD_PATH_USER_THUMB", "user/thumb");                    // 회원 프로필
-defined("USER_GROUP_IMAGE_PATH") OR define("USER_GROUP_IMAGE_PATH", "user/group");                      // 회원 그룹 이미지 경로
-defined("USER_GRADE_IMAGE_PATH") OR define("USER_GRADE_IMAGE_PATH", "user/grade");                      // 회원 등급 이미지 경로
-defined("USER_RANK_IMAGE_PATH") OR define("USER_RANK_IMAGE_PATH", "user/level");                        // 회원 레벨 이미지 경로
-defined("GAME_RATING_IMAGE_PATH") OR define("GAME_RATING_IMAGE_PATH", "/images/game/rating");           // 게임이용등급 이미지 저장경로
-defined("GAME_CONTENT_IMAGE_PATH") OR define("GAME_CONTENT_IMAGE_PATH", "/images/game/content");        // 게임내용표시 이미지 저장경로
-defined("UPLOAD_PATH_MOBILE") OR define("UPLOAD_PATH_MOBILE", "mobile");                                // 모바일 디렉토리
+// 메인 검색순위 조회 개수
+const MAIN_GET_SEARCH_KEYWORD_LIMIT = 10;
+const MAIN_SEARCH_KEYWORD_MONTH = '1MONTH';
+const MAIN_SEARCH_KEYWORD_1WEEK = '1WEEK';
+const MAIN_SEARCH_KEYWORD_1HOUR = '1HOUR';
+const MAIN_SEARCH_KEYWORD_20MINUTES = '20MINUTES';
 
 /*
  * 지원 브라우저 최소 버전 정의
  */
-defined("BS_CHROME_VERSION") OR define("BS_CHROME_VERSION", 59); // 크롬
-defined("BS_EDGE_VERSION") OR define("BS_EDGE_VERSION", 14); // 엣지
-defined("BS_IE_VERSION") OR define("BS_IE_VERSION", 8); // 인터넷 익스플로어
-defined("BS_FIREFOX_VERSION") OR define("BS_FIREFOX_VERSION", 54); // 파이어 폭스
-defined("BS_SAFARI_VERSION") OR define("BS_SAFARI_VERSION", 10); // 사파리
-defined("BS_OPERA_VERSION") OR define("BS_OPERA_VERSION", 45); // 오페라
+const BS_CHROME_VERSION = 59; // 크롬
+const BS_EDGE_VERSION = 14; // 엣지
+const BS_IE_VERSION = 8; // 인터넷 익스플로어
+const BS_FIREFOX_VERSION = 54; // 파이어 폭스
+const BS_SAFARI_VERSION = 10; // 사파리
+const BS_OPERA_VERSION = 45; // 오페라
 
 /*
  * 게시판 그룹 정의
  */
-defined("BOARD_LAYOUT_TYPE_0") OR define("BOARD_LAYOUT_TYPE_0", 0); // 일반 게시판
-defined("BOARD_LAYOUT_TYPE_1") OR define("BOARD_LAYOUT_TYPE_1", 1); // 사진/동영상 게시판
+const BOARD_LAYOUT_NORMAL = 0; // 일반 게시판
+const BOARD_LAYOUT_MEDIA = 1; // 사진/동영상 게시판
 
 /*
  * 단말기 종류
  */
-defined("DEVICE_TYPE_0") OR define("DEVICE_TYPE_0", 0); // 모든 기기
-defined("DEVICE_TYPE_1") OR define("DEVICE_TYPE_1", 1); // PC
-defined("DEVICE_TYPE_2") OR define("DEVICE_TYPE_2", 2); // Phone
-defined("DEVICE_TYPE_3") OR define("DEVICE_TYPE_3", 3); // Mobile
-defined("DEVICE_TYPE_4") OR define("DEVICE_TYPE_4", 4); // Tablet
-defined("DEVICE_TYPE_5") OR define("DEVICE_TYPE_5", 5); // Robot
-defined("MAP_DEVICE_TYPE") OR define("MAP_DEVICE_TYPE", [
-    DEVICE_TYPE_0 => 'ALL', DEVICE_TYPE_1 => 'PC', DEVICE_TYPE_2 => 'Phone',
-    DEVICE_TYPE_3 => 'Mobile', DEVICE_TYPE_4 => 'Tablet', DEVICE_TYPE_5 => 'Robot'
-]);
+const DEVICE_TYPE_0 = 0; // 모든 기기
+const DEVICE_TYPE_1 = 1; // PC
+const DEVICE_TYPE_2 = 2; // Phone
+const DEVICE_TYPE_3 = 3; // Mobile
+const DEVICE_TYPE_4 = 4; // Tablet
+const DEVICE_TYPE_5 = 5; // Robot
+const MAP_DEVICE_TYPE = [
+    DEVICE_TYPE_0 => 'ALL', DEVICE_TYPE_1 => 'PC', DEVICE_TYPE_2 => 'Phone', DEVICE_TYPE_3 => 'Mobile', DEVICE_TYPE_4 => 'Tablet', DEVICE_TYPE_5 => 'Robot'
+];
 
 // 단말기 아이콘 종류
-defined("MAP_DEVICE_ICON_TYPE") OR define("MAP_DEVICE_ICON_TYPE", [
+const MAP_DEVICE_ICON_TYPE = [
     DEVICE_TYPE_0 => 'All',
     DEVICE_TYPE_1 => '<i class="fas fa-desktop"></i>',
     DEVICE_TYPE_2 => '<i class="fa-solid fa-mobile-screen-button"></i>',
     DEVICE_TYPE_3 => '<i class="fa-solid fa-mobile-screen-button"></i>',
     DEVICE_TYPE_4 => '<i class="fas fa-solid fa-tablet-screen-button"></i>',
     DEVICE_TYPE_5 => '<i class="fa-solid fa-robot"></i>'
-]);
-
-/**
- * 사용자에게 이메일, SMS, 알림톡, 쪽지로 안내문 발송 구분값
- */
-defined("SEND_MSG_TYPE_1") OR define("SEND_MSG_TYPE_1", 1); // 회원가입
-defined("SEND_MSG_TYPE_2") OR define("SEND_MSG_TYPE_2", 2); // 비밀번호 변경
-defined("SEND_MSG_TYPE_3") OR define("SEND_MSG_TYPE_3", 3); // 회원탈퇴
-defined("SEND_MSG_TYPE_4") OR define("SEND_MSG_TYPE_4", 4); // 이메일 번경시 인증
-defined("SEND_MSG_TYPE_5") OR define("SEND_MSG_TYPE_5", 5); // 회원정보찾기
-defined("SEND_MSG_TYPE_6") OR define("SEND_MSG_TYPE_6", 6); // 게시글 작성
-defined("SEND_MSG_TYPE_7") OR define("SEND_MSG_TYPE_7", 7); // 댓글 작성
-defined("SEND_MSG_TYPE_8") OR define("SEND_MSG_TYPE_8", 8); // 게시글 신고
-defined("SEND_MSG_TYPE_9") OR define("SEND_MSG_TYPE_9", 9); // 댓글 신고
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////
-/// 관리자 기능없이 발송 처리 구분
-////////////////////////////////////////////////////////////////////////////////////////////////////////////
-defined("SEND_MSG_TYPE_21") OR define("SEND_MSG_TYPE_21", 21); // 회원정보 찾기 (아이디, 비밀번호), 비밀번호 변경하기
-defined("SEND_MSG_TYPE_22") OR define("SEND_MSG_TYPE_22", 22); // 아이디 이메일 인증
-defined('MAP_SEND_MSG_TYPE') OR define('MAP_SEND_MSG_TYPE', [
-    SEND_MSG_TYPE_1 => "회원가입", SEND_MSG_TYPE_2 => "비밀번호 변경", SEND_MSG_TYPE_3 => "회원탈퇴",
-    SEND_MSG_TYPE_4 => "이메일 변경시 인증",  SEND_MSG_TYPE_5 => "회원정보찾기", SEND_MSG_TYPE_6 => "게시글 작성",
-    SEND_MSG_TYPE_7 => "댓글 작성", SEND_MSG_TYPE_8 => "게시글 신고발생", SEND_MSG_TYPE_9 => "댓글 신고발생"
-]);
+];
 
 /**
  * 입력값 검사 상수
  */
-defined('_ALPHAUPPER_') OR define('_ALPHAUPPER_', 1); // 영대문자
-defined('_ALPHALOWER_') OR define('_ALPHALOWER_', 2); // 영소문자
-defined('_ALPHABETIC_') OR define('_ALPHABETIC_', 4); // 영대,소문자
-defined('_NUMERIC_') OR define('_NUMERIC_', 8); // 숫자
-defined('_HANGUL_') OR define('_HANGUL_', 16); // 한글
-defined('_SPACE_') OR define('_SPACE_', 32); // 공백
-defined('_SPECIAL_') OR define('_SPECIAL_', 64); // 특수문자
-defined('_UNDER_') OR define('_UNDER_', 95); // `_` 언더바
+const _ALPHAUPPER_ = 1; // 영대문자
+const _ALPHALOWER_ = 2; // 영소문자
+const _ALPHABETIC_ = 4; // 영대,소문자
+const _NUMERIC_ = 8; // 숫자
+const _HANGUL_ = 16; // 한글
+const _SPACE_ = 32; // 공백
+const _SPECIAL_ = 64; // 특수문자
+const _UNDER_ = 95; // `_` 언더바
 
 /**
- * 1: 게시글, 2: 댓글
+ * 1: 게시글, 2: 댓글, 3: 쪽지, 4: 신고
  */
-defined('EDITOR_IMG_TYPE_1') OR define('EDITOR_IMG_TYPE_1', 1);
-defined('EDITOR_IMG_TYPE_2') OR define('EDITOR_IMG_TYPE_2', 2);
-defined('MAP_EDITOR_IMG_TYPE') OR define('MAP_EDITOR_IMG_TYPE', [
-    EDITOR_IMG_TYPE_1 => UPLOAD_PATH_POST, EDITOR_IMG_TYPE_2 => UPLOAD_PATH_COMMENT
-]);
+const EDITOR_IMG_TYPE_1 = 1;
+const EDITOR_IMG_TYPE_2 = 2;
+const EDITOR_IMG_TYPE_3 = 3;
+const EDITOR_IMG_TYPE_4 = 4;
+const EDITOR_IMG_TYPE_5 = 5;
+const EDITOR_IMG_TYPE_6 = 6;
+const EDITOR_IMG_TYPE_7 = 7;
+const MAP_EDITOR_IMG_TYPE = [
+    EDITOR_IMG_TYPE_1 => '게시글', EDITOR_IMG_TYPE_2 => '댓글', EDITOR_IMG_TYPE_3 => '쪽지', EDITOR_IMG_TYPE_4 => '신고'
+];
 
-/**
- * 1: 게시글, 2: 댓글, 3: 쪽지, 4: 신고, 5: 상품문의, 6: 상품후기, 7: 환불문의
- */
-defined('EDITOR_IMG_TYPE_1') OR define('EDITOR_IMG_TYPE_1', 1);
-defined('EDITOR_IMG_TYPE_2') OR define('EDITOR_IMG_TYPE_2', 2);
-defined('EDITOR_IMG_TYPE_3') OR define('EDITOR_IMG_TYPE_3', 3);
-defined('EDITOR_IMG_TYPE_4') OR define('EDITOR_IMG_TYPE_4', 4);
-defined('EDITOR_IMG_TYPE_5') OR define('EDITOR_IMG_TYPE_5', 5);
-defined('EDITOR_IMG_TYPE_6') OR define('EDITOR_IMG_TYPE_6', 6);
-defined('EDITOR_IMG_TYPE_7') OR define('EDITOR_IMG_TYPE_7', 7);
-defined('MAP_EDITOR_IMG_TYPE') OR define('MAP_EDITOR_IMG_TYPE', [
-    EDITOR_IMG_TYPE_1 => '게시글', EDITOR_IMG_TYPE_2 => '댓글', EDITOR_IMG_TYPE_3 => '쪽지', EDITOR_IMG_TYPE_4 => '신고',
-    EDITOR_IMG_TYPE_5 => '상품문의', EDITOR_IMG_TYPE_6 => '상품후기', EDITOR_IMG_TYPE_7 => '환불문의',
-]);
+const BOARD_LAYOUT_TYPE_0 = 0; // 일반
+const BOARD_LAYOUT_TYPE_1 = 1; // 사진/동영상
 
 /**
- * 1: 게시글, 2: 댓글, 3: 상품후기
+ * 1: 게시글, 2: 댓글
  */
-defined('TARGET_TYPE_1') OR define('TARGET_TYPE_1', 1);
-defined('TARGET_TYPE_2') OR define('TARGET_TYPE_2', 2);
-defined('TARGET_TYPE_3') OR define('TARGET_TYPE_3', 3);
-defined('MAP_TARGET_TYPE') OR define('MAP_TARGET_TYPE', [
-    TARGET_TYPE_1 => '게시글', TARGET_TYPE_2 => '댓글', TARGET_TYPE_3 => '상품후기'
-]);
+const TARGET_TYPE_1 = 1;
+const TARGET_TYPE_2 = 2;
+const TARGET_TYPE_3 = 3;
+const MAP_TARGET_TYPE = [
+    TARGET_TYPE_1 => '게시글', TARGET_TYPE_2 => '댓글'
+];
 
 /**
  * 신고 사유 (1: 욕설, 2: 음란, 3: 불법, 4: 신분 사칭, 5: 현금거래유도, 6: 스팸/광고, 7: 도배, 8: 개인정보노출, 9: 기타)
  */
-defined('BLAME_TYPE_1') OR define('BLAME_TYPE_1', 1);
-defined('BLAME_TYPE_2') OR define('BLAME_TYPE_2', 2);
-defined('BLAME_TYPE_3') OR define('BLAME_TYPE_3', 3);
-defined('BLAME_TYPE_4') OR define('BLAME_TYPE_4', 4);
-defined('BLAME_TYPE_5') OR define('BLAME_TYPE_5', 5);
-defined('BLAME_TYPE_6') OR define('BLAME_TYPE_6', 6);
-defined('BLAME_TYPE_7') OR define('BLAME_TYPE_7', 7);
-defined('BLAME_TYPE_8') OR define('BLAME_TYPE_8', 8);
-defined('BLAME_TYPE_9') OR define('BLAME_TYPE_9', 9);
-defined('MAP_BLAME_TYPE') OR define('MAP_BLAME_TYPE', [
+const BLAME_TYPE_1 = 1;
+const BLAME_TYPE_2 = 2;
+const BLAME_TYPE_3 = 3;
+const BLAME_TYPE_4 = 4;
+const BLAME_TYPE_5 = 5;
+const BLAME_TYPE_6 = 6;
+const BLAME_TYPE_7 = 7;
+const BLAME_TYPE_8 = 8;
+const BLAME_TYPE_9 = 9;
+const MAP_BLAME_TYPE = [
     BLAME_TYPE_1 => '욕설', BLAME_TYPE_2 => '음란', BLAME_TYPE_3 => '불법', BLAME_TYPE_4 => '신분 사칭', BLAME_TYPE_5 => '현금거래유도',
-    BLAME_TYPE_6 => '스팸/광고', BLAME_TYPE_7 => '도배', BLAME_TYPE_8 => '개인정보노출', BLAME_TYPE_9 => '기타',
-]);
+    BLAME_TYPE_6 => '스팸/광고', BLAME_TYPE_7 => '도배', BLAME_TYPE_8 => '개인정보노출', BLAME_TYPE_9 => '기타'
+];
 
 /**
  * 게시판 접근 안내 문구
@@ -248,153 +186,95 @@ defined('MAP_BLAME_TYPE') OR define('MAP_BLAME_TYPE', [
  * 4. 특정 그룹 OR 특정 등급
  * 5. 특정 그룹 AND 특정 등급
  */
-defined('BOARD_PERMIT_TYPE_1') OR define('BOARD_PERMIT_TYPE_1', 'access_post_list'); // 목록
-defined('BOARD_PERMIT_TYPE_2') OR define('BOARD_PERMIT_TYPE_2', 'access_post_view'); // 글 열람
-defined('BOARD_PERMIT_TYPE_3') OR define('BOARD_PERMIT_TYPE_3', 'access_post_write'); // 글 작성
-defined('BOARD_PERMIT_TYPE_4') OR define('BOARD_PERMIT_TYPE_4', 'access_comment_list'); // 댓글 보기
-defined('BOARD_PERMIT_TYPE_5') OR define('BOARD_PERMIT_TYPE_5', 'access_comment_write'); // 댓글 작성
-defined('BOARD_PERMIT_TYPE_6') OR define('BOARD_PERMIT_TYPE_6', 'access_image_upload'); // 파일 업로드
-defined('BOARD_PERMIT_TYPE_7') OR define('BOARD_PERMIT_TYPE_7', 'access_file_download'); // 파일 다운로드
-defined('MAP_BOARD_PERMIT_ALERT_TYPE') OR define('MAP_BOARD_PERMIT_ALERT_TYPE', [
+const BOARD_PERMIT_TYPE_1 = 'access_post_list'; // 목록
+const BOARD_PERMIT_TYPE_2 = 'access_post_view'; // 글 열람
+const BOARD_PERMIT_TYPE_3 = 'access_post_write'; // 글 작성
+const BOARD_PERMIT_TYPE_4 = 'access_post_reply'; // 답변 작성
+const BOARD_PERMIT_TYPE_5 = 'access_comment_write'; // 댓글 작성
+const BOARD_PERMIT_TYPE_6 = 'access_image_upload'; // 파일 업로드
+const BOARD_PERMIT_TYPE_7 = 'access_file_download'; // 파일 다운로드
+const BOARD_PERMIT_TYPE_8 = 'blame'; // 게시물 신고
+const BOARD_PERMIT_TYPE_9 = 'poll_write'; // 설문 등록
+const BOARD_PERMIT_TYPE_10 = 'poll_append'; // 설문 참여
+const BOARD_PERMIT_TYPE_11 = 'verification'; // 본인 인증
+const BOARD_PERMIT_TYPE_12 = 'access_comment_list'; // 댓글 작성
+
+const MAP_BOARD_PERMIT_ALERT_TYPE = [
     BOARD_PERMIT_TYPE_1 => '게시판에 접근할 수 있는 권한이 없습니다.',
-    BOARD_PERMIT_TYPE_2 => '게시글 보기 권한이 없습니다.',
-    BOARD_PERMIT_TYPE_3 => '게시글 작성 권한이 없습니다.',
-    BOARD_PERMIT_TYPE_4 => '댓글 보기 권한이 없습니다.',
-    BOARD_PERMIT_TYPE_5 => '댓글 작성 권한이 없습니다.',
-    BOARD_PERMIT_TYPE_6 => '이미지 첨부 권한이 없습니다.',
-    BOARD_PERMIT_TYPE_7 => '파일 다운로드 권한이 없습니다.'
-]);
+    BOARD_PERMIT_TYPE_2 => '글을 읽을 권한이 없습니다.',
+    BOARD_PERMIT_TYPE_3 => '글을 작성할 수 있는 권한이 없습니다.',
+    BOARD_PERMIT_TYPE_4 => '답변을 작성할 수 있는 권한이 없습니다.',
+    BOARD_PERMIT_TYPE_5 => '댓글을 작성할 수 있는 권한이 없습니다.',
+    BOARD_PERMIT_TYPE_6 => '파일 업로드 권한이 없습니다.',
+    BOARD_PERMIT_TYPE_7 => '파일 다운로드 권한이 없습니다.',
+    BOARD_PERMIT_TYPE_8 => '게시물 신고 권한이 없습니다.',
+    BOARD_PERMIT_TYPE_9 => '설문 등록 권한이 없습니다.',
+    BOARD_PERMIT_TYPE_10 => '설문 참여 권한이 없습니다.',
+    BOARD_PERMIT_TYPE_11 => '본인 인증이 필요한 게시판입니다.',
+    BOARD_PERMIT_TYPE_12 => '댓글 확인 권한이 없습니다.'
+];
 
 /* 이메일 전송 양식 지정 */
-defined('SEND_MAIL_FORM_TYPE_1') OR define('SEND_MAIL_FORM_TYPE_1', 'send_email_register'); // 회원가입
-defined('SEND_MAIL_FORM_TYPE_2') OR define('SEND_MAIL_FORM_TYPE_2', 'send_email_changepw_form'); // 비밀번호 변경
-defined('SEND_MAIL_FORM_TYPE_3') OR define('SEND_MAIL_FORM_TYPE_3', 'send_email_withdraw_form'); // 회원탈퇴
-defined('SEND_MAIL_FORM_TYPE_4') OR define('SEND_MAIL_FORM_TYPE_4', 'send_email_auth_form'); // 이메일 인증
-defined('SEND_MAIL_FORM_TYPE_5') OR define('SEND_MAIL_FORM_TYPE_5', 'send_email_verify_code_form'); // 인증번호
-defined('SEND_MAIL_FORM_TYPE_6') OR define('SEND_MAIL_FORM_TYPE_6', 'send_email_find_form'); // 회원정보 찾기
-defined('SEND_MAIL_FORM_TYPE_7') OR define('SEND_MAIL_FORM_TYPE_7', 'send_email_post_form'); // 게시글 작성
-defined('SEND_MAIL_FORM_TYPE_8') OR define('SEND_MAIL_FORM_TYPE_8', 'send_email_post_comment_form'); // 댓글 작성
-defined('SEND_MAIL_FORM_TYPE_9') OR define('SEND_MAIL_FORM_TYPE_9', 'send_email_post_blame_form'); // 게시글 신고
-defined('SEND_MAIL_FORM_TYPE_10') OR define('SEND_MAIL_FORM_TYPE_10', 'send_email_post_comment_blame_form'); // 댓글 신고
-defined('SEND_MAIL_FORM_TYPE_11') OR define('SEND_MAIL_FORM_TYPE_11', 'send_email_post_personal_form'); // 1:1 문의 접수
-defined('SEND_MAIL_FORM_TYPE_12') OR define('SEND_MAIL_FORM_TYPE_12', 'send_email_post_personal_reply_form'); // 1:1 문의 답변
-defined('SEND_MAIL_FORM_TYPE_13') OR define('SEND_MAIL_FORM_TYPE_13', 'send_email_dormant_form'); // 휴면 예정
-defined('SEND_MAIL_FORM_TYPE_14') OR define('SEND_MAIL_FORM_TYPE_14', 'send_email_dormancy_form'); // 휴면 전환
-defined('SEND_MAIL_FORM_TYPE_15') OR define('SEND_MAIL_FORM_TYPE_15', 'send_email_recover_form'); // 휴면 해제
-defined('MAP_SEND_MAIL_TYPE') OR define('MAP_SEND_MAIL_TYPE', [
+const SEND_MAIL_FORM_TYPE_1 = 'send_email_register'; // 회원가입
+const SEND_MAIL_FORM_TYPE_2 = 'send_email_changepw_form'; // 비밀번호 변경
+const SEND_MAIL_FORM_TYPE_3 = 'send_email_withdraw_form'; // 회원탈퇴
+const SEND_MAIL_FORM_TYPE_4 = 'send_email_auth_form'; // 이메일 인증
+const SEND_MAIL_FORM_TYPE_5 = 'send_email_verify_code_form'; // 인증번호
+const SEND_MAIL_FORM_TYPE_6 = 'send_email_find_form'; // 회원정보 찾기
+const SEND_MAIL_FORM_TYPE_7 = 'send_email_post_form'; // 게시글 작성
+const SEND_MAIL_FORM_TYPE_8 = 'send_email_post_comment_form'; // 댓글 작성
+const SEND_MAIL_FORM_TYPE_9 = 'send_email_post_blame_form'; // 게시글 신고
+const SEND_MAIL_FORM_TYPE_10 = 'send_email_post_comment_blame_form'; // 댓글 신고
+const SEND_MAIL_FORM_TYPE_11 = 'send_email_post_personal_form'; // 1:1 문의 접수
+const SEND_MAIL_FORM_TYPE_12 = 'send_email_post_personal_reply_form'; // 1:1 문의 답변
+const SEND_MAIL_FORM_TYPE_13 = 'send_email_dormant_form'; // 휴면 예정
+const SEND_MAIL_FORM_TYPE_14 = 'send_email_dormancy_form'; // 휴면 전환
+const SEND_MAIL_FORM_TYPE_15 = 'send_email_recover_form'; // 휴면 해제
+const MAP_SEND_MAIL_TYPE = [
     SEND_MAIL_FORM_TYPE_1, SEND_MAIL_FORM_TYPE_2, SEND_MAIL_FORM_TYPE_3, SEND_MAIL_FORM_TYPE_4,
     SEND_MAIL_FORM_TYPE_5, SEND_MAIL_FORM_TYPE_6, SEND_MAIL_FORM_TYPE_7, SEND_MAIL_FORM_TYPE_8,
     SEND_MAIL_FORM_TYPE_9, SEND_MAIL_FORM_TYPE_10, SEND_MAIL_FORM_TYPE_11, SEND_MAIL_FORM_TYPE_12,
     SEND_MAIL_FORM_TYPE_13, SEND_MAIL_FORM_TYPE_14, SEND_MAIL_FORM_TYPE_15
-]);
-
+];
 
-/**
+/*
  * 공감, 비공감
  */
-defined("LIKE") OR define("LIKE", 1);
-defined("DISLIKE") OR define("DISLIKE", 2);
-defined("MAP_LIKE_TYPE") OR define("MAP_LIKE_TYPE", [
+const LIKE = 1;
+const DISLIKE = 2;
+const MAP_LIKE_TYPE = [
     LIKE => 'like', DISLIKE => 'dislike'
-]);
-
-/**
- * 영화진흥위원회 API
- */
-defined("KOBIS_API_1") OR define("KOBIS_API_1", 'd470c8a1fa881cd5945b747a6dfadd53');
-defined("KOBIS_API_2") OR define("KOBIS_API_2", '52c8406a33ffe497f041868b2c3be552');
-defined("KOBIS_API_3") OR define("KOBIS_API_3", 'f5eef3421c602c6cb7ea224104795888');
-defined("MOVIE_DAILY_LIST") OR define("MOVIE_DAILY_LIST", '/movie/searchDailyBoxOfficeList');
-defined("MOVIE_WEEK_LIST") OR define("MOVIE_WEEK_LIST", '/movie/searchWeeklyBoxOfficeList');
-defined("MOVIE_LIST") OR define("MOVIE_LIST", '/movie/searchMovieList');
-defined("MOVIE_INFO") OR define("MOVIE_INFO", '/movie/searchMovieInfo');
-defined("MOVIE_DAILY_INFO") OR define("MOVIE_DAILY_INFO", '/movie/searchDailyInfo');
-defined("MOVIE_WEEKLY_INFO") OR define("MOVIE_WEEKLY_INFO", '/movie/searchWeeklyInfo');
-
-/**
- * 영화 장르
- */
-defined("MOVIE_GENRE_TYPE_1") OR define("MOVIE_GENRE_TYPE_1", '드라마');
-defined("MOVIE_GENRE_TYPE_2") OR define("MOVIE_GENRE_TYPE_2", '액션');
-defined("MOVIE_GENRE_TYPE_3") OR define("MOVIE_GENRE_TYPE_3", '스릴러');
-defined("MOVIE_GENRE_TYPE_4") OR define("MOVIE_GENRE_TYPE_4", '공포(호러)');
-defined("MOVIE_GENRE_TYPE_5") OR define("MOVIE_GENRE_TYPE_5", '범죄');
-defined("MOVIE_GENRE_TYPE_6") OR define("MOVIE_GENRE_TYPE_6", '판타지');
-defined("MOVIE_GENRE_TYPE_7") OR define("MOVIE_GENRE_TYPE_7", '서부극(웨스턴)');
-defined("MOVIE_GENRE_TYPE_8") OR define("MOVIE_GENRE_TYPE_8", '애니메이션');
-defined("MOVIE_GENRE_TYPE_9") OR define("MOVIE_GENRE_TYPE_9", '전쟁');
-defined("MOVIE_GENRE_TYPE_10") OR define("MOVIE_GENRE_TYPE_10", '성인물(에로)');
-defined("MOVIE_GENRE_TYPE_11") OR define("MOVIE_GENRE_TYPE_11", '기타');
-defined("MOVIE_GENRE_TYPE_12") OR define("MOVIE_GENRE_TYPE_12", '어드벤처');
-defined("MOVIE_GENRE_TYPE_13") OR define("MOVIE_GENRE_TYPE_13", '가족');
-defined("MOVIE_GENRE_TYPE_14") OR define("MOVIE_GENRE_TYPE_14", 'SF');
-defined("MOVIE_GENRE_TYPE_15") OR define("MOVIE_GENRE_TYPE_15", '사극');
-defined("MOVIE_GENRE_TYPE_16") OR define("MOVIE_GENRE_TYPE_16", '다큐멘터리');
-defined("MOVIE_GENRE_TYPE_17") OR define("MOVIE_GENRE_TYPE_17", '뮤지컬');
-defined("MOVIE_GENRE_TYPE_18") OR define("MOVIE_GENRE_TYPE_18", '공연');
-$MAP_MOVIE_GENRE = [
-    MOVIE_GENRE_TYPE_1, MOVIE_GENRE_TYPE_2, MOVIE_GENRE_TYPE_3, MOVIE_GENRE_TYPE_4, MOVIE_GENRE_TYPE_5,
-    MOVIE_GENRE_TYPE_6, MOVIE_GENRE_TYPE_7, MOVIE_GENRE_TYPE_8, MOVIE_GENRE_TYPE_9, MOVIE_GENRE_TYPE_10,
-    MOVIE_GENRE_TYPE_11, MOVIE_GENRE_TYPE_12, MOVIE_GENRE_TYPE_13, MOVIE_GENRE_TYPE_14, MOVIE_GENRE_TYPE_15,
-    MOVIE_GENRE_TYPE_16, MOVIE_GENRE_TYPE_17, MOVIE_GENRE_TYPE_18
 ];
-defined("MAP_MOVIE_GENRE") OR define("MAP_MOVIE_GENRE", $MAP_MOVIE_GENRE);
-
-/**
- * 영화 유형
- */
-defined("MOVIE_TYPE_1") OR define("MOVIE_TYPE_1", '장편');
-defined("MOVIE_TYPE_2") OR define("MOVIE_TYPE_2", '단편');
-defined("MOVIE_TYPE_3") OR define("MOVIE_TYPE_3", '옴니버스');
-defined("MOVIE_TYPE_4") OR define("MOVIE_TYPE_4", '온라인전용');
-defined("MOVIE_TYPE_5") OR define("MOVIE_TYPE_5", '기타');
-$MAP_MOVIE_TYPE = [
-    MOVIE_TYPE_1, MOVIE_TYPE_2, MOVIE_TYPE_3, MOVIE_TYPE_4, MOVIE_TYPE_5
-];
-defined("MAP_MOVIE_TYPE") OR define("MAP_MOVIE_TYPE", $MAP_MOVIE_TYPE);
-
-/**
- * The movie API
- */
-defined('TMDB_HOST') OR define('TMDB_HOST', 'https://api.themoviedb.org/3');
-defined('TMDB_API_KEY') OR define('TMDB_API_KEY', '33d297cf172734ee6e789aaeb30dcdda');
-defined('TMDB_GET_NOW_PLAYING') OR define('TMDB_GET_NOW_PLAYING', '/movie/now_playing');
-defined('TMDB_GET_POPULAR') OR define('TMDB_GET_POPULAR', '/movie/popular');
-defined('TMDB_GET_TOP_RATED') OR define('TMDB_GET_TOP_RATED', '/movie/top_rated');
-defined('TMDB_GET_UPCOMING') OR define('TMDB_GET_UPCOMING', '/movie/upcoming');
-defined('TMDB_GET_SEARCH_MOVIE') OR define('TMDB_GET_SEARCH_MOVIE', '/search/movie');
-defined('TMDB_GET_VIDEOS') OR define('TMDB_GET_VIDEOS', '/movie/%s/videos');
-defined('TMDB_TRENDING') OR define('TMDB_TRENDING', '/trending/%s/%s');
 
 /**
  * 경험치 지급 구분값
  */
-defined('EXP_TYPE_1') OR define('EXP_TYPE_1', 1); // 회원가입
-defined('EXP_TYPE_2') OR define('EXP_TYPE_2', 2); // 로그인
-defined('EXP_TYPE_3') OR define('EXP_TYPE_3', 3); // 회원가입 시 추천인
-defined('EXP_TYPE_4') OR define('EXP_TYPE_4', 4); // 추천인 존재 시 가입자에게
-defined('EXP_TYPE_5') OR define('EXP_TYPE_5', 5); // 출석
-defined('EXP_TYPE_6') OR define('EXP_TYPE_6', 6); // 설문조사 참여
-defined('EXP_TYPE_7') OR define('EXP_TYPE_7', 7); // 게시글 작성
-defined('EXP_TYPE_8') OR define('EXP_TYPE_8', 8); // 댓글 작성
-defined('EXP_TYPE_9') OR define('EXP_TYPE_9', 9); // 작성자 본인이 게시글 삭제
-defined('EXP_TYPE_10') OR define('EXP_TYPE_10', 10); // 관리자가 게시글 삭제
-defined('EXP_TYPE_11') OR define('EXP_TYPE_11', 11); // 작성자 본인이 댓글 삭제
-defined('EXP_TYPE_12') OR define('EXP_TYPE_12', 12); // 관리자가 댓글 삭제
-defined('EXP_TYPE_13') OR define('EXP_TYPE_13', 13); // 파일 업로드
-defined('EXP_TYPE_14') OR define('EXP_TYPE_14', 14); // 파일 다운로드
-defined('EXP_TYPE_15') OR define('EXP_TYPE_15', 15); // 파일 다운로드 시 업로더에게
-defined('EXP_TYPE_16') OR define('EXP_TYPE_16', 16); // 게시글 조회
-defined('EXP_TYPE_17') OR define('EXP_TYPE_17', 17); // 게시글 추천함
-defined('EXP_TYPE_18') OR define('EXP_TYPE_18', 18); // 게시글 비추천함
-defined('EXP_TYPE_19') OR define('EXP_TYPE_19', 19); // 게시글 추천 받음
-defined('EXP_TYPE_20') OR define('EXP_TYPE_20', 20); // 게시글 비추천 받음
-defined('EXP_TYPE_21') OR define('EXP_TYPE_21', 21); // 댓글 추천함
-defined('EXP_TYPE_22') OR define('EXP_TYPE_22', 22); // 댓글 비추천함
-defined('EXP_TYPE_23') OR define('EXP_TYPE_23', 23); // 댓글 추천 받음
-defined('EXP_TYPE_24') OR define('EXP_TYPE_24', 24); // 댓글 비추천 받음
-defined('EXP_TYPE_9999') OR define('EXP_TYPE_9999', 9999); // 관리자
-defined('MAP_EXP_TYPE') OR define('MAP_EXP_TYPE', [
+const EXP_TYPE_1 = 1; // 회원가입
+const EXP_TYPE_2 = 2; // 로그인
+const EXP_TYPE_3 = 3; // 회원가입 시 추천인
+const EXP_TYPE_4 = 4; // 추천인 존재 시 가입자에게
+const EXP_TYPE_5 = 5; // 출석
+const EXP_TYPE_6 = 6; // 설문조사 참여
+const EXP_TYPE_7 = 7; // 게시글 작성
+const EXP_TYPE_8 = 8; // 댓글 작성
+const EXP_TYPE_9 = 9; // 작성자 본인이 게시글 삭제
+const EXP_TYPE_10 = 10; // 관리자가 게시글 삭제
+const EXP_TYPE_11 = 11; // 작성자 본인이 댓글 삭제
+const EXP_TYPE_12 = 12; // 관리자가 댓글 삭제
+const EXP_TYPE_13 = 13; // 파일 업로드
+const EXP_TYPE_14 = 14; // 파일 다운로드
+const EXP_TYPE_15 = 15; // 파일 다운로드 시 업로더에게
+const EXP_TYPE_16 = 16; // 게시글 조회
+const EXP_TYPE_17 = 17; // 게시글 추천함
+const EXP_TYPE_18 = 18; // 게시글 비추천함
+const EXP_TYPE_19 = 19; // 게시글 추천 받음
+const EXP_TYPE_20 = 20; // 게시글 비추천 받음
+const EXP_TYPE_21 = 21; // 댓글 추천함
+const EXP_TYPE_22 = 22; // 댓글 비추천함
+const EXP_TYPE_23 = 23; // 댓글 추천 받음
+const EXP_TYPE_24 = 24; // 댓글 비추천 받음
+const EXP_TYPE_9999 = 9999; // 관리자
+const MAP_EXP_TYPE = [
     EXP_TYPE_1 => 'exp_register', EXP_TYPE_2 => 'exp_login', EXP_TYPE_3 => 'exp_recommended', EXP_TYPE_4 => 'exp_recommender',
     EXP_TYPE_5 => 'exp_attendance', EXP_TYPE_6 => 'exp_poll', EXP_TYPE_7 => 'exp_write', EXP_TYPE_8 => 'exp_comment',
     EXP_TYPE_9 => 'exp_post_delete', EXP_TYPE_10 => 'exp_admin_post_delete', EXP_TYPE_11 => 'exp_comment_delete', EXP_TYPE_12 => 'exp_admin_comment_delete',
@@ -402,8 +282,8 @@ defined('MAP_EXP_TYPE') OR define('MAP_EXP_TYPE', [
     EXP_TYPE_17 => 'exp_post_like', EXP_TYPE_18 => 'exp_post_dislike', EXP_TYPE_19 => 'exp_post_liked', EXP_TYPE_20 => 'exp_post_disliked',
     EXP_TYPE_21 => 'exp_comment_like', EXP_TYPE_22 => 'exp_comment_dislike', EXP_TYPE_23 => 'exp_comment_liked', EXP_TYPE_24 => 'exp_comment_disliked',
     EXP_TYPE_9999 => 'exp_admin'
-]);
-defined('MAP_EXP_CONTENT') OR define('MAP_EXP_CONTENT', [
+];
+const MAP_EXP_CONTENT = [
     EXP_TYPE_1 => '회원가입', EXP_TYPE_2 => '로그인', EXP_TYPE_3 => '회원가입 시 추천인', EXP_TYPE_4 => '추천인 존재 시 가입자에게',
     EXP_TYPE_5 => '출석', EXP_TYPE_6 => '설문조사 참여', EXP_TYPE_7 => '게시글 작성', EXP_TYPE_8 => '댓글 작성',
     EXP_TYPE_9 => '작성자 본인이 게시글 삭제', EXP_TYPE_10 => '관리자가 게시글 삭제', EXP_TYPE_11 => '작성자 본인이 댓글 삭제', EXP_TYPE_12 => '관리자가 댓글 삭제',
@@ -411,4 +291,92 @@ defined('MAP_EXP_CONTENT') OR define('MAP_EXP_CONTENT', [
     EXP_TYPE_17 => '게시글 추천함', EXP_TYPE_18 => '게시글 비추천함', EXP_TYPE_19 => '게시글 추천 받음', EXP_TYPE_20 => '게시글 비추천 받음',
     EXP_TYPE_21 => '댓글 추천함', EXP_TYPE_22 => '댓글 비추천함', EXP_TYPE_23 => '댓글 추천 받음', EXP_TYPE_24 => '댓글 비추천 받음',
     EXP_TYPE_9999 => '관리자'
-]);
+];
+
+
+/**
+ * 영화진흥위원회 API
+ */
+const KOBIS_API_1 = 'd470c8a1fa881cd5945b747a6dfadd53';
+const KOBIS_API_2 = '52c8406a33ffe497f041868b2c3be552';
+const KOBIS_API_3 = 'f5eef3421c602c6cb7ea224104795888';
+
+const MOVIE_DAILY_LIST  = '/movie/searchDailyBoxOfficeList';
+const MOVIE_WEEK_LIST   = '/movie/searchWeeklyBoxOfficeList';
+const MOVIE_LIST        = '/movie/searchMovieList';
+const MOVIE_INFO        = '/movie/searchMovieInfo';
+const MOVIE_DAILY_INFO  = '/movie/searchDailyInfo';
+const MOVIE_WEEKLY_INFO = '/movie/searchWeeklyInfo';
+
+/**
+ * 영화 장르
+ */
+const MOVIE_GENRE_TYPE_1  = '드라마';
+const MOVIE_GENRE_TYPE_2  = '액션';
+const MOVIE_GENRE_TYPE_3  = '스릴러';
+const MOVIE_GENRE_TYPE_4  = '공포(호러)';
+const MOVIE_GENRE_TYPE_5  = '범죄';
+const MOVIE_GENRE_TYPE_6  = '판타지';
+const MOVIE_GENRE_TYPE_7  = '서부극(웨스턴)';
+const MOVIE_GENRE_TYPE_8  = '애니메이션';
+const MOVIE_GENRE_TYPE_9  = '전쟁';
+const MOVIE_GENRE_TYPE_10 = '성인물(에로)';
+const MOVIE_GENRE_TYPE_11 = '기타';
+const MOVIE_GENRE_TYPE_12 = '어드벤처';
+const MOVIE_GENRE_TYPE_13 = '가족';
+const MOVIE_GENRE_TYPE_14 = 'SF';
+const MOVIE_GENRE_TYPE_15 = '사극';
+const MOVIE_GENRE_TYPE_16 = '다큐멘터리';
+const MOVIE_GENRE_TYPE_17 = '뮤지컬';
+const MOVIE_GENRE_TYPE_18 = '공연';
+
+const MAP_MOVIE_GENRE = [
+    MOVIE_GENRE_TYPE_1,
+    MOVIE_GENRE_TYPE_2,
+    MOVIE_GENRE_TYPE_3,
+    MOVIE_GENRE_TYPE_4,
+    MOVIE_GENRE_TYPE_5,
+    MOVIE_GENRE_TYPE_6,
+    MOVIE_GENRE_TYPE_7,
+    MOVIE_GENRE_TYPE_8,
+    MOVIE_GENRE_TYPE_9,
+    MOVIE_GENRE_TYPE_10,
+    MOVIE_GENRE_TYPE_11,
+    MOVIE_GENRE_TYPE_12,
+    MOVIE_GENRE_TYPE_13,
+    MOVIE_GENRE_TYPE_14,
+    MOVIE_GENRE_TYPE_15,
+    MOVIE_GENRE_TYPE_16,
+    MOVIE_GENRE_TYPE_17,
+    MOVIE_GENRE_TYPE_18,
+];
+
+/**
+ * 영화 유형
+ */
+const MOVIE_TYPE_1 = '장편';
+const MOVIE_TYPE_2 = '단편';
+const MOVIE_TYPE_3 = '옴니버스';
+const MOVIE_TYPE_4 = '온라인전용';
+const MOVIE_TYPE_5 = '기타';
+
+const MAP_MOVIE_TYPE = [
+    MOVIE_TYPE_1,
+    MOVIE_TYPE_2,
+    MOVIE_TYPE_3,
+    MOVIE_TYPE_4,
+    MOVIE_TYPE_5,
+];
+
+/**
+ * The movie API
+ */
+const TMDB_HOST = 'https://api.themoviedb.org/3';
+const TMDB_API_KEY = '33d297cf172734ee6e789aaeb30dcdda';
+const TMDB_GET_NOW_PLAYING = '/movie/now_playing';
+const TMDB_GET_POPULAR     = '/movie/popular';
+const TMDB_GET_TOP_RATED   = '/movie/top_rated';
+const TMDB_GET_UPCOMING    = '/movie/upcoming';
+const TMDB_GET_SEARCH_MOVIE = '/search/movie';
+const TMDB_GET_VIDEOS      = '/movie/%s/videos';
+const TMDB_TRENDING        = '/trending/%s/%s';

+ 1 - 1
config/logging.php

@@ -123,7 +123,7 @@ return [
             'path' => storage_path('logs/queries.log'),
             'level' => 'debug',
             'days' => 28,
-        ],
+        ]
     ],
 
 ];

+ 1 - 1
config/menus.php

@@ -9,7 +9,7 @@
 // 1차 메뉴, 순서대로 (메뉴번호, 메뉴명, 아이콘클래스(font-awesome))
 // 2차 메뉴, 순서대로 (메뉴번호, 메뉴명, a 태그에 속성 부여)
 return [
-    'main' => [
+    '' => [
         '/'                              => [1, 100000, '상황판', 'fa fa-tachometer-alt', [], []]
     ],
 

+ 1 - 1
config/visitor.php

@@ -12,7 +12,7 @@ return [
     'default' => 'jenssegers',
 
     //except save request or route names
-    'except' =>  ['login', 'register'],
+    'except' =>  ['login', 'register', 'post.store', 'post.update'],
 
 
     //name of the table which visit records should save in

BIN
node_modules/.bin/sass


+ 88 - 29
node_modules/.package-lock.json

@@ -3,6 +3,23 @@
     "lockfileVersion": 3,
     "requires": true,
     "packages": {
+        "node_modules/@esbuild/linux-x64": {
+            "version": "0.18.20",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
+            "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
         "node_modules/@esbuild/win32-x64": {
             "version": "0.18.20",
             "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
@@ -21,9 +38,9 @@
             }
         },
         "node_modules/@fortawesome/fontawesome-free": {
-            "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-7.0.0.tgz",
-            "integrity": "sha512-X48nISrSOa89zu2VMljC4XaRf8NmgTwQBVHfS2Nu5G00ZwM31oOVrAtGxZF3b6wDYf9lJsf/Eq4cCSFKIkOWPQ==",
+            "version": "7.1.0",
+            "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-7.1.0.tgz",
+            "integrity": "sha512-+WxNld5ZCJHvPQCr/GnzCTVREyStrAJjisUPtUxG5ngDA8TMlPnKp6dddlTpai4+1GNmltAeuk1hJEkBohwZYA==",
             "license": "(CC-BY-4.0 AND OFL-1.1 AND MIT)",
             "engines": {
                 "node": ">=6"
@@ -101,6 +118,48 @@
                 "@parcel/watcher-win32-x64": "2.5.1"
             }
         },
+        "node_modules/@parcel/watcher-linux-x64-glibc": {
+            "version": "2.5.1",
+            "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz",
+            "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">= 10.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/parcel"
+            }
+        },
+        "node_modules/@parcel/watcher-linux-x64-musl": {
+            "version": "2.5.1",
+            "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz",
+            "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">= 10.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/parcel"
+            }
+        },
         "node_modules/@parcel/watcher-win32-x64": {
             "version": "2.5.1",
             "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz",
@@ -156,9 +215,9 @@
             "license": "MIT"
         },
         "node_modules/axios": {
-            "version": "1.11.0",
-            "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz",
-            "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==",
+            "version": "1.13.2",
+            "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz",
+            "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -168,9 +227,9 @@
             }
         },
         "node_modules/bootstrap": {
-            "version": "5.3.7",
-            "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.7.tgz",
-            "integrity": "sha512-7KgiD8UHjfcPBHEpDNg+zGz8L3LqR3GVwqZiBRFX04a1BCArZOz1r2kjly2HQ0WokqTO0v1nF+QAt8dsW4lKlw==",
+            "version": "5.3.8",
+            "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.8.tgz",
+            "integrity": "sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==",
             "funding": [
                 {
                     "type": "github",
@@ -242,9 +301,9 @@
             }
         },
         "node_modules/debug": {
-            "version": "4.4.1",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
-            "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
+            "version": "4.4.3",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+            "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -420,9 +479,9 @@
             }
         },
         "node_modules/fastq": {
-            "version": "1.19.1",
-            "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
-            "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+            "version": "1.20.1",
+            "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
+            "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
             "license": "ISC",
             "dependencies": {
                 "reusify": "^1.0.4"
@@ -462,9 +521,9 @@
             }
         },
         "node_modules/form-data": {
-            "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
-            "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
+            "version": "4.0.5",
+            "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
+            "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -595,9 +654,9 @@
             }
         },
         "node_modules/immutable": {
-            "version": "5.1.3",
-            "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz",
-            "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==",
+            "version": "5.1.4",
+            "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz",
+            "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==",
             "dev": true,
             "license": "MIT"
         },
@@ -954,9 +1013,9 @@
             }
         },
         "node_modules/sass": {
-            "version": "1.90.0",
-            "resolved": "https://registry.npmjs.org/sass/-/sass-1.90.0.tgz",
-            "integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==",
+            "version": "1.97.2",
+            "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.2.tgz",
+            "integrity": "sha512-y5LWb0IlbO4e97Zr7c3mlpabcbBtS+ieiZ9iwDooShpFKWXf62zz5pEPdwrLYm+Bxn1fnbwFGzHuCLSA9tBmrw==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -1118,14 +1177,14 @@
             }
         },
         "node_modules/vite-plugin-mkcert": {
-            "version": "1.17.8",
-            "resolved": "https://registry.npmjs.org/vite-plugin-mkcert/-/vite-plugin-mkcert-1.17.8.tgz",
-            "integrity": "sha512-S+4tNEyGqdZQ3RLAG54ETeO2qyURHWrVjUWKYikLAbmhh/iJ+36gDEja4OWwFyXNuvyXcZwNt5TZZR9itPeG5Q==",
+            "version": "1.17.9",
+            "resolved": "https://registry.npmjs.org/vite-plugin-mkcert/-/vite-plugin-mkcert-1.17.9.tgz",
+            "integrity": "sha512-SwI7yqp2Cq4r2XItarnHRCj2uzHPqevbxFNMLpyN+LDXd5w1vmZeM4l5X/wCZoP4mjPQYN+9+4kmE6e3nPO5fg==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
-                "axios": "^1.8.3",
-                "debug": "^4.4.0",
+                "axios": "^1.12.2",
+                "debug": "^4.4.3",
                 "picocolors": "^1.1.1"
             },
             "engines": {

+ 16 - 4
node_modules/@fortawesome/fontawesome-free/css/all.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */
@@ -35,10 +35,21 @@
 .fa-brands,
 .fa-classic,
 .fa)::before {
-  content: var(--fa);
   content: var(--fa)/"";
 }
 
+@supports not (content: ""/"") {
+  :is(.fas,
+  .far,
+  .fab,
+  .fa-solid,
+  .fa-regular,
+  .fa-brands,
+  .fa-classic,
+  .fa)::before {
+    content: var(--fa);
+  }
+}
 .fa-1x {
   font-size: 1em;
 }
@@ -390,10 +401,11 @@
 
 .fa-stack-1x,
 .fa-stack-2x {
-  left: 0;
+  --fa-width: 100%;
+  inset: 0;
   position: absolute;
   text-align: center;
-  width: 100%;
+  width: var(--fa-width);
   z-index: var(--fa-stack-z-index, auto);
 }
 

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 1
node_modules/@fortawesome/fontawesome-free/css/all.min.css


+ 1 - 1
node_modules/@fortawesome/fontawesome-free/css/brands.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */

+ 1 - 1
node_modules/@fortawesome/fontawesome-free/css/brands.min.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */

+ 16 - 4
node_modules/@fortawesome/fontawesome-free/css/fontawesome.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */
@@ -35,10 +35,21 @@
 .fa-brands,
 .fa-classic,
 .fa)::before {
-  content: var(--fa);
   content: var(--fa)/"";
 }
 
+@supports not (content: ""/"") {
+  :is(.fas,
+  .far,
+  .fab,
+  .fa-solid,
+  .fa-regular,
+  .fa-brands,
+  .fa-classic,
+  .fa)::before {
+    content: var(--fa);
+  }
+}
 .fa-1x {
   font-size: 1em;
 }
@@ -390,10 +401,11 @@
 
 .fa-stack-1x,
 .fa-stack-2x {
-  left: 0;
+  --fa-width: 100%;
+  inset: 0;
   position: absolute;
   text-align: center;
-  width: 100%;
+  width: var(--fa-width);
   z-index: var(--fa-stack-z-index, auto);
 }
 

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 1
node_modules/@fortawesome/fontawesome-free/css/fontawesome.min.css


+ 1 - 1
node_modules/@fortawesome/fontawesome-free/css/regular.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */

+ 1 - 1
node_modules/@fortawesome/fontawesome-free/css/regular.min.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */

+ 1 - 1
node_modules/@fortawesome/fontawesome-free/css/solid.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */

+ 1 - 1
node_modules/@fortawesome/fontawesome-free/css/solid.min.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */

+ 9 - 7
node_modules/@fortawesome/fontawesome-free/css/svg-with-js.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */
@@ -32,6 +32,9 @@
   --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 {
@@ -534,21 +537,20 @@
 }
 
 .svg-inline--fa.fa-stack-1x {
+  --fa-width: 1.25em;
   height: 1em;
-  width: 1.25em;
+  width: var(--fa-width);
 }
 .svg-inline--fa.fa-stack-2x {
+  --fa-width: 2.5em;
   height: 2em;
-  width: 2.5em;
+  width: var(--fa-width);
 }
 
 .fa-stack-1x,
 .fa-stack-2x {
-  bottom: 0;
-  left: 0;
+  inset: 0;
   margin: auto;
   position: absolute;
-  right: 0;
-  top: 0;
   z-index: var(--fa-stack-z-index, auto);
 }

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 1
node_modules/@fortawesome/fontawesome-free/css/svg-with-js.min.css


+ 5 - 5
node_modules/@fortawesome/fontawesome-free/css/svg.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */
@@ -32,6 +32,9 @@
   --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 {
@@ -172,11 +175,8 @@
 
 .fa-stack-1x,
 .fa-stack-2x {
-  bottom: 0;
-  left: 0;
+  inset: 0;
   margin: auto;
   position: absolute;
-  right: 0;
-  top: 0;
   z-index: var(--fa-stack-z-index, auto);
 }

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 1
node_modules/@fortawesome/fontawesome-free/css/svg.min.css


+ 1 - 1
node_modules/@fortawesome/fontawesome-free/css/v4-font-face.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */

+ 1 - 1
node_modules/@fortawesome/fontawesome-free/css/v4-font-face.min.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */

+ 1 - 1
node_modules/@fortawesome/fontawesome-free/css/v4-shims.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */

+ 1 - 1
node_modules/@fortawesome/fontawesome-free/css/v4-shims.min.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */

+ 1 - 1
node_modules/@fortawesome/fontawesome-free/css/v5-font-face.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */

+ 1 - 1
node_modules/@fortawesome/fontawesome-free/css/v5-font-face.min.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 440 - 272
node_modules/@fortawesome/fontawesome-free/js/all.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 1
node_modules/@fortawesome/fontawesome-free/js/all.min.js


+ 161 - 98
node_modules/@fortawesome/fontawesome-free/js/brands.js

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */
@@ -90,8 +90,8 @@
     }
   }
 
-  var _so;
-  var z = {
+  var _dt;
+  var q = {
       classic: {
         fa: "solid",
         fas: "solid",
@@ -182,40 +182,58 @@
       chisel: {
         "fa-regular": "regular",
         facr: "regular"
+      },
+      utility: {
+        "fa-semibold": "semibold",
+        fausb: "semibold"
+      },
+      "utility-duo": {
+        "fa-semibold": "semibold",
+        faudsb: "semibold"
+      },
+      "utility-fill": {
+        "fa-semibold": "semibold",
+        faufsb: "semibold"
       }
     };
-  var a = "classic",
-    o = "duotone",
+  var i = "classic",
+    t = "duotone",
     d = "sharp",
-    t = "sharp-duotone",
-    i = "chisel",
+    l = "sharp-duotone",
+    f = "chisel",
     n = "etch",
     h = "jelly",
-    s = "jelly-duo",
-    f = "jelly-fill",
+    o = "jelly-duo",
+    u = "jelly-fill",
     g = "notdog",
-    l = "notdog-duo",
-    u = "slab",
-    p = "slab-press",
+    s = "notdog-duo",
+    y = "slab",
+    m = "slab-press",
     e = "thumbprint",
-    w = "whiteboard",
-    m = "Classic",
-    y = "Duotone",
-    x = "Sharp",
-    c = "Sharp Duotone",
-    I = "Chisel",
-    b = "Etch",
-    F = "Jelly",
-    v = "Jelly Duo",
-    S = "Jelly Fill",
-    A = "Notdog",
-    P = "Notdog Duo",
-    j = "Slab",
-    B = "Slab Press",
-    N = "Thumbprint",
-    k = "Whiteboard",
-    so = (_so = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_so, a, m), o, y), d, x), t, c), i, I), n, b), h, F), s, v), f, S), g, A), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_so, l, P), u, j), p, B), e, N), w, k));
-  var io = {
+    p = "utility",
+    a = "utility-duo",
+    w = "utility-fill",
+    x = "whiteboard",
+    b = "Classic",
+    c = "Duotone",
+    I = "Sharp",
+    F = "Sharp Duotone",
+    v = "Chisel",
+    S = "Etch",
+    A = "Jelly",
+    P = "Jelly Duo",
+    j = "Jelly Fill",
+    B = "Notdog",
+    N = "Notdog Duo",
+    k = "Slab",
+    D = "Slab Press",
+    T = "Thumbprint",
+    C = "Utility",
+    W = "Utility Duo",
+    K = "Utility Fill",
+    R = "Whiteboard",
+    dt = (_dt = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_dt, i, b), t, c), d, I), l, F), f, v), n, S), h, A), o, P), u, j), g, B), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_dt, s, N), y, k), m, D), e, T), p, C), a, W), w, K), x, R));
+  var gt = {
       classic: {
         900: "fas",
         400: "far",
@@ -273,9 +291,18 @@
       },
       "jelly-duo": {
         400: "fajdr"
+      },
+      utility: {
+        600: "fausb"
+      },
+      "utility-duo": {
+        600: "faudsb"
+      },
+      "utility-fill": {
+        600: "faufsb"
       }
     };
-  var Ro = {
+  var _t = {
       chisel: {
         regular: "facr"
       },
@@ -331,11 +358,20 @@
       thumbprint: {
         light: "fatl"
       },
+      utility: {
+        semibold: "fausb"
+      },
+      "utility-duo": {
+        semibold: "faudsb"
+      },
+      "utility-fill": {
+        semibold: "faufsb"
+      },
       whiteboard: {
         semibold: "fawsb"
       }
     };
-  var Oo = {
+  var qt = {
       kit: {
         fak: "kit",
         "fa-kit": "kit"
@@ -345,13 +381,13 @@
         "fa-kit-duotone": "kit-duotone"
       }
     },
-    Go = ["kit"];
-  var D = "kit",
+    Ht = ["kit"];
+  var L = "kit",
     r = "kit-duotone",
-    T = "Kit",
-    C = "Kit Duotone",
-    qo = _defineProperty(_defineProperty({}, D, T), r, C);
-  var Xo = {
+    U = "Kit",
+    J = "Kit Duotone",
+    $t = _defineProperty(_defineProperty({}, L, U), r, J);
+  var ol = {
     kit: {
       "fa-kit": "fak"
     },
@@ -359,7 +395,7 @@
       "fa-kit-duotone": "fakd"
     }
   };
-  var et = {
+  var fl = {
       kit: {
         fak: "fa-kit"
       },
@@ -367,7 +403,7 @@
         fakd: "fa-kit-duotone"
       }
     };
-  var dt = {
+  var ul = {
       kit: {
         kit: "fak"
       },
@@ -376,50 +412,56 @@
       }
     };
 
-  var _fl;
+  var _ml;
   var l$1 = {
       GROUP: "duotone-group",
       SWAP_OPACITY: "swap-opacity",
       PRIMARY: "primary",
       SECONDARY: "secondary"
     };
-  var f$1 = "classic",
-    a$1 = "duotone",
-    n$1 = "sharp",
-    t$1 = "sharp-duotone",
+  var n$1 = "classic",
+    o$1 = "duotone",
+    u$1 = "sharp",
+    s$1 = "sharp-duotone",
     h$1 = "chisel",
     g$1 = "etch",
-    u$1 = "jelly",
-    s$1 = "jelly-duo",
-    p$1 = "jelly-fill",
-    y$1 = "notdog",
-    e$1 = "notdog-duo",
-    m$1 = "slab",
-    c$1 = "slab-press",
+    y$1 = "jelly",
+    e$1 = "jelly-duo",
+    m$1 = "jelly-fill",
+    p$1 = "notdog",
+    a$1 = "notdog-duo",
+    w$1 = "slab",
+    b$1 = "slab-press",
     r$1 = "thumbprint",
-    w$1 = "whiteboard",
-    x$1 = "Classic",
-    I$1 = "Duotone",
-    b$1 = "Sharp",
-    F$1 = "Sharp Duotone",
-    v$1 = "Chisel",
-    S$1 = "Etch",
-    A$1 = "Jelly",
-    j$1 = "Jelly Duo",
-    P$1 = "Jelly Fill",
-    B$1 = "Notdog",
-    k$1 = "Notdog Duo",
-    N$1 = "Slab",
-    D$1 = "Slab Press",
-    C$1 = "Thumbprint",
-    T$1 = "Whiteboard",
-    fl = (_fl = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_fl, f$1, x$1), a$1, I$1), n$1, b$1), t$1, F$1), h$1, v$1), g$1, S$1), u$1, A$1), s$1, j$1), p$1, P$1), y$1, B$1), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_fl, e$1, k$1), m$1, N$1), c$1, D$1), r$1, C$1), w$1, T$1));
-  var L = "kit",
+    c$1 = "utility",
+    i$1 = "utility-duo",
+    x$1 = "utility-fill",
+    I$1 = "whiteboard",
+    F$1 = "Classic",
+    v$1 = "Duotone",
+    S$1 = "Sharp",
+    A$1 = "Sharp Duotone",
+    P$1 = "Chisel",
+    j$1 = "Etch",
+    B$1 = "Jelly",
+    N$1 = "Jelly Duo",
+    k$1 = "Jelly Fill",
+    D$1 = "Notdog",
+    C$1 = "Notdog Duo",
+    T$1 = "Slab",
+    L$1 = "Slab Press",
+    W$1 = "Thumbprint",
+    R$1 = "Utility",
+    K$1 = "Utility Duo",
+    U$1 = "Utility Fill",
+    J$1 = "Whiteboard",
+    ml$1 = (_ml = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_ml, n$1, F$1), o$1, v$1), u$1, S$1), s$1, A$1), h$1, P$1), g$1, j$1), y$1, B$1), e$1, N$1), m$1, k$1), p$1, D$1), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_ml, a$1, C$1), w$1, T$1), b$1, L$1), r$1, W$1), c$1, R$1), i$1, K$1), x$1, U$1), I$1, J$1));
+  var E$1 = "kit",
     d$1 = "kit-duotone",
-    R$1 = "Kit",
-    W$1 = "Kit Duotone",
-    lo$1 = _defineProperty(_defineProperty({}, L, R$1), d$1, W$1);
-  var zo$1 = {
+    _$1 = "Kit",
+    M$1 = "Kit Duotone",
+    rt$1 = _defineProperty(_defineProperty({}, E$1, _$1), d$1, M$1);
+  var $t$1 = {
       classic: {
         "fa-brands": "fab",
         "fa-duotone": "fad",
@@ -477,9 +519,18 @@
       },
       chisel: {
         "fa-regular": "facr"
+      },
+      utility: {
+        "fa-semibold": "fausb"
+      },
+      "utility-duo": {
+        "fa-semibold": "faudsb"
+      },
+      "utility-fill": {
+        "fa-semibold": "faufsb"
       }
     },
-    J$1 = {
+    z = {
       classic: ["fas", "far", "fal", "fat", "fad"],
       duotone: ["fadr", "fadl", "fadt"],
       sharp: ["fass", "fasr", "fasl", "fast"],
@@ -494,9 +545,12 @@
       jelly: ["fajr"],
       "jelly-fill": ["fajfr"],
       "jelly-duo": ["fajdr"],
-      chisel: ["facr"]
+      chisel: ["facr"],
+      utility: ["fausb"],
+      "utility-duo": ["faudsb"],
+      "utility-fill": ["faufsb"]
     },
-    Go$1 = {
+    Ht$1 = {
       classic: {
         fab: "fa-brands",
         fad: "fa-duotone",
@@ -554,16 +608,25 @@
       },
       chisel: {
         facr: "fa-regular"
+      },
+      utility: {
+        fausb: "fa-semibold"
+      },
+      "utility-duo": {
+        faudsb: "fa-semibold"
+      },
+      "utility-fill": {
+        faufsb: "fa-semibold"
       }
     },
-    _$1 = ["solid", "regular", "light", "thin", "duotone", "brands", "semibold"],
-    K$1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
-    M$1 = K$1.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]),
-    O$1 = ["aw", "fw", "pull-left", "pull-right"],
-    Ho$1 = [].concat(_toConsumableArray(Object.keys(J$1)), _$1, O$1, ["2xs", "xs", "sm", "lg", "xl", "2xl", "beat", "border", "fade", "beat-fade", "bounce", "flip-both", "flip-horizontal", "flip-vertical", "flip", "inverse", "layers", "layers-bottom-left", "layers-bottom-right", "layers-counter", "layers-text", "layers-top-left", "layers-top-right", "li", "pull-end", "pull-start", "pulse", "rotate-180", "rotate-270", "rotate-90", "rotate-by", "shake", "spin-pulse", "spin-reverse", "spin", "stack-1x", "stack-2x", "stack", "ul", "width-auto", "width-fixed", l$1.GROUP, l$1.SWAP_OPACITY, l$1.PRIMARY, l$1.SECONDARY]).concat(K$1.map(function (o) {
-      return "".concat(o, "x");
-    })).concat(M$1.map(function (o) {
-      return "w-".concat(o);
+    G$1 = ["solid", "regular", "light", "thin", "duotone", "brands", "semibold"],
+    O$1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
+    V$1 = O$1.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]),
+    $$1 = ["aw", "fw", "pull-left", "pull-right"],
+    to = [].concat(_toConsumableArray(Object.keys(z)), G$1, $$1, ["2xs", "xs", "sm", "lg", "xl", "2xl", "beat", "border", "fade", "beat-fade", "bounce", "flip-both", "flip-horizontal", "flip-vertical", "flip", "inverse", "layers", "layers-bottom-left", "layers-bottom-right", "layers-counter", "layers-text", "layers-top-left", "layers-top-right", "li", "pull-end", "pull-start", "pulse", "rotate-180", "rotate-270", "rotate-90", "rotate-by", "shake", "spin-pulse", "spin-reverse", "spin", "stack-1x", "stack-2x", "stack", "ul", "width-auto", "width-fixed", l$1.GROUP, l$1.SWAP_OPACITY, l$1.PRIMARY, l$1.SECONDARY]).concat(O$1.map(function (t) {
+      return "".concat(t, "x");
+    })).concat(V$1.map(function (t) {
+      return "w-".concat(t);
     }));
 
   var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';
@@ -578,36 +641,36 @@
     // Defaults to the classic family if family is not available
     return new Proxy(obj, {
       get: function get(target, prop) {
-        return prop in target ? target[prop] : target[a];
+        return prop in target ? target[prop] : target[i];
       }
     });
   }
-  var _PREFIX_TO_STYLE = _objectSpread2({}, z);
+  var _PREFIX_TO_STYLE = _objectSpread2({}, q);
 
   // We changed FACSSClassesToStyleId in the icons repo to be canonical and as such, "classic" family does not have any
   // duotone styles.  But we do still need duotone in _PREFIX_TO_STYLE below, so we are manually adding
   // {'fa-duotone': 'duotone'}
-  _PREFIX_TO_STYLE[a] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {
+  _PREFIX_TO_STYLE[i] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {
     'fa-duotone': 'duotone'
-  }), z[a]), Oo['kit']), Oo['kit-duotone']);
+  }), q[i]), qt['kit']), qt['kit-duotone']);
   var PREFIX_TO_STYLE = familyProxy(_PREFIX_TO_STYLE);
-  var _STYLE_TO_PREFIX = _objectSpread2({}, Ro);
+  var _STYLE_TO_PREFIX = _objectSpread2({}, _t);
 
   // We changed FAStyleIdToShortPrefixId in the icons repo to be canonical and as such, "classic" family does not have any
   // duotone styles.  But we do still need duotone in _STYLE_TO_PREFIX below, so we are manually adding {duotone: 'fad'}
-  _STYLE_TO_PREFIX[a] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {
+  _STYLE_TO_PREFIX[i] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {
     duotone: 'fad'
-  }), _STYLE_TO_PREFIX[a]), dt['kit']), dt['kit-duotone']);
+  }), _STYLE_TO_PREFIX[i]), ul['kit']), ul['kit-duotone']);
   var STYLE_TO_PREFIX = familyProxy(_STYLE_TO_PREFIX);
-  var _PREFIX_TO_LONG_STYLE = _objectSpread2({}, Go$1);
-  _PREFIX_TO_LONG_STYLE[a] = _objectSpread2(_objectSpread2({}, _PREFIX_TO_LONG_STYLE[a]), et['kit']);
+  var _PREFIX_TO_LONG_STYLE = _objectSpread2({}, Ht$1);
+  _PREFIX_TO_LONG_STYLE[i] = _objectSpread2(_objectSpread2({}, _PREFIX_TO_LONG_STYLE[i]), fl['kit']);
   var PREFIX_TO_LONG_STYLE = familyProxy(_PREFIX_TO_LONG_STYLE);
-  var _LONG_STYLE_TO_PREFIX = _objectSpread2({}, zo$1);
-  _LONG_STYLE_TO_PREFIX[a] = _objectSpread2(_objectSpread2({}, _LONG_STYLE_TO_PREFIX[a]), Xo['kit']);
+  var _LONG_STYLE_TO_PREFIX = _objectSpread2({}, $t$1);
+  _LONG_STYLE_TO_PREFIX[i] = _objectSpread2(_objectSpread2({}, _LONG_STYLE_TO_PREFIX[i]), ol['kit']);
   var LONG_STYLE_TO_PREFIX = familyProxy(_LONG_STYLE_TO_PREFIX);
-  var _FONT_WEIGHT_TO_PREFIX = _objectSpread2({}, io);
+  var _FONT_WEIGHT_TO_PREFIX = _objectSpread2({}, gt);
   var FONT_WEIGHT_TO_PREFIX = familyProxy(_FONT_WEIGHT_TO_PREFIX);
-  var RESERVED_CLASSES = [].concat(_toConsumableArray(Go), _toConsumableArray(Ho$1));
+  var RESERVED_CLASSES = [].concat(_toConsumableArray(Ht), _toConsumableArray(to));
 
   function bunker(fn) {
     try {

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 1
node_modules/@fortawesome/fontawesome-free/js/brands.min.js


+ 161 - 98
node_modules/@fortawesome/fontawesome-free/js/conflict-detection.js

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */
@@ -895,8 +895,8 @@
   });
   WINDOW.FontAwesomeDetection = _config;
 
-  var _so;
-  var z = {
+  var _dt;
+  var q = {
       classic: {
         fa: "solid",
         fas: "solid",
@@ -987,40 +987,58 @@
       chisel: {
         "fa-regular": "regular",
         facr: "regular"
+      },
+      utility: {
+        "fa-semibold": "semibold",
+        fausb: "semibold"
+      },
+      "utility-duo": {
+        "fa-semibold": "semibold",
+        faudsb: "semibold"
+      },
+      "utility-fill": {
+        "fa-semibold": "semibold",
+        faufsb: "semibold"
       }
     };
-  var a = "classic",
-    o = "duotone",
+  var i = "classic",
+    t = "duotone",
     d = "sharp",
-    t = "sharp-duotone",
-    i = "chisel",
+    l = "sharp-duotone",
+    f = "chisel",
     n = "etch",
     h = "jelly",
-    s = "jelly-duo",
-    f = "jelly-fill",
+    o = "jelly-duo",
+    u = "jelly-fill",
     g = "notdog",
-    l = "notdog-duo",
-    u = "slab",
-    p = "slab-press",
+    s = "notdog-duo",
+    y = "slab",
+    m = "slab-press",
     e = "thumbprint",
-    w = "whiteboard",
-    m = "Classic",
-    y = "Duotone",
-    x = "Sharp",
-    c = "Sharp Duotone",
-    I = "Chisel",
-    b = "Etch",
-    F = "Jelly",
-    v = "Jelly Duo",
-    S = "Jelly Fill",
-    A = "Notdog",
-    P = "Notdog Duo",
-    j = "Slab",
-    B = "Slab Press",
-    N = "Thumbprint",
-    k = "Whiteboard",
-    so = (_so = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_so, a, m), o, y), d, x), t, c), i, I), n, b), h, F), s, v), f, S), g, A), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_so, l, P), u, j), p, B), e, N), w, k));
-  var io = {
+    p = "utility",
+    a = "utility-duo",
+    w = "utility-fill",
+    x = "whiteboard",
+    b = "Classic",
+    c = "Duotone",
+    I = "Sharp",
+    F = "Sharp Duotone",
+    v = "Chisel",
+    S = "Etch",
+    A = "Jelly",
+    P = "Jelly Duo",
+    j = "Jelly Fill",
+    B = "Notdog",
+    N = "Notdog Duo",
+    k = "Slab",
+    D = "Slab Press",
+    T = "Thumbprint",
+    C = "Utility",
+    W = "Utility Duo",
+    K = "Utility Fill",
+    R = "Whiteboard",
+    dt = (_dt = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_dt, i, b), t, c), d, I), l, F), f, v), n, S), h, A), o, P), u, j), g, B), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_dt, s, N), y, k), m, D), e, T), p, C), a, W), w, K), x, R));
+  var gt = {
       classic: {
         900: "fas",
         400: "far",
@@ -1078,9 +1096,18 @@
       },
       "jelly-duo": {
         400: "fajdr"
+      },
+      utility: {
+        600: "fausb"
+      },
+      "utility-duo": {
+        600: "faudsb"
+      },
+      "utility-fill": {
+        600: "faufsb"
       }
     };
-  var Ro = {
+  var _t = {
       chisel: {
         regular: "facr"
       },
@@ -1136,11 +1163,20 @@
       thumbprint: {
         light: "fatl"
       },
+      utility: {
+        semibold: "fausb"
+      },
+      "utility-duo": {
+        semibold: "faudsb"
+      },
+      "utility-fill": {
+        semibold: "faufsb"
+      },
       whiteboard: {
         semibold: "fawsb"
       }
     };
-  var Oo = {
+  var qt = {
       kit: {
         fak: "kit",
         "fa-kit": "kit"
@@ -1150,13 +1186,13 @@
         "fa-kit-duotone": "kit-duotone"
       }
     },
-    Go = ["kit"];
-  var D = "kit",
+    Ht = ["kit"];
+  var L = "kit",
     r = "kit-duotone",
-    T = "Kit",
-    C = "Kit Duotone",
-    qo = _defineProperty(_defineProperty({}, D, T), r, C);
-  var Xo = {
+    U = "Kit",
+    J = "Kit Duotone",
+    $t = _defineProperty(_defineProperty({}, L, U), r, J);
+  var ol = {
     kit: {
       "fa-kit": "fak"
     },
@@ -1164,7 +1200,7 @@
       "fa-kit-duotone": "fakd"
     }
   };
-  var et = {
+  var fl = {
       kit: {
         fak: "fa-kit"
       },
@@ -1172,7 +1208,7 @@
         fakd: "fa-kit-duotone"
       }
     };
-  var dt = {
+  var ul = {
       kit: {
         kit: "fak"
       },
@@ -1181,50 +1217,56 @@
       }
     };
 
-  var _fl;
+  var _ml;
   var l$1 = {
       GROUP: "duotone-group",
       SWAP_OPACITY: "swap-opacity",
       PRIMARY: "primary",
       SECONDARY: "secondary"
     };
-  var f$1 = "classic",
-    a$1 = "duotone",
-    n$1 = "sharp",
-    t$1 = "sharp-duotone",
+  var n$1 = "classic",
+    o$1 = "duotone",
+    u$1 = "sharp",
+    s$1 = "sharp-duotone",
     h$1 = "chisel",
     g$1 = "etch",
-    u$1 = "jelly",
-    s$1 = "jelly-duo",
-    p$1 = "jelly-fill",
-    y$1 = "notdog",
-    e$1 = "notdog-duo",
-    m$1 = "slab",
-    c$1 = "slab-press",
+    y$1 = "jelly",
+    e$1 = "jelly-duo",
+    m$1 = "jelly-fill",
+    p$1 = "notdog",
+    a$1 = "notdog-duo",
+    w$1 = "slab",
+    b$1 = "slab-press",
     r$1 = "thumbprint",
-    w$1 = "whiteboard",
-    x$1 = "Classic",
-    I$1 = "Duotone",
-    b$1 = "Sharp",
-    F$1 = "Sharp Duotone",
-    v$1 = "Chisel",
-    S$1 = "Etch",
-    A$1 = "Jelly",
-    j$1 = "Jelly Duo",
-    P$1 = "Jelly Fill",
-    B$1 = "Notdog",
-    k$1 = "Notdog Duo",
-    N$1 = "Slab",
-    D$1 = "Slab Press",
-    C$1 = "Thumbprint",
-    T$1 = "Whiteboard",
-    fl = (_fl = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_fl, f$1, x$1), a$1, I$1), n$1, b$1), t$1, F$1), h$1, v$1), g$1, S$1), u$1, A$1), s$1, j$1), p$1, P$1), y$1, B$1), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_fl, e$1, k$1), m$1, N$1), c$1, D$1), r$1, C$1), w$1, T$1));
-  var L = "kit",
+    c$1 = "utility",
+    i$1 = "utility-duo",
+    x$1 = "utility-fill",
+    I$1 = "whiteboard",
+    F$1 = "Classic",
+    v$1 = "Duotone",
+    S$1 = "Sharp",
+    A$1 = "Sharp Duotone",
+    P$1 = "Chisel",
+    j$1 = "Etch",
+    B$1 = "Jelly",
+    N$1 = "Jelly Duo",
+    k$1 = "Jelly Fill",
+    D$1 = "Notdog",
+    C$1 = "Notdog Duo",
+    T$1 = "Slab",
+    L$1 = "Slab Press",
+    W$1 = "Thumbprint",
+    R$1 = "Utility",
+    K$1 = "Utility Duo",
+    U$1 = "Utility Fill",
+    J$1 = "Whiteboard",
+    ml$1 = (_ml = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_ml, n$1, F$1), o$1, v$1), u$1, S$1), s$1, A$1), h$1, P$1), g$1, j$1), y$1, B$1), e$1, N$1), m$1, k$1), p$1, D$1), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_ml, a$1, C$1), w$1, T$1), b$1, L$1), r$1, W$1), c$1, R$1), i$1, K$1), x$1, U$1), I$1, J$1));
+  var E$1 = "kit",
     d$1 = "kit-duotone",
-    R$1 = "Kit",
-    W$1 = "Kit Duotone",
-    lo$1 = _defineProperty(_defineProperty({}, L, R$1), d$1, W$1);
-  var zo$1 = {
+    _$1 = "Kit",
+    M$1 = "Kit Duotone",
+    rt$1 = _defineProperty(_defineProperty({}, E$1, _$1), d$1, M$1);
+  var $t$1 = {
       classic: {
         "fa-brands": "fab",
         "fa-duotone": "fad",
@@ -1282,9 +1324,18 @@
       },
       chisel: {
         "fa-regular": "facr"
+      },
+      utility: {
+        "fa-semibold": "fausb"
+      },
+      "utility-duo": {
+        "fa-semibold": "faudsb"
+      },
+      "utility-fill": {
+        "fa-semibold": "faufsb"
       }
     },
-    J$1 = {
+    z = {
       classic: ["fas", "far", "fal", "fat", "fad"],
       duotone: ["fadr", "fadl", "fadt"],
       sharp: ["fass", "fasr", "fasl", "fast"],
@@ -1299,9 +1350,12 @@
       jelly: ["fajr"],
       "jelly-fill": ["fajfr"],
       "jelly-duo": ["fajdr"],
-      chisel: ["facr"]
+      chisel: ["facr"],
+      utility: ["fausb"],
+      "utility-duo": ["faudsb"],
+      "utility-fill": ["faufsb"]
     },
-    Go$1 = {
+    Ht$1 = {
       classic: {
         fab: "fa-brands",
         fad: "fa-duotone",
@@ -1359,16 +1413,25 @@
       },
       chisel: {
         facr: "fa-regular"
+      },
+      utility: {
+        fausb: "fa-semibold"
+      },
+      "utility-duo": {
+        faudsb: "fa-semibold"
+      },
+      "utility-fill": {
+        faufsb: "fa-semibold"
       }
     },
-    _$1 = ["solid", "regular", "light", "thin", "duotone", "brands", "semibold"],
-    K$1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
-    M$1 = K$1.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]),
-    O$1 = ["aw", "fw", "pull-left", "pull-right"],
-    Ho$1 = [].concat(_toConsumableArray(Object.keys(J$1)), _$1, O$1, ["2xs", "xs", "sm", "lg", "xl", "2xl", "beat", "border", "fade", "beat-fade", "bounce", "flip-both", "flip-horizontal", "flip-vertical", "flip", "inverse", "layers", "layers-bottom-left", "layers-bottom-right", "layers-counter", "layers-text", "layers-top-left", "layers-top-right", "li", "pull-end", "pull-start", "pulse", "rotate-180", "rotate-270", "rotate-90", "rotate-by", "shake", "spin-pulse", "spin-reverse", "spin", "stack-1x", "stack-2x", "stack", "ul", "width-auto", "width-fixed", l$1.GROUP, l$1.SWAP_OPACITY, l$1.PRIMARY, l$1.SECONDARY]).concat(K$1.map(function (o) {
-      return "".concat(o, "x");
-    })).concat(M$1.map(function (o) {
-      return "w-".concat(o);
+    G$1 = ["solid", "regular", "light", "thin", "duotone", "brands", "semibold"],
+    O$1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
+    V$1 = O$1.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]),
+    $$1 = ["aw", "fw", "pull-left", "pull-right"],
+    to = [].concat(_toConsumableArray(Object.keys(z)), G$1, $$1, ["2xs", "xs", "sm", "lg", "xl", "2xl", "beat", "border", "fade", "beat-fade", "bounce", "flip-both", "flip-horizontal", "flip-vertical", "flip", "inverse", "layers", "layers-bottom-left", "layers-bottom-right", "layers-counter", "layers-text", "layers-top-left", "layers-top-right", "li", "pull-end", "pull-start", "pulse", "rotate-180", "rotate-270", "rotate-90", "rotate-by", "shake", "spin-pulse", "spin-reverse", "spin", "stack-1x", "stack-2x", "stack", "ul", "width-auto", "width-fixed", l$1.GROUP, l$1.SWAP_OPACITY, l$1.PRIMARY, l$1.SECONDARY]).concat(O$1.map(function (t) {
+      return "".concat(t, "x");
+    })).concat(V$1.map(function (t) {
+      return "w-".concat(t);
     }));
 
   var PRODUCTION = function () {
@@ -1382,36 +1445,36 @@
     // Defaults to the classic family if family is not available
     return new Proxy(obj, {
       get: function get(target, prop) {
-        return prop in target ? target[prop] : target[a];
+        return prop in target ? target[prop] : target[i];
       }
     });
   }
-  var _PREFIX_TO_STYLE = _objectSpread2({}, z);
+  var _PREFIX_TO_STYLE = _objectSpread2({}, q);
 
   // We changed FACSSClassesToStyleId in the icons repo to be canonical and as such, "classic" family does not have any
   // duotone styles.  But we do still need duotone in _PREFIX_TO_STYLE below, so we are manually adding
   // {'fa-duotone': 'duotone'}
-  _PREFIX_TO_STYLE[a] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {
+  _PREFIX_TO_STYLE[i] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {
     'fa-duotone': 'duotone'
-  }), z[a]), Oo['kit']), Oo['kit-duotone']);
+  }), q[i]), qt['kit']), qt['kit-duotone']);
   var PREFIX_TO_STYLE = familyProxy(_PREFIX_TO_STYLE);
-  var _STYLE_TO_PREFIX = _objectSpread2({}, Ro);
+  var _STYLE_TO_PREFIX = _objectSpread2({}, _t);
 
   // We changed FAStyleIdToShortPrefixId in the icons repo to be canonical and as such, "classic" family does not have any
   // duotone styles.  But we do still need duotone in _STYLE_TO_PREFIX below, so we are manually adding {duotone: 'fad'}
-  _STYLE_TO_PREFIX[a] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {
+  _STYLE_TO_PREFIX[i] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {
     duotone: 'fad'
-  }), _STYLE_TO_PREFIX[a]), dt['kit']), dt['kit-duotone']);
+  }), _STYLE_TO_PREFIX[i]), ul['kit']), ul['kit-duotone']);
   var STYLE_TO_PREFIX = familyProxy(_STYLE_TO_PREFIX);
-  var _PREFIX_TO_LONG_STYLE = _objectSpread2({}, Go$1);
-  _PREFIX_TO_LONG_STYLE[a] = _objectSpread2(_objectSpread2({}, _PREFIX_TO_LONG_STYLE[a]), et['kit']);
+  var _PREFIX_TO_LONG_STYLE = _objectSpread2({}, Ht$1);
+  _PREFIX_TO_LONG_STYLE[i] = _objectSpread2(_objectSpread2({}, _PREFIX_TO_LONG_STYLE[i]), fl['kit']);
   var PREFIX_TO_LONG_STYLE = familyProxy(_PREFIX_TO_LONG_STYLE);
-  var _LONG_STYLE_TO_PREFIX = _objectSpread2({}, zo$1);
-  _LONG_STYLE_TO_PREFIX[a] = _objectSpread2(_objectSpread2({}, _LONG_STYLE_TO_PREFIX[a]), Xo['kit']);
+  var _LONG_STYLE_TO_PREFIX = _objectSpread2({}, $t$1);
+  _LONG_STYLE_TO_PREFIX[i] = _objectSpread2(_objectSpread2({}, _LONG_STYLE_TO_PREFIX[i]), ol['kit']);
   var LONG_STYLE_TO_PREFIX = familyProxy(_LONG_STYLE_TO_PREFIX);
-  var _FONT_WEIGHT_TO_PREFIX = _objectSpread2({}, io);
+  var _FONT_WEIGHT_TO_PREFIX = _objectSpread2({}, gt);
   var FONT_WEIGHT_TO_PREFIX = familyProxy(_FONT_WEIGHT_TO_PREFIX);
-  var RESERVED_CLASSES = [].concat(_toConsumableArray(Go), _toConsumableArray(Ho$1));
+  var RESERVED_CLASSES = [].concat(_toConsumableArray(Ht), _toConsumableArray(to));
 
   function bunker(fn) {
     try {

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 1
node_modules/@fortawesome/fontawesome-free/js/conflict-detection.min.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 208 - 115
node_modules/@fortawesome/fontawesome-free/js/fontawesome.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 1
node_modules/@fortawesome/fontawesome-free/js/fontawesome.min.js


+ 165 - 102
node_modules/@fortawesome/fontawesome-free/js/regular.js

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */
@@ -90,8 +90,8 @@
     }
   }
 
-  var _so;
-  var z = {
+  var _dt;
+  var q = {
       classic: {
         fa: "solid",
         fas: "solid",
@@ -182,40 +182,58 @@
       chisel: {
         "fa-regular": "regular",
         facr: "regular"
+      },
+      utility: {
+        "fa-semibold": "semibold",
+        fausb: "semibold"
+      },
+      "utility-duo": {
+        "fa-semibold": "semibold",
+        faudsb: "semibold"
+      },
+      "utility-fill": {
+        "fa-semibold": "semibold",
+        faufsb: "semibold"
       }
     };
-  var a = "classic",
-    o = "duotone",
+  var i = "classic",
+    t = "duotone",
     d = "sharp",
-    t = "sharp-duotone",
-    i = "chisel",
+    l = "sharp-duotone",
+    f = "chisel",
     n = "etch",
     h = "jelly",
-    s = "jelly-duo",
-    f = "jelly-fill",
+    o = "jelly-duo",
+    u = "jelly-fill",
     g = "notdog",
-    l = "notdog-duo",
-    u = "slab",
-    p = "slab-press",
+    s = "notdog-duo",
+    y = "slab",
+    m = "slab-press",
     e = "thumbprint",
-    w = "whiteboard",
-    m = "Classic",
-    y = "Duotone",
-    x = "Sharp",
-    c = "Sharp Duotone",
-    I = "Chisel",
-    b = "Etch",
-    F = "Jelly",
-    v = "Jelly Duo",
-    S = "Jelly Fill",
-    A = "Notdog",
-    P = "Notdog Duo",
-    j = "Slab",
-    B = "Slab Press",
-    N = "Thumbprint",
-    k = "Whiteboard",
-    so = (_so = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_so, a, m), o, y), d, x), t, c), i, I), n, b), h, F), s, v), f, S), g, A), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_so, l, P), u, j), p, B), e, N), w, k));
-  var io = {
+    p = "utility",
+    a = "utility-duo",
+    w = "utility-fill",
+    x = "whiteboard",
+    b = "Classic",
+    c = "Duotone",
+    I = "Sharp",
+    F = "Sharp Duotone",
+    v = "Chisel",
+    S = "Etch",
+    A = "Jelly",
+    P = "Jelly Duo",
+    j = "Jelly Fill",
+    B = "Notdog",
+    N = "Notdog Duo",
+    k = "Slab",
+    D = "Slab Press",
+    T = "Thumbprint",
+    C = "Utility",
+    W = "Utility Duo",
+    K = "Utility Fill",
+    R = "Whiteboard",
+    dt = (_dt = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_dt, i, b), t, c), d, I), l, F), f, v), n, S), h, A), o, P), u, j), g, B), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_dt, s, N), y, k), m, D), e, T), p, C), a, W), w, K), x, R));
+  var gt = {
       classic: {
         900: "fas",
         400: "far",
@@ -273,9 +291,18 @@
       },
       "jelly-duo": {
         400: "fajdr"
+      },
+      utility: {
+        600: "fausb"
+      },
+      "utility-duo": {
+        600: "faudsb"
+      },
+      "utility-fill": {
+        600: "faufsb"
       }
     };
-  var Ro = {
+  var _t = {
       chisel: {
         regular: "facr"
       },
@@ -331,11 +358,20 @@
       thumbprint: {
         light: "fatl"
       },
+      utility: {
+        semibold: "fausb"
+      },
+      "utility-duo": {
+        semibold: "faudsb"
+      },
+      "utility-fill": {
+        semibold: "faufsb"
+      },
       whiteboard: {
         semibold: "fawsb"
       }
     };
-  var Oo = {
+  var qt = {
       kit: {
         fak: "kit",
         "fa-kit": "kit"
@@ -345,13 +381,13 @@
         "fa-kit-duotone": "kit-duotone"
       }
     },
-    Go = ["kit"];
-  var D = "kit",
+    Ht = ["kit"];
+  var L = "kit",
     r = "kit-duotone",
-    T = "Kit",
-    C = "Kit Duotone",
-    qo = _defineProperty(_defineProperty({}, D, T), r, C);
-  var Xo = {
+    U = "Kit",
+    J = "Kit Duotone",
+    $t = _defineProperty(_defineProperty({}, L, U), r, J);
+  var ol = {
     kit: {
       "fa-kit": "fak"
     },
@@ -359,7 +395,7 @@
       "fa-kit-duotone": "fakd"
     }
   };
-  var et = {
+  var fl = {
       kit: {
         fak: "fa-kit"
       },
@@ -367,7 +403,7 @@
         fakd: "fa-kit-duotone"
       }
     };
-  var dt = {
+  var ul = {
       kit: {
         kit: "fak"
       },
@@ -376,50 +412,56 @@
       }
     };
 
-  var _fl;
+  var _ml;
   var l$1 = {
       GROUP: "duotone-group",
       SWAP_OPACITY: "swap-opacity",
       PRIMARY: "primary",
       SECONDARY: "secondary"
     };
-  var f$1 = "classic",
-    a$1 = "duotone",
-    n$1 = "sharp",
-    t$1 = "sharp-duotone",
+  var n$1 = "classic",
+    o$1 = "duotone",
+    u$1 = "sharp",
+    s$1 = "sharp-duotone",
     h$1 = "chisel",
     g$1 = "etch",
-    u$1 = "jelly",
-    s$1 = "jelly-duo",
-    p$1 = "jelly-fill",
-    y$1 = "notdog",
-    e$1 = "notdog-duo",
-    m$1 = "slab",
-    c$1 = "slab-press",
+    y$1 = "jelly",
+    e$1 = "jelly-duo",
+    m$1 = "jelly-fill",
+    p$1 = "notdog",
+    a$1 = "notdog-duo",
+    w$1 = "slab",
+    b$1 = "slab-press",
     r$1 = "thumbprint",
-    w$1 = "whiteboard",
-    x$1 = "Classic",
-    I$1 = "Duotone",
-    b$1 = "Sharp",
-    F$1 = "Sharp Duotone",
-    v$1 = "Chisel",
-    S$1 = "Etch",
-    A$1 = "Jelly",
-    j$1 = "Jelly Duo",
-    P$1 = "Jelly Fill",
-    B$1 = "Notdog",
-    k$1 = "Notdog Duo",
-    N$1 = "Slab",
-    D$1 = "Slab Press",
-    C$1 = "Thumbprint",
-    T$1 = "Whiteboard",
-    fl = (_fl = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_fl, f$1, x$1), a$1, I$1), n$1, b$1), t$1, F$1), h$1, v$1), g$1, S$1), u$1, A$1), s$1, j$1), p$1, P$1), y$1, B$1), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_fl, e$1, k$1), m$1, N$1), c$1, D$1), r$1, C$1), w$1, T$1));
-  var L = "kit",
+    c$1 = "utility",
+    i$1 = "utility-duo",
+    x$1 = "utility-fill",
+    I$1 = "whiteboard",
+    F$1 = "Classic",
+    v$1 = "Duotone",
+    S$1 = "Sharp",
+    A$1 = "Sharp Duotone",
+    P$1 = "Chisel",
+    j$1 = "Etch",
+    B$1 = "Jelly",
+    N$1 = "Jelly Duo",
+    k$1 = "Jelly Fill",
+    D$1 = "Notdog",
+    C$1 = "Notdog Duo",
+    T$1 = "Slab",
+    L$1 = "Slab Press",
+    W$1 = "Thumbprint",
+    R$1 = "Utility",
+    K$1 = "Utility Duo",
+    U$1 = "Utility Fill",
+    J$1 = "Whiteboard",
+    ml$1 = (_ml = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_ml, n$1, F$1), o$1, v$1), u$1, S$1), s$1, A$1), h$1, P$1), g$1, j$1), y$1, B$1), e$1, N$1), m$1, k$1), p$1, D$1), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_ml, a$1, C$1), w$1, T$1), b$1, L$1), r$1, W$1), c$1, R$1), i$1, K$1), x$1, U$1), I$1, J$1));
+  var E$1 = "kit",
     d$1 = "kit-duotone",
-    R$1 = "Kit",
-    W$1 = "Kit Duotone",
-    lo$1 = _defineProperty(_defineProperty({}, L, R$1), d$1, W$1);
-  var zo$1 = {
+    _$1 = "Kit",
+    M$1 = "Kit Duotone",
+    rt$1 = _defineProperty(_defineProperty({}, E$1, _$1), d$1, M$1);
+  var $t$1 = {
       classic: {
         "fa-brands": "fab",
         "fa-duotone": "fad",
@@ -477,9 +519,18 @@
       },
       chisel: {
         "fa-regular": "facr"
+      },
+      utility: {
+        "fa-semibold": "fausb"
+      },
+      "utility-duo": {
+        "fa-semibold": "faudsb"
+      },
+      "utility-fill": {
+        "fa-semibold": "faufsb"
       }
     },
-    J$1 = {
+    z = {
       classic: ["fas", "far", "fal", "fat", "fad"],
       duotone: ["fadr", "fadl", "fadt"],
       sharp: ["fass", "fasr", "fasl", "fast"],
@@ -494,9 +545,12 @@
       jelly: ["fajr"],
       "jelly-fill": ["fajfr"],
       "jelly-duo": ["fajdr"],
-      chisel: ["facr"]
+      chisel: ["facr"],
+      utility: ["fausb"],
+      "utility-duo": ["faudsb"],
+      "utility-fill": ["faufsb"]
     },
-    Go$1 = {
+    Ht$1 = {
       classic: {
         fab: "fa-brands",
         fad: "fa-duotone",
@@ -554,16 +608,25 @@
       },
       chisel: {
         facr: "fa-regular"
+      },
+      utility: {
+        fausb: "fa-semibold"
+      },
+      "utility-duo": {
+        faudsb: "fa-semibold"
+      },
+      "utility-fill": {
+        faufsb: "fa-semibold"
       }
     },
-    _$1 = ["solid", "regular", "light", "thin", "duotone", "brands", "semibold"],
-    K$1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
-    M$1 = K$1.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]),
-    O$1 = ["aw", "fw", "pull-left", "pull-right"],
-    Ho$1 = [].concat(_toConsumableArray(Object.keys(J$1)), _$1, O$1, ["2xs", "xs", "sm", "lg", "xl", "2xl", "beat", "border", "fade", "beat-fade", "bounce", "flip-both", "flip-horizontal", "flip-vertical", "flip", "inverse", "layers", "layers-bottom-left", "layers-bottom-right", "layers-counter", "layers-text", "layers-top-left", "layers-top-right", "li", "pull-end", "pull-start", "pulse", "rotate-180", "rotate-270", "rotate-90", "rotate-by", "shake", "spin-pulse", "spin-reverse", "spin", "stack-1x", "stack-2x", "stack", "ul", "width-auto", "width-fixed", l$1.GROUP, l$1.SWAP_OPACITY, l$1.PRIMARY, l$1.SECONDARY]).concat(K$1.map(function (o) {
-      return "".concat(o, "x");
-    })).concat(M$1.map(function (o) {
-      return "w-".concat(o);
+    G$1 = ["solid", "regular", "light", "thin", "duotone", "brands", "semibold"],
+    O$1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
+    V$1 = O$1.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]),
+    $$1 = ["aw", "fw", "pull-left", "pull-right"],
+    to = [].concat(_toConsumableArray(Object.keys(z)), G$1, $$1, ["2xs", "xs", "sm", "lg", "xl", "2xl", "beat", "border", "fade", "beat-fade", "bounce", "flip-both", "flip-horizontal", "flip-vertical", "flip", "inverse", "layers", "layers-bottom-left", "layers-bottom-right", "layers-counter", "layers-text", "layers-top-left", "layers-top-right", "li", "pull-end", "pull-start", "pulse", "rotate-180", "rotate-270", "rotate-90", "rotate-by", "shake", "spin-pulse", "spin-reverse", "spin", "stack-1x", "stack-2x", "stack", "ul", "width-auto", "width-fixed", l$1.GROUP, l$1.SWAP_OPACITY, l$1.PRIMARY, l$1.SECONDARY]).concat(O$1.map(function (t) {
+      return "".concat(t, "x");
+    })).concat(V$1.map(function (t) {
+      return "w-".concat(t);
     }));
 
   var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';
@@ -578,36 +641,36 @@
     // Defaults to the classic family if family is not available
     return new Proxy(obj, {
       get: function get(target, prop) {
-        return prop in target ? target[prop] : target[a];
+        return prop in target ? target[prop] : target[i];
       }
     });
   }
-  var _PREFIX_TO_STYLE = _objectSpread2({}, z);
+  var _PREFIX_TO_STYLE = _objectSpread2({}, q);
 
   // We changed FACSSClassesToStyleId in the icons repo to be canonical and as such, "classic" family does not have any
   // duotone styles.  But we do still need duotone in _PREFIX_TO_STYLE below, so we are manually adding
   // {'fa-duotone': 'duotone'}
-  _PREFIX_TO_STYLE[a] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {
+  _PREFIX_TO_STYLE[i] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {
     'fa-duotone': 'duotone'
-  }), z[a]), Oo['kit']), Oo['kit-duotone']);
+  }), q[i]), qt['kit']), qt['kit-duotone']);
   var PREFIX_TO_STYLE = familyProxy(_PREFIX_TO_STYLE);
-  var _STYLE_TO_PREFIX = _objectSpread2({}, Ro);
+  var _STYLE_TO_PREFIX = _objectSpread2({}, _t);
 
   // We changed FAStyleIdToShortPrefixId in the icons repo to be canonical and as such, "classic" family does not have any
   // duotone styles.  But we do still need duotone in _STYLE_TO_PREFIX below, so we are manually adding {duotone: 'fad'}
-  _STYLE_TO_PREFIX[a] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {
+  _STYLE_TO_PREFIX[i] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {
     duotone: 'fad'
-  }), _STYLE_TO_PREFIX[a]), dt['kit']), dt['kit-duotone']);
+  }), _STYLE_TO_PREFIX[i]), ul['kit']), ul['kit-duotone']);
   var STYLE_TO_PREFIX = familyProxy(_STYLE_TO_PREFIX);
-  var _PREFIX_TO_LONG_STYLE = _objectSpread2({}, Go$1);
-  _PREFIX_TO_LONG_STYLE[a] = _objectSpread2(_objectSpread2({}, _PREFIX_TO_LONG_STYLE[a]), et['kit']);
+  var _PREFIX_TO_LONG_STYLE = _objectSpread2({}, Ht$1);
+  _PREFIX_TO_LONG_STYLE[i] = _objectSpread2(_objectSpread2({}, _PREFIX_TO_LONG_STYLE[i]), fl['kit']);
   var PREFIX_TO_LONG_STYLE = familyProxy(_PREFIX_TO_LONG_STYLE);
-  var _LONG_STYLE_TO_PREFIX = _objectSpread2({}, zo$1);
-  _LONG_STYLE_TO_PREFIX[a] = _objectSpread2(_objectSpread2({}, _LONG_STYLE_TO_PREFIX[a]), Xo['kit']);
+  var _LONG_STYLE_TO_PREFIX = _objectSpread2({}, $t$1);
+  _LONG_STYLE_TO_PREFIX[i] = _objectSpread2(_objectSpread2({}, _LONG_STYLE_TO_PREFIX[i]), ol['kit']);
   var LONG_STYLE_TO_PREFIX = familyProxy(_LONG_STYLE_TO_PREFIX);
-  var _FONT_WEIGHT_TO_PREFIX = _objectSpread2({}, io);
+  var _FONT_WEIGHT_TO_PREFIX = _objectSpread2({}, gt);
   var FONT_WEIGHT_TO_PREFIX = familyProxy(_FONT_WEIGHT_TO_PREFIX);
-  var RESERVED_CLASSES = [].concat(_toConsumableArray(Go), _toConsumableArray(Ho$1));
+  var RESERVED_CLASSES = [].concat(_toConsumableArray(Ht), _toConsumableArray(to));
 
   function bunker(fn) {
     try {
@@ -665,7 +728,7 @@
 
   var icons = {
     "square-minus": [448, 512, [61767, "minus-square"], "f146", "M64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM136 232l176 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-176 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z"],
-    "calendar-check": [448, 512, [], "f274", "M120 0c13.3 0 24 10.7 24 24l0 40 160 0 0-40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40 32 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 128C0 92.7 28.7 64 64 64l32 0 0-40c0-13.3 10.7-24 24-24zm0 112l-56 0c-8.8 0-16 7.2-16 16l0 288c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-288c0-8.8-7.2-16-16-16l-264 0zM308.4 228.7l-80 128c-4.2 6.7-11.4 10.9-19.3 11.3s-15.5-3.2-20.2-9.6l-48-64c-8-10.6-5.8-25.6 4.8-33.6s25.6-5.8 33.6 4.8l27 36 61.4-98.3c7-11.2 21.8-14.7 33.1-7.6s14.7 21.8 7.6 33.1z"],
+    "calendar-check": [448, 512, [], "f274", "M328 0c13.3 0 24 10.7 24 24l0 40 32 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 128C0 92.7 28.7 64 64 64l32 0 0-40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40 160 0 0-40c0-13.3 10.7-24 24-24zM64 112c-8.8 0-16 7.2-16 16l0 288c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-288c0-8.8-7.2-16-16-16L64 112zm230.7 65.9c7.8-10.7 22.8-13.1 33.5-5.3 10.7 7.8 13.1 22.8 5.3 33.5L211.4 374.1c-4.1 5.7-10.5 9.3-17.5 9.8-7 .5-13.9-2-18.8-6.9l-55.9-55.9c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l36 36 105.6-145.2z"],
     "face-kiss": [512, 512, [128535, "kiss"], "f596", "M464 256a208 208 0 1 0 -416 0 208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zm240 0l32 0c26.5 0 48 21.5 48 48 0 12.3-4.6 23.5-12.2 32 7.6 8.5 12.2 19.7 12.2 32 0 26.5-21.5 48-48 48l-32 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm-96-48a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"],
     "paste": [512, 512, ["file-clipboard"], "f0ea", "M64 48l224 0c8.8 0 16 7.2 16 16l0 48 48 0 0-48c0-35.3-28.7-64-64-64L64 0C28.7 0 0 28.7 0 64L0 384c0 35.3 28.7 64 64 64l112 0 0-48-112 0c-8.8 0-16-7.2-16-16L48 64c0-8.8 7.2-16 16-16zm176 72c0-13.3-10.7-24-24-24L104 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l105.6 0c8.8-8.6 19-15.8 30.2-21.1 .1-.9 .2-1.9 .2-2.9zM448 464l-160 0c-8.8 0-16-7.2-16-16l0-224c0-8.8 7.2-16 16-16l101.5 0c4.2 0 8.3 1.7 11.3 4.7l58.5 58.5c3 3 4.7 7.1 4.7 11.3L464 448c0 8.8-7.2 16-16 16zM224 224l0 224c0 35.3 28.7 64 64 64l160 0c35.3 0 64-28.7 64-64l0-165.5c0-17-6.7-33.3-18.7-45.3l-58.5-58.5c-12-12-28.3-18.7-45.3-18.7L288 160c-35.3 0-64 28.7-64 64z"],
     "hand-point-left": [512, 512, [], "f0a5", "M64 128l177.6 0c-1 5.2-1.6 10.5-1.6 16l0 16-176 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm224 16c0-17.7 14.3-32 32-32l24 0c66.3 0 120 53.7 120 120l0 48c0 52.5-33.7 97.1-80.7 113.4 .5-3.1 .7-6.2 .7-9.4 0-20-9.2-37.9-23.6-49.7 4.9-9 7.6-19.4 7.6-30.3 0-15.1-5.3-29-14-40 8.8-11 14-24.9 14-40l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80zm32-80l0 0c-18 0-34.6 6-48 16L64 80C28.7 80 0 108.7 0 144s28.7 64 64 64l82 0c-1.3 5.1-2 10.5-2 16 0 25.3 14.7 47.2 36 57.6-2.6 7-4 14.5-4 22.4 0 20 9.2 37.9 23.6 49.7-4.9 9-7.6 19.4-7.6 30.3 0 35.3 28.7 64 64 64l88 0c92.8 0 168-75.2 168-168l0-48c0-92.8-75.2-168-168-168l-24 0zM256 400c-8.8 0-16-7.2-16-16s7.2-16 16-16l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0zM240 224c0 5.5 .7 10.9 2 16l-34 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l32 0 0 16zm24 64l40 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l24 0z"],
@@ -716,7 +779,7 @@
     "clipboard": [384, 512, [128203], "f328", "M232 96l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l80 0c13.3 0 24 10.7 24 24s-10.7 24-24 24zm0 48c37.1 0 67.6-28 71.6-64L320 80c8.8 0 16 7.2 16 16l0 352c0 8.8-7.2 16-16 16L64 464c-8.8 0-16-7.2-16-16L48 96c0-8.8 7.2-16 16-16l16.4 0c4 36 34.5 64 71.6 64l80 0zM291.9 32C279 12.7 257 0 232 0L152 0c-25 0-47 12.7-59.9 32L64 32C28.7 32 0 60.7 0 96L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-352c0-35.3-28.7-64-64-64l-28.1 0z"],
     "thumbs-down": [512, 512, [128078, 61576], "f165", "M360 32l7.4 .4c35 3.6 62.5 32.2 64.4 67.7 17.8 11.8 30.1 31.4 32 53.9l.2 6c0 5.7-.7 11.2-2 16.5 10.2 11.5 16.8 26.3 17.8 42.7l.2 4.8c0 13.2-3.6 25.4-9.8 36 4.9 8.4 8.2 17.9 9.3 28l.4 8c0 37.3-28.3 67.9-64.6 71.6l-7.4 .4-109.7 0 14.1 30 3.1 7.6c12.5 35.7-1.8 75.5-34.2 95l-7.2 3.9c-37.5 17.6-81.7 3.6-102.6-31.2l-.6-.9-2.7-5-.6-1.2-30.1-64c-9.4 17.8-28 29.9-49.5 29.9l-32 0c-30.9 0-56-25.1-56-56L0 152c0-30.9 25.1-56 56-56l32 0c12.4 0 23.9 4.1 33.2 11 13.2-21.4 32-39.4 55-51.6l12.2-6.5 .7-.3 6.6-3.2 .7-.3 7.1-3c16.7-6.6 34.5-9.9 52.6-9.9L360 32zM255.9 80c-12 0-23.9 2.3-35.1 6.6l-4.7 2-5.3 2.6 0 0-12.2 6.5c-29.2 15.5-48.3 44.9-50.7 77.6l-.2 8 0 112.9 .1 4.1c.5 8.2 2.5 16.2 6 23.7l56.8 120.9 2.1 3.8c8.4 13.7 26 19.1 40.8 12.2l2.9-1.6c13-7.8 18.7-23.7 13.7-38l-1.2-3-30.2-64.2c-3.5-7.4-2.9-16.1 1.5-23.1s12-11.1 20.2-11.1l147.5 0 2.4-.1c11.3-1.1 20.3-10.1 21.4-21.4l.1-2.5c0-7.1-3.1-13.5-8.2-18-5.2-4.6-8.2-11.1-8.2-18s3-13.4 8.2-18c4.4-3.9 7.4-9.3 8-15.3l.2-2.7c0-8.4-4.4-15.9-11.2-20.2-10.7-6.9-14.2-20.9-8-32 1.5-2.6 2.5-5.6 2.9-8.6l.2-3.2c0-10.6-6.9-19.6-16.6-22.8-11.7-3.8-18.7-15.9-16-28 .2-.9 .3-1.8 .4-2.6l.2-2.6c0-12.4-9.5-22.6-21.6-23.8L360 80 255.9 80zM56 144c-4.4 0-8 3.6-8 8l0 224c0 4.4 3.6 8 8 8l32 0c4.4 0 8-3.6 8-8l0-224c0-4.4-3.6-8-8-8l-32 0z"],
     "id-badge": [384, 512, [], "f2c1", "M256 48l0 16c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-16-64 0c-8.8 0-16 7.2-16 16l0 384c0 8.8 7.2 16 16 16l256 0c8.8 0 16-7.2 16-16l0-384c0-8.8-7.2-16-16-16l-64 0zM0 64C0 28.7 28.7 0 64 0L320 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zM160 320l64 0c44.2 0 80 35.8 80 80 0 8.8-7.2 16-16 16L96 416c-8.8 0-16-7.2-16-16 0-44.2 35.8-80 80-80zm-24-96a56 56 0 1 1 112 0 56 56 0 1 1 -112 0z"],
-    "square-check": [448, 512, [9745, 9989, 61510, "check-square"], "f14a", "M64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM308.4 204.7l-80 128c-4.2 6.7-11.4 10.9-19.3 11.3s-15.5-3.2-20.2-9.6l-48-64c-8-10.6-5.8-25.6 4.8-33.6s25.6-5.8 33.6 4.8l27 36 61.4-98.3c7-11.2 21.8-14.7 33.1-7.6s14.7 21.8 7.6 33.1z"],
+    "square-check": [448, 512, [9745, 9989, 61510, "check-square"], "f14a", "M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zm230.7 89.9c7.8-10.7 22.8-13.1 33.5-5.3 10.7 7.8 13.1 22.8 5.3 33.5L211.4 366.1c-4.1 5.7-10.5 9.3-17.5 9.8-7 .5-13.9-2-18.8-6.9l-55.9-55.9c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l36 36 105.6-145.2z"],
     "chess-bishop": [320, 512, [9821], "f43a", "M216 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0 81.8 98.1c24.7 29.6 38.2 67 38.2 105.6 0 43.7-17.4 85.7-48.3 116.6l-8.6 8.6 46.5 58.2c6.7 8.4 10.4 18.8 10.4 29.6 0 26.2-21.2 47.4-47.4 47.4L47.4 512C21.2 512 0 490.8 0 464.6 0 453.9 3.7 443.4 10.4 435l46.5-58.2-8.6-8.6C17.4 337.4 0 295.4 0 251.7 0 213.1 13.5 175.8 38.2 146.1L120 48 104 48C90.7 48 80 37.3 80 24S90.7 0 104 0L216 0zM94.4 406.8l-45.7 57.2 222.7 0-45.7-57.1-5.5-6.9-120.3 0-5.5 6.8zM156.9 78.7L75.1 176.8c-15.3 18.4-24.6 41-26.7 64.7L48 251.7c0 31 12.3 60.7 34.2 82.7l17.7 17.7 120.2 0c6.2-6.2 12.1-12.1 17.8-17.7 21.9-21.9 34.2-51.6 34.2-82.6l-.4-10.2c-1.5-17-6.7-33.3-15.2-48L209 241c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l51.8-51.8-63.7-76.5-3.1-3.8-3.1 3.8z"],
     "envelope-open": [512, 512, [62135], "f2b6", "M512 416c0 35.3-28.5 64-63.9 64L64 480c-35.4 0-64-28.7-64-64L0 164c.1-15.5 7.8-30 20.5-38.8L206-2.7c30.1-20.7 69.8-20.7 99.9 0L491.5 125.2c12.8 8.8 20.4 23.3 20.5 38.8l0 252zM64 432l384.1 0c8.8 0 15.9-7.1 15.9-16l0-191.7-154.8 117.4c-31.4 23.9-74.9 23.9-106.4 0L48 224.3 48 416c0 8.9 7.2 16 16 16zM463.6 164.4L278.7 36.8c-13.7-9.4-31.7-9.4-45.4 0L48.4 164.4 231.8 303.5c14.3 10.8 34.1 10.8 48.4 0L463.6 164.4z"],
     "circle-xmark": [512, 512, [61532, "times-circle", "xmark-circle"], "f057", "M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM167 167c-9.4 9.4-9.4 24.6 0 33.9l55 55-55 55c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55-55-55c-9.4-9.4-24.6-9.4-33.9 0z"],
@@ -775,7 +838,7 @@
     "circle-down": [512, 512, [61466, "arrow-alt-circle-down"], "f358", "M256 464a208 208 0 1 1 0-416 208 208 0 1 1 0 416zM256 0a256 256 0 1 0 0 512 256 256 0 1 0 0-512zM244.7 387.3c6.2 6.2 16.4 6.2 22.6 0l104-104c4.6-4.6 5.9-11.5 3.5-17.4S366.5 256 360 256l-72 0 0-104c0-13.3-10.7-24-24-24l-16 0c-13.3 0-24 10.7-24 24l0 104-72 0c-6.5 0-12.3 3.9-14.8 9.9s-1.1 12.9 3.5 17.4l104 104z"],
     "file-lines": [384, 512, [128441, 128462, 61686, "file-alt", "file-text"], "f15c", "M64 48l112 0 0 88c0 39.8 32.2 72 72 72l88 0 0 240c0 8.8-7.2 16-16 16L64 464c-8.8 0-16-7.2-16-16L48 64c0-8.8 7.2-16 16-16zM224 67.9l92.1 92.1-68.1 0c-13.3 0-24-10.7-24-24l0-68.1zM64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-261.5c0-17-6.7-33.3-18.7-45.3L242.7 18.7C230.7 6.7 214.5 0 197.5 0L64 0zm56 256c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z"],
     "comments": [576, 512, [128490, 61670], "f086", "M76.2 258.7c6.1-15.2 4-32.6-5.6-45.9-14.5-20.1-22.6-43.7-22.6-68.8 0-66.8 60.5-128 144-128s144 61.2 144 128-60.5 128-144 128c-15.9 0-31.1-2.3-45.3-6.5-10.3-3.1-21.4-2.5-31.4 1.5l-50.4 20.2 11.4-28.5zM0 144c0 35.8 11.6 69.1 31.7 96.8L1.9 315.2c-1.3 3.2-1.9 6.6-1.9 10 0 14.8 12 26.8 26.8 26.8 3.4 0 6.8-.7 10-1.9l96.3-38.5c18.6 5.5 38.4 8.4 58.9 8.4 106 0 192-78.8 192-176S298-32 192-32 0 46.8 0 144zM384 512c20.6 0 40.3-3 58.9-8.4l96.3 38.5c3.2 1.3 6.6 1.9 10 1.9 14.8 0 26.8-12 26.8-26.8 0-3.4-.7-6.8-1.9-10l-29.7-74.4c20-27.8 31.7-61.1 31.7-96.8 0-82.4-61.7-151.5-145-170.7-1.6 16.3-5.1 31.9-10.1 46.9 63.9 14.8 107.2 67.3 107.2 123.9 0 25.1-8.1 48.7-22.6 68.8-9.6 13.3-11.7 30.6-5.6 45.9l11.4 28.5-50.4-20.2c-10-4-21.1-4.5-31.4-1.5-14.2 4.2-29.4 6.5-45.3 6.5-72.2 0-127.1-45.7-140.7-101.2-15.6 3.2-31.7 5-48.1 5.2 16.4 81.9 94.7 144 188.8 144z"],
-    "circle-check": [512, 512, [61533, "check-circle"], "f058", "M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464a256 256 0 1 0 0-512 256 256 0 1 0 0 512zm84.4-299.3c7-11.2 3.6-26-7.6-33.1s-26-3.6-33.1 7.6l-61.4 98.3-27-36c-8-10.6-23-12.8-33.6-4.8s-12.8 23-4.8 33.6l48 64c4.7 6.3 12.3 9.9 20.2 9.6s15.1-4.5 19.3-11.3l80-128z"],
+    "circle-check": [512, 512, [61533, "check-circle"], "f058", "M256 512a256 256 0 1 1 0-512 256 256 0 1 1 0 512zm0-464a208 208 0 1 0 0 416 208 208 0 1 0 0-416zm70.7 121.9c7.8-10.7 22.8-13.1 33.5-5.3 10.7 7.8 13.1 22.8 5.3 33.5L243.4 366.1c-4.1 5.7-10.5 9.3-17.5 9.8-7 .5-13.9-2-18.8-6.9l-55.9-55.9c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l36 36 105.6-145.2z"],
     "moon": [512, 512, [127769, 9214], "f186", "M239.3 48.7c-107.1 8.5-191.3 98.1-191.3 207.3 0 114.9 93.1 208 208 208 33.3 0 64.7-7.8 92.6-21.7-103.4-23.4-180.6-115.8-180.6-226.3 0-65.8 27.4-125.1 71.3-167.3zM0 256c0-141.4 114.6-256 256-256 19.4 0 38.4 2.2 56.7 6.3 9.9 2.2 17.3 10.5 18.5 20.5s-4 19.8-13.1 24.4c-60.6 30.2-102.1 92.7-102.1 164.8 0 101.6 82.4 184 184 184 5 0 9.9-.2 14.8-.6 10.1-.8 19.6 4.8 23.8 14.1s2 20.1-5.3 27.1C387.3 484.8 324.8 512 256 512 114.6 512 0 397.4 0 256z"],
     "closed-captioning": [512, 512, [], "f20a", "M448 112c8.8 0 16 7.2 16 16l0 256c0 8.8-7.2 16-16 16L64 400c-8.8 0-16-7.2-16-16l0-256c0-8.8 7.2-16 16-16l384 0zM64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm88 144l32 0c4.4 0 8 3.6 8 8 0 13.3 10.7 24 24 24s24-10.7 24-24c0-30.9-25.1-56-56-56l-32 0c-30.9 0-56 25.1-56 56l0 80c0 30.9 25.1 56 56 56l32 0c30.9 0 56-25.1 56-56 0-13.3-10.7-24-24-24s-24 10.7-24 24c0 4.4-3.6 8-8 8l-32 0c-4.4 0-8-3.6-8-8l0-80c0-4.4 3.6-8 8-8zm168 8c0-4.4 3.6-8 8-8l32 0c4.4 0 8 3.6 8 8 0 13.3 10.7 24 24 24s24-10.7 24-24c0-30.9-25.1-56-56-56l-32 0c-30.9 0-56 25.1-56 56l0 80c0 30.9 25.1 56 56 56l32 0c30.9 0 56-25.1 56-56 0-13.3-10.7-24-24-24s-24 10.7-24 24c0 4.4-3.6 8-8 8l-32 0c-4.4 0-8-3.6-8-8l0-80z"],
     "images": [576, 512, [], "f302", "M480 80c8.8 0 16 7.2 16 16l0 256c0 8.8-7.2 16-16 16l-320 0c-8.8 0-16-7.2-16-16l0-256c0-8.8 7.2-16 16-16l320 0zM160 32c-35.3 0-64 28.7-64 64l0 256c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L160 32zm80 112a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm140.7 3.8c-4.3-7.3-12.2-11.8-20.7-11.8s-16.4 4.5-20.7 11.8l-46.5 79-17.2-24.6c-4.5-6.4-11.8-10.2-19.7-10.2s-15.2 3.8-19.7 10.2l-56 80c-5.1 7.3-5.8 16.9-1.6 24.8S191.1 320 200 320l240 0c8.6 0 16.6-4.6 20.8-12.1s4.2-16.7-.1-24.1l-80-136zM48 152c0-13.3-10.7-24-24-24S0 138.7 0 152L0 448c0 35.3 28.7 64 64 64l360 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L64 464c-8.8 0-16-7.2-16-16l0-296z"],
@@ -825,7 +888,7 @@
     "keyboard": [576, 512, [9000], "f11c", "M64 112c-8.8 0-16 7.2-16 16l0 256c0 8.8 7.2 16 16 16l448 0c8.8 0 16-7.2 16-16l0-256c0-8.8-7.2-16-16-16L64 112zM0 128C0 92.7 28.7 64 64 64l448 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128zM176 320l224 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16zm-72-72c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16zm16-96l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16zm64 96c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16zm16-96l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16zm64 96c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16zm16-96l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16zm64 96c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16zm16-96l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16zm64 96c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16zm16-96l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16z"],
     "face-rolling-eyes": [512, 512, [128580, "meh-rolling-eyes"], "f5a5", "M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM176 376c0 13.3 10.7 24 24 24l112 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-112 0c-13.3 0-24 10.7-24 24zM160 264c-22.1 0-40-17.9-40-40 0-9.5 3.3-18.1 8.8-25 3.2 14.3 16 25 31.2 25s28-10.7 31.2-25c5.5 6.8 8.8 15.5 8.8 25 0 22.1-17.9 40-40 40zm0 40a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm192-40c-22.1 0-40-17.9-40-40 0-9.5 3.3-18.1 8.8-25 3.2 14.3 16 25 31.2 25s28-10.7 31.2-25c5.5 6.8 8.8 15.5 8.8 25 0 22.1-17.9 40-40 40zm0 40a80 80 0 1 0 0-160 80 80 0 1 0 0 160z"],
     "face-grimace": [512, 512, [128556, "grimace"], "f57f", "M256 48a208 208 0 1 0 0 416 208 208 0 1 0 0-416zM512 256a256 256 0 1 1 -512 0 256 256 0 1 1 512 0zM152 352c0 11.9 8.6 21.8 20 23.7l0-47.3c-11.4 1.9-20 11.8-20 23.7zm84 24l0-48-24 0 0 48 24 0zm64 0l0-48-24 0 0 48 24 0zm40-.3c11.4-1.9 20-11.8 20-23.7s-8.6-21.8-20-23.7l0 47.3zM176 288l160 0c35.3 0 64 28.7 64 64s-28.7 64-64 64l-160 0c-35.3 0-64-28.7-64-64s28.7-64 64-64zm0-112a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"],
-    "circle-dot": [512, 512, [128280, "dot-circle"], "f192", "M464 256a208 208 0 1 0 -416 0 208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zm307.2 0a51.2 51.2 0 1 0 -102.4 0 51.2 51.2 0 1 0 102.4 0zM160 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0z"],
+    "circle-dot": [512, 512, [128280, "dot-circle"], "f192", "M256 512a256 256 0 1 1 0-512 256 256 0 1 1 0 512zm0-464a208 208 0 1 0 0 416 208 208 0 1 0 0-416zm0 304a96 96 0 1 1 0-192 96 96 0 1 1 0 192z"],
     "object-group": [576, 512, [], "f247", "M40 64a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm48 59.3c16-6.5 28.9-19.3 35.3-35.3l329.3 0c6.5 16 19.3 28.9 35.3 35.3l0 265.3c-16 6.5-28.9 19.3-35.3 35.3l-329.3 0c-6.5-16-19.3-28.9-35.3-35.3l0-265.3zM512 0c-26.9 0-49.9 16.5-59.3 40L123.3 40C113.9 16.5 90.9 0 64 0 28.7 0 0 28.7 0 64 0 90.9 16.5 113.9 40 123.3l0 265.3c-23.5 9.5-40 32.5-40 59.3 0 35.3 28.7 64 64 64 26.9 0 49.9-16.5 59.3-40l329.3 0c9.5 23.5 32.5 40 59.3 40 35.3 0 64-28.7 64-64 0-26.9-16.5-49.9-40-59.3l0-265.3c23.5-9.5 40-32.5 40-59.3 0-35.3-28.7-64-64-64zM488 64a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM64 424a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm424 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM192 176l88 0 0 56-88 0 0-56zm-8-40c-17.7 0-32 14.3-32 32l0 72c0 17.7 14.3 32 32 32l104 0c17.7 0 32-14.3 32-32l0-72c0-17.7-14.3-32-32-32l-104 0zm72 184l0 24c0 17.7 14.3 32 32 32l104 0c17.7 0 32-14.3 32-32l0-72c0-17.7-14.3-32-32-32l-24 0c0 14.6-3.9 28.2-10.7 40l26.7 0 0 56-88 0 0-16.4c-2.6 .3-5.3 .4-8 .4l-32 0z"],
     "face-flushed": [512, 512, [128563, "flushed"], "f579", "M464 256a208 208 0 1 1 -416 0 208 208 0 1 1 416 0zM256 0a256 256 0 1 0 0 512 256 256 0 1 0 0-512zM160 248a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm216-24a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM192 352c-13.3 0-24 10.7-24 24s10.7 24 24 24l128 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-128 0zM160 176a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm0 128a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm144-80a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm128 0a80 80 0 1 0 -160 0 80 80 0 1 0 160 0z"],
     "star-half-stroke": [576, 512, ["star-half-alt"], "f5c0", "M309.5-18.9c-4.1-8-12.4-13.1-21.4-13.1s-17.3 5.1-21.4 13.1L193.1 125.3 33.2 150.7c-8.9 1.4-16.3 7.7-19.1 16.3s-.5 18 5.8 24.4l114.4 114.5-25.2 159.9c-1.4 8.9 2.3 17.9 9.6 23.2s16.9 6.1 25 2L288.1 417.6 432.4 491c8 4.1 17.7 3.3 25-2s11-14.2 9.6-23.2L441.7 305.9 556.1 191.4c6.4-6.4 8.6-15.8 5.8-24.4s-10.1-14.9-19.1-16.3L383 125.3 309.5-18.9zM264.1 91.8l0 284.1-100.1 50.9 19.8-125.5c1.2-7.6-1.3-15.3-6.7-20.7l-89.8-89.9 125.5-20c7.6-1.2 14.1-6 17.6-12.8l33.8-66.2zm48 284.1l0-284.1 33.8 66.2c3.5 6.8 10 11.6 17.6 12.8l125.5 20-89.8 89.9c-5.4 5.4-7.9 13.1-6.7 20.7l19.8 125.5-100.1-50.9z"],

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 1
node_modules/@fortawesome/fontawesome-free/js/regular.min.js


+ 177 - 114
node_modules/@fortawesome/fontawesome-free/js/solid.js

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */
@@ -90,8 +90,8 @@
     }
   }
 
-  var _so;
-  var z = {
+  var _dt;
+  var q = {
       classic: {
         fa: "solid",
         fas: "solid",
@@ -182,40 +182,58 @@
       chisel: {
         "fa-regular": "regular",
         facr: "regular"
+      },
+      utility: {
+        "fa-semibold": "semibold",
+        fausb: "semibold"
+      },
+      "utility-duo": {
+        "fa-semibold": "semibold",
+        faudsb: "semibold"
+      },
+      "utility-fill": {
+        "fa-semibold": "semibold",
+        faufsb: "semibold"
       }
     };
-  var a = "classic",
-    o = "duotone",
+  var i = "classic",
+    t = "duotone",
     d = "sharp",
-    t = "sharp-duotone",
-    i = "chisel",
+    l = "sharp-duotone",
+    f = "chisel",
     n = "etch",
     h = "jelly",
-    s = "jelly-duo",
-    f = "jelly-fill",
+    o = "jelly-duo",
+    u = "jelly-fill",
     g = "notdog",
-    l = "notdog-duo",
-    u = "slab",
-    p = "slab-press",
+    s = "notdog-duo",
+    y = "slab",
+    m = "slab-press",
     e = "thumbprint",
-    w = "whiteboard",
-    m = "Classic",
-    y = "Duotone",
-    x = "Sharp",
-    c = "Sharp Duotone",
-    I = "Chisel",
-    b = "Etch",
-    F = "Jelly",
-    v = "Jelly Duo",
-    S = "Jelly Fill",
-    A = "Notdog",
-    P = "Notdog Duo",
-    j = "Slab",
-    B = "Slab Press",
-    N = "Thumbprint",
-    k = "Whiteboard",
-    so = (_so = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_so, a, m), o, y), d, x), t, c), i, I), n, b), h, F), s, v), f, S), g, A), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_so, l, P), u, j), p, B), e, N), w, k));
-  var io = {
+    p = "utility",
+    a = "utility-duo",
+    w = "utility-fill",
+    x = "whiteboard",
+    b = "Classic",
+    c = "Duotone",
+    I = "Sharp",
+    F = "Sharp Duotone",
+    v = "Chisel",
+    S = "Etch",
+    A = "Jelly",
+    P = "Jelly Duo",
+    j = "Jelly Fill",
+    B = "Notdog",
+    N = "Notdog Duo",
+    k = "Slab",
+    D = "Slab Press",
+    T = "Thumbprint",
+    C = "Utility",
+    W = "Utility Duo",
+    K = "Utility Fill",
+    R = "Whiteboard",
+    dt = (_dt = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_dt, i, b), t, c), d, I), l, F), f, v), n, S), h, A), o, P), u, j), g, B), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_dt, s, N), y, k), m, D), e, T), p, C), a, W), w, K), x, R));
+  var gt = {
       classic: {
         900: "fas",
         400: "far",
@@ -273,9 +291,18 @@
       },
       "jelly-duo": {
         400: "fajdr"
+      },
+      utility: {
+        600: "fausb"
+      },
+      "utility-duo": {
+        600: "faudsb"
+      },
+      "utility-fill": {
+        600: "faufsb"
       }
     };
-  var Ro = {
+  var _t = {
       chisel: {
         regular: "facr"
       },
@@ -331,11 +358,20 @@
       thumbprint: {
         light: "fatl"
       },
+      utility: {
+        semibold: "fausb"
+      },
+      "utility-duo": {
+        semibold: "faudsb"
+      },
+      "utility-fill": {
+        semibold: "faufsb"
+      },
       whiteboard: {
         semibold: "fawsb"
       }
     };
-  var Oo = {
+  var qt = {
       kit: {
         fak: "kit",
         "fa-kit": "kit"
@@ -345,13 +381,13 @@
         "fa-kit-duotone": "kit-duotone"
       }
     },
-    Go = ["kit"];
-  var D = "kit",
+    Ht = ["kit"];
+  var L = "kit",
     r = "kit-duotone",
-    T = "Kit",
-    C = "Kit Duotone",
-    qo = _defineProperty(_defineProperty({}, D, T), r, C);
-  var Xo = {
+    U = "Kit",
+    J = "Kit Duotone",
+    $t = _defineProperty(_defineProperty({}, L, U), r, J);
+  var ol = {
     kit: {
       "fa-kit": "fak"
     },
@@ -359,7 +395,7 @@
       "fa-kit-duotone": "fakd"
     }
   };
-  var et = {
+  var fl = {
       kit: {
         fak: "fa-kit"
       },
@@ -367,7 +403,7 @@
         fakd: "fa-kit-duotone"
       }
     };
-  var dt = {
+  var ul = {
       kit: {
         kit: "fak"
       },
@@ -376,50 +412,56 @@
       }
     };
 
-  var _fl;
+  var _ml;
   var l$1 = {
       GROUP: "duotone-group",
       SWAP_OPACITY: "swap-opacity",
       PRIMARY: "primary",
       SECONDARY: "secondary"
     };
-  var f$1 = "classic",
-    a$1 = "duotone",
-    n$1 = "sharp",
-    t$1 = "sharp-duotone",
+  var n$1 = "classic",
+    o$1 = "duotone",
+    u$1 = "sharp",
+    s$1 = "sharp-duotone",
     h$1 = "chisel",
     g$1 = "etch",
-    u$1 = "jelly",
-    s$1 = "jelly-duo",
-    p$1 = "jelly-fill",
-    y$1 = "notdog",
-    e$1 = "notdog-duo",
-    m$1 = "slab",
-    c$1 = "slab-press",
+    y$1 = "jelly",
+    e$1 = "jelly-duo",
+    m$1 = "jelly-fill",
+    p$1 = "notdog",
+    a$1 = "notdog-duo",
+    w$1 = "slab",
+    b$1 = "slab-press",
     r$1 = "thumbprint",
-    w$1 = "whiteboard",
-    x$1 = "Classic",
-    I$1 = "Duotone",
-    b$1 = "Sharp",
-    F$1 = "Sharp Duotone",
-    v$1 = "Chisel",
-    S$1 = "Etch",
-    A$1 = "Jelly",
-    j$1 = "Jelly Duo",
-    P$1 = "Jelly Fill",
-    B$1 = "Notdog",
-    k$1 = "Notdog Duo",
-    N$1 = "Slab",
-    D$1 = "Slab Press",
-    C$1 = "Thumbprint",
-    T$1 = "Whiteboard",
-    fl = (_fl = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_fl, f$1, x$1), a$1, I$1), n$1, b$1), t$1, F$1), h$1, v$1), g$1, S$1), u$1, A$1), s$1, j$1), p$1, P$1), y$1, B$1), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_fl, e$1, k$1), m$1, N$1), c$1, D$1), r$1, C$1), w$1, T$1));
-  var L = "kit",
+    c$1 = "utility",
+    i$1 = "utility-duo",
+    x$1 = "utility-fill",
+    I$1 = "whiteboard",
+    F$1 = "Classic",
+    v$1 = "Duotone",
+    S$1 = "Sharp",
+    A$1 = "Sharp Duotone",
+    P$1 = "Chisel",
+    j$1 = "Etch",
+    B$1 = "Jelly",
+    N$1 = "Jelly Duo",
+    k$1 = "Jelly Fill",
+    D$1 = "Notdog",
+    C$1 = "Notdog Duo",
+    T$1 = "Slab",
+    L$1 = "Slab Press",
+    W$1 = "Thumbprint",
+    R$1 = "Utility",
+    K$1 = "Utility Duo",
+    U$1 = "Utility Fill",
+    J$1 = "Whiteboard",
+    ml$1 = (_ml = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_ml, n$1, F$1), o$1, v$1), u$1, S$1), s$1, A$1), h$1, P$1), g$1, j$1), y$1, B$1), e$1, N$1), m$1, k$1), p$1, D$1), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_ml, a$1, C$1), w$1, T$1), b$1, L$1), r$1, W$1), c$1, R$1), i$1, K$1), x$1, U$1), I$1, J$1));
+  var E$1 = "kit",
     d$1 = "kit-duotone",
-    R$1 = "Kit",
-    W$1 = "Kit Duotone",
-    lo$1 = _defineProperty(_defineProperty({}, L, R$1), d$1, W$1);
-  var zo$1 = {
+    _$1 = "Kit",
+    M$1 = "Kit Duotone",
+    rt$1 = _defineProperty(_defineProperty({}, E$1, _$1), d$1, M$1);
+  var $t$1 = {
       classic: {
         "fa-brands": "fab",
         "fa-duotone": "fad",
@@ -477,9 +519,18 @@
       },
       chisel: {
         "fa-regular": "facr"
+      },
+      utility: {
+        "fa-semibold": "fausb"
+      },
+      "utility-duo": {
+        "fa-semibold": "faudsb"
+      },
+      "utility-fill": {
+        "fa-semibold": "faufsb"
       }
     },
-    J$1 = {
+    z = {
       classic: ["fas", "far", "fal", "fat", "fad"],
       duotone: ["fadr", "fadl", "fadt"],
       sharp: ["fass", "fasr", "fasl", "fast"],
@@ -494,9 +545,12 @@
       jelly: ["fajr"],
       "jelly-fill": ["fajfr"],
       "jelly-duo": ["fajdr"],
-      chisel: ["facr"]
+      chisel: ["facr"],
+      utility: ["fausb"],
+      "utility-duo": ["faudsb"],
+      "utility-fill": ["faufsb"]
     },
-    Go$1 = {
+    Ht$1 = {
       classic: {
         fab: "fa-brands",
         fad: "fa-duotone",
@@ -554,16 +608,25 @@
       },
       chisel: {
         facr: "fa-regular"
+      },
+      utility: {
+        fausb: "fa-semibold"
+      },
+      "utility-duo": {
+        faudsb: "fa-semibold"
+      },
+      "utility-fill": {
+        faufsb: "fa-semibold"
       }
     },
-    _$1 = ["solid", "regular", "light", "thin", "duotone", "brands", "semibold"],
-    K$1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
-    M$1 = K$1.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]),
-    O$1 = ["aw", "fw", "pull-left", "pull-right"],
-    Ho$1 = [].concat(_toConsumableArray(Object.keys(J$1)), _$1, O$1, ["2xs", "xs", "sm", "lg", "xl", "2xl", "beat", "border", "fade", "beat-fade", "bounce", "flip-both", "flip-horizontal", "flip-vertical", "flip", "inverse", "layers", "layers-bottom-left", "layers-bottom-right", "layers-counter", "layers-text", "layers-top-left", "layers-top-right", "li", "pull-end", "pull-start", "pulse", "rotate-180", "rotate-270", "rotate-90", "rotate-by", "shake", "spin-pulse", "spin-reverse", "spin", "stack-1x", "stack-2x", "stack", "ul", "width-auto", "width-fixed", l$1.GROUP, l$1.SWAP_OPACITY, l$1.PRIMARY, l$1.SECONDARY]).concat(K$1.map(function (o) {
-      return "".concat(o, "x");
-    })).concat(M$1.map(function (o) {
-      return "w-".concat(o);
+    G$1 = ["solid", "regular", "light", "thin", "duotone", "brands", "semibold"],
+    O$1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
+    V$1 = O$1.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]),
+    $$1 = ["aw", "fw", "pull-left", "pull-right"],
+    to = [].concat(_toConsumableArray(Object.keys(z)), G$1, $$1, ["2xs", "xs", "sm", "lg", "xl", "2xl", "beat", "border", "fade", "beat-fade", "bounce", "flip-both", "flip-horizontal", "flip-vertical", "flip", "inverse", "layers", "layers-bottom-left", "layers-bottom-right", "layers-counter", "layers-text", "layers-top-left", "layers-top-right", "li", "pull-end", "pull-start", "pulse", "rotate-180", "rotate-270", "rotate-90", "rotate-by", "shake", "spin-pulse", "spin-reverse", "spin", "stack-1x", "stack-2x", "stack", "ul", "width-auto", "width-fixed", l$1.GROUP, l$1.SWAP_OPACITY, l$1.PRIMARY, l$1.SECONDARY]).concat(O$1.map(function (t) {
+      return "".concat(t, "x");
+    })).concat(V$1.map(function (t) {
+      return "w-".concat(t);
     }));
 
   var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';
@@ -578,36 +641,36 @@
     // Defaults to the classic family if family is not available
     return new Proxy(obj, {
       get: function get(target, prop) {
-        return prop in target ? target[prop] : target[a];
+        return prop in target ? target[prop] : target[i];
       }
     });
   }
-  var _PREFIX_TO_STYLE = _objectSpread2({}, z);
+  var _PREFIX_TO_STYLE = _objectSpread2({}, q);
 
   // We changed FACSSClassesToStyleId in the icons repo to be canonical and as such, "classic" family does not have any
   // duotone styles.  But we do still need duotone in _PREFIX_TO_STYLE below, so we are manually adding
   // {'fa-duotone': 'duotone'}
-  _PREFIX_TO_STYLE[a] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {
+  _PREFIX_TO_STYLE[i] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {
     'fa-duotone': 'duotone'
-  }), z[a]), Oo['kit']), Oo['kit-duotone']);
+  }), q[i]), qt['kit']), qt['kit-duotone']);
   var PREFIX_TO_STYLE = familyProxy(_PREFIX_TO_STYLE);
-  var _STYLE_TO_PREFIX = _objectSpread2({}, Ro);
+  var _STYLE_TO_PREFIX = _objectSpread2({}, _t);
 
   // We changed FAStyleIdToShortPrefixId in the icons repo to be canonical and as such, "classic" family does not have any
   // duotone styles.  But we do still need duotone in _STYLE_TO_PREFIX below, so we are manually adding {duotone: 'fad'}
-  _STYLE_TO_PREFIX[a] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {
+  _STYLE_TO_PREFIX[i] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {
     duotone: 'fad'
-  }), _STYLE_TO_PREFIX[a]), dt['kit']), dt['kit-duotone']);
+  }), _STYLE_TO_PREFIX[i]), ul['kit']), ul['kit-duotone']);
   var STYLE_TO_PREFIX = familyProxy(_STYLE_TO_PREFIX);
-  var _PREFIX_TO_LONG_STYLE = _objectSpread2({}, Go$1);
-  _PREFIX_TO_LONG_STYLE[a] = _objectSpread2(_objectSpread2({}, _PREFIX_TO_LONG_STYLE[a]), et['kit']);
+  var _PREFIX_TO_LONG_STYLE = _objectSpread2({}, Ht$1);
+  _PREFIX_TO_LONG_STYLE[i] = _objectSpread2(_objectSpread2({}, _PREFIX_TO_LONG_STYLE[i]), fl['kit']);
   var PREFIX_TO_LONG_STYLE = familyProxy(_PREFIX_TO_LONG_STYLE);
-  var _LONG_STYLE_TO_PREFIX = _objectSpread2({}, zo$1);
-  _LONG_STYLE_TO_PREFIX[a] = _objectSpread2(_objectSpread2({}, _LONG_STYLE_TO_PREFIX[a]), Xo['kit']);
+  var _LONG_STYLE_TO_PREFIX = _objectSpread2({}, $t$1);
+  _LONG_STYLE_TO_PREFIX[i] = _objectSpread2(_objectSpread2({}, _LONG_STYLE_TO_PREFIX[i]), ol['kit']);
   var LONG_STYLE_TO_PREFIX = familyProxy(_LONG_STYLE_TO_PREFIX);
-  var _FONT_WEIGHT_TO_PREFIX = _objectSpread2({}, io);
+  var _FONT_WEIGHT_TO_PREFIX = _objectSpread2({}, gt);
   var FONT_WEIGHT_TO_PREFIX = familyProxy(_FONT_WEIGHT_TO_PREFIX);
-  var RESERVED_CLASSES = [].concat(_toConsumableArray(Go), _toConsumableArray(Ho$1));
+  var RESERVED_CLASSES = [].concat(_toConsumableArray(Ht), _toConsumableArray(to));
 
   function bunker(fn) {
     try {
@@ -680,7 +743,7 @@
     "rotate": [512, 512, [128260, "sync-alt"], "f2f1", "M480.1 192l7.9 0c13.3 0 24-10.7 24-24l0-144c0-9.7-5.8-18.5-14.8-22.2S477.9 .2 471 7L419.3 58.8C375 22.1 318 0 256 0 127 0 20.3 95.4 2.6 219.5 .1 237 12.2 253.2 29.7 255.7s33.7-9.7 36.2-27.1C79.2 135.5 159.3 64 256 64 300.4 64 341.2 79 373.7 104.3L327 151c-6.9 6.9-8.9 17.2-5.2 26.2S334.3 192 344 192l136.1 0zm29.4 100.5c2.5-17.5-9.7-33.7-27.1-36.2s-33.7 9.7-36.2 27.1c-13.3 93-93.4 164.5-190.1 164.5-44.4 0-85.2-15-117.7-40.3L185 361c6.9-6.9 8.9-17.2 5.2-26.2S177.7 320 168 320L24 320c-13.3 0-24 10.7-24 24L0 488c0 9.7 5.8 18.5 14.8 22.2S34.1 511.8 41 505l51.8-51.8C137 489.9 194 512 256 512 385 512 491.7 416.6 509.4 292.5z"],
     "square-minus": [448, 512, [61767, "minus-square"], "f146", "M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm72 200l176 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-176 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z"],
     "align-justify": [448, 512, [], "f039", "M448 64c0-17.7-14.3-32-32-32L32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l384 0c17.7 0 32-14.3 32-32zm0 256c0-17.7-14.3-32-32-32L32 288c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32zM0 192c0 17.7 14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 160c-17.7 0-32 14.3-32 32zM448 448c0-17.7-14.3-32-32-32L32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32z"],
-    "calendar-check": [448, 512, [], "f274", "M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 32 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 128C0 92.7 28.7 64 64 64l32 0 0-32c0-17.7 14.3-32 32-32zM308.4 228.7c7-11.2 3.6-26-7.6-33.1s-26-3.6-33.1 7.6l-61.4 98.3-27-36c-8-10.6-23-12.8-33.6-4.8s-12.8 23-4.8 33.6l48 64c4.7 6.3 12.3 9.9 20.2 9.6s15.1-4.5 19.3-11.3l80-128z"],
+    "calendar-check": [448, 512, [], "f274", "M320 0c17.7 0 32 14.3 32 32l0 32 32 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 128C0 92.7 28.7 64 64 64l32 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32zm22 161.7c-10.7-7.8-25.7-5.4-33.5 5.3L189.1 331.2 137 279.1c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l72 72c5 5 11.9 7.5 18.8 7s13.4-4.1 17.5-9.8L347.3 195.2c7.8-10.7 5.4-25.7-5.3-33.5z"],
     "face-kiss": [512, 512, [128535, "kiss"], "f596", "M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM240 288l32 0c26.5 0 48 21.5 48 48 0 12.3-4.6 23.5-12.2 32 7.6 8.5 12.2 19.7 12.2 32 0 26.5-21.5 48-48 48l-32 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm-96-80a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"],
     "kitchen-set": [576, 512, [], "e51a", "M240 144a96 96 0 1 0 -192 0 96 96 0 1 0 192 0zm44.4 32C269.9 240.1 212.5 288 144 288 64.5 288 0 223.5 0 144S64.5 0 144 0c68.5 0 125.9 47.9 140.4 112l71.8 0c8.8-9.8 21.6-16 35.8-16l104 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-104 0c-14.2 0-27-6.2-35.8-16l-71.8 0zM144 80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM400 240c13.3 0 24 10.7 24 24l0 8 96 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-240 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l96 0 0-8c0-13.3 10.7-24 24-24zM288 464l0-112 224 0 0 112c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48zM48 320l128 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-16 0c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-80c0-8.8 7.2-16 16-16zm128 64c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0 0 32 16 0zM24 464l176 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 512c-13.3 0-24-10.7-24-24s10.7-24 24-24z"],
     "dna": [384, 512, [129516], "f471", "M352 0c17.7 0 32 14.3 32 32 0 57.8-24.4 104.8-57.4 144.5-24.1 28.9-53.8 55.1-83.6 79.5 29.8 24.5 59.5 50.6 83.6 79.5 33 39.6 57.4 86.7 57.4 144.5 0 17.7-14.3 32-32 32s-32-14.3-32-32L64 480c0 17.7-14.3 32-32 32S0 497.7 0 480C0 422.2 24.4 375.2 57.4 335.5 81.5 306.6 111.2 280.5 141 256 111.2 231.5 81.5 205.4 57.4 176.5 24.4 136.8 0 89.8 0 32 0 14.3 14.3 0 32 0S64 14.3 64 32l256 0c0-17.7 14.3-32 32-32zM283.5 384l-182.9 0c-8.2 10.5-15.1 21.1-20.6 32l224.2 0c-5.6-10.9-12.5-21.5-20.6-32zM238 336c-14.3-13-29.8-25.8-46-39-16.2 13.1-31.7 26-46 39l92 0zM100.5 128l182.9 0c8.2-10.5 15.1-21.1 20.6-32L79.9 96c5.6 10.9 12.5 21.5 20.6 32zM146 176c14.3 13 29.8 25.8 46 39 16.2-13.1 31.7-26 46-39l-92 0z"],
@@ -734,11 +797,11 @@
     "indian-rupee-sign": [320, 512, ["indian-rupee", "inr"], "e1bc", "M0 64C0 46.3 14.3 32 32 32l264 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-76.7 0c17.7 19.8 30.1 44.6 34.7 72l42 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-42 0c-10.4 62.2-60.8 110.9-123.8 118.9L274.6 422c14.4 10.3 17.7 30.3 7.4 44.6s-30.3 17.7-44.6 7.4L13.4 314C2.1 306-2.7 291.5 1.5 278.2S18.1 256 32 256l80 0c35.8 0 66.1-23.5 76.3-56L24 200c-13.3 0-24-10.7-24-24s10.7-24 24-24l164.3 0c-10.2-32.5-40.5-56-76.3-56L32 96C14.3 96 0 81.7 0 64z"],
     "truck": [576, 512, [128666, 9951], "f0d1", "M0 96C0 60.7 28.7 32 64 32l288 0c35.3 0 64 28.7 64 64l0 32 50.7 0c17 0 33.3 6.7 45.3 18.7L557.3 192c12 12 18.7 28.3 18.7 45.3L576 384c0 35.3-28.7 64-64 64l-3.3 0c-10.4 36.9-44.4 64-84.7 64s-74.2-27.1-84.7-64l-102.6 0c-10.4 36.9-44.4 64-84.7 64s-74.2-27.1-84.7-64L64 448c-35.3 0-64-28.7-64-64L0 96zM512 288l0-50.7-45.3-45.3-50.7 0 0 96 96 0zM192 424a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zm232 40a40 40 0 1 0 0-80 40 40 0 1 0 0 80z"],
     "chalkboard-user": [640, 512, ["chalkboard-teacher"], "f51c", "M128 96c0-35.3 28.7-64 64-64l352 0c35.3 0 64 28.7 64 64l0 240-96 0 0-16c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 16-129.1 0c10.9-18.8 17.1-40.7 17.1-64 0-70.7-57.3-128-128-128-5.4 0-10.8 .3-16 1l0-49zM333 448c-5.1-24.2-16.3-46.1-32.1-64L608 384c0 35.3-28.7 64-64 64l-211 0zM64 272a80 80 0 1 1 160 0 80 80 0 1 1 -160 0zM0 480c0-53 43-96 96-96l96 0c53 0 96 43 96 96 0 17.7-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32z"],
-    "user-check": [640, 512, [], "f4fc", "M136 128a120 120 0 1 1 240 0 120 120 0 1 1 -240 0zM48 482.3C48 383.8 127.8 304 226.3 304l59.4 0c98.5 0 178.3 79.8 178.3 178.3 0 16.4-13.3 29.7-29.7 29.7L77.7 512C61.3 512 48 498.7 48 482.3zM612.4 132.7l-80 128c-4.2 6.7-11.4 10.9-19.3 11.3s-15.5-3.2-20.2-9.6l-48-64c-8-10.6-5.8-25.6 4.8-33.6s25.6-5.8 33.6 4.8l27 36 61.4-98.3c7-11.2 21.8-14.7 33.1-7.6s14.7 21.8 7.6 33.1z"],
+    "user-check": [640, 512, [], "f4fc", "M286 304c98.5 0 178.3 79.8 178.3 178.3 0 16.4-13.3 29.7-29.7 29.7L78 512c-16.4 0-29.7-13.3-29.7-29.7 0-98.5 79.8-178.3 178.3-178.3l59.4 0zM585.7 105.9c7.8-10.7 22.8-13.1 33.5-5.3s13.1 22.8 5.3 33.5L522.1 274.9c-4.2 5.7-10.7 9.4-17.7 9.8s-14-2.2-18.9-7.3l-46.4-48c-9.2-9.5-9-24.7 .6-33.9 9.5-9.2 24.7-8.9 33.9 .6l26.5 27.4 85.6-117.7zM256.3 248a120 120 0 1 1 0-240 120 120 0 1 1 0 240z"],
     "user-ninja": [448, 512, [129399], "f504", "M352 128c0 70.7-57.3 128-128 128-57.2 0-105.6-37.5-122-89.3-1.1 1.3-2.2 2.6-3.5 3.8-15.8 15.8-38.8 20.7-53.6 22.1-8.1 .8-14.6-5.7-13.8-13.8 1.4-14.7 6.3-37.8 22.1-53.6 5.8-5.8 12.6-10.1 19.6-13.4-7-3.2-13.8-7.6-19.6-13.4-15.8-15.8-20.7-38.8-22.1-53.6-.8-8.1 5.7-14.6 13.8-13.8 14.7 1.4 37.8 6.3 53.6 22.1 4.8 4.8 8.7 10.4 11.7 16.1 21.3-41.2 64.3-69.4 113.8-69.4 70.7 0 128 57.3 128 128zM144 112c0 8.8 7.2 16 16 16l128 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L160 96c-8.8 0-16 7.2-16 16zm-1.4 211l67 50.2c8.5 6.4 20.3 6.4 28.8 0l67-50.2c6.5-4.9 15.2-6.2 22.6-2.8 61.4 28.2 104.1 90.2 104.1 162.1 0 16.4-13.3 29.7-29.7 29.7L45.7 512c-16.4 0-29.7-13.3-29.7-29.7 0-72 42.7-134 104.1-162.1 7.4-3.4 16.1-2.1 22.6 2.8z"],
     "plant-wilt": [512, 512, [], "e5aa", "M344-32c66.3 0 120 53.7 120 120l0 6.2c29.3 12.2 48 41.3 48 76.9 0 27.9-25.3 74.8-66 111.7-3.8 3.5-8.8 5.3-14 5.3s-10.2-1.8-14-5.3c-40.7-36.8-66-83.7-66-111.7 0-35.6 18.7-64.7 48-76.9l0-6.2c0-30.9-25.1-56-56-56s-56 25.1-56 56l0 424c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-296c0-30.9-25.1-56-56-56s-56 25.1-56 56l0 38.2c29.3 12.2 48 41.3 48 76.9 0 27.9-25.3 74.8-66 111.7-3.8 3.5-8.8 5.3-14 5.3s-10.2-1.8-14-5.3C25.3 405.9 0 359 0 331.1 0 295.4 18.7 266.4 48 254.2L48 216c0-66.3 53.7-120 120-120 20.2 0 39.3 5 56 13.8L224 88c0-66.3 53.7-120 120-120z"],
     "weight-scale": [448, 512, ["weight"], "f496", "M116.6 192c-3-10.1-4.6-20.9-4.6-32 0-61.9 50.1-112 112-112S336 98.1 336 160c0 11.1-1.6 21.9-4.6 32l-71 0 24.6-44.3c6.4-11.6 2.3-26.2-9.3-32.6s-26.2-2.3-32.6 9.3l-37.6 67.7-88.8 0zM128 32L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-64 0C293.3 11.9 260 0 224 0s-69.3 11.9-96 32z"],
-    "caret-right": [256, 512, [], "f0da", "M32.5 96c0-12.9 7.8-24.6 19.8-29.6S78 64.2 87.1 73.4l160 160c12.5 12.5 12.5 32.8 0 45.3l-160 160c-9.2 9.2-22.9 11.9-34.9 6.9S32.5 428.9 32.5 416l0-320z"],
+    "caret-right": [256, 512, [], "f0da", "M249.3 235.8c10.2 12.6 9.5 31.1-2.2 42.8l-128 128c-9.2 9.2-22.9 11.9-34.9 6.9S64.5 396.9 64.5 384l0-256c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l128 128 2.2 2.4z"],
     "florin-sign": [384, 512, [], "e184", "M314.7 32c-38.8 0-73.7 23.3-88.6 59.1L170.7 224 64 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l80 0-45.1 108.3c-5 11.9-16.6 19.7-29.5 19.7L32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l37.3 0c38.8 0 73.7-23.3 88.6-59.1L213.3 288 320 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-80 0 45.1-108.3c5-11.9 16.6-19.7 29.5-19.7L352 96c17.7 0 32-14.3 32-32s-14.3-32-32-32l-37.3 0z"],
     "bell": [448, 512, [128276, 61602], "f0f3", "M224 0c-17.7 0-32 14.3-32 32l0 3.2C119 50 64 114.6 64 192l0 21.7c0 48.1-16.4 94.8-46.4 132.4L7.8 358.3C2.7 364.6 0 372.4 0 380.5 0 400.1 15.9 416 35.5 416l376.9 0c19.6 0 35.5-15.9 35.5-35.5 0-8.1-2.7-15.9-7.8-22.2l-9.8-12.2C400.4 308.5 384 261.8 384 213.7l0-21.7c0-77.4-55-142-128-156.8l0-3.2c0-17.7-14.3-32-32-32zM162 464c7.1 27.6 32.2 48 62 48s54.9-20.4 62-48l-124 0z"],
     "lari-sign": [384, 512, [], "e1c8", "M144 0c13.3 0 24 10.7 24 24l0 41.5c7.9-1 15.9-1.5 24-1.5s16.1 .5 24 1.5L216 24c0-13.3 10.7-24 24-24s24 10.7 24 24l0 54c58.9 23.8 103.2 76 116.2 139.7 3.5 17.3-7.7 34.2-25 37.7s-34.2-7.7-37.7-25c-6.7-33.2-26.4-61.8-53.4-80.2l0 81.8c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-101.8c-7.8-1.5-15.8-2.2-24-2.2s-16.2 .8-24 2.2L168 232c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-81.8c-33.8 23-56 61.9-56 105.8 0 70.7 57.3 128 128 128l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l16.9 0C18.5 350 0 305.2 0 256 0 175.4 49.6 106.4 120 78l0-54c0-13.3 10.7-24 24-24z"],
@@ -748,7 +811,7 @@
     "users-rectangle": [576, 512, [], "e594", "M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm224 72a56 56 0 1 1 0 112 56 56 0 1 1 0-112zm0 152c53 0 96 43 96 96l0 24c0 13.3-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24l0-24c0-53 43-96 96-96zm96-64a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM168 272.3c-15.2 22.8-24 50.2-24 79.7l0 24c0 8.4 1.4 16.5 4.1 24l-46.8 0C89.6 400 80 390.4 80 378.7L80 368c0-50.3 38.7-91.6 88-95.7zM427.9 400c2.7-7.5 4.1-15.6 4.1-24l0-24c0-29.5-8.8-56.9-24-79.7 49.3 4.1 88 45.3 88 95.7l0 10.7c0 11.8-9.6 21.3-21.3 21.3l-46.8 0zM96 192a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z"],
     "mobile": [384, 512, [128241, "mobile-android", "mobile-phone"], "f3ce", "M80 0C44.7 0 16 28.7 16 64l0 384c0 35.3 28.7 64 64 64l224 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L80 0zm72 416l80 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z"],
     "arrows-turn-to-dots": [448, 512, [], "e4c1", "M265.4-6.6c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L285.3 64 352 64c53 0 96 43 96 96l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32c0-17.7-14.3-32-32-32l-66.7 0 25.4 25.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-80-80c-12.5-12.5-12.5-32.8 0-45.3l80-80zm-82.7 272l80 80c12.5 12.5 12.5 32.8 0 45.3l-80 80c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L162.7 400 96 400c-17.7 0-32 14.3-32 32l0 32c0 17.7-14.3 32-32 32S0 481.7 0 464l0-32c0-53 43-96 96-96l66.7 0-25.4-25.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0zM320 368a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM64 160a64 64 0 1 1 0-128 64 64 0 1 1 0 128z"],
-    "exclamation": [128, 512, [10069, 10071, 61738], "21", "M96 32C96 14.3 81.7 0 64 0S32 14.3 32 32l0 320c0 17.7 14.3 32 32 32s32-14.3 32-32L96 32zM64 512c22.1 0 40-17.9 40-40s-17.9-40-40-40-40 17.9-40 40 17.9 40 40 40z"],
+    "exclamation": [128, 512, [10069, 10071, 61738], "21", "M64 432c22.1 0 40 17.9 40 40s-17.9 40-40 40-40-17.9-40-40c0-22.1 17.9-40 40-40zM64 0c26.5 0 48 21.5 48 48 0 .6 0 1.1 0 1.7l-16 304c-.9 17-15 30.3-32 30.3S33 370.7 32 353.7L16 49.7c0-.6 0-1.1 0-1.7 0-26.5 21.5-48 48-48z"],
     "church": [512, 512, [9962], "f51d", "M280-8c0-13.3-10.7-24-24-24S232-21.3 232-8l0 24-32 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l32 0 0 48-98.6 65.8C120 186.7 112 201.6 112 217.7l0 38.3-79.8 45.6C12.3 313 0 334.2 0 357.1L0 448c0 35.3 28.7 64 64 64 74.7 0 85.4 0 320 0l64 0c35.3 0 64-28.7 64-64l0-90.9c0-23-12.3-44.2-32.2-55.6L400 256 400 217.7c0-16-8-31-21.4-39.9l-98.6-65.8 0-48 32 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-32 0 0-24zM256 320c35.3 0 64 28.7 64 64l0 80-128 0 0-80c0-35.3 28.7-64 64-64z"],
     "toggle-off": [576, 512, [], "f204", "M384 128c70.7 0 128 57.3 128 128S454.7 384 384 384l-192 0c-70.7 0-128-57.3-128-128s57.3-128 128-128l192 0zM576 256c0-106-86-192-192-192L192 64C86 64 0 150 0 256S86 448 192 448l192 0c106 0 192-86 192-192zM192 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160z"],
     "shoe-prints": [576, 512, [], "f54b", "M296 192c-21.1-12.1-42.3-24.2-72-29.3l0-140.3C257.7 13 311.4 0 352 0 448 0 576 48 576 128s-119.6 96-176 96c-48 0-76-16-104-32zM128 32l48 0 0 128-48 0c-35.3 0-64-28.7-64-64s28.7-64 64-64zM232 320c28-16 56-32 104-32 56.4 0 176 16 176 96S384 512 288 512c-40.5 0-94.3-13-128-22.4l0-140.3c29.7-5.2 50.9-17.3 72-29.4zM64 480c-35.3 0-64-28.7-64-64s28.7-64 64-64l48 0 0 128-48 0z"],
@@ -869,7 +932,7 @@
     "face-grin-stars": [512, 512, [129321, "grin-stars"], "f587", "M256 512c141.4 0 256-114.6 256-256 0-24.4-3.4-48.1-9.8-70.5 18.6-36.1-2.7-83.6-46.7-90-46.9-58.3-118.9-95.5-199.5-95.5S103.4 37.3 56.5 95.5c-44 6.4-65.3 53.9-46.7 90-6.4 22.4-9.8 46-9.8 70.5 0 141.4 114.6 256 256 256zM386.7 324.9c11.9-3.7 23.9 6.3 19.6 18.1-22.4 61.3-81.3 105.1-150.3 105.1S128.1 404.2 105.7 342.9c-4.3-11.8 7.7-21.8 19.6-18.1 39.2 12.2 83.7 19.1 130.7 19.1s91.5-6.9 130.7-19.1zm-31.6-231c5.3-10.7 20.5-10.7 25.8 0l20.9 42.4 46.7 6.8c11.8 1.7 16.5 16.2 8 24.5l-33.8 33 8 46.6c2 11.7-10.3 20.7-20.9 15.2l-41.8-22-41.8 22c-10.5 5.5-22.9-3.4-20.9-15.2l8-46.6-33.8-33c-8.5-8.3-3.8-22.8 8-24.5l46.7-6.8 20.9-42.4zm-198.2 0l20.9 42.4 46.7 6.8c11.8 1.7 16.5 16.2 8 24.5l-33.8 33 8 46.6c2 11.7-10.3 20.7-20.9 15.2l-41.8-22-41.8 22c-10.5 5.5-22.9-3.4-20.9-15.2l8-46.6-33.8-33c-8.5-8.3-3.8-22.8 8-24.5l46.7-6.8 20.9-42.4c5.3-10.7 20.5-10.7 25.8 0z"],
     "sort-up": [384, 512, ["sort-asc"], "f0de", "M32 224c-12.9 0-24.6-7.8-29.6-19.8S.2 178.5 9.4 169.4l160-160c12.5-12.5 32.8-12.5 45.3 0l160 160c9.2 9.2 11.9 22.9 6.9 34.9S364.9 224 352 224L32 224z"],
     "eye": [576, 512, [128065], "f06e", "M288 32c-80.8 0-145.5 36.8-192.6 80.6-46.8 43.5-78.1 95.4-93 131.1-3.3 7.9-3.3 16.7 0 24.6 14.9 35.7 46.2 87.7 93 131.1 47.1 43.7 111.8 80.6 192.6 80.6s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1 3.3-7.9 3.3-16.7 0-24.6-14.9-35.7-46.2-87.7-93-131.1-47.1-43.7-111.8-80.6-192.6-80.6zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64-11.5 0-22.3-3-31.7-8.4-1 10.9-.1 22.1 2.9 33.2 13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-12.2-45.7-55.5-74.8-101.1-70.8 5.3 9.3 8.4 20.1 8.4 31.7z"],
-    "caret-left": [256, 512, [], "f0d9", "M224 96c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-160 160c-12.5 12.5-12.5 32.8 0 45.3l160 160c9.2 9.2 22.9 11.9 34.9 6.9S224 428.9 224 416l0-320z"],
+    "caret-left": [256, 512, [], "f0d9", "M7.7 235.8c-10.3 12.6-9.5 31.1 2.2 42.8l128 128c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-256c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-128 128-2.2 2.4z"],
     "apple-whole": [448, 512, [127822, 127823, "apple-alt"], "f5d1", "M224 112c-8.8 0-16-7.2-16-16l0-16c0-44.2 35.8-80 80-80l16 0c8.8 0 16 7.2 16 16l0 16c0 44.2-35.8 80-80 80l-16 0zM0 288c0-76.3 35.7-160 112-160 27.3 0 59.7 10.3 82.7 19.3 18.8 7.3 39.9 7.3 58.7 0 22.9-8.9 55.4-19.3 82.7-19.3 76.3 0 112 83.7 112 160 0 128-80 224-160 224-16.5 0-38.1-6.6-51.5-11.3-8.1-2.8-16.9-2.8-25 0-13.4 4.7-35 11.3-51.5 11.3-80 0-160-96-160-224z"],
     "scroll-torah": [576, 512, ["torah"], "f6a0", "M0 48C0 21.5 21.5 0 48 0 68.9 0 86.7 13.4 93.3 32l389.5 0c6.6-18.6 24.4-32 45.3-32 26.5 0 48 21.5 48 48l0 416c0 26.5-21.5 48-48 48-20.9 0-38.7-13.4-45.3-32L93.3 480c-6.6 18.6-24.4 32-45.3 32-26.5 0-48-21.5-48-48L0 48zM177.9 301c-1.2 2-1.9 4.2-1.9 6.6 0 6.9 5.6 12.5 12.5 12.5l56.9 0 30.5 49.2c2.6 4.2 7.2 6.8 12.2 6.8s9.6-2.6 12.2-6.8l30.5-49.2 56.9 0c6.9 0 12.5-5.6 12.5-12.5 0-2.3-.6-4.6-1.9-6.6l-27.8-45 27.8-45c1.2-2 1.9-4.2 1.9-6.6 0-6.9-5.6-12.5-12.5-12.5l-56.9 0-30.5-49.2c-2.6-4.2-7.2-6.8-12.2-6.8s-9.6 2.6-12.2 6.8l-30.5 49.2-56.9 0c-6.9 0-12.5 5.6-12.5 12.5 0 2.3 .6 4.6 1.9 6.6l27.8 45-27.8 45z"],
     "house-lock": [640, 512, [], "e510", "M528 224.1c44.2 0 80 35.8 80 80l0 50.6c18.6 6.6 32 24.4 32 45.3l0 96c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48l0-96c0-20.9 13.4-38.7 32-45.3l0-50.6c0-44.2 35.8-80 80-80zM268.6 6.5c12.2-9.3 29.7-8.7 41.2 2l185 171.8C440.2 195 400 244.8 400 304l0 24.4c-19.6 17.6-32 43.1-32 71.5l0 96c0 5.5 .5 10.9 1.3 16.1L144 512c-35.3 0-64-28.7-64-64l0-176-16 0c-13.2 0-25-8.1-29.8-20.3s-1.6-26.2 8-35.1l224-208 2.4-2zM272 320c-26.5 0-48 21.5-48 48l0 96 96 0 0-87.3c0-16.5 7-31.5 18.4-42.1-8.7-9-20.9-14.6-34.4-14.6l-32 0zm256-47.9c-17.7 0-32 14.3-32 32l0 47.9 64 0 0-47.9c0-17.7-14.3-32-32-32z"],
@@ -880,7 +943,7 @@
     "person-circle-plus": [640, 512, [], "e541", "M280 24a56 56 0 1 0 -112 0 56 56 0 1 0 112 0zm24 212.7L341 286.6c12.8-17.5 28.5-32.7 46.3-45l-56.2-75.7C306 132 266.3 112 224 112s-82 20-107.2 53.9l-70.5 95c-10.5 14.2-7.6 34.2 6.6 44.8s34.2 7.6 44.8-6.6L144 236.7 144 512c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-8.8 7.2-16 16-16s16 7.2 16 16l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-275.3zM496 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm16-208l0 48 48 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l48 0 0-48c0-8.8 7.2-16 16-16s16 7.2 16 16z"],
     "hamsa": [512, 512, [], "f665", "M34.6 288L80 288c8.8 0 16-7.2 16-16L96 72c0-22.1 17.9-40 40-40s40 17.9 40 40l0 132c0 11 9 20 20 20s20-9 20-20l0-164c0-22.1 17.9-40 40-40s40 17.9 40 40l0 164c0 11 9 20 20 20s20-9 20-20l0-132c0-22.1 17.9-40 40-40s40 17.9 40 40l0 200c0 8.8 7.2 16 16 16l45.4 0c19.1 0 34.6 15.5 34.6 34.6 0 8.6-3.2 16.9-9 23.3L416.6 441c-41.1 45.2-99.4 71-160.6 71S136.6 486.2 95.4 441L9 345.9c-5.8-6.4-9-14.7-9-23.3 0-19.1 15.5-34.6 34.6-34.6zM256 288c-38.4 0-76.8 35.8-90.6 50.2-3.6 3.7-5.4 8.7-5.4 13.8s1.8 10.1 5.4 13.8C179.2 380.2 217.6 416 256 416s76.8-35.8 90.6-50.2c3.6-3.7 5.4-8.7 5.4-13.8s-1.8-10.1-5.4-13.8C332.8 323.8 294.4 288 256 288zm0 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"],
     "person-circle-question": [640, 512, [], "e542", "M280 24a56 56 0 1 0 -112 0 56 56 0 1 0 112 0zm24 212.7L341 286.6c12.8-17.5 28.5-32.7 46.3-45l-56.2-75.7C306 132 266.3 112 224 112s-82 20-107.2 53.9l-70.5 95c-10.5 14.2-7.6 34.2 6.6 44.8s34.2 7.6 44.8-6.6L144 236.7 144 512c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-8.8 7.2-16 16-16s16 7.2 16 16l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-275.3zM496 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-100a20 20 0 1 1 0 40 20 20 0 1 1 0-40zm0-100c-11.6 0-21.3 8.2-23.5 19.2-1.8 8.7-10.2 14.3-18.9 12.5s-14.3-10.2-12.5-18.9c5.2-25.6 27.8-44.8 54.9-44.8 30.9 0 56 25.1 56 56 0 19.8-11.7 37.8-29.8 45.9l-10.4 4.6c-1.2 7.7-7.8 13.5-15.8 13.5-8.8 0-16-7.2-16-16 0-11.2 6.6-21.3 16.8-25.9l12.4-5.5c6.6-2.9 10.8-9.4 10.8-16.6 0-13.3-10.7-24-24-24z"],
-    "clipboard-check": [384, 512, [], "f46c", "M311.4 32l8.6 0c35.3 0 64 28.7 64 64l0 352c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l8.6 0C83.6 12.9 104.3 0 128 0L256 0c23.7 0 44.4 12.9 55.4 32zM248 112c13.3 0 24-10.7 24-24s-10.7-24-24-24L136 64c-13.3 0-24 10.7-24 24s10.7 24 24 24l112 0zm28.4 148.7c7-11.2 3.6-26-7.6-33.1s-26-3.6-33.1 7.6l-61.4 98.3-27-36c-8-10.6-23-12.8-33.6-4.8s-12.8 23-4.8 33.6l48 64c4.7 6.3 12.3 9.9 20.2 9.6s15.1-4.5 19.3-11.3l80-128z"],
+    "clipboard-check": [384, 512, [], "f46c", "M256 0c23.7 0 44.4 12.9 55.4 32l8.6 0c35.3 0 64 28.7 64 64l0 352c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l8.6 0C83.6 12.9 104.3 0 128 0L256 0zm26.9 212.6c-10.7-7.8-25.7-5.4-33.5 5.3l-85.6 117.7-26.5-27.4c-9.2-9.5-24.4-9.8-33.9-.6s-9.8 24.4-.6 33.9l46.4 48c4.9 5.1 11.8 7.8 18.9 7.3s13.6-4.1 17.8-9.8L288.2 246.1c7.8-10.7 5.4-25.7-5.3-33.5zM136 64c-13.3 0-24 10.7-24 24s10.7 24 24 24l112 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L136 64z"],
     "share-from-square": [576, 512, [61509, "share-square"], "f14d", "M384.5 24l0 72-64 0c-79.5 0-144 64.5-144 144 0 93.4 82.8 134.8 100.6 142.6 2.2 1 4.6 1.4 7.1 1.4l2.5 0c9.8 0 17.8-8 17.8-17.8 0-8.3-5.9-15.5-12.8-20.3-8.9-6.2-19.2-18.2-19.2-40.5 0-45 36.5-81.5 81.5-81.5l30.5 0 0 72c0 9.7 5.8 18.5 14.8 22.2s19.3 1.7 26.2-5.2l136-136c9.4-9.4 9.4-24.6 0-33.9L425.5 7c-6.9-6.9-17.2-8.9-26.2-5.2S384.5 14.3 384.5 24zm-272 72c-44.2 0-80 35.8-80 80l0 256c0 44.2 35.8 80 80 80l256 0c44.2 0 80-35.8 80-80l0-32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32c0 8.8-7.2 16-16 16l-256 0c-8.8 0-16-7.2-16-16l0-256c0-8.8 7.2-16 16-16l16 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-16 0z"],
     "receipt": [384, 512, [129534], "f543", "M14 2.2C22.5-1.7 32.5-.3 39.6 5.8L80 40.4 120.4 5.8c9-7.7 22.3-7.7 31.2 0L192 40.4 232.4 5.8c9-7.7 22.2-7.7 31.2 0L304 40.4 344.4 5.8c7.1-6.1 17.1-7.5 25.6-3.6S384 14.6 384 24l0 464c0 9.4-5.5 17.9-14 21.8s-18.5 2.5-25.6-3.6l-40.4-34.6-40.4 34.6c-9 7.7-22.2 7.7-31.2 0l-40.4-34.6-40.4 34.6c-9 7.7-22.3 7.7-31.2 0L80 471.6 39.6 506.2c-7.1 6.1-17.1 7.5-25.6 3.6S0 497.4 0 488L0 24C0 14.6 5.5 6.1 14 2.2zM104 136c-13.3 0-24 10.7-24 24s10.7 24 24 24l176 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-176 0zM80 352c0 13.3 10.7 24 24 24l176 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-176 0c-13.3 0-24 10.7-24 24zm24-120c-13.3 0-24 10.7-24 24s10.7 24 24 24l176 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-176 0z"],
     "equals": [448, 512, [62764], "3d", "M32 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 128zm0 192c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 320z"],
@@ -1100,7 +1163,7 @@
     "plane-lock": [640, 512, [], "e558", "M232 24c0-30.9 25.1-56 56-56s56 25.1 56 56l0 127.3 82.1 75.2C409.7 248.1 400 274.9 400 304l0 24.4c-7.3 6.6-13.6 14.2-18.7 22.7l-37.3-12.4 0 99.7 24 19.2 0 38.3c0 13.5 2.8 26.4 7.8 38.1L288 512 179.9 539c-10.1 2.5-19.9-5.1-19.9-15.5l0-19.8c0-4.9 2.2-9.5 6-12.5l66-52.8 0-99.7-162.9 54.3C58.7 396.4 48 388.7 48 377.8l0-43.7c0-9 3.8-17.5 10.4-23.6L232 151.3 232 24zM560 304.1c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 47.9 64 0 0-47.9zM416 400c0-20.9 13.4-38.7 32-45.3l0-50.6c0-44.2 35.8-80 80-80s80 35.8 80 80l0 50.6c18.6 6.6 32 24.4 32 45.3l0 96c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48l0-96z"],
     "battery-three-quarters": [640, 512, ["battery-4"], "f241", "M528 128c8.8 0 16 7.2 16 16l0 224c0 8.8-7.2 16-16 16l-416 0c-8.8 0-16-7.2-16-16l0-224c0-8.8 7.2-16 16-16l416 0zM112 64c-44.2 0-80 35.8-80 80l0 224c0 44.2 35.8 80 80 80l416 0c44.2 0 80-35.8 80-80l0-48c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80L112 64zm56 112c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24l224 0c13.3 0 24-10.7 24-24l0-112c0-13.3-10.7-24-24-24l-224 0z"],
     "franc-sign": [320, 512, [], "e18f", "M80 32C62.3 32 48 46.3 48 64l0 256-24 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l24 0 0 80c0 17.7 14.3 32 32 32s32-14.3 32-32l0-80 88 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-88 0 0-64 144 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-144 0 0-96 176 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 32z"],
-    "filter-circle-dollar": [576, 512, ["funnel-dollar"], "f662", "M32 64C19.1 64 7.4 71.8 2.4 83.8L273.6 508.6c8.2 4.1 17.9 4.6 26.6 1 9.1-3.8 15.8-11.5 18.5-20.6 26.4 33.5 67.3 55.1 113.3 55.1 79.5 0 144-64.5 144-144S511.5 256 432 256c-45.2 0-85.6 20.9-112 53.5l0-8.2 182.6-182.6c9.2-9.2 11.9-22.9 6.9-34.9S492.9 64 480 64L32 64zM416 320c0-8.8 7.2-16 16-16s16 7.2 16 16l0 8 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-45.8 0c-5.6 0-10.2 4.6-10.2 10.2 0 4.9 3.5 9.1 8.3 10l45 8.2c20 3.6 34.6 21.1 34.6 41.5 0 23.3-18.9 42.2-42.2 42.2l-5.8 0 0 8c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-8-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l53.8 0c5.6 0 10.2-4.6 10.2-10.2 0-4.9-3.5-9.1-8.3-10l-45-8.2c-20-3.6-34.6-21.1-34.6-41.5 0-22.6 17.7-41 40-42.1l0-8.1z"],
+    "filter-circle-dollar": [576, 512, ["funnel-dollar"], "f662", "M32 64C19.1 64 7.4 71.8 2.4 83.8S.2 109.5 9.4 118.6L192 301.3 192 416c0 8.5 3.4 16.6 9.4 22.6l64 64c2.5 2.5 5.3 4.5 8.3 6-21.2-30.9-33.6-68.3-33.6-108.6 0-99.4 75.5-181.1 172.3-191l90.4-90.4c9.2-9.2 11.9-22.9 6.9-34.9S492.9 64 480 64L32 64zM576 400a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zM416 320c0-8.8 7.2-16 16-16s16 7.2 16 16l0 8 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-45.8 0c-5.6 0-10.2 4.6-10.2 10.2 0 4.9 3.5 9.1 8.3 10l45 8.2c20 3.6 34.6 21.1 34.6 41.5 0 23.3-18.9 42.2-42.2 42.2l-5.8 0 0 8c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-8-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l53.8 0c5.6 0 10.2-4.6 10.2-10.2 0-4.9-3.5-9.1-8.3-10l-45-8.2c-20-3.6-34.6-21.1-34.6-41.5 0-22.6 17.7-41 40-42.1l0-8.1z"],
     "cheese": [512, 512, [], "f7ef", "M512 240.2l0 15.8-512 0c0-20 10-38.7 26.6-49.8L274.9 40.7c8.6-5.7 18.6-8.7 28.9-8.7 115 0 208.2 93.2 208.2 208.2zm0 63.8l0 112c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64l0-112 512 0z"],
     "circle-h": [512, 512, [9405, "hospital-symbol"], "f47e", "M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zm96-344l0 176c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-64-96 0 0 64c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-176c0-13.3 10.7-24 24-24s24 10.7 24 24l0 64 96 0 0-64c0-13.3 10.7-24 24-24s24 10.7 24 24z"],
     "school": [576, 512, [127979], "f549", "M0 192c0-35.3 28.7-64 64-64l64 0 127.9-115.1c18.3-16.4 46-16.4 64.2 0L448 128 512 128c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 192zM224 376l0 88 128 0 0-88c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zm-112 8c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0zm16-144l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16zM496 384c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0zm16-144l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16zM288 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128z"],
@@ -1120,7 +1183,7 @@
     "fill-drip": [576, 512, [], "f576", "M309.7 71.6l-64.4 64.4 33.4 33.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-33.4-33.4-96.4 96.4c-2.9 2.9-5.1 6.5-6.3 10.3l321.5 0 53.7-53.7c4.9-4.9 7.6-11.5 7.6-18.3s-2.7-13.5-7.6-18.3L346.3 71.6C341.5 66.7 334.9 64 328 64s-13.5 2.7-18.3 7.6zM58.3 232.4l96.4-96.4-49.4-49.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L200 90.7 264.4 26.3C281.3 9.5 304.1 0 328 0s46.7 9.5 63.6 26.3L517.7 152.4C534.5 169.3 544 192.1 544 216s-9.5 46.7-26.3 63.6L311.6 485.7C294.7 502.5 271.9 512 248 512s-46.7-9.5-63.6-26.3L58.3 359.6C41.5 342.7 32 319.9 32 296s9.5-46.7 26.3-63.6zM512 544c-35.3 0-64-28.7-64-64 0-25.2 32.6-79.6 51.2-108.7 6-9.4 19.5-9.4 25.5 0 18.7 29.1 51.2 83.5 51.2 108.7 0 35.3-28.7 64-64 64z"],
     "shield-heart": [512, 512, [], "e574", "M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2 .5 99.2 41.3 280.7 213.6 363.2 16.7 8 36.1 8 52.8 0 172.4-82.5 213.2-264 213.6-363.2 .1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM249.6 183.5l6.4 8.5 6.4-8.5c11.1-14.8 28.5-23.5 46.9-23.5 32.4 0 58.7 26.3 58.7 58.7l0 5.3c0 49.1-65.8 98.1-96.5 118.3-9.5 6.2-21.5 6.2-30.9 0-30.7-20.2-96.5-69.3-96.5-118.3l0-5.3c0-32.4 26.3-58.7 58.7-58.7 18.5 0 35.9 8.7 46.9 23.5z"],
     "person-skiing-nordic": [576, 512, ["skiing-nordic"], "f7ca", "M424.8 16a56 56 0 1 1 0 112 56 56 0 1 1 0-112zm99.8 193.7c7.6 15.2 1.9 33.6-12.6 42l0 180.3-32 0 0-164.2-10.1 5c-27.4 13.7-60.7 6.1-79.4-18.2l-19.6-25.5-39.5 68.8 24.8 12.4c29.5 14.7 42.9 49.5 31.1 80.2l-28.2 73.4 149.4 0c7.9 0 15.6-2.3 22.2-6.7l7.9-5.3c11-7.4 25.9-4.4 33.3 6.7s4.4 25.9-6.7 33.3l-7.9 5.3C543 506.9 526 512 508.6 512l-189.1 0c-.5 0-1 0-1.5 0L24 512c-13.3 0-24-10.7-24-24s10.7-24 24-24l88 0c0-8.2 3.1-16.4 9.4-22.6l74.1-74.1 10.2-35.9c11.3 18.3 27.7 33.8 48.4 44.2l4.8 2.4-1.9 6.8c-3 10.5-8.6 20-16.3 27.7l-51.5 51.5 101.3 0 37.1-96.4-55.6-27.8C230.4 319 215.3 267 239.3 227.1l37.7-62.7-27.7-7.7c-9-2.5-18.1 3.2-20 12.3l-5.9 29.3c-3.1 15.6-17.1 26.3-32.5 25.7l-130 208-37.7 0 140.6-225c-3.4-6.3-4.6-13.8-3.1-21.3l5.9-29.3c9.1-45.6 55.1-73.8 99.9-61.4l32.5 9c46.7 13 88 40.8 117.6 79.3l24.9 32.3 40.4-20.2c15.8-7.9 35-1.5 42.9 14.3z"],
-    "square-check": [448, 512, [9745, 9989, 61510, "check-square"], "f14a", "M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM308.4 212.7l-80 128c-4.2 6.7-11.4 10.9-19.3 11.3s-15.5-3.2-20.2-9.6l-48-64c-8-10.6-5.8-25.6 4.8-33.6s25.6-5.8 33.6 4.8l27 36 61.4-98.3c7-11.2 21.8-14.7 33.1-7.6s14.7 21.8 7.6 33.1z"],
+    "square-check": [448, 512, [9745, 9989, 61510, "check-square"], "f14a", "M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM342 145.7c-10.7-7.8-25.7-5.4-33.5 5.3L189.1 315.2 137 263.1c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l72 72c5 5 11.9 7.5 18.8 7s13.4-4.1 17.5-9.8L347.3 179.2c7.8-10.7 5.4-25.7-5.3-33.5z"],
     "bath": [512, 512, [128705, "bathtub"], "f2cd", "M96 77.3c0-7.3 5.9-13.3 13.3-13.3 3.5 0 6.9 1.4 9.4 3.9l14.9 14.9c-3.6 9.1-5.5 18.9-5.5 29.2 0 19.9 7.2 38 19.2 52-5.3 9.2-4 21.1 3.8 29 9.4 9.4 24.6 9.4 33.9 0L289 89c9.4-9.4 9.4-24.6 0-33.9-7.8-7.9-19.8-9.1-29-3.8-14-12-32.1-19.2-52-19.2-10.3 0-20.2 2-29.2 5.5L163.9 22.6C149.4 8.1 129.7 0 109.3 0 66.6 0 32 34.6 32 77.3L32 256c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 48c0 28.4 12.4 54 32 71.6L64 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-16 256 0 0 16c0 17.7 14.3 32 32 32s32-14.3 32-32l0-40.4c19.6-17.6 32-43.1 32-71.6l0-48c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 256 96 77.3z"],
     "chess-bishop": [320, 512, [9821], "f43a", "M64 384L48.3 368.3C17.4 337.4 0 295.4 0 251.7 0 213.1 13.5 175.8 38.2 146.1L106.7 64 96 64C78.3 64 64 49.7 64 32S78.3 0 96 0L224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-10.7 0 47.6 57.1-85.9 85.9c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l82.3-82.3c18.7 27.3 28.7 59.7 28.7 93 0 43.7-17.4 85.7-48.3 116.6L256 384 312.2 454.3c5 6.3 7.8 14.1 7.8 22.2 0 19.6-15.9 35.5-35.5 35.5L35.5 512c-19.6 0-35.5-15.9-35.5-35.5 0-8.1 2.7-15.9 7.8-22.2L64 384z"],
     "prescription-bottle-medical": [384, 512, ["prescription-bottle-alt"], "f486", "M0 32C0 14.3 14.3 0 32 0L352 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64L0 32zM32 144l320 0 0 304c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-304zM160 248l0 40-40 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l40 0 0 40c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-40 40 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-40 0 0-40c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z"],
@@ -1268,7 +1331,7 @@
     "house-medical-circle-xmark": [640, 512, [], "e513", "M309.8 8.6c-12.3-11.4-31.3-11.4-43.5 0l-224 208c-9.6 9-12.8 22.9-8 35.1S50.8 272 64 272l16 0 0 176c0 35.3 28.7 64 64 64l196 0c-21.2-29.5-34.3-65.3-35.9-104L272 408c-8.8 0-16-7.2-16-16l0-40-40 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l40 0 0-40c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 40 20 0c34.9-48.5 91.7-80 156-80 10.7 0 21.1 .9 31.3 2.5L309.8 8.6zM496 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm22.6-144l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-36.7-36.7-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l36.7-36.7-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l36.7 36.7 36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6L518.6 400z"],
     "table-list": [448, 512, ["th-list"], "f00b", "M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm64 0l0 64 64 0 0-64-64 0zm320 0l-192 0 0 64 192 0 0-64zM64 224l0 64 64 0 0-64-64 0zm320 0l-192 0 0 64 192 0 0-64zM64 352l0 64 64 0 0-64-64 0zm320 0l-192 0 0 64 192 0 0-64z"],
     "flask-vial": [640, 512, [], "e4f3", "M184.6 411.5c-3.1 7.3-5.4 14.9-6.8 22.6-14.5 8.8-31.5 13.9-49.8 13.9-53 0-96-43-96-96L32 64C14.3 64 0 49.7 0 32S14.3 0 32 0L224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 255.6-39.4 91.9zM96 64l0 128 64 0 0-128-64 0zM352 0L512 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 153.4 91.3 213c2.3 5.4 3.8 11.1 4.4 17l.3 .6-.3 0c.2 1.8 .3 3.6 .3 5.4 0 32.3-26.2 58.6-58.6 58.6l-266.9 0c-32.3 0-58.6-26.2-58.6-58.6 0-1.8 .1-3.6 .3-5.4l-.3 0 .3-.6c.6-5.8 2.1-11.6 4.4-17L320 217.4 320 64c-17.7 0-32-14.3-32-32S302.3 0 320 0l32 0zM453.2 242.6c-3.4-8-5.2-16.5-5.2-25.2l0-153.4-64 0 0 153.4c0 8.7-1.8 17.2-5.2 25.2l-33.2 77.4 140.7 0-33.2-77.4z"],
-    "circle-exclamation": [512, 512, ["exclamation-circle"], "f06a", "M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zm0-376c13.3 0 24 10.7 24 24l0 112c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-112c0-13.3 10.7-24 24-24zM229.3 352a26.7 26.7 0 1 1 53.3 0 26.7 26.7 0 1 1 -53.3 0z"],
+    "circle-exclamation": [512, 512, ["exclamation-circle"], "f06a", "M256 512a256 256 0 1 1 0-512 256 256 0 1 1 0 512zm0-192a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm0-192c-18.2 0-32.7 15.5-31.4 33.7l7.4 104c.9 12.6 11.4 22.3 23.9 22.3 12.6 0 23-9.7 23.9-22.3l7.4-104c1.3-18.2-13.1-33.7-31.4-33.7z"],
     "taxi": [512, 512, [128662, "cab"], "f1ba", "M192 0c-17.7 0-32 14.3-32 32l0 32-8.9 0c-42 0-79.1 27.3-91.6 67.4l-23 73.5C14.5 219.1 0 243.9 0 272L0 448c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-32 320 0 0 32c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-176c0-28.1-14.5-52.9-36.4-67.1l-23-73.5C440.1 91.3 402.9 64 360.9 64l-8.9 0 0-32c0-17.7-14.3-32-32-32L192 0zM151.1 128l209.9 0c14 0 26.4 9.1 30.5 22.5l13 41.5-296.9 0 13-41.5c4.2-13.4 16.5-22.5 30.5-22.5zM96 272a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm288 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"],
     "text-slash": [576, 512, ["remove-format"], "f87d", "M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L322.7 256.9 368.2 96 471 96 465 120.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l11-44.1C545.6 61.3 522.7 32 491.5 32l-319 0c-19.8 0-37.3 12.1-44.5 30.1l-87-87zM180.4 114.5l4.6-18.5 116.7 0-30.8 109-90.5-90.5zM241 310.8L211.3 416 160 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-42.2 0 15.1-53.3-51.9-51.9z"],
     "people-pulling": [576, 512, [], "e535", "M80 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM64 128c-35.3 0-64 28.7-64 64L0 320c0 17.7 14.3 32 32 32 9.8 0 18.5-4.4 24.4-11.2L80.4 485.3c2.9 17.4 19.4 29.2 36.8 26.3s29.2-19.4 26.3-36.8l-20.5-122.7 15.7 0 30 134.9c3.8 17.3 20.9 28.1 38.2 24.3s28.1-20.9 24.3-38.2l-57.3-258 116.3 53.8c.5 .3 1.1 .5 1.6 .7 8.6 3.6 18 3.1 25.9-.7 3.4-1.6 6.6-3.9 9.3-6.7 3.1-3.2 5.5-7 7.1-11.4 .1-.3 .2-.7 .3-1l2.5-7.5c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9l-21.4-10.7-15.3-36.8c-17.1-41.1-57.3-67.9-101.9-67.9-22.8 0-45.3 4.8-66.1 14l-8 3.5c-24.4 10.9-44.6 29-58.1 51.6L157.3 136.9C144.7 131 130.9 128 117 128l-53 0zM464 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM349.7 335.6l-25 62.4-59.4 59.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L372.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6z"],
@@ -1542,7 +1605,7 @@
     "comments": [576, 512, [128490, 61670], "f086", "M384 144c0 97.2-86 176-192 176-26.7 0-52.1-5-75.2-14L35.2 349.2c-9.3 4.9-20.7 3.2-28.2-4.2s-9.2-18.9-4.2-28.2l35.6-67.2C14.3 220.2 0 183.6 0 144 0 46.8 86-32 192-32S384 46.8 384 144zm0 368c-94.1 0-172.4-62.1-188.8-144 120-1.5 224.3-86.9 235.8-202.7 83.3 19.2 145 88.3 145 170.7 0 39.6-14.3 76.2-38.4 105.6l35.6 67.2c4.9 9.3 3.2 20.7-4.2 28.2s-18.9 9.2-28.2 4.2L459.2 498c-23.1 9-48.5 14-75.2 14z"],
     "tags": [576, 512, [], "f02c", "M401.2 39.1L549.4 189.4c27.7 28.1 27.7 73.1 0 101.2L393 448.9c-9.3 9.4-24.5 9.5-33.9 .2s-9.5-24.5-.2-33.9L515.3 256.8c9.2-9.3 9.2-24.4 0-33.7L367 72.9c-9.3-9.4-9.2-24.6 .2-33.9s24.6-9.2 33.9 .2zM32.1 229.5L32.1 96c0-35.3 28.7-64 64-64l133.5 0c17 0 33.3 6.7 45.3 18.7l144 144c25 25 25 65.5 0 90.5L285.4 418.7c-25 25-65.5 25-90.5 0l-144-144c-12-12-18.7-28.3-18.7-45.3zm144-85.5a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"],
     "gun": [576, 512, [], "e19b", "M528 56c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 8-448 0C14.3 64 0 78.3 0 96L0 208c0 17.7 14.3 32 32 32l10 0c20.8 0 36.1 19.6 31 39.8L33 440.2c-2.4 9.6-.2 19.7 5.8 27.5S54.1 480 64 480l96 0c14.7 0 27.5-10 31-24.2L217 352 321.4 352c23.7 0 44.8-14.9 52.7-37.2l26.7-74.8 31.1 0c8.5 0 16.6-3.4 22.6-9.4l22.6-22.6 66.7 0c17.7 0 32-14.3 32-32l0-80c0-17.7-14.3-32-32-32l-16 0 0-8zM321.4 304l-92.5 0 16-64 105 0-21 58.7c-1.1 3.2-4.2 5.3-7.5 5.3zM80 128l384 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 160c-8.8 0-16-7.2-16-16s7.2-16 16-16z"],
-    "circle-check": [512, 512, [61533, "check-circle"], "f058", "M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zm84.4-299.3l-80 128c-4.2 6.7-11.4 10.9-19.3 11.3s-15.5-3.2-20.2-9.6l-48-64c-8-10.6-5.8-25.6 4.8-33.6s25.6-5.8 33.6 4.8l27 36 61.4-98.3c7-11.2 21.8-14.7 33.1-7.6s14.7 21.8 7.6 33.1z"],
+    "circle-check": [512, 512, [61533, "check-circle"], "f058", "M256 512a256 256 0 1 1 0-512 256 256 0 1 1 0 512zM374 145.7c-10.7-7.8-25.7-5.4-33.5 5.3L221.1 315.2 169 263.1c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l72 72c5 5 11.8 7.5 18.8 7s13.4-4.1 17.5-9.8L379.3 179.2c7.8-10.7 5.4-25.7-5.3-33.5z"],
     "id-card-clip": [576, 512, ["id-card-alt"], "f47f", "M256-32l64 0c17.7 0 32 14.3 32 32l0 64-128 0 0-64c0-17.7 14.3-32 32-32zM64 32l112 0 0 32c0 26.5 21.5 48 48 48l128 0c26.5 0 48-21.5 48-48l0-32 112 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32zM176 400c0 8.8 7.2 16 16 16l192 0c8.8 0 16-7.2 16-16 0-44.2-35.8-80-80-80l-64 0c-44.2 0-80 35.8-80 80zM288 280a56 56 0 1 0 0-112 56 56 0 1 0 0 112z"],
     "moon": [512, 512, [127769, 9214], "f186", "M256 0C114.6 0 0 114.6 0 256S114.6 512 256 512c68.8 0 131.3-27.2 177.3-71.4 7.3-7 9.4-17.9 5.3-27.1s-13.7-14.9-23.8-14.1c-4.9 .4-9.8 .6-14.8 .6-101.6 0-184-82.4-184-184 0-72.1 41.5-134.6 102.1-164.8 9.1-4.5 14.3-14.3 13.1-24.4S322.6 8.5 312.7 6.3C294.4 2.2 275.4 0 256 0z"],
     "oil-well": [576, 512, [], "e532", "M528.3 61.3c-11.4-42.7-55.3-68-98-56.6L414.9 8.8C397.8 13.4 387.7 31 392.3 48l24.5 91.4-108.2 28.1-6.3-18.1C297.7 136.6 285.6 128 272 128s-25.7 8.6-30.2 21.4l-13.6 39-132.2 34.3 0-38.6c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 264-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-137.3 0-61.4-175.4-62.2 16.1 22.1 63.2-66.6 0 19.9-56.9-74.6 19.3-46.7 133.5-41.3 0 0-159.2 337.4-87.5 25.2 94c4.6 17.1 22.1 27.2 39.2 22.6l15.5-4.1c42.7-11.4 68-55.3 56.6-98L528.3 61.3zM205.1 448l16.8-48 100.2 0 16.8 48-133.8 0z"],
@@ -1679,7 +1742,7 @@
     "peace": [512, 512, [9774], "f67c", "M224 445.3l0-121.8-94.3 77.1c26.1 22.8 58.5 38.7 94.3 44.7zM89.2 351.1L224 240.8 224 66.7c-90.8 15.2-160 94.2-160 189.3 0 34.6 9.2 67.1 25.2 95.1zm293.1 49.5l-94.3-77.1 0 121.8c35.7-6 68.1-21.9 94.3-44.7zm40.6-49.5c16-28 25.2-60.5 25.2-95.1 0-95.1-69.2-174.1-160-189.3l0 174.2 134.8 110.3zM0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0z"],
     "star": [576, 512, [11088, 61446], "f005", "M309.5-18.9c-4.1-8-12.4-13.1-21.4-13.1s-17.3 5.1-21.4 13.1L193.1 125.3 33.2 150.7c-8.9 1.4-16.3 7.7-19.1 16.3s-.5 18 5.8 24.4l114.4 114.5-25.2 159.9c-1.4 8.9 2.3 17.9 9.6 23.2s16.9 6.1 25 2L288.1 417.6 432.4 491c8 4.1 17.7 3.3 25-2s11-14.2 9.6-23.2L441.7 305.9 556.1 191.4c6.4-6.4 8.6-15.8 5.8-24.4s-10.1-14.9-19.1-16.3L383 125.3 309.5-18.9z"],
     "flag": [448, 512, [127988, 61725], "f024", "M64 32C64 14.3 49.7 0 32 0S0 14.3 0 32L0 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-121.6 62.7-18.8c41.9-12.6 87.1-8.7 126.2 10.9 42.7 21.4 92.5 24 137.2 7.2l37.1-13.9c12.5-4.7 20.8-16.6 20.8-30l0-247.7c0-23-24.2-38-44.8-27.7l-11.8 5.9c-44.9 22.5-97.8 22.5-142.8 0-36.4-18.2-78.3-21.8-117.2-10.1L64 54.4 64 32z"],
-    "triangle-exclamation": [512, 512, [9888, "exclamation-triangle", "warning"], "f071", "M256 0c14.7 0 28.2 8.1 35.2 21l216 400c6.7 12.4 6.4 27.4-.8 39.5S486.1 480 472 480L40 480c-14.1 0-27.1-7.4-34.4-19.5s-7.5-27.1-.8-39.5l216-400c7-12.9 20.5-21 35.2-21zm0 168c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm26.7 216a26.7 26.7 0 1 0 -53.3 0 26.7 26.7 0 1 0 53.3 0z"],
+    "triangle-exclamation": [512, 512, [9888, "exclamation-triangle", "warning"], "f071", "M256 0c14.7 0 28.2 8.1 35.2 21l216 400c6.7 12.4 6.4 27.4-.8 39.5S486.1 480 472 480L40 480c-14.1 0-27.2-7.4-34.4-19.5s-7.5-27.1-.8-39.5l216-400c7-12.9 20.5-21 35.2-21zm0 352a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm0-192c-18.2 0-32.7 15.5-31.4 33.7l7.4 104c.9 12.5 11.4 22.3 23.9 22.3 12.6 0 23-9.7 23.9-22.3l7.4-104c1.3-18.2-13.1-33.7-31.4-33.7z"],
     "school-circle-exclamation": [640, 512, [], "e56c", "M64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l276 0c-10.5-14.6-19-30.7-25.1-48l-90.9 0 0-88c0-22.1 17.9-40 40-40l48 0c1 0 1.9 0 2.9 .1 26.3-74.6 97.5-128.1 181.1-128.1 28.6 0 55.6 6.2 80 17.4l0-33.4c0-35.3-28.7-64-64-64l-64 0-127.9-115.1c-18.3-16.4-46-16.4-64.2 0L128 128 64 128zm64 240c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32zM112 256l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16zM288 128a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM496 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-100a20 20 0 1 1 0 40 20 20 0 1 1 0-40zm0-140c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z"],
     "graduation-cap": [576, 512, [127891, "mortar-board"], "f19d", "M48 195.8l209.2 86.1c9.8 4 20.2 6.1 30.8 6.1s21-2.1 30.8-6.1l242.4-99.8c9-3.7 14.8-12.4 14.8-22.1s-5.8-18.4-14.8-22.1L318.8 38.1C309 34.1 298.6 32 288 32s-21 2.1-30.8 6.1L14.8 137.9C5.8 141.6 0 150.3 0 160L0 456c0 13.3 10.7 24 24 24s24-10.7 24-24l0-260.2zm48 71.7L96 384c0 53 86 96 192 96s192-43 192-96l0-116.6-142.9 58.9c-15.6 6.4-32.2 9.7-49.1 9.7s-33.5-3.3-49.1-9.7L96 267.4z"],
     "store": [512, 512, [], "f54e", "M30.7 72.3C37.6 48.4 59.5 32 84.4 32l344 0c24.9 0 46.8 16.4 53.8 40.3l23.4 80.2c12.8 43.7-20.1 87.5-65.6 87.5-26.3 0-49.4-14.9-60.8-37.1-11.6 21.9-34.6 37.1-61.4 37.1-26.6 0-49.7-15-61.3-37-11.6 22-34.7 37-61.3 37-26.8 0-49.8-15.1-61.4-37.1-11.4 22.1-34.5 37.1-60.8 37.1-45.6 0-78.4-43.7-65.6-87.5L30.7 72.3zM96.4 352l320 0 0-66.4c7.6 1.6 15.5 2.4 23.5 2.4 14.3 0 28-2.6 40.5-7.2l0 151.2c0 26.5-21.5 48-48 48l-352 0c-26.5 0-48-21.5-48-48l0-151.2c12.5 4.6 26.1 7.2 40.5 7.2 8.1 0 15.9-.8 23.5-2.4l0 66.4z"],
@@ -1703,7 +1766,7 @@
     "circle-nodes": [512, 512, [], "e4e2", "M418.4 157.9c35.3-8.3 61.6-40 61.6-77.9 0-44.2-35.8-80-80-80-43.4 0-78.7 34.5-80 77.5L136.2 151.1C121.7 136.8 101.9 128 80 128 35.8 128 0 163.8 0 208s35.8 80 80 80c12.2 0 23.8-2.7 34.1-7.6L259.7 407.8c-2.4 7.6-3.7 15.8-3.7 24.2 0 44.2 35.8 80 80 80s80-35.8 80-80c0-27.7-14-52.1-35.4-66.4l37.8-207.7zM156.3 232.2c2.2-6.9 3.5-14.2 3.7-21.7l183.8-73.5c3.6 3.5 7.4 6.7 11.6 9.5L317.6 354.1c-5.5 1.3-10.8 3.1-15.8 5.5L156.3 232.2z"],
     "window-restore": [576, 512, [], "f2d2", "M512 96L160 96c0-35.3 28.7-64 64-64l288 0c35.3 0 64 28.7 64 64l0 192c0 35.3-28.7 64-64 64l-48 0 0-64 48 0 0-192zM0 224c0-35.3 28.7-64 64-64l288 0c35.3 0 64 28.7 64 64l0 192c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 224zm64 40c0 13.3 10.7 24 24 24l240 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L88 240c-13.3 0-24 10.7-24 24z"],
     "r": [320, 512, [114], "52", "M32 32C14.3 32 0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 95.3 0 102.4 146.4c10.1 14.5 30.1 18 44.6 7.9s18-30.1 7.9-44.6L230.1 309.5C282.8 288.1 320 236.4 320 176 320 96.5 255.5 32 176 32L32 32zM176 256l-112 0 0-160 112 0c44.2 0 80 35.8 80 80s-35.8 80-80 80z"],
-    "filter-circle-xmark": [576, 512, [], "e17b", "M32 64C19.1 64 7.4 71.8 2.4 83.8L273.6 508.6c8.2 4.1 17.9 4.6 26.6 1 9.1-3.8 15.8-11.5 18.5-20.6 26.4 33.5 67.3 55.1 113.3 55.1 79.5 0 144-64.5 144-144S511.5 256 432 256c-45.2 0-85.6 20.9-112 53.5l0-8.2 182.6-182.6c9.2-9.2 11.9-22.9 6.9-34.9S492.9 64 480 64L32 64zM491.3 363.3l-36.7 36.7 36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-36.7-36.7-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l36.7-36.7-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l36.7 36.7 36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z"],
+    "filter-circle-xmark": [576, 512, [], "e17b", "M32 64C19.1 64 7.4 71.8 2.4 83.8S.2 109.5 9.4 118.6L192 301.3 192 416c0 8.5 3.4 16.6 9.4 22.6l64 64c2.5 2.5 5.3 4.5 8.3 6-21.2-30.9-33.6-68.3-33.6-108.6 0-99.4 75.5-181.1 172.3-191l90.4-90.4c9.2-9.2 11.9-22.9 6.9-34.9S492.9 64 480 64L32 64zM432 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7l-36.7 36.7 36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-36.7-36.7-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l36.7-36.7-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l36.7 36.7 36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z"],
     "gopuram": [512, 512, [], "f664", "M120 0c13.3 0 24 10.7 24 24l0 8 40 0 0-8c0-13.3 10.7-24 24-24s24 10.7 24 24l0 8 48 0 0-8c0-13.3 10.7-24 24-24s24 10.7 24 24l0 8 40 0 0-8c0-13.3 10.7-24 24-24s24 10.7 24 24l0 136c26.5 0 48 21.5 48 48l0 80c26.5 0 48 21.5 48 48l0 128c0 26.5-21.5 48-48 48l-48 0 0-224-32 0 0-128-48 0 0 128 32 0 0 224-224 0 0-224 32 0 0-128-48 0 0 128-32 0 0 224-48 0c-26.5 0-48-21.5-48-48L0 336c0-26.5 21.5-48 48-48l0-80c0-26.5 21.5-48 48-48L96 24c0-13.3 10.7-24 24-24zM256 208c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zM208 400l0 64 96 0 0-64c0-26.5-21.5-48-48-48s-48 21.5-48 48zM256 96c-17.7 0-32 14.3-32 32l0 32 64 0 0-32c0-17.7-14.3-32-32-32z"],
     "heart-circle-minus": [576, 512, [], "e4ff", "M241 87.1l15 20.7 15-20.7C296 52.5 336.2 32 378.9 32 452.4 32 512 91.6 512 165.1l0 2.6c0 17.6-3.4 35.6-9.5 53.7-21.8-8.6-45.6-13.4-70.5-13.4-106 0-192 86-192 192 0 28.5 6.2 55.6 17.4 80-.5 0-.9 0-1.4 0-15.5 0-30.8-4.6-43.1-14.1-73-55.7-212.9-186-212.9-298.2l0-2.6C0 91.6 59.6 32 133.1 32 175.8 32 216 52.5 241 87.1zM288 400a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm224 0c0-8.8-7.2-16-16-16l-128 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l128 0c8.8 0 16-7.2 16-16z"],
     "star-of-life": [512, 512, [], "f621", "M208.5 32c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 140.9 122-70.4c15.3-8.8 34.9-3.6 43.7 11.7l16 27.7c8.8 15.3 3.6 34.9-11.7 43.7l-122 70.4 122 70.4c15.3 8.8 20.6 28.4 11.7 43.7l-16 27.7c-8.8 15.3-28.4 20.6-43.7 11.7l-122-70.4 0 140.9c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-140.9-122 70.4c-15.3 8.8-34.9 3.6-43.7-11.7l-16-27.7c-8.8-15.3-3.6-34.9 11.7-43.7l122-70.4-122-70.4c-15.3-8.8-20.5-28.4-11.7-43.7l16-27.7c8.8-15.3 28.4-20.5 43.7-11.7l122 70.4 0-140.9z"],
@@ -1751,7 +1814,7 @@
     "file-pdf": [576, 512, [], "f1c1", "M96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l80 0 0-112c0-35.3 28.7-64 64-64l176 0 0-165.5c0-17-6.7-33.3-18.7-45.3L290.7 18.7C278.7 6.7 262.5 0 245.5 0L96 0zM357.5 176L264 176c-13.3 0-24-10.7-24-24L240 58.5 357.5 176zM240 380c-11 0-20 9-20 20l0 128c0 11 9 20 20 20s20-9 20-20l0-28 12 0c33.1 0 60-26.9 60-60s-26.9-60-60-60l-32 0zm32 80l-12 0 0-40 12 0c11 0 20 9 20 20s-9 20-20 20zm96-80c-11 0-20 9-20 20l0 128c0 11 9 20 20 20l32 0c28.7 0 52-23.3 52-52l0-64c0-28.7-23.3-52-52-52l-32 0zm20 128l0-88 12 0c6.6 0 12 5.4 12 12l0 64c0 6.6-5.4 12-12 12l-12 0zm88-108l0 128c0 11 9 20 20 20s20-9 20-20l0-44 28 0c11 0 20-9 20-20s-9-20-20-20l-28 0 0-24 28 0c11 0 20-9 20-20s-9-20-20-20l-48 0c-11 0-20 9-20 20z"],
     "language": [576, 512, [], "f1ab", "M160 0c17.7 0 32 14.3 32 32l0 32 128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-9.6 0-8.4 23.1c-16.4 45.2-41.1 86.5-72.2 122 14.2 8.8 29 16.6 44.4 23.5l50.4 22.4 62.2-140c5.1-11.6 16.6-19 29.2-19s24.1 7.4 29.2 19l128 288c7.2 16.2-.1 35.1-16.2 42.2s-35.1-.1-42.2-16.2l-20-45-157.5 0-20 45c-7.2 16.2-26.1 23.4-42.2 16.2s-23.4-26.1-16.2-42.2l39.8-89.5-50.4-22.4c-23-10.2-45-22.4-65.8-36.4-21.3 17.2-44.6 32.2-69.5 44.7L78.3 380.6c-15.8 7.9-35 1.5-42.9-14.3s-1.5-35 14.3-42.9l34.5-17.3c16.3-8.2 31.8-17.7 46.4-28.3-13.8-12.7-26.8-26.4-38.9-40.9L81.6 224.7c-11.3-13.6-9.5-33.8 4.1-45.1s33.8-9.5 45.1 4.1l10.2 12.2c11.5 13.9 24.1 26.8 37.4 38.7 27.5-30.4 49.2-66.1 63.5-105.4l.5-1.2-210.3 0C14.3 128 0 113.7 0 96S14.3 64 32 64l96 0 0-32c0-17.7 14.3-32 32-32zM416 270.8L365.7 384 466.3 384 416 270.8z"],
     "shield-halved": [512, 512, ["shield-alt"], "f3ed", "M256 0c4.6 0 9.2 1 13.4 2.9L457.8 82.8c22 9.3 38.4 31 38.3 57.2-.5 99.2-41.3 280.7-213.6 363.2-16.7 8-36.1 8-52.8 0-172.4-82.5-213.1-264-213.6-363.2-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.9 1 251.4 0 256 0zm0 66.8l0 378.1c138-66.8 175.1-214.8 176-303.4l-176-74.6 0 0z"],
-    "caret-up": [384, 512, [], "f0d8", "M32 352c-12.9 0-24.6-7.8-29.6-19.8S.2 306.5 9.4 297.4l160-160c12.5-12.5 32.8-12.5 45.3 0l160 160c9.2 9.2 11.9 22.9 6.9 34.9S364.9 352 352 352L32 352z"],
+    "caret-up": [320, 512, [], "f0d8", "M140.3 135.2c12.6-10.3 31.1-9.5 42.8 2.2l128 128c9.2 9.2 11.9 22.9 6.9 34.9S301.4 320 288.5 320l-256 0c-12.9 0-24.6-7.8-29.6-19.8S.7 274.5 9.9 265.4l128-128 2.4-2.2z"],
     "file-pen": [640, 512, [128221, "file-edit"], "f31c", "M128.1 0c-35.3 0-64 28.7-64 64l0 384c0 35.3 28.7 64 64 64l146.2 0 10.9-54.5c4.3-21.7 15-41.6 30.6-57.2l132.2-132.2 0-97.5c0-17-6.7-33.3-18.7-45.3L322.8 18.7C310.8 6.7 294.5 0 277.6 0L128.1 0zM389.6 176l-93.5 0c-13.3 0-24-10.7-24-24l0-93.5 117.5 117.5zM332.3 466.9l-11.9 59.6c-.2 .9-.3 1.9-.3 2.9 0 8 6.5 14.6 14.6 14.6 1 0 1.9-.1 2.9-.3l59.6-11.9c12.4-2.5 23.8-8.6 32.7-17.5l118.9-118.9-80-80-118.9 118.9c-8.9 8.9-15 20.3-17.5 32.7zm267.8-123c22.1-22.1 22.1-57.9 0-80s-57.9-22.1-80 0l-28.8 28.8 80 80 28.8-28.8z"],
     "person-biking": [576, 512, [128692, "biking"], "f84a", "M368 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm27.2 64l-61.8-48.8c-17.3-13.6-41.7-13.8-59.1-.3l-83.1 64.2c-30.7 23.8-28.5 70.8 4.3 91.6L256 305.1 256 416c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128c0-10.7-5.3-20.7-14.2-26.6L263 232.9 323.3 184.4 364 217c5.7 4.5 12.7 7 20 7l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-52.8 0zM112 512a112 112 0 1 0 0-224 112 112 0 1 0 0 224zm352 0a112 112 0 1 0 0-224 112 112 0 1 0 0 224z"],
     "book-open-reader": [512, 512, ["book-reader"], "f5da", "M256 152a88 88 0 1 0 0-176 88 88 0 1 0 0 176zm0 298.7l0-149.3c16.3-6.8 32.9-13.7 49.7-20.7 39-16.2 80.8-24.6 123.1-24.6l19.2 0 0 160-19.2 0c-59.1 0-117.7 11.7-172.3 34.5l-.5 .2zM256 232l-25.1-10.5C184.1 202 133.9 192 83.2 192L48 192c-26.5 0-48 21.5-48 48L0 432c0 26.5 21.5 48 48 48l35.2 0c50.7 0 100.9 10 147.7 29.5l12.8 5.3c7.9 3.3 16.7 3.3 24.6 0l12.8-5.3c46.8-19.5 97-29.5 147.7-29.5l35.2 0c26.5 0 48-21.5 48-48l0-192c0-26.5-21.5-48-48-48l-35.2 0c-50.7 0-100.9 10-147.7 29.5L256 232z"],
@@ -1825,9 +1888,9 @@
     "pen-clip": [512, 512, ["pen-alt"], "f305", "M404 0c19.2 0 37.6 7.6 51.1 21.2l35.7 35.7C504.4 70.4 512 88.8 512 108s-7.6 37.6-21.2 51.1L445.9 204 308 66.1 352.9 21.2C366.4 7.6 384.8 0 404 0zM274.1 100l0 0 137.9 137.9-215.1 215.1c-10.7 10.7-24.1 18.5-38.7 22.6L30.4 511.1c-8.3 2.3-17.3 0-23.4-6.2s-8.5-15.1-6.2-23.4L36.4 353.8c4.1-14.6 11.8-27.9 22.6-38.7L240.1 133.9 223 116.9c-9.4-9.4-24.6-9.4-33.9 0L89 217c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L155.1 82.9c28.1-28.1 73.7-28.1 101.8 0L274.1 100z"],
     "door-closed": [448, 512, [128682], "f52a", "M32 64C32 28.7 60.7 0 96 0L352 0c35.3 0 64 28.7 64 64l0 384c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32L32 64zM320 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64z"],
     "arrow-down-wide-short": [576, 512, ["sort-amount-asc", "sort-amount-down"], "f160", "M246.6 374.6l-96 96c-12.5 12.5-32.8 12.5-45.3 0l-96-96c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L96 370.7 96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 306.7 41.4-41.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zM320 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L320 96z"],
-    "caret-down": [384, 512, [], "f0d7", "M352 160c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-160 160c-12.5 12.5-32.8 12.5-45.3 0l-160-160c-9.2-9.2-11.9-22.9-6.9-34.9S19.1 160 32 160l320 0z"],
+    "caret-down": [320, 512, [], "f0d7", "M140.3 376.8c12.6 10.2 31.1 9.5 42.8-2.2l128-128c9.2-9.2 11.9-22.9 6.9-34.9S301.4 192 288.5 192l-256 0c-12.9 0-24.6 7.8-29.6 19.8S.7 237.5 9.9 246.6l128 128 2.4 2.2z"],
     "k": [320, 512, [107], "4b", "M311 86.3c12.3-12.7 12-32.9-.7-45.2s-32.9-12-45.2 .7C143.4 167.2 76.4 236.3 64 249L64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-107 64.7-66.7 133 192c10.1 14.5 30 18.1 44.5 8.1s18.1-30 8.1-44.5L174.1 227.4 311 86.3z"],
-    "check-to-slot": [576, 512, ["vote-yea"], "f772", "M96 96c0-35.3 28.7-64 64-64l256 0c35.3 0 64 28.7 64 64l0 224c0 35.3-28.7 64-64 64l-256 0c-35.3 0-64-28.7-64-64L96 96zm268.7 19.6c-11.2-7-26-3.6-33.1 7.6l-61.4 98.3-27-36c-8-10.6-23-12.8-33.6-4.8s-12.8 23-4.8 33.6l48 64c4.7 6.3 12.3 9.9 20.2 9.6s15.1-4.5 19.3-11.3l80-128c7-11.2 3.6-26-7.6-33.1zM48 312l0 104c0 8.8 7.2 16 16 16l448 0c8.8 0 16-7.2 16-16l0-104c0-13.3 10.7-24 24-24s24 10.7 24 24l0 104c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 312c0-13.3 10.7-24 24-24s24 10.7 24 24z"],
+    "check-to-slot": [576, 512, ["vote-yea"], "f772", "M552 288c13.3 0 24 10.7 24 24l0 104c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 312c0-13.3 10.7-24 24-24s24 10.7 24 24l0 104c0 8.8 7.2 16 16 16l448 0c8.8 0 16-7.2 16-16l0-104c0-13.3 10.7-24 24-24zM416 32c35.3 0 64 28.7 64 64l0 224c0 35.3-28.7 64-64 64l-256 0c-35.3 0-64-28.7-64-64L96 96c0-35.3 28.7-64 64-64l256 0zm-37.1 84.6c-10.7-7.8-25.7-5.4-33.5 5.3l-85.6 117.7-26.5-27.4c-9.2-9.5-24.4-9.8-33.9-.6-9.5 9.2-9.8 24.4-.6 33.9l46.4 48c4.9 5.1 11.8 7.8 18.9 7.3s13.6-4.1 17.8-9.8L384.2 150.1c7.8-10.7 5.4-25.7-5.3-33.5z"],
     "fish-fins": [576, 512, [], "e4f2", "M275.2 38.4c-10.6-8-25-8.5-36.3-1.5S222 57.3 224.6 70.3l9.7 48.6c-19.4 9-36.9 19.9-52.4 31.5-15.3 11.5-29 23.9-40.7 36.3L48.1 132.4c-12.5-7.3-28.4-5.3-38.7 4.9s-12.4 26-5.3 38.6L50 256 4.2 336.1c-7.2 12.6-5 28.4 5.3 38.6s26.1 12.2 38.7 4.9l93.1-54.3c11.8 12.3 25.4 24.8 40.7 36.3 15.5 11.6 33 22.5 52.4 31.5l-9.7 48.6c-2.6 13 3.1 26.3 14.3 33.3s25.6 6.5 36.3-1.5l77.6-58.2c54.9-4 101.5-27 137.2-53.8 39.2-29.4 67.2-64.7 81.6-89.5 5.8-9.9 5.8-22.2 0-32.1-14.4-24.8-42.5-60.1-81.6-89.5-35.8-26.8-82.3-49.8-137.2-53.8L275.2 38.4zM384 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"],
     "compress": [448, 512, [], "f066", "M160 64c0-17.7-14.3-32-32-32S96 46.3 96 64l0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-96zM32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-96 0zM352 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64zM320 320c-17.7 0-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0z"],
     "arrow-up-a-z": [512, 512, ["sort-alpha-up"], "f15e", "M412.6 49.7C407.2 38.8 396.1 32 384 32s-23.2 6.8-28.6 17.7c-50.7 101.3-77.3 154.7-80 160-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3l7.2-14.3 88.4 0 7.2 14.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9c-2.7-5.3-29.3-58.7-80-160zM384 135.6l20.2 40.4-40.4 0 20.2-40.4zM288 320c0 17.7 14.3 32 32 32l50.7 0-73.4 73.4c-9.2 9.2-11.9 22.9-6.9 34.9S307.1 480 320 480l128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-50.7 0 73.4-73.4c9.2-9.2 11.9-22.9 6.9-34.9S460.9 288 448 288l-128 0c-17.7 0-32 14.3-32 32zM150.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L96 141.3 96 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-306.7 25.4 25.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-80-80z"],
@@ -1954,7 +2017,7 @@
     "location-dot": [384, 512, ["map-marker-alt"], "f3c5", "M0 188.6C0 84.4 86 0 192 0S384 84.4 384 188.6c0 119.3-120.2 262.3-170.4 316.8-11.8 12.8-31.5 12.8-43.3 0-50.2-54.5-170.4-197.5-170.4-316.8zM192 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128z"],
     "plug-circle-exclamation": [640, 512, [], "e55d", "M192-32c17.7 0 32 14.3 32 32l0 96 128 0 0-96c0-17.7 14.3-32 32-32s32 14.3 32 32l0 96 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 48.7c-98.6 8.1-176 90.7-176 191.3 0 27.3 5.7 53.3 16 76.9l0 3.1c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-66.7C165.2 398.1 96 319.1 96 224l0-64c-17.7 0-32-14.3-32-32S78.3 96 96 96l64 0 0-96c0-17.7 14.3-32 32-32zM496 256a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 228a20 20 0 1 0 0-40 20 20 0 1 0 0 40zm0-180c-8.8 0-16 7.2-16 16l0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80c0-8.8-7.2-16-16-16z"],
     "cookie-bite": [512, 512, [], "f564", "M257.5 27.6c-.8-5.4-4.9-9.8-10.3-10.6-22.1-3.1-44.6 .9-64.4 11.4l-74 39.5C89.1 78.4 73.2 94.9 63.4 115L26.7 190.6c-9.8 20.1-13 42.9-9.1 64.9l14.5 82.8c3.9 22.1 14.6 42.3 30.7 57.9l60.3 58.4c16.1 15.6 36.6 25.6 58.7 28.7l83 11.7c22.1 3.1 44.6-.9 64.4-11.4l74-39.5c19.7-10.5 35.6-27 45.4-47.2l36.7-75.5c9.8-20.1 13-42.9 9.1-64.9-.9-5.3-5.3-9.3-10.6-10.1-51.5-8.2-92.8-47.1-104.5-97.4-1.8-7.6-8-13.4-15.7-14.6-54.6-8.7-97.7-52-106.2-106.8zM208 144a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM144 336a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm224-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"],
-    "screwdriver-wrench": [576, 512, ["tools"], "f7d9", "M224.1 97.1l0 49.6 .5 .5c6.5-82.4 75.4-147.2 159.5-147.2 20.1 0 39.4 3.7 57.1 10.5 10 3.8 11.8 16.5 4.3 24.1l-88.7 88.7c-3 3-4.7 7.1-4.7 11.3l0 41.4c0 8.8 7.2 16 16 16l41.4 0c4.2 0 8.3-1.7 11.3-4.7l88.7-88.7c7.6-7.6 20.3-5.7 24.1 4.3 6.8 17.7 10.5 37 10.5 57.1 0 60.6-33.7 113.4-83.5 140.5l81.5 81.5c18.7 18.7 18.7 49.1 0 67.9l-60.1 60.1c-18.7 18.7-49.1 18.7-67.9 0L288.1 384c-27.4-27.4-33.6-67.9-18.5-101.3l-90.7-90.7-49.6 0c-10.7 0-20.7-5.3-26.6-14.2L23.4 58.9c-4.2-6.3-3.4-14.8 2-20.2L70.8-6.7c5.4-5.4 13.8-6.2 20.2-2L209.9 70.5c8.9 5.9 14.2 15.9 14.2 26.6zm-8.5 199.5c-6.3 37 2.4 76.1 26.4 107.4L147 498.9c-28.1 28.1-73.7 28.1-101.8 0s-28.1-73.7 0-101.8l135.4-135.4 35 35z"],
+    "screwdriver-wrench": [576, 512, ["tools"], "f7d9", "M70.8-6.7c5.4-5.4 13.8-6.2 20.2-2L209.9 70.5c8.9 5.9 14.2 15.9 14.2 26.6l0 49.6 90.8 90.8c33.3-15 73.9-8.9 101.2 18.5L542.2 382.1c18.7 18.7 18.7 49.1 0 67.9l-60.1 60.1c-18.7 18.7-49.1 18.7-67.9 0L288.1 384c-27.4-27.4-33.5-67.9-18.5-101.2l-90.8-90.8-49.6 0c-10.7 0-20.7-5.3-26.6-14.2L23.4 58.9c-4.2-6.3-3.4-14.8 2-20.2L70.8-6.7zm145 303.5c-6.3 36.9 2.3 75.9 26.2 107.2l-94.9 95c-28.1 28.1-73.7 28.1-101.8 0s-28.1-73.7 0-101.8l135.4-135.5 35.2 35.1zM384.1 0c20.1 0 39.4 3.7 57.1 10.5 10 3.8 11.8 16.5 4.3 24.1L388.8 91.3c-3 3-4.7 7.1-4.7 11.3l0 41.4c0 8.8 7.2 16 16 16l41.4 0c4.2 0 8.3-1.7 11.3-4.7l56.7-56.7c7.6-7.5 20.3-5.7 24.1 4.3 6.8 17.7 10.5 37 10.5 57.1 0 43.2-17.2 82.3-45 111.1l-49.1-49.1c-33.1-33-78.5-45.7-121.1-38.4l-56.8-56.8 0-29.7-.2-5c-.8-12.4-4.4-24.3-10.5-34.9 29.4-35 73.4-57.2 122.7-57.3z"],
     "indent": [448, 512, [], "f03c", "M0 64C0 46.3 14.3 32 32 32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64zM192 192c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 96l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zM0 448c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32zM127.8 268.6L25.8 347.9C15.3 356.1 0 348.6 0 335.3L0 176.7c0-13.3 15.3-20.8 25.8-12.6l101.9 79.3c8.2 6.4 8.2 18.9 0 25.3z"],
     "bars": [448, 512, ["navicon"], "f0c9", "M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"],
     "hands-praying": [640, 512, ["praying-hands"], "f684", "M224 296c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-112.6 88.2-119.7c13.1-17.8 9.3-42.8-8.5-55.9s-42.8-9.3-55.9 8.5L106.5 142.9C89.3 166.2 80 194.5 80 223.6l0 110.7-58.1 19.4C8.8 358 0 370.2 0 384l0 96c0 10 4.7 19.5 12.7 25.5s18.4 8 28.1 5.2l154.4-44.1c55-15.7 92.8-65.9 92.8-123.1L288 224c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 72zm192 0l0-72c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 119.6c0 57.2 37.9 107.4 92.8 123.1l154.4 44.1c9.7 2.8 20 .8 28.1-5.2S640 490 640 480l0-96c0-13.8-8.8-26-21.9-30.4l-58.1-19.4 0-110.7c0-29-9.3-57.3-26.5-80.7L440.2 16.3C427.1-1.5 402.1-5.3 384.3 7.8s-21.6 38.1-8.5 55.9L464 183.4 464 296c0 13.3-10.7 24-24 24s-24-10.7-24-24z"],

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 1
node_modules/@fortawesome/fontawesome-free/js/solid.min.js


+ 161 - 98
node_modules/@fortawesome/fontawesome-free/js/v4-shims.js

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */
@@ -93,8 +93,8 @@
     }
   }
 
-  var _so;
-  var z = {
+  var _dt;
+  var q = {
       classic: {
         fa: "solid",
         fas: "solid",
@@ -185,40 +185,58 @@
       chisel: {
         "fa-regular": "regular",
         facr: "regular"
+      },
+      utility: {
+        "fa-semibold": "semibold",
+        fausb: "semibold"
+      },
+      "utility-duo": {
+        "fa-semibold": "semibold",
+        faudsb: "semibold"
+      },
+      "utility-fill": {
+        "fa-semibold": "semibold",
+        faufsb: "semibold"
       }
     };
-  var a = "classic",
-    o = "duotone",
+  var i = "classic",
+    t = "duotone",
     d = "sharp",
-    t = "sharp-duotone",
-    i = "chisel",
+    l = "sharp-duotone",
+    f = "chisel",
     n = "etch",
     h = "jelly",
-    s = "jelly-duo",
-    f = "jelly-fill",
+    o = "jelly-duo",
+    u = "jelly-fill",
     g = "notdog",
-    l = "notdog-duo",
-    u = "slab",
-    p = "slab-press",
+    s = "notdog-duo",
+    y = "slab",
+    m = "slab-press",
     e = "thumbprint",
-    w = "whiteboard",
-    m = "Classic",
-    y = "Duotone",
-    x = "Sharp",
-    c = "Sharp Duotone",
-    I = "Chisel",
-    b = "Etch",
-    F = "Jelly",
-    v = "Jelly Duo",
-    S = "Jelly Fill",
-    A = "Notdog",
-    P = "Notdog Duo",
-    j = "Slab",
-    B = "Slab Press",
-    N = "Thumbprint",
-    k = "Whiteboard",
-    so = (_so = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_so, a, m), o, y), d, x), t, c), i, I), n, b), h, F), s, v), f, S), g, A), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_so, l, P), u, j), p, B), e, N), w, k));
-  var io = {
+    p = "utility",
+    a = "utility-duo",
+    w = "utility-fill",
+    x = "whiteboard",
+    b = "Classic",
+    c = "Duotone",
+    I = "Sharp",
+    F = "Sharp Duotone",
+    v = "Chisel",
+    S = "Etch",
+    A = "Jelly",
+    P = "Jelly Duo",
+    j = "Jelly Fill",
+    B = "Notdog",
+    N = "Notdog Duo",
+    k = "Slab",
+    D = "Slab Press",
+    T = "Thumbprint",
+    C = "Utility",
+    W = "Utility Duo",
+    K = "Utility Fill",
+    R = "Whiteboard",
+    dt = (_dt = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_dt, i, b), t, c), d, I), l, F), f, v), n, S), h, A), o, P), u, j), g, B), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_dt, s, N), y, k), m, D), e, T), p, C), a, W), w, K), x, R));
+  var gt = {
       classic: {
         900: "fas",
         400: "far",
@@ -276,9 +294,18 @@
       },
       "jelly-duo": {
         400: "fajdr"
+      },
+      utility: {
+        600: "fausb"
+      },
+      "utility-duo": {
+        600: "faudsb"
+      },
+      "utility-fill": {
+        600: "faufsb"
       }
     };
-  var Ro = {
+  var _t = {
       chisel: {
         regular: "facr"
       },
@@ -334,11 +361,20 @@
       thumbprint: {
         light: "fatl"
       },
+      utility: {
+        semibold: "fausb"
+      },
+      "utility-duo": {
+        semibold: "faudsb"
+      },
+      "utility-fill": {
+        semibold: "faufsb"
+      },
       whiteboard: {
         semibold: "fawsb"
       }
     };
-  var Oo = {
+  var qt = {
       kit: {
         fak: "kit",
         "fa-kit": "kit"
@@ -348,13 +384,13 @@
         "fa-kit-duotone": "kit-duotone"
       }
     },
-    Go = ["kit"];
-  var D = "kit",
+    Ht = ["kit"];
+  var L = "kit",
     r = "kit-duotone",
-    T = "Kit",
-    C = "Kit Duotone",
-    qo = _defineProperty(_defineProperty({}, D, T), r, C);
-  var Xo = {
+    U = "Kit",
+    J = "Kit Duotone",
+    $t = _defineProperty(_defineProperty({}, L, U), r, J);
+  var ol = {
     kit: {
       "fa-kit": "fak"
     },
@@ -362,7 +398,7 @@
       "fa-kit-duotone": "fakd"
     }
   };
-  var et = {
+  var fl = {
       kit: {
         fak: "fa-kit"
       },
@@ -370,7 +406,7 @@
         fakd: "fa-kit-duotone"
       }
     };
-  var dt = {
+  var ul = {
       kit: {
         kit: "fak"
       },
@@ -379,50 +415,56 @@
       }
     };
 
-  var _fl;
+  var _ml;
   var l$1 = {
       GROUP: "duotone-group",
       SWAP_OPACITY: "swap-opacity",
       PRIMARY: "primary",
       SECONDARY: "secondary"
     };
-  var f$1 = "classic",
-    a$1 = "duotone",
-    n$1 = "sharp",
-    t$1 = "sharp-duotone",
+  var n$1 = "classic",
+    o$1 = "duotone",
+    u$1 = "sharp",
+    s$1 = "sharp-duotone",
     h$1 = "chisel",
     g$1 = "etch",
-    u$1 = "jelly",
-    s$1 = "jelly-duo",
-    p$1 = "jelly-fill",
-    y$1 = "notdog",
-    e$1 = "notdog-duo",
-    m$1 = "slab",
-    c$1 = "slab-press",
+    y$1 = "jelly",
+    e$1 = "jelly-duo",
+    m$1 = "jelly-fill",
+    p$1 = "notdog",
+    a$1 = "notdog-duo",
+    w$1 = "slab",
+    b$1 = "slab-press",
     r$1 = "thumbprint",
-    w$1 = "whiteboard",
-    x$1 = "Classic",
-    I$1 = "Duotone",
-    b$1 = "Sharp",
-    F$1 = "Sharp Duotone",
-    v$1 = "Chisel",
-    S$1 = "Etch",
-    A$1 = "Jelly",
-    j$1 = "Jelly Duo",
-    P$1 = "Jelly Fill",
-    B$1 = "Notdog",
-    k$1 = "Notdog Duo",
-    N$1 = "Slab",
-    D$1 = "Slab Press",
-    C$1 = "Thumbprint",
-    T$1 = "Whiteboard",
-    fl = (_fl = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_fl, f$1, x$1), a$1, I$1), n$1, b$1), t$1, F$1), h$1, v$1), g$1, S$1), u$1, A$1), s$1, j$1), p$1, P$1), y$1, B$1), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_fl, e$1, k$1), m$1, N$1), c$1, D$1), r$1, C$1), w$1, T$1));
-  var L = "kit",
+    c$1 = "utility",
+    i$1 = "utility-duo",
+    x$1 = "utility-fill",
+    I$1 = "whiteboard",
+    F$1 = "Classic",
+    v$1 = "Duotone",
+    S$1 = "Sharp",
+    A$1 = "Sharp Duotone",
+    P$1 = "Chisel",
+    j$1 = "Etch",
+    B$1 = "Jelly",
+    N$1 = "Jelly Duo",
+    k$1 = "Jelly Fill",
+    D$1 = "Notdog",
+    C$1 = "Notdog Duo",
+    T$1 = "Slab",
+    L$1 = "Slab Press",
+    W$1 = "Thumbprint",
+    R$1 = "Utility",
+    K$1 = "Utility Duo",
+    U$1 = "Utility Fill",
+    J$1 = "Whiteboard",
+    ml$1 = (_ml = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_ml, n$1, F$1), o$1, v$1), u$1, S$1), s$1, A$1), h$1, P$1), g$1, j$1), y$1, B$1), e$1, N$1), m$1, k$1), p$1, D$1), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_ml, a$1, C$1), w$1, T$1), b$1, L$1), r$1, W$1), c$1, R$1), i$1, K$1), x$1, U$1), I$1, J$1));
+  var E$1 = "kit",
     d$1 = "kit-duotone",
-    R$1 = "Kit",
-    W$1 = "Kit Duotone",
-    lo$1 = _defineProperty(_defineProperty({}, L, R$1), d$1, W$1);
-  var zo$1 = {
+    _$1 = "Kit",
+    M$1 = "Kit Duotone",
+    rt$1 = _defineProperty(_defineProperty({}, E$1, _$1), d$1, M$1);
+  var $t$1 = {
       classic: {
         "fa-brands": "fab",
         "fa-duotone": "fad",
@@ -480,9 +522,18 @@
       },
       chisel: {
         "fa-regular": "facr"
+      },
+      utility: {
+        "fa-semibold": "fausb"
+      },
+      "utility-duo": {
+        "fa-semibold": "faudsb"
+      },
+      "utility-fill": {
+        "fa-semibold": "faufsb"
       }
     },
-    J$1 = {
+    z = {
       classic: ["fas", "far", "fal", "fat", "fad"],
       duotone: ["fadr", "fadl", "fadt"],
       sharp: ["fass", "fasr", "fasl", "fast"],
@@ -497,9 +548,12 @@
       jelly: ["fajr"],
       "jelly-fill": ["fajfr"],
       "jelly-duo": ["fajdr"],
-      chisel: ["facr"]
+      chisel: ["facr"],
+      utility: ["fausb"],
+      "utility-duo": ["faudsb"],
+      "utility-fill": ["faufsb"]
     },
-    Go$1 = {
+    Ht$1 = {
       classic: {
         fab: "fa-brands",
         fad: "fa-duotone",
@@ -557,16 +611,25 @@
       },
       chisel: {
         facr: "fa-regular"
+      },
+      utility: {
+        fausb: "fa-semibold"
+      },
+      "utility-duo": {
+        faudsb: "fa-semibold"
+      },
+      "utility-fill": {
+        faufsb: "fa-semibold"
       }
     },
-    _$1 = ["solid", "regular", "light", "thin", "duotone", "brands", "semibold"],
-    K$1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
-    M$1 = K$1.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]),
-    O$1 = ["aw", "fw", "pull-left", "pull-right"],
-    Ho$1 = [].concat(_toConsumableArray(Object.keys(J$1)), _$1, O$1, ["2xs", "xs", "sm", "lg", "xl", "2xl", "beat", "border", "fade", "beat-fade", "bounce", "flip-both", "flip-horizontal", "flip-vertical", "flip", "inverse", "layers", "layers-bottom-left", "layers-bottom-right", "layers-counter", "layers-text", "layers-top-left", "layers-top-right", "li", "pull-end", "pull-start", "pulse", "rotate-180", "rotate-270", "rotate-90", "rotate-by", "shake", "spin-pulse", "spin-reverse", "spin", "stack-1x", "stack-2x", "stack", "ul", "width-auto", "width-fixed", l$1.GROUP, l$1.SWAP_OPACITY, l$1.PRIMARY, l$1.SECONDARY]).concat(K$1.map(function (o) {
-      return "".concat(o, "x");
-    })).concat(M$1.map(function (o) {
-      return "w-".concat(o);
+    G$1 = ["solid", "regular", "light", "thin", "duotone", "brands", "semibold"],
+    O$1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
+    V$1 = O$1.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]),
+    $$1 = ["aw", "fw", "pull-left", "pull-right"],
+    to = [].concat(_toConsumableArray(Object.keys(z)), G$1, $$1, ["2xs", "xs", "sm", "lg", "xl", "2xl", "beat", "border", "fade", "beat-fade", "bounce", "flip-both", "flip-horizontal", "flip-vertical", "flip", "inverse", "layers", "layers-bottom-left", "layers-bottom-right", "layers-counter", "layers-text", "layers-top-left", "layers-top-right", "li", "pull-end", "pull-start", "pulse", "rotate-180", "rotate-270", "rotate-90", "rotate-by", "shake", "spin-pulse", "spin-reverse", "spin", "stack-1x", "stack-2x", "stack", "ul", "width-auto", "width-fixed", l$1.GROUP, l$1.SWAP_OPACITY, l$1.PRIMARY, l$1.SECONDARY]).concat(O$1.map(function (t) {
+      return "".concat(t, "x");
+    })).concat(V$1.map(function (t) {
+      return "w-".concat(t);
     }));
 
   var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';
@@ -581,36 +644,36 @@
     // Defaults to the classic family if family is not available
     return new Proxy(obj, {
       get: function get(target, prop) {
-        return prop in target ? target[prop] : target[a];
+        return prop in target ? target[prop] : target[i];
       }
     });
   }
-  var _PREFIX_TO_STYLE = _objectSpread2({}, z);
+  var _PREFIX_TO_STYLE = _objectSpread2({}, q);
 
   // We changed FACSSClassesToStyleId in the icons repo to be canonical and as such, "classic" family does not have any
   // duotone styles.  But we do still need duotone in _PREFIX_TO_STYLE below, so we are manually adding
   // {'fa-duotone': 'duotone'}
-  _PREFIX_TO_STYLE[a] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {
+  _PREFIX_TO_STYLE[i] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {
     'fa-duotone': 'duotone'
-  }), z[a]), Oo['kit']), Oo['kit-duotone']);
+  }), q[i]), qt['kit']), qt['kit-duotone']);
   var PREFIX_TO_STYLE = familyProxy(_PREFIX_TO_STYLE);
-  var _STYLE_TO_PREFIX = _objectSpread2({}, Ro);
+  var _STYLE_TO_PREFIX = _objectSpread2({}, _t);
 
   // We changed FAStyleIdToShortPrefixId in the icons repo to be canonical and as such, "classic" family does not have any
   // duotone styles.  But we do still need duotone in _STYLE_TO_PREFIX below, so we are manually adding {duotone: 'fad'}
-  _STYLE_TO_PREFIX[a] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {
+  _STYLE_TO_PREFIX[i] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {
     duotone: 'fad'
-  }), _STYLE_TO_PREFIX[a]), dt['kit']), dt['kit-duotone']);
+  }), _STYLE_TO_PREFIX[i]), ul['kit']), ul['kit-duotone']);
   var STYLE_TO_PREFIX = familyProxy(_STYLE_TO_PREFIX);
-  var _PREFIX_TO_LONG_STYLE = _objectSpread2({}, Go$1);
-  _PREFIX_TO_LONG_STYLE[a] = _objectSpread2(_objectSpread2({}, _PREFIX_TO_LONG_STYLE[a]), et['kit']);
+  var _PREFIX_TO_LONG_STYLE = _objectSpread2({}, Ht$1);
+  _PREFIX_TO_LONG_STYLE[i] = _objectSpread2(_objectSpread2({}, _PREFIX_TO_LONG_STYLE[i]), fl['kit']);
   var PREFIX_TO_LONG_STYLE = familyProxy(_PREFIX_TO_LONG_STYLE);
-  var _LONG_STYLE_TO_PREFIX = _objectSpread2({}, zo$1);
-  _LONG_STYLE_TO_PREFIX[a] = _objectSpread2(_objectSpread2({}, _LONG_STYLE_TO_PREFIX[a]), Xo['kit']);
+  var _LONG_STYLE_TO_PREFIX = _objectSpread2({}, $t$1);
+  _LONG_STYLE_TO_PREFIX[i] = _objectSpread2(_objectSpread2({}, _LONG_STYLE_TO_PREFIX[i]), ol['kit']);
   var LONG_STYLE_TO_PREFIX = familyProxy(_LONG_STYLE_TO_PREFIX);
-  var _FONT_WEIGHT_TO_PREFIX = _objectSpread2({}, io);
+  var _FONT_WEIGHT_TO_PREFIX = _objectSpread2({}, gt);
   var FONT_WEIGHT_TO_PREFIX = familyProxy(_FONT_WEIGHT_TO_PREFIX);
-  var RESERVED_CLASSES = [].concat(_toConsumableArray(Go), _toConsumableArray(Ho$1));
+  var RESERVED_CLASSES = [].concat(_toConsumableArray(Ht), _toConsumableArray(to));
 
   function bunker(fn) {
     try {

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 1
node_modules/@fortawesome/fontawesome-free/js/v4-shims.min.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 202 - 101
node_modules/@fortawesome/fontawesome-free/metadata/icon-families.json


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 126 - 0
node_modules/@fortawesome/fontawesome-free/metadata/icon-families.yml


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 126 - 0
node_modules/@fortawesome/fontawesome-free/metadata/icons.yml


+ 25 - 0
node_modules/@fortawesome/fontawesome-free/metadata/sponsors.yml

@@ -206,6 +206,11 @@ crystal-instruments:
     - chart-sine
   label: Crystal Instruments
   url: 'https://www.crystalinstruments.com'
+crystalinstruments:
+  icons:
+    - transducer
+  label: Crystal Instruments
+  url: 'http://www.CrystalInstruments.com/'
 cuttlefish:
   icons:
     - cuttlefish
@@ -556,6 +561,11 @@ libeo:
     - arrow-right-to-arc
   label: Libeo
   url: 'https://libeo.io'
+lychee:
+  icons:
+    - lychee
+  label: Lychee
+  url: 'https://lychee.is'
 max-elman:
   icons:
     - frog
@@ -616,6 +626,16 @@ mizuni:
     - mizuni
   label: Mizuni
   url: 'http://www.mizuni.com'
+morganlopes:
+  icons:
+    - aeropress
+    - chemex
+    - foot-wing
+    - hand-shaka
+    - kettlebell
+    - supportnow
+  label: Morgan Lopes
+  url: 'https://www.morganjlopes.com/fontawesome'
 mrt:
   icons:
     - medrt
@@ -719,6 +739,11 @@ optimism:
     - swap-arrows
   label: Optimism
   url: 'https://www.optimism.io/'
+oxiyen:
+  icons:
+    - pump-impeller
+  label: Oxiyen
+  url: 'https://oxiyen.com/'
 padlet:
   icons:
     - padlet

+ 1 - 1
node_modules/@fortawesome/fontawesome-free/package.json

@@ -21,7 +21,7 @@
     "node": ">=6"
   },
   "dependencies": {},
-  "version": "7.0.0",
+  "version": "7.1.0",
   "name": "@fortawesome/fontawesome-free",
   "main": "js/fontawesome.js",
   "style": "css/fontawesome.css",

+ 15 - 1
node_modules/@fortawesome/fontawesome-free/scss/_core.scss

@@ -24,6 +24,20 @@
   .#{v.$css-prefix}-classic,
   .fa
 )::before {
-  content: var(#{v.$icon-property});
   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});
+  }
 }

+ 4 - 2
node_modules/@fortawesome/fontawesome-free/scss/_stacked.scss

@@ -13,10 +13,12 @@
 
 .#{v.$css-prefix}-stack-1x,
 .#{v.$css-prefix}-stack-2x {
-  left: 0;
+  --#{v.$css-prefix}-width: 100%;
+
+  inset: 0;
   position: absolute;
   text-align: center;
-  width: 100%;
+  width: var(--#{v.$css-prefix}-width);
   z-index: var(--#{v.$css-prefix}-stack-z-index, #{v.$stack-z-index});
 }
 

+ 1 - 1
node_modules/@fortawesome/fontawesome-free/scss/brands.scss

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 7.1.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 2025 Fonticons, Inc.
  */

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio