Signed-off-by: kevin <kevin@lmve.net>
This commit is contained in:
2025-06-05 11:04:12 +08:00
parent 9b63e88da8
commit 9d3eb0cea9
1675 changed files with 357271 additions and 1 deletions
+10
View File
@@ -0,0 +1,10 @@
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
.DS_Store
/data
/tmp
+11
View File
@@ -0,0 +1,11 @@
MIT 许可证
版权所有 (c) [年份] [版权所有者]
特此免费授予任何获得本软件和相关文档文件(以下简称“软件”)副本的人,不受限制地处理本软件的权限,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售本软件的副本,并允许获得本软件的人在接受以下条件的前提下行使这些权利:
1. 没想好
上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何形式的明示或暗示担保,包括但不限于对适销性、特定用途适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论是因合同、侵权或其他原因引起的,还是与本软件或使用本软件相关的。
+29
View File
@@ -0,0 +1,29 @@
web:
host: "127.0.0.1"
web_port: "8080"
tls: false
cert_private_path: ""
cert_public_path: ""
database:
type: "mysql" # mysql or sqlite
path: "" # sqlite path
host: "" # mysql host
port: ""
name: ""
user: ""
pass: ""
user:
cookie_timeout: 604800
pass_hash_type: "md5" #密码哈希类型 text md5
def_avatar_save_path: "/data/avatar/" #头像保存的真实位置
def_avatar_ginrouter_path: "/avatar/" #gin 路由的路径
def_avatar_path: "/static/avatars/def.png"
warehouses:
repos_per_page: 12 #每页显示多少个仓库
repo_items_per_page: 10 #每个仓库的每页显示多少个物品
configed: false
+20
View File
@@ -0,0 +1,20 @@
{
"api_ok":0,
"user_name_dup":1,
"user_name_nofind":2,
"user_password_err":3,
"user_api_error":4,
"user_no_sign":5,
"file_save_err":6,
"file_type_err":7,
"file_get_err":8,
"file_size_err":9,
"file_mime_err":10,
"json_error":11,
"gin_error":12,
"path_error":13,
"email_error":14,
"warehouses_api_err":15,
"warehouses_name_err":16,
"warehouses_id_err":17
}
+62
View File
@@ -0,0 +1,62 @@
module saas
go 1.24
toolchain go1.24.2
require (
filippo.io/edwards25519 v1.1.0 // indirect
github.com/bytedance/sonic v1.13.2 // indirect
github.com/bytedance/sonic/loader v0.2.4 // indirect
github.com/cloudwego/base64x v0.1.5 // indirect
github.com/cloudwego/iasm v0.2.0 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/gabriel-vasile/mimetype v1.4.9 // indirect
github.com/gin-contrib/sessions v1.0.3 // indirect
github.com/gin-contrib/sse v1.1.0 // indirect
github.com/gin-gonic/gin v1.10.0 // indirect
github.com/glebarez/go-sqlite v1.22.0 // indirect
github.com/glebarez/sqlite v1.11.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.26.0 // indirect
github.com/go-sql-driver/mysql v1.9.2 // indirect
github.com/goccy/go-json v0.10.5 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/gorilla/context v1.1.2 // indirect
github.com/gorilla/securecookie v1.1.2 // indirect
github.com/gorilla/sessions v1.4.0 // indirect
github.com/howeyc/fsnotify v0.9.0 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/cpuid/v2 v2.2.10 // indirect
github.com/leodido/go-urn v1.4.0 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/ncruces/go-strftime v0.1.9 // indirect
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
github.com/pilu/config v0.0.0-20131214182432-3eb99e6c0b9a // indirect
github.com/pilu/fresh v0.0.0-20240621171608-8d1fef547a99 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
github.com/soulteary/gin-static v0.2.6 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.12 // indirect
golang.org/x/arch v0.17.0 // indirect
golang.org/x/crypto v0.38.0 // indirect
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 // indirect
golang.org/x/net v0.40.0 // indirect
golang.org/x/sys v0.33.0 // indirect
golang.org/x/text v0.25.0 // indirect
google.golang.org/protobuf v1.36.6 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
gorm.io/driver/mysql v1.5.7 // indirect
gorm.io/gorm v1.26.1 // indirect
modernc.org/libc v1.63.0 // indirect
modernc.org/mathutil v1.7.1 // indirect
modernc.org/memory v1.10.0 // indirect
modernc.org/sqlite v1.37.0 // indirect
)
+145
View File
@@ -0,0 +1,145 @@
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
github.com/bytedance/sonic v1.13.2 h1:8/H1FempDZqC4VqjptGo14QQlJx8VdZJegxs6wwfqpQ=
github.com/bytedance/sonic v1.13.2/go.mod h1:o68xyaF9u2gvVBuGHPlUVCy+ZfmNNO5ETf1+KgkJhz4=
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
github.com/bytedance/sonic/loader v0.2.4 h1:ZWCw4stuXUsn1/+zQDqeE7JKP+QO47tz7QCNan80NzY=
github.com/bytedance/sonic/loader v0.2.4/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI=
github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4=
github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM=
github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8=
github.com/gabriel-vasile/mimetype v1.4.9 h1:5k+WDwEsD9eTLL8Tz3L0VnmVh9QxGjRmjBvAG7U/oYY=
github.com/gabriel-vasile/mimetype v1.4.9/go.mod h1:WnSQhFKJuBlRyLiKohA/2DtIlPFAbguNaG7QCHcyGok=
github.com/gin-contrib/sessions v1.0.3 h1:AZ4j0AalLsGqdrKNbbrKcXx9OJZqViirvNGsJTxcQps=
github.com/gin-contrib/sessions v1.0.3/go.mod h1:5i4XMx4KPtQihnzxEqG9u1K446lO3G19jAi2GtbfsAI=
github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w=
github.com/gin-contrib/sse v1.1.0/go.mod h1:hxRZ5gVpWMT7Z0B0gSNYqqsSCNIJMjzvm6fqCz9vjwM=
github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
github.com/glebarez/go-sqlite v1.22.0 h1:uAcMJhaA6r3LHMTFgP0SifzgXg46yJkgxqyuyec+ruQ=
github.com/glebarez/go-sqlite v1.22.0/go.mod h1:PlBIdHe0+aUEFn+r2/uthrWq4FxbzugL0L8Li6yQJbc=
github.com/glebarez/sqlite v1.11.0 h1:wSG0irqzP6VurnMEpFGer5Li19RpIRi2qvQz++w0GMw=
github.com/glebarez/sqlite v1.11.0/go.mod h1:h8/o8j5wiAsqSPoWELDUdJXhjAhsVliSn7bWZjOhrgQ=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
github.com/go-playground/validator/v10 v10.26.0 h1:SP05Nqhjcvz81uJaRfEV0YBSSSGMc/iMaVtFbr3Sw2k=
github.com/go-playground/validator/v10 v10.26.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo=
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
github.com/go-sql-driver/mysql v1.9.2 h1:4cNKDYQ1I84SXslGddlsrMhc8k4LeDVj6Ad6WRjiHuU=
github.com/go-sql-driver/mysql v1.9.2/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/context v1.1.2 h1:WRkNAv2uoa03QNIc1A6u4O7DAGMUVoopZhkiXWA2V1o=
github.com/gorilla/context v1.1.2/go.mod h1:KDPwT9i/MeWHiLl90fuTgrt4/wPcv75vFAZLaOOcbxM=
github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA=
github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo=
github.com/gorilla/sessions v1.4.0 h1:kpIYOp/oi6MG/p5PgxApU8srsSw9tuFbt46Lt7auzqQ=
github.com/gorilla/sessions v1.4.0/go.mod h1:FLWm50oby91+hl7p/wRxDth9bWSuk0qVL2emc7lT5ik=
github.com/howeyc/fsnotify v0.9.0 h1:0gtV5JmOKH4A8SsFxG2BczSeXWWPvcMT0euZt5gDAxY=
github.com/howeyc/fsnotify v0.9.0/go.mod h1:41HzSPxBGeFRQKEEwgh49TRw/nKBsYZ2cF1OzPjSJsA=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE=
github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4=
github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
github.com/pilu/config v0.0.0-20131214182432-3eb99e6c0b9a h1:Tg4E4cXPZSZyd3H1tJlYo6ZreXV0ZJvE/lorNqyw1AU=
github.com/pilu/config v0.0.0-20131214182432-3eb99e6c0b9a/go.mod h1:9Or9aIl95Kp43zONcHd5tLZGKXb9iLx0pZjau0uJ5zg=
github.com/pilu/fresh v0.0.0-20240621171608-8d1fef547a99 h1:+X7Gb40b5Bl3v5+3MiGK8Jhemjp65MHc+nkVCfq1Yfc=
github.com/pilu/fresh v0.0.0-20240621171608-8d1fef547a99/go.mod h1:2LLTtftTZSdAPR/iVyennXZDLZOYzyDn+T0qEKJ8eSw=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/soulteary/gin-static v0.2.6 h1:IOfF2kpNyhNLJBQH1y4tMCDuDdY5SFcpQNYSYWDRlPo=
github.com/soulteary/gin-static v0.2.6/go.mod h1:YTYRXDHQnssfe5nlgtysPHBpavMq4TxMMYqx/keSwzc=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
golang.org/x/arch v0.16.0 h1:foMtLTdyOmIniqWCHjY6+JxuC54XP1fDwx4N0ASyW+U=
golang.org/x/arch v0.16.0/go.mod h1:JmwW7aLIoRUKgaTzhkiEFxvcEiQGyOg9BMonBJUS7EE=
golang.org/x/arch v0.17.0 h1:4O3dfLzd+lQewptAHqjewQZQDyEdejz3VwgeYwkZneU=
golang.org/x/arch v0.17.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk=
golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8=
golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw=
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM=
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8=
golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY=
golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E=
golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0=
golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU=
golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4=
golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA=
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo=
gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
gorm.io/gorm v1.26.1 h1:ghB2gUI9FkS46luZtn6DLZ0f6ooBJ5IbVej2ENFDjRw=
gorm.io/gorm v1.26.1/go.mod h1:8Z33v652h4//uMA76KjeDH8mJXPm1QNCYrMeatR0DOE=
modernc.org/libc v1.63.0 h1:wKzb61wOGCzgahQBORb1b0dZonh8Ufzl/7r4Yf1D5YA=
modernc.org/libc v1.63.0/go.mod h1:wDzH1mgz1wUIEwottFt++POjGRO9sgyQKrpXaz3x89E=
modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU=
modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg=
modernc.org/memory v1.10.0 h1:fzumd51yQ1DxcOxSO+S6X7+QTuVU+n8/Aj7swYjFfC4=
modernc.org/memory v1.10.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw=
modernc.org/sqlite v1.37.0 h1:s1TMe7T3Q3ovQiK2Ouz4Jwh7dw4ZDqbebSDTlSJdfjI=
modernc.org/sqlite v1.37.0/go.mod h1:5YiWv+YviqGMuGw4V+PNplcyaJ5v+vQd7TQOgkACoJM=
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
+109
View File
@@ -0,0 +1,109 @@
package main
import (
"fmt"
"os"
"saas/models"
"saas/routers"
"github.com/gin-gonic/gin"
"gopkg.in/yaml.v3"
)
func init() {
}
func main() {
fmt.Println("main_init!")
data_path := "./data/upload/"
avatar_path := "./data/avatar/"
config_file_path := "./data/config.yaml"
config_temp_path := "./def_config/config_temp.yaml"
// 直接尝试创建所有必要的目录
err := os.MkdirAll(data_path, 0755)
if err != nil {
fmt.Printf("创建文件夹失败: %v\n", err)
return
}
err = os.MkdirAll(avatar_path, 0755)
if err != nil {
fmt.Printf("创建文件夹失败: %v\n", err)
return
}
//fmt.Println("文件夹创建成功或已存在")
//尝试读取配置
if !models.File_exists(config_file_path) {
fmt.Println("读取配置失败")
//复制配置模板
fmt.Println("复制配置模板")
input, err := os.ReadFile(config_temp_path)
if err != nil {
fmt.Println(err)
return
}
err = os.WriteFile(config_file_path, input, 0644)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("需要修改此配置:%s\n", config_file_path)
return
}
//读取默认配置
data, err := os.ReadFile(config_file_path)
if err != nil {
fmt.Println(err)
return
}
if err := yaml.Unmarshal(data, &models.Configs); err != nil {
fmt.Println(err)
return
}
if models.Configs["configed"] == false {
fmt.Printf("需要将:%s 内的configed设置为true", config_file_path)
return
}
//统一初始化
models.All_config_init()
r := gin.Default()
r.LoadHTMLGlob("templates/*")
//
r.StaticFile("/favicon.ico", "./static/favicon.ico")
r.StaticFile("/robots.txt", "./static/robots.txt")
r.Static("/static/", "./static/static/")
r.Static("/dist/", "./static/dist/")
//静态用户上传的文件
r.Static("/avatar/", avatar_path)
//store := cookie.NewStore([]byte("secret"))
// 自定义 404 页面(需要提前加载模板)
r.NoRoute(func(ctx *gin.Context) {
ctx.HTML(404, "error_404.html", gin.H{})
})
routers.Def_router(r.Group("/")) //分组路由传递到def_routers。go
var http_port = models.Wed_configs["host"].(string) + ":" + models.Wed_configs["web_port"].(string)
if models.Wed_configs["tls"].(bool) {
if models.Wed_configs["cert_public_path"] == "" || models.Wed_configs["cert_private_path"] == "" {
fmt.Printf("需要配置证书路径")
return
} else {
fmt.Println("https://" + http_port)
r.RunTLS(http_port, models.Wed_configs["cert_public_path"].(string), models.Wed_configs["cert_private_path"].(string))
}
} else {
fmt.Println("http://" + http_port)
r.Run(http_port)
}
}
+36
View File
@@ -0,0 +1,36 @@
package models
var Configs map[string]interface{}
var Wed_configs map[string]interface{}
var Database_configs map[string]interface{}
var User_configs map[string]interface{}
var Allowed_avatar_ext = map[string]bool{
".jpg": true,
".jpeg": true,
".png": true,
}
var Allowed_avatar_mime = map[string]bool{
"image/jpeg": true,
"image/png": true,
}
func init() {
}
func All_config_init() {
//读取web配置
Wed_configs = Configs["web"].(map[string]interface{})
//初始化数据库
Database_init()
//初始化user config
User_configs = Configs["user"].(map[string]interface{})
}
+1
View File
@@ -0,0 +1 @@
package models
+191
View File
@@ -0,0 +1,191 @@
package models
import (
"fmt"
"time"
"github.com/glebarez/sqlite"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var DB *gorm.DB
var err error
type User struct {
ID uint `gorm:"primaryKey;autoIncrement"` // 自增主键
Name string `gorm:"size:100;uniqueIndex"` // 唯一约束索引
Email string `gorm:"size:255;index"` // 字符串长度限制100 索引
Pass string `gorm:"size:128"` // 建议存储哈希后的密码
Date time.Time `gorm:"type:datetime;default:CURRENT_TIMESTAMP"` // 默认当前时间
}
type User_info struct {
ID uint `gorm:"primaryKey;autoIncrement"`
UserID uint `gorm:"not null;uniqueIndex"`
FirstName string `gorm:"size:50;null"`
Username string `gorm:"size:30;null"`
Birthdate time.Time `gorm:"type:datetime;null"`
Gender string `gorm:"type:char(1);check:gender IN ('M', 'F', 'U');default:'U'"`
AvatarPath string `gorm:"size:255"`
Region string `gorm:"size:50"`
Language string `gorm:"size:10;default:'zh-CN'"`
CreatedAt time.Time `gorm:"type:datetime;default:CURRENT_TIMESTAMP;column:created_at"`
}
// var def_user_info = User_info{
// ID:0,
// UserID:0,
// }
type Cookie struct {
ID uint `gorm:"primaryKey;autoIncrement"`
UserID uint `gorm:"size:16;not null"`
Name string `gorm:"size:255;not null;index"`
Value string `gorm:"size:255;not null;index"`
Domain string `gorm:"size:255;not null"`
Path string `gorm:"size:255;not null;default:/"`
ExpiresAt time.Time `gorm:"type:datetime;index"`
CreatedAt time.Time `gorm:"type:datetime;not null;default:CURRENT_TIMESTAMP"`
UpdatedAt time.Time `gorm:"type:datetime;not null;default:CURRENT_TIMESTAMP"`
SecureFlag bool `gorm:"not null;default:false"`
HttpOnly bool `gorm:"not null;default:false"`
SameSite string `gorm:"size:10;not null;default:'Lax'"`
PartitionKey string `gorm:"size:50"`
}
type Warehouse struct {
ID uint `gorm:"primaryKey;autoIncrement"`
CreatedAt time.Time `gorm:"type:datetime;not null;default:CURRENT_TIMESTAMP"`
UpdatedAt time.Time `gorm:"type:datetime;not null;default:CURRENT_TIMESTAMP"`
Name string `gorm:"type:varchar(255);not null;index"` // 仓库名称
CreatorID uint `gorm:"not null;index"` // 创建用户ID(外键)
Location string `gorm:"type:varchar(500);not null"` // 仓库位置
Capacity int `gorm:"not null;check:capacity >= 0"` // 仓库总容量
UsedCapacity int `gorm:"not null;check:used_capacity >= 0"` // 已用容量
ImagePath string `gorm:"type:varchar(1000)"` // 仓库图片路径
Info string `gorm:"type:text"` // 仓库详细信息
}
// 物品状态枚举
type ItemStatus string
const (
ItemStatusAvailable ItemStatus = "available"
ItemStatusMaintenance ItemStatus = "maintenance"
ItemStatusRetired ItemStatus = "retired"
)
// Item 仓库物品表模型
type Item struct {
ID uint `gorm:"primaryKey;autoIncrement"`
CreatedAt time.Time `gorm:"type:datetime;not null;default:CURRENT_TIMESTAMP"`
UpdatedAt time.Time `gorm:"type:datetime;not null;default:CURRENT_TIMESTAMP"`
// 基本信息
Name string `gorm:"type:varchar(255);not null;comment:物品名称"`
Description string `gorm:"type:text;comment:物品描述"`
// 库存信息
WarehouseID uint `gorm:"not null;index;comment:仓库ID"`
Quantity uint `gorm:"not null;default:0;comment:库存数量"`
Location string `gorm:"type:varchar(100);comment:库内位置"`
// 状态管理
Status ItemStatus `gorm:"type:varchar(20);not null;default:'available';index;comment:物品状态"`
// 扩展信息
BatchNumber string `gorm:"type:varchar(50);comment:批次号"`
ExpirationDate time.Time `gorm:"type:date;comment:失效日期"`
// 关联关系
//Warehouse Warehouse `gorm:"foreignKey:WarehouseID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:RESTRICT"`
}
type WarehouseItem struct {
ID uint `gorm:"primaryKey;autoIncrement"`
CreatedByID uint `gorm:"not null;index:idx_created_by;comment:创建用户ID"`
WarehouseID uint `gorm:"not null;index:idx_warehouse;comment:仓库ID"`
CreatedAt time.Time `gorm:"autoCreateTime;index:idx_created_at;comment:创建时间"`
Name string `gorm:"type:varchar(255);not null;index:idx_name;comment:物品名称"`
SerialNumber string `gorm:"type:varchar(100);index;null;comment:序列号"`
Description string `gorm:"type:text;null;comment:物品描述"`
ShelfLocation string `gorm:"type:varchar(50);null;index:idx_shelf;comment:货架位置"`
Quantity int `gorm:"type:int unsigned;null;comment:物品数量"`
UpdatedAt time.Time `gorm:"autoUpdateTime;index:idx_updated_at;comment:最后更新时间"`
Status string `gorm:"type:varchar(10);default:'正常';index:idx_status;comment:物品状态(正常/损坏/维修/报废)"`
Color string `gorm:"type:varchar(16);default:'bg-success';comment:状态颜色"`
Destiny string `gorm:"type:varchar(100);index:idx_destiny;null;comment:物品归宿"`
ItemValue int `gorm:"type:int;null;comment:物品价值(单位:分)"`
}
// 工单表
type Ticket struct {
ID uint `gorm:"primaryKey;autoIncrement" json:"id"` // 自增ID
Title string `gorm:"type:varchar(255);index:idx_title,length:191" json:"title"` // 带索引标题
Info string `gorm:"type:text;not null" json:"info"` // 详细信息
Type string `gorm:"type:varchar(16);not null;default:'normal'" json:"type"` // 工单类型
CreatedAt time.Time `gorm:"autoCreateTime;index;not null;" json:"createdAt"` // 创建日期
UpdatedAt time.Time `gorm:"autoCreateTime;index;not null;" json:"updatedAt"` // 最后更新时间
UserID uint `gorm:"index;not null" json:"userId"` // 创建用户ID
Status string `gorm:"type:varchar(16);index;not null;default:'open'" json:"status"` // 最后状态
Color string `gorm:"type:varchar(32);not null;default:'#3498db'" json:"color"` // 状态颜色
ItemID uint `gorm:"null" json:"itemId"` // 关联物件ID
CommentCount uint `gorm:"not null;default:0" json:"commentCount"` // 评论数量
}
func init() {
}
func Database_init() {
fmt.Println("database_init")
//var database_config map[string]interface{}=Configs["database"]
Database_configs = Configs["database"].(map[string]interface{})
if Database_configs["type"].(string) == "sqlite" {
//sqlite init
fmt.Println("sqlite")
DB, err = gorm.Open(sqlite.Open(Database_configs["path"].(string)), &gorm.Config{})
} else if Database_configs["type"].(string) == "mysql" {
//mysql init
fmt.Println("mysql")
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", Database_configs["user"].(string), Database_configs["pass"].(string), Database_configs["host"].(string), Database_configs["port"].(string), Database_configs["name"].(string))
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
}
if err != nil {
fmt.Println(err)
panic("数据库连接失败")
}
// 检查 users 表是否存在
// if !DB.Migrator().HasTable(&User{}) {
// // 自动创建表结构
// err := DB.AutoMigrate(&User{})
// if err != nil {
// panic("创建表失败: " + err.Error())
// }
// fmt.Println("users 表已创建")
// } else {
// fmt.Println("users 表已存在")
// }
// 自动创建表结构
DB.AutoMigrate(&User{})
DB.AutoMigrate(&User_info{})
DB.AutoMigrate(&Cookie{})
DB.AutoMigrate(&Warehouse{})
DB.AutoMigrate(&Item{})
DB.AutoMigrate(&WarehouseItem{})
DB.AutoMigrate(&Ticket{})
}
+131
View File
@@ -0,0 +1,131 @@
package models
import (
"crypto/md5"
"crypto/rand"
"encoding/hex"
"fmt"
"os"
"regexp"
"time"
)
func Unix_to_str_time(nanos int64) string {
t := time.Unix(0, nanos)
return (t.Format("2006-01-02 15:04:05.999999999")) // 输出:2021-06-10 09:49:59.123456789
}
// 获取当前时间字符串
// 参数格式可选,默认"2006-01-02 15:04:05"
func Get_current_time_string(format ...string) string {
// 默认格式
layout := "2006_01_02-15_04_05.999999999"
// 如果传入了格式参数则使用自定义格式
if len(format) > 0 {
layout = format[0]
}
return time.Now().Format(layout)
}
func Time_date_str_to_time(timestr string) time.Time {
// 定义与字符串匹配的布局(注意必须使用Go的参考时间格式)
layout := "2006-01-02"
// 解析时间
t, err := time.Parse(layout, timestr)
if err != nil {
var notime time.Time
return notime
}
return t
}
// 判断文件是否存在
func File_exists(path string) bool {
_, err := os.Stat(path)
if err != nil {
return !os.IsNotExist(err)
}
return true
}
func Is_email_valid(email string) bool {
// 正则表达式(覆盖 99% 常见邮箱格式)
pattern := `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`
regex := regexp.MustCompile(pattern)
return regex.MatchString(email)
}
func Valid_str_len(s string, min, max int, checkRune bool) bool {
var length int
if checkRune {
length = len([]rune(s))
} else {
length = len(s)
}
if min < 0 || max < 0 || (max != 0 && max < min) {
return false // 参数非法
}
return length >= min && (max == 0 || length <= max)
// 示例
//valid1 := Valid_str_len("hello", 3, 20, false) // 校验字节数
//valid2 := Valid_str_len("你好", 1, 2, true) // 校验字符数
}
func Rand_str_32() string {
// 生成 32 字节 (256 位) 随机数据
b := make([]byte, 32)
if _, err := rand.Read(b); err != nil {
panic(err)
}
// 转换为 16 进制字符串 (长度 64)
cookie := hex.EncodeToString(b)
return cookie
}
func Md5_str(str string) string {
hashBytes2 := md5.Sum([]byte(str))
hashString2 := hex.EncodeToString(hashBytes2[:]) // 注意数组转切片的[:]
return hashString2
}
func Hash_user_pass(str string) string {
switch User_configs["pass_hash_type"].(string) {
case "text":
return str
case "md5":
return Md5_str(str)
}
return Get_current_time_string() + Rand_str_32() //如果转换失败返回当前时间,避免撞库
}
func Page_range(start_page int64, end_page int64, now_page int64, href_heard string) []map[string]string {
var a []map[string]string
for i := start_page; i <= end_page; i++ {
var active = ""
if i == now_page {
active = "active"
} else {
active = ""
}
a = append(a, map[string]string{
"page_href": fmt.Sprintf("%s%d", href_heard, i),
"active": active,
"page": fmt.Sprintf("%d", i),
})
}
return a
}
+5
View File
@@ -0,0 +1,5 @@
package models
func init() {
}
+5
View File
@@ -0,0 +1,5 @@
package models
func init() {
}
+36
View File
@@ -0,0 +1,36 @@
package models
func Warehouse_get_total_pages() int64 {
var all_page int64 = 0
DB.Model(&Warehouse{}).Count(&all_page)
var repos_per_page = int64(Configs["warehouses"].(map[string]interface{})["repos_per_page"].(int))
return (all_page / repos_per_page) + 1
}
func Warehouse_get_warehouses(page int64) []Warehouse {
if page == 0 {
return nil
}
var pageSize = int(Configs["warehouses"].(map[string]interface{})["repos_per_page"].(int))
var Warehouses []Warehouse
offset := int((int(page) - 1) * pageSize)
DB.Model(Warehouse{}).
Order("id DESC"). // 必须排序保证分页稳定
Offset(offset).
Limit(pageSize).
Find(&Warehouses)
return Warehouses
}
func Warehouse_get_items_from_whid(wh_id uint) []WarehouseItem {
var seachf []WarehouseItem
var seach WarehouseItem
seach.WarehouseID = wh_id
DB.Where(&seach).Order("id DESC").Find(&seachf)
return seachf
}
+6
View File
@@ -0,0 +1,6 @@
# Ops
## Operations(运营)的缩写,广泛用于IT和业务运营领域。
# 后端:go gin
- HTML前端渲染
- API
# APP前端:vue
+9
View File
@@ -0,0 +1,9 @@
package routers
import "github.com/gin-gonic/gin"
func V1_cookie_api(r *gin.RouterGroup) {
r.GET("/test", func(ctx *gin.Context) {
ctx.SetCookie("test", "testcookie", 100, "/", "127.0.0.1", false, true)
})
}
+24
View File
@@ -0,0 +1,24 @@
package routers
import (
"encoding/json"
"fmt"
"os"
)
var Error_code map[string]interface{}
func init() {
//读取默认配置
fmt.Println("尝试读取错误码文件")
data, err := os.ReadFile("./def_config/error_codes.json")
if err != nil {
fmt.Println("读取错误码文件失败", err)
}
if err := json.Unmarshal(data, &Error_code); err != nil {
fmt.Println("解析错误码文件失败", err)
}
}
+146
View File
@@ -0,0 +1,146 @@
package routers
import (
"crypto/sha256"
"encoding/hex"
"fmt"
"io"
"net/http"
"path"
"path/filepath"
"saas/models"
"github.com/gin-gonic/gin"
)
func V1_file_api(r *gin.RouterGroup) {
r.GET("/", func(ctx *gin.Context) {
ctx.JSON(http.StatusOK, map[string]interface{}{
"error": "you need use Post",
})
})
r.POST("/upload", func(ctx *gin.Context) {
file, err := ctx.FormFile("file")
if err == nil {
dst := path.Join("./data/upload", file.Filename)
ctx.SaveUploadedFile(file, dst)
}
})
//接收头像的接口,
r.POST("/avatar", func(ctx *gin.Context) {
//返回前端的数据
err_msg := "user_api_error"
err_code := Error_code[err_msg]
data := map[string]interface{}{}
//判断权限是否可以接收
//先判断是否已经登录
//获取中间件处理的结果
is_login, _ := ctx.Get("is_login")
if is_login == true {
//读取用户id信息
user, _ := ctx.Get("user")
//保存这个头像
file, err := ctx.FormFile("file")
if err == nil {
//限制文件大小
if file.Size > 512 {
if file.Size < 1024000 {
// 2. 安全获取文件名并处理路径问题
filename := filepath.Base(file.Filename) // 防御性处理路径分隔符
// 3. 获取标准后缀名(含点)
extWithDot := filepath.Ext(filename)
//判断后缀名类型是否是允许的
if models.Allowed_avatar_ext[extWithDot] {
//判断文件mime是否合法
// 打开文件流
src_mime, _ := file.Open()
defer src_mime.Close()
// 读取前512字节用于MIME检测
buffer := make([]byte, 512)
io.ReadFull(src_mime, buffer)
// 检测MIME类型
mimeType := http.DetectContentType(buffer)
if models.Allowed_avatar_mime[mimeType] {
// 打开文件流
src, _ := file.Open()
defer src.Close()
// 创建SHA256哈希器
hasher := sha256.New()
// 计算哈希值
io.Copy(hasher, src)
// 获取哈希结果
hashBytes := hasher.Sum(nil)
hashString := hex.EncodeToString(hashBytes)
new_filename := fmt.Sprintf("%d_%s%s", user.(*models.User).ID, hashString, extWithDot)
file.Filename = new_filename
//这是上传的真实路径
dst := path.Join("./data/avatar", file.Filename)
//这是经过gin路由的路径
gin_dat := path.Join("/avatar", file.Filename)
//判断文件是否存在避免重复保存
if models.File_exists(dst) {
//fmt.Println("文件存在")
err_msg = "api_ok"
err_code = Error_code[err_msg]
//返回gin路由的路径
data["path"] = gin_dat
data["new_path"] = false
} else {
//fmt.Println("文件no存在")
ferr := ctx.SaveUploadedFile(file, dst)
if ferr == nil {
//文件保存成功
err_msg = "api_ok"
err_code = Error_code[err_msg]
//返回gin路由的路径
data["path"] = gin_dat
data["new_path"] = true
} else {
err_msg = "file_save_err"
err_code = Error_code[err_msg]
fmt.Println(ferr)
data["err"] = ferr
}
}
} else {
err_msg = "file_mime_err"
err_code = Error_code[err_msg]
}
} else {
err_msg = "file_type_err"
err_code = Error_code[err_msg]
}
} else {
err_msg = "file_size_err"
err_code = Error_code[err_msg]
}
} else {
err_msg = "file_size_err"
err_code = Error_code[err_msg]
}
} else {
err_msg = "file_get_err"
err_code = Error_code[err_msg]
}
} else {
err_msg = "user_no_sign"
err_code = Error_code[err_msg]
}
ctx.JSON(200, map[string]interface{}{
"api": "ok",
"err_code": err_code,
"err_msg": err_msg,
"data": data,
})
})
}
+23
View File
@@ -0,0 +1,23 @@
package routers
import (
"net/http"
"github.com/gin-gonic/gin"
)
func Api_router(r *gin.RouterGroup) {
r.GET("/", func(ctx *gin.Context) {
ctx.String(http.StatusOK, "api")
})
v1_api := r.Group("/v1/")
{
V1_user_api(v1_api.Group("/user/"))
V1_file_api(v1_api.Group("/file/"))
V1_cookie_api(v1_api.Group("/cookie/"))
V1_warehouses_api(v1_api.Group("/warehouses_api/"))
}
}
+349
View File
@@ -0,0 +1,349 @@
package routers
import (
"fmt"
"saas/models"
"strings"
"time"
"github.com/gin-gonic/gin"
)
func V1_user_api(r *gin.RouterGroup) {
var err_code = Error_code["api_ok"]
var err_msg string
r.POST("/add", func(ctx *gin.Context) {
//返回前端的数据
err_msg = "user_api_error"
err_code = Error_code[err_msg]
//转换传进来的数据
var jsonData map[string]interface{}
if err := ctx.ShouldBindJSON(&jsonData); err == nil {
//转换字段
newUser := models.User{
Name: jsonData["username"].(string),
Email: jsonData["useremail"].(string),
Pass: jsonData["userpass"].(string), // 实际应替换为哈希值
Date: time.Now(),
// Date 字段无需赋值,数据库会自动填充默认值
}
//对用户的密码进行哈希替换
newUser.Pass = models.Hash_user_pass(newUser.Pass)
//用户名是唯一的,先读取是否有这个用户名
var user models.User
user.Name = newUser.Name
if models.DB.Where(&user).First(&user).Error == nil {
//fmt.Println("找到用户:", user.ID)
err_msg = "user_name_dup"
err_code = Error_code[err_msg]
} else {
//fmt.Println("用户不存在")
models.DB.Create(&newUser) // 传入指针
err_msg = "api_ok"
err_code = Error_code[err_msg]
}
} else {
err_msg = "json_error"
err_code = Error_code[err_msg]
}
ctx.JSON(200, map[string]interface{}{
"api": "ok",
"err_code": err_code,
"err_msg": err_msg,
})
})
r.POST("/login", func(ctx *gin.Context) {
//返回前端的数据
err_msg = "user_api_error"
err_code = Error_code[err_msg]
//转换传进来的数据
var jsonData map[string]interface{}
if err := ctx.ShouldBindJSON(&jsonData); err != nil {
fmt.Println("解析JSON ERROR:", err)
panic(err)
}
//转换字段
newUser := models.User{
Name: jsonData["username"].(string),
Pass: jsonData["userpass"].(string), // 实际应替换为哈希值
// Date 字段无需赋值,数据库会自动填充默认值
}
//对用户的密码进行哈希替换
newUser.Pass = models.Hash_user_pass(newUser.Pass)
var user models.User
user.Name = newUser.Name
if models.DB.Where(&user).First(&user).Error == nil {
// 有数据
if user.Pass == newUser.Pass {
//成功登录
err_msg = "api_ok"
err_code = Error_code[err_msg]
//发送cookie
//cookie时间
var cookie_time = 0
if jsonData["keep_login"].(bool) {
cookie_time = models.User_configs["cookie_timeout"].(int)
}
cookie := models.Rand_str_32() //生成32字节cookie
//cookie := "testcookie"
//fmt.Println(cookie)
//将cookie写进数据库
new_cookie := models.Cookie{}
new_cookie.Domain = models.Wed_configs["host"].(string)
new_cookie.Name = "user"
new_cookie.Value = cookie
new_cookie.UserID = user.ID
//cookie时间
new_cookie.CreatedAt = time.Now()
new_cookie.UpdatedAt = new_cookie.CreatedAt
//计算cookie失效时间
new_cookie.ExpiresAt = time.Now().Add(time.Duration(models.User_configs["cookie_timeout"].(int)) * time.Second) //计算过期时间
new_cookie.SecureFlag = models.Wed_configs["tls"].(bool)
ctx.SetCookie("user", cookie, cookie_time, "/", models.Wed_configs["host"].(string), models.Wed_configs["tls"].(bool), true)
models.DB.Create(&new_cookie) // 传入指针
} else {
//密码错误
err_msg = "user_password_err"
err_code = Error_code[err_msg]
}
} else {
//fmt.Println("用户不存在")
err_msg = "user_name_nofind"
err_code = Error_code[err_msg]
}
ctx.JSON(200, map[string]interface{}{
"api": "ok",
"err_code": err_code,
"err_msg": err_msg,
})
})
r.POST("/logout", func(ctx *gin.Context) {
//返回前端的数据
err_msg = "user_api_error"
err_code = Error_code[err_msg]
//先判断是否已经登录
//获取中间件处理的结果
is_login, _ := ctx.Get("is_login")
if is_login == true {
//fmt.Println("loged")
cookie_vel, _ := ctx.Cookie("user") //这个cookie在中间件已经判断为有效的,否则is_login不可能为true,所以直接在数据库删除应该是安全的
//删除数据库里的cookie
var cookie models.Cookie
cookie.Value = cookie_vel
models.DB.Where(&cookie).Delete(&cookie)
//删除前端cookie
ctx.SetCookie("user", "", -1, "/", models.Wed_configs["host"].(string), models.Wed_configs["tls"].(bool), true)
err_msg = "api_ok"
err_code = Error_code[err_msg]
} else {
//fmt.Println("no loged")
err_msg = "user_no_sign"
err_code = Error_code[err_msg]
}
ctx.JSON(200, map[string]interface{}{
"api": "ok",
"err_code": err_code,
"err_msg": err_msg,
})
})
r.POST("/updata_info", func(ctx *gin.Context) {
//返回前端的数据
err_msg = "user_api_error"
err_code = Error_code[err_msg]
//先判断是否已经登录
//获取中间件处理的结果
is_login, _ := ctx.Get("is_login")
if is_login == true {
//转换传进来的数据
var jsonData map[string]interface{}
if err := ctx.ShouldBindJSON(&jsonData); err == nil {
user_info_, _ := ctx.Get("user_info")
user_info, _ := user_info_.(*models.User_info) //这个数据本身就是从数据库读出来的,理论上结构转换不会出错
user_info_find := models.User_info{
ID: user_info.ID,
}
new_user_info := models.User_info{
AvatarPath: jsonData["avatar"].(string),
FirstName: jsonData["first_name"].(string),
Username: jsonData["username"].(string),
Birthdate: models.Time_date_str_to_time(jsonData["birthday"].(string)),
}
//需要验证传入数据的合法性 例如头像url是否站内的
if strings.HasPrefix(new_user_info.AvatarPath, models.User_configs["def_avatar_ginrouter_path"].(string)) {
} else {
new_user_info.AvatarPath = models.User_configs["def_avatar_path"].(string)
}
//fmt.Printf("%%#v: %#v\n", new_user_info)
models.DB.Where(&user_info_find).Updates(&new_user_info)
err_msg = "api_ok"
err_code = Error_code[err_msg]
} else {
err_msg = "json_error"
err_code = Error_code[err_msg]
}
} else {
//fmt.Println("no loged")
err_msg = "user_no_sign"
err_code = Error_code[err_msg]
}
ctx.JSON(200, map[string]interface{}{
"api": "ok",
"err_code": err_code,
"err_msg": err_msg,
})
})
r.POST("/change_email", func(ctx *gin.Context) {
//返回前端的数据
err_msg = "user_api_error"
err_code = Error_code[err_msg]
//先判断是否已经登录
//获取中间件处理的结果
is_login, _ := ctx.Get("is_login")
if is_login == true {
//转换传进来的数据
var jsonData map[string]interface{}
if err := ctx.ShouldBindJSON(&jsonData); err == nil {
//需要验证传入数据的合法性
if models.Is_email_valid(jsonData["new_email"].(string)) {
user_, _ := ctx.Get("user")
user, _ := user_.(*models.User)
user_find := models.User{
ID: user.ID,
}
user_new := models.User{
Email: jsonData["new_email"].(string),
}
models.DB.Where(&user_find).Updates(&user_new)
err_msg = "api_ok"
err_code = Error_code[err_msg]
} else {
err_msg = "email_error"
err_code = Error_code[err_msg]
}
} else {
err_msg = "json_error"
err_code = Error_code[err_msg]
}
} else {
//fmt.Println("no loged")
err_msg = "user_no_sign"
err_code = Error_code[err_msg]
}
ctx.JSON(200, map[string]interface{}{
"api": "ok",
"err_code": err_code,
"err_msg": err_msg,
})
})
r.POST("/change_pass", func(ctx *gin.Context) {
//返回前端的数据
err_msg = "user_api_error"
err_code = Error_code[err_msg]
//先判断是否已经登录
//获取中间件处理的结果
is_login, _ := ctx.Get("is_login")
if is_login == true {
//转换传进来的数据
var jsonData map[string]interface{}
if err := ctx.ShouldBindJSON(&jsonData); err == nil {
//需要验证传入数据的合法性
//读取已登录的用户信息
user_, _ := ctx.Get("user")
user, _ := user_.(*models.User)
user_find := models.User{
ID: user.ID,
}
models.DB.Where(&user_find).First(&user_find)
pass_old := jsonData["pass_old"].(string)
pass_new := jsonData["pass_new"].(string)
//对用户的密码进行哈希替换
pass_old = models.Hash_user_pass(pass_old)
pass_new = models.Hash_user_pass(pass_new)
if user_find.Pass == pass_old {
new_user := models.User{
Pass: pass_new,
}
//修改密码
models.DB.Where(&user_find).Updates(&new_user)
//密码修改后所有cookie都应该失效
cookie_find := models.Cookie{
UserID: user.ID,
}
models.DB.Where(&cookie_find).Delete(&cookie_find)
err_msg = "api_ok"
err_code = Error_code[err_msg]
} else {
err_msg = "user_password_err"
err_code = Error_code[err_msg]
}
} else {
err_msg = "json_error"
err_code = Error_code[err_msg]
}
} else {
//fmt.Println("no loged")
err_msg = "user_no_sign"
err_code = Error_code[err_msg]
}
ctx.JSON(200, map[string]interface{}{
"api": "ok",
"err_code": err_code,
"err_msg": err_msg,
})
})
}
+178
View File
@@ -0,0 +1,178 @@
package routers
import (
"saas/models"
"strconv"
"github.com/gin-gonic/gin"
)
// 定义接收JSON数据的结构体
type Add_item_json struct {
// 使用结构体标签指定JSON字段名
WarehouseID uint `json:"warehouse_id"`
Name string `json:"item_name"`
Info string `json:"item_info"`
SN string `json:"item_sn"`
Who string `json:"item_who"`
Int int `json:"item_int"`
Consts float32 `json:"item_consts"`
}
func V1_warehouses_api(r *gin.RouterGroup) {
var err_code = Error_code["api_ok"]
var err_msg string
r.POST("/create", func(ctx *gin.Context) {
err_msg = "warehouses_api_err"
err_code = Error_code[err_msg]
//先判断是否已经登录
//获取中间件处理的结果
is_login, _ := ctx.Get("is_login")
if is_login == true {
user_info, _ := ctx.Get("user_info")
//转换传进来的数据
var jsonData map[string]interface{}
if err := ctx.ShouldBindJSON(&jsonData); err == nil {
//fmt.Println(jsonData)
if jsonData["warehouses_name"].(string) != "" {
warehouses_data := models.Warehouse{
Name: jsonData["warehouses_name"].(string),
Info: jsonData["warehouses_info"].(string),
CreatorID: user_info.(*models.User_info).UserID,
Capacity: 0,
UsedCapacity: 0,
Location: "local",
}
models.DB.Create(&warehouses_data) // 传入指针
//fmt.Println(dberr.Error)
err_msg = "api_ok"
err_code = Error_code[err_msg]
} else {
err_msg = "warehouses_name_err"
err_code = Error_code[err_msg]
}
} else {
err_msg = "json_error"
err_code = Error_code[err_msg]
}
} else {
//fmt.Println("no loged")
err_msg = "user_no_sign"
err_code = Error_code[err_msg]
}
ctx.JSON(200, map[string]interface{}{
"api": "ok",
"err_code": err_code,
"err_msg": err_msg,
})
})
r.POST("/add_item", func(ctx *gin.Context) {
err_msg = "warehouses_api_err"
err_code = Error_code[err_msg]
//先判断是否已经登录
//获取中间件处理的结果
is_login, _ := ctx.Get("is_login")
if is_login == true {
//转换传进来的数据
var item Add_item_json
if err := ctx.ShouldBindJSON(&item); err == nil {
//先判断是否有权限
//(还没弄)
//后插入数据
user_info_, _ := ctx.Get("user_info")
user_info := user_info_.(*models.User_info)
var add_item_temp models.WarehouseItem
add_item_temp.CreatedByID = user_info.UserID
add_item_temp.WarehouseID = item.WarehouseID
add_item_temp.Name = item.Name
add_item_temp.SerialNumber = item.SN
add_item_temp.Description = item.Info
add_item_temp.Destiny = item.Who
add_item_temp.Quantity = item.Int
add_item_temp.ItemValue = int(item.Consts * 100)
//插入一条数据
models.DB.Create(&add_item_temp)
//更新仓库信息
var seach_wh models.Warehouse
seach_wh.ID = item.WarehouseID
var out_wh models.Warehouse
models.DB.Where(&seach_wh).First(&out_wh)
out_wh.UsedCapacity += 1
models.DB.Where(&seach_wh).Updates(&out_wh)
err_msg = "api_ok"
err_code = Error_code[err_msg]
} else {
err_msg = "json_error"
err_code = Error_code[err_msg]
}
} else {
//fmt.Println("no loged")
err_msg = "user_no_sign"
err_code = Error_code[err_msg]
}
ctx.JSON(200, map[string]interface{}{
"api": "ok",
"err_code": err_code,
"err_msg": err_msg,
})
})
r.GET("/get_items/:wh_id", func(ctx *gin.Context) {
err_msg = "warehouses_api_err"
err_code = Error_code[err_msg]
var seachf []models.WarehouseItem
//先判断是否已经登录
//获取中间件处理的结果
is_login, _ := ctx.Get("is_login")
if is_login == true {
id := ctx.Param("wh_id")
id_int, err := strconv.ParseInt(id, 10, 0)
if err == nil {
if id_int > 0 {
seachf = models.Warehouse_get_items_from_whid(uint(id_int))
//fmt.Println(seachf)
err_msg = "api_ok"
err_code = Error_code[err_msg]
} else {
err_msg = "warehouses_id_err"
err_code = Error_code[err_msg]
}
} else {
err_msg = "warehouses_id_err"
err_code = Error_code[err_msg]
}
} else {
//fmt.Println("no loged")
err_msg = "user_no_sign"
err_code = Error_code[err_msg]
}
ctx.JSON(200, map[string]interface{}{
"api": "ok",
"err_code": err_code,
"err_msg": err_msg,
"data": seachf,
})
})
}
+282
View File
@@ -0,0 +1,282 @@
package routers
import (
"fmt"
"net/http"
"saas/models"
"strconv"
"time"
"github.com/gin-gonic/gin"
)
func Def_router(r *gin.RouterGroup) {
r.Use(func(ctx *gin.Context) {
ctx.Set("is_login", false)
//读取用户cookie,判断用户是否已登录
cookie_vel, _ := ctx.Cookie("user")
//fmt.Println(cookie_vel)
if cookie_vel != "" {
var cookie models.Cookie
cookie.Value = cookie_vel
if models.DB.Where(&cookie).First(&cookie).Error == nil {
// 有数据
//有cookie,判断cookie有效性
if cookie.ExpiresAt.After(time.Now()) {
// ExpiresAt 在当前时间之后(未过期)
//fmt.Println("Cookie 未过期")
//cookie有效,说明已经登录,cookie过期时间延长,避免大量写入数据库,先判断还有多久过期,小于一天才刷新
// 计算过期时间与当前时间的差值
remaining := time.Until(cookie.ExpiresAt) // 直接使用 time.Until
if remaining < 24*time.Hour {
//fmt.Println("剩余时间不足 1 天")
var cookie_up models.Cookie
cookie_up.UpdatedAt = time.Now()
cookie_up.ExpiresAt = time.Now().Add(time.Duration(models.User_configs["cookie_timeout"].(int)) * time.Second) //计算过期时间
models.DB.Model(&models.Cookie{}).Where(&cookie).Updates(&cookie_up)
} else {
//fmt.Println("cookie时间大于一天")
}
//读取用户权限信息
var user models.User
user.ID = cookie.UserID
if models.DB.Where(&user).First(&user).Error == nil {
//找到登录权限
//清除一些重要数据,避免传递的时候泄露
user.Pass = ""
// 读取用户info
var user_info models.User_info
user_info.UserID = cookie.UserID
if models.DB.Where(&user_info).First(&user_info).Error == nil {
// 有数据
//fmt.Println(user_info)
} else {
// 无数据
//创建一个默认info
user_info.AvatarPath = models.User_configs["def_avatar_path"].(string)
user_info.UserID = cookie.UserID
models.DB.Create(&user_info) // 传入指针
}
ctx.Set("is_login", true)
ctx.Set("user_info", &user_info)
ctx.Set("user", &user)
} else {
//找不到登录权限?? 可能被封号?
//删除前端cookie
ctx.SetCookie("user", "", -1, "/", models.Wed_configs["host"].(string), models.Wed_configs["tls"].(bool), true)
}
} else {
// ExpiresAt 在当前时间之前或等于(已过期)
//fmt.Println("Cookie 已过期")
//删除数据库的cookie
models.DB.Delete(&cookie)
//删除前端cookie
ctx.SetCookie("user", "", -1, "/", models.Wed_configs["host"].(string), models.Wed_configs["tls"].(bool), true)
}
} else {
//找不到cookie,未登录
//删除前端cookie
ctx.SetCookie("user", "", -1, "/", models.Wed_configs["host"].(string), models.Wed_configs["tls"].(bool), true)
}
}
})
Api_router(r.Group("/api/")) //分组路由传递到api_routers。go
//无需权限的页面
r.GET("/", func(ctx *gin.Context) {
is_login, _ := ctx.Get("is_login")
user_info, _ := ctx.Get("user_info")
ctx.HTML(http.StatusOK, "index.html", gin.H{
"is_login": is_login,
"user_info": user_info,
})
})
r.GET("/sign-up", func(ctx *gin.Context) {
ctx.HTML(http.StatusOK, "sign-up.html", gin.H{})
})
r.GET("/sign-in", func(ctx *gin.Context) {
ctx.HTML(http.StatusOK, "sign-in-01.html", gin.H{})
})
r.GET("/test", func(ctx *gin.Context) {
ctx.HTML(http.StatusOK, "empty.html", gin.H{})
})
//需要权限的页面
// r.Use(func(ctx *gin.Context) {
// is_login, _ := ctx.Get("is_login")
// //判断是否登录
// if is_login == true {
// } else {
// ctx.Redirect(302, "/sign-in")
// }
// })
r.GET("/workorders", func(ctx *gin.Context) {
is_login, _ := ctx.Get("is_login")
user_info, _ := ctx.Get("user_info")
//判断是否登录
if is_login == true {
ctx.HTML(http.StatusOK, "workorders.html", gin.H{
"is_login": is_login,
"user_info": user_info,
})
} else {
ctx.Redirect(302, "/sign-in")
}
})
r.GET("/warehouses", func(ctx *gin.Context) {
is_login, _ := ctx.Get("is_login")
user_info, _ := ctx.Get("user_info")
//判断是否登录
if is_login == true {
total_pages := models.Warehouse_get_total_pages() //获取总页数
disabled_next_page := false
if total_pages <= 1 {
disabled_next_page = true
} else {
disabled_next_page = false
}
ctx.HTML(http.StatusOK, "warehouses.html", gin.H{
"total_pages": total_pages,
"this_page": 1,
"prev_page": fmt.Sprintf("/warehouses/%d", 1),
"next_page": fmt.Sprintf("/warehouses/%d", 2),
"disabled_prev_page": true,
"disabled_next_page": disabled_next_page,
"page_range": models.Page_range(1, total_pages, 1, "/warehouses/"),
"Warehouses": models.Warehouse_get_warehouses(1),
"is_login": is_login,
"user_info": user_info,
})
} else {
ctx.Redirect(302, "/sign-in")
}
})
r.GET("/warehouses/:id", func(ctx *gin.Context) {
is_login, _ := ctx.Get("is_login")
user_info, _ := ctx.Get("user_info")
//判断是否登录
if is_login == true {
id := ctx.Param("id")
id_int64, err := strconv.ParseInt(id, 10, 64)
if err == nil {
if id_int64 > 0 {
total_pages := models.Warehouse_get_total_pages() //获取总页数
disabled_next_page := false
disabled_prev_page := false
if total_pages == id_int64 {
disabled_next_page = true
} else {
disabled_next_page = false
}
if id_int64 > 1 {
disabled_prev_page = false
} else {
disabled_prev_page = true
}
//制作页码标签
ctx.HTML(http.StatusOK, "warehouses.html", gin.H{
"total_pages": total_pages,
"this_page": id_int64,
"prev_page": fmt.Sprintf("/warehouses/%d", id_int64-1),
"next_page": fmt.Sprintf("/warehouses/%d", id_int64+1),
"disabled_prev_page": disabled_prev_page,
"disabled_next_page": disabled_next_page,
"page_range": models.Page_range(1, total_pages, id_int64, "/warehouses/"),
"Warehouses": models.Warehouse_get_warehouses(id_int64),
"is_login": is_login,
"user_info": user_info,
})
} else {
ctx.Redirect(302, "/warehouses")
}
} else {
ctx.Redirect(302, "/warehouses")
}
} else {
ctx.Redirect(302, "/sign-in")
}
})
r.GET("/warehouse/:id", func(ctx *gin.Context) {
is_login, _ := ctx.Get("is_login")
user_info, _ := ctx.Get("user_info")
//判断是否登录
if is_login == true {
id := ctx.Param("id")
id_int64, err := strconv.ParseInt(id, 10, 64)
if err == nil {
if id_int64 > 0 {
ctx.HTML(http.StatusOK, "warehouses_show_item.html", gin.H{
"warehouse_id": id_int64,
"is_login": is_login,
"user_info": user_info,
"items": models.Warehouse_get_items_from_whid(uint(id_int64)),
})
} else {
ctx.Redirect(302, "/warehouses")
}
} else {
ctx.Redirect(302, "/warehouses")
}
} else {
ctx.Redirect(302, "/sign-in")
}
})
r.GET("/setting-my", func(ctx *gin.Context) {
is_login, _ := ctx.Get("is_login")
user_info, _ := ctx.Get("user_info")
user, _ := ctx.Get("user")
//判断是否登录
if is_login == true {
ctx.HTML(http.StatusOK, "setting-my.html", gin.H{
"is_login": is_login,
"user_info": user_info,
"user": user,
})
} else {
ctx.HTML(404, "error_404.html", gin.H{})
}
})
r.GET("/setting-security", func(ctx *gin.Context) {
is_login, _ := ctx.Get("is_login")
user_info, _ := ctx.Get("user_info")
user, _ := ctx.Get("user")
//判断是否登录
if is_login == true {
ctx.HTML(http.StatusOK, "setting-security.html", gin.H{
"is_login": is_login,
"user_info": user_info,
"user": user,
})
} else {
ctx.HTML(404, "error_404.html", gin.H{})
}
})
}
+276
View File
@@ -0,0 +1,276 @@
/*!
* Tabler v1.0.0-beta20 (https://tabler.io)
* @version 1.0.0-beta20
* @link https://tabler.io
* Copyright 2018-2023 The Tabler Authors
* Copyright 2018-2023 codecalm.net Paweł Kuna
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
*/
/* prettier-ignore */
/* prettier-ignore */
pre.highlight,
.highlight pre {
max-height: 30rem;
margin: 1.5rem 0;
overflow: auto;
border-radius: var(--tblr-border-radius);
}
pre.highlight,
.highlight pre {
scrollbar-color: rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.16) transparent;
}
pre.highlight::-webkit-scrollbar,
.highlight pre::-webkit-scrollbar {
width: 1rem;
height: 1rem;
-webkit-transition: background 0.3s;
transition: background 0.3s;
}
@media (prefers-reduced-motion: reduce) {
pre.highlight::-webkit-scrollbar,
.highlight pre::-webkit-scrollbar {
-webkit-transition: none;
transition: none;
}
}
pre.highlight::-webkit-scrollbar-thumb,
.highlight pre::-webkit-scrollbar-thumb {
border-radius: 1rem;
border: 5px solid transparent;
box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.16);
}
pre.highlight::-webkit-scrollbar-track,
.highlight pre::-webkit-scrollbar-track {
background: transparent;
}
pre.highlight:hover::-webkit-scrollbar-thumb,
.highlight pre:hover::-webkit-scrollbar-thumb {
box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.32);
}
pre.highlight::-webkit-scrollbar-corner,
.highlight pre::-webkit-scrollbar-corner {
background: transparent;
}
.highlight {
margin: 0;
}
.highlight code > * {
margin: 0 !important;
padding: 0 !important;
}
.highlight .c, .highlight .c1 {
color: #a0aec0;
}
.highlight .nt, .highlight .nc, .highlight .nx {
color: #ff8383;
}
.highlight .na, .highlight .p {
color: #ffe484;
}
.highlight .s, .highlight .dl, .highlight .s2 {
color: #b5f4a5;
}
.highlight .k {
color: #93ddfd;
}
.highlight .s1, .highlight .mi {
color: #d9a9ff;
}
.example {
padding: 2rem;
margin: 1rem 0 2rem;
border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
border-radius: 3px 3px 0 0;
position: relative;
min-height: 12rem;
display: flex;
align-items: center;
overflow-x: auto;
}
.example-centered {
justify-content: center;
}
.example-centered .example-content {
flex: 0 auto;
}
.example-content {
font-size: 0.875rem;
line-height: 1.4285714286;
color: var(--tblr-body-color);
flex: 1;
max-width: 100%;
}
.example-content .page-header {
margin-bottom: 0;
}
.example-bg {
background: #f6f8fb;
}
.example-code {
margin: 2rem 0;
border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
border-top: none;
}
.example-code pre {
margin: 0;
border: 0;
border-radius: 0 0 3px 3px;
}
.example + .example-code {
margin-top: -2rem;
}
.example-column {
margin: 0 auto;
}
.example-column > .card:last-of-type {
margin-bottom: 0;
}
.example-column-1 {
max-width: 26rem;
}
.example-column-2 {
max-width: 52rem;
}
.example-modal-backdrop {
background: #182433;
opacity: 0.24;
position: absolute;
width: 100%;
left: 0;
top: 0;
height: 100%;
border-radius: 2px 2px 0 0;
}
.card-sponsor {
background: var(--tblr-primary-lt) no-repeat center/100% 100%;
border-color: var(--tblr-primary);
min-height: 316px;
}
.dropdown-menu-demo {
display: inline-block;
width: 100%;
position: relative;
top: 0;
margin-bottom: 1rem !important;
}
.demo-icon-preview {
position: -webkit-sticky;
position: sticky;
top: 0;
}
.demo-icon-preview svg,
.demo-icon-preview i {
width: 15rem;
height: 15rem;
font-size: 15rem;
stroke-width: 1.5;
margin: 0 auto;
display: block;
}
@media (max-width: 575.98px) {
.demo-icon-preview svg,
.demo-icon-preview i {
width: 10rem;
height: 10rem;
font-size: 10rem;
}
}
.demo-icon-preview-icon pre {
margin: 0;
-webkit-user-select: all;
-moz-user-select: all;
user-select: all;
}
.demo-dividers > p {
opacity: 0.2;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.demo-icons-list {
display: flex;
flex-wrap: wrap;
padding: 0;
margin: 0 -2px -1px 0;
list-style: none;
}
.demo-icons-list > * {
flex: 1 0 4rem;
}
.demo-icons-list-wrap {
overflow: hidden;
}
.demo-icons-list-item {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
aspect-ratio: 1;
text-align: center;
padding: 0.5rem;
border-right: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
color: inherit;
cursor: pointer;
}
.demo-icons-list-item .icon {
width: 1.5rem;
height: 1.5rem;
font-size: 1.5rem;
}
.demo-icons-list-item:hover {
text-decoration: none;
}
.settings-btn {
position: fixed;
right: -1px;
top: 10rem;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
}
.settings-scheme {
display: inline-block;
border-radius: 50%;
height: 3rem;
width: 3rem;
position: relative;
border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
}
.settings-scheme-light {
background: linear-gradient(135deg, #ffffff 50%, #fcfdfe 50%);
}
.settings-scheme-mixed {
background-image: linear-gradient(135deg, #182433 50%, #fff 50%);
}
.settings-scheme-transparent {
background: #fcfdfe;
}
.settings-scheme-dark {
background: #182433;
}
.settings-scheme-colored {
background-image: linear-gradient(135deg, var(--tblr-primary) 50%, #fcfdfe 50%);
}
+9
View File
@@ -0,0 +1,9 @@
/*!
* Tabler v1.0.0-beta20 (https://tabler.io)
* @version 1.0.0-beta20
* @link https://tabler.io
* Copyright 2018-2023 The Tabler Authors
* Copyright 2018-2023 codecalm.net Paweł Kuna
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
*/
.highlight pre,pre.highlight{max-height:30rem;margin:1.5rem 0;overflow:auto;border-radius:var(--tblr-border-radius)}.highlight pre,pre.highlight{scrollbar-color:rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16) transparent}.highlight pre::-webkit-scrollbar,pre.highlight::-webkit-scrollbar{width:1rem;height:1rem;-webkit-transition:background .3s;transition:background .3s}@media (prefers-reduced-motion:reduce){.highlight pre::-webkit-scrollbar,pre.highlight::-webkit-scrollbar{-webkit-transition:none;transition:none}}.highlight pre::-webkit-scrollbar-thumb,pre.highlight::-webkit-scrollbar-thumb{border-radius:1rem;border:5px solid transparent;box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16)}.highlight pre::-webkit-scrollbar-track,pre.highlight::-webkit-scrollbar-track{background:0 0}.highlight pre:hover::-webkit-scrollbar-thumb,pre.highlight:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.32)}.highlight pre::-webkit-scrollbar-corner,pre.highlight::-webkit-scrollbar-corner{background:0 0}.highlight{margin:0}.highlight code>*{margin:0!important;padding:0!important}.highlight .c,.highlight .c1{color:#a0aec0}.highlight .nc,.highlight .nt,.highlight .nx{color:#ff8383}.highlight .na,.highlight .p{color:#ffe484}.highlight .dl,.highlight .s,.highlight .s2{color:#b5f4a5}.highlight .k{color:#93ddfd}.highlight .mi,.highlight .s1{color:#d9a9ff}.example{padding:2rem;margin:1rem 0 2rem;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:3px 3px 0 0;position:relative;min-height:12rem;display:flex;align-items:center;overflow-x:auto}.example-centered{justify-content:center}.example-centered .example-content{flex:0 auto}.example-content{font-size:.875rem;line-height:1.4285714286;color:var(--tblr-body-color);flex:1;max-width:100%}.example-content .page-header{margin-bottom:0}.example-bg{background:#f6f8fb}.example-code{margin:2rem 0;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-top:none}.example-code pre{margin:0;border:0;border-radius:0 0 3px 3px}.example+.example-code{margin-top:-2rem}.example-column{margin:0 auto}.example-column>.card:last-of-type{margin-bottom:0}.example-column-1{max-width:26rem}.example-column-2{max-width:52rem}.example-modal-backdrop{background:#182433;opacity:.24;position:absolute;width:100%;left:0;top:0;height:100%;border-radius:2px 2px 0 0}.card-sponsor{background:var(--tblr-primary-lt) no-repeat center/100% 100%;border-color:var(--tblr-primary);min-height:316px}.dropdown-menu-demo{display:inline-block;width:100%;position:relative;top:0;margin-bottom:1rem!important}.demo-icon-preview{position:-webkit-sticky;position:sticky;top:0}.demo-icon-preview i,.demo-icon-preview svg{width:15rem;height:15rem;font-size:15rem;stroke-width:1.5;margin:0 auto;display:block}@media (max-width:575.98px){.demo-icon-preview i,.demo-icon-preview svg{width:10rem;height:10rem;font-size:10rem}}.demo-icon-preview-icon pre{margin:0;-webkit-user-select:all;-moz-user-select:all;user-select:all}.demo-dividers>p{opacity:.2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.demo-icons-list{display:flex;flex-wrap:wrap;padding:0;margin:0 -2px -1px 0;list-style:none}.demo-icons-list>*{flex:1 0 4rem}.demo-icons-list-wrap{overflow:hidden}.demo-icons-list-item{display:flex;flex-direction:column;align-items:center;justify-content:center;aspect-ratio:1;text-align:center;padding:.5rem;border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);color:inherit;cursor:pointer}.demo-icons-list-item .icon{width:1.5rem;height:1.5rem;font-size:1.5rem}.demo-icons-list-item:hover{text-decoration:none}.settings-btn{position:fixed;right:-1px;top:10rem;border-top-right-radius:0;border-bottom-right-radius:0;box-shadow:rgba(var(--tblr-body-color-rgb),.04) 0 2px 4px 0}.settings-scheme{display:inline-block;border-radius:50%;height:3rem;width:3rem;position:relative;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);box-shadow:rgba(var(--tblr-body-color-rgb),.04) 0 2px 4px 0}.settings-scheme-light{background:linear-gradient(135deg,#fff 50%,#fcfdfe 50%)}.settings-scheme-mixed{background-image:linear-gradient(135deg,#182433 50%,#fff 50%)}.settings-scheme-transparent{background:#fcfdfe}.settings-scheme-dark{background:#182433}.settings-scheme-colored{background-image:linear-gradient(135deg,var(--tblr-primary) 50%,#fcfdfe 50%)}
+276
View File
@@ -0,0 +1,276 @@
/*!
* Tabler v1.0.0-beta20 (https://tabler.io)
* @version 1.0.0-beta20
* @link https://tabler.io
* Copyright 2018-2023 The Tabler Authors
* Copyright 2018-2023 codecalm.net Paweł Kuna
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
*/
/* prettier-ignore */
/* prettier-ignore */
pre.highlight,
.highlight pre {
max-height: 30rem;
margin: 1.5rem 0;
overflow: auto;
border-radius: var(--tblr-border-radius);
}
pre.highlight,
.highlight pre {
scrollbar-color: rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.16) transparent;
}
pre.highlight::-webkit-scrollbar,
.highlight pre::-webkit-scrollbar {
width: 1rem;
height: 1rem;
-webkit-transition: background 0.3s;
transition: background 0.3s;
}
@media (prefers-reduced-motion: reduce) {
pre.highlight::-webkit-scrollbar,
.highlight pre::-webkit-scrollbar {
-webkit-transition: none;
transition: none;
}
}
pre.highlight::-webkit-scrollbar-thumb,
.highlight pre::-webkit-scrollbar-thumb {
border-radius: 1rem;
border: 5px solid transparent;
box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.16);
}
pre.highlight::-webkit-scrollbar-track,
.highlight pre::-webkit-scrollbar-track {
background: transparent;
}
pre.highlight:hover::-webkit-scrollbar-thumb,
.highlight pre:hover::-webkit-scrollbar-thumb {
box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.32);
}
pre.highlight::-webkit-scrollbar-corner,
.highlight pre::-webkit-scrollbar-corner {
background: transparent;
}
.highlight {
margin: 0;
}
.highlight code > * {
margin: 0 !important;
padding: 0 !important;
}
.highlight .c, .highlight .c1 {
color: #a0aec0;
}
.highlight .nt, .highlight .nc, .highlight .nx {
color: #ff8383;
}
.highlight .na, .highlight .p {
color: #ffe484;
}
.highlight .s, .highlight .dl, .highlight .s2 {
color: #b5f4a5;
}
.highlight .k {
color: #93ddfd;
}
.highlight .s1, .highlight .mi {
color: #d9a9ff;
}
.example {
padding: 2rem;
margin: 1rem 0 2rem;
border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
border-radius: 3px 3px 0 0;
position: relative;
min-height: 12rem;
display: flex;
align-items: center;
overflow-x: auto;
}
.example-centered {
justify-content: center;
}
.example-centered .example-content {
flex: 0 auto;
}
.example-content {
font-size: 0.875rem;
line-height: 1.4285714286;
color: var(--tblr-body-color);
flex: 1;
max-width: 100%;
}
.example-content .page-header {
margin-bottom: 0;
}
.example-bg {
background: #f6f8fb;
}
.example-code {
margin: 2rem 0;
border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
border-top: none;
}
.example-code pre {
margin: 0;
border: 0;
border-radius: 0 0 3px 3px;
}
.example + .example-code {
margin-top: -2rem;
}
.example-column {
margin: 0 auto;
}
.example-column > .card:last-of-type {
margin-bottom: 0;
}
.example-column-1 {
max-width: 26rem;
}
.example-column-2 {
max-width: 52rem;
}
.example-modal-backdrop {
background: #182433;
opacity: 0.24;
position: absolute;
width: 100%;
right: 0;
top: 0;
height: 100%;
border-radius: 2px 2px 0 0;
}
.card-sponsor {
background: var(--tblr-primary-lt) no-repeat center/100% 100%;
border-color: var(--tblr-primary);
min-height: 316px;
}
.dropdown-menu-demo {
display: inline-block;
width: 100%;
position: relative;
top: 0;
margin-bottom: 1rem !important;
}
.demo-icon-preview {
position: -webkit-sticky;
position: sticky;
top: 0;
}
.demo-icon-preview svg,
.demo-icon-preview i {
width: 15rem;
height: 15rem;
font-size: 15rem;
stroke-width: 1.5;
margin: 0 auto;
display: block;
}
@media (max-width: 575.98px) {
.demo-icon-preview svg,
.demo-icon-preview i {
width: 10rem;
height: 10rem;
font-size: 10rem;
}
}
.demo-icon-preview-icon pre {
margin: 0;
-webkit-user-select: all;
-moz-user-select: all;
user-select: all;
}
.demo-dividers > p {
opacity: 0.2;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.demo-icons-list {
display: flex;
flex-wrap: wrap;
padding: 0;
margin: 0 0 -1px -2px;
list-style: none;
}
.demo-icons-list > * {
flex: 1 0 4rem;
}
.demo-icons-list-wrap {
overflow: hidden;
}
.demo-icons-list-item {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
aspect-ratio: 1;
text-align: center;
padding: 0.5rem;
border-left: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
color: inherit;
cursor: pointer;
}
.demo-icons-list-item .icon {
width: 1.5rem;
height: 1.5rem;
font-size: 1.5rem;
}
.demo-icons-list-item:hover {
text-decoration: none;
}
.settings-btn {
position: fixed;
left: -1px;
top: 10rem;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
}
.settings-scheme {
display: inline-block;
border-radius: 50%;
height: 3rem;
width: 3rem;
position: relative;
border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
}
.settings-scheme-light {
background: linear-gradient(-135deg, #ffffff 50%, #fcfdfe 50%);
}
.settings-scheme-mixed {
background-image: linear-gradient(-135deg, #182433 50%, #fff 50%);
}
.settings-scheme-transparent {
background: #fcfdfe;
}
.settings-scheme-dark {
background: #182433;
}
.settings-scheme-colored {
background-image: linear-gradient(-135deg, var(--tblr-primary) 50%, #fcfdfe 50%);
}
+9
View File
@@ -0,0 +1,9 @@
/*!
* Tabler v1.0.0-beta20 (https://tabler.io)
* @version 1.0.0-beta20
* @link https://tabler.io
* Copyright 2018-2023 The Tabler Authors
* Copyright 2018-2023 codecalm.net Paweł Kuna
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
*/
.highlight pre,pre.highlight{max-height:30rem;margin:1.5rem 0;overflow:auto;border-radius:var(--tblr-border-radius)}.highlight pre,pre.highlight{scrollbar-color:rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16) transparent}.highlight pre::-webkit-scrollbar,pre.highlight::-webkit-scrollbar{width:1rem;height:1rem;-webkit-transition:background .3s;transition:background .3s}@media (prefers-reduced-motion:reduce){.highlight pre::-webkit-scrollbar,pre.highlight::-webkit-scrollbar{-webkit-transition:none;transition:none}}.highlight pre::-webkit-scrollbar-thumb,pre.highlight::-webkit-scrollbar-thumb{border-radius:1rem;border:5px solid transparent;box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16)}.highlight pre::-webkit-scrollbar-track,pre.highlight::-webkit-scrollbar-track{background:0 0}.highlight pre:hover::-webkit-scrollbar-thumb,pre.highlight:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.32)}.highlight pre::-webkit-scrollbar-corner,pre.highlight::-webkit-scrollbar-corner{background:0 0}.highlight{margin:0}.highlight code>*{margin:0!important;padding:0!important}.highlight .c,.highlight .c1{color:#a0aec0}.highlight .nc,.highlight .nt,.highlight .nx{color:#ff8383}.highlight .na,.highlight .p{color:#ffe484}.highlight .dl,.highlight .s,.highlight .s2{color:#b5f4a5}.highlight .k{color:#93ddfd}.highlight .mi,.highlight .s1{color:#d9a9ff}.example{padding:2rem;margin:1rem 0 2rem;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:3px 3px 0 0;position:relative;min-height:12rem;display:flex;align-items:center;overflow-x:auto}.example-centered{justify-content:center}.example-centered .example-content{flex:0 auto}.example-content{font-size:.875rem;line-height:1.4285714286;color:var(--tblr-body-color);flex:1;max-width:100%}.example-content .page-header{margin-bottom:0}.example-bg{background:#f6f8fb}.example-code{margin:2rem 0;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-top:none}.example-code pre{margin:0;border:0;border-radius:0 0 3px 3px}.example+.example-code{margin-top:-2rem}.example-column{margin:0 auto}.example-column>.card:last-of-type{margin-bottom:0}.example-column-1{max-width:26rem}.example-column-2{max-width:52rem}.example-modal-backdrop{background:#182433;opacity:.24;position:absolute;width:100%;right:0;top:0;height:100%;border-radius:2px 2px 0 0}.card-sponsor{background:var(--tblr-primary-lt) no-repeat center/100% 100%;border-color:var(--tblr-primary);min-height:316px}.dropdown-menu-demo{display:inline-block;width:100%;position:relative;top:0;margin-bottom:1rem!important}.demo-icon-preview{position:-webkit-sticky;position:sticky;top:0}.demo-icon-preview i,.demo-icon-preview svg{width:15rem;height:15rem;font-size:15rem;stroke-width:1.5;margin:0 auto;display:block}@media (max-width:575.98px){.demo-icon-preview i,.demo-icon-preview svg{width:10rem;height:10rem;font-size:10rem}}.demo-icon-preview-icon pre{margin:0;-webkit-user-select:all;-moz-user-select:all;user-select:all}.demo-dividers>p{opacity:.2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.demo-icons-list{display:flex;flex-wrap:wrap;padding:0;margin:0 0 -1px -2px;list-style:none}.demo-icons-list>*{flex:1 0 4rem}.demo-icons-list-wrap{overflow:hidden}.demo-icons-list-item{display:flex;flex-direction:column;align-items:center;justify-content:center;aspect-ratio:1;text-align:center;padding:.5rem;border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);color:inherit;cursor:pointer}.demo-icons-list-item .icon{width:1.5rem;height:1.5rem;font-size:1.5rem}.demo-icons-list-item:hover{text-decoration:none}.settings-btn{position:fixed;left:-1px;top:10rem;border-top-left-radius:0;border-bottom-left-radius:0;box-shadow:rgba(var(--tblr-body-color-rgb),.04) 0 2px 4px 0}.settings-scheme{display:inline-block;border-radius:50%;height:3rem;width:3rem;position:relative;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);box-shadow:rgba(var(--tblr-body-color-rgb),.04) 0 2px 4px 0}.settings-scheme-light{background:linear-gradient(-135deg,#fff 50%,#fcfdfe 50%)}.settings-scheme-mixed{background-image:linear-gradient(-135deg,#182433 50%,#fff 50%)}.settings-scheme-transparent{background:#fcfdfe}.settings-scheme-dark{background:#182433}.settings-scheme-colored{background-image:linear-gradient(-135deg,var(--tblr-primary) 50%,#fcfdfe 50%)}
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+528
View File
@@ -0,0 +1,528 @@
/*!
* Tabler v1.0.0-beta20 (https://tabler.io)
* @version 1.0.0-beta20
* @link https://tabler.io
* Copyright 2018-2023 The Tabler Authors
* Copyright 2018-2023 codecalm.net Paweł Kuna
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
*/
/* prettier-ignore */
/* prettier-ignore */
.payment {
height: 2.5rem;
aspect-ratio: 1.66666;
display: inline-block;
background: no-repeat center/100% 100%;
vertical-align: bottom;
font-style: normal;
box-shadow: 0 0 1px 1px rgba(0, 0, 0, 0.1);
border-radius: 2px;
}
.payment-provider-2checkout {
background-image: url("../img/payments/2checkout.svg");
}
.payment-provider-2checkout-dark {
background-image: url("../img/payments/2checkout-dark.svg");
}
.payment-provider-alipay {
background-image: url("../img/payments/alipay.svg");
}
.payment-provider-alipay-dark {
background-image: url("../img/payments/alipay-dark.svg");
}
.payment-provider-amazon {
background-image: url("../img/payments/amazon.svg");
}
.payment-provider-amazon-dark {
background-image: url("../img/payments/amazon-dark.svg");
}
.payment-provider-americanexpress {
background-image: url("../img/payments/americanexpress.svg");
}
.payment-provider-americanexpress-dark {
background-image: url("../img/payments/americanexpress-dark.svg");
}
.payment-provider-applepay {
background-image: url("../img/payments/applepay.svg");
}
.payment-provider-applepay-dark {
background-image: url("../img/payments/applepay-dark.svg");
}
.payment-provider-bancontact {
background-image: url("../img/payments/bancontact.svg");
}
.payment-provider-bancontact-dark {
background-image: url("../img/payments/bancontact-dark.svg");
}
.payment-provider-bitcoin {
background-image: url("../img/payments/bitcoin.svg");
}
.payment-provider-bitcoin-dark {
background-image: url("../img/payments/bitcoin-dark.svg");
}
.payment-provider-bitpay {
background-image: url("../img/payments/bitpay.svg");
}
.payment-provider-bitpay-dark {
background-image: url("../img/payments/bitpay-dark.svg");
}
.payment-provider-blik {
background-image: url("../img/payments/blik.svg");
}
.payment-provider-blik-dark {
background-image: url("../img/payments/blik-dark.svg");
}
.payment-provider-cirrus {
background-image: url("../img/payments/cirrus.svg");
}
.payment-provider-cirrus-dark {
background-image: url("../img/payments/cirrus-dark.svg");
}
.payment-provider-clickandbuy {
background-image: url("../img/payments/clickandbuy.svg");
}
.payment-provider-clickandbuy-dark {
background-image: url("../img/payments/clickandbuy-dark.svg");
}
.payment-provider-coinkite {
background-image: url("../img/payments/coinkite.svg");
}
.payment-provider-coinkite-dark {
background-image: url("../img/payments/coinkite-dark.svg");
}
.payment-provider-dinersclub {
background-image: url("../img/payments/dinersclub.svg");
}
.payment-provider-dinersclub-dark {
background-image: url("../img/payments/dinersclub-dark.svg");
}
.payment-provider-directdebit {
background-image: url("../img/payments/directdebit.svg");
}
.payment-provider-directdebit-dark {
background-image: url("../img/payments/directdebit-dark.svg");
}
.payment-provider-discover {
background-image: url("../img/payments/discover.svg");
}
.payment-provider-discover-dark {
background-image: url("../img/payments/discover-dark.svg");
}
.payment-provider-dotpay {
background-image: url("../img/payments/dotpay.svg");
}
.payment-provider-dotpay-dark {
background-image: url("../img/payments/dotpay-dark.svg");
}
.payment-provider-dwolla {
background-image: url("../img/payments/dwolla.svg");
}
.payment-provider-dwolla-dark {
background-image: url("../img/payments/dwolla-dark.svg");
}
.payment-provider-ebay {
background-image: url("../img/payments/ebay.svg");
}
.payment-provider-ebay-dark {
background-image: url("../img/payments/ebay-dark.svg");
}
.payment-provider-epayco {
background-image: url("../img/payments/epayco.svg");
}
.payment-provider-epayco-dark {
background-image: url("../img/payments/epayco-dark.svg");
}
.payment-provider-eway {
background-image: url("../img/payments/eway.svg");
}
.payment-provider-eway-dark {
background-image: url("../img/payments/eway-dark.svg");
}
.payment-provider-giropay {
background-image: url("../img/payments/giropay.svg");
}
.payment-provider-giropay-dark {
background-image: url("../img/payments/giropay-dark.svg");
}
.payment-provider-googlewallet {
background-image: url("../img/payments/googlewallet.svg");
}
.payment-provider-googlewallet-dark {
background-image: url("../img/payments/googlewallet-dark.svg");
}
.payment-provider-ingenico {
background-image: url("../img/payments/ingenico.svg");
}
.payment-provider-ingenico-dark {
background-image: url("../img/payments/ingenico-dark.svg");
}
.payment-provider-jcb {
background-image: url("../img/payments/jcb.svg");
}
.payment-provider-jcb-dark {
background-image: url("../img/payments/jcb-dark.svg");
}
.payment-provider-klarna {
background-image: url("../img/payments/klarna.svg");
}
.payment-provider-klarna-dark {
background-image: url("../img/payments/klarna-dark.svg");
}
.payment-provider-laser {
background-image: url("../img/payments/laser.svg");
}
.payment-provider-laser-dark {
background-image: url("../img/payments/laser-dark.svg");
}
.payment-provider-maestro {
background-image: url("../img/payments/maestro.svg");
}
.payment-provider-maestro-dark {
background-image: url("../img/payments/maestro-dark.svg");
}
.payment-provider-mastercard {
background-image: url("../img/payments/mastercard.svg");
}
.payment-provider-mastercard-dark {
background-image: url("../img/payments/mastercard-dark.svg");
}
.payment-provider-mir {
background-image: url("../img/payments/mir.svg");
}
.payment-provider-mir-dark {
background-image: url("../img/payments/mir-dark.svg");
}
.payment-provider-monero {
background-image: url("../img/payments/monero.svg");
}
.payment-provider-monero-dark {
background-image: url("../img/payments/monero-dark.svg");
}
.payment-provider-neteller {
background-image: url("../img/payments/neteller.svg");
}
.payment-provider-neteller-dark {
background-image: url("../img/payments/neteller-dark.svg");
}
.payment-provider-ogone {
background-image: url("../img/payments/ogone.svg");
}
.payment-provider-ogone-dark {
background-image: url("../img/payments/ogone-dark.svg");
}
.payment-provider-okpay {
background-image: url("../img/payments/okpay.svg");
}
.payment-provider-okpay-dark {
background-image: url("../img/payments/okpay-dark.svg");
}
.payment-provider-paybox {
background-image: url("../img/payments/paybox.svg");
}
.payment-provider-paybox-dark {
background-image: url("../img/payments/paybox-dark.svg");
}
.payment-provider-paymill {
background-image: url("../img/payments/paymill.svg");
}
.payment-provider-paymill-dark {
background-image: url("../img/payments/paymill-dark.svg");
}
.payment-provider-payone {
background-image: url("../img/payments/payone.svg");
}
.payment-provider-payone-dark {
background-image: url("../img/payments/payone-dark.svg");
}
.payment-provider-payoneer {
background-image: url("../img/payments/payoneer.svg");
}
.payment-provider-payoneer-dark {
background-image: url("../img/payments/payoneer-dark.svg");
}
.payment-provider-paypal {
background-image: url("../img/payments/paypal.svg");
}
.payment-provider-paypal-dark {
background-image: url("../img/payments/paypal-dark.svg");
}
.payment-provider-paysafecard {
background-image: url("../img/payments/paysafecard.svg");
}
.payment-provider-paysafecard-dark {
background-image: url("../img/payments/paysafecard-dark.svg");
}
.payment-provider-payu {
background-image: url("../img/payments/payu.svg");
}
.payment-provider-payu-dark {
background-image: url("../img/payments/payu-dark.svg");
}
.payment-provider-payza {
background-image: url("../img/payments/payza.svg");
}
.payment-provider-payza-dark {
background-image: url("../img/payments/payza-dark.svg");
}
.payment-provider-przelewy24 {
background-image: url("../img/payments/przelewy24.svg");
}
.payment-provider-przelewy24-dark {
background-image: url("../img/payments/przelewy24-dark.svg");
}
.payment-provider-ripple {
background-image: url("../img/payments/ripple.svg");
}
.payment-provider-ripple-dark {
background-image: url("../img/payments/ripple-dark.svg");
}
.payment-provider-sage {
background-image: url("../img/payments/sage.svg");
}
.payment-provider-sage-dark {
background-image: url("../img/payments/sage-dark.svg");
}
.payment-provider-sepa {
background-image: url("../img/payments/sepa.svg");
}
.payment-provider-sepa-dark {
background-image: url("../img/payments/sepa-dark.svg");
}
.payment-provider-shopify {
background-image: url("../img/payments/shopify.svg");
}
.payment-provider-shopify-dark {
background-image: url("../img/payments/shopify-dark.svg");
}
.payment-provider-skrill {
background-image: url("../img/payments/skrill.svg");
}
.payment-provider-skrill-dark {
background-image: url("../img/payments/skrill-dark.svg");
}
.payment-provider-solo {
background-image: url("../img/payments/solo.svg");
}
.payment-provider-solo-dark {
background-image: url("../img/payments/solo-dark.svg");
}
.payment-provider-square {
background-image: url("../img/payments/square.svg");
}
.payment-provider-square-dark {
background-image: url("../img/payments/square-dark.svg");
}
.payment-provider-stripe {
background-image: url("../img/payments/stripe.svg");
}
.payment-provider-stripe-dark {
background-image: url("../img/payments/stripe-dark.svg");
}
.payment-provider-switch {
background-image: url("../img/payments/switch.svg");
}
.payment-provider-switch-dark {
background-image: url("../img/payments/switch-dark.svg");
}
.payment-provider-tpay {
background-image: url("../img/payments/tpay.svg");
}
.payment-provider-tpay-dark {
background-image: url("../img/payments/tpay-dark.svg");
}
.payment-provider-ukash {
background-image: url("../img/payments/ukash.svg");
}
.payment-provider-ukash-dark {
background-image: url("../img/payments/ukash-dark.svg");
}
.payment-provider-unionpay {
background-image: url("../img/payments/unionpay.svg");
}
.payment-provider-unionpay-dark {
background-image: url("../img/payments/unionpay-dark.svg");
}
.payment-provider-verifone {
background-image: url("../img/payments/verifone.svg");
}
.payment-provider-verifone-dark {
background-image: url("../img/payments/verifone-dark.svg");
}
.payment-provider-verisign {
background-image: url("../img/payments/verisign.svg");
}
.payment-provider-verisign-dark {
background-image: url("../img/payments/verisign-dark.svg");
}
.payment-provider-visa {
background-image: url("../img/payments/visa.svg");
}
.payment-provider-visa-dark {
background-image: url("../img/payments/visa-dark.svg");
}
.payment-provider-webmoney {
background-image: url("../img/payments/webmoney.svg");
}
.payment-provider-webmoney-dark {
background-image: url("../img/payments/webmoney-dark.svg");
}
.payment-provider-westernunion {
background-image: url("../img/payments/westernunion.svg");
}
.payment-provider-westernunion-dark {
background-image: url("../img/payments/westernunion-dark.svg");
}
.payment-provider-worldpay {
background-image: url("../img/payments/worldpay.svg");
}
.payment-provider-worldpay-dark {
background-image: url("../img/payments/worldpay-dark.svg");
}
.payment-xxs {
height: 1rem;
}
.payment-xs {
height: 1.25rem;
}
.payment-sm {
height: 2rem;
}
.payment-md {
height: 2.5rem;
}
.payment-lg {
height: 3rem;
}
.payment-xl {
height: 5rem;
}
.payment-2xl {
height: 7rem;
}
File diff suppressed because one or more lines are too long
+528
View File
@@ -0,0 +1,528 @@
/*!
* Tabler v1.0.0-beta20 (https://tabler.io)
* @version 1.0.0-beta20
* @link https://tabler.io
* Copyright 2018-2023 The Tabler Authors
* Copyright 2018-2023 codecalm.net Paweł Kuna
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
*/
/* prettier-ignore */
/* prettier-ignore */
.payment {
height: 2.5rem;
aspect-ratio: 1.66666;
display: inline-block;
background: no-repeat center/100% 100%;
vertical-align: bottom;
font-style: normal;
box-shadow: 0 0 1px 1px rgba(0, 0, 0, 0.1);
border-radius: 2px;
}
.payment-provider-2checkout {
background-image: url("../img/payments/2checkout.svg");
}
.payment-provider-2checkout-dark {
background-image: url("../img/payments/2checkout-dark.svg");
}
.payment-provider-alipay {
background-image: url("../img/payments/alipay.svg");
}
.payment-provider-alipay-dark {
background-image: url("../img/payments/alipay-dark.svg");
}
.payment-provider-amazon {
background-image: url("../img/payments/amazon.svg");
}
.payment-provider-amazon-dark {
background-image: url("../img/payments/amazon-dark.svg");
}
.payment-provider-americanexpress {
background-image: url("../img/payments/americanexpress.svg");
}
.payment-provider-americanexpress-dark {
background-image: url("../img/payments/americanexpress-dark.svg");
}
.payment-provider-applepay {
background-image: url("../img/payments/applepay.svg");
}
.payment-provider-applepay-dark {
background-image: url("../img/payments/applepay-dark.svg");
}
.payment-provider-bancontact {
background-image: url("../img/payments/bancontact.svg");
}
.payment-provider-bancontact-dark {
background-image: url("../img/payments/bancontact-dark.svg");
}
.payment-provider-bitcoin {
background-image: url("../img/payments/bitcoin.svg");
}
.payment-provider-bitcoin-dark {
background-image: url("../img/payments/bitcoin-dark.svg");
}
.payment-provider-bitpay {
background-image: url("../img/payments/bitpay.svg");
}
.payment-provider-bitpay-dark {
background-image: url("../img/payments/bitpay-dark.svg");
}
.payment-provider-blik {
background-image: url("../img/payments/blik.svg");
}
.payment-provider-blik-dark {
background-image: url("../img/payments/blik-dark.svg");
}
.payment-provider-cirrus {
background-image: url("../img/payments/cirrus.svg");
}
.payment-provider-cirrus-dark {
background-image: url("../img/payments/cirrus-dark.svg");
}
.payment-provider-clickandbuy {
background-image: url("../img/payments/clickandbuy.svg");
}
.payment-provider-clickandbuy-dark {
background-image: url("../img/payments/clickandbuy-dark.svg");
}
.payment-provider-coinkite {
background-image: url("../img/payments/coinkite.svg");
}
.payment-provider-coinkite-dark {
background-image: url("../img/payments/coinkite-dark.svg");
}
.payment-provider-dinersclub {
background-image: url("../img/payments/dinersclub.svg");
}
.payment-provider-dinersclub-dark {
background-image: url("../img/payments/dinersclub-dark.svg");
}
.payment-provider-directdebit {
background-image: url("../img/payments/directdebit.svg");
}
.payment-provider-directdebit-dark {
background-image: url("../img/payments/directdebit-dark.svg");
}
.payment-provider-discover {
background-image: url("../img/payments/discover.svg");
}
.payment-provider-discover-dark {
background-image: url("../img/payments/discover-dark.svg");
}
.payment-provider-dotpay {
background-image: url("../img/payments/dotpay.svg");
}
.payment-provider-dotpay-dark {
background-image: url("../img/payments/dotpay-dark.svg");
}
.payment-provider-dwolla {
background-image: url("../img/payments/dwolla.svg");
}
.payment-provider-dwolla-dark {
background-image: url("../img/payments/dwolla-dark.svg");
}
.payment-provider-ebay {
background-image: url("../img/payments/ebay.svg");
}
.payment-provider-ebay-dark {
background-image: url("../img/payments/ebay-dark.svg");
}
.payment-provider-epayco {
background-image: url("../img/payments/epayco.svg");
}
.payment-provider-epayco-dark {
background-image: url("../img/payments/epayco-dark.svg");
}
.payment-provider-eway {
background-image: url("../img/payments/eway.svg");
}
.payment-provider-eway-dark {
background-image: url("../img/payments/eway-dark.svg");
}
.payment-provider-giropay {
background-image: url("../img/payments/giropay.svg");
}
.payment-provider-giropay-dark {
background-image: url("../img/payments/giropay-dark.svg");
}
.payment-provider-googlewallet {
background-image: url("../img/payments/googlewallet.svg");
}
.payment-provider-googlewallet-dark {
background-image: url("../img/payments/googlewallet-dark.svg");
}
.payment-provider-ingenico {
background-image: url("../img/payments/ingenico.svg");
}
.payment-provider-ingenico-dark {
background-image: url("../img/payments/ingenico-dark.svg");
}
.payment-provider-jcb {
background-image: url("../img/payments/jcb.svg");
}
.payment-provider-jcb-dark {
background-image: url("../img/payments/jcb-dark.svg");
}
.payment-provider-klarna {
background-image: url("../img/payments/klarna.svg");
}
.payment-provider-klarna-dark {
background-image: url("../img/payments/klarna-dark.svg");
}
.payment-provider-laser {
background-image: url("../img/payments/laser.svg");
}
.payment-provider-laser-dark {
background-image: url("../img/payments/laser-dark.svg");
}
.payment-provider-maestro {
background-image: url("../img/payments/maestro.svg");
}
.payment-provider-maestro-dark {
background-image: url("../img/payments/maestro-dark.svg");
}
.payment-provider-mastercard {
background-image: url("../img/payments/mastercard.svg");
}
.payment-provider-mastercard-dark {
background-image: url("../img/payments/mastercard-dark.svg");
}
.payment-provider-mir {
background-image: url("../img/payments/mir.svg");
}
.payment-provider-mir-dark {
background-image: url("../img/payments/mir-dark.svg");
}
.payment-provider-monero {
background-image: url("../img/payments/monero.svg");
}
.payment-provider-monero-dark {
background-image: url("../img/payments/monero-dark.svg");
}
.payment-provider-neteller {
background-image: url("../img/payments/neteller.svg");
}
.payment-provider-neteller-dark {
background-image: url("../img/payments/neteller-dark.svg");
}
.payment-provider-ogone {
background-image: url("../img/payments/ogone.svg");
}
.payment-provider-ogone-dark {
background-image: url("../img/payments/ogone-dark.svg");
}
.payment-provider-okpay {
background-image: url("../img/payments/okpay.svg");
}
.payment-provider-okpay-dark {
background-image: url("../img/payments/okpay-dark.svg");
}
.payment-provider-paybox {
background-image: url("../img/payments/paybox.svg");
}
.payment-provider-paybox-dark {
background-image: url("../img/payments/paybox-dark.svg");
}
.payment-provider-paymill {
background-image: url("../img/payments/paymill.svg");
}
.payment-provider-paymill-dark {
background-image: url("../img/payments/paymill-dark.svg");
}
.payment-provider-payone {
background-image: url("../img/payments/payone.svg");
}
.payment-provider-payone-dark {
background-image: url("../img/payments/payone-dark.svg");
}
.payment-provider-payoneer {
background-image: url("../img/payments/payoneer.svg");
}
.payment-provider-payoneer-dark {
background-image: url("../img/payments/payoneer-dark.svg");
}
.payment-provider-paypal {
background-image: url("../img/payments/paypal.svg");
}
.payment-provider-paypal-dark {
background-image: url("../img/payments/paypal-dark.svg");
}
.payment-provider-paysafecard {
background-image: url("../img/payments/paysafecard.svg");
}
.payment-provider-paysafecard-dark {
background-image: url("../img/payments/paysafecard-dark.svg");
}
.payment-provider-payu {
background-image: url("../img/payments/payu.svg");
}
.payment-provider-payu-dark {
background-image: url("../img/payments/payu-dark.svg");
}
.payment-provider-payza {
background-image: url("../img/payments/payza.svg");
}
.payment-provider-payza-dark {
background-image: url("../img/payments/payza-dark.svg");
}
.payment-provider-przelewy24 {
background-image: url("../img/payments/przelewy24.svg");
}
.payment-provider-przelewy24-dark {
background-image: url("../img/payments/przelewy24-dark.svg");
}
.payment-provider-ripple {
background-image: url("../img/payments/ripple.svg");
}
.payment-provider-ripple-dark {
background-image: url("../img/payments/ripple-dark.svg");
}
.payment-provider-sage {
background-image: url("../img/payments/sage.svg");
}
.payment-provider-sage-dark {
background-image: url("../img/payments/sage-dark.svg");
}
.payment-provider-sepa {
background-image: url("../img/payments/sepa.svg");
}
.payment-provider-sepa-dark {
background-image: url("../img/payments/sepa-dark.svg");
}
.payment-provider-shopify {
background-image: url("../img/payments/shopify.svg");
}
.payment-provider-shopify-dark {
background-image: url("../img/payments/shopify-dark.svg");
}
.payment-provider-skrill {
background-image: url("../img/payments/skrill.svg");
}
.payment-provider-skrill-dark {
background-image: url("../img/payments/skrill-dark.svg");
}
.payment-provider-solo {
background-image: url("../img/payments/solo.svg");
}
.payment-provider-solo-dark {
background-image: url("../img/payments/solo-dark.svg");
}
.payment-provider-square {
background-image: url("../img/payments/square.svg");
}
.payment-provider-square-dark {
background-image: url("../img/payments/square-dark.svg");
}
.payment-provider-stripe {
background-image: url("../img/payments/stripe.svg");
}
.payment-provider-stripe-dark {
background-image: url("../img/payments/stripe-dark.svg");
}
.payment-provider-switch {
background-image: url("../img/payments/switch.svg");
}
.payment-provider-switch-dark {
background-image: url("../img/payments/switch-dark.svg");
}
.payment-provider-tpay {
background-image: url("../img/payments/tpay.svg");
}
.payment-provider-tpay-dark {
background-image: url("../img/payments/tpay-dark.svg");
}
.payment-provider-ukash {
background-image: url("../img/payments/ukash.svg");
}
.payment-provider-ukash-dark {
background-image: url("../img/payments/ukash-dark.svg");
}
.payment-provider-unionpay {
background-image: url("../img/payments/unionpay.svg");
}
.payment-provider-unionpay-dark {
background-image: url("../img/payments/unionpay-dark.svg");
}
.payment-provider-verifone {
background-image: url("../img/payments/verifone.svg");
}
.payment-provider-verifone-dark {
background-image: url("../img/payments/verifone-dark.svg");
}
.payment-provider-verisign {
background-image: url("../img/payments/verisign.svg");
}
.payment-provider-verisign-dark {
background-image: url("../img/payments/verisign-dark.svg");
}
.payment-provider-visa {
background-image: url("../img/payments/visa.svg");
}
.payment-provider-visa-dark {
background-image: url("../img/payments/visa-dark.svg");
}
.payment-provider-webmoney {
background-image: url("../img/payments/webmoney.svg");
}
.payment-provider-webmoney-dark {
background-image: url("../img/payments/webmoney-dark.svg");
}
.payment-provider-westernunion {
background-image: url("../img/payments/westernunion.svg");
}
.payment-provider-westernunion-dark {
background-image: url("../img/payments/westernunion-dark.svg");
}
.payment-provider-worldpay {
background-image: url("../img/payments/worldpay.svg");
}
.payment-provider-worldpay-dark {
background-image: url("../img/payments/worldpay-dark.svg");
}
.payment-xxs {
height: 1rem;
}
.payment-xs {
height: 1.25rem;
}
.payment-sm {
height: 2rem;
}
.payment-md {
height: 2.5rem;
}
.payment-lg {
height: 3rem;
}
.payment-xl {
height: 5rem;
}
.payment-2xl {
height: 7rem;
}
File diff suppressed because one or more lines are too long
+10
View File
@@ -0,0 +1,10 @@
/*!
* Tabler v1.0.0-beta20 (https://tabler.io)
* @version 1.0.0-beta20
* @link https://tabler.io
* Copyright 2018-2023 The Tabler Authors
* Copyright 2018-2023 codecalm.net Paweł Kuna
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
*/
/* prettier-ignore */
/* prettier-ignore */
+8
View File
@@ -0,0 +1,8 @@
/*!
* Tabler v1.0.0-beta20 (https://tabler.io)
* @version 1.0.0-beta20
* @link https://tabler.io
* Copyright 2018-2023 The Tabler Authors
* Copyright 2018-2023 codecalm.net Paweł Kuna
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
*/
+10
View File
@@ -0,0 +1,10 @@
/*!
* Tabler v1.0.0-beta20 (https://tabler.io)
* @version 1.0.0-beta20
* @link https://tabler.io
* Copyright 2018-2023 The Tabler Authors
* Copyright 2018-2023 codecalm.net Paweł Kuna
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
*/
/* prettier-ignore */
/* prettier-ignore */
+8
View File
@@ -0,0 +1,8 @@
/*!
* Tabler v1.0.0-beta20 (https://tabler.io)
* @version 1.0.0-beta20
* @link https://tabler.io
* Copyright 2018-2023 The Tabler Authors
* Copyright 2018-2023 codecalm.net Paweł Kuna
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
*/
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+25813
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.2 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#F7FCFF" fill-rule="evenodd" d="M0 0h20v15H0V0z" clip-rule="evenodd"/><path fill="#5EAA22" fill-rule="evenodd" d="M0 0v5h20V0H0z" clip-rule="evenodd"/><path fill="#272727" fill-rule="evenodd" d="M0 10v5h20v-5H0z" clip-rule="evenodd"/><path fill="#E31D1C" d="M0 0h6v15H0z"/></g></svg>

After

Width:  |  Height:  |  Size: 507 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#67BD38" fill-rule="evenodd" d="M14 0h6v15h-6V0z" clip-rule="evenodd"/><path fill="#D51700" fill-rule="evenodd" d="M6 0h8v15H6V0z" clip-rule="evenodd"/><path fill="#272727" fill-rule="evenodd" d="M0 0h6v15H0V0z" clip-rule="evenodd"/><path fill="#F7FCFF" fill-rule="evenodd" d="m7.705 4.986.216.135c-.36.607-.602 1.163-.728 1.668a.59.59 0 0 1 .12.15c.098.17.18.334.247.494l-.287.122a3.813 3.813 0 0 0-.16-.333c-.029.246-.027.48.006.698a.586.586 0 0 1 .148.036c.184.066.352.14.506.219l-.142.278a3.968 3.968 0 0 0-.431-.19l.003.01c.134.404.338.775.614 1.115a.595.595 0 0 1 .13-.013c.196 0 .38.011.55.033l-.037.31a3.82 3.82 0 0 0-.37-.028c.247.248.538.476.873.686l-.132.222a5.033 5.033 0 0 1-1.058-.869 4.134 4.134 0 0 0-.143.06l-.022.01c.254.266.554.51.9.734l-.134.22a5.095 5.095 0 0 1-1.029-.86.678.678 0 0 1-.384-.005l.083-.3c.02.006.04.01.06.013a3.883 3.883 0 0 1-.597-1.151 2.486 2.486 0 0 1-.061-.224.666.666 0 0 1-.282-.125l.182-.254a.424.424 0 0 0 .047.03 3.56 3.56 0 0 1 .134-1.24.667.667 0 0 1-.151-.295l.265-.069c.143-.405.346-.834.607-1.286l.218.133a7.228 7.228 0 0 0-.634 1.382c.039.035.086.073.144.116.138-.504.382-1.048.729-1.632zm-.806 1.963a4.984 4.984 0 0 0-.16-.12 3.138 3.138 0 0 0-.086 1.102c.047 0 .1-.002.16-.006l.05-.003A3.035 3.035 0 0 1 6.9 6.95zm-.072 1.287.098-.005c.012.042.024.085.038.126.134.405.334.78.6 1.122l-.052.023c-.044.02-.084.036-.12.05a3.637 3.637 0 0 1-.68-1.31l.116-.006zm5.26-3.25-.216.135c.36.607.602 1.163.727 1.668a.59.59 0 0 0-.12.15 4.33 4.33 0 0 0-.246.494l.287.122a3.79 3.79 0 0 1 .16-.333c.029.246.027.48-.006.698a.586.586 0 0 0-.148.036 4.18 4.18 0 0 0-.506.219l.141.278c.131-.067.275-.13.432-.19l-.003.01a3.494 3.494 0 0 1-.614 1.115.595.595 0 0 0-.13-.013c-.196 0-.38.011-.55.033l.037.31a3.82 3.82 0 0 1 .37-.028 4.92 4.92 0 0 1-.873.686l.132.222c.414-.26.767-.55 1.058-.869l.143.06.022.01a4.97 4.97 0 0 1-.9.734l.134.22c.4-.258.744-.544 1.028-.86.136.035.25.035.385-.005l-.084-.3a.42.42 0 0 1-.06.013c.265-.352.464-.736.598-1.151a2.51 2.51 0 0 0 .06-.224.667.667 0 0 0 .282-.125l-.18-.254a.423.423 0 0 1-.049.03 3.56 3.56 0 0 0-.133-1.24.668.668 0 0 0 .15-.295l-.265-.069a7.762 7.762 0 0 0-.606-1.286l-.218.133c.285.493.496.954.634 1.382a1.893 1.893 0 0 1-.144.116c-.139-.504-.382-1.048-.73-1.632zm.806 1.963a4.821 4.821 0 0 1 .16-.12c.096.398.124.765.085 1.102-.046 0-.099-.002-.16-.006l-.05-.003c.042-.304.03-.628-.035-.973zm.072 1.287a6.322 6.322 0 0 0-.098-.005 3.745 3.745 0 0 1-.637 1.249l.05.022c.045.02.085.036.122.05a3.638 3.638 0 0 0 .679-1.31 3.261 3.261 0 0 1-.116-.006z" clip-rule="evenodd"/><path fill="#F7FCFF" fill-rule="evenodd" d="m8.808 10.165-.698.69s.602.369 1.736.369 1.794-.369 1.794-.369l-.53-.69s-.723.28-1.235.28c-.511 0-1.067-.28-1.067-.28z" clip-rule="evenodd"/><path stroke="#C00001" stroke-width=".5" d="M8.823 10.606s.59.139 1.043.139c.453 0 1.044-.14 1.044-.14"/><path fill="#F7FCFF" fill-rule="evenodd" d="M10.457 5.911c0 .274-.25.495-.557.495-.308 0-.557-.221-.557-.495 0-.273.25-.494.557-.494.308 0 .557.221.557.494zm-.557.495h-.6l-.165.127h-.033v-.99h-.304v.99h-.266v.169h.266v1.786c-.036.285-.12.446-.236.502l-.62.298h3.735l-.268-.268c-.236-.236-.349-.417-.349-.522V6.702h.107v-.17h-.107v-.99h-.304v.99h-.098l-.196-.126H9.9zm-.798.296h1.654v1.796c0 .145.069.302.202.478H8.977a1.44 1.44 0 0 0 .125-.469V6.702zm.849.798h-.66v1.302h1.319L9.95 7.5zm.68-3.652.001.001-.001-.001zm.963.338v.006-.006zm.187.023.001-.003v.003zm-.757.384h.004-.004z" clip-rule="evenodd"/><path fill="#F7FCFF" fill-rule="evenodd" d="m8.02 6.668-.124.09.128.188c-.11.04-.286.14-.286.374 0 .34-.12.62-.12.62l.357.23s.038-.398.135-.624a.365.365 0 0 1 .189-.198l.555.816.125-.09-.958-1.406zm3.8 0 .124.09-.128.188c.11.04.286.14.286.374 0 .34.12.62.12.62l-.357.23s-.038-.398-.135-.624a.365.365 0 0 0-.189-.198l-.555.816-.125-.09.958-1.406z" clip-rule="evenodd"/></g></svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#1B1B1B" fill-rule="evenodd" d="M0 0h20v15H0V0z" clip-rule="evenodd"/><path fill="#F9D313" fill-rule="evenodd" d="m10 8.75-1.39 2.375.034-2.623-2.54 1.657 1.453-2.35-3.188.61 2.584-1.613L3.75 6.25l3.203-.556L4.37 4.08l3.188.61-1.454-2.35 2.541 1.657-.035-2.623L10 3.75l1.39-2.375-.034 2.623 2.54-1.657-1.453 2.35 3.188-.61-2.584 1.613 3.203.556-3.203.556L15.63 8.42l-3.188-.61 1.454 2.35-2.541-1.657.035 2.623L10 8.75z" clip-rule="evenodd"/><path fill="#F1F9FF" d="M3.75 8.75h12.5V15H3.75z"/><path fill="#4A80E8" d="M1.25 6.25h17.5v2.5H1.25z"/><path fill="#E31D1C" fill-rule="evenodd" d="M0 3.75 10 15 20 3.75V15H0V3.75z" clip-rule="evenodd"/></g></svg>

After

Width:  |  Height:  |  Size: 877 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#2E42A5" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#fff" stroke="#E6E617" stroke-width=".5" d="M16.219 13.477c-.628 0-1.052-.148-1.35-.394-.298-.249-.5-.624-.632-1.14-.132-.52-.186-1.158-.207-1.907a55.84 55.84 0 0 1-.009-1.711l.002-.555h4.453c.079 1.475.1 2.891-.184 3.953-.149.555-.375.99-.7 1.286-.32.291-.758.468-1.373.468z"/><path fill="#82E5FF" fill-rule="evenodd" d="M14.246 12.696c.373.834 1.027 1.25 1.96 1.25.928 0 1.583-.41 1.967-1.233l-3.927-.017z" clip-rule="evenodd"/><path fill="#E18600" fill-rule="evenodd" d="M14.653 9.75c0 .83.675 1.5 1.506 1.5s1.507-.67 1.507-1.5-.676-1.5-1.507-1.5c-.83 0-1.506.67-1.506 1.5zm2.388 0a.878.878 0 0 1-.882.875.878.878 0 0 1-.88-.875c0-.483.394-.875.88-.875.487 0 .882.392.882.875z" clip-rule="evenodd"/><path fill="#E18600" fill-rule="evenodd" d="M15.905 8.041s-.548.249-.429.716c.119.467.253.534.253.534s.194-1.012.976-1.012l-.8-.238zm-.997 2.521s.457.392.83.086c.373-.305.377-.455.377-.455s-1 .252-1.33-.456l.123.825zm2.742-.052s.017-.602-.455-.7c-.472-.098-.591-.007-.591-.007s.824.618.482 1.32l.564-.614z" clip-rule="evenodd"/><path fill="#2E42A5" d="M0 0h11v9H0z"/><mask id="c" width="11" height="9" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h11v9H0z"/></mask><g mask="url(#c)"><path fill="#F7FCFF" d="M-1.253 8.125 1.223 9.21l10.083-8.03 1.306-1.614-2.647-.363-4.113 3.46-3.31 2.332-3.795 3.129z"/><path fill="#F50100" d="m-.914 8.886 1.261.63L12.143-.583h-1.77L-.915 8.886z"/><path fill="#F7FCFF" d="M12.503 8.125 10.306 9.52-.056 1.18-1.362-.434l2.647-.363 4.113 3.46 3.31 2.332 3.795 3.129z"/><path fill="#F50100" d="m12.418 8.67-1.261.63-5.023-4.323-1.489-.483-6.133-4.921H.283l6.13 4.804 1.628.58 4.377 3.714z"/><mask id="d" width="13" height="11" x="-1" y="-1" fill="#000" maskUnits="userSpaceOnUse"><path fill="#fff" d="M-1-1h13v11H-1z"/><path fill-rule="evenodd" d="M6 0H5v4H0v1h5v4h1V5h5V4H6V0z" clip-rule="evenodd"/></mask><path fill="#F50100" fill-rule="evenodd" d="M6 0H5v4H0v1h5v4h1V5h5V4H6V0z" clip-rule="evenodd"/><path fill="#F7FCFF" d="M5 0v-.938h-.938V0H5zm1 0h.938v-.938H6V0zM5 4v.938h.938V4H5zM0 4v-.938h-.938V4H0zm0 1h-.938v.938H0V5zm5 0h.938v-.938H5V5zm0 4h-.938v.938H5V9zm1 0v.938h.938V9H6zm0-4v-.938h-.938V5H6zm5 0v.938h.938V5H11zm0-1h.938v-.938H11V4zM6 4h-.938v.938H6V4zM5 .937h1V-.938H5V.938zM5.938 4V0H4.063v4h1.875zM0 4.938h5V3.063H0v1.874zM.938 5V4H-.938v1H.938zM5 4.062H0v1.875h5V4.063zM5.938 9V5H4.063v4h1.875zM6 8.062H5v1.876h1V8.062zM5.062 5v4h1.875V5H5.063zM11 4.062H6v1.875h5V4.063zM10.062 4v1h1.876V4h-1.876zM6 4.938h5V3.063H6v1.874zM5.062 0v4h1.875V0H5.063z" mask="url(#d)"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.3 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#2E42A5" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#b)"><path fill="#E31D1C" d="M0 0v5h20V0H0z"/><path fill="#FECA00" d="M0 10v5h20v-5H0z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 611 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#1D1D1D" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#b)"><path fill="#F50100" d="M0 0v7.5h20V0H0z"/><g filter="url(#c)"><path fill="#FCFF01" d="M9.719 8.37c.484-.599.636-1.373.636-1.856 0-2.573-3.211-3.997-3.211-3.997 2.208 0 4.666 1.79 4.666 3.997 0 .935-.32 1.802-.858 2.492.984.49 1.817.874 1.817.874.309.202.395.742.192 1.052a.67.67 0 0 1-.926.192s-.79-.467-1.271-.783a20.846 20.846 0 0 0-.748-.462 3.932 3.932 0 0 1-2.203.675s-2.936-.36-2.852-1.865c0 0 .71.543 2.802.543.332 0 .625-.046.881-.128-.905-.494-1.673-.886-1.673-.886-.31-.202-1.113-1.23-.91-1.538.202-.31 1.427.04 1.736.242 0 0 .43.59 1.036.951.268.16.57.328.886.497zM8.238 6.127l-.631.42.201-.72-.463-.46.627-.025.266-.712.265.712h.626l-.462.485.232.678-.661-.378z"/><path fill="#FFEA42" d="M9.719 8.37c.484-.599.636-1.373.636-1.856 0-2.573-3.211-3.997-3.211-3.997 2.208 0 4.666 1.79 4.666 3.997 0 .935-.32 1.802-.858 2.492.984.49 1.817.874 1.817.874.309.202.395.742.192 1.052a.67.67 0 0 1-.926.192s-.79-.467-1.271-.783a20.846 20.846 0 0 0-.748-.462 3.932 3.932 0 0 1-2.203.675s-2.936-.36-2.852-1.865c0 0 .71.543 2.802.543.332 0 .625-.046.881-.128-.905-.494-1.673-.886-1.673-.886-.31-.202-1.113-1.23-.91-1.538.202-.31 1.427.04 1.736.242 0 0 .43.59 1.036.951.268.16.57.328.886.497zM8.238 6.127l-.631.42.201-.72-.463-.46.627-.025.266-.712.265.712h.626l-.462.485.232.678-.661-.378z"/></g></g></g><defs><filter id="c" width="8.111" height="8.717" x="4.959" y="2.517" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/><feBlend in2="BackgroundImageFix" result="effect1_dropShadow"/><feBlend in="SourceGraphic" in2="effect1_dropShadow" result="shape"/></filter></defs></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#5196ED" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="c" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g fill-rule="evenodd" clip-rule="evenodd" filter="url(#b)" mask="url(#c)"><path fill="#fff" d="M5.448 4.934s1.29.707 1.47.903c.18.196.467.915.915.508.448-.406.897-.09.897-.738 0-.647.67-2.15 1.64-1.773.972.376 1.77.14 1.995.291.224.151.762.899 1.18.899.419 0 .628.436.658 1.069.03.633-.135.693.254.768.388.076.538.362.344.738-.195.377-.18.211-.15.603.03.391-.388 2.7-1.674 2.927-1.285.225-2.504.105-2.175-.332.33-.437.784-.94.112-1.045-.673-.105-1.097-.195-1.77-.014-.672.18-1.374.467-1.793-.075-.418-.543-.328-.934-.672-1.19-.344-.256-.763-.211-.419-.708.344-.497.628-.311.344-.703-.284-.392-1.356-.562-1.356-.954 0-.391-.681-1.25.2-1.174z"/><path fill="#F5F8FB" d="M5.448 4.934s1.29.707 1.47.903c.18.196.467.915.915.508.448-.406.897-.09.897-.738 0-.647.67-2.15 1.64-1.773.972.376 1.77.14 1.995.291.224.151.762.899 1.18.899.419 0 .628.436.658 1.069.03.633-.135.693.254.768.388.076.538.362.344.738-.195.377-.18.211-.15.603.03.391-.388 2.7-1.674 2.927-1.285.225-2.504.105-2.175-.332.33-.437.784-.94.112-1.045-.673-.105-1.097-.195-1.77-.014-.672.18-1.374.467-1.793-.075-.418-.543-.328-.934-.672-1.19-.344-.256-.763-.211-.419-.708.344-.497.628-.311.344-.703-.284-.392-1.356-.562-1.356-.954 0-.391-.681-1.25.2-1.174z"/></g></g><defs><filter id="b" width="11.889" height="9.466" x="3.997" y="2.774" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset/><feGaussianBlur stdDeviation=".5"/><feColorMatrix values="0 0 0 0 0.0941176 0 0 0 0 0.32549 0 0 0 0 0.639216 0 0 0 0.43 0"/><feBlend in2="BackgroundImageFix" result="effect1_dropShadow"/><feBlend in="SourceGraphic" in2="effect1_dropShadow" result="shape"/></filter></defs></svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#F7FCFF" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#b)"><path fill="#58A5FF" d="M0 0v5h20V0H0zm0 10v5h20v-5H0z"/><path fill="#FFD018" stroke="#F19900" stroke-opacity=".98" stroke-width=".5" d="M10.345 9.054s-.638 1.325-1.2 1.596c.243-.607.332-1.846.332-1.846s-1.458.577-1.97.472c.616-.43 1.47-1.226 1.47-1.226s-1.887-.617-1.84-.879c.851.153 2.022-.014 2.022-.014S7.836 5.57 7.97 5.452c.202.196 1.788 1.025 1.788 1.025s.115-1.412.456-1.888c.041.336.52 1.857.52 1.857s.963-.963 1.498-.963c-.235.29-.791 1.57-.791 1.57s1.385-.022 1.912.237c-.638.09-1.756.652-1.756.652s1.456 1.104 1.324 1.334c-.782-.382-1.686-.51-1.686-.51s.25 1.537.048 1.884c-.197-.511-.938-1.596-.938-1.596z"/><path fill="#FFD018" stroke="#F19900" stroke-opacity=".98" stroke-width=".5" d="M10.262 8.339a.625.625 0 1 0 0-1.25.625.625 0 0 0 0 1.25z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#F7FCFF" fill-rule="evenodd" d="M0 0h20v15H0V0z" clip-rule="evenodd"/><path fill="#3547A0" stroke="#E31D1C" stroke-width="1.25" d="M0-.625h-.625v7.692L-1.78 7.5l1.155.433v7.692H20l.22-1.21L1.78 7.5 20.22.585 20-.625H0z"/><path fill="#C44800" fill-rule="evenodd" d="M17.556 3.767s-5.04 1.309-5.04 1.51c0 .201-.453.84-.36 1.006.093.166.334.387.532.277.198-.11.668-.554.51-.277-.157.277.85.598.425 1.21 0 0 .51-.294.263 1.377l1.213.346s1.356-.355.737-1.372h.718s-.297-1.318.143-1.561c.44-.244-.449-.429-.449-.429 1.878-1.069 1.308-2.087 1.308-2.087z" clip-rule="evenodd"/><path fill="#FFC221" fill-rule="evenodd" d="m16.722 9.357-3.042-.515-.399-.533-1.727.348 1.516.859.51-.275 3.142.502v-.386z" clip-rule="evenodd"/><path fill="#FFC221" fill-rule="evenodd" d="M17.189 9.824v-.301l-3.41-.208s-.207-.19-.714-.19-.565.398-.565.398.29.58.855.58c.564 0 1.441.135 1.679.414.237.279 1.222-.143 1.222-.143s-.421-.724-.96-.497c-.54.226-1.518-.11-1.518-.232 0-.122 3.411.18 3.411.18zm-5.761-2.44s-.33.709-.21.977c.528.551 1.488-.328 1.488-.328l-1.278-.65z" clip-rule="evenodd"/><path fill="#979797" fill-rule="evenodd" d="M16.642 7.722c.351-.18.53-.515.53-.95 0-.336-.08-.602-.256-.771v-.229l-.31-.003c-2.774-.025-4.336.25-4.789.936-.458.695-.418 1.288.205 1.576l.276-.007c1.347-.702 2.717-.877 4.126-.527l.218-.025zm-4.564-.845c.366-.554 1.874-.82 4.525-.795v.079c.171.082.257.285.257.61s-.12.55-.36.673c-1.484-.369-2.933-.184-4.347.553-.415-.192-.44-.565-.075-1.12z" clip-rule="evenodd"/><path fill="#F7FCFF" d="M16.603 6.082c-2.651-.024-4.16.24-4.525.795-.365.555-.34.928.075 1.12 1.414-.737 2.863-.922 4.346-.553.24-.123.36-.348.36-.673 0-.325-.085-.528-.256-.61v-.08z"/></g></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#F7FCFF" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g fill="#C51918" fill-rule="evenodd" clip-rule="evenodd" mask="url(#b)"><path d="M0 0v5h20V0H0zm0 10v5h20v-5H0z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 584 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#2E42A5" fill-rule="evenodd" d="M0 0h20v15H0V0z" clip-rule="evenodd"/><path fill="#2E42A5" d="M0 0h11v9H0z"/><mask id="b" width="11" height="9" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h11v9H0z"/></mask><g mask="url(#b)"><path fill="#F7FCFF" d="M-1.253 8.125 1.223 9.21l10.083-8.03 1.306-1.614-2.647-.363-4.113 3.46-3.31 2.332-3.795 3.129z"/><path fill="#F50100" d="m-.914 8.886 1.261.63L12.143-.583h-1.77L-.915 8.886z"/><path fill="#F7FCFF" d="M12.503 8.125 10.306 9.52-.056 1.18-1.362-.434l2.647-.363 4.113 3.46 3.31 2.332 3.795 3.129z"/><path fill="#F50100" d="m12.418 8.67-1.261.63-5.023-4.323-1.489-.483-6.133-4.921H.283l6.13 4.804 1.628.58 4.377 3.714z"/><mask id="c" width="13" height="11" x="-1" y="-1" fill="#000" maskUnits="userSpaceOnUse"><path fill="#fff" d="M-1-1h13v11H-1z"/><path fill-rule="evenodd" d="M6 0H5v4H0v1h5v4h1V5h5V4H6V0z" clip-rule="evenodd"/></mask><path fill="#F50100" fill-rule="evenodd" d="M6 0H5v4H0v1h5v4h1V5h5V4H6V0z" clip-rule="evenodd"/><path fill="#F7FCFF" d="M5 0v-.938h-.938V0H5zm1 0h.938v-.938H6V0zM5 4v.938h.938V4H5zM0 4v-.938h-.938V4H0zm0 1h-.938v.938H0V5zm5 0h.938v-.938H5V5zm0 4h-.938v.938H5V9zm1 0v.938h.938V9H6zm0-4v-.938h-.938V5H6zm5 0v.938h.938V5H11zm0-1h.938v-.938H11V4zM6 4h-.938v.938H6V4zM5 .937h1V-.938H5V.938zM5.938 4V0H4.063v4h1.875zM0 4.938h5V3.063H0v1.874zM.938 5V4H-.938v1H.938zM5 4.062H0v1.875h5V4.063zM5.938 9V5H4.063v4h1.875zM6 8.062H5v1.876h1V8.062zM5.062 5v4h1.875V5H5.063zM11 4.062H6v1.875h5V4.063zM10.062 4v1h1.876V4h-1.876zM6 4.938h5V3.063H6v1.874zM5.062 0v4h1.875V0H5.063z" mask="url(#c)"/></g></g><path fill="#F7FCFF" d="m5.92 12.278-.82.758.081-1.113-1.104-.17.922-.63-.557-.968 1.068.327.41-1.039.41 1.039 1.068-.327-.557.968.922.63-1.104.17.081 1.113-.82-.758zm7.32-3.981-.547.505.054-.743-.735-.112.614-.42-.371-.646.712.218.273-.692.273.692.712-.218-.37.645.613.421-.735.112.054.743-.547-.505zm1.28-5.334-.547.506.054-.743-.735-.112.614-.42-.371-.646.712.218.273-.693.273.693.712-.218-.37.645.613.42-.735.113.054.743-.547-.506zm3.2 2.667-.547.505.054-.742-.735-.113.614-.42-.371-.646.712.218.273-.692.273.692.712-.218-.37.646.613.42-.735.113.054.742-.547-.505zm-2.56 7.667-.547.505.054-.742-.735-.113.614-.42-.371-.646.712.218.273-.692.273.692.712-.218-.37.646.613.42-.735.113.054.742-.547-.505zM17.4 9.14l-.555.291.106-.618-.45-.438.621-.09.278-.563.278.562.62.09-.449.439.107.618-.556-.292z"/></svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#5BA3DA" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#b)"><g filter="url(#c)"><path fill="#EF2929" d="M3.546 4.975.808 4.397l2.772-.549.8-2.868.633 2.845 2.474.575-2.445.575-.706 2.34-.791-2.34z"/><path fill="red" d="M3.546 4.975.808 4.397l2.772-.549.8-2.868.633 2.845 2.474.575-2.445.575-.706 2.34-.791-2.34z"/></g><path fill="#FAD615" d="M20 9H0v1h20V9zm0 2H0v1h20v-1z"/></g></g><defs><filter id="c" width="8.681" height="8.335" x="-.192" y="-.02" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset/><feGaussianBlur stdDeviation=".5"/><feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.2 0"/><feBlend in2="BackgroundImageFix" result="effect1_dropShadow"/><feBlend in="SourceGraphic" in2="effect1_dropShadow" result="shape"/></filter></defs></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#0061C1" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#D21034" stroke="#FFCE00" d="M6-.5h-.5v6h-6v4h6v6h4v-6h11v-4h-11v-6H6z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 572 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#AF0100" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#b)"><path fill="#3CA5D9" d="M0 0v5h20V0H0z"/><path fill="#73BE4A" d="M0 10v5h20v-5H0z"/><path fill="#F7FCFF" d="M10.726 9.317c-.842-.194-1.5-.856-1.492-1.828.008-.909.595-1.678 1.52-1.887.927-.209 1.741.232 1.741.232-.255-.567-1.143-.965-1.872-.963-1.357.003-2.804 1.039-2.818 2.62-.015 1.64 1.546 2.571 2.919 2.568 1.1-.003 1.624-.712 1.732-1.013 0 0-.888.465-1.73.27zm.535-.93.735-.51.735.51-.26-.856.714-.54-.895-.019-.294-.845-.294.845-.895.018.713.541-.259.857z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 992 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="21" height="15" fill="none"><mask id="a" width="22" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h21.25v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#2E42A5" d="M0 0h20.25v15H0V0z"/><path fill="#FECA00" d="M6.25 0H19v15L6.25 0z"/><path fill="#F7FCFF" d="m4.443 1.746-.735.386.14-.818-.594-.58.821-.119.368-.744.367.744.821.12-.594.58.14.817-.734-.386zm2.179 2.675-.735.386.14-.818-.594-.58.821-.118.368-.745.367.745.822.119-.595.58.14.817-.734-.386zm2.043 2.603-.735.386.14-.818-.594-.58.821-.119.368-.744.367.744.821.12-.594.58.14.817-.734-.386zm2.001 2.494-.735.387.14-.819-.594-.579.822-.12.367-.744.367.745.822.119-.595.58.14.818-.734-.387zm2.156 2.567-.735.387.14-.818-.594-.58.821-.12.367-.744.368.745.821.12-.594.579.14.818-.734-.387zm2.382 2.485-.735.386.14-.819-.594-.579.822-.12.367-.744.368.745.821.12-.594.579.14.818-.735-.387z"/></g></svg>

After

Width:  |  Height:  |  Size: 970 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#2E42A5" d="M14 0h6v15h-6V0z"/><path fill="#FECA00" d="M6 0h8v15H6V0z"/><path fill="#2E42A5" d="M0 0h6v15H0V0z"/><path fill="#000" d="M11.521 9.546c.396-.818.852-2.311.852-2.311l.346-1.028-1.372.497.325.188s-.566 1.131-.85 1.684c-.286.552-.314.187-.314.187l.049-3.855.315-.086-.785-1.507-1.001 1.528.44.012S9.49 8.923 9.43 8.763c-.034-.09-.125.19-.17.081-.278-.681-.658-2.002-.658-2.002l.222-.208-1.492-.307.445.918s.393 1.635.825 2.434c.097.252.566.36.566.36s.23-.233.286 0c.057.233 0 1.172 0 1.172h1.055s-.074-.886 0-1.172c.074-.286.304 0 .304 0s.612-.24.71-.493z"/></g></svg>

After

Width:  |  Height:  |  Size: 842 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#38A17E" d="M0 0h20v15H0z"/><path fill="#F72E45" fill-rule="evenodd" d="M7.5 11.25a3.75 3.75 0 1 0 0-7.5 3.75 3.75 0 0 0 0 7.5z" clip-rule="evenodd"/></g></svg>

After

Width:  |  Height:  |  Size: 384 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#FECA00" d="M6 0h8v15H6V0z"/><path fill="#E31D1C" d="M14 0h6v15h-6V0z"/><path fill="#1D1D1D" d="M0 0h6v15H0V0z"/></g></svg>

After

Width:  |  Height:  |  Size: 387 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#5EAA22" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#b)"><path fill="#C51918" d="M0 0v7.5h20V0H0z"/><path fill="#FECA00" d="m10.022 9.857-2.94 2.224.941-3.623-2.757-2.206h3.286l1.47-3.216 1.47 3.216h3.285l-2.786 2.209.97 3.62-2.939-2.224z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 711 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#5EAA22" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#b)"><path fill="#F7FCFF" d="M0 0v5h20V0H0z"/><path fill="#E22C18" d="M0 10v5h20v-5H0z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 611 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#E31D1C" d="M0 0h20v15H0z"/><path fill="#F7FCFF" fill-rule="evenodd" d="M0 0h4.25L7.5 1.25 4.25 2.5 7.5 3.75 4.25 5 7.5 6.25 4.25 7.5 7.5 8.75 4.25 10l3.25 1.25-3.25 1.25 3.25 1.25L4.25 15H0V0z" clip-rule="evenodd"/></g></svg>

After

Width:  |  Height:  |  Size: 450 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><rect width="20" height="15" fill="#5EAA22" rx="1.25"/><mask id="b" width="30" height="19" x="-5" y="-2" fill="#000" maskUnits="userSpaceOnUse"><path fill="#fff" d="M-5-2h30v19H-5z"/><path fill-rule="evenodd" d="M10 7.5 20 0H0l10 7.5zm0 0L0 15h20L10 7.5z" clip-rule="evenodd"/></mask><path fill="#DD2C2B" fill-rule="evenodd" d="M10 7.5 20 0H0l10 7.5zm0 0L0 15h20L10 7.5z" clip-rule="evenodd"/><path fill="#fff" d="m20 0 .938 1.25 3.75-2.813H20V0zM0 0v-1.563h-4.688l3.75 2.813L0 0zm0 15-.938-1.25-3.75 2.813H0V15zm20 0v1.563h4.688l-3.75-2.813L20 15zm-.938-16.25-10 7.5 1.876 2.5 10-7.5-1.875-2.5zM0 1.563h20v-3.125H0v3.125zM10.938 6.25l-10-7.5-1.875 2.5 10 7.5 1.874-2.5zm-1.876 0-10 7.5 1.875 2.5 10-7.5-1.874-2.5zM0 16.563h20v-3.125H0v3.124zm20.938-2.813-10-7.5-1.876 2.5 10 7.5 1.875-2.5z" mask="url(#b)"/><path fill="#fff" fill-rule="evenodd" d="M10 11.25a3.75 3.75 0 1 0 0-7.5 3.75 3.75 0 0 0 0 7.5z" clip-rule="evenodd"/><path fill="#DD2C2B" fill-rule="evenodd" d="m10.104 6.518-.734.386.14-.818-.594-.58h.821l.367-.863.368.864h.821l-.594.58.14.817-.735-.386zm-1.753 2.5-.734.386.14-.818-.595-.58h.822l.367-.863.368.864h.821l-.594.58.14.817-.735-.386zm3.5 0-.734.386.14-.818-.595-.58h.822l.367-.863.368.864h.821l-.594.58.14.817-.735-.386z" clip-rule="evenodd"/></g></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#DD2C2B" fill-rule="evenodd" d="M0 0h20v15H0V0z" clip-rule="evenodd"/><path fill="#FECA00" fill-rule="evenodd" d="M0 0v7.5h20V0H0z" clip-rule="evenodd"/><path fill="#5EAA22" d="M0 0h9v15H0z"/></g></svg>

After

Width:  |  Height:  |  Size: 426 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#F50100" d="M14 0h6v15h-6V0z"/><path fill="#2E42A5" d="M0 0h8v15H0V0z"/><path fill="#F7FCFF" d="M6 0h8v15H6V0z"/></g></svg>

After

Width:  |  Height:  |  Size: 387 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#AF0100" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#F7FCFF" fill-rule="evenodd" d="M13.755 7.5c0 3.68.348 4.957 2.445 4.957s2.67-1.854 2.494-4.957h-4.94z" clip-rule="evenodd"/><path fill="#AF0100" fill-rule="evenodd" d="M16.313 9.625c.586 0 1.062-.56 1.062-1.25s-.476-1.25-1.063-1.25c-.586 0-1.062.56-1.062 1.25s.476 1.25 1.063 1.25z" clip-rule="evenodd"/><path fill="#5EAA22" fill-rule="evenodd" d="M14.246 11.446c.373.834 1.027 1.25 1.96 1.25.928 0 1.583-.41 1.967-1.233l-3.927-.017z" clip-rule="evenodd"/><path fill="#82B2CB" d="m14.762 9.394-.349-.87c.64-.257 1.258-.387 1.85-.387.594 0 1.211.13 1.852.387l-.35.87c-.533-.214-1.033-.32-1.501-.32-.468 0-.968.106-1.502.32z"/><path fill="#FECA00" fill-rule="evenodd" d="M15.625 10a.625.625 0 1 0 0-1.25.625.625 0 0 0 0 1.25z" clip-rule="evenodd"/><path fill="#8A4E22" fill-rule="evenodd" d="M16 11a.625.625 0 1 0 0-1.25.625.625 0 0 0 0 1.25z" clip-rule="evenodd"/><path fill="#AF0100" fill-rule="evenodd" d="M15 10.5a.625.625 0 1 0 0-1.25.625.625 0 0 0 0 1.25zm2.125 0a.625.625 0 1 0 0-1.25.625.625 0 0 0 0 1.25zm-.437 1.375c.241 0 .437-.28.437-.625s-.196-.625-.438-.625c-.241 0-.437.28-.437.625s.196.625.438.625zm-1.5 0c.241 0 .437-.28.437-.625s-.196-.625-.438-.625c-.241 0-.437.28-.437.625s.196.625.438.625z" clip-rule="evenodd"/><path fill="#2E42A5" d="M0 0h11v9H0z"/><mask id="c" width="11" height="9" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h11v9H0z"/></mask><g mask="url(#c)"><path fill="#fff" d="M-1.253 8.125 1.223 9.21l10.083-8.03 1.306-1.614-2.647-.363-4.113 3.46-3.31 2.332-3.795 3.129z"/><path fill="#F50100" d="m-.914 8.886 1.261.63L12.143-.583h-1.77L-.915 8.886z"/><path fill="#fff" d="M12.503 8.125 10.306 9.52-.056 1.18-1.362-.434l2.647-.363 4.113 3.46 3.31 2.332 3.795 3.129z"/><path fill="#F50100" d="m12.418 8.67-1.261.63-5.023-4.323-1.489-.483-6.133-4.921H.283l6.13 4.804 1.628.58 4.377 3.714z"/><mask id="d" width="13" height="11" x="-1" y="-1" fill="#000" maskUnits="userSpaceOnUse"><path fill="#fff" d="M-1-1h13v11H-1z"/><path fill-rule="evenodd" d="M6 0H5v4H0v1h5v4h1V5h5V4H6V0z" clip-rule="evenodd"/></mask><path fill="#F50100" fill-rule="evenodd" d="M6 0H5v4H0v1h5v4h1V5h5V4H6V0z" clip-rule="evenodd"/><path fill="#F7FCFF" d="M5 0v-.938h-.938V0H5zm1 0h.938v-.938H6V0zM5 4v.938h.938V4H5zM0 4v-.938h-.938V4H0zm0 1h-.938v.938H0V5zm5 0h.938v-.938H5V5zm0 4h-.938v.938H5V9zm1 0v.938h.938V9H6zm0-4v-.938h-.938V5H6zm5 0v.938h.938V5H11zm0-1h.938v-.938H11V4zM6 4h-.938v.938H6V4zM5 .937h1V-.938H5V.938zM5.938 4V0H4.063v4h1.875zM0 4.938h5V3.063H0v1.874zM.938 5V4H-.938v1H.938zM5 4.062H0v1.875h5V4.063zM5.938 9V5H4.063v4h1.875zM6 8.062H5v1.876h1V8.062zM5.062 5v4h1.875V5H5.063zM11 4.062H6v1.875h5V4.063zM10.062 4v1h1.876V4h-1.876zM6 4.938h5V3.063H6v1.874zM5.062 0v4h1.875V0H5.063z" mask="url(#d)"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.5 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#FECA00" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#DB501C" fill-rule="evenodd" d="M0 0v5h20V0H0z" clip-rule="evenodd"/><path fill="#5EAA22" fill-rule="evenodd" d="M0 10v5h20v-5H0z" clip-rule="evenodd"/><path stroke="#DB501C" stroke-width=".938" d="M7.28 7.038s-.233 2.38 1.883 2.38h1.577s2.226-.145 1.968-2.38"/><path fill="#FECA00" stroke="#68B9E8" stroke-width=".938" d="M11.406 7.375a1.406 1.406 0 1 1-2.812 0 1.406 1.406 0 0 1 2.812 0z"/><path fill="#DB501C" fill-rule="evenodd" d="M10 7.5a.625.625 0 1 0 0-1.25.625.625 0 0 0 0 1.25z" clip-rule="evenodd"/><path fill="#5EAA22" fill-rule="evenodd" d="M10.063 8.5c.586 0 1.062-.224 1.062-.5s-.476-.5-1.063-.5C9.476 7.5 9 7.724 9 8s.476.5 1.063.5z" clip-rule="evenodd"/><path fill="#674F28" fill-rule="evenodd" d="M10.063 6.25c.828 0 1.5-.224 1.5-.5s-.672-.5-1.5-.5c-.829 0-1.5.224-1.5.5s.671.5 1.5.5z" clip-rule="evenodd"/></g></g></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#fff" fill-rule="evenodd" d="M0 0h20v15H0V0z" clip-rule="evenodd"/><path fill="#FEDA00" fill-rule="evenodd" d="M0 6.833V0h10L0 6.833z" clip-rule="evenodd"/><path fill="#00268D" fill-rule="evenodd" d="M0 15h20.006V0L0 15z" clip-rule="evenodd"/><mask id="b" fill="#fff"><path fill-rule="evenodd" d="m5.846 3.125.33.707a2.75 2.75 0 0 1 2.419 2.661l.597.299-.652.326A2.752 2.752 0 0 1 6.2 9.29l-.354.71-.355-.71a2.752 2.752 0 0 1-2.34-2.172L2.5 6.792l.597-.299a2.75 2.75 0 0 1 2.397-2.658l.352-.71z" clip-rule="evenodd"/></mask><path fill="#fff" fill-rule="evenodd" d="m5.846 3.125.33.707a2.75 2.75 0 0 1 2.419 2.661l.597.299-.652.326A2.752 2.752 0 0 1 6.2 9.29l-.354.71-.355-.71a2.752 2.752 0 0 1-2.34-2.172L2.5 6.792l.597-.299a2.75 2.75 0 0 1 2.397-2.658l.352-.71z" clip-rule="evenodd"/><path fill="#000" d="m6.175 3.832-.453.211.117.252.277.033.06-.496zm-.33-.707.454-.211-.44-.943-.461.932.448.222zm2.75 3.368-.5.013.008.3.268.135.224-.448zm.597.299.223.447.895-.447-.895-.448-.223.448zm-.652.326-.224-.448-.217.11-.049.237.49.1zM6.2 9.29l-.063-.496-.264.034-.12.238.448.224zm-.354.71-.447.224.447.894.447-.894L5.846 10zm-.355-.71.447-.224-.12-.238-.263-.034-.064.496zM3.15 7.118l.49-.1-.048-.239-.218-.109-.223.448zm-.65-.326-.224-.448-.894.448.894.447.224-.447zm.597-.299.223.448.27-.135.007-.3-.5-.013zm2.397-2.658.063.496.266-.034.12-.24-.449-.222zm1.134-.214L6.3 2.914l-.906.422.329.707.906-.422zm2.467 2.86a3.25 3.25 0 0 0-2.86-3.145l-.12.992a2.25 2.25 0 0 1 1.98 2.178l1-.025zm.32-.137-.596-.298-.448.895.597.298.447-.895zm-.652 1.22.652-.325-.447-.895-.652.326.447.895zM6.265 9.787A3.252 3.252 0 0 0 9.03 7.218l-.98-.2a2.252 2.252 0 0 1-1.913 1.776l.128.992zm-.511-.72-.355.71.894.448.355-.71-.894-.448zm.54.71-.356-.71-.894.447.355.71.894-.447zM2.661 7.218a3.252 3.252 0 0 0 2.765 2.568l.128-.992a2.252 2.252 0 0 1-1.913-1.777l-.98.201zm-.386.02.652.327.447-.895-.651-.326-.448.895zm.597-1.192-.597.298.448.895.596-.298-.447-.895zM5.431 3.34a3.25 3.25 0 0 0-2.834 3.14l1 .025a2.25 2.25 0 0 1 1.96-2.175l-.126-.992zm-.033-.436-.352.71.896.444.352-.71-.896-.444z" mask="url(#b)"/><path fill="#F00A17" fill-rule="evenodd" d="m5.86 5.188-.406.68h-.8l.4.715-.4.686h.8l.406.7.412-.7h.793l-.39-.686.39-.715h-.793l-.412-.68z" clip-rule="evenodd"/></g></svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#fff" d="M0 0h20v15H0V0z"/><path fill="#F00000" d="M0 7.29V0h10L0 7.29zm20 0V0H10l10 7.29z"/><path fill="#00268D" d="M0 7.29V15h10L0 7.29zm20 0v7.92L10 15l10-7.71z"/><path fill="#FEDA00" d="m9.821 8.91-2.198 1.567.807-2.588-2.18-1.585h2.715l.856-2.554.907 2.554h2.642L11.21 7.89l.82 2.588L9.822 8.91z"/></g></svg>

After

Width:  |  Height:  |  Size: 577 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#00268D" fill-rule="evenodd" d="M0 0h20v15H0V0z" clip-rule="evenodd"/><path fill="#00268D" stroke="#E31D1C" stroke-width="1.25" d="M.625.625h18.75v13.75H.625V.625z"/><path fill="#E31D1C" d="M9.375 0h1.25v15h-1.25z"/><path fill="#E31D1C" d="M0 8.125v-1.25h20v1.25z"/><path fill="#fff" stroke="#E31D1C" stroke-width="1.25" d="m10.28 3.816-.28-.14-.28.14-6.25 3.125-1.118.559 1.118.559 6.25 3.125.28.14.28-.14 6.25-3.125 1.117-.559-1.117-.559-6.25-3.125z"/><mask id="b" width="20" height="11" x="0" y="2" maskUnits="userSpaceOnUse"><path fill="#fff" stroke="#fff" stroke-width="1.25" d="m10.28 3.816-.28-.14-.28.14-6.25 3.125-1.118.559 1.118.559 6.25 3.125.28.14.28-.14 6.25-3.125 1.117-.559-1.117-.559-6.25-3.125z"/></mask><g mask="url(#b)"><path fill="#059334" d="M7.256 10h8.369l-.885-.957s-1.77-1.893-1.883-1.98c-.114-.086-.302-.124-.516.152-.215.276-.337-.151-.516-.151-.178 0-.253 0-.512.353l-1.19 1.626H8.755s-.231-.209-.363-.134c-.131.074-.872-.825-1.136-.892-.264-.067-.438.243-.438.49 0 .248-.124-.226-.377-.087-.253.14-.171.489-.171.489S7.087 10 7.256 10z"/><path fill="#FEDA00" fill-rule="evenodd" d="m9.753 7.034-.617.466.226-.77-.612-.47h.763l.24-.76.255.76h.742l-.607.47.23.77-.62-.466z" clip-rule="evenodd"/></g></g></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#093" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><g fill-rule="evenodd" clip-rule="evenodd" filter="url(#c)"><path fill="#FFD221" d="M9.954 2.315 17.58 7.63l-7.73 4.977-7.47-5.08 7.574-5.212z"/><path fill="url(#d)" d="M9.954 2.315 17.58 7.63l-7.73 4.977-7.47-5.08 7.574-5.212z"/></g><path fill="#2E42A5" fill-rule="evenodd" d="M10 10.75a3.125 3.125 0 1 0 0-6.25 3.125 3.125 0 0 0 0 6.25z" clip-rule="evenodd"/><mask id="e" width="8" height="7" x="6" y="4" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M10 10.75a3.125 3.125 0 1 0 0-6.25 3.125 3.125 0 0 0 0 6.25z" clip-rule="evenodd"/></mask><g fill="#F7FCFF" mask="url(#e)"><path fill-rule="evenodd" d="m8.988 9.106-.14.074.027-.156-.113-.11.156-.023.07-.141.07.141.155.023-.113.11.027.156-.14-.074zm1.25 0-.14.074.027-.156-.113-.11.156-.023.07-.141.07.141.155.023-.113.11.027.156-.14-.074zm0 .75-.14.074.027-.156-.113-.11.156-.023.07-.141.07.141.155.023-.113.11.027.156-.14-.074zm-.625-2.625-.14.074.027-.156-.113-.11.156-.023.07-.141.07.141.155.023-.113.11.027.156-.14-.074zm0 1.25-.14.074.027-.156-.113-.11.156-.023.07-.141.07.141.155.023-.113.11.027.156-.14-.074zm-.876-.625-.14.074.028-.156-.113-.11.156-.023.07-.141.07.141.155.023-.113.11.027.156-.14-.074zm-.875.5-.14.074.028-.156-.113-.11.156-.023.07-.141.07.141.155.023-.113.11.027.156-.14-.074zm2.876-2.125-.14.074.027-.156-.113-.11.156-.023.07-.141.07.141.155.023-.112.11.026.156-.14-.074z" clip-rule="evenodd"/><path d="m6.203 6.873.094-1.246c2.999.226 5.365 1.212 7.07 2.966l-.896.871c-1.478-1.52-3.557-2.386-6.268-2.59z"/></g></g></g><defs><linearGradient id="d" x1="20" x2="20" y1="15" y2="0" gradientUnits="userSpaceOnUse"><stop stop-color="#FFC600"/><stop offset="1" stop-color="#FFDE42"/></linearGradient><filter id="c" width="15.2" height="10.292" x="2.381" y="2.315" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset/><feColorMatrix values="0 0 0 0 0.0313726 0 0 0 0 0.368627 0 0 0 0 0 0 0 0 0.28 0"/><feBlend in2="BackgroundImageFix" result="effect1_dropShadow"/><feBlend in="SourceGraphic" in2="effect1_dropShadow" result="shape"/></filter></defs></svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#FECA00" d="M0 0h20v15H0V0z"/><path fill="#3CB1CF" d="M0 0v5h20V0H0zm0 10v5h20v-5H0z"/><path fill="#272727" d="m0 0 10 7.5L0 15V0z"/></g></svg>

After

Width:  |  Height:  |  Size: 407 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#FF6230" fill-rule="evenodd" d="M0 0h20v15H0V0z" clip-rule="evenodd"/><path fill="#FECA00" fill-rule="evenodd" d="M0 0v15L20 0H0z" clip-rule="evenodd"/><g filter="url(#b)"><path fill="#fff" fill-rule="evenodd" d="M2.739 10.206s-.94.856-.195.9c.745.046.606.5 1.215.003.61-.496.018.08.83-.034.813-.113 1.22-1.104 1.649-1.036.428.067.18-.09.541.338.361.43.996-.481.657.15-.338.633-.474 1.264.023 1.242.497-.023.7-.316.925-.632.226-.316 1.987.768 1.174-.316-.812-1.083-1.128.119-1.195-.445-.068-.565-.23-.858.155-.587.383.27 1.286.203.586-.474-.7-.678-.602-.858-.806-.678-.203.181-.7-.677 0-.79.7-.112 1.506.271 1.777.474.27.204 1.106-.045 1.287.361.18.407.79.475.947.723.159.248.046 1.467 1.332 1.4 1.287-.068 1.693-.723 1.152-1.242-.542-.52-.497-1.467-1.061-1.016-.565.452-1.377.384-1.377-.158s.248-.632.203-1.06c-.045-.43-.09-.25.745-.227.835.023.541 0 1.15-.293.61-.293 1.017.993 1.265.045s-.09-1.918-.767-1.535c-.678.384-.655 1.332-1.513.587-.857-.745-1.264-.361-.993-.767.27-.407-.068-.7.542-.43.61.272.429.362.948.43.519.067 3.273.406 2.663-.158-.61-.565-1.194-.473-1.284-.834-.09-.36.28-.27.823-.474.541-.203.316-1.241-.204-1.038-.519.203-.474 1.106-1.535.542-1.218.53-1.03.263-1.649-.634-.542-.43-.835-.452-1.76.045-.731.301-1.342.858-.959 1.603.384.745 1.298 2.147.802 2.238-.497.09-2.28-1.242-3.318-.542-1.039.7-1.606 1.38-1.944 2.193-.339.813-1.434 1.286-1.705 1.286-.27 0-.652.478-1.126.84z" clip-rule="evenodd"/></g></g><defs><filter id="b" width="20.429" height="15.551" x="-.743" y="-.782" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset/><feGaussianBlur stdDeviation="1.5"/><feColorMatrix values="0 0 0 0 0.866667 0 0 0 0 0.184314 0 0 0 0 0 0 0 0 0.38 0"/><feBlend in2="BackgroundImageFix" result="effect1_dropShadow"/><feBlend in="SourceGraphic" in2="effect1_dropShadow" result="shape"/></filter></defs></svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#E31D1C" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#2E42A5" stroke="#F7FCFF" stroke-width="1.25" d="M6.25-.625h-.625v6.25h-6.25v3.75h6.25v6.25h3.75v-6.25h11.25v-3.75H9.375v-6.25H6.25z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 634 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#42ADDF" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#58A5FF" fill-rule="evenodd" d="M0 0v5h20V0H0z" clip-rule="evenodd"/><path fill="#272727" stroke="#F7FCFF" d="M0 5.5h-.5v4h21v-4H0z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 633 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#73BE4A" fill-rule="evenodd" d="M0 0h20v15H0V0z" clip-rule="evenodd"/><path fill="#AF0100" fill-rule="evenodd" d="M0 0v10h20V0H0z" clip-rule="evenodd"/><path fill="#F7FCFF" d="M0 0h3.75v15H0z"/><path fill="#D0181A" fill-rule="evenodd" d="M.625 0a.625.625 0 1 1 0 1.25.625.625 0 0 1 0-1.25zm2.5 0a.625.625 0 1 1 0 1.25.625.625 0 0 1 0-1.25zM1.25 3.125a.625.625 0 1 0-1.25 0 .625.625 0 0 0 1.25 0zM3.125 2.5a.625.625 0 1 1 0 1.25.625.625 0 0 1 0-1.25zm0 8.75a.625.625 0 1 1 0 1.25.625.625 0 0 1 0-1.25zm-1.875.625a.625.625 0 1 0-1.25 0 .625.625 0 0 0 1.25 0zM.625 13.75a.625.625 0 1 1 0 1.25.625.625 0 0 1 0-1.25zm3.125.625a.625.625 0 1 0-1.25 0 .625.625 0 0 0 1.25 0zM1.875 12.5a.625.625 0 1 1 0 1.25.625.625 0 0 1 0-1.25zM2.5 1.875a.625.625 0 1 0-1.25 0 .625.625 0 0 0 1.25 0zm.069 5.65L3.75 8.75V10l.027.058-1.845-1.847L.274 10H0V8.75l1.24-1.232L0 6.278V5h.136l1.779 1.846 1.787-1.778L3.75 5v1.25L2.569 7.524zM1.875 3.75a.625.625 0 1 1 0 1.25.625.625 0 0 1 0-1.25zm.625 6.875a.625.625 0 1 0-1.25 0 .625.625 0 0 0 1.25 0z" clip-rule="evenodd"/><path fill="#8F181A" fill-rule="evenodd" d="M0 0h1.25v1.25H0V0zm1.25 2.5H0v1.25h1.25V2.5zM0 5h1.25v1.25H0V5zm1.25 3.75H0V10h1.25V8.75zM0 11.25h1.25v1.25H0v-1.25zm1.25 2.5H0V15h1.25v-1.25zm2.5 0H2.5V15h1.25v-1.25zM3.75 0H2.5v1.25h1.25V0z" clip-rule="evenodd" opacity=".4"/></g></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#0168B4" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#E93C43" fill-rule="evenodd" d="M0-1v3h20v-3H0zm0 14v3h20v-3H0z" clip-rule="evenodd"/><path fill="#F7FCFF" d="M10 11.25a3.75 3.75 0 1 1 0-7.5 3.75 3.75 0 0 1 0 7.5z"/><path fill="#fff" fill-rule="evenodd" d="M5.625 7.5a4.375 4.375 0 1 0 8.75 0 4.375 4.375 0 0 0-8.75 0zm8.125 0a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0z" clip-rule="evenodd"/><path fill="#5B8C39" fill-rule="evenodd" d="M6.25 7.5a3.75 3.75 0 1 0 7.5 0 3.75 3.75 0 0 0-7.5 0zm6.625 0a2.875 2.875 0 1 1-5.75 0 2.875 2.875 0 0 1 5.75 0z" clip-rule="evenodd"/><path fill="#5B8C39" fill-rule="evenodd" d="m8.125 8.75 1.837-.235 1.913.235v.625L9.962 9.14l-1.837.235V8.75z" clip-rule="evenodd"/><path fill="#769DF1" fill-rule="evenodd" d="M8.75 6.25h2.5S11.427 10 10 10 8.75 6.25 8.75 6.25z" clip-rule="evenodd"/><path fill="#FECA00" d="M10 6.25h1.25V7.5H10z"/><path fill="#F6F7F8" d="M8.75 6.25H10V7.5H8.75z" opacity=".6"/><rect width="2.5" height="1.25" x="8.75" y="5" fill="#5B8C39" opacity=".66" rx=".625"/><path fill="#E9AD35" fill-rule="evenodd" d="M8.625 8c.345 0 .625-.56.625-1.25S8.97 5.5 8.625 5.5 8 6.06 8 6.75 8.28 8 8.625 8z" clip-rule="evenodd"/><path fill="#5C2216" fill-rule="evenodd" d="M11.375 8C11.72 8 12 7.44 12 6.75s-.28-1.25-.625-1.25-.625.56-.625 1.25.28 1.25.625 1.25z" clip-rule="evenodd"/></g></g></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#F7FCFF" d="M5 0h10v15H5V0z"/><path fill="#E31D1C" d="M8.956 5.252 9.983 3.75 10 12.5h-.428l.263-2.165s-2.883.529-2.644.262c.238-.267.375-.757.375-.757L5 8.092s.405-.005.734-.205c.33-.2-.33-1.385-.33-1.385l1.296.192.49-.544.978 1.045h.44l-.44-2.393.788.45zM10 12.5V3.75l1.044 1.502.788-.45-.44 2.393h.44l.977-1.045.49.544 1.296-.192s-.658 1.185-.33 1.385c.33.2.735.205.735.205L12.434 9.84s.137.49.376.757c.238.267-2.645-.262-2.645-.262l.263 2.165H10zM15 0h5v15h-5V0zM0 0h5v15H0V0z"/></g></svg>

After

Width:  |  Height:  |  Size: 757 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><g mask="url(#CC_-_Cocos_(Keeling)_Islands__a)"><path fill="#5EAA22" fill-rule="evenodd" d="M0 0h20v15H0V0z" clip-rule="evenodd"/><path fill="#FECA00" fill-rule="evenodd" d="m15 4.375-.625.458.084-.77-.709-.313.709-.313-.084-.77.625.458.625-.458-.084.77.709.313-.709.313.084.77L15 4.375zm-.648 4.175-.625.457.083-.77-.708-.313.708-.312-.083-.77.625.457.625-.457-.084.77.709.312-.709.313.084.77-.625-.458zm1.898 3.325-.625.457.084-.77L15 11.25l.709-.313-.084-.77.625.458.625-.457-.084.77.709.312-.709.313.084.77-.625-.458zm.625-5.937-.313.228.042-.385-.354-.156.354-.156-.041-.385.312.229.313-.23-.042.386.354.156-.354.156.041.385-.312-.229zM4.375 8.75a3.125 3.125 0 1 0 0-6.25 3.125 3.125 0 0 0 0 6.25z" clip-rule="evenodd"/><path fill="#915E2B" d="m4.056 7.492-.224-.158c.496-.65.365-1.558.224-2.155l.912-.215c.21.89-.255 1.668-.912 2.528z"/><path fill="#FECA00" fill-rule="evenodd" d="M12.436 9.34c-.411.707-1.065 1.027-1.94 1.027a2.371 2.371 0 0 1 0-4.742c1 0 1.796.35 2.162 1.302-.29-.287-.738-.484-1.408-.46-1.036 0-1.71.807-1.71 1.498 0 .69.675 1.628 1.71 1.628.52-.007.906-.103 1.186-.252z" clip-rule="evenodd"/><path fill="#5EAA22" fill-rule="evenodd" d="M4.375 5.462c1.036 0 1.696-.28 1.696-.625s-.66-.625-1.696-.625-1.572.28-1.572.625.536.625 1.572.625z" clip-rule="evenodd"/></g></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#3195F9" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#E31D1C" stroke="#FECA00" stroke-width="1.563" d="m-1.139 15.9.434.65.65-.434L22.608.988l.65-.433-.434-.65-1.388-2.08-.433-.65-.65.434L-2.31 12.737l-.65.433.434.65 1.387 2.08z"/><path fill="#FECA00" fill-rule="evenodd" d="M3.082 5.379.903 6.89 1.6 4.302 0 2.649l2.165-.09L3.082 0l.916 2.56H6.16L4.564 4.301l.8 2.435L3.081 5.38z" clip-rule="evenodd"/></g></g></svg>

After

Width:  |  Height:  |  Size: 849 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#3D58DB" d="M0 0h20v3.75H0V0z"/><path fill="#F7FCFF" d="M0 3.75h20V7.5H0V3.75z"/><path fill="#73BE4A" d="M0 7.5h20v3.75H0V7.5z"/><path fill="#FFD018" d="M0 11.25h20V15H0v-3.75z"/><path fill="#FECA00" d="M2.83 3.385 1.317 4.436l.484-1.8-1.113-1.15 1.507-.062.637-1.78.637 1.78h1.504l-1.11 1.212.556 1.694-1.587-.945z"/><path fill="#E11C1B" d="M8 0h4v15H8V0z"/></g></svg>

After

Width:  |  Height:  |  Size: 633 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#FA1111" d="M20 0v15H0L20 0z"/><path fill="#07A907" d="M0 15V0h20L0 15z"/><path fill="#FBCD17" d="M18.432-3.625-.625 14.735l3.782 1.883L21.65-.133l-3.218-3.493z"/></g></svg>

After

Width:  |  Height:  |  Size: 437 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#E31D1C" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#F1F9FF" fill-rule="evenodd" d="M11.25 3.75h-2.5v2.5h-2.5v2.5h2.5v2.5h2.5v-2.5h2.5v-2.5h-2.5v-2.5z" clip-rule="evenodd"/></g></g></svg>

After

Width:  |  Height:  |  Size: 620 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#CI_-_Côte_d'Ivoire_(Ivory_Coast)__a)"><path fill="#67BD38" d="M13.75 0H20v15h-6.25V0z"/><path fill="#E47E00" d="M0 0h6.25v15H0V0z"/><path fill="#F7FCFF" d="M6.25 0h7.5v15h-7.5V0z"/></g></svg>

After

Width:  |  Height:  |  Size: 321 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#2E42A5" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#2E42A5" d="M0 0h11v9H0z"/><mask id="c" width="11" height="9" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h11v9H0z"/></mask><g mask="url(#c)"><path fill="#F7FCFF" d="M-1.253 8.125 1.223 9.21l10.083-8.03 1.306-1.614-2.647-.363-4.113 3.46-3.31 2.332-3.795 3.129z"/><path fill="#F50100" d="m-.914 8.886 1.261.63L12.143-.583h-1.77L-.915 8.886z"/><path fill="#F7FCFF" d="M12.503 8.125 10.306 9.52-.056 1.18-1.362-.434l2.647-.363 4.113 3.46 3.31 2.332 3.795 3.129z"/><path fill="#F50100" d="m12.418 8.67-1.261.63-5.023-4.323-1.489-.483-6.133-4.921H.283l6.13 4.804 1.628.58 4.377 3.714z"/><mask id="d" width="13" height="11" x="-1" y="-1" fill="#000" maskUnits="userSpaceOnUse"><path fill="#fff" d="M-1-1h13v11H-1z"/><path fill-rule="evenodd" d="M6 0H5v4H0v1h5v4h1V5h5V4H6V0z" clip-rule="evenodd"/></mask><path fill="#F50100" fill-rule="evenodd" d="M6 0H5v4H0v1h5v4h1V5h5V4H6V0z" clip-rule="evenodd"/><path fill="#F7FCFF" d="M5 0v-.938h-.938V0H5zm1 0h.938v-.938H6V0zM5 4v.938h.938V4H5zM0 4v-.938h-.938V4H0zm0 1h-.938v.938H0V5zm5 0h.938v-.938H5V5zm0 4h-.938v.938H5V9zm1 0v.938h.938V9H6zm0-4v-.938h-.938V5H6zm5 0v.938h.938V5H11zm0-1h.938v-.938H11V4zM6 4h-.938v.938H6V4zM5 .937h1V-.938H5V.938zM5.938 4V0H4.063v4h1.875zM0 4.938h5V3.063H0v1.874zM.938 5V4H-.938v1H.938zM5 4.062H0v1.875h5V4.063zM5.938 9V5H4.063v4h1.875zM6 8.062H5v1.876h1V8.062zM5.062 5v4h1.875V5H5.063zM11 4.062H6v1.875h5V4.063zM10.062 4v1h1.876V4h-1.876zM6 4.938h5V3.063H6v1.874zM5.062 0v4h1.875V0H5.063z" mask="url(#d)"/></g><path fill="#fff" fill-rule="evenodd" d="m14.907 9.284.662-.461.641.461-.2-.82.516-.521h-.655l-.303-.67-.258.67h-.768l.588.52-.223.821zm1.758.787.662-.462.391.282-.125.326h-.768l.588.52-.11.401-.075-.169-.258.67h-.768l.588.52-.224.822.663-.462.64.462-.199-.821.515-.52h-.655l-.11-.242.432-.3.64.461-.199-.821.515-.52h-.655l-.302-.67-.006.015-.076-.313.515-.52h-.655l-.303-.67-.258.67H16.3l.588.52-.223.82zm-1.029 3.227-.662.462.223-.822-.535-.473.131.54-.64-.461-.663.461.224-.82-.589-.521h.769l.052-.135-.585-.421-.663.461.224-.82-.588-.521h.768l.258-.67.036.078.097-.357-.588-.52h.768l.258-.67.302.67h.655l-.515.52.2.82-.641-.46-.408.283.138.306h.655l-.514.52.171.707.178-.461.302.67h.655l-.515.52.057.234h.726l.258-.67.302.67h.655l-.514.52.199.822-.641-.462z" clip-rule="evenodd"/></g></g></svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#3D58DB" d="M0 0h9v9H0V0z"/><path fill="#F7FCFF" d="M8.75-1.25H20v10H8.75v-10z"/><path fill="#E31D1C" d="M0 8h20v7H0V8z"/><path fill="#F7FCFF" d="m4.384 5.615-2.377 1.42L3.18 4.618l-2.078-1.57 2.399-.025.905-2.142.582 2.142 2.27.01L5.532 4.57l.896 2.465-2.044-1.42z"/></g></svg>

After

Width:  |  Height:  |  Size: 542 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#E11C1B" d="M6 0h8v15H6V0z"/><path fill="#FECA00" d="M10.047 9.056 7.87 10.568l.696-2.589-1.6-1.653 2.166-.09.916-2.558.916 2.559h2.162L11.53 7.979l.799 2.436-2.282-1.359z"/><path fill="#FBCD17" d="M14 0h6v15h-6V0z"/><path fill="#0B9E7A" d="M0 0h6v15H0V0z"/></g></svg>

After

Width:  |  Height:  |  Size: 532 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#E31D1C" d="M0 0h20v15H0V0z"/><path fill="#FECA00" d="M4.446 6.097 2.013 8.004l.93-2.884-1.624-1.5 2.198-.08.93-2.322.929 2.321h2.193L5.95 5.12l.738 2.884-2.242-1.907zm4.939-2.24-1.02.617.232-1.203-.85-.9 1.151-.049.487-1.123.487 1.123h1.15l-.849.949.256 1.203-1.044-.617z"/><path fill="#FECA00" d="m10.635 6.357-1.02.617.232-1.203-.85-.9 1.151-.049.487-1.123.487 1.123h1.15l-.849.949.256 1.203-1.044-.617z"/><path fill="#FECA00" d="m9.385 8.857-1.02.617.232-1.203-.85-.9 1.151-.049.487-1.123.487 1.123h1.15l-.849.949.256 1.203-1.044-.617z"/><path fill="#FECA00" d="m6.885 10.107-1.02.617.232-1.203-.85-.9 1.151-.049.487-1.123.487 1.123h1.15l-.849.949.256 1.203-1.044-.617z"/></g></svg>

After

Width:  |  Height:  |  Size: 950 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#2E42A5" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#b)"><path fill="#FECA00" d="M0 0v7h20V0H0z"/><path fill="#E31D1C" d="M0 11v4h20v-4H0z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 611 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#2E42A5" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#E31D1C" stroke="#F7FCFF" stroke-width="2" d="M0 5h-1v5h22V5H0z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 565 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#3D58DB" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#3D58DB" stroke="#F7FCFF" stroke-width="2.5" d="M0 5h-1.25v5h22.5V5H0z"/></g><path fill="#E31D1C" fill-rule="evenodd" d="M0 0v15l11.25-7.5L0 0z" clip-rule="evenodd"/><mask id="c" width="12" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15l11.25-7.5L0 0z" clip-rule="evenodd"/></mask><g mask="url(#c)"><path fill="#F7FCFF" fill-rule="evenodd" d="m4.18 8.886-2.295 1.21 1.117-2.433-1.424-1.3 1.758-.065.844-2.2.644 2.2h1.754l-1.17 1.365.931 2.434-2.16-1.211z" clip-rule="evenodd"/></g></g></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

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