This commit is contained in:
Jhonathan David Guevara Ramirez 2025-06-17 22:47:16 -05:00
commit bddd5d9192
Signed by: jhonathan_guevara
GPG Key ID: 6879A4FE8271FCAE
106 changed files with 16196 additions and 0 deletions

16
.editorconfig Normal file
View File

@ -0,0 +1,16 @@
# Editor configuration, see https://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
[*.ts]
quote_type = single
[*.md]
max_line_length = off
trim_trailing_whitespace = false

42
.gitignore vendored Normal file
View File

@ -0,0 +1,42 @@
# See http://help.github.com/ignore-files/ for more about ignoring files.
# Compiled output
/dist
/tmp
/out-tsc
/bazel-out
# Node
/node_modules
npm-debug.log
yarn-error.log
# IDEs and editors
.idea/
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# Visual Studio Code
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
.history/*
# Miscellaneous
/.angular/cache
.sass-cache/
/connect.lock
/coverage
/libpeerconnection.log
testem.log
/typings
# System files
.DS_Store
Thumbs.db

29
README.md Normal file
View File

@ -0,0 +1,29 @@
# AJsystem
## AJsystem
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.1.1.
## Development server
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files.
## Code scaffolding
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
## Build
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory.
## Running unit tests
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Running end-to-end tests
Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.

101
angular.json Normal file
View File

@ -0,0 +1,101 @@
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"secomn": {
"projectType": "application",
"schematics": {},
"root": "",
"sourceRoot": "src",
"prefix": "app",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/secomn",
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": [
"zone.js"
],
"tsConfig": "tsconfig.app.json",
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles.css"
],
"scripts": []
},
"configurations": {
"production": {
"budgets": [
{
"type": "initial",
"maximumWarning": "500kb",
"maximumError": "1mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "2kb",
"maximumError": "4kb"
}
],
"outputHashing": "all"
},
"development": {
"buildOptimizer": false,
"optimization": false,
"vendorChunk": true,
"extractLicenses": false,
"sourceMap": true,
"namedChunks": true
}
},
"defaultConfiguration": "production"
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"configurations": {
"production": {
"browserTarget": "secomn:build:production"
},
"development": {
"browserTarget": "secomn:build:development"
}
},
"defaultConfiguration": "development"
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"browserTarget": "secomn:build"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"polyfills": [
"zone.js",
"zone.js/testing"
],
"tsConfig": "tsconfig.spec.json",
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles.css"
],
"scripts": []
}
}
}
}
},
"cli": {
"analytics": false
}
}

11553
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

40
package.json Normal file
View File

@ -0,0 +1,40 @@
{
"name": "secomn",
"version": "0.0.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"watch": "ng build --watch --configuration development",
"test": "ng test"
},
"private": true,
"dependencies": {
"@angular/animations": "^16.1.0",
"@angular/common": "^16.1.0",
"@angular/compiler": "^16.1.0",
"@angular/core": "^16.1.0",
"@angular/forms": "^16.1.0",
"@angular/platform-browser": "^16.1.0",
"@angular/platform-browser-dynamic": "^16.1.0",
"@angular/router": "^16.1.0",
"@ionic/angular": "^7.0.12",
"rxjs": "~7.8.0",
"tslib": "^2.3.0",
"zone.js": "~0.13.0"
},
"devDependencies": {
"@angular-devkit/build-angular": "^16.1.1",
"@angular/cli": "~16.1.1",
"@angular/compiler-cli": "^16.1.0",
"@types/jasmine": "~4.3.0",
"jasmine-core": "~4.6.0",
"karma": "~6.4.0",
"karma-chrome-launcher": "~3.2.0",
"karma-coverage": "~2.2.0",
"karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~2.1.0",
"typescript": "~5.1.3",
"@ionic/angular-toolkit": "latest"
}
}

View File

@ -0,0 +1,154 @@
#!/usr/sbin/nft -f
#--- Hook order is: ingress -> prerouting -> input/output/forward -> postrouting
#--- Flush previous rules
flush ruleset
#--- Definitions
define wan = eth0
define vpn = wg0
define vpn_net = 10.16.76.1/22 #---VPN_NETWORK
#define ipsec_remote = 10.0.0.0/24
#--- "inet" say that this table will handle both ipv4 (ip) and ipv6 (ip6).
table inet firewall {
#--- TCP ports to allow (ssh, http and https).
set tcp_accepted {
#--- "inet_service" are for tcp/udp ports, "flags interval" allows to set intervals.
type inet_service; flags interval;
elements = {80,443,10760} #---OpenTCPports/
}
#--- UDP ports to allow WireGuard.
set udp_accepted {
type inet_service; flags interval;
elements = {53,500,4500,25237} #---OpenUDPports
}
chain incoming {
type filter hook input priority 0; policy drop;
# Drop invalid packets.
ct state invalid drop
# Drop none SYN packets.
tcp flags & (fin|syn|rst|ack) != syn ct state new counter drop
# Limit ping requests.
ip protocol icmp icmp type echo-request limit rate over 1/second burst 5 packets drop
ip6 nexthdr icmpv6 icmpv6 type echo-request limit rate over 1/second burst 5 packets drop
# Allow all incmming established and related traffic.
ct state established,related accept
# Allow loopback.
iif lo accept
# Allow certain inbound ICMP types (ping, traceroute).
ip protocol icmp icmp type { destination-unreachable, echo-reply, echo-request, source-quench, time-exceeded } accept
# Without the nd-* ones ipv6 will not work.
ip6 nexthdr icmpv6 icmpv6 type { destination-unreachable, echo-reply, echo-request, nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert, packet-too-big, parameter-problem, time-exceeded } accept
# Allow needed tcp and udp ports.
iifname $wan tcp dport @tcp_accepted ct state new accept
iifname $wan udp dport @udp_accepted ct state new accept
#iifname $vpn tcp dport @tcp_accepted ct state new accept
#iifname $vpn udp dport @udp_accepted ct state new accept
# Allow all incoming traffic from vpn
iifname $vpn ct state new accept
# Allow WireGuard clients to access DNS and services.
iifname $vpn udp dport 53 ct state new accept
# Allow VPN clients to communicate with each other.
iifname $vpn oifname $vpn ct state new accept
# Allows IPSEC StrongSwan trafic.
ip protocol { ah, esp } accept
meta ipsec exists accept
#ipsec in ip saddr $ipsec_remote accept
}
chain forwarding {
type filter hook forward priority 0; policy drop;
# Drop invalid packets.
ct state invalid drop
# Forward all established and related traffic.
ct state established,related accept
# Forward WireGuard traffic.
# Allow WireGuard traffic to access the internet via wan.
iifname $vpn oifname $wan ct state new accept
# Allow VPN clients to communicate with each other.
iifname $vpn oifname $vpn accept
}
chain outgoing {
type filter hook output priority 0; policy drop;
# Drop invalid packets.
ct state invalid drop
# Allow all other outgoing traffic.
# For some reason ipv6 ICMP needs to be explicitly allowed here.
ip6 nexthdr ipv6-icmp accept
ct state new,established,related accept
}
}
# Separate table for hook pre- and postrouting.
# If using kernel 5.2 or later you can replace "ip" with "inet" to also filter IPv6 traffic.
table ip router {
# With kernel 4.17 or earlier both need to be set even when one is empty.
chain prerouting {
type nat hook prerouting priority -100;
}
chain postrouting {
type nat hook postrouting priority 100;
# Masquerade WireGuard traffic.
# All WireGuard traffic will look like it comes from the servers IP address.
oifname $wan ip saddr $vpn_net masquerade
}
}
# Separate table for hook ingress to filter bad packets early.
table netdev filter {
# List of ipv4 addresses to block.
set blocklist_v4 {
# The "ipv4_addr" are for ipv4 addresses and "flags interval" allows to set intervals.
type ipv4_addr; flags interval;
elements = {172.16.254.1,172.16.254.2} #---BloquedIPs
}
chain ingress {
# For some reason the interface must be hardcoded here, variable do not work.
type filter hook ingress device $wan priority -500;
# Drop all fragments.
ip frag-off & 0x1fff != 0 counter drop
# Drop bad addresses.
ip saddr @blocklist_v4 counter drop
# Drop XMAS packets.
tcp flags & (fin|syn|rst|psh|ack|urg) == fin|syn|rst|psh|ack|urg counter drop
# Drop NULL packets.
tcp flags & (fin|syn|rst|psh|ack|urg) == 0x0 counter drop
# Drop uncommon MSS values.
tcp flags syn tcp option maxseg size 1-535 counter drop
}
}

89
scripts/publish.sh Normal file
View File

@ -0,0 +1,89 @@
#!/bin/bash
#ssh -p 10760 root@www.secomn.com
echo "Preparando proyacto para produccion"
ng build
echo "Crear el directorio de destino en el servidor"
SSH_PORT=10760
SERVER_IP4="172.235.158.4"
SERVER_HOSTNAME=www.secomn.com
REMOTE_USER=root
SITE_NAME="www.secomn.com"
SITE_DOMAINS="secomn.com www.secomn.com"
PROJECT_NAME="secomn"
#DEPLOYED_TMP_FOLDER="/tmp/www.calacloud.com"
#ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${SSH_PORT} ${REMOTE_USER}@${SERVER_IP4} "echo ${REMOTE_PWD} | sudo -S -- sh -c 'mkdir -p ${DEPLOYED_DATA_FOLDER};chgrp -R deploy ${DEPLOYED_DATA_FOLDER};chmod -R 770 ${DEPLOYED_DATA_FOLDER}'"
#DEPLOYED_DATA_FOLDER="/var/www/static/${SITE_NAME}"
DEPLOYED_WEB_DOMAIN_FOLDER=/var/www/${SITE_NAME}
DEPLOYED_WEB_DATA_FOLDER="${DEPLOYED_WEB_DOMAIN_FOLDER}/htdocs"
#Inicio de fase de DATA
echo "Se preparan los directorios de destino"
ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${SSH_PORT} ${REMOTE_USER}@${SERVER_IP4} "echo ${REMOTE_PWD} | sudo -S -- sh -c 'mkdir -p ${DEPLOYED_WEB_DOMAIN_FOLDER};chown -R ${REMOTE_USER}:${REMOTE_USER} ${DEPLOYED_WEB_DOMAIN_FOLDER};chmod -R 775 ${DEPLOYED_WEB_DOMAIN_FOLDER}'"
ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${SSH_PORT} ${REMOTE_USER}@${SERVER_IP4} "echo ${REMOTE_PWD} | sudo -S -- sh -c 'mkdir -p ${DEPLOYED_WEB_DATA_FOLDER};chown -R ${REMOTE_USER}:www-data ${DEPLOYED_WEB_DATA_FOLDER};chmod -R 775 ${DEPLOYED_WEB_DATA_FOLDER}'"
##ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${SSH_PORT} ${REMOTE_USER}@${SERVER_IP4} "echo ${REMOTE_PWD} | sudo -S -- sh -c 'mkdir -p ${DEPLOYED_DATA_FOLDER};chgrp -R deploy ${DEPLOYED_DATA_FOLDER};chmod -R 770 ${DEPLOYED_DATA_FOLDER}'"
#ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${SSH_PORT} ${REMOTE_USER}@${SERVER_IP4} "echo ${REMOTE_PWD} | sudo -S -- sh -c 'mkdir -p ${DEPLOYED_DATA_FOLDER};chown -R ${REMOTE_USER}:deploy ${DEPLOYED_DATA_FOLDER};chmod -R 775 ${DEPLOYED_DATA_FOLDER}'"
echo "Subir los archivos en ${DEPLOYED_WEB_DATA_FOLDER}"
DIST_FOLDER="dist/${PROJECT_NAME}"
#echo "rsync -arvz ${DIST_FOLDER} -e \"ssh -p ${SSH_PORT}\" ${REMOTE_USER}@${SERVER_IP4}:${DEPLOYED_WEB_DATA_FOLDER}"
# rsync -arvz ${DIST_FOLDER} -e "ssh -p ${SSH_PORT}" ${REMOTE_USER}@${SERVER_IP4}:${DEPLOYED_WEB_DATA_FOLDER}
echo "rsync -arvz -e \"ssh -p ${SSH_PORT}\" --progress --delete ${DIST_FOLDER}/ ${REMOTE_USER}@${SERVER_IP4}:${DEPLOYED_WEB_DATA_FOLDER}"
rsync -arvz -e "ssh -p ${SSH_PORT}" --progress --delete ${DIST_FOLDER}/ ${REMOTE_USER}@${SERVER_IP4}:${DEPLOYED_WEB_DATA_FOLDER}
#echo "scp -r -P ${SSH_PORT} ${DIST_FOLDER}/* ${REMOTE_USER}@${SERVER_IP4}:${DEPLOYED_WEB_DATA_FOLDER}"
#scp -r -P ${SSH_PORT} ${DIST_FOLDER}/* ${REMOTE_USER}@${SERVER_IP4}:${DEPLOYED_WEB_DATA_FOLDER}
exit 0
#rsync -arvz ${DIST_FOLDER} -e \"ssh -p ${SSH_PORT}\" ${REMOTE_USER}@${SERVER_IP4}:${DEPLOYED_DATA_FOLDER}
scp -r -P ${SSH_PORT} ${DIST_FOLDER} ${REMOTE_USER}@${SERVER_IP4}:${DEPLOYED_DATA_FOLDER}
echo "Äjustando permisos deployed data"
ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${SSH_PORT} ${REMOTE_USER}@${SERVER_IP4} "echo ${REMOTE_PWD} | sudo -S -- sh -c 'chown -R root:deploy ${DEPLOYED_DATA_FOLDER};chmod -R 755 ${DEPLOYED_DATA_FOLDER}'"
#Fin de fase de DATA
VHOST_FILE="${SITE_NAME}"
LOCAL_VHOST_FILE="scripts/${VHOST_FILE}"
LOCAL_VHOST_TEMPLATE_FILE="scripts/virtualhost.template"
TMP_VHOST_FILE="/tmp/${VHOST_FILE}"
DEPLOYED_VHOST_FILE="/etc/nginx/sites-available/${VHOST_FILE}"
ENABLED_VHOST_FILE="/etc/nginx/sites-enabled/${VHOST_FILE}"
echo "preparando directorio de logs"
#Inicio de fase LOGS
LOGS_FOLDER="/var/www/log/${SITE_NAME}"
ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${SSH_PORT} ${REMOTE_USER}@${SERVER_IP4} "echo ${REMOTE_PWD} | sudo -S -- sh -c 'mkdir -p ${LOGS_FOLDER};chown -R root:root ${LOGS_FOLDER};chmod -R 755 ${LOGS_FOLDER}'"
#Fin de fase LOGS
#Inicio de fase VHOST
echo "generando virtualhost: ${VHOST_FILE}"
cat "${LOCAL_VHOST_TEMPLATE_FILE}" | sed "s/%SITE_NAME%/${SITE_NAME}/g" | sed "s/%SITE_DOMAINS%/${SITE_DOMAINS}/g" > "${TMP_VHOST_FILE}"
echo "copiando vistualhost"
scp -r -P ${SSH_PORT} ${TMP_VHOST_FILE} ${REMOTE_USER}@${SERVER_IP4}:${TMP_VHOST_FILE}
rm "${TMP_VHOST_FILE}"
#scp -r -P ${SSH_PORT} ${LOCAL_VHOST_FILE} ${REMOTE_USER}@${SERVER_IP4}:${TMP_VHOST_FILE}
echo "instalando virtualhost"
#ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${SSH_PORT} ${REMOTE_USER}@${SERVER_IP4} "echo ${REMOTE_PWD} | sudo -S -- sh -c 'cp ${TMP_VHOST_FILE} ${DEPLOYED_VHOST_FILE};ln -s ${DEPLOYED_VHOST_FILE} ${ENABLED_VHOST_FILE};systemctl reload nginx'"
ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${SSH_PORT} ${REMOTE_USER}@${SERVER_IP4} "echo ${REMOTE_PWD} | sudo -S -- sh -c 'cp -n ${TMP_VHOST_FILE} ${DEPLOYED_VHOST_FILE};ln -s ${DEPLOYED_VHOST_FILE} ${ENABLED_VHOST_FILE};systemctl reload nginx'"
#Fin de fase VHOST
#echo "Copiar los archivos al servidor web"
#REMOTE_SITE_DIR="/var/www/static/www.calacloud.net"
#DEPLOYED_DIST_FOLDER="${DEPLOYED_DATA_FOLDER}/dist/calacloud"
#ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${SSH_PORT} ${REMOTE_USER}@${SERVER_IP4} "echo ${REMOTE_PWD} | sudo -S -- sh -c 'cp -R ${DEPLOYED_DIST_FOLDER}/* ${REMOTE_SITE_DIR}'"
echo "Cambios publicados en produccion"

View File

@ -0,0 +1,16 @@
#!/bin/bash
ssh -p 10760 root@www.secomn.com
echo "Crear el directorio de destino en el servidor"
SSH_PORT=10760
SERVER_IP4="172.105.103.215"
REMOTE_USER=root
SERVER_HOSTNAME=www.secomn.com
srp -P $SSH_PORT scripts/nftables/nftables_www.secomn.com.conf $REMOTE_USER@$SERVER_HOSTNAME:/etc/nftables.nft
echo "Cambios anviados a produccion"

27
scripts/publishVhost.sh Normal file
View File

@ -0,0 +1,27 @@
#!/bin/bash
#ssh -p 10760 root@www.secomn.com
SSH_PORT=10760
REMOTE_USER=root
SERVER_HOSTNAME=www.secomn.com
SRC_VHOST=scripts/vhost/www.secomn.com.conf
SRC_SNIPPETS=scripts/vhost/snippets
echo "Crear el VHOST en el servidor"
scp -P $SSH_PORT $SRC_VHOST $REMOTE_USER@$SERVER_HOSTNAME:/etc/nginx/http.d/
SNIPPETS_FOLDER=/etc/nginx/snippets
echo "Subiendo snippets en el servidor"
ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${SSH_PORT} ${REMOTE_USER}@${SERVER_IP4} "echo ${REMOTE_PWD} | sudo -S -- sh -c 'mkdir -p ${SNIPPETS_FOLDER};chown -R ${REMOTE_USER}:${REMOTE_USER} ${SNIPPETS_FOLDER};chmod -R 775 ${SNIPPETS_FOLDER}'"
echo "scp -P $SSH_PORT -r $SRC_SNIPPETS $REMOTE_USER@$SERVER_HOSTNAME:$SNIPPETS_FOLDER"
scp -P $SSH_PORT -r $SRC_SNIPPETS $REMOTE_USER@$SERVER_HOSTNAME:$SNIPPETS_FOLDER
echo "Cambios anviados a produccion"

36
scripts/unpublish.sh Normal file
View File

@ -0,0 +1,36 @@
#!/bin/bash
echo "Crear el directorio de destino en el servidor"
SSH_PORT=19247
SERVER_IP4="172.105.103.215"
if [ $USER = "jorgeescallon" ]; then
REMOTE_USER="deeeijppnwkr"
REMOTE_PWD="jcapuQfNM6gYrZyX7Q991UWU"
else
REMOTE_USER="sceovddutywx"
REMOTE_PWD="3tAcbDCqhV1a7n9fa6QZJXoO"
fi
SITE_NAME="www.calacloud.net"
SITE_DOMAINS="calacloud.net www.calacloud.net"
PROJECT_NAME="calacloud"
DEPLOYED_DATA_FOLDER="/var/www/static/${SITE_NAME}"
VHOST_FILE="${SITE_NAME}"
TMP_VHOST_FILE="/tmp/${VHOST_FILE}"
DEPLOYED_VHOST_FILE="/etc/nginx/sites-available/${VHOST_FILE}"
ENABLED_VHOST_FILE="/etc/nginx/sites-enabled/${VHOST_FILE}"
echo "retirando virtualhost"
ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${SSH_PORT} ${REMOTE_USER}@${SERVER_IP4} "echo ${REMOTE_PWD} | sudo -S -- sh -c 'rm ${TMP_VHOST_FILE} ${DEPLOYED_VHOST_FILE} ${ENABLED_VHOST_FILE};systemctl reload nginx'"
echo "retirando logs"
LOGS_FOLDER="/var/www/log/${SITE_NAME}"
ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${SSH_PORT} ${REMOTE_USER}@${SERVER_IP4} "echo ${REMOTE_PWD} | sudo -S -- sh -c 'rm -r ${LOGS_FOLDER}'"
echo "Elimiando deployed data"
ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${SSH_PORT} ${REMOTE_USER}@${SERVER_IP4} "echo ${REMOTE_PWD} | sudo -S -- sh -c 'rm -r ${DEPLOYED_DATA_FOLDER}'"
echo "Cambios aplicados en produccion. Se eliminó: ${SITE_NAME}"

View File

@ -0,0 +1,2 @@
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;

View File

@ -0,0 +1,18 @@
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
#ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# Disable preloading HSTS for now. You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
#add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_dhparam /etc/ssl/certs/dhparam.pem;

View File

@ -0,0 +1,106 @@
server {
listen 80;
listen [::]:80;
server_name secomn.com www.secomn.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
include snippets/self-signed.conf;
include snippets/ssl-params.conf;
server_name secomn.com www.secomn.com;
#resolver 8.8.8.8 8.8.4.4 valid=300s;
#resolver_timeout 5s;
#add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; ";
#ssl_dhparam /etc/ssl/certs/dhparam.pem;
# Add some protection headers for ClickJacking
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header 'Access-Control-Allow-Origin' '*';
# Configura http2
#http2_max_field_size 16k;
#http2_max_header_size 32k;
large_client_header_buffers 4 8k;
# Habilita compresion
gzip on;
gzip_comp_level 6;
gzip_vary on;
gzip_min_length 1000;
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_buffers 16 8k;
# Remove server identifiers to help against enumeration
server_tokens off;
root /var/www/www.secomn.com/htdocs;
try_files $uri $uri/ /index.html;
location ~ \.svgz$ {
add_header Content-Encoding gzip;
}
error_page 404 /errors/404.html;
location = /errors/404.html {
#root /var/www/static/%SITE_NAME%/errors;
root /var/www/www.secomn.com/errors;
internal;
}
access_log /var/log/nginx/www.secomn.com/static.access.log;
error_log /var/log/nginx/www.secomn.com/static.error.log;
index index.html index.htm;
#location ~* ^.+.(htm|html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
#access_log off;
expires max;
}
location ~* \.(json|html)$ {
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
#
# Om nom nom cookies
#
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
#
# Custom headers and headers various browsers *should* be OK with but aren't
#
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
#
# Tell client that this pre-flight info is valid for 20 days
#
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
if ($request_method = 'POST') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
if ($request_method = 'GET') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
}
location ~ /\.ht {
deny all;
}
}

View File

@ -0,0 +1,103 @@
server {
listen 80;
#listen [::]:80;
server_name %SITE_DOMAINS%;
return 301 https://%SITE_NAME%request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
include snippets/self-signed.conf;
include snippets/ssl-params.conf;
server_name %SITE_DOMAINS%;
#resolver 8.8.8.8 8.8.4.4 valid=300s;
#resolver_timeout 5s;
#add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; ";
#ssl_dhparam /etc/ssl/certs/dhparam.pem;
# Add some protection headers for ClickJacking
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header 'Access-Control-Allow-Origin' '*';
# Configura http2
#http2_max_field_size 16k;
#http2_max_header_size 32k;
large_client_header_buffers 4 8k;
# Habilita compresion
gzip on;
gzip_comp_level 6;
gzip_vary on;
gzip_min_length 1000;
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_buffers 16 8k;
# Remove server identifiers to help against enumeration
server_tokens off;
root /var/www/static/%SITE_NAME%;
try_files $uri $uri/ /index.html;
location ~ \.svgz$ {
add_header Content-Encoding gzip;
}
error_page 404 /errors/404.html;
location = /errors/404.html {
root /var/www/static/%SITE_NAME%/errors;
internal;
}
access_log /var/www/log/%SITE_NAME%/static.access.log;
error_log /var/www/log/%SITE_NAME%/static.error.log;
index index.html index.htm;
#location ~* ^.+.(htm|html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
#access_log off;
expires max;
}
location ~* \.(json|html)$ {
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
#
# Om nom nom cookies
#
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
#
# Custom headers and headers various browsers *should* be OK with but aren't
#
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
#
# Tell client that this pre-flight info is valid for 20 days
#
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
if ($request_method = 'POST') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
if ($request_method = 'GET') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
}
location ~ /\.ht {
deny all;
}
}

View File

@ -0,0 +1,19 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { ProductsComponent } from './products/products.component';
const routes: Routes = [
{ path: 'products', component: ProductsComponent },
{ path: 'home', component: HomeComponent },
// puedes tener otras rutas aquí
{ path: '', redirectTo: '/home', pathMatch: 'full' }, // Redirigir vacío a /home
{ path: '**', redirectTo: '/home' } // Ruta desconocida también a /home
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }

View File

232
src/app/app.component.html Normal file
View File

@ -0,0 +1,232 @@
<!--
- #HEADER
-->
<header class="header" data-header>
<div class="container">
<h1>
<a href="#" class="logo">AJ<span class="span">System</span></a>
</h1>
<nav class="navbar" data-navbar [ngClass]="status ? 'active' : ''">
<ul class="navbar-list">
<li class="nav-item">
<a class="navbar-link" routerLink="/home" routerLinkActive="active-link">Inicio</a>
</li>
<li class="nav-item">
<a href="#about" class="navbar-link" data-nav-link>Nosotros</a>
</li>
<li class="nav-item">
<a class="navbar-link" routerLink="/products" routerLinkActive="active-link">Productos</a>
</li>
<li class="nav-item">
<a href="#blog" class="navbar-link" data-nav-link>Testimonios </a>
</li>
<li class="nav-item">
<a href="#about-us" class="navbar-link" data-nav-link>Contáctanos</a>
</li>
</ul>
</nav>
</div>
</header>
<router-outlet></router-outlet>
<!--
- #FOOTER
-->
<footer class="footer" id="about-us">
<!--
<div class="footer-top" style="background-image: url('assets/images/footer-illustration.png')">
-->
<div class="footer-top" >
<div class="container">
<div class="footer-brand">
<a href="" class="logo"><span class="cybersec">AJ</span><span class="black">System</span></a>
<p class="footer-text">
Servicio de tecnologia.
</p>
<ul class="social-list">
<li>
<a href="#" class="social-link">
<ion-icon name="logo-android"></ion-icon>
</a>
</li>
<!-- <li>
<a href="#" class="social-link">
<ion-icon name="logo-google-playstore"></ion-icon>
</a>
</li> -->
<!--
<li>
<a href="#" class="social-link">
<ion-icon name="logo-youtube"></ion-icon>
</a>
</li>
<li>
<a href="#" class="social-link">
<ion-icon name="logo-apple"></ion-icon>
</a>
</li>
<li>
<a href="#" class="social-link">
<ion-icon name="logo-apple-appstore"></ion-icon>
</a>
</li>
<li>
<a href="#" class="social-link">
<ion-icon name="logo-microsoft"></ion-icon>
</a>
</li>
<li>
<a href="#" class="social-link">
<ion-icon name="logo-windows"></ion-icon>
</a>
</li>
-->
<!-- <li>
<a href="#" class="social-link">
<ion-icon name="logo-whatsapp"></ion-icon>
</a>
</li> -->
<li>
<a href="https://git.AJsystem.com" class="social-link">
<ion-icon name="logo-whatsapp"></ion-icon>
</a>
</li>
<li>
<a href="https://git.AJsystem.com" class="social-link">
<ion-icon name="logo-windows"></ion-icon>
</a>
</li>
</ul>
</div>
<ul class="footer-list">
<li>
<p class="footer-list-title">AJSystem</p>
</li>
<li>
<p class="footer-list-item"></p>
</li>
<li>
<a href="/caracteristicas" title="Tecnologia">Tecnologia</a>
<a href="/Servicio" title="Servicio">Servicio</a>
<a href="/Renting" title="Renting">Renting</a>
<a href="/products" title="Productos">Productos</a>
</li>
</ul>
<ul class="footer-list">
<li>
<p class="footer-list-title">Contáctanos</p>
</li>
<li>
<p class="footer-list-item">Andrés Jaramillo Quintero</p>
</li>
<li>
<p class="footer-list-item">Gerente general (CIO)</p>
</li>
<li>
<p class="footer-list-item">+57 (301) 120-2586</p>
</li>
<li>
<p class="footer-list-item">+57 (321) 292-0912</p>
</li>
<li>
<p class="footer-list-item">Direccion<br />Lugar</p>
</li>
<li>
<p class="footer-list-item"><a href="mailto:contacto@AJsystem.com?subject=Contacto%20Página%20Web">cio@ajsystem.com</a></p>
</li>
</ul>
<form action="" class="footer-form">
<p class="footer-list-title">Agendamiento</p>
<div class="input-wrapper">
<input type="text" name="full_name" required placeholder="Tú nombre" aria-label="Tú nombre"
class="input-field">
<input type="email" name="email_address" required placeholder="Correo" aria-label="Correo"
class="input-field">
</div>
<div class="input-wrapper">
<select name="company-size" aria-label="Tipo Compañía" class="input-field">
<option value="person">Unipersonal</option>
<option value="2 person">PYME</option>
<option value="3 person">Mediana</option>
<option value="4 person">Grande</option>
<option value="5 person">Gobierno</option>
</select>
<input type="date" name="booking_date" aria-label="Fecha" class="input-field">
</div>
<textarea name="message" required placeholder="Mensaje" aria-label="Message" class="input-field"></textarea>
<button type="submit" class="btn">Solicitar!</button>
</form>
</div>
</div>
<div class="footer-bottom">
<div class="container">
<p class="copyright-text">
&copy; 2025 <a href="#" class="copyright-link">AJSystem</a> Todos los derechos reservados.
</p>
</div>
</div>
</footer>

View File

@ -0,0 +1,29 @@
import { TestBed } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { AppComponent } from './app.component';
describe('AppComponent', () => {
beforeEach(() => TestBed.configureTestingModule({
imports: [RouterTestingModule],
declarations: [AppComponent]
}));
it('should create the app', () => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.componentInstance;
expect(app).toBeTruthy();
});
it(`should have as title 'calacloud'`, () => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.componentInstance;
expect(app.title).toEqual('calacloud');
});
it('should render title', () => {
const fixture = TestBed.createComponent(AppComponent);
fixture.detectChanges();
const compiled = fixture.nativeElement as HTMLElement;
expect(compiled.querySelector('.content span')?.textContent).toContain('calacloud app is running!');
});
});

16
src/app/app.component.ts Normal file
View File

@ -0,0 +1,16 @@
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'calacloud';
//Sidebar toggle show hide function
status = false;
addToggle()
{
this.status = !this.status;
}
}

24
src/app/app.module.ts Normal file
View File

@ -0,0 +1,24 @@
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { IonicModule } from '@ionic/angular';
import { ProductsComponent } from './products/products.component';
import { HomeComponent } from './home/home.component';
@NgModule({
declarations: [
AppComponent,
ProductsComponent,
HomeComponent
],
imports: [
BrowserModule,
AppRoutingModule,
IonicModule.forRoot()
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }

View File

@ -0,0 +1,309 @@
/*-----------------------------------*\
#HERO
\*-----------------------------------*/
.hero-AJsystem {
background: linear-gradient(135deg, var(--AJsystem-blue) 20%, var(--AJsystem-violet) 100%); /* Gradiente llamativo */
padding: 60px 0 80px 0; /* Más padding vertical */
color: var(--AJsystem-white);
overflow: hidden; /* Para contener elementos visuales si se animan */
padding-top: 80px; /* Adjust top padding as needed, e.g., 100px from your .AJsystem style */
padding-bottom: 0px; /* CRITICAL: Reduce this significantly. Start with a small value like 0px or 5px and adjust. */
position: relative;
}
.hero-AJsystem__container {
display: grid;
grid-template-columns: 1fr; /* Stack en móvil */
align-items: center;
gap: 40px;
text-align: center; /* Centrado en móvil */
}
.hero-AJsystem__title {
font-size: clamp(4.45rem, 5vw, 3.8rem); /* Tamaño de fuente adaptable */
color: var(--AJsystem-white);
font-weight: var(--fw-700); /* Más peso */
margin-bottom: 20px;
line-height: 1.3;
}
.hero-AJsystem__description {
font-size: clamp(2rem, 2.5vw, 1.2rem);
color: var(--AJsystem-soft-white);
max-width: 60ch;
margin: 0 auto 30px auto; /* Centrado y con margen inferior */
line-height: 1.7;
}
.hero-AJsystem__cta-group {
display: flex;
flex-wrap: wrap; /* Para que no se desborden en pantallas pequeñas */
justify-content: center;
gap: 15px;
margin-bottom: 15px;
}
.btn-AJsystem-cta {
display: flex;
align-items: center;
justify-content: center;
padding: 22px 48px; /* Botones más grandes */
font-size: 1.2rem; /* Texto ligeramente más grande */
font-weight: var(--fw-600);
border-radius: 30px;
border: 2px solid transparent;
text-align: center;
transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease;
}
.btn-primary.btn-AJsystem-cta {
background-color: var(--AJsystem-white);
color: var(--AJsystem-violet); /* Texto violeta */
font-weight: var(--fw-600);
}
.btn-primary.btn-AJsystem-cta:hover {
background-color: transparent;
color: var(--AJsystem-white);
border-color: var(--AJsystem-white);
}
.btn-secondary.btn-AJsystem-cta {
background-color: transparent;
color: var(--AJsystem-white);
border: 2px solid var(--AJsystem-soft-white); /* Borde sutil */
font-weight: var(--fw-600);
}
.btn-secondary.btn-AJsystem-cta:hover {
background-color: var(--AJsystem-white);
color: var(--AJsystem-blue); /* Texto azul al hacer hover */
border-color: var(--AJsystem-white);
}
.hero-AJsystem__subtext {
font-size: 1.3rem;
color: var(--AJsystem-soft-white);
opacity: 0.9;
}
.hero-AJsystem__visual {
max-width: 450px; /* Ajusta según tu imagen */
margin: 0 auto; /* Centrar imagen en móvil */
}
.hero-AJsystem__img {
width: 80%;
height: auto;
/* Podrías añadir una animación sutil si quieres */
/* animation: float 3s ease-in-out infinite; */
}
/* Responsive para Desktop en Hero */
@media (min-width: 768px) {
.hero-AJsystem__container {
grid-template-columns: 1.5fr 1fr; /* Dos columnas */
text-align: left; /* Alinear texto a la izquierda */
gap: 60px;
}
.hero-AJsystem__content {
order: 1.5; /* Contenido a la izquierda */
}
.hero-AJsystem__visual {
order: 2; /* Visual a la derecha */
margin: 0; /* Resetear margen */
}
.hero-AJsystem__description {
margin: 0 0 30px 0; /* Resetear margen horizontal */
}
.hero-AJsystem__cta-group {
justify-content: flex-start; /* Alinear botones a la izquierda */
}
}
/* Keyframes para animación (opcional) */
@keyframes float {
0% { transform: translateY(0px); }
50% { transform: translateY(-10px); }
100% { transform: translateY(0px); }
}
/*-----------------------------------*\
#PROMO
\*-----------------------------------*/
.features-AJsystem {
background-color: var(--AJsystem-soft-background); /* Fondo suave */
padding: 80px 0;
}
.text-center {
text-align: center;
}
.section-title.text-center {
font-size: 3rem;
color: var(--AJsystem-black-intense);
}
.section-subtitle.text-center {
font-size: 2rem;
margin-bottom: 50px;
max-width: 70ch;
margin-left: auto;
margin-right: auto;
color: var(--AJsystem-black-intense); /* Heredado, pero por si acaso */
}
.features-AJsystem__grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); /* Grid adaptable */
gap: 30px;
}
.feature-card {
background-color: var(--AJsystem-white);
padding: 35px 30px;
border-radius: 8px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05);
text-align: center;
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.feature-card:hover {
transform: translateY(-8px);
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1);
}
.feature-card__icon {
margin: 0 auto 20px auto;
width: 60px;
height: 60px;
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
color: var(--AJsystem-white); /* Icono blanco */
}
.feature-card__icon.icon-blue {
background-color: var(--AJsystem-blue);
}
.feature-card__icon.icon-black {
background-color: var(--AJsystem-black);
}
.feature-card__icon svg {
width: 30px; /* Tamaño del icono dentro del círculo */
height: 30px;
}
.feature-card__title {
font-size: 2.2rem; /* 1.8rem */
color: var(--AJsystem-black-intense);
margin-bottom: 10px;
font-weight: var(--fw-600);
}
.feature-card__title-2 {
font-size: 2.2rem; /* 1.8rem */
color: var(--AJsystem-blue);
margin-bottom: 10px;
font-weight: var(--fw-600);
}
.feature-card__text {
font-size: 1.5rem;
color: var(--AJsystem-silver);
line-height: 1.6;
text-align: left;
}
.top-banner-ip {
background-color: #000;
color: #fff;
font-size: 1.2rem;
padding: 12px 24px;
display: flex;
justify-content: center;
align-items: center;
gap: 8px;
width: 100%;
position: relative;
top: -20px;
z-index: 1;
}
.top-banner-status.protegido {
color: #00e676;
font-weight: bold;
}
.top-banner-status.desprotegido {
color: #ff5252;
font-weight: bold;
}
.hero-AJsystem {
margin-top: 25px;
}
/*-----------------------------------*\
#LEYES
\*-----------------------------------*/
.new-info-section .new-info-header {
margin-bottom: 40px; /* Espacio entre el texto y las imágenes */
}
.new-info-section .text-center { /* Helper class if not already broadly defined */
text-align: center;
margin-left: auto;
margin-right: auto;
margin-block: 15px 15px;
}
.new-info-section .section-text { /* Helper class if not already broadly defined */
text-align: justify;
}
.new-info-section .section-title.text-center {
max-width: 100%; /* Asegura que el título centrado pueda usar todo el ancho si es necesario */
}
.new-info-images {
display: grid;
grid-template-columns: 1fr; /* Por defecto, una imagen encima de la otra en móviles */
gap: 30px; /* Espacio entre las imágenes si están en columna, o entre contenedores de imagen */
justify-items: center; /* Centra los contenedores de imagen dentro de las columnas del grid */
}
.new-info-image-container {
width: 100%;
max-width: 450px; /* Ajusta el tamaño máximo de cada contenedor de imagen */
}
.new-info-img {
width: 100%;
height: auto;
border-radius: 8px; /* Opcional: bordes redondeados para las imágenes */
box-shadow: var(--shadow-1); /* Opcional: una sombra sutil */
margin-bottom: 10px; /* Espacio entre la imagen y su caption */
}
.image-caption {
font-size: var(--fs-5);
color: var(--AJsystem-silver);
}
/* Media Query para mostrar imágenes lado a lado en pantallas más grandes */
@media (min-width: 768px) {
.new-info-images {
grid-template-columns: 1fr 1fr; /* Dos columnas para las imágenes */
align-items: start; /* Alinea los contenedores de imagen en la parte superior de su celda */
}
}

