Compare commits

...

15 Commits

@ -1,2 +0,0 @@
# Baoma

@ -0,0 +1,213 @@
# 功能说明文档
## 核心功能模块
### 1. 数据查询模块
#### 1.1 自然语言查询x
- **位置**`views/QueryPage.vue`
- **功能**:用户通过自然语言描述查询需求,系统生成 SQL 并执行
- **主要组件**
- `QueryPage.vue`:主查询页面
- `QueryResult.vue`:查询结果展示组件
- `QueryRecommendSidebar.vue`:查询推荐侧边栏
#### 1.2 查询结果展示x
- **表格视图**:展示查询结果的表格数据
- **图表视图**:支持柱状图、折线图、饼图三种图表类型
- **SQL 展示**:显示生成的 SQL 语句
- **原始提问**:显示用户的原始查询问题
#### 1.3 查询历史x
- **位置**`views/HistoryPage.vue`
- **功能**:查看历史查询记录,支持筛选和搜索
- **主要功能**
- 按日期筛选
- 按模型筛选
- 搜索查询内容
- 查看详情
- 重新执行查询
- 删除查询记录
### 2. 收藏夹模块x
#### 2.1 查询收藏
- **位置**`views/CollectionsPage.vue`
- **功能**:管理用户收藏的查询集合
- **主要功能**
- 创建收藏夹
- 添加查询到收藏夹
- 查看收藏夹内容
- 删除收藏夹
#### 2.2 收藏服务
- **位置**`services/queryShareService.ts`
- **功能**:统一的查询收藏和分享服务
- **主要函数**
- `saveQuery()`:保存查询到历史记录
- `shareQuery()`:分享查询给好友
- `isQuerySaved()`:检查查询是否已保存
### 3. 好友管理模块
#### 3.1 好友列表
- **位置**`views/FriendsPage.vue`
- **功能**:管理好友关系
- **主要功能**
- 查看好友列表
- 搜索好友
- 查看好友主页
- 发起聊天x
- 编辑备注
- 删除好友
#### 3.2 好友请求
- **功能**:处理好友添加请求
- **主要功能**
- 发送好友请求
- 接收好友请求
- 同意/拒绝请求
- 查看请求状态x
#### 3.3 好友聊天
- **位置**`components/feature/chat/ChatModal.vue`
- **功能**与好友进行实时聊天x
- **主要功能**
- 发送文本消息
- 分享查询结果
- 查看聊天历史
- 未读消息提示
### 4. 查询分享模块
#### 4.1 分享查询
- **功能**将查询结果分享给好友x
- **分享方式**
- 从查询结果页面分享
- 从历史记录分享
- 从收藏夹分享
- 从聊天窗口分享
#### 4.2 接收分享
- **功能**查看好友分享的查询x
- **主要功能**
- 查看分享列表
- 查看分享详情
- 保存分享的查询
- 导入并重新执行
- 删除分享记录
### 5. 通知模块x
#### 5.1 通知中心
- **位置**`views/NotificationsPage.vue`
- **功能**:查看和管理系统通知
- **通知类型**
- 好友请求通知
- 查询分享通知
- 系统通知
#### 5.2 通知管理(管理员)
- **位置**`views/admin/NotificationManagementPage.vue`
- **功能**:管理员创建和管理系统通知
### 6. 账户管理模块
#### 6.1 个人信息v
- **位置**`views/AccountPage.vue`
- **功能**:管理个人账户信息
- **主要功能**
- 查看个人信息
- 编辑个人信息
- 修改密码
- 上传头像
#### 6.2 设置x
- **位置**`views/SettingsPage.vue`
- **功能**:应用设置
- **主要功能**
- 主题切换(浅色、深色、蓝色、绿色、紫色、大字)
- 其他应用设置
### 7. 管理员模块
#### 7.1 系统管理员
- **位置**`views/admin/SysAdminPage.vue`
- **功能**:系统管理员功能
- **主要功能**
- 用户管理
- 系统日志查看
- 大模型配置
- 通知管理x
- 系统监控
#### 7.2 数据管理员
- **位置**`views/data-admin/DataAdminPage.vue`
- **功能**:数据管理员功能
- **主要功能**
- 数据源管理
- 用户权限管理
- 连接日志查看
- 数据源监控
## 主题系统x
### 支持的主题
1. **浅色主题**:经典浅色模式,适合日间使用
2. **深色主题**:护眼深色模式,适合夜间使用
3. **蓝色主题**:清新蓝色风格,专业商务
4. **绿色主题**:自然绿色风格,舒适护眼
5. **紫色主题**:优雅紫色风格,创意设计
6. **大字主题**:大字体模式,适合阅读和视力保护
### 主题实现
- **位置**`composables/useTheme.ts`、`assets/index.css`
- **实现方式**:通过 CSS 变量和类名切换
- **持久化**:主题选择保存在 localStorage
## 响应式设计
### 移动端适配
- 使用 Tailwind CSS 响应式类
- 侧边栏在移动端显示为覆盖层
- 查询推荐按钮在移动端显示为浮动按钮
### 断点设置
- `sm`640px
- `md`768px
- `lg`1024px
- `xl`1280px
## 错误处理
### 错误边界
- **位置**`components/ui/ErrorBoundary.vue`
- **功能**:捕获组件错误,防止应用崩溃
### 错误提示
- 使用 `useToast` composable 显示错误提示
- API 错误统一处理
- 用户友好的错误消息
## 性能优化
### 代码分割
- 路由级别的代码分割
- 组件懒加载
### 数据缓存
- 查询结果缓存
- 用户信息缓存
- 主题配置缓存
## 安全考虑
### 认证
- 基于 sessionStorage 的用户认证
- API 请求自动携带认证信息
### 数据验证
- 前端表单验证
- API 响应验证
- 类型安全检查

@ -0,0 +1,147 @@
# Mock 数据使用说明文档
## 概述
本文档说明项目中 Mock 数据的使用位置和用途。Mock 数据主要用于开发和测试阶段,在生产环境中应使用真实 API。
## Mock 数据位置
### 1. 常量文件
**位置**`src/constants.ts`
包含所有 Mock 数据的定义,包括:
- `MOCK_INITIAL_CONVERSATION`:初始对话数据
- `MOCK_QUERY_RESULT_*`查询结果数据1-4
- `MOCK_SAVED_QUERIES`:已保存的查询列表
- `MOCK_NOTIFICATIONS`:通知数据
- `MOCK_USER_PROFILE`:用户资料数据
- `MOCK_FRIENDS_LIST`:好友列表数据
- `MOCK_FRIEND_REQUESTS`:好友请求数据
- `MOCK_QUERY_SHARES`:查询分享数据
- `MOCK_SUCCESS_SUGGESTIONS`:成功查询建议
- `MOCK_FAILURE_SUGGESTIONS`:失败查询建议
- `MOCK_ADMIN_NOTIFICATIONS`:管理员通知数据
- `MOCK_DATA_ADMIN_NOTIFICATIONS`:数据管理员通知数据
- `MOCK_SYSTEM_LOGS`:系统日志数据
- `MOCK_DATASOURCES`:数据源数据
- `MOCK_CONNECTION_LOGS`:连接日志数据
- `MOCK_PERMISSION_LOGS`:权限日志数据
- `MOCK_QUERY_LOAD`:查询负载数据
## Mock 数据使用位置
### 1. 查询推荐侧边栏
**文件**`components/layout/sidebars/QueryRecommendSidebar.vue`
- **使用的 Mock**`MOCK_SUCCESS_SUGGESTIONS`、`MOCK_FAILURE_SUGGESTIONS`
- **用途**:显示查询成功/失败时的建议查询
- **说明**:这些是静态的建议列表,用于提示用户可能的查询方向
### 2. 查询结果组件
**文件**`components/feature/query/QueryResult.vue`
- **使用的 Mock**`MOCK_FRIENDS_LIST`
- **用途**:分享查询时显示好友列表
- **说明**:⚠️ **需要替换为真实 API**:应使用 `friendRelationApi.getByUser()` 获取真实好友列表
### 3. 数据管理员仪表盘
**文件**`views/data-admin/DataAdminDashboardPage.vue`
- **使用的 Mock**
- `MOCK_DATASOURCES`:数据源列表
- `MOCK_CONNECTION_LOGS`:连接日志
- `MOCK_PERMISSION_LOGS`:权限日志
- `MOCK_QUERY_LOAD`:查询负载数据
- **用途**:展示数据管理员的仪表盘数据
- **说明**:⚠️ **需要替换为真实 API**:应使用对应的数据管理员 API
### 4. 系统日志页面
**文件**`views/admin/SystemLogPage.vue`
- **使用的 Mock**`MOCK_SYSTEM_LOGS`
- **用途**:展示系统操作日志
- **说明**:⚠️ **需要替换为真实 API**:应使用 `operationLogApi` 获取真实日志
### 5. 管理员仪表盘
**文件**`views/admin/DashboardPage.vue`
- **使用的 Mock**:无直接使用,但包含模拟文件导出功能
- **说明**:文件导出功能使用 Blob 模拟
## 已删除的 Mock 数据
### 1. QueryPage.vue 中的测试数据
**已删除**:三个测试用的查询结果 Mock 数据
- `mock-query-1`展示2023年各季度的订单量
- `mock-query-2`查询最近一个月销售额最高的前5个产品
- `mock-query-3`:统计每个地区的客户数量
**删除原因**:测试完成后不再需要
### 2. HistoryPage.vue 中的测试数据
**已删除**:三个测试用的查询结果 Mock 数据(同上)
**删除原因**:测试完成后不再需要
## Mock 数据配置
### 配置文件
**位置**`src/config.ts`
```typescript
export const config = {
api: {
useMock: false, // 使用真实API不使用模拟数据
},
}
```
**说明**:当前配置为 `useMock: false`,表示使用真实 API。如果设置为 `true`,则使用 Mock 数据。
## 如何替换 Mock 数据
### 步骤 1确认 API 接口
检查 `services/api/` 目录中是否有对应的 API 接口定义。
### 步骤 2替换 Mock 调用
在组件中找到使用 Mock 数据的位置,替换为真实的 API 调用。
**示例**
```typescript
// 替换前
import { MOCK_FRIENDS_LIST } from '../../../constants'
const friends = MOCK_FRIENDS_LIST
// 替换后
import { friendRelationApi } from '../../../services/api.real'
const friends = await friendRelationApi.getByUser(userId)
```
### 步骤 3处理加载状态
添加加载状态和错误处理。
### 步骤 4测试
确保替换后的功能正常工作。
## 注意事项
1. **不要在生产环境使用 Mock 数据**Mock 数据仅用于开发和测试
2. **保持 Mock 数据结构与 API 响应一致**:确保替换时数据结构匹配
3. **及时更新 Mock 数据**:如果 API 接口变更,同步更新 Mock 数据
4. **添加注释**:在使用 Mock 数据的地方添加注释,说明需要替换
## 需要替换的 Mock 数据清单
### 高优先级(影响核心功能)
1. ✅ ~~QueryPage.vue 中的测试数据~~(已删除)
2. ✅ ~~HistoryPage.vue 中的测试数据~~(已删除)
3. ⚠️ `QueryResult.vue` 中的 `MOCK_FRIENDS_LIST`(分享功能)
### 中优先级(影响管理功能)
4. ⚠️ `DataAdminDashboardPage.vue` 中的所有 Mock 数据
5. ⚠️ `SystemLogPage.vue` 中的 `MOCK_SYSTEM_LOGS`
### 低优先级(静态数据)
6. `QueryRecommendSidebar.vue` 中的建议数据(可以保留,作为静态提示)
## 相关文件
- `src/constants.ts`Mock 数据定义
- `src/config.ts`Mock 数据配置
- `src/services/api.real.ts`:真实 API 接口导出

@ -1,143 +0,0 @@
# 小组会议纪要-第4周
## 会议记录概要
**团队名称:** 4班-神奇宝码
**指导老师:** 边耐政
**主 持 人:** 程荟锦
**记录人员:** 李琪雯
**会议主题:** 需求获取-任务安排
**会议地点:** 图书馆研讨空间
**会议时间:** 2025-10-11 16:00-17:00
**纪录时间:** 2025-10-11 16:00-17:00
**参与人员:** 阿米娜、程荟锦、赵文琪、马芳琼、李瑜清、李琪雯
---
## 会议内容
### 1. 需求获取
与指导老师进行面对面沟通明确了“基于自然语言的数据库查询和展示系统”的核心需求。该系统旨在通过自然语言交互实现对多种数据库的智能查询与结果可视化其本质是一个AI智能体项目。
1**核心用户群体:** 该系统主要面向**非程序员**的企业内部人员如业务分析师、运营人员、管理人员等使他们无需掌握SQL或编程技能即可查询数据。
2**核心功能确定:**
- **自然语言查询:** 用户通过自然语言输入查询意图系统自动生成并执行SQL。
- **多轮交互优化:** 支持用户在与AI的对话中逐步细化或修正查询要求。
- **结果可视化展示:** 查询结果需以表格或图表等形式在Web页面清晰展示。
- **智能体管理与分享:** 用户可将成功的查询应用(智能体)保存并分享给其他同事使用。
3**技术难度与范围调整:** 明确了项目难度和工作量可调的特性,团队需在以下方面进行权衡与技术验证:
- **数据库支持范围:** 从仅支持MySQL到支持多种关系型如SQL Server及非关系型如MongoDB数据库难度递增。
- **查询复杂度:** 单表查询为基线,多表复杂查询是当前技术难点,需重点攻关。
- **智能体容器化:** 为实现多用户并发与资源隔离需研究Docker动态容器的创建、启停与部署。
4**外围功能扩展:** 为充实项目工作量,确定增加以下外围功能:
- **用户与权限管理:** 实现用户登录、注册,并细化权限到可访问的特定数据库。
- **查询历史与缓存:** 优化用户体验并降低大模型API调用成本。
- **社交化功能:** 如智能体分享市场、好友机制等(可选,视工作量而定)。
5**非功能性需求:**
- **成本控制:** 必须考虑大模型API调用成本并通过缓存、结果复用等技术手段进行优化。
- **安全性:** 需考虑SQL注入防范、数据权限严格控制等安全措施。
### 2. 项目分工与职责明确
1**项目主要分工方面:**
- **项目开发:** 负责系统架构设计、前后端代码编写、AI引擎集成等。
- **技术预研与验证:** 负责在开发前对核心技术难点进行可行性研究和原型验证。
- **项目测试:** 制定测试方案进行系统测试发现并跟踪BUG。
- **项目管理与文档:** 负责进度控制、会议组织、文档维护与团队协调。
2**角色与任务分配:**
- **技术负责人:** 李瑜清 | **开发人员:** 全体成员
- **测试负责人:** 阿米娜 | **测试人员:** 全体成员
- **前端开发组VUE** 程荟锦、阿米娜
- **后端开发组SpringBoot** 马芳琼、赵文琪
- **AI引擎与容器化组SQL生成、Docker** 李琪雯、李瑜清
3**具体职责安排:**
- **技术预研协调:** 李瑜清(负责分配技术验证任务并跟踪结果)
- **文档管理:** 程荟锦(负责需求、设计等文档的整理、归档与备份)
- **进度与考勤管理:** 阿米娜
- **项目开发与测试:** 全体成员共同参与
**附注:**
```
1.技术预研:为核心难点(如多表查询、容器动态管理)分配负责人进行先行验证,是项目前期重中之重。
2.沟通机制: 遇到技术阻碍必须立即在团队内沟通,允许基于验证结果调整方案。
```
4**例会时间:** 每周一晚上 19:00-20:30
- **开发地点:** 线上会议与线下实验室相结合
- **开发时间:** 个人安排与小组协商确定
### 3. 讨论确定技术选型与原型工具
1**技术栈确认:**
- **前端框架:** Vue.js
- **后端框架:** SpringBoot
- **容器技术:** Docker
- **AI服务** 待定的大模型API如GPT等
2**开发与设计工具:**
- **界面原型设计工具:** Figma
- **前端开发工具:** VSCode
- **后端开发工具:** IntelliJ IDEA
- **API测试工具** Postman
### 4. 讨论过程
需求获取阶段由指导老师参与并解答关键问题。随后组内围绕技术可行性、分工协作方式进行了深入讨论,强调了技术验证先行的核心原则。
---
## 问题总结
### 已解决问题:
1. 明确了项目的核心需求、技术边界与可调范围。
2. 确立了“技术预研先行”的项目推进策略。
3. 完成了团队的初步角色分工与职责划分。
4. 确定了主要的技术栈与开发工具。
### 待解决问题:
1. **核心技术验证:** 急需对“自然语言生成复杂SQL”和“Docker容器动态管理”两个难点进行技术可行性验证并输出验证报告。
2. **界面原型设计:** 使用Figma完成支持自然语言对话交互的主界面原型设计。
3. **知识储备:** 团队成员需快速学习Vue、SpringBoot、Docker及大模型API调用的相关知识。
4. **成本评估:** 初步评估大模型API的调用成本并设计优化方案。
---
## 小组协作情况总结
1. **协作情况:** 小组协作氛围积极,讨论热烈,对项目充满热情。成员能就技术难点和分工进行有效沟通。
## 一周纪律情况总结
1. **纪律情况:** 本次会议全员准时参加,会议期间专注度高,纪律良好。
---
## 备注
1. 项目当前首要任务是启动**技术预研**,不要直接开始大规模编码。
2. 建立项目QQ群邀请指导老师加入便于日常沟通与技术讨论。
---
## 【注】
1. 本文档为“智能查询”项目组软件过程会议记录,记录人员必须在会议后一个工作日之内如实填写,并汇报给项目经理及相关人员。
2. 文档内容已经标上编号,记录人员如有增删需要,在保证文档格式正确的前提下修改。
3. 本文档在填写完毕后按“meeting-minutes-(周号)-序号”格式命名例如“meeting-minutes-04”。

@ -1,143 +0,0 @@
# 小组会议纪要-第4周
## 会议记录概要
**团队名称:** 4班-神奇宝码
**指导老师:** 边耐政
**主 持 人:** 程荟锦
**记录人员:** 李琪雯
**会议主题:** 需求获取-任务安排
**会议地点:** 图书馆研讨空间
**会议时间:** 2025-10-11 16:00-17:00
**纪录时间:** 2025-10-11 16:00-17:00
**参与人员:** 阿米娜、程荟锦、赵文琪、马芳琼、李瑜清、李琪雯
---
## 会议内容
### 1. 需求获取
与指导老师进行面对面沟通明确了“基于自然语言的数据库查询和展示系统”的核心需求。该系统旨在通过自然语言交互实现对多种数据库的智能查询与结果可视化其本质是一个AI智能体项目。
1**核心用户群体:** 该系统主要面向**非程序员**的企业内部人员如业务分析师、运营人员、管理人员等使他们无需掌握SQL或编程技能即可查询数据。
2**核心功能确定:**
- **自然语言查询:** 用户通过自然语言输入查询意图系统自动生成并执行SQL。
- **多轮交互优化:** 支持用户在与AI的对话中逐步细化或修正查询要求。
- **结果可视化展示:** 查询结果需以表格或图表等形式在Web页面清晰展示。
- **智能体管理与分享:** 用户可将成功的查询应用(智能体)保存并分享给其他同事使用。
3**技术难度与范围调整:** 明确了项目难度和工作量可调的特性,团队需在以下方面进行权衡与技术验证:
- **数据库支持范围:** 从仅支持MySQL到支持多种关系型如SQL Server及非关系型如MongoDB数据库难度递增。
- **查询复杂度:** 单表查询为基线,多表复杂查询是当前技术难点,需重点攻关。
- **智能体容器化:** 为实现多用户并发与资源隔离需研究Docker动态容器的创建、启停与部署。
4**外围功能扩展:** 为充实项目工作量,确定增加以下外围功能:
- **用户与权限管理:** 实现用户登录、注册,并细化权限到可访问的特定数据库。
- **查询历史与缓存:** 优化用户体验并降低大模型API调用成本。
- **社交化功能:** 如智能体分享市场、好友机制等(可选,视工作量而定)。
5**非功能性需求:**
- **成本控制:** 必须考虑大模型API调用成本并通过缓存、结果复用等技术手段进行优化。
- **安全性:** 需考虑SQL注入防范、数据权限严格控制等安全措施。
### 2. 项目分工与职责明确
1**项目主要分工方面:**
- **项目开发:** 负责系统架构设计、前后端代码编写、AI引擎集成等。
- **技术预研与验证:** 负责在开发前对核心技术难点进行可行性研究和原型验证。
- **项目测试:** 制定测试方案进行系统测试发现并跟踪BUG。
- **项目管理与文档:** 负责进度控制、会议组织、文档维护与团队协调。
2**角色与任务分配:**
- **技术负责人:** 李瑜清 | **开发人员:** 全体成员
- **测试负责人:** 阿米娜 | **测试人员:** 全体成员
- **前端开发组VUE** 赵文琪、阿米娜
- **后端开发组SpringBoot** 马芳琼、程荟锦
- **AI引擎与容器化组SQL生成、Docker** 李琪雯、李瑜清
3**具体职责安排:**
- **技术预研协调:** 李瑜清(负责分配技术验证任务并跟踪结果)
- **文档管理:** 程荟锦(负责需求、设计等文档的整理、归档与备份)
- **进度与考勤管理:** 阿米娜
- **项目开发与测试:** 全体成员共同参与
**附注:**
```
1.技术预研:为核心难点(如多表查询、容器动态管理)分配负责人进行先行验证,是项目前期重中之重。
2.沟通机制: 遇到技术阻碍必须立即在团队内沟通,允许基于验证结果调整方案。
```
4**例会时间:** 每周一晚上 19:00-20:30
- **开发地点:** 线上会议与线下实验室相结合
- **开发时间:** 个人安排与小组协商确定
### 3. 讨论确定技术选型与原型工具
1**技术栈确认:**
- **前端框架:** Vue.js
- **后端框架:** SpringBoot
- **容器技术:** Docker
- **AI服务** 待定的大模型API如GPT等
2**开发与设计工具:**
- **界面原型设计工具:** Figma
- **前端开发工具:** VSCode
- **后端开发工具:** IntelliJ IDEA
- **API测试工具** Postman
### 4. 讨论过程
需求获取阶段由指导老师参与并解答关键问题。随后组内围绕技术可行性、分工协作方式进行了深入讨论,强调了技术验证先行的核心原则。
---
## 问题总结
### 已解决问题:
1. 明确了项目的核心需求、技术边界与可调范围。
2. 确立了“技术预研先行”的项目推进策略。
3. 完成了团队的初步角色分工与职责划分。
4. 确定了主要的技术栈与开发工具。
### 待解决问题:
1. **核心技术验证:** 急需对“自然语言生成复杂SQL”和“Docker容器动态管理”两个难点进行技术可行性验证并输出验证报告。
2. **界面原型设计:** 使用Figma完成支持自然语言对话交互的主界面原型设计。
3. **知识储备:** 团队成员需快速学习Vue、SpringBoot、Docker及大模型API调用的相关知识。
4. **成本评估:** 初步评估大模型API的调用成本并设计优化方案。
---
## 小组协作情况总结
1. **协作情况:** 小组协作氛围积极,讨论热烈,对项目充满热情。成员能就技术难点和分工进行有效沟通。
## 一周纪律情况总结
1. **纪律情况:** 本次会议全员准时参加,会议期间专注度高,纪律良好。
---
## 备注
1. 项目当前首要任务是启动**技术预研**,不要直接开始大规模编码。
2. 建立项目QQ群邀请指导老师加入便于日常沟通与技术讨论。
---
## 【注】
1. 本文档为“智能查询”项目组软件过程会议记录,记录人员必须在会议后一个工作日之内如实填写,并汇报给项目经理及相关人员。
2. 文档内容已经标上编号,记录人员如有增删需要,在保证文档格式正确的前提下修改。
3. 本文档在填写完毕后按“meeting-minutes-(周号)-序号”格式命名例如“meeting-minutes-04”。

