AJsystem
|
@ -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
|
|
@ -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
|
|
@ -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.
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
|
@ -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"
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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"
|
|
@ -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"
|
|
@ -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"
|
|
@ -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}"
|
|
@ -0,0 +1,2 @@
|
||||||
|
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
|
||||||
|
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
|
|
@ -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;
|
|
@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -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 { }
|
||||||
|
|
|
@ -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">
|
||||||
|
© 2025 <a href="#" class="copyright-link">AJSystem</a> Todos los derechos reservados.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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!');
|
||||||
|
});
|
||||||
|
});
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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 { }
|
|
@ -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 */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -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>
|
||||||
|
|
|
@ -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();
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,10 @@
|
||||||
|
import { Component } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-home',
|
||||||
|
templateUrl: './home.component.html',
|
||||||
|
styleUrls: ['./home.component.css']
|
||||||
|
})
|
||||||
|
export class HomeComponent {
|
||||||
|
|
||||||
|
}
|
|
@ -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>
|
|
@ -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();
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,10 @@
|
||||||
|
import { Component } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-products',
|
||||||
|
templateUrl: './products.component.html',
|
||||||
|
styleUrls: ['./products.component.css']
|
||||||
|
})
|
||||||
|
export class ProductsComponent {
|
||||||
|
|
||||||
|
}
|
After Width: | Height: | Size: 244 KiB |
After Width: | Height: | Size: 111 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 44 KiB |
|
@ -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 |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 291 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 6.6 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 504 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 34 KiB |
|
@ -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 |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 69 KiB |
After Width: | Height: | Size: 113 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 43 KiB |
|
@ -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 |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 8.9 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 290 KiB |
After Width: | Height: | Size: 1.2 MiB |
After Width: | Height: | Size: 101 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 225 KiB |
After Width: | Height: | Size: 612 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 201 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 1.4 MiB |
After Width: | Height: | Size: 875 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 348 KiB |
After Width: | Height: | Size: 6.8 KiB |
|
@ -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 |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 59 KiB |
After Width: | Height: | Size: 265 KiB |
After Width: | Height: | Size: 288 KiB |
After Width: | Height: | Size: 5.3 MiB |
After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 996 KiB |
After Width: | Height: | Size: 34 KiB |
|
@ -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>
|