View File

@ -0,0 +1,417 @@
<main>
<article>
<!--
- #HERO
-->
<section class="AJsystem" id="home" style="background-color:#580e67; background-image: url('assets/images/fondo-oscuro-abstracto_1048-1920.avif')">
<div class="container">
<div class="AJsystem-content">
<h1 class="h1 AJsystem-title"><a href="#" class="AJsystem-hero">AJ<span class="span">System</span></a></h1>
<p class="AJsystem-subtitle">Tu aliado en tecnología</p>
<h2 class="h1 AJsystem-title">Empowering Technology Through Secure Innovation</h2>
<p class="AJsystem-text">¡A.J SYSTEM es una empresa de tecnología que cuenta con excelentes servicios y soluciones integrales para tí y para tu empresa!</p>
<button class="btn navbar-link" routerLink="/products" routerLinkActive="active-link">Ver Productos</button>
</div>
<!--
<figure class="AJsystem-banner">
<img src="assets/images/c33210e0-9ab1-44bf-9bc8-3f4e21ed54a2.svg" width="1024" height="640" alt="" aria-hidden="true"
class="AJsystem-img-bg">
<img src="assets/images/a293f0df-4836-4159-8ef1-a7b38782d5f5.webp" width="700" height="637" loading="lazy" alt="Virus"
class="w-100 AJsystem-img">
</figure>
-->
</div>
</section>
<!--
- #ABOUT
-->
<section class="section section-divider gray about" id="about" style="background-color:#580e67; background-image: url('assets/images/fondo-oscuro-abstracto_1048-1920.avif')">
<div class="container">
<div class="about-banner">
<img src="assets/images/connectionphone.webp" width="509" height="459" loading="lazy" alt="Honor Magic 6 Lite"
class=" about-img">
</div>
<div class="about-content">
<h2 class="h2 section-title">
¡<span class="cybersec">AJ</span><span class="berry">System</span> es Tecnología!
</h2>
<p class="section-text">
<span class="cybersec">AJ</span><span class="berry">System</span> cuenta con un equipo de profesionales altamente capacitados para brindarte un servicio de alta calidad, con el objetivo de convertirnos en tu aliado para cubrir tus necesidades tecnológicas.
</p>
<ul class="about-list">
<li class="about-item">
<ion-icon name="checkmark-outline"></ion-icon>
<span class="span" style="width: 100%;">Equipos tecnológicos de alto rendimiento en modalidad renting</span>
</li>
<li class="about-item">
<ion-icon name="checkmark-outline"></ion-icon>
<span class="span" style="width: 100%;">Soporte técnico 24/7 con respuesta rápida y eficiente.</span>
</li>
<li class="about-item">
<ion-icon name="checkmark-outline"></ion-icon>
<span class="span" style="width: 100%;">Implementación de software a la medida de tu empresa.</span>
</li>
<li class="about-item">
<ion-icon name="checkmark-outline"></ion-icon>
<span class="span" style="width: 100%;">Sistemas de seguridad avanzados con CCTV y control de acceso.</span>
</li>
<li class="about-item">
<ion-icon name="checkmark-outline"></ion-icon>
<span class="span" style="width: 100%;">Asesoría integral en soluciones tecnológicas empresariales.</span>
</li>
<li class="about-item">
<ion-icon name="checkmark-outline"></ion-icon>
<span class="span" style="width: 100%;">Desarrollo de proyectos de Oficina Virtual.</span>
</li>
<li class="about-item">
<ion-icon name="checkmark-outline"></ion-icon>
<span class="span" style="width: 100%;"> Disponibilidad inmediata de equipos tecnológicos.</span>
</li>
</ul>
<button class="btn navbar-link" routerLink="/products" routerLinkActive="active-link">Ver Productos</button>
</div>
</div>
</section>
<router-outlet></router-outlet>
<!--
- #PROMO
-->
<section class="section section-divider white promo">
<div class="container">
<ul class="promo-list has-scrollbar">
<li class="promo-item">
<div class="promo-card">
<div class="card-icon">
<svg xmlns="http://www.w3.org/2000/svg" width="64px" height="64px" viewBox="0 0 24 24" fill="#5f6368">
<path d="M10,15.654c-0.417,0-0.754,0.338-0.754,0.754S9.583,17.162,10,17.162s0.754-0.338,0.754-0.754S10.417,15.654,10,15.654z M14.523,1.33H5.477c-0.833,0-1.508,0.675-1.508,1.508v14.324c0,0.833,0.675,1.508,1.508,1.508h9.047c0.833,0,1.508-0.675,1.508-1.508V2.838C16.031,2.005,15.356,1.33,14.523,1.33z M15.277,17.162c0,0.416-0.338,0.754-0.754,0.754H5.477c-0.417,0-0.754-0.338-0.754-0.754V2.838c0-0.417,0.337-0.754,0.754-0.754h9.047c0.416,0,0.754,0.337,0.754,0.754V17.162zM13.77,2.838H6.23c-0.417,0-0.754,0.337-0.754,0.754v10.555c0,0.416,0.337,0.754,0.754,0.754h7.539c0.416,0,0.754-0.338,0.754-0.754V3.592C14.523,3.175,14.186,2.838,13.77,2.838z M13.77,13.77c0,0.208-0.169,0.377-0.377,0.377H6.607c-0.208,0-0.377-0.169-0.377-0.377V3.969c0-0.208,0.169-0.377,0.377-0.377h6.785c0.208,0,0.377,0.169,0.377,0.377V13.77z"/>
</svg>
</div>
<h3 class="h3 card-title">TECNOLOGÍA</h3>
<p class="card-text">
Somos especializados en la comercialización de productos tecnológicos de alta calidad como: computadoras, laptops, servidores, proyectores, monitores, componentes, suministros, accesorios y servicio técnico.
</p>
<svg id="med-round-squircle-svg" class="w-100 card-banner" version="1.1" width="300" viewBox="0 0 300 300" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Mensajes Cifrados</title>
<defs>
<clipPath id="rotated-squircle">
<path d="m280 240c-19.938 28.8-69.515 46.852-103.98 53.118-34.463 6.266-87.222 6.82-116.02-13.118-28.8-19.938-46.852-69.515-53.118-103.98-6.266-34.463-6.82-87.222 13.118-116.02 19.938-28.8 69.515-46.852 103.98-53.118 34.463-6.266 87.222-6.82 116.02 13.118 28.8 19.938 46.852 69.515 53.118 103.98 6.266 34.463 6.82 87.222-13.118 116.02z" fill="#ccc" />
</clipPath>
</defs>
<image width="300" height="300" clip-path="url(#rotated-squircle)" preserveAspectRatio="none" xlink:href="assets/images/asus-laptop-black-screen-fix-1.avif" alt="crypto messages"/>
</svg>
</div>
</li>
<li class="promo-item">
<div class="promo-card">
<div class="card-icon">
<svg xmlns="http://www.w3.org/2000/svg" width="64px" height="64px" viewBox="0 0 24 24" fill="#5f6368">
<path d="M12.173,16.086c0.72,0,1.304-0.584,1.304-1.305V6.089c0-0.72-0.584-1.304-1.304-1.304c-0.721,0-1.305,0.584-1.305,1.304v8.692C10.868,15.502,11.452,16.086,12.173,16.086z M11.738,6.089c0-0.24,0.194-0.435,0.435-0.435s0.435,0.194,0.435,0.435v8.692c0,0.24-0.194,0.436-0.435,0.436s-0.435-0.195-0.435-0.436V6.089zM16.52,16.086c0.72,0,1.304-0.584,1.304-1.305v-11.3c0-0.72-0.584-1.304-1.304-1.304c-0.721,0-1.305,0.584-1.305,1.304v11.3C15.215,15.502,15.799,16.086,16.52,16.086z M16.085,3.481c0-0.24,0.194-0.435,0.435-0.435s0.435,0.195,0.435,0.435v11.3c0,0.24-0.194,0.436-0.435,0.436s-0.435-0.195-0.435-0.436V3.481z M3.48,16.086c0.72,0,1.304-0.584,1.304-1.305v-3.477c0-0.72-0.584-1.304-1.304-1.304c-0.72,0-1.304,0.584-1.304,1.304v3.477C2.176,15.502,2.76,16.086,3.48,16.086z M3.045,11.305c0-0.24,0.194-0.435,0.435-0.435c0.24,0,0.435,0.194,0.435,0.435v3.477c0,0.24-0.195,0.436-0.435,0.436c-0.24,0-0.435-0.195-0.435-0.436V11.305z M18.258,16.955H1.741c-0.24,0-0.435,0.194-0.435,0.435s0.194,0.435,0.435,0.435h16.517c0.24,0,0.435-0.194,0.435-0.435S18.498,16.955,18.258,16.955z M7.826,16.086c0.72,0,1.304-0.584,1.304-1.305V8.696c0-0.72-0.584-1.304-1.304-1.304S6.522,7.977,6.522,8.696v6.085C6.522,15.502,7.106,16.086,7.826,16.086z M7.392,8.696c0-0.239,0.194-0.435,0.435-0.435s0.435,0.195,0.435,0.435v6.085c0,0.24-0.194,0.436-0.435,0.436s-0.435-0.195-0.435-0.436V8.696z"/>
</svg>
</div>
<h3 class="h3 card-title">PROYECTOS</h3>
<p class="card-text">
Desarrollamos proyectos de Oficina Virtual ADT, contando con módulo de: radicación de autorizaciones, PQRS, asignación de citas, y lo que requieras parametrizar y diseñar de acuerdo a las necesidades de tu empresa.
</p>
<svg id="merc-round-squircle-svg" class="w-100 card-banner" version="1.1" width="300" viewBox="0 0 300 300" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Protección Completa</title>
<defs>
<clipPath id="rotated-squircle">
<path d="m280 240c-19.938 28.8-69.515 46.852-103.98 53.118-34.463 6.266-87.222 6.82-116.02-13.118-28.8-19.938-46.852-69.515-53.118-103.98-6.266-34.463-6.82-87.222 13.118-116.02 19.938-28.8 69.515-46.852 103.98-53.118 34.463-6.266 87.222-6.82 116.02 13.118 28.8 19.938 46.852 69.515 53.118 103.98 6.266 34.463 6.82 87.222-13.118 116.02z" fill="#ccc" />
</clipPath>
</defs>
<image width="300" height="300" clip-path="url(#rotated-squircle)" preserveAspectRatio="none" xlink:href="assets/images/1fbdec52-7b79-4162-a7a7-b3d8a6bcfd09.webp" alt="Mercado" />
</svg>
</div>
</li>
<li class="promo-item">
<div class="promo-card">
<div class="card-icon">
<svg xmlns="http://www.w3.org/2000/svg" width="64px" height="64px" viewBox="0 0 24 24" fill="#5f6368">
<path d="M17.125,1.375H2.875c-0.828,0-1.5,0.672-1.5,1.5v11.25c0,0.828,0.672,1.5,1.5,1.5H7.75v2.25H6.625c-0.207,0-0.375,0.168-0.375,0.375s0.168,0.375,0.375,0.375h6.75c0.207,0,0.375-0.168,0.375-0.375s-0.168-0.375-0.375-0.375H12.25v-2.25h4.875c0.828,0,1.5-0.672,1.5-1.5V2.875C18.625,2.047,17.953,1.375,17.125,1.375z M11.5,17.875h-3v-2.25h3V17.875zM17.875,14.125c0,0.414-0.336,0.75-0.75,0.75H2.875c-0.414,0-0.75-0.336-0.75-0.75v-1.5h15.75V14.125z M17.875,11.875H2.125v-9c0-0.414,0.336-0.75,0.75-0.75h14.25c0.414,0,0.75,0.336,0.75,0.75V11.875z M10,14.125c0.207,0,0.375-0.168,0.375-0.375S10.207,13.375,10,13.375s-0.375,0.168-0.375,0.375S9.793,14.125,10,14.125z"/>
</svg>
</div>
<h3 class="h3 card-title">RENTING</h3>
<p class="card-text">
El renting de computadores te permite acceder a equipos nuevos de alto rendimiento, en condición de alquiler y así garantizar la disponibilidad de equipos, contar con una plataforma para la atención de soporte técnico y un inventario de activos.
</p>
<svg id="care-round-squircle-svg" class="w-100 card-banner" version="1.1" width="300" viewBox="0 0 300 300" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Llamadas Encriptadas</title>
<defs>
<clipPath id="rotated-squircle">
<path d="m280 240c-19.938 28.8-69.515 46.852-103.98 53.118-34.463 6.266-87.222 6.82-116.02-13.118-28.8-19.938-46.852-69.515-53.118-103.98-6.266-34.463-6.82-87.222 13.118-116.02 19.938-28.8 69.515-46.852 103.98-53.118 34.463-6.266 87.222-6.82 116.02 13.118 28.8 19.938 46.852 69.515 53.118 103.98 6.266 34.463 6.82 87.222-13.118 116.02z" fill="#ccc" />
</clipPath>
</defs>
<image width="300" height="300" clip-path="url(#rotated-squircle)" preserveAspectRatio="none" xlink:href="assets/images/gaming-pc-background-wpu7jvd2zqd9qdwh.jpg" alt="care" />
</svg>
</div>
</li>
</ul>
</div>
</section>
<!--
- #CTA
-->
<section class="section section-divider white cta" style="background-image: url('assets/images/cta_fondo.png')">
<div class="container">
<div class="cta-content">
<h2 class="h2 section-title">
¡SERVICIO PREMIUM DE RENTING!
</h2>
<h2 class="AJsystem-text">
El renting de computadores te permite acceder a equipos nuevos de alto rendimiento , en condición de alquiler, y así garantizar la disponibilidad de equipos, contar con una plataforma para la atención de soporte técnico y un inventario de activos.
</h2>
<button class="btn navbar-link" routerLink="/products" routerLinkActive="active-link">Ver Productos</button>
</div>
</div>
</section>
<!--
- #TESTIMONIALS
-->
<section class="section section-divider white testi">
<div class="container">
<p class="section-subtitle">Testimonios</p> <!-- 𐤏𐤃
<h2 class="h2 section-title">
Los separados 𐤒𐤃𐤔𐤉𐤌 <span class="span">declaran 𐤒𐤓𐤀</span>
</h2>
-->
<h2 class="h2 section-title">
¿El poder de tus <span class="span">Decisiones</span>?
</h2>
<p class="section-text">
La tecnología segura es la base de la confianza.
</p>
<ul class="testi-list has-scrollbar">
<li class="testi-item">
<div class="testi-card">
<div class="profile-wrapper">
<figure class="avatar">
<img src="assets/images/7b610bf3-a4af-4d2f-2581-93e03c8356f2.webp" width="80" height="80" loading="lazy" alt="Nathan Ben'adam">
</figure>
<div>
<h3 class="h4 testi-name">Nombre</h3>
<p class="testi-title">Cargo</p>
</div>
</div>
<blockquote class="testi-text">
<q>Testimonio</q>
</blockquote>
<div class="rating-wrapper">
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
</div>
</div>
</li>
<li class="testi-item">
<div class="testi-card">
<div class="profile-wrapper">
<figure class="avatar">
<img src="assets/images/7b610bf3-a4af-4d2f-2581-93e03c8356f2.webp" width="80" height="80" loading="lazy" alt="Nathan Ben'adam">
</figure>
<div>
<h3 class="h4 testi-name">Nombre</h3>
<p class="testi-title">Cargo</p>
</div>
</div>
<blockquote class="testi-text">
<q>Testimonio</q>
</blockquote>
<div class="rating-wrapper">
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
</div>
</div>
</li>
<li class="testi-item">
<div class="testi-card">
<div class="profile-wrapper">
<figure class="avatar">
<img src="assets/images/7b610bf3-a4af-4d2f-2581-93e03c8356f2.webp" width="80" height="80" loading="lazy" alt="Nathan Ben'adam">
</figure>
<div>
<h3 class="h4 testi-name">Nombre</h3>
<p class="testi-title">Cargo</p>
</div>
</div>
<blockquote class="testi-text">
<q>Testimonio</q>
</blockquote>
<div class="rating-wrapper">
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
</div>
</div>
</li>
</ul>
</div>
</section>
<!------------------------------------
#PROMO
------------------------------------->
<section class="features-AJsystem section" id="features">
<div class="container">
<h2 class="section-title text-center">Otros servicios AJsystem</h2>
<div class="features-AJsystem__grid">
<div class="feature-card">
<!---<div class="feature-card__icon icon-blue">
<svg xmlns="http://www.w3.org/2000/svg" width="48px" height="48px" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2C8.13 2 5 5.13 5 9c0 4.25 5.19 10.15 6.47 11.53a1 1 0 0 0 1.47 0C13.81 19.15 19 13.25 19 9c0-3.87-3.13-7-7-7zm0 16.75C10.17 17 7 12.94 7 9a5 5 0 0 1 10 0c0 3.94-3.17 8-5 9.75z"/><path d="M12 11.5a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5z"/></svg>
</div>--->
<h3 class="feature-card__title-2">SOFTWARE</h3>
<p class="feature-card__text"> En AJsystem contamos con la implementación de software a la medida:</p> <p class="feature-card__text">Direccionamiento </p> <p class="feature-card__text"> Adecuación </p><p class="feature-card__text"> Levantamiento de requerimientos.</p>
</div>
<div class="feature-card">
<!--- <div class="feature-card__icon icon-black">
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4 5C4 4.44772 4.44772 4 5 4H19C19.5523 4 20 4.44772 20 5V15C20 15.5523 19.5523 16 19 16H8L5 19V5Z" /><circle cx="9" cy="10.5" r="1.2" fill="currentColor" stroke="none" /><circle cx="12" cy="10.5" r="1.2" fill="currentColor" stroke="none" /><circle cx="15" cy="10.5" r="1.2" fill="currentColor" stroke="none" /></svg>
</div>--->
<h3 class="feature-card__title">REDES ELECTRÍCAS</h3>
<p class="feature-card__text">En AJsystem contamos con la instalación de redes eléctricas y datos. </p>
</div>
<div class="feature-card">
<!---<div class="feature-card__icon icon-blue">
<svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="currentColor"><path d="m438-338 226-226-57-57-169 169-84-84-57 57 141 141Zm42 258q-139-35-229.5-159.5T160-516v-244l320-120 320 120v244q0 152-90.5 276.5T480-80Zm0-84q104-33 172-132t68-220v-189l-240-90-240 90v189q0 121 68 220t172 132Zm0-316Z"/></svg>
</div>--->
<h3 class="feature-card__title-2">SISTEMAS DE SEGURIDA</h3>
<p class="feature-card__text">En AJsystem contamos con la venta e instalación de sistemas de seguridad: </p>
<p class="feature-card__text">Controles de acceso. </p>
<p class="feature-card__text">Sistema de alarmas inalámbricas y cableada. c. C.C.T.V </p>
</div>
<div class="feature-card">
<!---<div class="feature-card__icon icon-black">
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2C5.44772 2 5 2.44772 5 3V21C5 21.5523 5.44772 22 6 22H18C18.5523 22 19 21.5523 19 21V8.82843C19 8.29799 18.7893 7.78929 18.4142 7.41421L13.5858 2.58579C13.2107 2.21071 12.702 2 12.1716 2H6Z" /><path d="M13 3.41421L17.5858 8H13C12.4477 8 12 7.55228 12 7V3.41421Z" /><path d="M8 10H16M8 14H16" /></svg>
</div>--->
<h3 class="feature-card__title">MESA DE AYUDA</h3>
<p class="feature-card__text">En AJsystem contamos con mesa de ayuda técnica 24 horas</p>
</div>
<div class="feature-card">
<!---<div class="feature-card__icon icon-blue">
<svg xmlns="http://www.w3.org/2000/svg" height="64px" viewBox="0 -960 960 960" width="64px" fill="currentColor"><path d="M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h640q33 0 56.5 23.5T880-720v159h-80v-79L480-440 160-640v400h480v80H160Zm320-360 320-200H160l320 200ZM160-240v-480 480Zm600 80q-17 0-28.5-11.5T720-200v-120q0-17 11.5-28.5T760-360v-40q0-33 23.5-56.5T840-480q33 0 56.5 23.5T920-400v40q17 0 28.5 11.5T960-320v120q0 17-11.5 28.5T920-160H760Zm40-200h80v-40q0-17-11.5-28.5T840-440q-17 0-28.5 11.5T800-400v40Z"/></svg>
</div>--->
<h3 class="feature-card__title-2">ASESORÍA</h3>
<p class="feature-card__text"> En AJsystem Contamos con un asesoramiento integral.</p>
</div>
</div>
</div>
</section>
</article>
</main>