@ -1,41 +0,0 @@
# 小组周计划-第4周
## 团队名称和起止时间
**团队名称:** 4班-神奇宝码
**开始时间:** 2025-10-13
**结束时间:** 2025-10-19
## 本周任务计划安排
| 序号 | 计划内容 | 执行人 | 情况说明 |
| :--- | :--- | :--- | :--- |
| 1 | 需求分析与用例建模 | 全体成员 | 2025-10-16前说明对项目需求进行结构化梳理明确系统边界和用户交互场景。步骤 共同会议识别“管理员”与“授权用户”两类角色并为每类角色列出3-5个核心用例用户授权、提交查询、调整查询。|
| 2 | 系统核心数据流定义 | 后端组主导 | 2025-10-16前说明厘清系统如何响应一次用户查询请求明确各模块间的数据传递关系。步骤绘制一张系统数据流程图描述从“用户输入自然语言”到“图表显示”的完整过程标注出关键处理节点大模型解析、SQL引擎执行。|
| 3 | 原型设计(界面层)| 前端组主导 | 2025-10-18前说明设计关键用户界面聚焦功能布局而非视觉细节。步骤使用Draw.io等工具绘制管理员后台与用户查询页的线框图标注主要UI元素。|
| 4 | 系统架构草图设计 | 后端组主导 | 2025-10-18前说明 根据数据流和技术调研,勾勒出系统的初步技术架构。步骤: 绘制一张系统架构草图明确前端、后端应用、大模型服务、数据库、Docker容器等组件之间的关系。|
| 5 | 项目基础搭建 | 全体成员 | 2025-10-19前说明统一并初始化团队开发环境为编码阶段做准备。步骤1. 创建GitHub团队仓库规划目录结构。 2. 确认并安装统一的开发工具Python, Docker, IDE等。 |
---
## 小结
旨在完成项目从需求到技术方案的初步架构设计阶段。通过明确的需求分析、数据流定义与系统架构设计,为后续开发工作奠定坚实基础。
**本阶段希望获得的帮助与支持如下:**
1. **技术方案指导:**大模型API的选型与集成方案希望了解如何以较低成本、较高稳定性接入适合本项目自然语言转SQL的模型。
2. **原型设计评审:** 在原型设计初稿完成后,希望有机会进行早期评审,以确保用户交互流程与业务需求匹配,避免方向性偏差。
我们将在本周按计划推进各项工作,并及时沟通遇到的问题,确保项目顺利启动。
---
## 【注】
1. 在小结一栏中写出希望得到如何的帮助,如讲座等;
2. 请将个人计划和总结提前发给负责人;
3. 周任务总结与计划是项目小组评分考核的重要依据,将直接记入平时成绩,请各位同学按要求认真填写并按时提交;
4. PM综合本小组成员工作情况提交小组周计划、周总结报告按时上传至代码托管平台。

@ -1,40 +0,0 @@
# 个人周计划-第4周
## 姓名和起止时间
**姓  名:** 阿米娜·赛力克
**团队名称:** 4班-神奇宝码队
**开始时间:** 2025-10-13
**结束时间:** 2025-10-19
## 本周任务计划安排
| 序号 | 计划内容 | 协作人 | 情况说明 |
|------|-----------|--------|----------|
| 1 | 需求分析与用例评审 | 全体组员 | 2025-10-16前参与团队需求讨论会议从用户体验UX和界面实现角度对“管理员后台”与“用户查询界面”的用例提出建议 |
| 2 | 原型设计 | 前端组成员 | 2025-10-18前基于需求分析结果使用墨刀完成管理员后台与用户查询页面的线框图设计明确页面布局和交互逻辑 |
| 3 | 项目环境搭建 | 全体组员 | 2025-10-19前配合团队完成开发环境统一配置包括GitHub仓库使用、代码规范制定等基础工作 |
| 4 | 前端技术学习 | 个人 | 周内持续学习ECharts图表库使用方法完成基础图表示例代码编写为后续数据可视化开发做准备 |
| 5 | 原型评审与优化 | 全体组员 | 2025-10-19前组织原型设计内部评审根据反馈意见对原型进行修改完善确保符合需求 |
## 小结
# 小结
1. **学习需求**
希望开展原型设计相关教学,提升界面设计与交互规划能力。
2. **知识储备**
提前学习前端开发所需技术,为后续实际开发做好充分准备。
3. **文档撰写**
结合课程内容,学习并实践需求文档的规范撰写方法。
---
## 【注】
1. 在小结一栏中写出希望得到如何的帮助,如讲座等;
1. 请将个人计划和总结提前发给负责人;
1. 周任务总结与计划是项目小组评分考核的重要依据,将直接记入平时成绩,请各位同学按要求认真填写并按时提交;
1. 所有组员都需提交个人周计划、周总结文档,按时上传至代码托管平台;

@ -1,34 +0,0 @@
# 个人周计划-第4周
## 姓名和起止时间
**姓  名:** 程荟锦
**团队名称:** 4班-神奇宝码队
**开始时间:** 2025-10-13
**结束时间:** 2025-10-19
## 本周任务计划安排
| 序号 | 计划内容| 协作人 | 情况说明 |
| ----| ------ | ------| ------- |
| 1 | 参与需求分析与用例评审 | 全体组员 | 2025-10-16前参与团队需求讨论会议从用户体验UX和界面实现角度对“管理员后台”与“用户查询界面”的用例提出建议。 |
| 2 | 参与原型设计 | 前端组成员 | 2025-10-18前基于需求分析结果使用墨刀完成管理员后台与用户查询页面的线框图设计明确页面布局和交互逻辑 |
| 3 | 参与项目环境搭建 | 全体组员 | 2025-10-19前配合团队完成开发环境统一配置包括GitHub仓库使用、代码规范制定等基础工作|
| 4 | 前端技术学习与实践 | 个人 | 周内持续学习ECharts图表库的使用方法完成基础图表示例代码编写为后续数据可视化开发做准备 |
| 5 | 原型设计评审与优化 | 全体组员 | 2025-10-19前组织原型设计内部评审根据反馈意见对原型进行修改完善确保符合需求 |
## 小结
1. **学习需求:** 交互设计和组件复用的相关内容;
2. **知识储备:** 本周重点学习前端与后端的接口对接方式理解AJAX请求和数据格式规范为后续开发做准备
3. **文档撰写:** 结合课内知识学习需求文档的撰写。
---
## 【注】
1. 在小结一栏中写出希望得到如何的帮助,如讲座等;
1. 请将个人计划和总结提前发给负责人;
1. 周任务总结与计划是项目小组评分考核的重要依据,将直接记入平时成绩,请各位同学按要求认真填写并按时提交;
1. 所有组员都需提交个人周计划、周总结文档,按时上传至代码托管平台;

@ -1,37 +0,0 @@
# 个人周计划-第4周
## 姓名和起止时间
**姓  名:** 李琪雯
**团队名称:** 4班-神奇宝码
**开始时间:** 2025-10-13
**结束时间:** 2025-10-19
---
## 本周任务计划安排
| 序号 | 计划内容 | 协作人 | 情况说明 |
| :--- | :--- | :--- | :--- |
| 1 | **技术栈学习与知识储备** | 个人 | 周内持续学习分配的技术栈研究大模型SQL生成API及Docker基础。 |
| 2 | **核心难点技术预研** | 李瑜清 | 李瑜清负责验证大模型对多表复杂查询的生成能力李琪雯负责验证Docker容器的动态创建与启停方案。此为本周重中之重。 |
| 3 | **确定项目分工与规范** | 组员 | 2025-10-13通过会议最终确认各成员角色、职责及接口规范。统一开发语言和开发工具。 |
| 4 | **设计项目界面原型** | 组员 | 寻找并确定合适工具,基于“自然语言对话”的核心交互模式,设计出系统主要页面的高保真交互原型,用于团队确认和后续开发。 |
## 小结
1. **技术风险:** 项目高度依赖“自然语言转SQL”的准确性希望得到关于**大模型API选型与Prompt工程优化**方面的指导或资源分享。
2. **知识储备:** 团队成员需快速上手各自负责的技术栈特别是Docker的远程API调用和Vue与SpringBoot的联调流程。
3. **文档撰写:** 在技术预研的同时,并行启动**需求规格说明书**的撰写工作,将讨论确定的功能点规范化。
---
## 【注】
1. 在小结一栏中写出希望得到如何的帮助,如讲座等;
2. 请将个人计划和总结提前发给负责人;
3. 周任务总结与计划是项目小组评分考核的重要依据,将直接记入平时成绩,请各位同学按要求认真填写并按时提交;
4. 所有组员都需提交个人周计划、周总结文档,按时上传至代码托管平台;

@ -1,35 +0,0 @@
# 个人周计划-第4周
## 姓名和起止时间
**姓  名:** 李瑜清
**团队名称:** 4班-神奇宝码
**开始时间:** 2025-10-13
**结束时间:** 2025-10-19
## 本周任务计划安排
| 序号 | 计划内容 | 协作人 | 情况说明 |
| :--- | :---------------------------------------------------- | :------------ | :----------------------------------------------------------- |
| 1 | **【核心技术学习】大模型API调用与Prompt Engineering** | 个人 / 李琪雯 | **目标:** 掌握至少一个大模型API的基本调用方法并理解Prompt Engineering的核心思想。<br>**步骤:** <br>1. 注册智谱/Google AI Studio并获取Gemini/GLM API Key。<br>2. 阅读Gemini官方API文档Java SDK或REST API<br>3. 编写一个简单的Java程序或使用Postman成功调用Gemini API发送一个简单的文本请求并获取响应。<br>4. 学习Prompt Engineering基础知识理解System Role、User Role、Few-shot Learning等概念。 |
| 2 | **【核心技术学习】Docker基础与Java容器管理** | 个人 / 李琪雯 | **目标:** 理解Docker核心概念并初步掌握Java程序与Docker Daemon交互的方法。<br>**步骤:** <br>1. 安装Docker Desktop。<br>2. 学习Docker基本命令`docker run`, `docker ps`, `docker build`, `docker stop`, `docker rm`)。<br>3. 调研并学习`docker-java`等Java库了解其基本用法。<br>4. 尝试用Java代码连接本地Docker Daemon并执行一个简单的命令。 |
| 3 | **【技术验证PoC-1】大模型API初步测试SQL生成** | 李琪雯 | **目标:** 基于学习成果初步测试大模型生成SQL的能力。<br>**步骤:** <br>1. 准备一个简单的数据库Schema例如包含`students`和`courses`两张表)。<br>2. 设计至少3个不同复杂度的自然语言问题单表查询、简单Join、聚合查询<br>3. 使用Gemini API结合Prompt Engineering技巧尝试生成对应的SQL语句。<br>4. 记录每次测试的Prompt、模型响应和SQL准确性。 |
| 4 | **参与团队基础工作与环境搭建** | 全体成员 | 参与团队用例建模讨论明确AI引擎与容器化模块的交互场景。同时在本地配置好Docker环境和IntelliJ IDEA确保开发环境统一。 |
| 5 | **与李琪雯协作,讨论并规划后续技术验证细节** | 李琪雯 | 基于本周的学习和初步测试结果与李琪雯共同讨论下周更深入的技术验证计划如多模型对比、复杂SQL测试集构建等。 |
## 小结
1. **学习需求:** 希望能获得关于大模型API在“Text-to-SQL”场景下的最佳实践指导例如如何构建高效的Prompt来处理复杂查询以及如何有效利用Gemini的超大上下文窗口。
2. **知识储备:** 本周将专注于大模型API调用和Docker基础知识的学习与初步实践为后续更深入的技术验证和系统开发打下坚实基础。
3. **文档撰写:** 本周主要产出是学习笔记和初步的技术测试记录为后续的《大模型API选型对比报告》和《Docker动态管理技术验证报告》积累素材。
---
## 【注】
1. 在小结一栏中写出希望得到如何的帮助,如讲座等;
2. 请将个人计划和总结提前发给负责人;
3. 周任务总结与计划是项目小组评分考核的重要依据,将直接记入平时成绩,请各位同学按要求认真填写并按时提交;
4. 所有组员都需提交个人周计划、周总结文档,按时上传至代码托管平台;

@ -1,35 +0,0 @@
# 个人周计划-第4周
## 姓名和起止时间
**姓  名:** 马芳琼
**团队名称:** 4班-神奇宝码
**开始时间:** 2025-10-13
**结束时间:** 2025-10-19
## 本周任务计划安排
| 序号 | 计划内容| 协作人 | 情况说明 |
| ----| ------ | ------| ------- |
| 1 | 项目需求同步与后端职责确认 | 全体组员 | 2025-10-13 参加项目启动会,同步老师 “支持 MySQL、SQL Server” 的需求;与 AI & 容器组沟通 “容器 - 数据库连接” 接口需求 |
| 2 | 多数据库连接方案dynamic-datasource 等)调研 | 个人 | 收集多数据源框架文档,测试 dynamic-datasource 适配 MySQL、SQL Server 的可行性,输出调研笔记 |
| 3 | 设计项目核心数据库表结构 | 赵文琪 | 与赵文琪确认 “用户 - 角色 - 权限” 关联逻辑,设计用户表、权限关联表、智能体表,绘制初步实体关系图 |
| 4 | 绘制项目数据库 ER 图并验证合理性 | 个人 | 用 Navicat 绘制完整 ER 图,标注字段类型、主键 / 外键,验证 “表级权限控制” 是否可通过现有表实现 |
| 5 | 编写《多数据库连接方案调研报告》 | 个人 | 对比各方案优缺点,明确选用 dynamic-datasource 的理由,补充使用注意事项 |
| 6 | 后端内部复盘与协作确认 | 赵文琪 | 与赵文琪同步数据库表结构、多数据源方案,确认下周多数据库连接代码开发的协作点 |
## 小结
1. **学习需求:** 希望能有 dynamic-datasource 框架动态切换 MySQL、SQL Server 数据源的实战案例,解决可能的驱动冲突问题;
2. **知识储备:** 周内持续学习 MyBatis-Plus 多表关联查询、数据库索引设计,为下周开发 “用户权限查询”“智能体关联数据查询” 接口做准备;
3. **文档撰写:** 完成《多数据库连接方案调研报告》《数据库 ER 图说明文档》,确保表结构设计能支撑后续权限管理、智能体功能开发。
---
## 【注】
1. 在小结一栏中写出希望得到如何的帮助,如讲座等;
1. 请将个人计划和总结提前发给负责人;
1. 周任务总结与计划是项目小组评分考核的重要依据,将直接记入平时成绩,请各位同学按要求认真填写并按时提交;
1. 所有组员都需提交个人周计划、周总结文档,按时上传至代码托管平台;

@ -1,37 +0,0 @@
# 个人周计划-第4周
## 姓名和起止时间
**姓  名:** 赵文琪
**团队名称:** 4班-神奇码宝
**开始时间:** 2025-10-13
**结束时间:** 2025-10-19
## 本周任务计划安排
| 序号 | 计划内容| 协作人 | 情况说明 |
| ----| ------ | ------| ------- |
| 1 | 参与需求分析与用例评审 | 全体组员 | 2025-10-16前参与团队需求讨论会议从用户体验UX和界面实现角度对“管理员后台”与“用户查询界面”的用例提出建议。 |
| 2 | 参与项目环境搭建 | 全体组员 | 2025-10-19前配合团队完成开发环境统一配置包括GitHub仓库使用、代码规范制定等基础工作|
| 3 | 原型设计评审与优化 | 全体组员 | 2025-10-19前组织原型设计内部评审根据反馈意见对原型进行修改完善确保符合需求 |
| 4 | 权限框架Spring Security/Shiro调研 | 个人 | 收集官方文档及表级权限案例,对比两框架实现难度、学习成本,输出初步调研笔记 |
| 5 | 确定后端权限框架选型 | 后端组员 | 与后端 B 同步调研结果,从 “表级权限适配性、SpringBoot 兼容性” 确定最终框架(优先 Spring Security |
| 6 | 搭建 SpringBoot 基础工程(集成权限框架) | 个人 | 集成选定权限框架、HikariCP 连接池,实现登录接口(/api/auth/login确保工程可运行 |
| 7 | 编写《SpringBoot 开发环境搭建文档》 | 个人 | 整理 JDK/Maven 安装步骤、工程导入 IDEA 流程、常见问题解决,同步给后端 B 验证文档可用性 |
| 8 | 后端内部复盘与任务同步 | 后端组员 | 与后端 B 确认本周成果,同步下周权限模块开发计划,反馈遇到的技术问题 |
## 小结
1. **学习需求:** 希望能有 Spring Security 自定义表级权限拦截器的实战指导,解决 “用户 - 数据库 - 表” 三级权限关联的技术难点;
2. **知识储备:** 周内持续学习 JWT 令牌生成与验证、Spring Security 接口权限控制逻辑,为下周开发权限管理接口做准备;
3. **文档撰写:** 完成《权限框架选型对比表》《SpringBoot 开发环境搭建文档》,确保文档内容清晰,能支撑团队后续开发。
---
## 【注】
1. 在小结一栏中写出希望得到如何的帮助,如讲座等;
1. 请将个人计划和总结提前发给负责人;
1. 周任务总结与计划是项目小组评分考核的重要依据,将直接记入平时成绩,请各位同学按要求认真填写并按时提交;
1. 所有组员都需提交个人周计划、周总结文档,按时上传至代码托管平台;

@ -0,0 +1,188 @@
# 前端项目结构说明文档
## 目录结构
```
frontend/src/
├── App.vue # 应用根组件,负责路由和全局状态管理
├── main.ts # 应用入口文件
├── config.ts # 应用配置文件
├── constants.ts # 常量定义包括Mock数据
├── assets/ # 静态资源
│ └── index.css # 全局样式和主题定义
├── components/ # 组件目录
│ ├── admin/ # 管理员相关组件
│ │ ├── AdminModal.vue # 管理员模态框
│ │ └── StatCard.vue # 统计卡片组件
│ │
│ ├── common/ # 通用组件
│ │ ├── BaseSidebar.vue # 基础侧边栏组件
│ │ ├── FilterBar.vue # 筛选栏组件
│ │ ├── FilterSelect.vue # 筛选选择器组件
│ │ ├── SidebarCategory.vue # 侧边栏分类组件
│ │ └── SidebarItem.vue # 侧边栏项组件
│ │
│ ├── data-admin/ # 数据管理员相关组件
│ │ └── PermissionModalContent.vue # 权限模态框内容
│ │
│ ├── feature/ # 功能组件
│ │ ├── chat/ # 聊天相关组件
│ │ │ ├── ChatMessage.vue # 聊天消息组件
│ │ │ └── ChatModal.vue # 聊天模态框组件
│ │ ├── query/ # 查询相关组件
│ │ │ ├── ChartComparison.vue # 图表对比组件
│ │ │ ├── ComparisonModal.vue # 对比模态框组件
│ │ │ ├── QueryResult.vue # 查询结果展示组件
│ │ │ └── TableComparison.vue # 表格对比组件
│ │ └── ForgotPasswordModal.vue # 忘记密码模态框
│ │
│ ├── layout/ # 布局组件
│ │ ├── MainLayout.vue # 主布局组件
│ │ ├── RecommendationLayout.vue # 推荐布局组件(已废弃)
│ │ ├── TopHeader.vue # 顶部导航栏组件
│ │ └── sidebars/ # 侧边栏组件
│ │ ├── DataAdminSidebar.vue # 数据管理员侧边栏
│ │ ├── LoginSidebar.vue # 登录页侧边栏
│ │ ├── QueryHistorySidebar.vue # 查询历史侧边栏
│ │ ├── QueryRecommendSidebar.vue # 查询推荐侧边栏
│ │ ├── SettingsSidebar.vue # 设置侧边栏
│ │ ├── SysAdminSidebar.vue # 系统管理员侧边栏
│ │ └── UserSidebar.vue # 用户侧边栏
│ │
│ └── ui/ # UI基础组件
│ ├── Dropdown.vue # 下拉菜单组件
│ ├── ErrorBoundary.vue # 错误边界组件
│ ├── FilterDropdown.vue # 筛选下拉组件
│ ├── Modal.vue # 模态框组件
│ ├── TabButton.vue # 标签按钮组件
│ └── ToastContainer.vue # 提示容器组件
├── composables/ # 组合式函数Composables
│ ├── useErrorHandler.ts # 错误处理组合函数
│ ├── useQueryCollection.ts # 查询收藏组合函数
│ ├── useQueryShare.ts # 查询分享组合函数
│ ├── useTheme.ts # 主题管理组合函数
│ └── useToast.ts # 提示消息组合函数
├── services/ # 服务层
│ ├── api/ # API接口定义
│ │ ├── auth.ts # 认证相关API
│ │ ├── db.ts # 数据库相关API
│ │ ├── dialog.ts # 对话相关API
│ │ ├── friend.ts # 好友相关API
│ │ ├── llm.ts # 大模型相关API
│ │ ├── log.ts # 日志相关API
│ │ ├── notification.ts # 通知相关API
│ │ ├── permission.ts # 权限相关API
│ │ ├── query.ts # 查询相关API
│ │ ├── request.ts # 请求工具函数
│ │ └── user.ts # 用户相关API
│ ├── api.real.ts # API接口导出统一导出
│ └── queryShareService.ts # 查询分享服务(统一服务)
├── types/ # 类型定义
│ ├── chat.ts # 聊天相关类型
│ ├── friends-page.ts # 好友页面类型
│ └── index.ts # 全局类型定义
├── utils/ # 工具函数
│ └── logger.ts # 日志工具
└── views/ # 页面组件
├── AccountPage.vue # 账户管理页面
├── CollectionsPage.vue # 收藏夹页面
├── FriendsPage.vue # 好友管理页面
├── HistoryPage.vue # 历史记录页面
├── LoginPage.vue # 登录页面
├── NotificationsPage.vue # 通知中心页面
├── PlaceholderPage.vue # 占位页面
├── QueryPage.vue # 查询页面
├── SettingsPage.vue # 设置页面
├── UserPage.vue # 用户页面
├── admin/ # 系统管理员页面
│ ├── AdminAccountPage.vue # 管理员账户页面
│ ├── DashboardPage.vue # 管理员仪表盘
│ ├── LLMConfigPage.vue # 大模型配置页面
│ ├── NotificationManagementPage.vue # 通知管理页面
│ ├── SysAdminPage.vue # 系统管理员主页面
│ ├── SystemLogPage.vue # 系统日志页面
│ └── UserManagementPage.vue # 用户管理页面
└── data-admin/ # 数据管理员页面
├── ConnectionLogPage.vue # 连接日志页面
├── DataAdminDashboardPage.vue # 数据管理员仪表盘
├── DataAdminNotificationPage.vue # 数据管理员通知页面
├── DataSourceManagementPage.vue # 数据源管理页面
└── UserPermissionPage.vue # 用户权限页面
```
## 架构设计原则
### 1. 组件分层
- **页面组件Views**:位于 `views/` 目录,负责页面级逻辑和布局
- **功能组件Feature**:位于 `components/feature/` 目录,实现具体业务功能
- **布局组件Layout**:位于 `components/layout/` 目录,负责页面布局结构
- **UI组件UI**:位于 `components/ui/` 目录提供基础UI组件
### 2. 状态管理
- 使用 Vue 3 Composition API 进行状态管理
- 页面级状态在页面组件内部管理
- 全局状态通过 `App.vue` 管理
- 可复用的状态逻辑封装为 Composables
### 3. API 调用
- 所有 API 接口定义在 `services/api/` 目录
- 通过 `services/api.real.ts` 统一导出
- 业务服务封装在 `services/` 目录(如 `queryShareService.ts`
### 4. 类型定义
- 全局类型定义在 `types/index.ts`
- 特定功能类型定义在对应的 `types/` 子文件中
- 使用 TypeScript 严格模式
### 5. 样式管理
- 全局样式和主题定义在 `assets/index.css`
- 使用 Tailwind CSS 进行样式编写
- 主题通过 CSS 变量和类名切换
## 代码规范
### 文件命名
- 组件文件使用 PascalCase`QueryPage.vue`
- 工具文件使用 camelCase`queryShareService.ts`
- 类型文件使用 camelCase`index.ts`
### 组件结构
按照 Google Vue 编码规范,组件应包含:
1. 文件头部注释(说明组件功能、作者等)
2. `<template>` 部分
3. `<script setup lang="ts">` 部分
4. `<style scoped>` 部分(如果需要)
### 导入顺序
1. Vue 相关导入
2. 第三方库导入
3. 组件导入
4. 类型导入
5. 工具函数导入
6. API 导入
7. 常量导入
## 已删除的冗余代码
1. **QueryPage.vue**:删除了重复的头部注释
2. **QueryPage.vue**:删除了测试用的三个 mock 数据
3. **HistoryPage.vue**:删除了测试用的三个 mock 数据
4. **RecommendationLayout.vue**:已废弃,功能已移至 `QueryRecommendSidebar.vue`
## 注意事项
1. 所有组件都应包含文件头部注释
2. 使用 TypeScript 严格模式
3. 遵循 Vue 3 Composition API 最佳实践
4. 保持组件单一职责原则
5. 避免在组件中直接调用 API应通过服务层

Binary file not shown.

@ -1,2 +0,0 @@
# Baoma

@ -0,0 +1,2 @@
/mvnw text eol=lf
*.cmd text eol=crlf

@ -0,0 +1,33 @@
HELP.md
target/
.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

@ -0,0 +1,14 @@
-- 为 query_logs 表添加 user_prompt 字段
-- 执行此脚本前请备份数据库
-- 添加 user_prompt 字段
ALTER TABLE `query_logs`
ADD COLUMN `user_prompt` TEXT COMMENT '用户原始提问(自然语言)' AFTER `user_id`;
-- 验证字段是否添加成功
-- SELECT COLUMN_NAME, DATA_TYPE, COLUMN_COMMENT
-- FROM INFORMATION_SCHEMA.COLUMNS
-- WHERE TABLE_SCHEMA = DATABASE()
-- AND TABLE_NAME = 'query_logs'
-- AND COLUMN_NAME = 'user_prompt';

@ -0,0 +1,944 @@
### 测试 Hello
GET http://localhost:8080/test/hello
### 测试所有数据库
GET http://localhost:8080/test/all
### ==================== 新增表接口测试 ====================
### 好友关系 - 查询用户好友列表
GET http://localhost:8080/friend-relation/list/1
### 好友关系 - 添加好友
POST http://localhost:8080/friend-relation
Content-Type: application/json
{
"userId": 1,
"friendId": 2,
"friendUsername": "user2",
"remarkName": "小明"
}
### 好友请求 - 查询待处理请求
GET http://localhost:8080/friend-request/list/1/0
### 好友请求 - 发送好友请求
POST http://localhost:8080/friend-request
Content-Type: application/json
{
"applicantId": 1,
"recipientId": 2,
"applyMsg": "我是张三,加个好友"
}
### 好友请求 - 处理请求(同意)
PUT http://localhost:8080/friend-request
Content-Type: application/json
{
"id": 1,
"status": 1
}
### 查询分享 - 查询接收的分享
GET http://localhost:8080/query-share/list/receive/1
### 查询分享 - 分享查询
POST http://localhost:8080/query-share
Content-Type: application/json
{
"shareUserId": 1,
"receiveUserId": 2,
"dialogId": "conv_12345",
"targetRounds": "[1,2,3]",
"queryTitle": "销售数据分析"
}
### Token消耗 - 查询所有记录
GET http://localhost:8080/token-consume/list
### Token消耗 - 查询指定日期
GET http://localhost:8080/token-consume/gemini-2.5-pro/2025-12-01
### Token消耗 - 添加记录
POST http://localhost:8080/token-consume
Content-Type: application/json
{
"llmName": "gemini-2.5-pro",
"totalTokens": 1500,
"promptTokens": 1000,
"completionTokens": 500,
"consumeDate": "2025-12-01"
}
### 性能指标 - 查询所有
GET http://localhost:8080/performance-metric/list
### 性能指标 - 按类型查询
GET http://localhost:8080/performance-metric/list/query_count
### 性能指标 - 添加记录
POST http://localhost:8080/performance-metric
Content-Type: application/json
{
"metricType": "query_count",
"metricValue": 150,
"metricTime": "2025-12-01T10:00:00"
}
### 连接日志 - 查询所有
GET http://localhost:8080/db-connection-log/list
### 连接日志 - 按连接ID查询
GET http://localhost:8080/db-connection-log/list/connection/1
### 连接日志 - 添加日志
POST http://localhost:8080/db-connection-log
Content-Type: application/json
{
"dbConnectionId": 1,
"dbName": "订单主库",
"status": "success",
"handlerId": 1
}
### 用户搜索 - 查询用户搜索历史
GET http://localhost:8080/user-search/list/1
### 用户搜索 - 查询常用搜索Top 5
GET http://localhost:8080/user-search/list/top/1/5
### 用户搜索 - 记录搜索
POST http://localhost:8080/user-search
Content-Type: application/json
{
"userId": 1,
"sqlContent": "SELECT * FROM users WHERE status = 1",
"queryTitle": "查询活跃用户"
}
### 收藏组 - 查询用户收藏组
GET http://localhost:8080/query-collection/list/1
### 收藏组 - 创建收藏组
POST http://localhost:8080/query-collection
Content-Type: application/json
{
"userId": 1,
"groupName": "销售报表查询"
}
### 收藏记录 - 按组查询
GET http://localhost:8080/collection-record/list/query/674c8e9f1234567890abcdef
### 收藏记录 - 添加收藏
POST http://localhost:8080/collection-record
Content-Type: application/json
{
"queryId": "674c8e9f1234567890abcdef",
"userId": 1,
"sqlContent": "SELECT * FROM orders WHERE date > '2025-01-01'",
"dbConnectionId": 1,
"llmConfigId": 1
}
### 对话详情 - 查询对话内容
GET http://localhost:8080/dialog-detail/conv_12345
### 对话详情 - 保存对话
POST http://localhost:8080/dialog-detail
Content-Type: application/json
{
"dialogId": "conv_12345",
"rounds": [
{
"roundNum": 1,
"userInput": "查询所有用户",
"aiResponse": "已生成SQL查询",
"generatedSql": "SELECT * FROM users"
}
]
}
### SQL缓存 - 查询用户缓存
GET http://localhost:8080/sql-cache/list/1
### SQL缓存 - 添加缓存
POST http://localhost:8080/sql-cache
Content-Type: application/json
{
"nlHash": "abc123def456",
"userId": 1,
"connectionId": 1,
"tableIds": [1, 2],
"dbType": "mysql",
"generatedSql": "SELECT * FROM users",
"hitCount": 0,
"expireTime": "2025-12-08T00:00:00"
}
### AI交互日志 - 按用户查询
GET http://localhost:8080/ai-interaction-log/list/user/1
### AI交互日志 - 按模型查询
GET http://localhost:8080/ai-interaction-log/list/llm/gemini-2.5-pro
### AI交互日志 - 添加日志
POST http://localhost:8080/ai-interaction-log
Content-Type: application/json
{
"userId": 1,
"requestType": "nl2sql",
"llmName": "gemini-2.5-pro",
"requestParams": {
"naturalLanguage": "查询所有用户"
},
"tokenUsage": {
"promptTokens": 100,
"completionTokens": 50,
"totalTokens": 150
},
"responseTime": 1200,
"status": "success"
}
### 好友聊天 - 查询聊天记录
GET http://localhost:8080/friend-chat/list/1/2
### 好友聊天 - 查询未读消息
GET http://localhost:8080/friend-chat/unread/1
### 好友聊天 - 发送消息
POST http://localhost:8080/friend-chat
Content-Type: application/json
{
"userId": 1,
"friendId": 2,
"contentType": "text",
"content": {
"text": "你好,最近怎么样?"
}
}
### ==================== 认证接口 ====================
### 登录
POST http://localhost:8080/auth/login
Content-Type: application/json
{
"username": "admin",
"password": "123456"
}
### ==================== 查询执行接口 ====================
### 执行查询(新对话)
POST http://localhost:8080/query/execute
Content-Type: application/json
userId: 1
{
"userPrompt": "查询所有用户信息",
"model": "gemini-2.5-pro",
"database": "销售数据库"
}
### 执行查询(继续对话)
POST http://localhost:8080/query/execute
Content-Type: application/json
userId: 1
{
"userPrompt": "按订单量排序",
"model": "gemini-2.5-pro",
"database": "销售数据库",
"conversationId": "conv_12345678"
}
### ==================== 对话历史接口 ====================
### 获取用户对话列表
GET http://localhost:8080/dialog/list
userId: 1
### 获取对话详情
GET http://localhost:8080/dialog/conv_12345678
### ==================== 用户管理接口 ====================
### 查询所有用户
GET http://localhost:8080/user/list
### 添加用户
POST http://localhost:8080/user
Content-Type: application/json
{
"username": "admin",
"password": "123456",
"email": "admin@example.com",
"phonenumber": "13800138000",
"roleId": 1,
"status": 1
}
### 分页查询
GET http://localhost:8080/user/page?current=1&size=10
### 根据ID查询
GET http://localhost:8080/user/3
### 更新用户
PUT http://localhost:8080/user
Content-Type: application/json
{
"id": 3,
"username": "admin",
"email": "newemail@example.com",
"status": 1
}
### 删除用户
DELETE http://localhost:8080/user/3
### 根据用户名查询
GET http://localhost:8080/user/username/admin
### 根据手机号搜索用户
GET http://localhost:8080/user/search/phone?phoneNumber=13800138000
### 修改密码
POST http://localhost:8080/user/change-password
Content-Type: application/json
{
"userId": 1,
"oldPassword": "123456",
"newPassword": "newpassword123"
}
### ==================== 好友管理接口 ====================
### 查询用户的好友列表
GET http://localhost:8080/friend-relation/list/1
### 查询特定好友关系
GET http://localhost:8080/friend-relation/1/2
### 添加好友关系(通常由系统自动创建)
POST http://localhost:8080/friend-relation
Content-Type: application/json
{
"userId": 1,
"friendId": 2,
"friendUsername": "user2",
"onlineStatus": 1,
"remarkName": "小明"
}
### 更新好友备注
PUT http://localhost:8080/friend-relation
Content-Type: application/json
{
"id": 1,
"remarkName": "我的好朋友小明"
}
### 删除好友关系通过关系ID
DELETE http://localhost:8080/friend-relation/1
### 删除好友关系通过用户ID和好友ID
DELETE http://localhost:8080/friend-relation/1/2
### ==================== 好友请求接口 ====================
### 查询用户收到的所有好友请求
GET http://localhost:8080/friend-request/list/1
### 查询用户收到的待处理好友请求status=0
GET http://localhost:8080/friend-request/list/1/0
### 查询特定好友请求
GET http://localhost:8080/friend-request/1
### 发送好友请求
POST http://localhost:8080/friend-request
Content-Type: application/json
{
"applicantId": 1,
"recipientId": 2,
"applyMsg": "你好,我想加你为好友",
"status": 0
}
### 接受好友请求(自动创建双向好友关系)
POST http://localhost:8080/friend-request/1/accept
### 拒绝好友请求
POST http://localhost:8080/friend-request/1/reject
### 删除好友请求记录
DELETE http://localhost:8080/friend-request/1
### ==================== 数据库连接管理接口 ====================
### 查询所有数据库连接
GET http://localhost:8080/db-connection/list
### 根据创建者查询数据库连接
GET http://localhost:8080/db-connection/list/4
### 根据ID查询数据库连接
GET http://localhost:8080/db-connection/1
### 添加数据库连接
POST http://localhost:8080/db-connection
Content-Type: application/json
{
"name": "测试MySQL连接",
"dbTypeId": 1,
"url": "127.0.0.1:3306/test_db",
"username": "root",
"password": "password",
"status": "disconnected",
"createUserId": 4
}
### 更新数据库连接
PUT http://localhost:8080/db-connection
Content-Type: application/json
{
"id": 1,
"name": "更新后的连接名称",
"status": "connected"
}
### 测试数据库连接
GET http://localhost:8080/db-connection/test/1
### 删除数据库连接
DELETE http://localhost:8080/db-connection/1
### ==================== 大模型配置接口 ====================
### 查询所有大模型配置
GET http://localhost:8080/llm-config/list
### 查询可用的大模型配置
GET http://localhost:8080/llm-config/list/available
### 根据ID查询大模型配置
GET http://localhost:8080/llm-config/1
### 添加大模型配置
POST http://localhost:8080/llm-config
Content-Type: application/json
{
"name": "智谱AI",
"version": "4.0",
"apiKey": "your-api-key-here",
"apiUrl": "https://api.zhipuai.com/v4/chat/completions",
"statusId": 1,
"isDisabled": 0,
"timeout": 5000,
"createUserId": 4
}
### 更新大模型配置
PUT http://localhost:8080/llm-config
Content-Type: application/json
{
"id": 1,
"name": "智谱AI",
"version": "4.5",
"timeout": 8000
}
### 禁用/启用大模型配置
PUT http://localhost:8080/llm-config/1/toggle
### 删除大模型配置
DELETE http://localhost:8080/llm-config/1
### ==================== 数据表元数据接口 ====================
### 查询所有表元数据
GET http://localhost:8080/table-metadata/list
### 根据数据库连接ID查询表元数据
GET http://localhost:8080/table-metadata/list/1
### 根据ID查询表元数据
GET http://localhost:8080/table-metadata/1
### 添加表元数据
POST http://localhost:8080/table-metadata
Content-Type: application/json
{
"dbConnectionId": 1,
"tableName": "orders",
"description": "订单表,存储所有订单信息"
}
### 更新表元数据
PUT http://localhost:8080/table-metadata
Content-Type: application/json
{
"id": 1,
"tableName": "orders",
"description": "订单表(已更新)"
}
### 删除表元数据
DELETE http://localhost:8080/table-metadata/1
### ==================== 字段元数据接口 ====================
### 查询所有字段元数据
GET http://localhost:8080/column-metadata/list
### 根据表ID查询字段元数据
GET http://localhost:8080/column-metadata/list/1
### 根据ID查询字段元数据
GET http://localhost:8080/column-metadata/1
### 添加字段元数据
POST http://localhost:8080/column-metadata
Content-Type: application/json
{
"tableId": 1,
"columnName": "order_id",
"dataType": "bigint(20)",
"description": "订单唯一标识",
"isPrimary": 1
}
### 更新字段元数据
PUT http://localhost:8080/column-metadata
Content-Type: application/json
{
"id": 1,
"columnName": "order_id",
"description": "订单ID主键"
}
### 删除字段元数据
DELETE http://localhost:8080/column-metadata/1
### ==================== 查询日志接口 ====================
### 查询所有查询日志
GET http://localhost:8080/query-log/list
### 根据用户ID查询查询日志
GET http://localhost:8080/query-log/list/user/4
### 根据对话ID查询查询日志
GET http://localhost:8080/query-log/list/dialog/conv_12345678
### 根据ID查询查询日志
GET http://localhost:8080/query-log/1
### 添加查询日志
POST http://localhost:8080/query-log
Content-Type: application/json
{
"dialogId": "conv_12345678",
"dataSourceId": 1,
"userId": 4,
"executeResult": 1
}
### 删除查询日志
DELETE http://localhost:8080/query-log/1
### ==================== 数据库类型字典接口 ====================
### 查询所有数据库类型
GET http://localhost:8080/db-type/list
### 根据ID查询数据库类型
GET http://localhost:8080/db-type/1
### 根据类型编码查询
GET http://localhost:8080/db-type/code/mysql
### 添加数据库类型
POST http://localhost:8080/db-type
Content-Type: application/json
{
"typeName": "MySQL",
"typeCode": "mysql",
"description": "关系型数据库"
}
### 更新数据库类型
PUT http://localhost:8080/db-type
Content-Type: application/json
{
"id": 1,
"typeName": "MySQL",
"description": "关系型数据库(已更新)"
}
### 删除数据库类型
DELETE http://localhost:8080/db-type/1
### ==================== 大模型状态字典接口 ====================
### 查询所有大模型状态
GET http://localhost:8080/llm-status/list
### 根据ID查询大模型状态
GET http://localhost:8080/llm-status/1
### 根据状态编码查询
GET http://localhost:8080/llm-status/code/available
### 添加大模型状态
POST http://localhost:8080/llm-status
Content-Type: application/json
{
"statusName": "可用",
"statusCode": "available",
"description": "API成功率≥95%"
}
### 更新大模型状态
PUT http://localhost:8080/llm-status
Content-Type: application/json
{
"id": 1,
"statusName": "可用",
"description": "API成功率≥98%"
}
### 删除大模型状态
DELETE http://localhost:8080/llm-status/1
### ==================== 用户数据权限接口 ====================
### 查询所有权限
GET http://localhost:8080/user-db-permission/list
### 查询已分配权限的用户
GET http://localhost:8080/user-db-permission/list/assigned
### 查询未分配权限的用户
GET http://localhost:8080/user-db-permission/list/unassigned
### 根据ID查询权限
GET http://localhost:8080/user-db-permission/1
### 根据用户ID查询权限
GET http://localhost:8080/user-db-permission/user/4
### 添加用户权限
POST http://localhost:8080/user-db-permission
Content-Type: application/json
{
"userId": 4,
"permissionDetails": "[{\"db_connection_id\":1,\"table_ids\":[1,2,3]}]",
"lastGrantUserId": 4,
"isAssigned": 1
}
### 更新用户权限
PUT http://localhost:8080/user-db-permission
Content-Type: application/json
{
"id": 1,
"userId": 4,
"permissionDetails": "[{\"db_connection_id\":1,\"table_ids\":[1,2,3,4,5]}]",
"lastGrantUserId": 4
}
### 删除用户权限
DELETE http://localhost:8080/user-db-permission/1
### ==================== 系统操作日志接口 ====================
### 查询所有操作日志
GET http://localhost:8080/operation-log/list
### 根据用户ID查询操作日志
GET http://localhost:8080/operation-log/list/user/4
### 根据模块查询操作日志
GET http://localhost:8080/operation-log/list/module/数据源管理
### 查询失败的操作日志
GET http://localhost:8080/operation-log/list/failed
### 根据ID查询操作日志
GET http://localhost:8080/operation-log/1
### 添加操作日志
POST http://localhost:8080/operation-log
Content-Type: application/json
{
"userId": 4,
"username": "admin",
"operation": "创建数据库连接",
"module": "数据源管理",
"relatedLlm": null,
"ipAddress": "127.0.0.1",
"result": 1,
"errorMsg": null
}
### 删除操作日志
DELETE http://localhost:8080/operation-log/1
### ==================== 错误日志接口 ====================
### 查询所有错误日志
GET http://localhost:8080/error-log/list
### 根据错误类型查询
GET http://localhost:8080/error-log/list/type/1
### 根据统计周期查询
GET http://localhost:8080/error-log/list/period/today
### 根据ID查询错误日志
GET http://localhost:8080/error-log/1
### 添加错误日志
POST http://localhost:8080/error-log
Content-Type: application/json
{
"errorTypeId": 1,
"errorCount": 5,
"errorRate": 2.5,
"period": "today"
}
### 更新错误日志
PUT http://localhost:8080/error-log
Content-Type: application/json
{
"id": 1,
"errorCount": 10,
"errorRate": 5.0
}
### 删除错误日志
DELETE http://localhost:8080/error-log/1
### ==================== 错误类型字典接口 ====================
### 查询所有错误类型
GET http://localhost:8080/error-type/list
### 根据ID查询错误类型
GET http://localhost:8080/error-type/1
### 根据错误编码查询
GET http://localhost:8080/error-type/code/llm_timeout
### 添加错误类型
POST http://localhost:8080/error-type
Content-Type: application/json
{
"errorName": "模型调用超时",
"errorCode": "llm_timeout",
"description": "大模型API响应时间超过设定阈值"
}
### 更新错误类型
PUT http://localhost:8080/error-type
Content-Type: application/json
{
"id": 1,
"errorName": "模型调用超时",
"description": "大模型API响应时间超过5秒"
}
### 删除错误类型
DELETE http://localhost:8080/error-type/1
### ==================== 通知目标字典接口 ====================
### 查询所有通知目标
GET http://localhost:8080/notification-target/list
### 根据ID查询通知目标
GET http://localhost:8080/notification-target/1
### 根据目标编码查询
GET http://localhost:8080/notification-target/code/all
### 添加通知目标
POST http://localhost:8080/notification-target
Content-Type: application/json
{
"targetName": "所有用户",
"targetCode": "all",
"description": "发送给系统所有用户"
}
### 更新通知目标
PUT http://localhost:8080/notification-target
Content-Type: application/json
{
"id": 1,
"targetName": "所有用户",
"description": "发送给系统所有注册用户"
}
### 删除通知目标
DELETE http://localhost:8080/notification-target/1
### ==================== 优先级字典接口 ====================
### 查询所有优先级(按排序)
GET http://localhost:8080/priority/list
### 根据ID查询优先级
GET http://localhost:8080/priority/1
### 根据优先级编码查询
GET http://localhost:8080/priority/code/urgent
### 添加优先级
POST http://localhost:8080/priority
Content-Type: application/json
{
"priorityName": "紧急",
"priorityCode": "urgent",
"sort": 1
}
### 更新优先级
PUT http://localhost:8080/priority
Content-Type: application/json
{
"id": 1,
"priorityName": "紧急",
"sort": 0
}
### 删除优先级
DELETE http://localhost:8080/priority/1
### ==================== 通知管理接口 ====================
### 查询所有通知
GET http://localhost:8080/notification/list
### 查询已发布的通知
GET http://localhost:8080/notification/list/published
### 查询草稿
GET http://localhost:8080/notification/list/drafts
### 根据目标ID查询通知
GET http://localhost:8080/notification/list/target/1
### 根据ID查询通知
GET http://localhost:8080/notification/1
### 添加通知(草稿)
POST http://localhost:8080/notification
Content-Type: application/json
{
"title": "系统维护通知",
"content": "系统将于今晚22:00-24:00进行维护请提前保存数据",
"targetId": 1,
"priorityId": 1,
"publisherId": 4,
"isTop": 0
}
### 更新通知
PUT http://localhost:8080/notification
Content-Type: application/json
{
"id": 1,
"title": "系统维护通知(已更新)",
"content": "系统将于今晚22:00-次日00:30进行维护请提前保存数据"
}
### 发布通知
PUT http://localhost:8080/notification/1/publish
### 置顶/取消置顶
PUT http://localhost:8080/notification/1/toggle-top
### 删除通知
DELETE http://localhost:8080/notification/1
### ==================== 系统健康监控接口 ====================
### 查询所有健康记录
GET http://localhost:8080/system-health/list
### 查询最新的健康记录
GET http://localhost:8080/system-health/latest
### 查询最近10条健康记录
GET http://localhost:8080/system-health/recent/10
### 根据ID查询健康记录
GET http://localhost:8080/system-health/1
### 添加健康记录
POST http://localhost:8080/system-health
Content-Type: application/json
{
"dbDelay": 10,
"cacheDelay": 2,
"llmDelay": 150,
"storageUsage": 75.5
}
### 删除健康记录
DELETE http://localhost:8080/system-health/1

@ -0,0 +1,125 @@
services:
# MySQL 8.4 服务
mysql:
image: mysql:8.4
container_name: nlq_mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root123456
MYSQL_DATABASE: natural_language_query_system
MYSQL_USER: nlq_user
MYSQL_PASSWORD: nlq_pass123
TZ: Asia/Shanghai
ports:
- "3307:3306"
volumes:
# 挂载初始化脚本MySQL会自动执行/docker-entrypoint-initdb.d/目录下的.sql文件按字母顺序执行
- ./mysql_schema_from_last.sql:/docker-entrypoint-initdb.d/01-init.sql
- ./sakila-schema.sql:/docker-entrypoint-initdb.d/02-sakila-schema.sql
- ./sakila-data.sql:/docker-entrypoint-initdb.d/03-sakila-data.sql
# 数据持久化
- mysql_data:/var/lib/mysql
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --mysql-native-password=ON
networks:
- nlq_network
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-proot123456"]
interval: 10s
timeout: 5s
retries: 5
# MongoDB 8.2 服务
mongodb:
image: mongo:8.2
container_name: nlq_mongodb
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: admin123456
MONGO_INITDB_DATABASE: natural_language_query_system
TZ: Asia/Shanghai
ports:
- "27017:27017"
volumes:
# 挂载初始化脚本
- ./mongodb_schema_from_last.js:/docker-entrypoint-initdb.d/init.js
# 数据持久化
- mongodb_data:/data/db
- mongodb_config:/data/configdb
networks:
- nlq_network
healthcheck:
test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
interval: 10s
timeout: 5s
retries: 5
# 可选Mongo Express (MongoDB 的 Web 管理界面)
mongo-express:
image: mongo-express:latest
container_name: nlq_mongo_express
restart: always
ports:
- "8081:8081"
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: admin
ME_CONFIG_MONGODB_ADMINPASSWORD: admin123456
ME_CONFIG_MONGODB_URL: mongodb://admin:admin123456@mongodb:27017/
ME_CONFIG_BASICAUTH_USERNAME: admin
ME_CONFIG_BASICAUTH_PASSWORD: admin
depends_on:
- mongodb
networks:
- nlq_network
# 可选Adminer (MySQL 的 Web 管理界面)
adminer:
image: adminer:latest
container_name: nlq_adminer
restart: always
ports:
- "8082:8080"
environment:
ADMINER_DEFAULT_SERVER: mysql
depends_on:
- mysql
networks:
- nlq_network
# Redis 缓存服务
redis:
image: redis:7-alpine
container_name: nlq_redis
restart: always
ports:
- "6379:6379"
volumes:
- redis_data:/data
command: redis-server --appendonly yes
networks:
- nlq_network
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 3s
retries: 5
# 数据卷(数据持久化)
volumes:
mysql_data:
driver: local
mongodb_data:
driver: local
mongodb_config:
driver: local
redis_data:
driver: local
# 网络配置
networks:
nlq_network:
driver: bridge

@ -0,0 +1,8 @@
[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue,css,scss,sass,less,styl}]
charset = utf-8
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
end_of_line = lf
max_line_length = 100

@ -0,0 +1,96 @@
/**
* @fileoverview ESLint configuration for Vue 3 + TypeScript
* Follows Google Style Guide, with necessary overrides for Vue/TS.
* * Google 规范要求4空格缩进必须使用分号
* Vue/TS 社区惯例2空格缩进可选分号
* * 此配置在继承 Google 规范的基础上强制使用 2空格缩进和不使用分号
* 以便更好地适应现代前端开发环境
*/
module.exports = {
// 指定环境
'env': {
'browser': true,
'es2021': true,
'node': true
},
// 指定解析器
'parser': 'vue-eslint-parser',
'parserOptions': {
// 解析 <script> 块中的代码
'parser': '@typescript-eslint/parser',
'ecmaVersion': 'latest',
'sourceType': 'module',
'project': './tsconfig.json', // 引用您的 TypeScript 配置文件
'extraFileExtensions': ['.vue']
},
// 继承配置:这是核心!
'extends': [
// 1. Vue 3 推荐规则
'plugin:vue/vue3-recommended',
// 2. Google 编码规范 (必须在 Vue 规则之后,以便覆盖 Vue 的默认规则)
'google',
// 3. TypeScript 推荐规则
'plugin:@typescript-eslint/recommended',
// 4. Prettier (如果使用 Prettier 来处理格式化,放在最后以避免冲突)
'prettier'
],
// 规则覆盖和自定义
'rules': {
// ------------------------------------------------
// 强制覆盖 Google 规范的规则 (以适应 Vue/TS 社区惯例)
// ------------------------------------------------
// 1. 缩进Google 默认 4 空格,这里强制使用 2 空格
// Vue 模板的缩进也需要通过 'plugin:vue/vue3-recommended' 进行配置
'indent': ['error', 2, {
'SwitchCase': 1,
// 允许 Vue 模板中的表达式换行
'FunctionExpression': { 'parameters': 'first' },
'CallExpression': { 'arguments': 'first' },
'ArrayExpression': 'first',
'ObjectExpression': 'first'
}],
// 2. 分号Google 默认必须有分号,这里强制不使用分号 (现代JS风格)
'semi': ['error', 'never'],
// 3. 引号Google 默认单引号,这里保持单引号
'quotes': ['error', 'single'],
// 4. 最大行长Google 默认 100这里放宽到 120 (以适应现代宽屏)
'max-len': ['error', {
'code': 120,
'ignoreUrls': true,
'ignoreStrings': true,
'ignoreTemplateLiterals': true
}],
// ------------------------------------------------
// 针对 Vue 组件和 TypeScript 的规则
// ------------------------------------------------
// 禁用 TypeScript 的 `no-var-requires`,在某些 node 环境中可能需要 require
'@typescript-eslint/no-var-requires': 'off',
// 允许使用 any但在迁移阶段有用 (完成后建议设为 'error')
'@typescript-eslint/no-explicit-any': 'off',
// Vue 组件名必须是 PascalCase (例如: MyComponent)
'vue/component-name-in-template-casing': ['error', 'PascalCase', {
'registeredComponentsOnly': false
}],
// Vue 属性排序规则
'vue/attributes-order': 'error',
'vue/html-self-closing': ['error', {
'html': {
'void': 'always',
'normal': 'always',
'component': 'always'
}
}]
}
};

@ -0,0 +1 @@
* text=auto eol=lf

@ -0,0 +1,36 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
.DS_Store
dist
dist-ssr
coverage
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
*.tsbuildinfo
.eslintcache
# Cypress
/cypress/videos/
/cypress/screenshots/
# Vitest
__screenshots__/

@ -0,0 +1,6 @@
{
"$schema": "https://json.schemastore.org/prettierrc",
"semi": false,
"singleQuote": true,
"printWidth": 100
}

@ -0,0 +1,40 @@
import { globalIgnores } from 'eslint/config'
import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript'
import pluginVue from 'eslint-plugin-vue'
import pluginVitest from '@vitest/eslint-plugin'
import skipFormatting from '@vue/eslint-config-prettier/skip-formatting'
// To allow more languages other than `ts` in `.vue` files, uncomment the following lines:
// import { configureVueProject } from '@vue/eslint-config-typescript'
// configureVueProject({ scriptLangs: ['ts', 'tsx'] })
// More info at https://github.com/vuejs/eslint-config-typescript/#advanced-setup
export default defineConfigWithVueTs(
{
name: 'app/files-to-lint',
files: ['**/*.{ts,mts,tsx,vue}'],
},
globalIgnores(['**/dist/**', '**/dist-ssr/**', '**/coverage/**']),
pluginVue.configs['flat/essential'],
vueTsConfigs.recommended,
{
...pluginVitest.configs.recommended,
files: ['src/**/__tests__/*'],
},
// 自定义规则
{
rules: {
// 忽略以下划线开头的未使用变量(用于占位参数)
'@typescript-eslint/no-unused-vars': ['error', {
argsIgnorePattern: '^_',
varsIgnorePattern: '^_',
}],
},
},
skipFormatting,
)

@ -0,0 +1,46 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>自然语言数据库查询系统</title>
<!-- Font Awesome CDN临时方案避免 Tracking Prevention 问题) -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" crossorigin="anonymous" referrerpolicy="no-referrer">
<!-- Tailwind CSS CDN临时恢复确保界面样式正常 -->
<script src="https://cdn.tailwindcss.com"></script>
<!-- 配置自定义主题 -->
<script>
tailwind.config = {
darkMode: 'class',
theme: {
extend: {
colors: {
primary: '#165DFF',
secondary: '#36BFFA',
neutral: '#F5F7FA',
dark: '#1D2129',
success: '#00B42A',
warning: '#FF7D00',
danger: '#F53F3F',
},
fontFamily: {
inter: ['Inter', 'sans-serif'],
}
}
}
}
</script>
<!-- 自定义 CSS -->
<link rel="stylesheet" href="/index.css">
<!-- Polyfill for sockjs-client: 定义 global 变量 -->
<script>
if (typeof global === 'undefined') {
var global = globalThis;
}
</script>
</head>
<body class="bg-neutral font-inter text-dark min-h-screen">
<div id="root"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

@ -0,0 +1,5 @@
{
"name": "Natural Language Database Query System",
"description": "A web application that allows users to query databases using natural language. It provides a chat-based interface, displays results in tables and charts, and manages conversation history.",
"requestFramePermissions": []
}

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M615.3 232.5C617.6 232.5 619.9 233.2 621.9 234.7C623.8 236.1 625 238 625.7 239.7C627.1 243 627.5 247 627.5 251C627.5 253.2 627.2 255.9 626.8 258.6L626.8 259L575.9 523.9L575.9 523.9C571.9 546 567.4 563.3 562.3 575.6C557.3 587.7 551.4 597.2 543.7 602.6L543.7 602.6C536.2 607.9 526.8 610.3 516.1 610.6L513.1 610.6C497.1 610.6 483.8 606.4 476.2 595.8C476.1 595.7 476.1 595.7 476 595.6C475.9 595.4 475.7 595.2 475.5 595L475.5 595C473.7 592.6 473 589.8 472.6 587.6C472.1 584.8 471.9 581.5 471.9 577.8C471.9 570.5 472.5 564.3 474 559.6C475.4 555.2 478.8 549.2 486.2 549.2L487.5 549.3C487.7 549.3 487.9 549.4 488 549.4C488.3 549.5 488.6 549.5 488.8 549.6C489.4 549.7 490.1 549.9 491 550.2L498.6 552.4L498.7 552.4L506.3 554.5C507.2 554.7 508 554.9 508.5 555C508.9 555.1 509.1 555.1 509.2 555.1C509.2 555.1 509.3 555.1 509.4 555C509.5 554.9 509.8 554.8 510.2 554.4C511.1 553.5 512.4 551.8 513.8 548.7C516.4 542.9 518 534 518 521.3C518 520.6 517.7 517.9 516.7 512.4C515.8 507.3 514.4 500.2 512.5 491.3L456.5 258.4L456.4 258L456.4 257.7C456 255 455.7 252.4 455.7 250.4C455.7 246.7 456.1 242.9 457.4 239.8C458.1 238.2 459.2 236.4 460.9 234.9C462.8 233.4 465.1 232.6 467.4 232.6L502 232.6C506.6 232.6 510.7 234.3 513.9 237.6L515.2 239.1C516.4 240.7 517.2 242.5 517.9 244.3C518.8 246.7 519.4 249.4 519.9 252.4L550.3 413.6L574.1 253.6C574.9 247.8 576.3 242.2 579.2 238.5C582.2 234.7 586.4 232.7 591.2 232.7L615.2 232.7zM375.1 98.6C377.7 98.6 380.2 99.3 382.5 100.9C384.7 102.4 386.2 104.5 387.2 106.6C389.1 110.6 389.7 115.7 389.7 121.1L389.7 232.3C389.7 232.4 389.7 232.5 389.7 232.6L422.1 232.6C424.6 232.6 427.1 233.2 429.3 234.7C431.5 236.1 433 238.1 434.1 240.2C436.1 244.1 436.7 249 436.7 254.1L436.7 269.5C436.7 274.5 436.1 279.3 434.1 283.2C433 285.2 431.5 287.2 429.3 288.6C427.1 290 424.6 290.6 422.2 290.6L389.7 290.6L389.7 436.4C389.7 447.2 390.4 455.9 391.7 462.6C393.1 469.5 394.8 473.5 396.4 475.5C397.6 477 398.6 478 399.5 478.7L401.7 480.1L401.8 480.2L404.7 481C405.9 481.2 407.3 481.3 409 481.3L429.3 481.3C433.8 481.3 438.2 483 441.1 487.1C443.7 490.7 444.4 495.2 444.4 499.3L444.4 516.5C444.4 521 443.6 525.8 441 529.6C438 533.8 433.5 535.6 428.7 535.6L428.7 535.6L399.6 535.7C391.6 535.7 384.6 535.1 378.4 534C371.7 532.7 365 529.9 358.3 525.9C351.1 521.5 345.3 515.6 340.8 508.1C336.3 500.6 332.9 490.6 330.3 478.6C327.7 466.4 326.4 452 326.4 435.6L326.4 290.7L313 290.7C310.6 290.7 308.1 290.1 305.9 288.7C303.7 287.3 302.2 285.3 301.1 283.3C299.1 279.4 298.5 274.6 298.5 269.6L298.5 254.2C298.5 249.1 299.1 244.2 301.1 240.3C302.2 238.2 303.7 236.3 305.9 234.8C308.1 233.3 310.6 232.7 313.1 232.7L326.5 232.7L326.5 232.1L331.7 120.9L331.7 120.8L332 116.9C332.5 113.1 333.3 109.5 334.7 106.6C336.8 102.4 340.7 98.7 346.5 98.7L375.1 98.7zM107.1 110.3C108.9 110.6 110.7 111.2 112.4 112.4C114.5 113.9 115.9 115.9 116.8 117.8C118.5 121.5 119.1 126.2 119.1 131L119.1 508.8C119.1 515.5 118.5 521.4 116.7 525.9C115.8 528.2 114.4 530.6 112.3 532.4C110 534.4 107.2 535.4 104.2 535.4L60.5 535.4C57.5 535.4 54.7 534.3 52.4 532.3C50.3 530.4 49 528 48.2 525.8C46.5 521.3 45.9 515.5 45.9 508.8L45.9 193C41.1 194.2 37.2 195.2 34.4 195.9C32.5 196.4 31 196.7 30 197C29.5 197.1 29.1 197.2 28.8 197.3C28.7 197.3 28.5 197.4 28.3 197.4C28.2 197.4 28.1 197.4 28 197.5C28 197.5 27.8 197.5 27.7 197.5C27.7 197.5 27.5 197.5 27.3 197.5L27.3 197.5C27.2 197.5 27 197.5 26.9 197.5C26.8 197.5 26.7 197.5 26.7 197.5C24.5 197.6 22.2 197.1 20.1 195.8C17.8 194.4 16.3 192.4 15.4 190.5C13.6 186.8 13.1 182.1 13.1 177.5L13.1 150.1C13.1 145.7 13.8 141.3 15.7 137.7C17.8 133.8 21.2 131.1 25.5 130.1L101 110.6C102.4 110.2 103.9 110.1 105.4 110.1L107.2 110.2zM250.9 109.8C252.7 110.1 254.5 110.7 256.1 111.9C258.2 113.4 259.6 115.4 260.5 117.3C262.2 121 262.7 125.7 262.7 130.5L262.7 508.3C262.7 515 262.1 520.9 260.3 525.4C259.4 527.7 258 530.1 255.9 531.9C253.6 533.9 250.8 534.9 247.8 534.9L204.1 534.9C201.1 534.9 198.3 533.8 196 531.8C193.9 529.9 192.6 527.5 191.8 525.3C190.1 520.8 189.5 515 189.5 508.3L189.5 192.5C184.7 193.7 180.8 194.7 178 195.4C176.1 195.9 174.6 196.2 173.6 196.5C173.1 196.6 172.7 196.7 172.4 196.8C172.3 196.8 172.1 196.9 171.9 196.9C171.8 196.9 171.7 196.9 171.6 197C171.5 197 171.4 197 171.3 197C171.3 197 171.1 197 170.9 197L170.9 197C170.8 197 170.7 197 170.6 197C170.5 197 170.4 197 170.3 197C168.1 197.1 165.8 196.6 163.7 195.3C161.4 193.9 159.9 191.9 159 190C157.2 186.3 156.7 181.7 156.7 177L156.7 149.6C156.7 145.2 157.4 140.9 159.3 137.2C161.4 133.3 164.8 130.6 169.1 129.6L244.5 110.2C245.9 109.8 247.4 109.7 248.9 109.7L250.7 109.8z"/></svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M320 160L320 480C341 480 361.8 475.9 381.2 467.8C400.6 459.7 418.2 448 433.1 433.1C448 418.2 459.7 400.6 467.8 381.2C475.9 361.8 480 341 480 320C480 299 475.9 278.2 467.8 258.8C459.7 239.4 448 221.7 433.1 206.9C418.2 192.1 400.6 180.3 381.2 172.2C361.8 164.1 341 160 320 160zM0 320L160 480L320 320L160 160L0 320zM480 320C480 341 484.1 361.8 492.2 381.2C500.3 400.6 512 418.2 526.9 433.1C541.8 448 559.4 459.7 578.8 467.8C598.2 475.9 619 480 640 480L640 160C597.6 160 556.9 176.9 526.9 206.9C496.9 236.9 480 277.6 480 320z"/></svg>

After

Width:  |  Height:  |  Size: 832 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M199.8 408.3C193.3 394.1 192.9 390 207.2 385.2C232.8 377.2 215.2 394.4 250.4 434.4L250.7 434.4L250.7 340.5C251.9 290.3 294.7 248.3 348.4 248.3C402.3 248.3 446.1 291.8 446.1 345.1C446.1 408.5 385.3 458.3 317.6 438.4C307.1 434.2 315.5 406.7 326.1 409.8C379.1 409.8 415.5 399.7 415.5 345.4C415.5 284.4 338.4 255.8 298.6 300.8C275.1 327.2 281 342.9 281 458.4C331.7 489.4 399.3 480.4 441.4 438.3C466.2 413.5 479.9 380.3 479.9 345.3C479.9 310.1 466.1 277.1 441.1 252C416.3 227.2 383.3 213.5 347.8 213.5C312.3 213.5 279 227.3 254.3 252C254 252.3 238.3 268.5 233.1 275.9L232.6 276.5C229.3 281.2 226.3 285.6 212.5 282.6C205.6 280.9 198.2 276.8 198.2 270.8L198.2 84C198.2 79 202.1 73.5 208.7 73.5L450 73.5C458.3 73.5 458.3 85.1 458.3 88.6C458.3 92.5 458.3 103.7 450 103.7L226.8 103.7L226.8 236.6L227.1 236.6C331.3 126.8 509.9 200.6 509.9 345.5C509.9 523.6 265.1 565.8 199.8 408.3zM263.1 147.5C262.6 151.7 267.7 172 277.7 168.1C402.5 120.6 480.5 208.5 487.1 208.5C491.9 208.5 509.9 193.2 501.4 185.7C408.2 96.7 266.9 128.7 263.1 147.5zM489.5 478.7C379.5 588.6 190.5 539.5 157.5 374.5C157.5 362.3 127.1 367.1 128.6 377.8C152.6 551.2 374.6 634.7 510.2 499.1C517.1 491.3 497.6 470.7 489.5 478.7zM310.1 370.6C310.1 374.6 314.4 377.9 315.6 379.1C318.6 382.1 321.7 383.5 324.1 383.5C327.9 383.5 326.7 383.7 346.4 364C366 383.3 365.5 383.5 368.7 383.5C374.1 383.5 387.2 373.1 379.4 365.3L362.1 348L380.3 329.8C386.6 323 370.2 308 364.1 314.1L346.2 332C327.6 313.2 327.8 312.5 324.7 312.5C319.7 312.5 306.7 324.2 312.3 329.8L330.5 348C312.4 365.9 310.1 367.2 310.1 370.6z"/></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M519.9 319.8L507 477.1C503.7 517.8 443.1 512.2 446.4 472.2L456.4 349.7L415.3 352C425.4 372.7 431.1 395.9 431.1 420.5C431.1 461.7 415 499.2 388.8 527L349.5 487.7C407.4 424 362.6 320.5 275.5 320.5C249.6 320.5 226 330.4 208.3 346.5L169 307.2C191 286.5 219.1 272.1 250.4 267L325.7 181.3L283.1 156.5L231.5 202.5C201.5 229.3 160.9 184 191 157.1L259 96.4C268.8 87.6 283.1 86.2 294.5 92.8C294.5 92.8 433.8 173.7 434 173.9C450.2 184 454.7 209.9 440.1 226.5L381.7 293L487.8 287.1C506.3 286 521.4 301.5 519.9 319.8zM455 165.8C483.1 165.8 505.9 143 505.9 114.9C505.9 86.8 483.1 64 455 64C426.9 64 404.1 86.8 404.1 114.9C404.1 143 426.9 165.8 455 165.8zM275.6 520.5C195 520.5 148.2 429.9 192.9 364.4L153.2 324.7C132.4 351 120 384.3 120 420.4C120 551.1 270.7 621.8 371.4 542.9L331.7 503.2C315.7 514.1 296.4 520.5 275.6 520.5z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M322.1 316L322.1 315L270.9 249.2C270.9 249.2 258.9 250.8 245.9 264.3C236.9 273.6 3.8 503.4 2.5 505.2C-4.5 515.2 4.1 512 18.2 506.9C19 506.9 132.7 470.3 132.7 470.3C133.2 469.7 132.6 470.2 133.3 469.7C132.9 464.6 132.5 443.5 132.3 442C131.7 436.8 134.5 435.1 139.3 433.1L231.9 399.3C232.5 398.5 320.4 317.6 322.1 316zM482.2 436.1C495.5 452.2 502.9 449.4 513 445.4C516.2 444.2 628.4 397.8 630.8 396.5C638.8 392.2 629.1 379.8 623.6 373.1C621.5 370.6 418.5 127.5 416.4 124.8C406.7 112.6 402.1 111.9 378 112C367.8 112 271.2 112.5 261.5 112.6C242.3 112.7 228.6 112.3 242.3 129.5C250 139 476.5 429.2 482.2 436.1zM634.9 437.7C632.6 437.4 610.3 433 596.9 430.5C596.9 430.5 481.9 480.9 479.4 482.1C463.4 489.4 452.5 478.9 442.7 467.5L385.6 393.5C380.2 392.6 325.2 383.9 320.3 384.2C317.2 384.4 310.7 385 305.9 387.1C301 389.2 160.7 439.9 155.7 441.8C150.6 443.8 144.3 445.4 144.6 449.4C144.8 451.9 146.6 452 149.2 452.9C151.9 453.7 450.1 520.5 457.2 522C472.8 525.3 495.7 532.5 510.8 523.7C512.9 522.5 634.6 447.3 636.6 445.9C642 441.9 640.9 439.1 634.9 437.7z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M320 231.5L384.9 330.3L255.1 330.3L320 231.5zM72 320C72 183 183 72 320 72C457 72 568 183 568 320C568 457 457 568 320 568C183 568 72 457 72 320zM468.2 402.7L320 179.5L171.8 402.7L202.2 402.7L235.8 351L404.4 351L438 402.7L468.2 402.7z"/></svg>

After

Width:  |  Height:  |  Size: 543 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M546.1 96L92.7 96C69.8 96 64 101.9 64 124.9L64 515.1C64 538.4 69.8 544 92.7 544L546.1 544C570.5 544 576 538.8 576 514.3L576 126.2C576 101.6 570.6 96 546.1 96zM242.4 284.3C214.9 264.1 170.3 275.6 158.2 307.7C153.9 318.8 148.9 317.2 140.7 316C131 314.5 123.5 312.8 118.2 310.5C89.4 299.1 126.8 255.2 143.1 246.2C184.2 224.8 226.5 224 268.4 241.4C309.3 258.2 302.9 300.6 302.9 369.9C305.6 395.7 298.6 428.2 312.2 458.7C314.1 463.1 312.6 466.6 309.5 469.4C301.1 476.1 270.2 471.6 262.9 462C261 459.8 261.1 458.4 259 455.8C255.4 451.9 251.7 453.6 247.1 456.8C189.7 493.2 106.8 478.2 100.1 413.5C97 384.2 112.5 356.4 139.7 342.5C177.9 323 251.9 330.7 253.7 311.6C254.8 301.4 251.8 291.5 242.4 284.3zM529.1 506.3C529.1 521.4 518 516.2 511.3 516.2L116.4 516.2C109 516.2 98.2 521 98.6 505.5C99 491.6 109.1 496.4 115.7 496.4C248 496 380.2 496 512.5 496.4C519.3 496.4 529.1 492 529.1 506.3zM532.9 165.8L532.9 456.8C532.9 462.5 532.2 470.7 524.8 470.7C512.4 470.3 497.3 477.8 488.7 465.1C482.9 456.4 480.9 461.1 476.3 463.9C422.9 493.6 348.2 471 331.9 378.7C325.8 345.3 331.2 311.6 347.6 278.7C359.4 254.8 404.5 202.6 483.7 248.2L483.7 177.2C483.7 151 483.6 151 509.7 151C512.8 151 516.3 151.4 519.4 151C529.5 150.2 533 155.4 533 165.3C532.9 165.5 532.9 165.6 532.9 165.8zM481.4 398.1C461.9 445.7 408.5 441.4 391.4 403.3C376.3 370 375.9 335.1 391.8 301.8C408.1 267.7 451.5 266.1 473.3 297C493.9 325.8 488.2 381.6 481.4 398.1zM186.6 433.4C179.1 432.1 153.6 430.1 152.9 405.6C152.5 391.7 160.7 382.6 172.7 379.8C197.1 373.9 222 369.9 246.4 365.1C255.3 363.1 253.8 369.5 254.2 374.6C255.6 407.6 228.1 433.8 186.6 433.4z"/></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M223.7 301.4C172.4 372.3 107.1 412.2 78 390.6C48.8 368.9 66.8 294 118.2 223.1C169.5 152.2 234.8 112.3 263.9 133.9C293 155.5 275 230.5 223.7 301.4zM574.9 244.1C501.1 367.5 383 431.8 310.4 387.7C285.4 372.5 269.1 346.5 261.4 313.9C227.8 378.7 168.6 427.7 97.3 447.1C147.1 506.4 221.4 544 304.3 544C454.3 544 575.9 420.9 575.9 269.1C576 260.6 575.6 252.3 574.9 244.1z"/></svg>

After

Width:  |  Height:  |  Size: 675 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M320.5 437.1C295.3 405.4 280.4 377.7 275.5 353.9C253 265.9 388.1 265.9 365.6 353.9C360.2 378.1 345.3 405.9 320.6 437.1L320.5 437.1zM458.7 510.3C416.6 528.6 375 499.4 339.4 459.8C443.3 329.7 385.5 259.8 320.6 259.8C265.7 259.8 235.4 306.3 247.3 360.3C254.2 389.5 272.5 422.7 301.7 459.8C269.2 495.8 241.2 512.5 216.5 514.7C166.5 522.1 127.4 473.6 145.2 423.6C160.3 384.4 256.9 192.4 261.1 182C276.9 151.9 286.7 124.6 320.5 124.6C352.8 124.6 363.9 150.5 380.9 184.5C416.9 255.1 470.3 362 495.7 423.6C508.9 456.7 494.3 494.9 458.7 510.2zM505.7 374.2C376.8 99.9 369.7 96 320.6 96C275.1 96 255.7 127.7 235.9 168.8C129.7 381.1 119.5 411.2 118.6 413.8C93.4 483.1 145.3 544 208.2 544C229.9 544 268.8 537.9 320.6 481.6C379.3 545.4 421.9 544 433 544C495.9 544.1 547.9 483.1 522.6 413.8C522.6 409.9 505.8 374.9 505.8 374.2L505.8 374.2z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M320 64C180.1 64 66 176.7 64 316.1C62 457.6 176.9 574.8 318.5 575.6C362.2 575.9 404.4 565.2 441.8 544.9C445.4 542.9 446 537.9 442.9 535.2L418.9 514C414 509.7 407.1 508.5 401.1 511C375 522.1 346.6 527.8 317.4 527.4C203 525.9 110.5 430.8 112.3 316.4C114.1 203.5 206.6 112.2 320 112.2L527.7 112.2L527.7 481.2L409.9 376.5C406.1 373.1 400.2 373.8 397.2 377.8C378.3 402.8 347.5 418.4 313.3 416C265.8 412.7 227.4 374.5 223.8 327.1C219.6 270.5 264.4 223.2 320.1 223.2C370.5 223.2 412 262 416.3 311.2C416.7 315.6 418.7 319.7 422 322.6L452.7 349.8C456.2 352.9 461.7 351 462.6 346.4C464.8 334.6 465.6 322.2 464.7 309.6C459.8 237.6 401.4 179.6 329.3 175.2C246.6 170.1 177.5 234.7 175.3 315.8C173.2 394.7 237.9 462.8 316.9 464.5C349.9 465.2 380.5 454.9 405.2 436.9L559 573.4C565.6 579.2 576 574.6 576 565.7L576 73.7C576 68.3 571.6 64 566.3 64L320 64z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M473.7 96L166.3 96C127.4 96 96 127.4 96 166.3L96 473.7C96 512.6 127.4 544 166.3 544L473.8 544C512.3 544 543.6 512.9 544.1 474.4C498.1 448.8 433.5 414.1 372.5 386C340.4 430 288.4 467 223.9 467C153.3 467 130.2 421.7 126.9 390.6C122.9 351.6 141.8 309.1 226.4 309.1C261.8 309.1 305.8 319.3 353.5 334.1C370 304 380 273.8 380 273.8L201.8 273.8L201.8 257.1L293.9 257.1L293.9 225.9L184.5 225.9L184.5 206.9L293.9 206.9L293.9 156.5L344.8 156.5L344.8 206.9L454.2 206.9L454.2 225.9L344.8 225.9L344.8 257.1L433.6 257.1C433.6 257.1 418.4 303.7 395.3 348C444.2 364.7 495.3 384 543.9 400.7L543.9 166.3C544.1 127.6 512.7 96 474 96zM143.3 387C144.3 407.2 153.5 440.7 213.2 440.7C265.3 440.7 305.8 401 331.1 367.8C286.5 349.1 246.6 336.4 221.7 336.4C154.3 336.4 142.3 369.5 143.3 387z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.4 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M353.7 226.7C305 228.5 184.2 242.2 184.2 344.2C184.2 453.7 322.5 458.2 367.7 387.4C374.2 397.6 403.1 424.9 413 434.2L469.8 378.2C469.8 378.2 437.5 352.9 437.5 325.4L437.5 178.3C437.5 153 413 96 325.2 96C237.2 96 190.5 151 190.5 200.3L264 207.1C280.3 157.6 318.2 157.6 318.2 157.6C358.9 157.5 353.7 187.4 353.7 226.7zM353.7 313.5C353.7 393.5 269.5 381.5 269.5 330.7C269.5 283.5 320 274 353.7 272.9L353.7 313.5zM489.7 477C482 487 419.7 544 315.2 544C210.7 544 130.7 472.5 106.2 443C99.4 435.3 107.2 431.7 111.7 434.7C185 479.2 299.5 552.5 484.2 465C491.7 461.3 497.5 467 489.7 477zM529.5 479.2C523 495 513.5 506 508.3 510.2C502.8 514.7 498.8 512.9 501.8 506.4C504.8 499.9 521.1 459.9 514.5 451.4C508 443.1 477.5 447.1 466.5 448.2C455.7 449.2 453.5 450.2 452.5 447.9C450.2 442.2 474.2 432.4 490 430.4C505.7 428.6 531 429.6 536 436.1C539.7 441.2 536 463.2 529.5 479.2z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M336.2 96C274.3 96 204.7 112.9 152 151.4C146.9 154.5 142.9 160.6 144.8 170.8C145.9 175.9 149.9 198.2 155 210.4C159.1 220.6 169.2 220.6 175.3 216.5C207.8 194.2 271.8 168.8 327.6 168.8C385.5 168.8 386.5 197.2 386.5 241.9L386.5 280.4C299.1 291.7 174.3 315 142.8 328.2C107.3 344.5 112.4 421.7 112.4 440C112.4 458.3 127.6 544 237.3 544C285.1 544 351 523.3 390.6 501.9L390.6 527.3C390.6 530.3 392.7 535.5 396.7 536.4C399.8 537.4 447.4 538.4 456.6 538.4C465.8 538.4 519.1 538.7 523.1 537.7C527.2 536.7 528.2 531.6 528.2 528.6L528.2 232C528.1 151.7 470.3 96 336.2 96zM386.4 444C365 457.2 337.7 468.4 307.3 468.4C254.5 468.4 248.4 434.9 248.3 423.7C248.3 411.5 245.3 381 266.6 370.8C290.9 357.6 341.7 341.4 386.4 337.3L386.4 444z"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M452.5 317.9C465.8 317.9 476.5 328.6 476.5 341.9C476.5 355.2 465.8 365.9 452.5 365.9C439.2 365.9 428.5 355.2 428.5 341.9C428.5 328.6 439.2 317.9 452.5 317.9zM187.4 317.9C200.7 317.9 211.4 328.6 211.4 341.9C211.4 355.2 200.7 365.9 187.4 365.9C174.1 365.9 163.4 355.2 163.4 341.9C163.4 328.6 174.1 317.9 187.4 317.9zM461.1 221.4L509 138.4C509.8 137.3 510.3 136 510.5 134.6C510.7 133.2 510.7 131.9 510.4 130.5C510.1 129.1 509.5 127.9 508.7 126.8C507.9 125.7 506.9 124.8 505.7 124.1C504.5 123.4 503.2 123 501.8 122.8C500.4 122.6 499.1 122.8 497.8 123.2C496.5 123.6 495.3 124.3 494.2 125.1C493.1 125.9 492.3 127.1 491.7 128.3L443.2 212.4C404.4 195 362.4 186 319.9 186C277.4 186 235.4 195 196.6 212.4L148.2 128.4C147.6 127.2 146.7 126.1 145.7 125.2C144.7 124.3 143.4 123.7 142.1 123.3C140.8 122.9 139.4 122.8 138.1 122.9C136.8 123 135.4 123.5 134.2 124.2C133 124.9 132 125.8 131.2 126.9C130.4 128 129.8 129.3 129.5 130.6C129.2 131.9 129.2 133.3 129.4 134.7C129.6 136.1 130.2 137.3 130.9 138.5L178.8 221.5C96.5 266.2 40.2 349.5 32 448L608 448C599.8 349.5 543.5 266.2 461.1 221.4z"/></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M443.6 279.4C455.3 246.8 489 152.5 489 122.3C489 95.7 473.3 73.4 445.3 73.4C400.7 73.4 360.7 205.1 348.2 236.5C338.5 208 293.1 64 253.1 64C222 64 207.4 86.9 207.4 115.7C207.4 151 241.6 242.5 254 277.7C247.7 275.4 240.9 273.4 234 273.4C210.6 273.4 185.7 302.5 185.7 326C185.7 334.9 190.6 347.4 193.7 355.7C156.8 365.7 142.6 390.3 142.6 427.4C142.5 499.6 210.9 576 307.1 576C425.1 576 498.5 487.4 498.5 373.1C498.5 330 491.6 291.1 443.6 279.4zM408.2 172C412.2 159.7 429.3 107.7 445.3 107.7C453.9 107.7 456.2 116.6 456.2 123.7C456.2 142.8 417.6 248.3 409.1 271.7L375.1 265.7L408.2 172zM238.8 112.3C238.8 100.4 253.3 66.6 285.1 159.4L319.7 259.7C304.1 258.4 292 256.7 284.3 261.1C273.4 232.3 238.8 141.4 238.8 112.3zM236.5 308C265.8 308 303.6 402.6 303.6 415.4C303.6 420.5 298.7 426.8 293 426.8C272.1 426.8 216.1 349.9 216.1 329.1C216.2 321.4 228.8 308 236.5 308zM420.8 494.3C391.7 526.3 354.5 542.9 311.1 542.9C251.7 542.9 204.8 510.3 182.2 454.6C165.1 411.2 186 386.3 202.8 386.3C214.2 386.3 257.1 446.6 257.1 459.4C257.1 464.3 249.4 467.7 245.4 467.7C229.3 467.7 223 452.2 194.3 416.3C164.6 446 214.8 503.2 252.6 503.2C278.7 503.2 295.7 479 290.6 461.2C294.3 461.2 298.9 461.5 302.3 460.6C303.4 487.7 311.4 520 344 522.3C344 521.4 346 515.2 346 514.9C346 497.5 335.4 482.3 335.4 464.6C335.4 436.3 357.1 408.9 379.1 392.9C387.1 386.9 396.8 383.2 406.2 379.8C415.9 376.1 426.2 371.8 433.6 364.4C432.5 353.2 427.9 343.3 416.7 343.3C389 343.3 296.1 347.3 296.1 303.6C296.1 296.9 296.2 290.5 313.5 290.5C345.8 290.5 427.8 298.5 451.8 319.6C469.9 335.7 476.1 432.8 420.8 494.3zM322.2 368.3C331.9 371.4 341.9 372.3 351.9 374.3C344.5 379.7 337.9 386.3 331.6 393.4C328.8 384.9 325.4 376.6 322.2 368.3z"/></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M640 302.2L636.8 330.4L602.3 332.7L600.3 350.8L634.8 348.5L631.6 376.7L597.2 378.9L594.9 399L629.3 396.8L626.3 422.9L561.6 427L574.3 313.8L527 429.2L495.1 431.2L471.3 313.4L501.6 311.4L515.2 390.8L546.9 308.4L640 302.2zM426.8 435.5L455.1 433.7L468 313.6L439.6 315.5L426.8 435.5zM162 452.1L142.6 416.1L139.1 453.5L110.9 455.2L113.6 426.1C102.6 444.1 81.6 460.4 56.7 461.9C23.9 463.9-3 441 .3 403.7C2.9 374.4 27 340.9 67.8 338.3C105.5 335.9 115.4 361.5 119.1 367.1L121.9 336.3L160.8 333.8C180.9 332.5 199.5 337.5 203.3 357.5L205.9 330.9L270.7 326.7L268 354.6L231.6 357L229.9 374.9L266.3 372.6L263.6 400.5L227.2 402.8L225.3 422.7L261.6 420.4L259.5 441.2L314.5 324L338.3 322.4L370.4 433L379.3 347.4L357 348.8L359.9 320.9L434.9 316L431.9 344L407.6 345.6L397.9 437.5L339.9 441.2L335.6 425.6L296.2 428.1L288.2 444.4L162 452.1zM117.7 381.9L91.3 383.6C84.6 371.2 76.9 367 65 367.8C46 369 31.7 385.3 30.4 401.1C29 417.1 37.7 433.6 59.1 432.3C71.9 431.5 80.4 423.7 88 413.4L115 411.7L117.7 381.9zM173.8 374.2C175 361.3 166.2 360.6 147.7 361.8L145 390.3C159.2 389.4 172.5 388.2 173.8 374.2zM194.9 445L200.7 385C195.7 398.5 186 406.1 172.8 411.6L194.9 445zM330.3 400L322.4 362.2L306.6 401.5L330.3 400zM160.2 325.4L155.9 307.9L116.3 310.5L108.2 328.7L76.3 330.8L133.3 208.9L157.2 207.3L187.9 309.3L197.8 204.6L224.8 202.8L262.6 266.4L269.1 199.8L297.6 197.9L293.6 239.1C301 225.6 316.5 194.4 357.2 191.6C397.7 188.8 409.6 220.9 410.6 221.9L413.9 189.9L453.2 187.2C465.9 186.3 481 187.5 489.5 196.9L485.1 185L517.3 182.8L530.2 226L553.2 180.3L584.2 178.1L540.6 256.5L535.8 300.8L507.4 302.7L512.2 258.4L496.4 215.4C497.4 237.7 487.2 255.5 464.4 265L489.6 303.8L453.2 306.2L434 269.4L430 307.7L401.6 309.6L404.9 278.1C398.2 287.4 385.2 313.5 345.3 316.1C319.1 317.8 299.7 305.8 289.9 276.9L285.9 317.2L260.9 318.8L223.3 255.5L217 321.7L160.2 325.4zM436.8 243.3C447 242.6 454.3 241.2 458.4 239C462.9 236.6 465.4 232.6 466 226.9C466.6 221.6 465.4 218.1 462.6 216.5C459 214.4 452 213.7 439.7 214.5L436.8 243.3zM327.7 278C333.3 283.9 340.4 286.5 349 285.9C353.7 285.6 358.1 284.1 362.3 281.8C367.8 278.8 372.9 273.8 377.4 267.5L343.2 269.8L345.6 245.9L408.7 241.6L409.9 229.6L378.7 231.7C374.6 228 370.9 225.1 367.6 223.6C363.6 221.9 359.5 220.8 355.4 221.1C347.4 221.6 340.1 224.7 333.4 230.3C325.7 236.7 321.4 244.8 320.5 254.7C319.4 264.3 321.9 272 327.7 278zM126.4 286.2L150.2 284.6L141.9 247L126.4 286.2z"/></svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M281.7 332.1L357.9 332.1L319.8 240.5L281.7 332.1zM319.8 96L112 170.4L143.8 446.1L319.8 544L495.8 446.1L527.6 170.4L319.8 96zM450 437.8L401.4 437.8L375.2 372.4L264.6 372.4L238.4 437.8L189.7 437.8L319.8 145.5L450 437.8z"/></svg>

After

Width:  |  Height:  |  Size: 528 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M496 96L144 96C117.5 96 96 117.5 96 144L96 496C96 522.5 117.5 544 144 544L496 544C522.5 544 544 522.5 544 496L544 144C544 117.5 522.5 96 496 96zM223 448.5C217.5 458.1 205.2 461.3 195.7 455.8C186.1 450.3 182.9 438 188.4 428.5L202.7 403.8C218.8 398.9 232 402.7 242.3 415.2L223 448.5zM361.9 394.6L180 394.6C169 394.6 160 385.6 160 374.6C160 363.6 169 354.6 180 354.6L231 354.6L296.4 241.4L275.9 206C270.4 196.4 273.7 184.2 283.2 178.7C292.8 173.2 305 176.5 310.5 186L319.4 201.4L328.3 186C333.8 176.4 346.1 173.2 355.6 178.7C365.2 184.2 368.4 196.5 362.9 206L277.1 354.6L339.2 354.6C359.4 354.6 370.7 378.3 361.9 394.6zM460 394.6L431 394.6L450.6 428.5C456.1 438.1 452.8 450.3 443.3 455.8C433.7 461.3 421.5 458 416 448.5C383.1 391.6 358.5 348.8 342 320.4C325.3 291.4 337.2 262.4 349.1 252.6C362.2 275.3 381.8 309.3 408 354.6L460 354.6C471 354.6 480 363.6 480 374.6C480 385.7 471 394.6 460 394.6z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M319.9 184.9L329 169.2C334.6 159.4 347.1 156.1 356.9 161.7C366.7 167.3 370 179.8 364.4 189.6L276.9 341.1L340.2 341.1C360.7 341.1 372.2 365.2 363.3 381.9L177.8 381.9C166.5 381.9 157.4 372.8 157.4 361.5C157.4 350.2 166.5 341.1 177.8 341.1L229.8 341.1L296.4 225.7L275.6 189.6C270 179.8 273.3 167.4 283.1 161.7C292.9 156.1 305.3 159.4 311 169.2L319.9 184.9zM241.2 402.9L221.6 436.9C216 446.7 203.5 450 193.7 444.4C183.9 438.8 180.6 426.3 186.2 416.5L200.8 391.3C217.2 386.2 230.6 390.1 241.2 402.9zM410.1 341.2L463.2 341.2C474.5 341.2 483.6 350.3 483.6 361.6C483.6 372.9 474.5 382 463.2 382L433.7 382L453.6 416.5C459.2 426.3 455.9 438.7 446.1 444.4C436.3 450 423.9 446.7 418.2 436.9C384.7 378.8 359.5 335.3 342.8 306.3C325.7 276.8 337.9 247.2 350 237.2C363.4 260.2 383.4 294.9 410.1 341.2zM320 72C183 72 72 183 72 320C72 457 183 568 320 568C457 568 568 457 568 320C568 183 457 72 320 72zM104 320C104 200.7 200.7 104 320 104C439.3 104 536 200.7 536 320C536 439.3 439.3 536 320 536C200.7 536 104 439.3 104 320z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M42.1 303.1C64.3 303.1 71.1 305.9 75.6 317.7L76.4 317.7L76.4 294.8C76.4 283.5 71.6 279.4 58.5 279.4C47.2 279.4 44.1 281.9 43.4 292.2L4.8 292.2C5.1 278.3 6.3 273.1 10.6 267.8C17.9 259 29.5 256 56.7 256C89.7 256 103.8 261 110.6 274.9C112.6 279.2 114.6 290.5 114.6 298.6L114.6 374.9L76.3 374.9L77.6 355.8L76.6 355.8C71.3 371.4 63 376.2 41.1 376.2C10.8 376.2 0 366.1 0 338.9C0 313.7 12.3 303.1 42.1 303.1zM59.2 351.2C72.3 351.2 76.1 348.2 76.1 337.8C76.1 328.7 71.8 326.2 56.5 326.2C43.4 326.2 38.6 329.2 38.6 338.3C38.5 348.7 42.3 351.2 59.2 351.2zM137 256.3L175.3 256.3L173.8 276.9L174.6 276.9C183.7 259.8 190.5 256 212.1 256C226.5 256 236.8 259 243.6 265.1C253.4 273.7 256.4 285.5 256.4 313.2C256.4 343.2 253.4 356.3 244.3 366.1C237.5 373.4 227.9 376.2 211.1 376.2C190.7 376.2 181.9 370.7 177.3 355L176.5 355L176.5 425.3L137 425.3L137 256.3zM217.9 317C217.9 289.5 214.6 284.5 197.2 284.5C180.3 284.5 176.5 289.5 176.5 313.2C176.5 341.2 180 346.7 197.7 346.7C214.1 346.7 217.9 341.1 217.9 317zM275.8 256.3L314.1 256.3L312.6 276.9L313.4 276.9C322.5 259.8 329.3 256 350.9 256C365.3 256 375.6 259 382.4 265.1C392.2 273.7 395.2 285.5 395.2 313.2C395.2 343.2 392.2 356.3 383.1 366.1C376.3 373.4 366.7 376.2 349.8 376.2C329.4 376.2 320.6 370.7 316 355L315.2 355L315.2 425.3L275.7 425.3L275.7 256.3L275.8 256.3zM356.7 317C356.7 289.5 353.4 284.5 336 284.5C319.1 284.5 315.3 289.5 315.3 313.2C315.3 341.2 318.8 346.7 336.5 346.7C352.9 346.7 356.7 341.1 356.7 317zM410.5 313.2C410.5 287.8 413.8 275.4 422.8 267.4C431.6 259.3 445 256.1 467.9 256.1C510.7 256.1 523.6 268.9 523.6 311.8L523.6 322.9L448.3 322.9C448 324.9 448 326.9 448 327.7C448 344.6 452.5 349.6 468.1 349.6C482 349.6 486 346.6 486 335.7L523.5 335.7L523.5 338C523.5 347.8 521 356.9 516.7 362.7C509.4 372.5 497.1 376.3 472.4 376.3C444.9 376.3 430.8 373 421.8 364C413.3 355.5 410.5 342.7 410.5 313.2zM486.9 301.6C486.6 299.8 486.6 298.3 486.6 297.8C486.6 285.5 483.3 283.2 467 283.2C452.6 283.2 449.9 286.2 448.9 298.3L448.6 301.6L486.9 301.6zM542.5 256.3L580.8 256.3L579 276.2L579.7 276.2C586.5 261.3 594.1 256 609.4 256C620.2 256 628.5 259.3 632.8 265.3C638.1 272.6 639.6 279.7 639.6 299.3C639.6 300.8 639.6 304.3 639.8 308.6L604.8 308.6C605.1 306.8 605.1 305.3 605.1 304.6C605.1 289.2 603.1 285.2 594.8 285.2C588.5 285.2 584 288.5 581.7 294.5C580.7 297.5 580.7 298.8 580.7 306.8L580.7 374.8L542.4 374.8L542.4 256.3L542.5 256.3z"/></svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M116.9 222.5C109.4 231.4 97.4 238.4 85.4 237.4C83.9 225.4 89.8 212.6 96.7 204.8C104.2 195.7 117.3 189.2 128 188.7C129.2 201.1 124.3 213.4 116.9 222.5zM127.8 239.7C110.4 238.7 95.5 249.6 87.3 249.6C78.9 249.6 66.3 240.2 52.5 240.5C34.6 240.8 18 250.9 8.9 267C-9.9 299.3 4 347 22.2 373.3C31.1 386.3 41.7 400.6 55.7 400.1C69 399.6 74.2 391.5 90.2 391.5C106.3 391.5 111 400.1 125 399.9C139.5 399.6 148.6 386.9 157.5 373.9C167.6 359.1 171.8 344.8 172 344C171.7 343.7 144 333.1 143.7 301.1C143.4 274.3 165.6 261.6 166.6 260.8C154.1 242.2 134.6 240.2 127.8 239.7zM228.2 203.5L228.2 398.4L258.5 398.4L258.5 331.8L300.4 331.8C338.7 331.8 365.5 305.5 365.5 267.5C365.5 229.5 339.1 203.5 301.4 203.5L228.2 203.5zM258.5 229L293.4 229C319.7 229 334.7 243 334.7 267.6C334.7 292.2 319.7 306.4 293.3 306.4L258.5 306.4L258.5 229zM420.7 399.9C439.7 399.9 457.3 390.3 465.3 375L465.9 375L465.9 398.4L493.9 398.4L493.9 301.4C493.9 273.3 471.4 255.1 436.8 255.1C404.7 255.1 380.9 273.5 380 298.7L407.3 298.7C409.6 286.7 420.7 278.8 435.9 278.8C454.4 278.8 464.8 287.4 464.8 303.3L464.8 314.1L427 316.4C391.9 318.5 372.9 332.9 372.9 357.9C373 383.1 392.6 399.9 420.7 399.9zM428.9 376.8C412.8 376.8 402.5 369 402.5 357.2C402.5 344.9 412.4 337.8 431.3 336.7L464.9 334.6L464.9 345.6C464.9 363.8 449.4 376.8 428.9 376.8zM531.4 451.4C560.9 451.4 574.8 440.1 586.9 406L640 257L609.2 257L573.6 372.1L573 372.1L537.4 257L505.8 257L557 398.9L554.2 407.5C549.6 422.1 542.1 427.8 528.7 427.8C526.3 427.8 521.7 427.5 519.8 427.3L519.8 450.7C521.6 451.1 529.1 451.4 531.4 451.4z"/></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M447.1 332.7C446.9 296 463.5 268.3 497.1 247.9C478.3 221 449.9 206.2 412.4 203.3C376.9 200.5 338.1 224 323.9 224C308.9 224 274.5 204.3 247.5 204.3C191.7 205.2 132.4 248.8 132.4 337.5C132.4 363.7 137.2 390.8 146.8 418.7C159.6 455.4 205.8 545.4 254 543.9C279.2 543.3 297 526 329.8 526C361.6 526 378.1 543.9 406.2 543.9C454.8 543.2 496.6 461.4 508.8 424.6C443.6 393.9 447.1 334.6 447.1 332.7zM390.5 168.5C417.8 136.1 415.3 106.6 414.5 96C390.4 97.4 362.5 112.4 346.6 130.9C329.1 150.7 318.8 175.2 321 202.8C347.1 204.8 370.9 191.4 390.5 168.5z"/></svg>

After

Width:  |  Height:  |  Size: 851 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M66.1 441.4L109.1 515.7C113.4 524.2 119.9 531.4 128 536.4C136.1 541.4 145.4 544 155 544L440.4 544L381.2 441.4L66.1 441.4zM565.9 414L399.7 123.3C395.3 115.1 388.8 108.2 380.8 103.3C372.8 98.4 363.7 96 354.4 96L266 96L523.3 543.6L564 473.1C565.9 469.9 585 443.4 566 414zM339.2 368.5L223.7 168.5L108.2 368.5L339.2 368.5z"/></svg>

After

Width:  |  Height:  |  Size: 628 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M549.5 373.2C588.3 333.2 607.6 293.2 608 257.1C608.8 191.6 548.6 138.9 438.6 122.1C309.9 102.4 150.1 137.6 32 204.5C84 178 142.6 156.3 202.7 146.3C277.2 125.8 355.7 120.9 424 131.5C576.5 155.3 620.8 259 522.8 363.2C512.6 374 500.8 384.3 487.8 393.8L336.9 167.4L146.7 452.9C81.1 423.5 70.2 362.7 127.6 301.7C148.4 279.5 175.9 259.8 207.1 243.6C227.1 231.4 246.8 221 269.1 212.9C204 233.2 146.4 265.8 107.5 305.8C79.8 334.4 66.1 362.9 65.8 388.7C65.3 423.8 89.2 453.8 134.2 471.7L99.7 523.4L201.3 523.4L223.3 489C245.5 490 268.6 489 291.9 486.3L269.1 523.4L404.6 523.4L372 470.3C390.6 465 408.9 458.8 426.5 451.6L472.4 523.4L574 523.4L500.6 413C519.1 400.9 535.6 387.5 549.5 373.2zM361.9 453.7L336.9 413.1L304.2 466.4C280.8 469.9 257.5 471.5 235 470.8L336.9 311.5L415.6 434.5C398.4 441.9 380.3 448.4 361.9 453.7z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M216.2 300.4C208.5 292.2 196.5 292.7 191.4 303.2L65.6 554.2C60.6 564.2 68 575.9 79 575.9L254 575.9C259.8 576 265 572.7 267.4 567.5C305.3 489.7 282.5 371.2 216.2 300.4zM308.4 72.1C186.1 265.5 299.9 420.7 373.4 567.6C375.9 572.7 381.1 576 386.8 576L561 576C572.2 576 579.4 564.2 574.4 554.3C574.4 554.3 339.9 83.7 334 72C328.7 61.4 315.2 61.2 308.4 72.1z"/></svg>

After

Width:  |  Height:  |  Size: 663 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M640 263.9L640 317.9L320 517.9L0 318L0 264L320 464L640 263.9zM445.5 335.9L492.6 306.5C455.4 250.7 391.9 213.9 319.9 213.9C247.9 213.9 184.4 250.6 147.3 306.3L147.6 306.3C150.1 304 152.7 301.8 155.3 299.6C245 225.2 374.7 241.5 445.5 335.9zM225.4 354.7C242.3 342.8 261.9 336 282.8 336C317.2 336 348 354.4 369.2 383.6L414.6 355.2C393.7 325.3 359 305.7 319.8 305.7C280.9 305.7 246.4 325.1 225.4 354.7zM103.6 225.1C235.4 120.8 421.8 148.7 521.1 287.2L521.8 288.2L570.6 257.8C517.1 176.1 424.8 122.1 319.9 122.1C216.4 122.1 123.3 175.6 69.4 257.7C79.3 247.2 92.1 234.2 103.6 225.1z"/></svg>

After

Width:  |  Height:  |  Size: 886 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M318.4 80L157.4 560L234.9 560L260.3 478.6L379.8 478.6L405 560L482.5 560L318.4 80zM278.1 421.9L319.3 291.5L320.8 291.5L361.7 421.9L278.1 421.9zM640 469L630 437.6L462.1 422L481.5 478.5L640 469zM177.9 422L10 437.7L0 469L158.5 478.4L177.9 422z"/></svg>

After

Width:  |  Height:  |  Size: 550 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M517.2 96L205.2 96C166.3 96 129 127.2 121.9 165.7L65.3 474.3C58.2 512.8 84 544 123 544L435 544C473.9 544 511.2 512.8 518.3 474.3L575 165.8C582 127.2 556.2 96 517.2 96zM459 443.3L427 456.8L311.6 346.8C296.9 356.8 282.4 366.3 269.9 373.9L292 438.1L274.1 450.8L233.5 389.8L181.1 341.7L196.8 326.3L254.8 357.4C264.1 346.9 275.6 334.8 287.6 322.5L267.1 292.9L198.3 193.1L217.1 164.2L226 159.4L329.1 271.8L334 276.3C353.4 257.5 367.8 243.9 367.8 243.9C375.5 237.4 389.3 241 398.5 251.8C407.5 262.3 409.1 276.5 401.2 283.1C399.4 284.4 385.7 294.5 365.9 308.7L370.4 316L465.3 435.4L459 443.3z"/></svg>

After

Width:  |  Height:  |  Size: 895 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M107.2 347.5L88.2 305.7L36.1 305.7L17.1 347.5L0 347.5L62.2 216.1L124.4 347.5L107.2 347.5zM62.2 249.4L42.6 291.9L81.8 291.9L62.2 249.4zM174.9 351.8L112.7 220.4L129.8 220.4L174.9 316.4L220 220.4L237 220.4L174.9 351.8zM255.5 347.5L255.5 220.4L271 220.4L271 347.5L255.5 347.5zM464.6 231.9L464.6 347.5L447.3 347.5L447.3 231.9L406.1 231.9L406.1 220.4L505.7 220.4L505.7 231.9L464.6 231.9zM640 282.8C640 292 638.3 300.6 634.9 308.6C631.5 316.6 626.7 323.7 620.7 329.7C614.7 335.7 607.6 340.5 599.6 343.9C591.6 347.3 583 349 573.8 349C564.6 349 556 347.3 548 343.9C540 340.5 532.9 335.7 526.9 329.7C520.9 323.7 516.1 316.7 512.7 308.6C509.3 300.6 507.6 292 507.6 282.8C507.6 273.6 509.3 265 512.7 257C516.1 249 520.9 241.9 526.9 235.9C532.9 229.9 539.9 227.5 548 224C556 220.6 564.6 218.9 573.8 218.9C583 218.9 591.6 220.6 599.6 224C607.6 227.4 614.7 229.8 620.7 235.9C626.7 241.9 631.4 249 634.9 257C638.3 265 640 273.6 640 282.8zM624.5 282.8C624.5 275.5 623.2 268.8 620.6 262.5C618 256.2 614.4 250.8 609.8 246.2C605.2 241.6 599.8 238 593.6 235.3C587.4 232.6 580.8 231.3 573.8 231.3C566.8 231.3 560.2 232.6 554 235.3C547.8 238 542.4 241.6 537.8 246.2C533.2 250.8 529.6 256.2 527 262.5C524.4 268.8 523.1 275.6 523.1 282.8C523.1 290.1 524.4 296.8 527 303.1C529.6 309.4 533.2 314.8 537.8 319.4C542.4 324 547.8 327.6 554 330.3C560.2 333 566.8 334.3 573.8 334.3C580.8 334.3 587.4 333 593.6 330.3C599.8 327.6 605.2 324 609.8 319.4C614.4 314.8 618 309.4 620.6 303.1C623.2 296.8 624.5 290 624.5 282.8zM529.7 379.5L529.7 373.2L618.6 363.2L375.7 376.6C376.3 374.4 376.8 372 377.1 369.4C377.4 367.4 377.6 365.2 377.7 362.9L442.5 354.8L377.6 356.7C377.6 356.3 377.5 356 377.5 355.6C374.7 338.4 352 331.9 352 331.9L350.9 305.6L374.7 305.6L393.7 347.4L410.8 347.4L348.6 216L286.4 347.4L303.5 347.4L322.5 305.6L346.1 305.6L345 332C345 332 322.3 338.5 319.5 355.7C319.4 356 319.4 356.4 319.4 356.8L254.5 354.9L319.3 363C319.4 365.3 319.6 367.4 319.9 369.5C320.2 372.1 320.7 374.5 321.3 376.7L78.4 363.2L167.3 373.2L167.3 379.5C161.4 380.4 156.8 385.5 156.8 391.7C156.8 398.5 162.4 404.1 169.2 404.1C176 404.1 181.6 398.5 181.6 391.7C181.6 385.5 177 380.4 171.1 379.5L171.1 373.7L251.4 382.7L251.4 388.1C245.7 389.2 241.5 394.3 241.5 400.2C241.5 407 247.1 410.4 253.9 410.4C260.7 410.4 266.3 407 266.3 400.2C266.3 394.2 262 389.2 256.4 388.1L256.4 383.2L284.8 386.4L284.8 410.1L278.9 410.1L278.9 424L284.8 424L284.8 417.4L289.8 417.4L289.8 424L295.7 424L295.7 410.2L289.8 410.2L289.8 387L328.1 391.3C336.2 402.7 347.1 404.9 347.1 404.9L347 411.6L341.9 411.8L341.8 423.9L345.9 423.9L346 418.9L351.2 418.9L351.3 423.9L355.4 423.9L355.3 411.8L350.2 411.6L350.1 404.9C350.1 404.9 361 402.8 369.1 391.3L407.4 387L407.4 410.2L401.5 410.2L401.5 424L407.4 424L407.4 417.4L412.4 417.4L412.4 424L418.3 424L418.3 410.2L412.4 410.2L412.4 386.5L440.8 383.3L440.8 388.2C435.1 389.3 430.9 394.4 430.9 400.3C430.9 407.1 436.5 410.5 443.3 410.5C450.1 410.5 455.7 407.1 455.7 400.3C455.7 394.3 451.4 389.3 445.8 388.2L445.8 382.8L526.1 373.8L526.1 379.6C520.2 380.5 515.6 385.6 515.6 391.8C515.6 398.6 521.2 404.2 528 404.2C534.8 404.2 540.4 398.6 540.4 391.8C540.2 385.5 535.7 380.4 529.7 379.5zM328.9 291.9L348.5 249.4L368.1 291.9L350.2 291.9L348.5 251.6L346.8 291.9L328.9 291.9z"/></svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M180.4 267C179.7 289.6 191 299.7 191.3 306C191.2 307.3 190.7 308.5 190 309.6C189.3 310.7 188.3 311.6 187.2 312.2L174.4 321.2C172.7 322.4 170.8 323 168.8 323.1C168.4 323.1 160.6 324.9 148.3 297.5C140.8 306.9 131.3 314.4 120.4 319.5C109.5 324.6 97.7 327.2 85.7 327C69.4 327.9 25.3 317.8 27.6 270.8C26 232.5 61.7 208.7 98.5 210.8C105.6 210.8 120.1 211.2 145.5 217.1L145.5 201.5C148.2 175 130.8 154.5 100.7 157.6C98.3 157.6 81.3 157.1 54.9 167.7C47.5 171.1 46.6 170.5 44.1 170.5C36.7 170.5 39.7 149 41.2 146.3C46.4 139.9 77.1 127.9 107.1 128.1C127.2 126.3 147.2 132.5 162.8 145.4C169.1 152.5 174 160.8 177 169.8C180 178.8 181.2 188.3 180.5 197.8L180.5 267.1zM94 299.4C126.4 298.9 140.2 279.4 143.3 268.9C145.8 258.8 145.4 252.5 145.4 241.5C135.7 239.2 121.8 236.6 105.8 236.6C90.6 235.5 63 242.2 64.1 268.9C62.9 285.7 75.2 300.3 94.1 299.4zM264.9 322.5C257 323.2 253.4 317.6 252.2 312.1L202.4 147.4C201.4 144.6 200.8 141.8 200.5 138.8C200.3 137.6 200.6 136.4 201.3 135.4C202 134.4 203.1 133.8 204.3 133.6C204.5 133.6 202.2 133.6 226.5 133.6C235.3 132.7 238.1 139.6 239.1 144L274.9 284.8L308.1 144C308.6 140.8 311 132.9 320.9 133.8L338.1 133.8C340.3 133.6 349.2 133.3 350.8 144.2L384.1 286.7L421 144.1C421.5 141.9 423.7 132.7 433.7 133.7L453.4 133.7C454.3 133.6 459.6 132.9 458.7 142.3C458.3 144.1 462.1 131.6 405.9 312.2C404.8 317.7 401.1 323.3 393.2 322.6L374.5 322.6C363.6 323.8 362 312.9 361.8 311.9L328.6 174.8L295.8 311.8C295.6 312.9 294.1 323.7 283.1 322.5L264.8 322.5L264.8 322.5zM538.4 328.1C532.5 328.1 504.5 327.8 481 315.8C478.7 314.8 476.7 313.2 475.3 311C473.9 308.8 473.2 306.4 473.2 303.9L473.2 293.2C473.2 284.7 479.4 286.3 482 287.3C492 291.4 498.5 294.4 510.8 296.9C547.5 304.4 563.6 294.6 567.5 292.4C580.7 284.6 581.7 266.7 572.8 257.5C562.3 248.7 557.3 248.4 519.7 236.5C515.1 235.2 476 222.9 475.9 184.1C475.3 155.9 500.9 127.9 545.4 128.1C558.1 128.1 591.8 132.2 601 143.7C602.4 145.8 603 148.3 602.9 150.7L602.9 160.8C602.9 165.2 601.3 167.5 598 167.5C590.3 166.6 576.6 156.3 548.8 156.7C541.9 156.3 508.9 157.6 510.4 181.7C510 200.7 537 207.8 540.1 208.6C576.6 219.6 588.7 221.4 603.2 238.2C620.3 260.4 611.1 286.5 607.5 293.6C588.4 331.1 539.1 328 538.2 328zM578.6 433C508.6 484.7 406.9 512.2 320.1 512.2C203 513 89.8 469.9 2.8 391.5C-3.7 385.6 2 377.5 10 382C106.5 437.2 215.7 466.2 326.9 466.1C409.9 465.7 492 448.8 568.5 416.6C580.3 411.6 590.3 424.4 578.6 433zM607.8 399.7C598.8 388.2 548.5 394.3 526 397C519.2 397.8 518.1 391.9 524.2 387.5C564.3 359.3 630.1 367.4 637.6 376.9C645.1 386.4 635.5 452.3 598 483.8C592.2 488.7 586.7 486.1 589.3 479.7C597.7 458.4 616.7 411.2 607.7 399.7z"/></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M320 72C183 72 72 183 72 320C72 457 183 568 320 568C457 568 568 457 568 320C568 183 457 72 320 72zM368.2 398.1L187.2 398.1L271.9 242L452.9 242L368.2 398.1z"/></svg>

After

Width:  |  Height:  |  Size: 466 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M512.8 289.6C539.7 289.8 548.4 282.2 551.7 277.2C564.2 260.9 544.6 229.6 498.9 205.9C516.7 172.3 529 142.2 535.2 120.6C538.6 108.8 536.3 101.6 535.7 100.3C534 110.8 519.9 148.8 487.5 200.3C462.5 189.1 431 180.2 393.7 176.5C384.8 159.6 358.8 112.6 333.2 87.6C316.4 71.1 302.9 65 292.4 64.1L292.4 64.1C278.6 62.5 269.7 69.9 265 75.1C247.8 93.6 240.7 124 240 159.2C232.8 146.9 222.8 134.6 211.5 133.3L211.3 133.3C190.6 129.8 172.9 162.5 175.3 214.6C136.9 216 104.3 220.4 82.3 225.8C72.4 228.2 66.1 233.1 64.5 235.5C65.5 235.1 86.9 226.3 176.1 226.3C181.3 279.3 205.9 328.1 202.1 319.5C192.4 334.9 163.9 381.9 154.8 417.2C148.9 440.1 150.4 454.8 155 464.3C160.6 477.1 171.4 481 178.2 482.6C203.2 488.3 233.6 479 264.9 461.5C257.4 474.3 251 490 255.8 500.8C263.1 520.4 300.3 519.5 344.2 491.4C364.4 523.6 384.3 549.3 399.9 565.5C402.5 568.3 405.4 570.7 408.7 572.6C413.8 575.8 417.3 576 417.3 576C409.1 569.3 383.3 538 354.8 484.2C377 468.2 400.5 445.3 422.3 414.9C545.1 419.5 565.6 390.1 570.3 383.3C585 363.4 573.7 325.9 513 289.6zM435 395.8C458.8 358.1 465.3 328 464.4 303.5C492.3 321.1 511.6 341.1 513.5 362.3C514.6 375.2 505.4 391.4 435 395.8zM281.1 451.7C290.9 445.5 300.6 438.6 310.3 431.2C317 444.5 323.9 457.3 330.9 469.4C290.3 491.3 262.1 482.2 281.1 451.7zM496.1 280.4C485.8 275.1 474.9 270.1 463.7 265.4C471.6 253.3 479.2 241 486.4 228.5C525.5 252.6 532.3 281.7 496 280.4zM343.4 462C337.9 450.6 332.4 438.5 326.9 425.6C370.1 426.9 389.3 406.9 390.2 405.2C390.2 405.3 365.2 420.8 327.7 417.4C358.3 391.8 386.8 363.7 412.8 333.4C421.5 323.2 429.8 312.8 437.7 302.3C437.3 302 436.2 299.3 421.2 290.3C369.5 350.6 318.9 388.3 288.4 406.2C267.8 395 247.6 374.4 232.7 344.7C212.7 304.8 202.7 262.3 201.1 228.6C213.4 229.5 226.4 230.8 239.9 232.5C217.6 269.3 225.5 295.5 226.4 296.7C226.4 296.6 225.4 267.5 246.5 237.1C255.5 289.6 270.5 340.9 291.2 389.9C292.1 389.5 293 390.8 309.9 381.7C283.6 307.2 276.1 243.5 275.9 208.3C295.9 195.9 324.1 188.5 357.5 190.5C402.1 193.2 443.9 205.7 473.8 221.2C466.7 231.6 458.9 242.5 450.5 253.7C429.8 216 403.2 209.8 401.6 210C401.7 210 427.5 224.1 443.1 257.2C405.6 243.4 367 232.8 327.8 225.5C314.7 223.1 301.6 221.1 288.4 219.5C288.3 219.9 286.6 221.3 286.2 239.8C364.1 254.3 422.8 279.7 453.4 297C454.1 320.6 446.4 348.6 428 376.6C403.4 413.9 371.6 443.8 343.2 462zM370.8 175C326.2 173.3 297.2 182.4 276.1 195.7C278.1 143.4 297.4 119.3 314.3 120.4C331.2 116.2 369.2 172.6 370.8 175zM240.1 178.1C240.6 190.2 241.7 202.7 243.3 215.4C228.7 214.5 214.6 214.1 200.9 214.1C200.8 217.3 200.8 163.1 225.6 164.5L225.7 164.5C231.5 165.6 236.3 171.4 240.1 178.1zM212 340.1C232.8 379.8 255.3 400.7 277.3 412.4C230.5 437.2 199.8 432.4 192.4 416.9C192.2 416.7 181.3 401.6 212.1 340.1L212.1 340.1z"/></svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M251.3 382.4C268.5 382.4 282.5 376.3 282.5 357C282.5 337.3 270.8 329.6 252.2 329.5L206.2 329.5L206.2 382.4L251.3 382.4zM245.9 252.8L206.3 252.8L206.3 297.6L249 297.6C264.1 297.6 274.8 291 274.8 274.7C274.8 257 261.1 252.8 245.9 252.8zM375.4 327.6L437.6 327.6C435.9 309.1 426.3 297.9 407.1 297.9C388.8 297.9 376.6 309.3 375.4 327.6zM480 96L160 96C124.7 96 96 124.7 96 160L96 480C96 515.3 124.7 544 160 544L480 544C515.3 544 544 515.3 544 480L544 160C544 124.7 515.3 96 480 96zM445.5 249L367.7 249L367.7 230.1L445.5 230.1L445.5 249zM289.7 307.7C313.3 314.4 324.7 335.2 324.7 359.3C324.7 398.3 292 415 257.1 415.2L164 415.2L164 223.2L254.5 223.2C287.4 223.2 315.9 232.5 315.9 270.7C315.9 290 306.9 299.5 289.7 307.7zM408.4 269.1C451.9 269.1 476 303.4 476 344.5C476 346.1 475.9 347.8 475.8 349.5C475.8 350.3 475.7 351 475.7 351.7L375.5 351.7C375.5 373.9 387.2 387 409.6 387C421.2 387 436.1 380.8 439.8 368.9L473.5 368.9C463.1 400.8 441.6 415.7 408.4 415.7C364.6 415.7 337.3 386 337.3 342.7C337.3 300.9 366 269.1 408.4 269.1z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M264 301.2C295.8 286 312.4 263 312.4 227.2C312.4 156.6 259.8 139.4 199.1 139.4L32 139.4L32 493.8L203.8 493.8C268.2 493.8 328.7 462.9 328.7 390.9C328.7 346.4 307.6 313.5 264 301.2zM109.9 199.9L183 199.9C211.1 199.9 236.4 207.8 236.4 240.4C236.4 270.5 216.7 282.6 188.9 282.6L109.9 282.6L109.9 199.9zM193.2 433.6L109.9 433.6L109.9 336L194.8 336C229.1 336 250.8 350.3 250.8 386.6C250.8 422.4 224.9 433.6 193.2 433.6zM551.7 192.9L408 192.9L408 158L551.7 158L551.7 192.9zM608 369.2C608 293.3 563.6 230 483.1 230C404.9 230 351.8 288.8 351.8 365.8C351.8 445.7 402.1 500.5 483.1 500.5C544.4 500.5 584.1 472.9 603.2 414.2L541 414.2C534.3 436.1 506.7 447.7 485.3 447.7C444 447.7 422.3 423.5 422.3 382.4L607.4 382.4C607.7 378.2 608 373.7 608 369.2zM422.4 338C424.7 304.3 447.1 283.2 480.9 283.2C516.3 283.2 534.1 304 537.1 338L422.4 338z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M552.6 168.1C569.3 186.2 577 207.8 575.9 233.8L575.9 436.2C575.5 462.6 566.7 484.3 549.4 501.3C532.2 518.3 510.3 527.2 483.9 528L156 528C129.6 527.2 107.8 518.2 90.7 500.8C73.6 483.4 64.7 460.5 64 432.2L64 233.8C64.8 207.8 73.7 186.2 90.7 168.1C107.8 151.8 129.5 142.8 156 142L185.4 142L160 116.2C154.3 110.5 151.4 103.2 151.4 94.4C151.4 85.6 154.3 78.3 160 72.6C165.7 66.9 173 64 181.9 64C190.8 64 198 66.9 203.8 72.6L277.1 142L365.1 142L439.6 72.6C445.7 66.9 453.2 64 462 64C470.8 64 478.1 66.9 483.9 72.6C489.6 78.3 492.5 85.6 492.5 94.4C492.5 103.2 489.6 110.5 483.9 116.2L458.6 142L487.9 142C514.3 142.8 535.9 151.8 552.6 168.1zM513.8 237.8C513.4 228.2 510.1 220.4 503.1 214.3C497.9 208.2 489.1 204.9 480.4 204.5L160 204.5C150.4 204.9 142.6 208.2 136.4 214.3C130.3 220.4 127 228.2 126.6 237.8L126.6 432.2C126.6 441.4 129.9 449.2 136.4 455.7C142.9 462.2 150.8 465.5 160 465.5L480.4 465.5C489.6 465.5 497.4 462.2 503.7 455.7C510 449.2 513.4 441.4 513.8 432.2L513.8 237.8zM249.5 280.5C255.8 286.8 259.2 294.6 259.6 303.7L259.6 337C259.2 346.2 255.9 353.9 249.8 360.2C243.6 366.5 235.8 369.7 226.2 369.7C216.6 369.7 208.7 366.5 202.6 360.2C196.5 353.9 193.2 346.2 192.8 337L192.8 303.7C193.2 294.6 196.6 286.8 202.9 280.5C209.2 274.2 216.1 270.9 226.2 270.5C235.4 270.9 243.2 274.2 249.5 280.5zM441 280.5C447.3 286.8 450.7 294.6 451.1 303.7L451.1 337C450.7 346.2 447.4 353.9 441.3 360.2C435.2 366.5 427.3 369.7 417.7 369.7C408.1 369.7 400.3 366.5 394.1 360.2C387.1 353.9 384.7 346.2 384.4 337L384.4 303.7C384.7 294.6 388.1 286.8 394.4 280.5C400.7 274.2 408.5 270.9 417.7 270.5C426.9 270.9 434.7 274.2 441 280.5z"/></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M512 96L128 96C110.4 96 96 110.4 96 128L96 512C96 529.6 110.4 544 128 544L512 544C529.6 544 544 529.6 544 512L544 128C544 110.4 529.6 96 512 96zM448 353.4C448 402.8 436.6 436 344.2 436L327.3 436C283.2 436 264.9 421.1 256.9 397.2L256 397.2L256 432L192 432L192 200L256 200L256 274.7L257.1 274.7C261.7 244.2 296.8 235.9 326.8 235.9L344.1 235.9C436.5 235.9 447.9 269 447.9 318.4L447.9 353.4L448 353.4zM384 324.5L384 347.4C384 369.1 380.6 381.2 345.6 381.2L300.3 381.2C271.4 381.2 256.2 374.7 256.2 345.5L256.2 326.5C256.2 297.2 271.4 290.8 300.3 290.8L345.6 290.8C380.6 290.6 384 302.8 384 324.5z"/></svg>

After

Width:  |  Height:  |  Size: 903 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M86.2 96C84.1 96 82 96.4 80.1 97.1C78.2 97.8 76.4 99 74.9 100.5C73.4 102 72.2 103.7 71.4 105.6C70.6 107.5 70.1 109.6 70.1 111.7C70.1 112.6 70.2 113.6 70.3 114.5L138.1 526.7C138.9 531.8 141.5 536.4 145.4 539.7C149.3 543 154.2 544.9 159.4 544.9L485.1 544.9C488.9 545 492.6 543.6 495.6 541.2C498.6 538.8 500.5 535.3 501.1 531.5L569 114.7C569.7 110.5 568.7 106.3 566.2 102.8C563.7 99.3 560 97.1 555.8 96.4C554.9 96.3 553.9 96.2 553 96.2L86.2 96zM372.1 393.8L268.1 393.8L240 246.8L397.3 246.8L372.1 393.8z"/></svg>

After

Width:  |  Height:  |  Size: 811 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M72 320C72 183 183 72 320 72C457 72 568 183 568 320C568 457 457 568 320 568C183 568 72 457 72 320zM426.3 284.7C431.2 251.7 406.1 234 371.7 222.1L382.8 177.4L355.6 170.6L344.7 214.1C337.5 212.3 330.2 210.6 322.9 209L333.8 165.2L306.6 158.4L295.4 203.1C289.5 201.8 283.7 200.4 278 199L278 198.9L240.5 189.5L233.3 218.6C233.3 218.6 253.5 223.2 253.1 223.5C264.1 226.3 266.1 233.5 265.8 239.3L253.1 290.2C253.9 290.4 254.8 290.7 255.9 291.1C255 290.9 254 290.6 253 290.4L235.2 361.7C233.9 365 230.4 370.1 222.7 368.2C223 368.6 202.9 363.3 202.9 363.3L189.4 394.4L224.8 403.2C231.4 404.9 237.8 406.6 244.2 408.2L232.9 453.4L260.1 460.2L271.3 415.5C278.5 417.5 285.7 419.3 293 421.1L281.9 465.6L309.1 472.4L320.4 427.3C366.8 436.1 401.7 432.5 416.4 390.6C428.2 356.8 415.8 337.3 391.4 324.6C409.2 320.5 422.6 308.8 426.1 284.7zM364.1 371.9C355.7 405.7 298.8 387.4 280.3 382.8L295.2 322.9C313.6 327.5 372.8 336.6 364 371.9zM372.5 284.2C364.8 314.9 317.5 299.3 302.1 295.5L315.6 241.2C331 245 380.4 252.2 372.4 284.2z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M150.5 131.2C245.9 42 396.6 40 493.6 135C507.9 149.1 487.2 172.1 471.2 156.5C386.4 74.1 255.4 76.2 172.3 153.3C156 168.4 135.8 145 150.5 131.2zM249.4 549.8C268.7 555.5 278.7 526.2 257.3 519.8C145.1 485.9 81.5 370.1 109.8 258.8C114.8 239.2 84.9 230.7 79.6 251.7C47.5 379.1 120.7 511.5 249.4 549.8zM397.5 547.8C519.4 507.6 590.4 380.9 561.9 256.8C557.4 237.1 527 243 531.9 264.7C556.1 372.4 494.8 482.6 388.7 518.1C367.5 525.1 378.3 554.1 397.5 547.8zM334.6 468.8L334.8 397C334.8 388.8 328.2 382.2 320 382.2C311.8 382.2 305.2 388.9 305.2 397L305 468.8C305 477 311.6 483.6 319.8 483.6C328 483.6 334.6 477 334.6 468.8zM405.6 199.8C407.7 290.7 410.3 331.7 320.1 332.3C227.6 331.6 233.2 288 234.6 199.8C234.6 178 202.1 180.2 202.1 199.8L202.1 271.4C202.1 340.7 262.8 362.3 320.1 361.5C377.4 362.3 438.1 340.7 438.1 271.4L438.1 199.8C438.1 180.2 405.6 178 405.6 199.8z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M96 96L96 544L544 544L544 96L96 96zM412.5 421.2L320 509.9L227.5 421.2L292 237.2L227.5 150.6L412.4 150.6L348 237.2L412.5 421.2z"/></svg>

After

Width:  |  Height:  |  Size: 437 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M230 180.9C230 204.3 213.6 230 157.5 230L87.4 230L108.4 141.2L176.2 141.2C218.3 141.2 230 164.5 230 180.9zM356.2 141.2L288.4 141.2L269.7 230L339.8 230C393.6 230 409.9 204.3 409.9 180.9C410 164.5 398.3 141.2 356.2 141.2zM152.8 272.1L85 272.1L64 360.9L134.1 360.9C190.2 360.9 206.6 337.5 206.6 311.8C206.6 295.5 194.9 272.1 152.8 272.1zM332.9 272.1L265.1 272.1L246.4 360.9L316.5 360.9C370.3 360.9 386.6 337.5 386.6 311.8C386.6 295.5 374.9 272.1 332.9 272.1zM522.2 218.3L454.4 218.3L435.7 307.1L505.8 307.1C559.6 307.1 575.9 283.7 575.9 258C576 241.7 564.3 218.3 522.2 218.3zM494.2 356.2L426.4 356.2L407.7 445L477.8 445C533.9 445 547.9 421.6 547.9 395.9C547.9 379.6 536.3 356.2 494.2 356.2zM304.8 410L237 410L218.3 498.8L288.4 498.8C344.5 498.8 358.5 473.1 358.5 449.7C358.6 433.4 346.9 410 304.8 410z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M542.6 286.7C540.8 278.7 535.8 271.3 530.1 268.2C528.3 267.2 517.1 266 505.1 265.5C485 264.6 482.8 264.2 476.4 260.5C466.3 254.6 463.6 248.2 463.5 231C463.4 198 449.7 167.3 422.6 139.7C403.3 120 381.7 106.7 357.1 99.2C351.2 97.4 338 96.8 293.8 96.3C224.4 95.5 209 96.9 185.4 106.3C141.9 123.5 110.7 160.1 99.3 206.9C97.2 215.7 96.7 229.8 96.2 310.8C95.6 412.3 96.3 427.2 102.6 447.3C118.2 496.9 162.5 533.6 207 541.6C221.8 544.3 404.3 544.9 423 542.4C455.5 538 481 524.9 504.9 500.5C522.2 482.8 533 463.7 540.1 438.4C545 420.8 544.6 295.6 542.6 286.7zM220.5 223.1C228.3 215.2 230.5 214.9 279.3 214.9C323.2 214.9 324.7 215 331.1 218.3C340.4 223 344.5 229.6 344.5 240.2C344.5 249.7 340.7 256.4 332.2 261.8C327.6 264.7 324.9 264.9 281.9 265.1C255.4 265.3 234.2 264.7 231.1 263.9C214.5 259.2 208.3 235.4 220.5 223.1zM412.3 422.9L397.4 425.3L319.9 426.2C251.8 427 232.6 425.8 229 424.2C221.9 421.1 215.2 412.5 214.1 404.8C213 397.5 216.7 387.5 222.3 382.4C229.4 376 232.5 375.8 319.6 375.7C409.2 375.6 408.7 375.6 417.2 383.5C429.3 394.8 426.7 414.7 412.3 422.9z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M258.4 260C263.2 255.1 264.6 254.9 294.8 254.9C322 254.9 322.9 255 326.9 257C332.7 259.9 335.2 264 335.2 270.6C335.2 276.5 332.8 280.6 327.6 284C324.8 285.8 323.1 285.9 296.5 286.1C280.1 286.2 267 285.9 265 285.3C254.7 282.4 250.9 267.6 258.4 260zM319.8 354.5C265.9 354.5 264 354.7 259.6 358.6C256.1 361.7 253.9 368 254.5 372.5C255.2 377.2 259.3 382.6 263.7 384.5C265.9 385.5 277.8 386.2 320 385.7L367.9 385.1L377.1 383.6C386.1 378.5 387.6 366.2 380.2 359.2C374.9 354.5 375.2 354.5 319.8 354.5zM543.2 484.6C539.7 513 520.2 535 492.1 542.1C484.9 543.9 482.4 544 319.2 543.9C161.4 543.9 153.3 543.8 147.2 542.1C138.8 539.9 131.6 536.6 124.9 532.1C119.3 528.3 111 520.3 107.9 515.7C104.1 510.1 99.7 500.4 97.9 493.7C96.1 487 96 484.3 96 320.3C96 157.2 96 153.7 97.8 146.6C104.1 121.9 123.7 103 149 97.4C156.3 95.8 481.1 95.5 489 97.1C510.2 101.4 526.9 114.2 536.6 133.5C544.3 148.8 543.6 132 543.9 314.1C544.1 429.9 543.9 478.6 543.2 484.6zM457.8 299.4C456.7 294.4 453.6 289.8 450.1 287.9C449 287.3 442.1 286.6 434.6 286.2C422.2 285.6 420.8 285.4 416.8 283.1C410.6 279.5 408.9 275.5 408.8 264.8C408.8 244.4 400.3 225.4 383.5 208.3C371.5 196.1 358.2 187.8 342.9 183.2C339.3 182.1 331.1 181.7 303.7 181.4C260.8 180.9 251.2 181.8 236.6 187.6C209.6 198.3 190.3 221 183.2 250C181.9 255.4 181.6 264.2 181.3 314.3C180.9 377.1 181.3 386.4 185.3 398.8C195 429.5 222.4 452.2 249.9 457.2C259.1 458.9 372.1 459.3 383.6 457.7C403.7 455 419.5 446.9 434.3 431.8C445 420.9 451.7 409 456.1 393.3C459.3 382.4 459 304.9 457.8 299.4z"/></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M439.8 358.7C436.5 358.3 433.1 357.9 429.8 357.4C433.2 357.8 436.5 358.3 439.8 358.7zM320 291.1C293.9 240.4 222.9 145.9 156.9 99.3C93.6 54.6 69.5 62.3 53.6 69.5C35.3 77.8 32 105.9 32 122.4C32 138.9 41.1 258 47 277.9C66.5 343.6 136.1 365.8 200.2 358.6C203.5 358.1 206.8 357.7 210.2 357.2C206.9 357.7 203.6 358.2 200.2 358.6C106.3 372.6 22.9 406.8 132.3 528.5C252.6 653.1 297.1 501.8 320 425.1C342.9 501.8 369.2 647.6 505.6 528.5C608 425.1 533.7 372.5 439.8 358.6C436.5 358.2 433.1 357.8 429.8 357.3C433.2 357.7 436.5 358.2 439.8 358.6C503.9 365.7 573.4 343.5 593 277.9C598.9 258 608 139 608 122.4C608 105.8 604.7 77.7 586.4 69.5C570.6 62.4 546.4 54.6 483.2 99.3C417.1 145.9 346.1 240.4 320 291.1z"/></svg>

After

Width:  |  Height:  |  Size: 1006 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M356.9 324L449.5 220.7L303.6 64L303.6 270.3L217.4 184.2L186 215.6L294.1 324L186 432.4L217.4 463.8L303.6 377.7L306.3 576L454.8 427.4L356.9 324zM397.8 221L347.8 271L347.5 170.7L397.8 221zM347.8 377L397.8 427L347.5 477.3L347.8 377z"/></svg>

After

Width:  |  Height:  |  Size: 539 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M388.6 235.1L345.7 278L345.4 192L388.6 235.1zM345.4 454.9L388.5 411.8L345.6 368.9L345.4 454.9zM512 323.4C512 529 440.1 576 326.9 576C213.7 576 128 529 128 323.4C128 117.8 211.4 64 324.6 64C437.8 64 512 117.9 512 323.4zM353.5 323.4L432.9 234.8L307.8 100.5L307.8 277.4L234 203.6L207 230.5L299.7 323.5L207 416.5L233.9 443.4L307.7 369.6L310 539.6L437.4 412.1L353.5 323.4z"/></svg>

After

Width:  |  Height:  |  Size: 678 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M365.5 265.4C365.5 243.3 349.9 231.1 322.5 231.1L272.1 231.1L272.1 302.3L314.6 302.3C347.4 302.2 365.5 289 365.5 265.4zM549 252.6C539.5 221.7 538.1 183.8 539.2 154.5C540.3 124 516.5 96 484.5 96L155.7 96C123.6 96 99.9 124.1 101 154.5C102 183.8 100.7 221.7 91.2 252.6C81.6 283.6 65.5 303.2 39 305.7L39 334.2C65.4 336.7 81.6 356.3 91.2 387.3C100.7 418.2 102.1 456.1 101 485.4C99.9 515.9 123.7 543.9 155.7 543.9L484.4 543.9C516.5 543.9 540.2 515.8 539.1 485.4C538.1 456.1 539.4 418.2 548.9 387.3C558.5 356.3 574.6 336.7 601 334.2L601 305.7C574.7 303.2 558.5 283.6 549 252.6zM332.2 439.1L234.3 439.1L234.3 200.8L331.7 200.8C375 200.8 403.4 224.2 403.4 260.2C403.4 285.5 384.3 308.1 359.9 312L359.9 313.3C393.1 316.9 415.4 339.9 415.4 371.6C415.4 413.7 384.1 439.1 332.2 439.1zM322.2 330.4L272.1 330.4L272.1 408.8L324.4 408.8C358.6 408.8 376.7 395.1 376.7 369.3C376.7 343.6 358.1 330.4 322.2 330.4z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M86.3 261.8C78.3 261.7 70.4 263.5 63.2 266.9C56 270.3 49.7 275.5 44.8 281.8L44.8 219.9C44.8 217.7 43.9 215.6 42.4 214.1C40.9 212.6 38.8 211.7 36.6 211.7L8.2 211.7C6 211.7 3.9 212.6 2.4 214.1C.9 215.6 0 217.8 0 220L0 397.6C0 398.7 .2 399.7 .6 400.7C1 401.7 1.6 402.6 2.4 403.4C3.2 404.2 4.1 404.8 5.1 405.2C6.1 405.6 7.2 405.8 8.2 405.8L36.6 405.8C37.7 405.8 38.7 405.6 39.7 405.2C40.7 404.8 41.6 404.2 42.4 403.4C43.2 402.6 43.8 401.7 44.2 400.7C44.6 399.7 44.8 398.6 44.8 397.6L44.8 389.5C56.4 402.9 70.7 409.3 86.4 409.3C121 409.3 148.3 383.1 148.3 335.5C148.3 289.6 121.3 261.9 86.4 261.9zM71.5 369.7C61.9 369.7 50.3 364.8 44.8 357.2L44.8 314.2C50.3 306.6 62 301.4 71.5 301.4C89.2 301.4 102.6 314.5 102.6 335.4C102.6 356.6 89.2 369.7 71.5 369.7zM227.9 310.7C218.3 310.7 210.5 318.5 210.5 328.1C210.5 337.7 218.3 345.5 227.9 345.5C237.5 345.5 245.3 337.7 245.3 328.1C245.3 318.5 237.5 310.7 227.9 310.7zM274 220.7L274 176C276.8 174.8 279.2 172.7 280.6 170C282 167.3 282.5 164.2 281.9 161.1C281.3 158 279.7 155.4 277.3 153.4C274.9 151.4 271.9 150.4 268.9 150.4C265.9 150.4 262.8 151.5 260.5 153.4C258.2 155.3 256.5 158.1 255.9 161.1C255.3 164.1 255.8 167.2 257.2 170C258.6 172.8 261 174.8 263.8 176L263.8 220.7C235.8 222 209.4 234.3 190.2 254.8C171 275.3 160.7 302.5 161.4 330.6C162.1 358.7 173.7 385.3 193.8 404.9C213.9 424.5 240.8 435.5 268.9 435.5C297 435.5 323.9 424.5 344 404.9C364.1 385.3 375.7 358.6 376.4 330.6C377.1 302.6 366.7 275.3 347.6 254.8C328.5 234.3 302.1 222 274 220.7zM360 328.1C360 358.6 319.2 383.4 268.9 383.4C218.6 383.4 177.8 358.7 177.8 328.1C177.8 297.5 218.6 272.8 268.9 272.8C319.2 272.8 360 297.5 360 328.1L360 328.1zM309.8 345.5C313.2 345.5 316.6 344.5 319.5 342.6C322.4 340.7 324.6 338 325.9 334.8C327.2 331.6 327.6 328.1 326.9 324.7C326.2 321.3 324.6 318.2 322.1 315.8C319.6 313.4 316.6 311.7 313.2 311C309.8 310.3 306.3 310.7 303.1 312C299.9 313.3 297.2 315.5 295.3 318.4C293.4 321.3 292.4 324.6 292.4 328.1C292.4 332.7 294.2 337.1 297.5 340.4C300.8 343.7 305.2 345.5 309.8 345.5L309.8 345.5zM580.7 314.5C565.9 311.9 558.3 310.7 558.3 304.6C558.3 299.1 565.6 294.7 576 294.7C588.2 294.8 600.2 298.3 610.5 304.8C612.3 306 614.5 306.4 616.7 305.9C618.9 305.4 620.7 304.2 621.8 302.3C621.9 302.2 621.9 302.1 622 302L630.6 287.1C631.7 285.2 632 283 631.4 281C630.8 279 629.5 277.1 627.7 276C612 266.6 594 261.7 575.7 261.9C536.7 261.9 515.5 283.4 515.5 308.1C515.5 344.4 549.2 350 573.1 353.7C586.5 356 597.2 358.1 597.2 364.7C597.2 371.1 591.7 375.5 578.3 375.5C564.7 375.5 547.3 369.3 535.7 361.9C534.8 361.3 533.8 360.9 532.7 360.7C531.6 360.5 530.6 360.5 529.5 360.8C528.4 361.1 527.4 361.5 526.6 362.1C525.8 362.7 525 363.5 524.4 364.4C524.4 364.5 524.3 364.5 524.3 364.6L514.1 381.5C513 383.3 512.7 385.5 513.1 387.5C513.5 389.5 514.8 391.4 516.6 392.5C531.8 402.8 554.3 409.2 576 409.2C616.4 409.2 640 389.4 640 362.7C640 324.6 604.5 318.8 580.7 314.4zM484.8 375.3C484.3 373.3 483 371.6 481.2 370.5C479.4 369.4 477.3 369 475.3 369.4C473.9 369.7 472.5 369.8 471.1 369.8C463.3 369.8 458.6 363.7 458.6 355.6L458.6 304.4L478.9 304.4C481.1 304.4 483.1 303.5 484.7 302C486.3 300.5 487.1 298.4 487.1 296.2L487.1 273.5C487.1 271.3 486.2 269.3 484.7 267.7C483.2 266.1 481.1 265.3 478.9 265.3L458.6 265.3L458.6 235.1C458.6 232.9 457.7 230.9 456.2 229.3C454.7 227.7 452.6 226.9 450.4 226.9L422.2 226.9C420 226.9 418 227.8 416.4 229.3C414.8 230.8 414 232.9 414 235.1L414 265.3L398.9 265.3C397.8 265.3 396.8 265.5 395.8 265.9C394.8 266.3 393.9 266.9 393.2 267.7C392.5 268.5 391.8 269.4 391.4 270.3C391 271.2 390.8 272.3 390.8 273.4L390.8 296.1C390.8 297.2 391 298.2 391.4 299.2C391.8 300.2 392.4 301.1 393.2 301.8C394 302.5 394.9 303.2 395.8 303.6C396.7 304 397.8 304.2 398.9 304.2L414 304.2L414 367.9C414 394.9 429.4 409.2 457.9 409.2C470.1 409.2 479.3 407 485.5 403.8C487.1 403 488.4 401.6 489.2 399.9C490 398.2 490.1 396.3 489.7 394.5L484.7 375.2z"/></svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.0 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M241.6 64L398.6 64L443.3 114.8C443.3 114.8 482.6 103.9 501.1 122.4C519.6 140.9 534.9 157.3 534.9 157.3L522.9 186.8L538.2 230.5C538.2 230.5 493.3 400.7 488.1 421.5C477.7 462.4 470.7 478.3 441.2 499C411.7 519.7 358.3 555.8 349.6 561.2C347.7 562.4 345.7 563.7 343.7 565.1C336.2 570.2 327.9 575.9 320.2 575.9C312.5 575.9 304.1 570.2 296.7 565.1C294.7 563.7 292.7 562.3 290.8 561.2C282.1 555.7 228.7 519.7 199.2 499C169.7 478.3 162.7 462.4 152.3 421.5C147 400.7 102.2 230.5 102.2 230.5L117.5 186.8L105.3 157.3C105.3 157.3 120.6 140.9 139.1 122.4C157.6 103.9 196.9 114.8 196.9 114.8L241.6 64zM320.1 471.6C323.8 471.6 329 466.9 333.1 463.2C333.7 462.7 334.3 462.1 334.8 461.7C339 458 382.6 424.2 385.8 421.9C389 419.6 391.2 415.4 387.7 413.2C384.9 411.5 377.7 407.7 367.4 402.4C364.4 400.8 361.1 399.2 357.7 397.4C342.3 389.4 323.2 382.7 320.2 382.7C317.2 382.7 298.1 389.5 282.7 397.4C279.2 399.2 276 400.9 273 402.4C262.7 407.7 255.4 411.5 252.7 413.2C249.1 415.4 251.3 419.6 254.6 421.9C257.9 424.2 301.4 458 305.6 461.7C306.1 462.2 306.7 462.7 307.3 463.2C311.4 466.9 316.6 471.6 320.3 471.6L320.1 471.6zM320.1 305.9C324.8 305.9 337.7 302.9 346.5 300.9L348.5 300.4C356.3 298.6 355.8 294.1 354.9 287.4C354.8 286.6 354.7 285.8 354.6 285C354 278.9 348.8 251.9 345.5 234.7C344.4 228.9 343.5 224.2 343.1 221.8C341.6 213.7 342.5 212.4 343.8 210.5C344 210.2 344.3 209.8 344.5 209.4C345.9 207.1 360.5 203.2 372.4 199.9C374.9 199.2 377.2 198.6 379.3 198C389.9 195 411.7 197.4 423.5 198.6C425.3 198.8 426.9 199 428.2 199.1C437.8 200 438.6 201.4 435.4 202.9C433.1 204 419.2 209.2 406.7 213.8C402 215.6 397.5 217.3 393.9 218.6C392.4 219.1 390.9 219.7 389.4 220.3C376.9 224.9 362.2 230.3 360.5 239.7C359 248 365.7 259.6 371.8 270C373.4 272.8 375 275.5 376.4 278.1C382.7 290 382.9 291.4 382.5 296.2C382.1 300.1 368 308.9 360.1 313.8C358.3 314.9 356.8 315.9 355.9 316.5C355.1 317 353.8 317.9 352.1 318.9C343.5 324.1 325.8 334.9 325.8 341.4C325.8 349.2 350.4 369.5 358.2 374.6C366 379.7 387.1 390.7 396.1 392.4C405.1 394.1 419.1 383.9 427.3 368.6C435 354.2 429 340.1 424.1 328.6L423.2 326.4C418.7 315.8 425.1 309.4 429.4 305.1C429.9 304.6 430.4 304.1 430.8 303.7L473.8 258C475.1 256.7 476.3 255.4 477.5 254.2C483.3 248.5 488.3 243.7 488.3 231.4C488.3 216.5 430.8 146.9 430.8 146.9C430.8 146.9 382.3 156.2 375.7 156.2C370.5 156.2 360.4 152.7 349.9 149.1C347.2 148.2 344.5 147.2 341.9 146.4C328.9 142.1 320.1 142 320.1 142C320.1 142 311.4 142 298.3 146.4C295.6 147.3 292.9 148.2 290.3 149.1C279.8 152.7 269.7 156.2 264.5 156.2C258 156.2 209.4 146.9 209.4 146.9C209.4 146.9 151.9 216.5 151.9 231.4C151.9 243.7 156.8 248.5 162.7 254.2C163.9 255.4 165.2 256.6 166.4 258L209.5 303.8C209.9 304.3 210.4 304.7 210.9 305.2C215.2 309.5 221.5 315.9 217.1 326.5L216.2 328.7C211.3 340.2 205.2 354.3 213 368.7C221.2 384 235.2 394.2 244.2 392.5C253.2 390.8 274.3 379.8 282.1 374.7C289.9 369.6 314.5 349.3 314.5 341.5C314.5 335 296.8 324.2 288.2 319C286.5 318 285.1 317.1 284.4 316.6C283.5 316 282 315.1 280.2 313.9C272.3 309 258.2 300.2 257.8 296.3C257.4 291.5 257.5 290.1 263.9 278.2C265.2 275.7 266.8 272.9 268.5 270.1C274.5 259.7 281.3 248.1 279.8 239.8C278.1 230.4 263.4 225 250.9 220.4C249.3 219.8 247.8 219.3 246.4 218.7C242.8 217.3 238.3 215.6 233.6 213.9L233.5 213.9C221 209.2 207.1 204 204.8 203C201.6 201.5 202.5 200.2 212 199.2C213.3 199.1 214.9 198.9 216.7 198.7C228.5 197.4 250.3 195.1 260.9 198.1C263 198.7 265.3 199.3 267.8 200C279.7 203.2 294.3 207.2 295.7 209.5C295.9 209.9 296.2 210.2 296.4 210.6C297.7 212.5 298.6 213.8 297.1 221.9C296.7 224.3 295.8 229 294.7 234.8C291.4 252 286.2 279 285.6 285.1C285.5 285.9 285.4 286.8 285.3 287.5C284.5 294.2 283.9 298.7 291.7 300.5L293.7 301C302.5 303 315.5 306 320.1 306L320.1 305.9z"/></svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M438.4 306.6C466.1 292.4 483.8 267.2 479.7 225.3C474.3 167.9 427.2 148.7 364.9 143.4L364.9 64L316.4 64L316.4 141.2C303.8 141.2 290.9 141.5 278 141.8L278 64L229.5 64L229.5 143.4C211.7 143.9 190.9 143.7 132.1 143.4L132.1 195.1C170.4 194.4 190.5 192 195.1 216.5L195.1 433.9C192.2 453.4 176.6 450.6 141.8 450L132 507.7C220.5 507.7 229.4 508 229.4 508L229.4 576L277.9 576L277.9 508.9C291.1 509.2 304.1 509.2 316.3 509.2L316.3 575.9L364.8 575.9L364.8 507.9C446.1 503.5 500.4 483 507.7 406.4C513.4 345 484.4 317.5 438.4 306.5zM278.8 198.6C306.2 198.6 391.9 190.1 391.9 247.1C391.9 301.6 306.2 295.3 278.8 295.3L278.8 198.6zM278.8 450.4L278.8 343.9C311.6 343.9 411.9 334.8 411.9 397.2C411.9 457.4 311.5 450.5 278.8 450.5z"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M524.2 444.7L327.7 542.5C325.4 543.5 322.9 544 320.4 544C317.9 544 315.4 543.5 313.1 542.5L116.5 444.7C112.5 442.7 112.5 439.4 116.5 437.4L163.6 414C165.9 413 168.4 412.5 170.9 412.5C173.4 412.5 175.9 413 178.2 414L313 481C315.3 482 317.8 482.5 320.3 482.5C322.8 482.5 325.3 482 327.6 481L462.4 414C464.7 413 467.2 412.5 469.7 412.5C472.2 412.5 474.7 413 477 414L524.1 437.4C528.1 439.4 528.1 442.6 524.1 444.6zM524.2 308.2L477.1 284.8C474.8 283.8 472.3 283.3 469.8 283.3C467.3 283.3 464.8 283.8 462.5 284.8L327.7 351.8C325.4 352.8 322.9 353.3 320.4 353.3C317.9 353.3 315.4 352.8 313.1 351.8L178.3 284.7C176 283.7 173.5 283.2 171 283.2C168.5 283.2 166 283.7 163.7 284.7L116.5 308.1C112.5 310.1 112.5 313.4 116.5 315.4L313 413.2C315.3 414.2 317.8 414.7 320.3 414.7C322.8 414.7 325.3 414.2 327.6 413.2L524.1 315.4C528.1 313.4 528.1 310.1 524.1 308.1zM116.5 194.4L313 284.7C317.7 286.6 323 286.6 327.7 284.7L524.2 194.4C528.2 192.5 528.2 189.5 524.2 187.7L327.7 97.4C323 95.5 317.7 95.5 313 97.4L116.5 187.7C112.5 189.5 112.5 192.6 116.5 194.4z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M96 96L96 224L224 224L224 96L96 96zM216 216L104 216L104 104L216 104L216 216zM256 96L256 224L384 224L384 96L256 96zM376 216L264 216L264 104L376 104L376 216zM416 96L416 224L544 224L544 96L416 96zM536 216L424 216L424 104L536 104L536 216zM96 256L96 384L224 384L224 256L96 256zM216 376L104 376L104 264L216 264L216 376zM256 256L256 384L384 384L384 256L256 256zM376 376L264 376L264 264L376 264L376 376zM416 256L416 384L544 384L544 256L416 256zM536 376L424 376L424 264L536 264L536 376zM96 416L96 544L224 544L224 416L96 416zM216 536L104 536L104 424L216 424L216 536zM256 416L256 544L384 544L384 416L256 416zM376 536L264 536L264 424L376 424L376 536zM416 416L416 544L544 544L544 416L416 416z"/></svg>

After

Width:  |  Height:  |  Size: 990 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M320.2 96C165.5 96 40 196.3 40 320C40 443.7 165.5 544 320.2 544C474.9 544 600.4 443.7 600.4 320C600.4 196.3 474.9 96 320.2 96zM234.8 453.2L96.3 454.6L173.5 163.9L306.9 163.9C370.1 163.9 391.8 192.5 384.9 236.7C384.5 239 384 241.3 383.4 243.6C377.8 242.3 372 241.7 366.2 241.7C323.9 241.7 289.5 275.6 289.5 317.4C289.5 354.5 316.6 385.4 352.4 391.9C334.2 429.1 296.2 452.8 234.7 453.4zM390.2 271.1L422.2 271.1L400 361.4L364.6 361.4L353.4 325.8L345.6 361.4L307.8 361.4L334.4 271.1L365.7 271.1L380.7 307.9L390.1 271.1zM536.1 453.2L339 453.2L354.8 392C358.6 392.6 362.4 392.8 366.3 392.8C408.6 392.8 443 358.9 443 317.2C443 284.6 422 256.7 392.6 246.1L413.9 163.7L506.4 163.7L453.4 369.1L557.3 369.1L536.1 453.2zM243.9 333.4L219.2 333.4L205.4 389.9L230.1 389.9C246.2 389.9 262.2 386.7 268 363.3C273.6 341 260 333.5 243.9 333.5zM265.2 234L243.9 234L232.2 281.7L253.6 281.7C271.6 281.7 289 267.1 292.8 251.6C297.4 232.7 283.3 234 265.2 234z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M320 214.7L362.9 375.4L277.1 375.4L320 214.7zM544 144L544 496C544 522.5 522.5 544 496 544L144 544C117.5 544 96 522.5 96 496L96 144C96 117.5 117.5 96 144 96L496 96C522.5 96 544 117.5 544 144zM478.7 469.3L384.2 170.6L255.8 170.6L161.3 469.3L252 469.3L363.7 377.7L387.9 469.3L478.7 469.3z"/></svg>

After

Width:  |  Height:  |  Size: 596 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M447.8 415.7C450.3 413.2 553 323.3 553 323.3L535.5 315.8C525.5 310.9 528.1 304.3 530.5 298.4C532.9 290.8 550.6 231.1 550.6 231.1C550.6 231.1 502.9 241.1 492.9 243.6C485.4 246 482.9 241.1 480.4 236.1C477.9 231.1 465.4 203.7 465.4 203.7C465.4 203.7 412.8 263.6 410.3 266C400.3 273.5 390.2 266 392.7 256C392.7 246 420.3 126.4 420.3 126.4C420.3 126.4 390.2 143.8 380.2 148.8C372.7 153.8 367.6 153.8 362.6 143.8C357.5 136.3 319.9 64 319.9 64C319.9 64 282.4 136.3 277.4 143.8C272.4 153.8 267.4 153.8 259.8 148.8C249.8 143.8 219.7 126.4 219.7 126.4C219.7 126.4 247.3 246 247.3 256C249.8 266 239.8 273.5 229.7 266C227.2 263.5 174.6 203.7 174.6 203.7C174.6 203.7 162.1 231 159.6 236C157.1 241 154.6 245.9 147.1 243.5C137 241 89.4 231 89.4 231C89.4 231 107 290.7 109.5 298.3C111.9 304.3 114.5 310.8 104.5 315.7L87 323.3C87 323.3 189.6 413.2 192.2 415.7C197.3 420.7 202.2 423.2 197.3 438.2C192.2 453.2 187.2 473.3 187.2 473.3C187.2 473.3 282.4 453.2 292.5 450.7C301.2 449.8 310.8 453.2 310.8 463.2C310.8 473.2 305 576 305 576L335 576C335 576 329.2 473.3 329.2 463.2C329.2 453.1 338.7 449.8 347.6 450.7C357.6 453.2 452.8 473.3 452.8 473.3C452.8 473.3 447.8 453.2 442.8 438.2C437.8 423.2 442.8 420.7 447.8 415.7z"/></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M536.3 160.9C526.9 134.4 506 113.5 479.5 103.9C455.4 96 433.2 96 387.9 96L252 96C207.2 96 184.8 96 160.7 103.5C134.2 113.1 113.3 134 103.7 160.5C96 184.8 96 207.2 96 252.2L96 387.8C96 433 96 455.2 103.5 479.3C113.1 505.8 134 526.7 160.5 536.3C184.8 544 207.2 544 252.1 544L387.8 544C432.8 544 455.2 544 479.4 536.3C505.9 526.7 526.8 505.8 536.4 479.3C544.1 455 544.1 432.6 544.1 387.8L544.1 252.3C544.1 207.3 544.1 184.9 536.4 160.8zM419.1 249.4L393.3 270.5C391 272.4 387.8 272 386 269.6C372.8 253.4 352.3 244.2 329.9 244.2C304.9 244.2 289.3 255.1 289.3 270.4C288.9 283.2 301 290 338.4 298.1C385.6 308.1 407.1 327.8 407.1 360.8C407.1 402.2 373.4 432.7 320.7 436.1L315.6 460.6C315.2 462.9 313 464.7 310.5 464.7L269.9 464.7C266.5 464.7 264.1 461.5 264.8 458.3L271.2 431C245.2 423.5 224 409 211.9 391.3C210.4 389 210.8 386 213 384.3L241.2 362.3C243.5 360.4 247 361 248.7 363.4C263.6 384.3 286.7 396.7 314.4 396.7C339.4 396.7 358.2 384.5 358.2 367C358.2 353.6 348.8 347.4 317 340.8C262.8 329.1 241.2 309 241.2 275.9C241.2 237.5 273.4 208.7 322.1 204.9L327.4 179.5C327.8 177.2 330 175.4 332.5 175.4L372.4 175.4C375.6 175.4 378.2 178.4 377.5 181.6L371.3 210C392.2 216.4 409.3 227.9 420 242.2C421.7 244.3 421.3 247.5 419.1 249.2z"/></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.2 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M32 496C32 522.5 53.5 544 80 544L560 544C586.5 544 608 522.5 608 496L608 494.9L546.3 494.9L514.4 459.8L482.5 494.9L278.8 494.9L278.8 331.1L213 331.1L294.7 146.4L373.3 146.4L401.4 209.6L401.4 146.4L498.6 146.4L515.5 194L532.5 146.4L608 146.4L608 144C608 117.5 586.5 96 560 96L80 96C53.5 96 32 117.5 32 144L32 496zM472.4 474.3L514.6 428L556.6 474.3L608 474.3L540 402.2L608 330.1L557.4 330.1L515.4 376.8L473.9 330.1L422.5 330.1L490 402.6L422.6 474.2L422.6 441.1L339.6 441.1L339.6 418.9L420.5 418.9L420.5 386.6L339.6 386.6L339.6 364.2L422.6 364.2L422.6 331.1L300.6 331.1L300.6 474.3L472.4 474.3zM568.7 402.3L608 444.2L608 360.9L568.7 402.3zM532.4 310.3L569.3 209.7L569.3 310.3L608 310.3L608 167L547.8 167L515.6 256.3L483.7 167L422.5 167L422.5 310.1L359.3 167L308.1 167L245.7 310.3L288.7 310.3L300.6 281.6L366.5 281.6L378.5 310.3L461.2 310.3L461.2 210L498 310.3L532.4 310.3zM314 249.4L333.5 202.5L352.9 249.4L314 249.4z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M334.2 282.4C334.2 299.6 323.7 309.5 305.2 309.5L280.9 309.5L280.9 255.3L305.3 255.3C323.7 255.3 334.2 265.1 334.2 282.4zM381.7 345C381.7 353.3 388.9 358.7 400.2 358.7C414.6 358.7 425.4 349.6 425.4 336.8L425.4 329.1L401.9 330.6C388.6 331.5 381.7 336.4 381.7 345zM608 143L608 495C608 521.5 586.5 543 560 543L80 543C53.5 543 32 521.5 32 495L32 143C32 116.5 53.5 95 80 95L560 95C586.5 95 608 116.5 608 143zM159.8 261.2C168.2 261.9 176.6 257 181.9 250.8C187.1 244.4 190.5 235.8 189.6 227.1C182.2 227.4 173 232 167.7 238.4C162.9 243.9 158.8 252.8 159.8 261.2zM220.4 335.7C220.2 335.5 200.8 328.1 200.6 305.7C200.4 287 215.9 278 216.6 277.5C207.8 264.5 194.2 263.1 189.5 262.8C177.3 262.1 166.9 269.7 161.1 269.7C155.2 269.7 146.4 263.1 136.8 263.3C124.3 263.5 112.6 270.6 106.3 281.9C93.2 304.5 102.9 337.9 115.6 356.3C121.8 365.4 129.3 375.4 139.1 375C148.4 374.6 152.1 369 163.3 369C174.6 369 177.8 375 187.6 374.9C197.8 374.7 204.1 365.8 210.4 356.7C217.3 346.3 220.2 336.3 220.4 335.7zM355.8 282.3C355.8 255.7 337.3 237.5 310.9 237.5L259.7 237.5L259.7 373.9L280.9 373.9L280.9 327.3L310.2 327.3C337 327.3 355.8 308.9 355.8 282.3zM445.8 306C445.8 286.3 430 273.6 405.8 273.6C383.3 273.6 366.7 286.5 366.1 304.1L385.2 304.1C386.8 295.7 394.6 290.2 405.2 290.2C418.2 290.2 425.4 296.2 425.4 307.4L425.4 314.9L399 316.5C374.4 318 361.1 328.1 361.1 345.6C361.1 363.3 374.8 375 394.5 375C407.8 375 420.1 368.3 425.7 357.6L426.1 357.6L426.1 374L445.7 374L445.7 306L445.8 306zM548 274.9L526.5 274.9L501.6 355.5L501.2 355.5L476.3 274.9L454 274.9L489.9 374.2L488 380.2C484.8 390.4 479.5 394.4 470.1 394.4C468.4 394.4 465.2 394.2 463.9 394.1L463.9 410.5C465.1 410.9 470.4 411 472 411C492.7 411 502.4 403.1 510.9 379.2L548 274.9z"/></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M271.7 143.9C174.6 143.9 95.9 222.6 95.9 319.7C95.9 416.8 174.6 495.5 271.7 495.5C368.8 495.5 447.5 416.8 447.5 319.7C447.5 222.6 368.8 143.9 271.7 143.9zM231.8 423.5C190.1 407.6 160.4 367.1 160.4 319.7C160.4 272.3 190.1 231.8 231.8 215.6L231.8 423.5zM311.6 423.8L311.6 215.6C353.3 231.8 383 272.3 383 319.7C383 367.1 353.3 407.6 311.6 423.8zM560 96L80 96C53.5 96 32 117.5 32 144L32 496C32 522.5 53.5 544 80 544L560 544C586.5 544 608 522.5 608 496L608 144C608 117.5 586.5 96 560 96zM361.7 512L271.4 512C165.2 512 77.6 426.5 77.6 321.8C77.6 207.2 165.2 128 271.4 128L361.7 128C466.7 128 562.4 207.2 562.4 321.8C562.4 426.5 466.7 512 361.7 512z"/></svg>

After

Width:  |  Height:  |  Size: 953 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M552.4 260.1C552.4 252.2 546.9 248 536.8 248L531.9 248L531.9 272.9L536.6 272.9C546.9 272.9 552.4 268.5 552.4 260.1zM560 96L80 96C53.5 96 32 117.5 32 144L32 496C32 522.5 53.5 544 80 544L560 544C586.5 544 608 522.5 608 496L608 144C608 117.5 586.5 96 560 96zM515.9 234.9C538.5 234.9 568.8 230.8 568.8 259.3C568.8 271.9 562.2 280 550.1 282.5L575.9 316.9L556.3 316.9L534.1 284.1L531.9 284.1L531.9 316.9L515.9 316.9L515.9 234.9zM460 235L505.3 235L505.3 249L476 249L476 267.2L504.3 267.2L504.3 281L476 281L476 303.2L505.3 303.2L505.3 317L460 317L460 235zM391.3 235L413.2 290.2L435.4 235L452.9 235L417.4 319.2L408.8 319.2L373.8 235L391.3 235zM335.4 321.2C310.8 321.2 290.8 301.2 290.8 276.6C290.8 252 310.8 232 335.4 232C360 232 380 252 380 276.6C380 301.2 360 321.2 335.4 321.2zM286.1 238.1L286.1 257.1C266 237 239.3 252.4 239.3 276.1C239.3 301.1 266.8 314.6 286.1 295.3L286.1 314.3C256.4 328.6 222.8 308.6 222.8 276.1C222.8 244.9 255.9 223.1 286.1 238.1zM188.9 304.4C200.3 304.4 211.3 289.1 185.6 280C170.6 274.5 165.4 268.6 165.4 257.3C165.4 234.1 196 225.9 215.1 243L206.7 253.8C196.3 242.2 181.8 247.6 181.8 256.3C181.8 260.7 184.5 263.2 194.1 266.6C212.3 273.2 217.7 279.1 217.7 292.2C217.7 321.7 178.9 329.6 161.1 303.5L171.4 293.6C175.1 300.7 181.3 304.4 188.9 304.4zM87.4 317L64 317L64 235L87.4 235C113.5 235 131.5 252 131.5 276.1C131.5 294.6 118.3 317 87.4 317zM154.9 317L138.9 317L138.9 235L154.9 235L154.9 317zM576 497C576 505.2 569.2 512 561 512L160 512C349.6 476.4 542.7 372.8 576 352L576 497zM106.1 255.6C100.9 250.7 94.5 249 84.2 249L80 249L80 303.2L84.2 303.2C94.5 303.2 101.2 301.2 106.1 296.8C111.8 291.6 115 284 115 276.1C115 268.2 111.8 260.6 106.1 255.6z"/></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M463.5 308.3L463.5 276C504.7 276 502 276.2 502 276.2C509.3 277.5 515.3 283.5 515.3 292.2C515.3 301 509.3 306.7 502 308C500.8 308.4 498.7 308.3 463.5 308.3zM506.3 328.5C503.5 327.8 503 328 463.5 328L463.5 363C503.1 363 503.5 363.2 506.3 362.5C513.8 361 519.8 354.5 519.8 345.5C519.8 336.8 513.8 330 506.3 328.5zM608 144L608 496C608 522.5 586.5 544 560 544L80 544C53.5 544 32 522.5 32 496L32 144C32 117.5 53.5 96 80 96L560 96C586.5 96 608 117.5 608 144zM214 256.3L157 256.3C157 323.4 167.7 366 121.2 366C101.7 366 82.4 360.3 64 351.2L64 379.2C94 387.5 132 387.5 132 387.5C229.9 387.5 214 339.8 214 256.3zM392.5 260.8C329.1 244.8 227.5 245.9 227.5 320.1C227.5 397.2 335.7 393.7 392.5 379.3L392.5 351C344.9 375.7 285 373 285 320C285 267 344.8 264.4 392.5 288.8L392.5 260.8zM576 350.5C576 332 559.5 320 538 318.5L538 317.7C557.5 315 568.3 302.2 568.3 287.5C568.3 268.5 552.6 257.5 531.3 256.5C531.3 256.5 537.6 256.2 411 256.2L411 383.7L533.7 383.7C558 383.8 576 370.8 576 350.5z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 4.9 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M218.3 322.2C218.3 334.4 208.6 343.7 196.3 343.7C187.1 343.7 180.3 338.5 180.3 328.7C180.3 316.5 189.8 306.7 202 306.7C211.3 306.7 218.3 312.4 218.3 322.2zM112.5 273.7L107.8 273.7C106.3 273.7 104.8 274.7 104.6 276.4L100.3 303.1L108.5 302.8C119.5 302.8 128 301.3 130 288.6C132.3 275.2 123.8 273.7 112.5 273.7zM396.5 273.7L392 273.7C390.2 273.7 389 274.7 388.8 276.4L384.6 303.1L392.6 302.8C405.6 302.8 414.6 299.8 414.6 284.8C414.5 274.2 405 273.7 396.5 273.7zM608 144L608 496C608 522.5 586.5 544 560 544L80 544C53.5 544 32 522.5 32 496L32 144C32 117.5 53.5 96 80 96L560 96C586.5 96 608 117.5 608 144zM160.3 279.4C160.3 258.4 144.1 251.4 125.6 251.4L85.6 251.4C83.1 251.4 80.6 253.4 80.4 256.1L64 358.2C63.7 360.2 65.2 362.2 67.2 362.2L86.2 362.2C88.9 362.2 91.4 359.3 91.7 356.5L96.2 329.9C97.2 322.7 109.4 325.2 114.2 325.2C142.8 325.2 160.3 308.2 160.3 279.4zM244.5 288.2L225.5 288.2C221.7 288.2 221.5 293.7 221.3 296.4C215.5 287.9 207.1 286.4 197.6 286.4C173.1 286.4 154.4 307.9 154.4 331.6C154.4 351.1 166.6 363.8 186.1 363.8C195.1 363.8 206.3 358.9 212.6 351.9C212.1 353.4 211.6 356.6 211.6 358.1C211.6 360.4 212.6 362.1 214.8 362.1L232 362.1C234.7 362.1 237 359.2 237.5 356.4L247.7 292.1C248 290.2 246.5 288.2 244.5 288.2zM285 386.1L348.7 293.5C349.2 293 349.2 292.5 349.2 291.8C349.2 290.1 347.7 288.3 346 288.3L326.8 288.3C325.1 288.3 323.3 289.3 322.3 290.8L295.8 329.8L284.8 292.3C284 290.1 281.8 288.3 279.3 288.3L260.6 288.3C258.9 288.3 257.4 290.1 257.4 291.8C257.4 293 276.9 348.6 278.6 353.9C275.9 357.7 258.1 382.5 258.1 385.5C258.1 387.3 259.6 388.7 261.3 388.7L280.5 388.7C282.3 388.6 284 387.6 285 386.1zM444.3 279.4C444.3 258.4 428.1 251.4 409.6 251.4L369.9 251.4C367.2 251.4 364.7 253.4 364.4 256.1L348.2 358.1C348 360.1 349.5 362.1 351.4 362.1L371.9 362.1C373.9 362.1 375.4 360.6 375.9 358.9L380.4 329.9C381.4 322.7 393.6 325.2 398.4 325.2C426.8 325.2 444.3 308.2 444.3 279.4zM528.5 288.2L509.5 288.2C505.7 288.2 505.5 293.7 505.2 296.4C499.7 287.9 491.2 286.4 481.5 286.4C457 286.4 438.3 307.9 438.3 331.6C438.3 351.1 450.5 363.8 470 363.8C479.3 363.8 490.5 358.9 496.5 351.9C496.2 353.4 495.5 356.6 495.5 358.1C495.5 360.4 496.5 362.1 498.7 362.1L516 362.1C518.7 362.1 521 359.2 521.5 356.4L531.7 292.1C532 290.2 530.5 288.2 528.5 288.2zM576 254.9C576 252.9 574.5 251.4 572.8 251.4L554.3 251.4C552.8 251.4 551.3 252.6 551.1 254.1L534.9 358.1L534.6 358.6C534.6 360.4 536.1 362.1 538.1 362.1L554.6 362.1C557.1 362.1 559.6 359.2 559.8 356.4L576 255.2L576 254.9zM486 306.7C473.8 306.7 464.3 316.4 464.3 328.7C464.3 338.4 471.3 343.7 480.5 343.7C492.5 343.7 502.2 334.5 502.2 322.2C502.3 312.4 495.3 306.7 486 306.7z"/></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--! 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. --><path fill="currentColor" d="M524.4 284.8C515.5 284.8 505.7 291.5 505.7 307.5L542.4 307.5C542.4 291.5 533.1 284.8 524.4 284.8zM407 287.4C398.8 287.4 393.7 290.3 390 294.4L390.2 347.2C393.7 350.9 398.7 353.9 407 353.9C420.1 353.9 428.9 339.6 428.9 320.5C428.9 301.9 419.9 287.3 407 287.4zM560 96L80 96C53.5 96 32 117.5 32 144L32 496C32 522.5 53.5 544 80 544L560 544C586.5 544 608 522.5 608 496L608 144C608 117.5 586.5 96 560 96zM154.2 345.1C154.2 370.7 133.9 385.2 104.3 385.4C92.1 385.4 78.7 383 65.5 377.3L65.5 343.4C77.5 349.8 92.6 354.7 104.4 354.7C112.3 354.7 118 352.6 118 346C118 329 64 335.4 64 296.1C64 270.9 83.2 255.9 112 255.9C123.8 255.9 135.5 257.7 147.3 262.4L147.3 295.8C136.5 290 122.8 286.7 112 286.7C104.5 286.7 99.9 288.9 99.9 294.4C99.9 310.4 154.2 302.8 154.2 345.1zM223 288.5L196 288.5L196 339C196 359.9 218.5 353.4 223 351.6L223 380.5C218.3 383.1 209.7 385.2 198.1 385.2C177 385.2 161.2 369.7 161.2 348.7L161.4 234.8L196.1 227.4L196.1 258.2L223 258.2L223 288.5zM297 290.9C292.5 289.4 278.3 287.3 269.9 298.3L269.9 382.7L234.4 382.7L234.4 258.2L265.1 258.2L267.3 268.7C275.6 253.4 292.2 256.5 296.9 258.2L297 258.2L297 290.9zM341.1 382.7L305.4 382.7L305.4 258.2L341.1 258.2L341.1 382.7zM341.1 239.8L305.4 247.4L305.4 218.5L341.1 210.9L341.1 239.8zM415.2 385.3C402.8 385.3 395.2 380 390.1 376.3L390 416.5L354.5 424L354.5 258.2L385.8 258.2L387.6 267C392.5 262.5 401.5 255.9 415.4 255.9C440.3 255.9 463.8 278.4 463.8 319.7C463.8 364.8 440.6 385.2 415.2 385.3zM575.6 333.8L506.1 333.8C507.7 350.4 519.9 355.3 533.7 355.3C547.8 355.3 558.9 352.3 568.6 347.4L568.6 376C558.9 381.3 546.2 385.2 529.2 385.2C494.6 385.2 470.4 363.5 470.4 320.7C470.4 284.5 490.9 255.8 524.7 255.8C558.4 255.8 576 284.5 576 320.9C576 324.4 575.7 331.8 575.6 333.8z"/></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

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

Loading…
Cancel
Save