View File

@ -0,0 +1,21 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { HomeComponent } from './home.component';
describe('HomeComponent', () => {
let component: HomeComponent;
let fixture: ComponentFixture<HomeComponent>;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [HomeComponent]
});
fixture = TestBed.createComponent(HomeComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,10 @@
import { Component } from '@angular/core';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent {
}

View File

View File

@ -0,0 +1,369 @@
<!--
- #PRODUCTS & SERVICES
-->
<section class="section food-menu" id="food-menu">
<div class="container">
<p class="section-subtitle">Para ser invisible en el mundo...</p>
<h2 class="h2 section-title">
Productos AJ<span class="cybersec">System</span>
</h2>
<p class="section-text">
¡No sales a la calle desnudo!, ¿por qué permites que te espíen?
</p>
<ul class="fiter-list">
<li>
<button class="filter-btn active">Todos</button>
</li>
<li>
<button class="filter-btn">Celulares</button>
</li>
<li>
<button class="filter-btn">Televisores</button>
</li>
<li>
<button class="filter-btn">Smart Watch y Audifonos</button>
</li>
<li>
<button class="filter-btn">Tablets</button>
</li>
<li>
<button class="filter-btn">Portatiles</button>
</li>
<li>
<button class="filter-btn">Licencias</button>
</li>
<li>
<button class="filter-btn">Impresoras</button>
</li>
<li>
<button class="filter-btn">Disco Duro</button>
</li>
<li>
<button class="filter-btn">Conectividad</button>
</li>
<li>
<button class="filter-btn">Reguladores</button>
</li>
<li>
<button class="filter-btn">Perifericos</button>
</li>
<li>
<button class="filter-btn">Equipos corporativos</button>
</li>
</ul>
<ul class="food-menu-list">
<li>
<div class="food-menu-card">
<div class="card-banner">
<svg id="item-01-round-squircle-svg" class="w-100" version="1.1" width="300" viewBox="0 0 300 300" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Celulares</title>
<defs>
<clipPath id="rotated-squircle">
<path d="m280 240c-19.938 28.8-69.515 46.852-103.98 53.118-34.463 6.266-87.222 6.82-116.02-13.118-28.8-19.938-46.852-69.515-53.118-103.98-6.266-34.463-6.82-87.222 13.118-116.02 19.938-28.8 69.515-46.852 103.98-53.118 34.463-6.266 87.222-6.82 116.02 13.118 28.8 19.938 46.852 69.515 53.118 103.98 6.266 34.463 6.82 87.222-13.118 116.02z" fill="#ccc" />
</clipPath>
</defs>
<image width="300" height="300" clip-path="url(#rotated-squircle)" preserveAspectRatio="none" xlink:href="assets/images/5c5c9bf6-19f8-4e5e-8725-100ba731125b.webp"/>
</svg>
<div class="badge">-45%</div>
<button class="btn food-menu-btn">Comprar</button>
</div>
<div class="wrapper">
<p class="category">celulares</p>
<div class="rating-wrapper">
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
</div>
</div>
<h3 class="h3 card-title">XIAOMI REDMI PAD SE - PANTALLA 8,7"</h3>
<h5 class="section-subtitle-2">-OCTA CORE (2,4GHZ / 1,9GHZ) - 128GB - MEMORIA 4GB - CUATRO CAMARAS - ANDROID 11 - DUAL SIM - 4G LTE - BLUE"</h5>
<div class="price-wrapper">
<p class="price-text">Valor:</p>
<data class="price" value="xxxxxx">$xxxxxx</data>
<del class="del">$xxxxxxx</del>
</div>
</div>
</li>
<li>
<div class="food-menu-card">
<div class="card-banner">
<svg id="item-02-round-squircle-svg" class="w-100" version="1.1" width="300" viewBox="0 0 300 300" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Televisores</title>
<defs>
<clipPath id="rotated-squircle">
<path d="m280 240c-19.938 28.8-69.515 46.852-103.98 53.118-34.463 6.266-87.222 6.82-116.02-13.118-28.8-19.938-46.852-69.515-53.118-103.98-6.266-34.463-6.82-87.222 13.118-116.02 19.938-28.8 69.515-46.852 103.98-53.118 34.463-6.266 87.222-6.82 116.02 13.118 28.8 19.938 46.852 69.515 53.118 103.98 6.266 34.463 6.82 87.222-13.118 116.02z" fill="#ccc" />
</clipPath>
</defs>
<image width="300" height="300" clip-path="url(#rotated-squircle)" preserveAspectRatio="none" xlink:href="assets/images/bfc10264-ac60-4578-813f-1eff9cb7e0fa.webp"/>
</svg>
<div class="badge">-55%</div>
<button class="btn food-menu-btn">Comprar</button>
</div>
<div class="wrapper">
<p class="category">Televisores</p>
<div class="rating-wrapper">
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud-outline"></ion-icon>
</div>
</div>
<h3 class="h3 card-title">TELEVISOR LED HISENSE 32"</h3>
<h5 class="section-subtitle-2">32A4N - HD - SMART TV - TDT - SISTEMA OPERATIVO VIDA A U7</h5>
<div class="price-wrapper">
<p class="price-text">Valor:</p>
<data class="price" value="xxxxxxxx">$xxxxxxxx</data>
<del class="del">$xxxxxxxx</del>
</div>
</div>
</li>
<li>
<div class="food-menu-card">
<div class="card-banner">
<svg id="item-03-round-squircle-svg" class="w-100" version="1.1" width="300" viewBox="0 0 300 300" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Smart Watch y Audifonos</title>
<defs>
<clipPath id="rotated-squircle">
<path d="m280 240c-19.938 28.8-69.515 46.852-103.98 53.118-34.463 6.266-87.222 6.82-116.02-13.118-28.8-19.938-46.852-69.515-53.118-103.98-6.266-34.463-6.82-87.222 13.118-116.02 19.938-28.8 69.515-46.852 103.98-53.118 34.463-6.266 87.222-6.82 116.02 13.118 28.8 19.938 46.852 69.515 53.118 103.98 6.266 34.463 6.82 87.222-13.118 116.02z" fill="#ccc" />
</clipPath>
</defs>
<image width="300" height="300" clip-path="url(#rotated-squircle)" preserveAspectRatio="none" xlink:href="assets/images/eb5a6af1-c459-44ea-ad05-df52ccb37cea.webp"/>
</svg>
<div class="badge">-47%</div>
<button class="btn food-menu-btn">Comprar</button>
</div>
<div class="wrapper">
<p class="category">Smart Watch y Audifonos</p>
<div class="rating-wrapper">
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
</div>
</div>
<h3 class="h3 card-title"> HUAWEI BAND 7 - PANT 1,47" - BT 5,0</h3>
<h5 class="section-subtitle-2">RESISTE AL AGUA - NOTIFICACIONES - CONTROL ACTIVIDAD - OXIMETRO - 96 MODOS DE ENTRENAMIENTO - NEGRO</h5>
<div class="price-wrapper">
<p class="price-text">Valor:</p>
<data class="price" value="xxxxxxx">$xxxxxxxxx</data>
<del class="del">$xxxxxxxxx</del>
</div>
</div>
</li>
<li>
<div class="food-menu-card">
<div class="card-banner">
<svg id="item-04-round-squircle-svg" class="w-100" version="1.1" width="300" viewBox="0 0 300 300" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Tablets</title>
<defs>
<clipPath id="rotated-squircle">
<path d="m280 240c-19.938 28.8-69.515 46.852-103.98 53.118-34.463 6.266-87.222 6.82-116.02-13.118-28.8-19.938-46.852-69.515-53.118-103.98-6.266-34.463-6.82-87.222 13.118-116.02 19.938-28.8 69.515-46.852 103.98-53.118 34.463-6.266 87.222-6.82 116.02 13.118 28.8 19.938 46.852 69.515 53.118 103.98 6.266 34.463 6.82 87.222-13.118 116.02z" fill="#ccc" />
</clipPath>
</defs>
<image width="300" height="300" clip-path="url(#rotated-squircle)" preserveAspectRatio="none" xlink:href="assets/images/afb0a5ea-f721-41e4-bbbd-0b41df5a9dc7.webp"/>
</svg>
<div class="badge">-33%</div>
<button class="btn food-menu-btn">Comprar</button>
</div>
<div class="wrapper">
<p class="category">Tablets</p>
<div class="rating-wrapper">
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud-outline"></ion-icon>
<ion-icon name="cloud-outline"></ion-icon>
</div>
</div>
<h3 class="h3 card-title">XIAOMI REDMI PAD SE - PANTALLA 8,7"</h3>
<h5 class="section-subtitle-2">OCTA CORE (2,0GHZ / 1,8GHZ) - 64GB - MEMORIA 4GB - ANDROID 14 - DOBLE CAMARA - WIFI - GRAPHITE GRAY</h5>
<div class="price-wrapper">
<p class="price-text">Valor:</p>
<data class="price" value="xxxxxxx">$xxxxxxx</data>
<del class="del">$xxxxxx</del>
</div>
</div>
</li>
<li>
<div class="food-menu-card">
<div class="card-banner">
<svg id="item-05-round-squircle-svg" class="w-100" version="1.1" width="300" viewBox="0 0 300 300" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Portatiles</title>
<defs>
<clipPath id="rotated-squircle">
<path d="m280 240c-19.938 28.8-69.515 46.852-103.98 53.118-34.463 6.266-87.222 6.82-116.02-13.118-28.8-19.938-46.852-69.515-53.118-103.98-6.266-34.463-6.82-87.222 13.118-116.02 19.938-28.8 69.515-46.852 103.98-53.118 34.463-6.266 87.222-6.82 116.02 13.118 28.8 19.938 46.852 69.515 53.118 103.98 6.266 34.463 6.82 87.222-13.118 116.02z" fill="#ccc" />
</clipPath>
</defs>
<image width="300" height="300" clip-path="url(#rotated-squircle)" preserveAspectRatio="none" xlink:href="assets/images/26a155bd-3b7b-494a-a65b-6a0ff53e175f.webp"/>
</svg>
<div class="badge">-9%</div>
<button class="btn food-menu-btn">Comprar</button>
</div>
<div class="wrapper">
<p class="category">Portatiles</p>
<div class="rating-wrapper">
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
</div>
</div>
<h3 class="h3 card-title"> ACER A314-36P-323F</h3>
<h5 class="section-subtitle-2">INTEL CORE I3 N305 - 8GB LPDDR5 - 512GB SSD - PANTALLA 14" FHD - NO DVD - HDMI - WINDOWS 11 - PURE SILVER</h5>
<div class="price-wrapper">
<p class="price-text">Valor:</p>
<data class="price" value="xxxxxxxx">$xxxxxxxx</data>
<del class="del">$xxxxxxxxx</del>
</div>
</div>
</li>
<li>
<div class="food-menu-card">
<div class="card-banner">
<svg id="item-06-round-squircle-svg" class="w-100" version="1.1" width="300" viewBox="0 0 300 300" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Licencias</title>
<defs>
<clipPath id="rotated-squircle">
<path d="m280 240c-19.938 28.8-69.515 46.852-103.98 53.118-34.463 6.266-87.222 6.82-116.02-13.118-28.8-19.938-46.852-69.515-53.118-103.98-6.266-34.463-6.82-87.222 13.118-116.02 19.938-28.8 69.515-46.852 103.98-53.118 34.463-6.266 87.222-6.82 116.02 13.118 28.8 19.938 46.852 69.515 53.118 103.98 6.266 34.463 6.82 87.222-13.118 116.02z" fill="#ccc" />
</clipPath>
</defs>
<image width="300" height="300" clip-path="url(#rotated-squircle)" preserveAspectRatio="none" xlink:href="assets/images/75fbd65d-2b18-445c-ace3-b1c6f34b8373.webp"/>
</svg>
<div class="badge">-3%</div>
<button class="btn food-menu-btn">Comprar</button>
</div>
<div class="wrapper">
<p class="category">Licencias</p>
<div class="rating-wrapper">
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
<ion-icon name="cloud"></ion-icon>
</div>
</div>
<h3 class="h3 card-title">LICENCIA KASPERSKY</h3>
<h5 class="section-subtitle-2">STANDAR 1 USUARIO (12 MESES)</h5>
<div class="price-wrapper">
<p class="price-text">Valor:</p>
<data class="price" value="xxxxxxx">$xxxxxxxxx</data>
<del class="del">$xxxxxxxx</del>
</div>
</div>
</li>
</ul>
</div>
</section>

View File

@ -0,0 +1,21 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ProductsComponent } from './products.component';
describe('ProductsComponent', () => {
let component: ProductsComponent;
let fixture: ComponentFixture<ProductsComponent>;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [ProductsComponent]
});
fixture = TestBed.createComponent(ProductsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,10 @@
import { Component } from '@angular/core';
@Component({
selector: 'app-products',
templateUrl: './products.component.html',
styleUrls: ['./products.component.css']
})
export class ProductsComponent {
}

0
src/assets/.gitkeep Normal file
View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="SVGRoot" version="1.1" viewBox="0 0 700 600" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="linearGradient3185" x1="449.27499" x2="449.27499" y1="662.08398" y2="750.07397" gradientTransform="translate(-127.78464,-597)" gradientUnits="userSpaceOnUse" xlink:href="#id0"/>
<linearGradient id="id0" x1="330.134" x2="330.134" y1="695.698" y2="800.44897" gradientUnits="userSpaceOnUse">
<stop stop-color="#EEF8FD" offset="0"/>
<stop stop-color="#87C3EA" offset="1"/>
</linearGradient>
<linearGradient id="linearGradient3189" x1="542.56299" x2="454.13199" y1="707.40503" y2="818.46802" gradientTransform="translate(-127.78464,-597)" gradientUnits="userSpaceOnUse" xlink:href="#id0"/>
<linearGradient id="linearGradient3191" x1="338.92899" x2="243.01199" y1="666.20801" y2="666.20801" gradientTransform="translate(-127.78464,-597)" gradientUnits="userSpaceOnUse" xlink:href="#id0"/>
<linearGradient id="linearGradient3193" x1="329.42599" x2="329.42599" y1="785.21301" y2="822.76202" gradientTransform="translate(-127.78464,-597)" gradientUnits="userSpaceOnUse" xlink:href="#id0"/>
<linearGradient id="linearGradient3195" x1="234.22501" x2="61.776402" y1="714.84302" y2="804.89899" gradientTransform="translate(-127.78464,-597)" gradientUnits="userSpaceOnUse" xlink:href="#id0"/>
<linearGradient id="linearGradient3197" x1="257.92001" x2="303.733" y1="638.22302" y2="786.67401" gradientTransform="translate(-127.78464,-597)" gradientUnits="userSpaceOnUse" xlink:href="#id0"/>
<linearGradient id="linearGradient3199" x1="312.56699" x2="379.78101" y1="669.85797" y2="898.47699" gradientTransform="translate(-127.78464,-597)" gradientUnits="userSpaceOnUse" xlink:href="#id0"/>
<linearGradient id="linearGradient3201" x1="328.32901" x2="162.547" y1="772.48297" y2="811.90002" gradientTransform="translate(-127.78464,-597)" gradientUnits="userSpaceOnUse" xlink:href="#id0"/>
<linearGradient id="linearGradient3203" x1="330.134" x2="330.134" y1="695.698" y2="800.44897" gradientTransform="translate(-127.78464,-597)" gradientUnits="userSpaceOnUse" xlink:href="#id0"/>
<linearGradient id="linearGradient3205" x1="394.62601" x2="394.62601" y1="736.74902" y2="840.08301" gradientTransform="translate(-127.78464,-597)" gradientUnits="userSpaceOnUse" xlink:href="#id0"/>
</defs>
<path class="fil0" d="m308 149c2 0 3 1 3 3v16c16 0 32 7 40 22 0 0-9 5-21 12l-44 25c-12 7-21 12-21 12-8-14-7-32 1-46l-13-8c-1-1-2-2-1-4 1-1 2-2 4-1l14 8c4-5 9-10 16-14 6-4 13-6 20-7v-16c0-2 1-3 3-3zm13 32c-1-2-4-3-6-2s-3 4-2 6 4 3 6 2 3-4 2-6zm-39 22c-1-2-4-3-6-2s-3 4-2 6 4 3 6 2 3-4 2-6z" fill="#a4c738" fill-rule="evenodd"/>
<g id="g1120" transform="translate(250.78464,120)" fill-rule="evenodd">
<ellipse class="fil1" cx="321.21536" cy="109" rx="68" ry="52" fill="url(#linearGradient3185)"/>
<ellipse class="fil1" cx="260.21536" cy="64" rx="68" ry="52" fill="url(#linearGradient3185)"/>
<path class="fil2" d="m362.21536 106c-48 0-71 29-71 63 14 31 41 53 78 56 48 0 80-25 80-58-5-31-42-60-87-61z" fill="url(#linearGradient3189)"/>
<ellipse class="fil3" cx="163.21536" cy="69" rx="73" ry="69" fill="url(#linearGradient3191)"/>
<ellipse class="fil4" cx="201.21536" cy="207" rx="47" ry="41" fill="url(#linearGradient3193)"/>
<circle class="fil6" cx="153.21536" cy="115" r="74" fill="url(#linearGradient3197)"/>
<path class="fil7" d="m205.21536 42c66-8 124 23 129 69s-44 89-110 97-124-23-129-69 44-89 110-97z" fill="url(#linearGradient3199)"/>
<ellipse class="fil9" cx="202.21536" cy="151" rx="62" ry="52" fill="url(#linearGradient3203)"/>
<ellipse class="fil10" cx="267.21536" cy="191" rx="76" ry="52" fill="url(#linearGradient3205)"/>
<ellipse class="fil1" cx="321.21536" cy="109" rx="68" ry="52" fill="url(#linearGradient3185)"/>
<ellipse class="fil1" cx="260.21536" cy="64" rx="68" ry="52" fill="url(#linearGradient3185)"/>
<path class="fil2" d="m362.21536 106c-48 0-71 29-71 63 14 31 41 53 78 56 48 0 80-25 80-58-5-31-42-60-87-61z" fill="url(#linearGradient3189)"/>
<ellipse class="fil3" cx="163.21536" cy="69" rx="73" ry="69" fill="url(#linearGradient3191)"/>
<ellipse class="fil4" cx="201.21536" cy="207" rx="47" ry="41" fill="url(#linearGradient3193)"/>
<circle class="fil6" cx="153.21536" cy="115" r="74" fill="url(#linearGradient3197)"/>
<path class="fil7" d="m205.21536 42c66-8 124 23 129 69s-44 89-110 97-124-23-129-69 44-89 110-97z" fill="url(#linearGradient3199)"/>
<ellipse class="fil9" cx="202.21536" cy="151" rx="62" ry="52" fill="url(#linearGradient3203)"/>
<ellipse class="fil10" cx="267.21536" cy="191" rx="76" ry="52" fill="url(#linearGradient3205)"/>
<ellipse class="fil1" cx="321.21536" cy="109" rx="68" ry="52" fill="url(#linearGradient3185)"/>
<ellipse class="fil1" cx="260.21536" cy="64" rx="68" ry="52" fill="url(#linearGradient3185)"/>
<path class="fil2" d="m362.21536 106c-48 0-71 29-71 63 14 31 41 53 78 56 48 0 80-25 80-58-5-31-42-60-87-61z" fill="url(#linearGradient3189)"/>
<ellipse class="fil3" cx="163.21536" cy="69" rx="73" ry="69" fill="url(#linearGradient3191)"/>
<ellipse class="fil4" cx="201.21536" cy="207" rx="47" ry="41" fill="url(#linearGradient3193)"/>
<path class="fil5" d="m72.21536 78c50-16 99 0 110 36 11 35-20 76-70 92s-99 0-110-36c-11-35 20-76 70-92z" fill="url(#linearGradient3195)"/>
<circle class="fil6" cx="153.21536" cy="115" r="74" fill="url(#linearGradient3197)"/>
<path class="fil7" d="m205.21536 42c66-8 124 23 129 69s-44 89-110 97-124-23-129-69 44-89 110-97z" fill="url(#linearGradient3199)"/>
<ellipse class="fil8" cx="117.21536" cy="195" rx="79" ry="54" fill="url(#linearGradient3201)"/>
<ellipse class="fil9" cx="202.21536" cy="151" rx="62" ry="52" fill="url(#linearGradient3203)"/>
<ellipse class="fil10" cx="267.21536" cy="191" rx="76" ry="52" fill="url(#linearGradient3205)"/>
</g>
<use transform="matrix(.72289157 0 0 .72289157 -181.2901 333.25301)" xlink:href="#g1120"/>
<use transform="matrix(.48192771 0 0 .48192771 -85.860067 -57.831325)" xlink:href="#g1120"/>
</svg>

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 504 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -0,0 +1,16 @@
<svg id="SVGRoot" version="1.1" height="50" width="342" viewBox="0 0 342 50" xmlns="http://www.w3.org/2000/svg">
<g fill="#235494">
<path d="m2.1643 48.916v-8.96h19.136q1.28 0 2.304-0.64t1.6-1.664q0.64-1.024 0.64-2.24 0-1.28-0.64-2.304-0.576-1.024-1.6-1.664t-2.304-0.64h-6.912q-3.904 0-7.104-1.536-3.2-1.536-5.12-4.48-1.856-3.008-1.856-7.168 0-4.096 1.792-7.104 1.792-3.008 4.864-4.672 3.072-1.728 6.784-1.728h19.776v8.96h-18.56q-1.152 0-2.112 0.576t-1.472 1.536-0.512 2.112 0.512 2.112q0.512 0.896 1.472 1.472t2.112 0.576h7.232q4.288 0 7.424 1.664 3.2 1.6 4.928 4.544 1.792 2.88 1.792 6.784 0 4.608-1.856 7.872-1.792 3.2-4.864 4.928-3.072 1.664-6.784 1.664z"/>
<path d="m59.252 48.916q-5.568 0-9.792-2.048-4.224-2.112-6.592-5.76-2.304-3.712-2.304-8.576 0-5.376 2.24-9.216t5.952-5.888q3.776-2.112 8.32-2.112 5.184 0 8.64 2.176 3.52 2.176 5.312 5.952 1.792 3.712 1.792 8.512 0 0.832-0.128 1.984-0.064 1.088-0.192 1.728h-21.504q0.384 1.664 1.472 2.816t2.752 1.728q1.664 0.512 3.712 0.512h10.048v8.192zm-8.512-19.456h12.48q-0.128-1.024-0.384-1.984t-0.832-1.664q-0.512-0.768-1.216-1.28-0.704-0.576-1.664-0.896-0.896-0.32-2.048-0.32-1.472 0-2.624 0.512t-1.92 1.408q-0.768 0.832-1.216 1.984-0.384 1.088-0.576 2.24z"/>
<path d="m100.53 48.916q-5.504 0-9.92-1.664-4.416-1.728-7.488-4.8t-4.736-7.104q-1.664-4.096-1.664-8.832t1.664-8.768q1.664-4.096 4.736-7.168 3.136-3.072 7.488-4.736 4.416-1.728 9.92-1.728h6.912v8.96h-6.656q-3.008 0-5.504 1.024-2.432 1.024-4.224 2.88-1.728 1.792-2.688 4.224-0.896 2.432-0.896 5.312t0.896 5.312q0.96 2.432 2.688 4.288 1.792 1.792 4.224 2.816 2.496 1.024 5.504 1.024h6.656v8.96z"/>
<path d="m129.59 49.684q-5.056 0-9.088-2.24t-6.4-6.144q-2.304-3.904-2.304-8.768 0-4.928 2.304-8.768 2.368-3.904 6.4-6.144 4.032-2.304 9.088-2.304t9.024 2.304q4.032 2.24 6.336 6.144 2.368 3.84 2.368 8.768 0 4.864-2.368 8.768-2.304 3.904-6.336 6.144t-9.024 2.24zm0-8.64q2.368 0 4.096-1.152t2.688-3.072 0.96-4.352q0-2.368-0.96-4.288t-2.688-3.072-4.096-1.152-4.16 1.152q-1.728 1.152-2.688 3.072t-0.96 4.288q0 2.432 0.96 4.352t2.688 3.072q1.792 1.152 4.16 1.152z"/>
<path d="m153.2 48.916v-19.392q0-4.032 1.856-7.232 1.92-3.264 5.44-5.12t8.384-1.856q2.432 0 4.48 0.576 2.048 0.512 3.712 1.472 1.728 0.896 2.944 2.176h0.128q1.28-1.28 2.944-2.176 1.728-0.96 3.776-1.472 2.112-0.576 4.544-0.576 4.864 0 8.384 1.856t5.44 5.12q1.92 3.2 1.92 7.232v19.392h-9.984v-19.072q0-1.6-0.832-2.88-0.768-1.344-2.112-2.176t-3.072-0.832-3.136 0.832q-1.344 0.832-2.112 2.176-0.768 1.28-0.768 2.88v19.072h-9.92v-19.072q0-1.6-0.832-2.88-0.768-1.344-2.176-2.176-1.344-0.832-3.072-0.832t-3.136 0.832q-1.344 0.832-2.112 2.176-0.768 1.28-0.768 2.88v19.072z"/>
<path d="m214.52 33.916v-18.88q0-4.096 1.984-7.424 1.984-3.328 5.632-5.312 3.712-1.984 8.768-1.984 5.12 0 8.704 1.984 3.648 1.984 5.568 5.312 1.92 3.328 1.92 7.424v18.88h-9.92v-18.624q0-1.728-0.832-3.136-0.832-1.472-2.304-2.304-1.408-0.896-3.2-0.896-1.856 0-3.328 0.896-1.408 0.832-2.24 2.304-0.832 1.408-0.832 3.136v18.624z"/>
</g>
<g fill="#aad624">
<path d="m242.24 49.492q-1.92 0-3.312-1.344-1.344-1.392-1.344-3.264 0-1.92 1.344-3.264 1.392-1.392 3.312-1.392 1.872 0 3.216 1.392 1.392 1.344 1.392 3.264 0 1.248-0.624 2.304t-1.68 1.68q-1.008 0.624-2.304 0.624z"/>
<path d="m263.5 48.916q-3.84 0-6.816-1.584-2.976-1.632-4.704-4.368-1.728-2.784-1.728-6.336t1.728-6.288q1.728-2.784 4.704-4.416t6.816-1.632h3.696v6.288h-3.408q-1.872 0-3.216 0.816-1.344 0.768-2.112 2.16-0.72 1.344-0.72 3.072t0.72 3.12q0.768 1.344 2.112 2.16 1.344 0.768 3.216 0.768h3.408v6.24z"/>
<path d="m283.52 49.492q-3.792 0-6.816-1.68t-4.8-4.608q-1.728-2.928-1.728-6.576 0-3.696 1.728-6.576 1.776-2.928 4.8-4.608 3.024-1.728 6.816-1.728t6.768 1.728q3.024 1.68 4.752 4.608 1.776 2.88 1.776 6.576 0 3.648-1.776 6.576-1.728 2.928-4.752 4.608t-6.768 1.68zm0-6.48q1.776 0 3.072-0.864t2.016-2.304 0.72-3.264q0-1.776-0.72-3.216t-2.016-2.304-3.072-0.864-3.12 0.864q-1.296 0.864-2.016 2.304t-0.72 3.216q0 1.824 0.72 3.264t2.016 2.304q1.344 0.864 3.12 0.864z"/>
<path d="m301.23 48.916v-14.544q0-3.024 1.392-5.424 1.44-2.448 4.08-3.84t6.288-1.392q1.824 0 3.36 0.432 1.536 0.384 2.784 1.104 1.296 0.672 2.208 1.632h0.096q0.96-0.96 2.208-1.632 1.296-0.72 2.832-1.104 1.584-0.432 3.408-0.432 3.648 0 6.288 1.392t4.08 3.84q1.44 2.4 1.44 5.424v14.544h-7.488v-14.304q0-1.2-0.624-2.16-0.576-1.008-1.584-1.632t-2.304-0.624-2.352 0.624q-1.008 0.624-1.584 1.632-0.576 0.96-0.576 2.16v14.304h-7.44v-14.304q0-1.2-0.624-2.16-0.576-1.008-1.632-1.632-1.008-0.624-2.304-0.624t-2.352 0.624q-1.008 0.624-1.584 1.632-0.576 0.96-0.576 2.16v14.304z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

View File

@ -0,0 +1,190 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg style="height:100%;width:100%" version="1.1" viewBox="0 0 1e4 8800" xmlns="http://www.w3.org/2000/svg">
<defs>
<clipPath id="a">
<path d="M0 0h10000v8800H0"/>
</clipPath>
<clipPath id="i">
<path d="M0 0h8420v5960H0"/>
</clipPath>
<clipPath id="h">
<path d="M0 0h8420v5960H0"/>
</clipPath>
<clipPath id="g">
<path d="M0 0h8420v5960H0"/>
</clipPath>
<clipPath id="f">
<path d="M0 0h8420v5960H0"/>
</clipPath>
<clipPath id="e">
<path d="M0 0h8420v5960H0"/>
</clipPath>
<clipPath id="d">
<path d="M0 0h8420v5960H0"/>
</clipPath>
<clipPath id="c">
<path d="M0 0h8420v5960H0"/>
</clipPath>
<clipPath id="b">
<path d="M0 0h8420v5960H0"/>
</clipPath>
</defs>
<g clip-path="url(#a)">
<g transform="matrix(1.08 0 0 1.08 960 2890)" clip-path="url(#b)" display="block">
<g display="block">
<path d="m3040 3100c-10 30 90 60 290 10 200-40 0-120-120-110-110 10-170 60-170 100" fill="#5E1313"/>
<path d="m3340 2900-360 440 160 140c220-200 460-350 680-460l-480-120" fill="#F58D6C"/>
<path d="m3140 3480 30-30c-100-70-110-210-110-210l-80 100 160 140" fill="#FFF"/>
<path d="m3040 3220c10-10-10-20-20-10l-170 160-30 110-100 40 460 360c30 30 70 50 120 50l280 30 20-20-20-20-260-30c-40 0-80-20-100-50-80-90-230-290-240-330-10-60 60-290 60-290" fill="#ED3D50"/>
<path d="m3160 3460c50-20 80-110 130-130 80-30 120 10 120 10s-90 90-100 220l-150-100" fill="#ED3D50"/>
<path d="m3010 3340s120 110 160 120c30 10 100-10 100-10 50 60 110 320 120 330 40 30 180 10 200 50 30 40-10 90-10 90l-300-10-190-150-140-260 60-160" fill="#342d8c" stop-color="#000000" stroke-width=".92592" style="-inkscape-stroke:none;font-variation-settings:normal"/>
<path d="M3170 3690a10 10 0 01 0-20l180-40a10 10 0 01 10 30 950 950 0 00-190 30zm30-90a10 10 0 01 0-20 390 390 0 01 130-20 10 10 0 11 0 20 370 370 0 00-130 20" fill="#FFF"/>
<path d="m3760 3010-500-20-70 90 360 90 200-130 10-30" fill="#D74225"/>
<path d="m4610 940c20-210 0-430-130-500-370-200-800-10-810 410 0 300 210 980 430 1250-20 0-240 230-200 310l-50 30c-120 50-250 70-280 100-30 40 10 50 10 80-10 30-210 0-240 70-20 50 0 70 20 80 10 10-210 0-230 70-10 60 50 110 50 110s-120 10-130 150c20-100 550 60 660-10l580-340c200-110 340-200 350-360 20-390 70-1200-30-1450" fill="#840b11" stop-color="#000000" stroke-width=".92593" style="-inkscape-stroke:none;font-variation-settings:normal"/>
<path d="M4310 4120v-10l-10-10-610-110a10 10 0 00-10 30l610 100h20" fill="#0F3952"/>
<path d="m3530 4040 300 10c20 0 40-10 40-40 0-20-10-40-40-40l-300-20c-20 0-40 20-40 40s20 40 40 50" fill="#0F3952"/>
<path d="M3680 4010a10 10 0 10 10-20 10 10 0 00-10 20" fill="#FFF"/>
</g>
</g>
<g transform="translate(5650 5220) scale(.62527)" clip-path="url(#c)" display="block">
<g display="block">
<g fill="#0C1A37">
<path d="M2410 1650a2230 2230 0 01 3130-470 2230 2230 0 01 470 3140 2230 2230 0 01-3130 470 2230 2230 0 01-470-3140zm-110-80a2370 2370 0 10 3820 2820 2370 2370 0 00-3820-2820"/>
<path d="M5880 4220a2080 2080 0 11-3350-2480 2080 2080 0 01 3350 2480zM2570 1770a2040 2040 0 10 3280 2420 2040 2040 0 00-3280-2420"/>
<path d="M4230 3000h-10L2450 4050a20 20 0 01-20-30l1770-1060a20 20 0 01 30 40zm260 1990a20 20 0 01-40-10l-170-1290a20 20 0 11 40-10l170 1290v20zm-370-100a20 20 0 01-40-20l10-120a20 20 0 01 40 0l-10 130v10"/>
<path d="M4140 4620a20 20 0 01-40-20l90-1620a20 20 0 11 40 0l-90 1630v10zm-620 20a20 20 0 01-40-20l500-1170a20 20 0 11 40 20l-500 1170"/>
<path d="M4230 3000a20 20 0 01-40-20l160-600a20 20 0 11 40 10l-160 600v10zm240-900a20 20 0 01-40-20l290-1090a20 20 0 11 40 10l-290 1090v10"/>
<path d="m6240 2560-10 10-2020 430a20 20 0 01-10-40l2020-430a20 20 0 01 20 30"/>
</g>
<path d="M5770 4140a20 20 0 01-40-30 1900 1900 0 10-3350-1640 20 20 0 11-40-10 1940 1940 0 11 3430 1670" fill="#6897AE"/>
</g>
</g>
<g transform="translate(1080 5210) scale(.62416)" clip-path="url(#d)" display="block">
<g display="block" fill="#FFF">
<path d="m3170 3770c-60-60-110-160-110-250 40 60 90 180 110 250zm1210 620c-370 70-780-80-1030-380 280 250 620 390 1030 380zm1070-960c-10 170-100 360-230 480 220-410 160-330 230-480zm-320-1150c190 160 330 420 340 660-80-260-170-440-340-660zm-1720-50c230-240 600-370 930-310-340 0-640 100-930 310zm-230 1060c-30-70-30-170 0-240 10 60 20 170 0 240zm790 920c-330-70-620-330-720-660 150 310 390 530 720 660zm1200-430c-60 140-200 270-350 320 180-140 170-140 350-320zm130-1040c100 190 120 450 50 650 20-240 10-420-50-650zm-1400-630c270-120 620-100 870 50-280-100-560-130-870-50"/>
<path d="m4720 3760c-70 80-180 130-260 60-190 90-500-50-560-250-220-20-400-210-350-380-120-250 80-510 350-480 70-50 170-70 260-50 200-230 600-130 690 170 130 30 240 140 270 260 260-610-1350-1200-1730-290-340 810 740 1660 1450 990-70 0-120-30-120-30"/>
<path d="M3780 3260c-380 30-1290 50-1750 30 500-40 1400-40 1750-30zm-800-1490c260 220 630 600 850 860-260-220-630-600-850-860zm-250 600c320 150 810 420 1120 620-330-150-820-420-1120-620zm1450 1210c40 410 60 1110 50 1370-40-340-60-1050-50-1370zm-280-10c-190 260-500 640-730 860 190-260 510-630 730-860zm950-100c300 100 760 290 1040 430-300-100-750-290-1040-430zm-110-490c300-130 770-300 1080-380-290 130-760 300-1080 380zm-310-140c60-350 260-1180 390-1580-80 410-280 1240-390 1580zm-680-1280c90 200 180 500 210 680-70-160-170-470-210-680zm2150 1820c-220 10-560-30-740-80 180 0 520 30 740 80zm-940 1330c-120-160-250-420-300-570 100 130 230 390 300 570zM2590 2700c160 10 390 60 510 110-130 0-360-50-510-110"/>
<path d="m5240 4030c-10 30-270 690-1320 460 0 0 120 130 320 150 190 10 240-20 240-20s220 90 330 40 190-190 190-190 120 0 220-150c90-140 70-170 70-170s90-30 90-170c-10-140-140 50-140 50zm60-1850s280 320 300 610c0 0 90-220 70-340-10-130 90-130 10-250-80-110-240-70-240-70s-120-140-270-170c-160-20-190 0-190 0l320 220zm-2150 140s-140 30-190 170l-70 160s-100 10-160 140c-60 140-20 150-20 150s-70 10-100 170 180 300 180 300c40 110 130 150 130 150-100-350 80-890 230-1240"/>
</g>
<g display="block">
<g fill="#0C1A37">
<path d="M2400 1650a2230 2230 0 01 3140-470 2230 2230 0 01 470 3140 2230 2230 0 01-3140 470 2230 2230 0 01-470-3140zm-100-70a2370 2370 0 10 3810 2820 2370 2370 0 00-3810-2820"/>
<path d="M5880 4220a2080 2080 0 11-3350-2480 2080 2080 0 01 3350 2480zM2570 1780a2040 2040 0 10 3280 2420 2040 2040 0 00-3280-2420"/>
<path d="M3880 1120h-10c-10 10-20 0-20-10l-30-150a20 20 0 11 40 0l30 140-10 20zm30 130-10 10c-20 10-30 0-30-10l-10-50a20 20 0 11 50-10v60zm260 1460-10 10-30-20-230-1280a20 20 0 11 50-10l230 1290-10 10zm50 290L3000 4660a20 20 0 11-40-30l1230-1660a20 20 0 11 30 30zm420-1140a20 20 0 01-40-20l290-800a20 20 0 11 40 20l-290 800zm-260 720a20 20 0 01-40-20l160-450a20 20 0 11 40 20l-160 450"/>
<path d="m6230 2530-10 10-2010 470a20 20 0 11-10-40l2010-470a20 20 0 01 20 30"/>
<path d="m6150 3720-20 10-1930-720a20 20 0 01 10-40l1930 720a20 20 0 01 10 30zm-1320 130a20 20 0 01-30 0l-190-260a20 20 0 01 40-30l180 260v30zm200 270v10c-10 10-30 0-30-10l-100-130a20 20 0 11 40-30l90 140v20zm-150 830-10 10-30-10-530-1570a20 20 0 01 50-20l520 1570v20"/>
</g>
<path d="M5360 1460h-30c-620-460-1450-490-2110-90a20 20 0 11-20-40 1940 1940 0 01 2160 100v30zm410 2680a20 20 0 11-40-30c300-400 430-900 350-1400a20 20 0 01 40-10c80 510-50 1020-350 1440" fill="#6897AE"/>
</g>
</g>
<g transform="translate(1740 2040) scale(1.0912)" clip-path="url(#e)" display="block">
<g display="block">
<path d="M3550 4520a370 370 0 10 120 720 370 370 0 00-120-720zm260 210-120 70c-30 20-70 0-80-40l-20-130c-10-30 20-60 50-60 70 10 130 30 180 80 20 20 20 60-10 80zm-280-90 30 140c0 30-20 60-60 60l-140-20c-30 0-50-40-40-70 30-60 70-110 130-140 30-20 70 0 80 30zm-230 300c0-30 20-60 60-60l130 20c40 0 60 40 50 70l-60 120c-10 40-60 40-80 20-50-40-80-100-100-170zm230 180 60-130c10-30 60-40 80-10l100 90c30 20 20 60-10 80a310 310 0 01-190 40c-30 0-50-40-40-70zm280-100-100-90c-30-20-20-60 10-80l120-70c30-20 70 0 70 30 20 70 10 140-20 200-10 30-50 40-80 10" fill="#67A3C3"/>
<path d="M3320 4940c0-20 20-30 40-30h140l30 20 80-10-370-90 10 110h70zm300-20 80-30c-10-20 0-40 20-50l100-80c30-20 70-10 80 20l10 20 50-20a380 380 0 00-30-70l-10-30-50-60-250 300zm-1660-300a170 170 0 10-340 0 170 170 0 00 340 0" fill="#113952"/>
<path d="m3640 4520-1850-50a10 10 0 01 0-30l1850 50a10 10 0 01 0 30zm-100 740h-10l-1780-460a10 10 0 11 10-20l1780 460a10 10 0 01 0 20" fill="#376E92"/>
<path d="m3610 5270-120-20a10 10 0 11 10-20 360 360 0 10 110-720 10 10 0 11 0-20 390 390 0 01 0 780zm-1860-470c-80-20-140-90-140-180 0-100 80-180 180-180a10 10 0 11 0 30 160 160 0 00-40 310 10 10 0 01 0 20" fill="#376E92"/>
<path d="M1650 4820h-10c-60-50-100-120-100-200 0-130 110-240 250-240a10 10 0 01 0 30 220 220 0 00-130 390 10 10 0 01-10 20" fill="#67A3C3"/>
<path d="m3430 2610h80v-90h-80v90" fill="#B4D2D0"/>
<path d="M1800 4620a10 10 0 11-30 0 10 10 0 01 30 0" fill="#113952"/>
<path d="M2530 2050a30 30 0 01 0-50h90a30 30 0 11 0 50h-90" fill="#67A3C3"/>
<path d="M2990 2000a10 10 0 01-10-20c50-20 90-60 130-100l30-40a10 10 0 01 20 10l-30 40a400 400 0 01-140 110zm1620 760c-160 0-350-50-540-190a10 10 0 01 10-20c560 390 990 70 1120-90 120-150 220-370 320-560 90-190 170-350 240-420 90-80 220-90 300-10 60 60 80 150 50 260-30 130-130 280-270 440a10 10 0 11-20-20c300-310 330-560 220-660-70-70-180-70-260 10-70 70-150 230-240 410-90 190-200 410-330 570-80 100-300 280-600 280" fill="#113952"/>
<path d="m5450 880c-220 290-190 780-200 800 120 290 360 570 550 710l-100 190c-100-70-480-300-800-890-10-10-60-600 130-1040l420 230" fill="#F65B2B"/>
<path d="m6050 4600-130-180c-110-150-200-320-250-500l-250-860-150-510-120-410h260a40 40 0 00 0-90h-310a40 40 0 00-40 60l120 410H2870l-140-440c-10-20-20-30-40-30l-130 10a40 40 0 00 0 80h100l140 420-1050 2040v20h-10v10a40 40 0 00 20 20v10h20l1820 260h20a30 30 0 00 10 0v-10h10l1720-1760 230 790c60 190 140 370 260 530l130 180a40 40 0 10 70-50zm-2500 230-1700-240 980-1920 720 2160zm80-30-730-2190h2300l130 450-1700 1740" fill="#67A3C3"/>
<path d="m5600 3270-10-10c-190-450-300-830-330-1130-30-310 40-460 100-530 70-70 170-90 270-50 200 70 400 340 420 710a10 10 0 01-20 10c-20-370-220-630-410-700-90-30-180-20-240 50-60 60-130 200-100 510a4020 4020 0 00 320 1140" fill="#376E92"/>
<path d="M2510 2060a180 180 0 01-180-170v-110a10 10 0 01 20 0l10 110a150 150 0 00 150 150l380-20c110 0 220-50 280-140l40-40a10 10 0 11 10 20l-30 40c-70 90-180 140-300 150l-380 10" fill="#67A3C3"/>
<path d="m2210 1800s20-50 70-40c60 0 200 50 250 50h720s90 0 90 130h-690c-30 0-80 40-120 40-60 0-130-90-320-180" fill="#F63B4E"/>
<path d="m2820 1810 190 130h250l-110-130h-330" fill="#B82D41"/>
<path d="m5130 1070c0 20 30 60 160 120s60-150 60-150-210-100-220 30" fill="#5E1212"/>
<path d="m4900 1050s210 170 430 160l80-100-450-210-60 150" fill="#DA4017"/>
<path d="m4970 1130c30-160 240 110 430 90 0-120 100-430 100-430l-550 120 20 220" fill="#28236c" stop-color="#000000" stroke-width=".91639" style="-inkscape-stroke:none;font-variation-settings:normal"/>
<path d="M2230 3230h-10v-20l610-650a10 10 0 11 20 10l-610 660h-10zm3880 1390a100 100 0 11-190 0 100 100 0 01 190 0" fill="#113952"/>
<path d="M5840 4790h-10c-40-50-60-110-60-170a10 10 0 11 20 0c0 60 20 110 60 150a10 10 0 01-10 20zm170 80a10 10 0 11 0-30 220 220 0 00 0-430 10 10 0 01 0-30 240 240 0 01 0 490" fill="#67A3C3"/>
<path d="m5670 3520-20-20-100-320a30 30 0 11 50-20l100 320a30 30 0 01-30 40zm-3660-30-20-10v-40l220-240a30 30 0 11 40 40l-230 240-10 10" fill="#113952"/>
<path d="m5330 3060h90l-130-450h-90l130 450zm-2210-450h270v-90h-270v90" fill="#B4D2D0"/>
<path d="M3940 2610h490v-90h-570l80 90zm2080 2010a10 10 0 11-20 0 10 10 0 01 20 0zm-2610-470-90-290h-90l80 250 100 40" fill="#113952"/>
<path d="m5720 2270 160-30h30v10h10a180 180 0 0 1 20 20l30 30 10 20 10 10 20 40a20 20 0 0 1-40 30l-10-20-20-10-20-20h-10v-10h-20a140 140 0 0 0-20-10h30l-150 40a50 50 0 1 1-30-100" fill="#FF8F6B"/>
<path d="m6070 2410s-10-30 50-10v40l-50-30" fill="#DA4017"/>
<path d="m5930 2230h120l-30 120-70 60-20-180" fill="#376E92"/>
<path d="M5670 2640h-140a40 40 0 01 0-80h140c110 0 210-90 210-210s-100-210-210-210h-260a40 40 0 11 0-90h260c160 0 290 130 290 300 0 160-130 290-290 290" fill="#F63B4E"/>
<path d="M6050 2240h10a170 170 0 01 40 30 150 150 0 01 40 80v50l-10 50a97070 97070 0 01-20 230l10 30 10 20h10v10h10a10 10 0 01-10 20h-10l-10-10h-10l-20-30-10-30-10-90a1030 1030 0 01 20-150v-60l10-10-10-10v-10l-10-30-20-20-20-10-10-10a30 30 0 11 20-50" fill="#376E92"/>
<path d="m5170 2190h-90l40 130 100 70-50-200" fill="#113952"/>
</g>
</g>
<g transform="matrix(.625 0 0 .625 3910 230)" clip-path="url(#f)" display="block">
<g display="block">
<path d="m5830 3410s70 30 180-20l600 590-480 350-260 100-200-810 160-210" fill="#F58D6C"/>
<path d="m6610 3980-350-340c60 230 200 300 20 580l330-240" fill="#D74225"/>
<path d="m6140 3570c-140-120-180-180-300-200-500-70 30-360-10-510-200-400 530-840 720-640-50-110 10-150 100-120 210 70 610 480 640 870l-1150 600" fill="#5E1313"/>
<path d="m7270 3490 90 270c-10 40-150 80-150 80l60-350" fill="#F58D6C"/>
<path d="m6380 3800c60-30 100-100 120-130h-160l-40 20 80 110" fill="#EF5C2E"/>
<path d="m7150 3870 70 10c20 0 30 30 10 40-20 20-50 10-60 50s20 60-10 90c-20 30-60-20-60-20l50-170" fill="#F58D6C"/>
<path d="m5260 3410-3460 650-480-2640 3450-640 490 2630" fill="#8848ea"/>
<path d="m1450 2270-40-190 3110-640 30 190-3100 640" fill="#060606"/>
<path d="m5240 3410-420 80-490-2630 420-80 490 2630" fill="#6b1ae5" stop-color="#000000" style="-inkscape-stroke:none;font-variation-settings:normal"/>
<path d="m5320 3410-420 80-510-2760 420-80 510 2760" fill="#8948ea" stop-color="#000000" style="-inkscape-stroke:none;font-variation-settings:normal"/>
<path d="m2730 3920-330 60-450-2700 320-50 460 2690zm1880-380-350 60-450-2690 350-60 450 2690" fill="#060606"/>
<path d="m2500 5020c40-70 220-980 230-1160 0-160-110-270-290-170-130 70-110 170-180 130-60-40-160-100-250-100-200-10-960 620-260 1590l750-290" fill="#1d194d" stop-color="#000000" stroke-width="1.6" style="-inkscape-stroke:none;font-variation-settings:normal"/>
<path d="m7100 4090c-220 210-860-220-980-810-160-730 620-1080 1040-510 200 290 130 620 110 690-10 90-40 500-170 630" fill="#F58D6C"/>
<path d="m7170 2700c70 120 90 220 100 330-240 0-400-250-410-290 0 0 20-210 110-220 40 0 150 80 200 180" fill="#D74225"/>
<path d="m6030 3280c-180-860 650-1300 1130-630 60 90 130 210 130 320-230 80-240-220-340-160-100 50-160 530-540 560l-380-90zm1240-100h-30l-20-10h-60l-40 10h-30l-40 10h-30l-60 20-20 10h-20l-10 10 20-20 20-10 20-20 60-20 30-20a590 590 0 0 1 80-20l30-10h40a710 710 0 0 1 60-10h10c40 0 70 20 60 40 0 30-30 40-70 40" fill="#5E1313"/>
<path d="m6200 3230h1140v100h-30s10 260-150 260-190-300-190-300h-780l10-60" fill="#1F170D"/>
<path d="m7190 3520c-50 10-100-50-110-100l-30-120-10 10c-10 30-20 60-10 100l40 90c30 30 80 60 120 30v-10" fill="#6D799F"/>
<path d="m7270 3280v90l-20 130v10l30-100 20-120c0-20-30-30-30-10" fill="#FFF"/>
<path d="m6510 3460s-10-250-170-270c-310-60-290 450-50 550 120 40 210-70 210-70l10-210" fill="#F58D6C"/>
<path d="m6170 3360 10-10a150 150 0 01 20-40 130 130 0 01 50-40 110 110 0 01 80 0l60 50a190 190 0 01 30 60l10 20v20l10 20a30 30 0 11-50 0l-10-10v-40a200 200 0 00-20-50l-40-40h-60a100 100 0 00-50 20 120 120 0 00-20 30v10l-10 10a10 10 0 01-10-10" fill="#D74225"/>
<path d="m6430 2100c-20-60-80-80-140-70-50 20-70 80-50 130s90 80 140 60c50-10 80-70 50-120" fill="#FBB855"/>
<path d="m7080 2730 160 30c30 10 60 40 60 80 0 30-30 60-70 60l-100-10-50-160" fill="#217177"/>
<g>
<path d="m5730 3040s-430 170-640-20c-40 50 80 230 310 260 470 60 970-310 970-310l-640 70" fill="#f04c54" stop-color="#000000" stroke-width="1.6" style="-inkscape-stroke:none;font-variation-settings:normal"/>
<path d="m5730 3040s-260-860 580-970c700-90 910 500 910 500s-140 70-90 320l-1400 150" fill="#342d8c" stop-color="#000000" stroke-width="1.6" style="-inkscape-stroke:none;font-variation-settings:normal"/>
<path d="m6300 2070c-820 120-570 970-570 970l370-40c-20-30-200-760 200-930" fill="#f04c54" stop-color="#000000" stroke-width="1.6" style="-inkscape-stroke:none;font-variation-settings:normal"/>
<path d="m6950 2910 180-20c-50-250 90-320 90-320s-210-590-910-500c60 10 460 60 640 840" fill="#f04c54" stop-color="#000000" stroke-width="1.6" style="-inkscape-stroke:none;font-variation-settings:normal"/>
</g>
<path d="m5900 2330c-10-20-30-20-40-20-20 10-30 20-20 40s30 30 40 20c20-10 30-20 20-40zm490-50c-10-20-30-30-40-20-20 0-30 20-20 30 10 20 30 30 40 20 20 0 30-20 20-30zm500-60c-10-20-30-30-40-20-20 0-30 20-20 40l40 20c20-10 30-30 20-40" fill="#5E1313"/>
<path d="M6440 3560a70 70 0 10-70 80l60 140a40 40 0 10 70-30l-70-140 10-50" fill="#ECDBCF"/>
</g>
</g>
<g transform="matrix(1.37 0 0 1.37 500 1390)" clip-path="url(#g)" display="block">
<g display="block">
<path d="m3760 4390 10-10 510-80a10 10 0 01 0 20l-510 80-10-10" fill="#0F3952"/>
<path d="m4410 4340-250 10c-20 0-40-20-40-40s20-30 40-40h240c20 0 40 10 40 30s-10 40-30 40" fill="#0F3952"/>
<path d="m3700 3740c10 30 90 20 220-90s-50-90-130-50c-80 50-100 110-90 140" fill="#5E1313"/>
<path d="m3840 3480-80 470 170 30c80-230 190-440 300-610l-390 110" fill="#F58D6C"/>
<path d="m3930 3980 20-30c-110-10-170-100-170-100l-20 100 170 30" fill="#FFF"/>
<path d="m3760 3840h-30l-50 180 30 100-60 70 480 60c40 10 110 30 140 20l120-10 80-30-20-10-220-20c-30 10-60 20-90 10-90-40-280-110-310-140-30-40-70-230-70-230" fill="#ED3D50"/>
<path d="m4180 3420-360 160-20 100 290-70 90-170v-20" fill="#D74225"/>
<path d="m4020 1560c-60-160-160-320-280-320-350 0-600 300-440 620 110 210 520 630 790 750-20 10-90 260-30 310l-30 40c-60 80-150 150-160 180-10 40 30 30 30 60 10 20-150 70-150 140 10 40 30 40 40 50 20 0-150 80-130 140 20 50 70 60 70 60s-80 50-30 150c-20-70 420-150 480-250l290-470c120-160 180-280 130-400-140-290-400-910-580-1060" fill="#f04c54" stop-color="#000000" stroke-width=".72993" style="-inkscape-stroke:none;font-variation-settings:normal"/>
<path d="m3690 1850-80-110 170-120 20 40c0 120-110 190-110 190" fill="#ECDBCF"/>
<path d="m3800 1660-10-20-130 170 30 40s110-70 110-190" fill="#D29B80"/>
<path d="M3500 1910a10 10 0 01 0-20c180 0 250-110 270-150 30-60 30-130 0-160a10 10 0 01 20-10c30 40 30 110 0 180-20 50-100 160-290 160" fill="#a50e15" stop-color="#000000" stroke-width=".72993" style="-inkscape-stroke:none;font-variation-settings:normal"/>
<path d="m3940 3960c30-30 10-110 40-150 40-60 90-40 90-40s-30 100 20 200l-150-10" fill="#ED3D50"/>
<path d="m3780 3930s140 40 160 30l80-50c50 20 210 170 220 170l180 60c40 20 30 80 30 80l-230 20-200-30-210-130-30-150" fill="#342d8c" stop-color="#000000" stroke-width=".72993" style="-inkscape-stroke:none;font-variation-settings:normal"/>
<path d="M4030 4040a10 10 0 01-10-10c0-10 40-50 80-70a10 10 0 11 10 20 310 310 0 00-80 60zm20 80a10 10 0 01-20-10c10-10 60-70 120-110a10 10 0 11 10 20 790 790 0 00-110 100" fill="#FFF"/>
</g>
</g>
<g transform="translate(4160 1600) scale(.62625)" clip-path="url(#h)" display="block">
<g display="block">
<path d="m2310 2370c-270 0-500 80-690 210-100 500 970 580 1260 640l-40-90-40-30c-70-280-230-730-490-730" fill="#a50e15" stop-color="#000000" stroke-width="1.5968" style="-inkscape-stroke:none;font-variation-settings:normal"/>
<path d="m5410 1190c-1100-440-2100 610-3220 240 210 210-210 610-250 1180-40 520 720 350 1370 850 780-530 1880-510 2400-1350 0 0 250-470-300-920" fill="#342d8c" stop-color="#000000" stroke-width="1.5968" style="-inkscape-stroke:none;font-variation-settings:normal"/>
<path d="m5570 1150c-420-160-810-120-1210-20 330-60 670-70 1010 60 550 450 310 920 310 920-500 790-1510 820-2270 1270l50 40c780-530 1880-510 2410-1350 0 0 240-470-300-920" fill="#060606"/>
<path d="m4190 1730c-60 60-910 910-940 1690l60 40c360-240 790-370 1190-520l-310-1210" fill="#28236c" stop-color="#000000" stroke-width="1.5968" style="-inkscape-stroke:none;font-variation-settings:normal"/>
<path d="m3660 2840 30 10h20c10-10 120-20 110-30s-770-950-1460-1380h-100c700 400 1400 1390 1400 1400" fill="#28236c" stop-color="#000000" stroke-width="1.5968" style="-inkscape-stroke:none;font-variation-settings:normal"/>
<path d="M4080 3140a100 100 0 01-80-40c-10-10-790-1100-1630-1560l-130-100 110-30 120 10 100 20a5600 5600 0 01 1590 1560 90 90 0 01-30 130l-50 10" fill="#1F140A"/>
<path d="m2420 1480h120c830 510 1580 1540 1590 1550 10 20 0 40-10 50h-30l-20-10c-10-20-810-1110-1650-1590" fill="#756454"/>
<path d="m3950 2830c10 80 130 130 310 120 170-10 100-490 100-490s-420 280-410 370" fill="#5E1313"/>
<path d="m5050 2420c-200 600-300 1390-300 1430 360 410 900 750 1300 860l-70 380c-190-60-950-230-1810-1030-10-20-80-990-20-1810l900 170" fill="#F58D6C"/>
<path d="m4130 2850s460 140 810-30l60-200-870-50v280" fill="#D74225"/>
<path d="m3950 2820c30-570 240-1090 240-1090 150-340 410-470 690-400a520 520 0 0 1 330 740l-50 100-10 10v10l-10 10-20 40-20 50-10 40-20 40-20 50-100 400c-230 90-930-250-1e3 0" fill="#342d8c" stop-color="#000000" stroke-width="1.5968" style="-inkscape-stroke:none;font-variation-settings:normal"/>
<path d="m5920 5080 390 120c20 0 50-30 50-30h50l80-70 270 50c40-10 90-60 40-120 90-50 10-130 10-130-110 20-280-40-320-60-50-20-390-210-430-210-30 0-230 60-270 120-110 230 130 330 130 330" fill="#F58D6C"/>
<path d="m4350 4020c0-100-90-180-190-190l10 200 110 130c40-40 70-90 70-140" fill="#EF5C2E"/>
</g>
<path d="m3970 2830c-30-20-30-70-20-100 90-240 80-470 90-710a820 820 0 0 1 140-320 470 470 0 0 1 150-110 320 320 0 0 1 110-50l70 10a410 410 0 0 1 360 540l-10 40-10 20v20l-10 10v20l-10 30-20 80-10 30-10 40-20 330-60 20-70 10h-240l-80-10c-110-10-220 0-320 50-20 10-30 30-30 50" display="block" fill="#342d8c" stop-color="#000000" stroke-width="1.5968" style="-inkscape-stroke:none;font-variation-settings:normal"/>
</g>
<g transform="matrix(.62 0 0 .62 3320 1210)" clip-path="url(#i)" display="block">
<g display="block" stroke-width="1.6129">
<path d="m3420 2710c40-210 70-400 70-480 10-150-90-250-270-160-120 80-110 170-180 130-40-40-210-20-230-100s-450-620-330 150c10 30-20 70-40 90-100 70-170 30-250 120-200 240-300 680 110 1060 80 80 280-190 230 40 180-480 440-730 890-850" fill="#1d194d" stop-color="#000000" style="-inkscape-stroke:none;font-variation-settings:normal"/>
<path d="m4390 3590s290-240 250-470c0 0-550-660-950-940-400-290-1060-530-1190-330-80 130 310-380 560 1260 70 440 630 410 1190 720l140-240" fill="#342d8c" stop-color="#000000" style="-inkscape-stroke:none;font-variation-settings:normal"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 612 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

@ -0,0 +1,16 @@
<svg id="SVGRoot" version="1.1" viewBox="0 0 342 50" xmlns="http://www.w3.org/2000/svg">
<g fill="#aad624" stop-color="#000000" style="font-variation-settings:normal">
<path d="m2.1643 48.916v-8.96h19.136q1.28 0 2.304-0.64t1.6-1.664q0.64-1.024 0.64-2.24 0-1.28-0.64-2.304-0.576-1.024-1.6-1.664t-2.304-0.64h-6.912q-3.904 0-7.104-1.536t-5.12-4.48q-1.856-3.008-1.856-7.168 0-4.096 1.792-7.104t4.864-4.672q3.072-1.728 6.784-1.728h19.776v8.96h-18.56q-1.152 0-2.112 0.576t-1.472 1.536-0.512 2.112 0.512 2.112q0.512 0.896 1.472 1.472t2.112 0.576h7.232q4.288 0 7.424 1.664 3.2 1.6 4.928 4.544 1.792 2.88 1.792 6.784 0 4.608-1.856 7.872-1.792 3.2-4.864 4.928-3.072 1.664-6.784 1.664z" stop-color="#000000" style="font-variation-settings:normal"/>
<path d="m59.252 48.916q-5.568 0-9.792-2.048-4.224-2.112-6.592-5.76-2.304-3.712-2.304-8.576 0-5.376 2.24-9.216t5.952-5.888q3.776-2.112 8.32-2.112 5.184 0 8.64 2.176 3.52 2.176 5.312 5.952 1.792 3.712 1.792 8.512 0 0.832-0.128 1.984-0.064 1.088-0.192 1.728h-21.504q0.384 1.664 1.472 2.816t2.752 1.728q1.664 0.512 3.712 0.512h10.048v8.192zm-8.512-19.456h12.48q-0.128-1.024-0.384-1.984t-0.832-1.664q-0.512-0.768-1.216-1.28-0.704-0.576-1.664-0.896-0.896-0.32-2.048-0.32-1.472 0-2.624 0.512t-1.92 1.408q-0.768 0.832-1.216 1.984-0.384 1.088-0.576 2.24z" stop-color="#000000" style="font-variation-settings:normal"/>
<path d="m100.53 48.916q-5.504 0-9.92-1.664-4.416-1.728-7.488-4.8t-4.736-7.104q-1.664-4.096-1.664-8.832t1.664-8.768q1.664-4.096 4.736-7.168 3.136-3.072 7.488-4.736 4.416-1.728 9.92-1.728h6.912v8.96h-6.656q-3.008 0-5.504 1.024-2.432 1.024-4.224 2.88-1.728 1.792-2.688 4.224-0.896 2.432-0.896 5.312t0.896 5.312q0.96 2.432 2.688 4.288 1.792 1.792 4.224 2.816 2.496 1.024 5.504 1.024h6.656v8.96z" stop-color="#000000" style="font-variation-settings:normal"/>
<path d="m129.59 49.684q-5.056 0-9.088-2.24t-6.4-6.144q-2.304-3.904-2.304-8.768 0-4.928 2.304-8.768 2.368-3.904 6.4-6.144 4.032-2.304 9.088-2.304t9.024 2.304q4.032 2.24 6.336 6.144 2.368 3.84 2.368 8.768 0 4.864-2.368 8.768-2.304 3.904-6.336 6.144t-9.024 2.24zm0-8.64q2.368 0 4.096-1.152t2.688-3.072 0.96-4.352q0-2.368-0.96-4.288t-2.688-3.072-4.096-1.152-4.16 1.152q-1.728 1.152-2.688 3.072t-0.96 4.288q0 2.432 0.96 4.352t2.688 3.072q1.792 1.152 4.16 1.152z" stop-color="#000000" style="font-variation-settings:normal"/>
<path d="m153.2 48.916v-19.392q0-4.032 1.856-7.232 1.92-3.264 5.44-5.12t8.384-1.856q2.432 0 4.48 0.576 2.048 0.512 3.712 1.472 1.728 0.896 2.944 2.176h0.128q1.28-1.28 2.944-2.176 1.728-0.96 3.776-1.472 2.112-0.576 4.544-0.576 4.864 0 8.384 1.856t5.44 5.12q1.92 3.2 1.92 7.232v19.392h-9.984v-19.072q0-1.6-0.832-2.88-0.768-1.344-2.112-2.176t-3.072-0.832-3.136 0.832q-1.344 0.832-2.112 2.176-0.768 1.28-0.768 2.88v19.072h-9.92v-19.072q0-1.6-0.832-2.88-0.768-1.344-2.176-2.176-1.344-0.832-3.072-0.832t-3.136 0.832q-1.344 0.832-2.112 2.176-0.768 1.28-0.768 2.88v19.072z" stop-color="#000000" style="font-variation-settings:normal"/>
<path d="m214.52 33.916v-18.88q0-4.096 1.984-7.424t5.632-5.312q3.712-1.984 8.768-1.984 5.12 0 8.704 1.984 3.648 1.984 5.568 5.312t1.92 7.424v18.88h-9.92v-18.624q0-1.728-0.832-3.136-0.832-1.472-2.304-2.304-1.408-0.896-3.2-0.896-1.856 0-3.328 0.896-1.408 0.832-2.24 2.304-0.832 1.408-0.832 3.136v18.624z" stop-color="#000000" style="font-variation-settings:normal"/>
</g>
<g fill="#fff">
<path d="m242.24 49.492q-1.92 0-3.312-1.344-1.344-1.392-1.344-3.264 0-1.92 1.344-3.264 1.392-1.392 3.312-1.392 1.872 0 3.216 1.392 1.392 1.344 1.392 3.264 0 1.248-0.624 2.304t-1.68 1.68q-1.008 0.624-2.304 0.624z"/>
<path d="m263.5 48.916q-3.84 0-6.816-1.584-2.976-1.632-4.704-4.368-1.728-2.784-1.728-6.336t1.728-6.288q1.728-2.784 4.704-4.416t6.816-1.632h3.696v6.288h-3.408q-1.872 0-3.216 0.816-1.344 0.768-2.112 2.16-0.72 1.344-0.72 3.072t0.72 3.12q0.768 1.344 2.112 2.16 1.344 0.768 3.216 0.768h3.408v6.24z"/>
<path d="m283.52 49.492q-3.792 0-6.816-1.68t-4.8-4.608q-1.728-2.928-1.728-6.576 0-3.696 1.728-6.576 1.776-2.928 4.8-4.608 3.024-1.728 6.816-1.728t6.768 1.728q3.024 1.68 4.752 4.608 1.776 2.88 1.776 6.576 0 3.648-1.776 6.576-1.728 2.928-4.752 4.608t-6.768 1.68zm0-6.48q1.776 0 3.072-0.864t2.016-2.304 0.72-3.264q0-1.776-0.72-3.216t-2.016-2.304-3.072-0.864-3.12 0.864q-1.296 0.864-2.016 2.304t-0.72 3.216q0 1.824 0.72 3.264t2.016 2.304q1.344 0.864 3.12 0.864z"/>
<path d="m301.23 48.916v-14.544q0-3.024 1.392-5.424 1.44-2.448 4.08-3.84t6.288-1.392q1.824 0 3.36 0.432 1.536 0.384 2.784 1.104 1.296 0.672 2.208 1.632h0.096q0.96-0.96 2.208-1.632 1.296-0.72 2.832-1.104 1.584-0.432 3.408-0.432 3.648 0 6.288 1.392t4.08 3.84q1.44 2.4 1.44 5.424v14.544h-7.488v-14.304q0-1.2-0.624-2.16-0.576-1.008-1.584-1.632t-2.304-0.624-2.352 0.624q-1.008 0.624-1.584 1.632-0.576 0.96-0.576 2.16v14.304h-7.44v-14.304q0-1.2-0.624-2.16-0.576-1.008-1.632-1.632-1.008-0.624-2.304-0.624t-2.352 0.624q-1.008 0.624-1.584 1.632-0.576 0.96-0.576 2.16v14.304z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 996 KiB

BIN
src/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

33
src/index.html Normal file
View File

@ -0,0 +1,33 @@
<!doctype html>
<html lang="es-CO">
<head>
<meta charset="utf-8">
<title>AJSystem</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<!--
- google font link
-->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link
href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500&family=Rubik:wght@400;500;600;700&family=Shadows+Into+Light&display=swap&family=Harmattan:wght@400;500;600;700&family=MuseoModerno:ital,wght@0,100..900;1,100..900&family=Orbit&display=swap"
rel="stylesheet">
<!--
- custom css link
-->
<!--
<link rel="stylesheet" href="assets/css/style.css">
-->
</head>
<body id="top">
<app-root></app-root>
<script type="module" src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js"></script>
<script nomodule src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js"></script>
</body>
</html>

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