Compare commits
437 Commits
2025-07-13
...
v2026.03.9
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c0c40ecd99 | ||
|
|
98c6ba39f3 | ||
|
|
03f52c8a92 | ||
|
|
f655a736b3 | ||
|
|
89a68f27da | ||
|
|
4d322e5696 | ||
|
|
0138e0ca69 | ||
|
|
3e8542c9de | ||
|
|
90df81d308 | ||
|
|
53941da35c | ||
|
|
105c911c59 | ||
|
|
cb12894455 | ||
|
|
9d808ed63e | ||
|
|
d0593d3d46 | ||
|
|
8b7d0258ae | ||
|
|
9a760a1d24 | ||
|
|
e1f780ea11 | ||
|
|
7ad2e9c142 | ||
|
|
879554a7ab | ||
|
|
0ef6e5a233 | ||
|
|
d905e86bbf | ||
|
|
3764473b5b | ||
|
|
382e31158a | ||
|
|
09a9a95df0 | ||
|
|
b04dbbf19d | ||
|
|
7619444556 | ||
|
|
076aa45337 | ||
|
|
0b1419fae2 | ||
|
|
74afb2a499 | ||
|
|
543d1c3202 | ||
|
|
75947d3468 | ||
|
|
9ab0472e2a | ||
|
|
aa993df2bf | ||
|
|
e0da65811e | ||
|
|
eb6a956cdc | ||
|
|
dc4ba25b20 | ||
|
|
129188c022 | ||
|
|
9d4ce881c6 | ||
|
|
4e1727adc3 | ||
|
|
db5b07bb44 | ||
|
|
61b8cb8af4 | ||
|
|
2ee03aa204 | ||
|
|
8b29e3f425 | ||
|
|
31697f2448 | ||
|
|
468d08110d | ||
|
|
07e2c9a98e | ||
|
|
8b6140929e | ||
|
|
05ea9a9d8b | ||
|
|
75c319c701 | ||
|
|
8a9fee46da | ||
|
|
6d7def5f18 | ||
|
|
ddfd653d68 | ||
|
|
b0160b3b66 | ||
|
|
d6809e51d1 | ||
|
|
0db86f3dd2 | ||
|
|
dd195c5157 | ||
|
|
f472baacf6 | ||
|
|
1e5de2c686 | ||
|
|
bf9ba4ceef | ||
|
|
c2eac955fe | ||
|
|
a02d7956ca | ||
|
|
f96a408852 | ||
|
|
8afe2eedee | ||
|
|
4faea51004 | ||
|
|
70ea752992 | ||
|
|
492889b9e1 | ||
|
|
ea54dc5471 | ||
|
|
8ff431ca10 | ||
|
|
7d5fe84b3a | ||
|
|
f287eb63f6 | ||
|
|
565d88def8 | ||
|
|
92feb05a0d | ||
|
|
013413a01c | ||
|
|
9e7f8ebd1f | ||
|
|
07d657002e | ||
|
|
24520d1f01 | ||
|
|
6b8202992d | ||
|
|
bc0755b9bf | ||
|
|
cb61374582 | ||
|
|
cb70222c04 | ||
|
|
dfcd22fadf | ||
|
|
7277c6ab34 | ||
|
|
fbf0a8c9e4 | ||
|
|
ee219e1d96 | ||
|
|
90b8223385 | ||
|
|
0bc662dbde | ||
|
|
15df8d12fe | ||
|
|
a9cdfb567a | ||
|
|
f0a6f3b6b3 | ||
|
|
8802952e5a | ||
|
|
ab4a05bc7f | ||
|
|
648854190e | ||
|
|
13a4367c92 | ||
|
|
2258e74960 | ||
|
|
fd63885507 | ||
|
|
4b88679b37 | ||
|
|
dd9fda10f7 | ||
|
|
3dbaa9bd33 | ||
|
|
3402183f3c | ||
|
|
1bc9aa5295 | ||
|
|
c946dad334 | ||
|
|
a32aa89a56 | ||
|
|
4d1952d998 | ||
|
|
5fe308eac6 | ||
|
|
ad46651ed8 | ||
|
|
0eb519dea4 | ||
|
|
9b0d33710f | ||
|
|
28a0fced87 | ||
|
|
60a7649c36 | ||
|
|
cca21ac3d3 | ||
|
|
78c0abf92d | ||
|
|
d40d600a49 | ||
|
|
0e1ab0c619 | ||
|
|
0366f62dfb | ||
|
|
33594b2508 | ||
|
|
db9626aa7b | ||
|
|
ba022dea3c | ||
|
|
f0e32b4ad0 | ||
|
|
bbbc8b1d63 | ||
|
|
af2f642d45 | ||
|
|
9f00b97677 | ||
|
|
196245ffa0 | ||
|
|
7cf1bf40c7 | ||
|
|
860f6019ad | ||
|
|
4fefdcaf3d | ||
|
|
9a22545ec2 | ||
|
|
49a021b9dd | ||
|
|
0cd6048bf2 | ||
|
|
1bec976efc | ||
|
|
a03a224cda | ||
|
|
0bdd3ba8b1 | ||
|
|
96b3c60568 | ||
|
|
811fabfced | ||
|
|
a3d9278d6f | ||
|
|
4e67381cf0 | ||
|
|
f1593de431 | ||
|
|
889722451c | ||
|
|
bb9c1ee7d3 | ||
|
|
fc2e4d27d2 | ||
|
|
6bde2fb2b8 | ||
|
|
7a510329ba | ||
|
|
a5cc4e7cc7 | ||
|
|
c77ac5c264 | ||
|
|
f14d19f59a | ||
|
|
fccd9308e2 | ||
|
|
2265ad28f4 | ||
|
|
b1993ba83a | ||
|
|
d00d4c7af2 | ||
|
|
4d175d9aa1 | ||
|
|
b0fa3d0844 | ||
|
|
617711fb1a | ||
|
|
f46ec17c03 | ||
|
|
de163f7f9b | ||
|
|
3250669dc9 | ||
|
|
d00d004dd8 | ||
|
|
b38d470b02 | ||
|
|
0f2a894edb | ||
|
|
ad71ceae21 | ||
|
|
6e3e809435 | ||
|
|
4719c346f5 | ||
|
|
2e070ea7fd | ||
|
|
5f573c49be | ||
|
|
9524c9e3f3 | ||
|
|
b3a6a19f95 | ||
|
|
332b39aa23 | ||
|
|
14ee3ab4a0 | ||
|
|
75ce2aa207 | ||
|
|
48b68eff83 | ||
|
|
3124540f4f | ||
|
|
42728ab445 | ||
|
|
af5141099d | ||
|
|
1ce4207294 | ||
|
|
9d3d6bc363 | ||
|
|
74dc7fe404 | ||
|
|
2f3efbcf66 | ||
|
|
b3ff2a7a9d | ||
|
|
2b4e28eea6 | ||
|
|
f7b3d95526 | ||
|
|
553f43c7b3 | ||
|
|
8b1185b507 | ||
|
|
eecab547df | ||
|
|
b069f7db61 | ||
|
|
424d767549 | ||
|
|
4f3d16326c | ||
|
|
ac68228e26 | ||
|
|
673d64e720 | ||
|
|
ec7746f79f | ||
|
|
6ceae4f1d5 | ||
|
|
c50c29f743 | ||
|
|
34f61777c3 | ||
|
|
9c81cdb1e0 | ||
|
|
bdd880bc24 | ||
|
|
aa01eaeaa5 | ||
|
|
fc1aa567bc | ||
|
|
cc3d694ce3 | ||
|
|
f11760d867 | ||
|
|
fc4170acb8 | ||
|
|
98bda7db5d | ||
|
|
3bfbdc11af | ||
|
|
a59a26fa29 | ||
|
|
a5de1b3855 | ||
|
|
0624103778 | ||
|
|
cd6e4e8b64 | ||
|
|
fb9d574ff4 | ||
|
|
d27b3ec90c | ||
|
|
7d5d631b05 | ||
|
|
f13218e0b1 | ||
|
|
ac12dc627d | ||
|
|
c550812deb | ||
|
|
9efb05bc1e | ||
|
|
db244e2953 | ||
|
|
a3098a15f2 | ||
|
|
12b90e3e1e | ||
|
|
1763de12bd | ||
|
|
92dc877942 | ||
|
|
841f063695 | ||
|
|
e6301bfb64 | ||
|
|
7e1c6f1bf8 | ||
|
|
5adff05283 | ||
|
|
6f3108134b | ||
|
|
d5650b2e3b | ||
|
|
e3b062d9ea | ||
|
|
6bd797e5bb | ||
|
|
ac3b43361c | ||
|
|
b9d3c5a10d | ||
|
|
d9b379ec42 | ||
|
|
1f3ec25f32 | ||
|
|
2458082968 | ||
|
|
5f59f9f0c0 | ||
|
|
28ffd17bed | ||
|
|
e2446de20f | ||
|
|
c33b9e6ace | ||
|
|
73cb8d5614 | ||
|
|
69c981de3c | ||
|
|
bdc5c42cde | ||
|
|
5588c94ec3 | ||
|
|
42310c1f55 | ||
|
|
08431defbb | ||
|
|
52c15e4863 | ||
|
|
bab0ebc858 | ||
|
|
b64a9bc78b | ||
|
|
e9342b6fec | ||
|
|
b2617f605f | ||
|
|
c28aaecc66 | ||
|
|
e3d4998d80 | ||
|
|
be9c87790d | ||
|
|
e243f27b70 | ||
|
|
704241335e | ||
|
|
8406bd02c2 | ||
|
|
8a13e6e71b | ||
|
|
34b27b15ba | ||
|
|
14c081a615 | ||
|
|
81d200899d | ||
|
|
056f705f25 | ||
|
|
e084d42eb3 | ||
|
|
b4700f46fd | ||
|
|
369eb040af | ||
|
|
d21fae5052 | ||
|
|
1bc4364084 | ||
|
|
eebca7752b | ||
|
|
a42ad8d9ad | ||
|
|
63546605f2 | ||
|
|
357166b159 | ||
|
|
8866c68cee | ||
|
|
df46f378d7 | ||
|
|
b00b503d4c | ||
|
|
1575b61051 | ||
|
|
7d5667451c | ||
|
|
dbddd70ef9 | ||
|
|
027669cfd6 | ||
|
|
693f5c0af9 | ||
|
|
d596edc107 | ||
|
|
eeb540f269 | ||
|
|
a9b43a7f7d | ||
|
|
ba3cc7424d | ||
|
|
ed2148be8d | ||
|
|
36e3eaf958 | ||
|
|
77600a45d5 | ||
|
|
4988bdff1e | ||
|
|
8accafc599 | ||
|
|
bd9db0df22 | ||
|
|
7794d53802 | ||
|
|
014bc50690 | ||
|
|
ad93d958f9 | ||
|
|
c040215bb6 | ||
|
|
0132c88ce7 | ||
|
|
a74280f087 | ||
|
|
ccefabbc4a | ||
|
|
e29c02ebe5 | ||
|
|
2f1b036c3f | ||
|
|
f480dd5491 | ||
|
|
d4d4fd4b5f | ||
|
|
0feba6a09b | ||
|
|
4ba8141675 | ||
|
|
d71fca510f | ||
|
|
4303a02c1a | ||
|
|
afa224cbdc | ||
|
|
8de9af66e2 | ||
|
|
d13c66aa01 | ||
|
|
faf1d112c9 | ||
|
|
138af3a364 | ||
|
|
e0470d0dd1 | ||
|
|
ab75e3089e | ||
|
|
bfce6f32b6 | ||
|
|
737c0bd65f | ||
|
|
93a78a9d97 | ||
|
|
415334ca4a | ||
|
|
341119988c | ||
|
|
2567b65ff2 | ||
|
|
69458ecc97 | ||
|
|
7a391c338a | ||
|
|
9e8ba5a2e9 | ||
|
|
4f56f06208 | ||
|
|
c42ebadf2d | ||
|
|
62d1cafef9 | ||
|
|
6ec7a5feb1 | ||
|
|
a02f1cb588 | ||
|
|
aa3f312047 | ||
|
|
0fbc7cad39 | ||
|
|
293f57133b | ||
|
|
9ceb62dff0 | ||
|
|
7cb0fdea76 | ||
|
|
8820e16974 | ||
|
|
58e0c55480 | ||
|
|
7c7cec6ac8 | ||
|
|
8316377344 | ||
|
|
830fdd3206 | ||
|
|
9eadb04a93 | ||
|
|
cf0ecc4d27 | ||
|
|
6d1b3fa97e | ||
|
|
e4b9ebe7a4 | ||
|
|
416188a572 | ||
|
|
a8e496e78a | ||
|
|
20553d4c99 | ||
|
|
618ac4e6db | ||
|
|
3dd674b172 | ||
|
|
919ff298ba | ||
|
|
0599756b63 | ||
|
|
5b8641680d | ||
|
|
2b15258bd9 | ||
|
|
3ad83a523d | ||
|
|
cdd80eb4be | ||
|
|
f5aa8c4366 | ||
|
|
97c97b561f | ||
|
|
975ed0426c | ||
|
|
c3475e707b | ||
|
|
8321ba9373 | ||
|
|
c81202edf9 | ||
|
|
24a82911b6 | ||
|
|
3fcdc49502 | ||
|
|
1beadb739b | ||
|
|
846c0e8898 | ||
|
|
1ea087e683 | ||
|
|
096042e7c1 | ||
|
|
cb5e481c4d | ||
|
|
e91ac0c719 | ||
|
|
45f6cf82d5 | ||
|
|
0cccaafb38 | ||
|
|
b90bbcb8c2 | ||
|
|
ae9fcf4887 | ||
|
|
1ebc7079eb | ||
|
|
ea8726e0d6 | ||
|
|
83125bcf96 | ||
|
|
8823159a30 | ||
|
|
ad458de818 | ||
|
|
d2a11d65a7 | ||
|
|
1d8ddd8d8b | ||
|
|
9de720c920 | ||
|
|
0c4c9df396 | ||
|
|
8fc2e96985 | ||
|
|
852f9eddc9 | ||
|
|
d51e57fcee | ||
|
|
1be3885c70 | ||
|
|
52e6e3c09d | ||
|
|
310696a4c6 | ||
|
|
505f591839 | ||
|
|
b07dcd8683 | ||
|
|
fe5c54ff3e | ||
|
|
09fa34007b | ||
|
|
57171963be | ||
|
|
881dfedb14 | ||
|
|
1cc6e512ab | ||
|
|
0b748e45f8 | ||
|
|
e6688bf74c | ||
|
|
cbd5351981 | ||
|
|
31007d6979 | ||
|
|
7fb2d5f67f | ||
|
|
9b9bd730dd | ||
|
|
2e438c4b9e | ||
|
|
6ed2922ba4 | ||
|
|
b0ff7dd456 | ||
|
|
43dfa414aa | ||
|
|
1d73f3c427 | ||
|
|
72fba9e976 | ||
|
|
84719e4c6b | ||
|
|
9131d25dd5 | ||
|
|
c65b1b25a4 | ||
|
|
e8a9cff2ec | ||
|
|
d39f92554a | ||
|
|
84cc070e68 | ||
|
|
cf553295bb | ||
|
|
23c4122afb | ||
|
|
7414e3d6de | ||
|
|
5f2ef09672 | ||
|
|
f2588fc50f | ||
|
|
0ea230e99b | ||
|
|
a83be0f7c7 | ||
|
|
ed5755b005 | ||
|
|
0fcd6ccaba | ||
|
|
1ee951fc9f | ||
|
|
325465f9a5 | ||
|
|
7dee605d95 | ||
|
|
645e8c194a | ||
|
|
e35428f3ee | ||
|
|
def79a2015 | ||
|
|
64d11fe224 | ||
|
|
a016e06557 | ||
|
|
a274de3c4d | ||
|
|
0f2b2df969 | ||
|
|
8052d21fcc | ||
|
|
03c132a6bd | ||
|
|
970b1dddf7 | ||
|
|
b38156cc3a | ||
|
|
09c05bb81d | ||
|
|
97650659a7 | ||
|
|
d05a63e68d | ||
|
|
c800ea7c1b | ||
|
|
55eda485ed | ||
|
|
92d3522f98 | ||
|
|
1fcff4c2b2 | ||
|
|
f032e0f243 | ||
|
|
8ee724ba14 | ||
|
|
5e92452699 | ||
|
|
659c1f8cc5 | ||
|
|
ce7fe7cd6b | ||
|
|
9bc08a76e8 | ||
|
|
2c277bb12d |
@@ -1,54 +0,0 @@
|
||||
name: Build server
|
||||
|
||||
on:
|
||||
push:
|
||||
tags: ["v*-*-*_*"]
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
token: '${{ secrets.TOKEN_PULL }}'
|
||||
- name: Set up Python 3.10
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.10"
|
||||
- uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '^1.13.1'
|
||||
- name: "Build app"
|
||||
run: "python3 build.py"
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
# Upload built files
|
||||
name: 'TeleSec-dist'
|
||||
path: ./dist
|
||||
- name: "zip-it-up"
|
||||
run: "zip -r TeleSec-dist.zip ./dist"
|
||||
- name: Upload as release
|
||||
uses: https://gitea.com/actions/release-action@main
|
||||
with:
|
||||
files: |-
|
||||
TeleSec-dist.zip
|
||||
api_key: '${{secrets.TOKEN_PUSH_PLUS}}'
|
||||
- name: Copy files via SSH
|
||||
uses: appleboy/scp-action@v1
|
||||
with:
|
||||
host: ${{ secrets.HOST }}
|
||||
username: ${{ secrets.USERNAME }}
|
||||
key: ${{ secrets.KEY }}
|
||||
source: "TeleSec-dist.zip"
|
||||
target: ${{ secrets.FOLDER }}TeleSec.zip
|
||||
- name: Execute remote SSH commands using password
|
||||
uses: appleboy/ssh-action@v1
|
||||
with:
|
||||
host: ${{ secrets.HOST }}
|
||||
username: ${{ secrets.USERNAME }}
|
||||
key: ${{ secrets.KEY }}
|
||||
script: |
|
||||
cd ${{ secrets.FOLDER }}
|
||||
unzip TeleSec.zip
|
||||
222
.github/copilot-instructions.md
vendored
Normal file
@@ -0,0 +1,222 @@
|
||||
# TeleSec - Secure Distributed Communication Application
|
||||
|
||||
TeleSec is a Spanish Progressive Web Application (PWA) built with vanilla JavaScript, HTML, and CSS that provides secure group communication using a local-first PouchDB datastore with optional CouchDB replication for syncing. The application allows users to join encrypted communication groups using group codes and secret keys.
|
||||
|
||||
**ALWAYS reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here.**
|
||||
|
||||
## Working Effectively
|
||||
|
||||
### Build and Deploy Process
|
||||
- **Build the application (FASTEST BUILD EVER - 0.036 seconds):**
|
||||
- `cd /home/runner/work/TeleSec/TeleSec`
|
||||
- `python3 build.py`
|
||||
- **NEVER CANCEL**: Build completes in under 0.1 seconds. No timeout needed.
|
||||
- The build script copies files from `assets/` to `dist/` and processes template variables in `src/` files.
|
||||
|
||||
### Serving the Application
|
||||
- **Python HTTP Server (Recommended for development):**
|
||||
- `cd /home/runner/work/TeleSec/TeleSec/dist`
|
||||
- `python3 -m http.server 8000`
|
||||
- Access at: `http://localhost:8000`
|
||||
|
||||
- **Node.js HTTP Server (Alternative with CORS support):**
|
||||
- `cd /home/runner/work/TeleSec/TeleSec/dist`
|
||||
- `npx http-server . --port 8001 --cors`
|
||||
- **NEVER CANCEL**: First run takes ~14 seconds to download http-server package. Set timeout to 30+ seconds.
|
||||
- Access at: `http://localhost:8001`
|
||||
|
||||
### Development Environment Requirements
|
||||
- **Python 3.x** (for build script) - Version 3.12.3+ confirmed working
|
||||
- **Node.js and npm** (optional, for alternative serving) - Version 20.19.4+ confirmed working
|
||||
- **Web browser** (for testing the PWA functionality)
|
||||
|
||||
## Validation and Testing
|
||||
|
||||
### Mandatory Validation Steps
|
||||
1. **Build Validation:**
|
||||
- Run `python3 build.py` and verify it completes in under 1 second
|
||||
- Verify `dist/` directory is created with all assets and processed files
|
||||
- Check that template variables (%%PREFETCH%%, %%VERSIONCO%%, %%ASSETSJSON%%) are replaced
|
||||
|
||||
2. **Application Functionality Test:**
|
||||
- Start web server: `python3 -m http.server 8000` in `dist/` directory
|
||||
- Navigate to `http://localhost:8000` in browser
|
||||
- **CRITICAL LOGIN TEST:** Enter any group code (e.g., "TEST") and secret key (e.g., "SECRET123")
|
||||
- Click "Iniciar sesión" button
|
||||
- **VERIFY NETWORK CONNECTIVITY:** Confirm the header shows connected nodes (e.g., "TeleSec - TEST - (8 nodos)")
|
||||
- **SUCCESS INDICATORS:**
|
||||
- Application loads without errors
|
||||
- Login form accepts credentials
|
||||
- Distributed network connects (node count > 0)
|
||||
- No JavaScript console errors except expected WebSocket connection failures
|
||||
|
||||
3. **PWA Features Test:**
|
||||
- Verify Service Worker registration in browser console
|
||||
- Check manifest.json loads correctly
|
||||
- Confirm offline caching functionality
|
||||
|
||||
### Error Handling Validation
|
||||
- **Build Script Errors:** Python syntax errors will cause build to fail with clear error messages
|
||||
- **Network Connectivity:** Some WebSocket connections to gun-manhattan.herokuapp.com may fail - this is expected
|
||||
- **Browser Compatibility:** Application works in modern browsers supporting Service Workers
|
||||
|
||||
## Repository Structure
|
||||
|
||||
### Key Files and Directories
|
||||
```
|
||||
/home/runner/work/TeleSec/TeleSec/
|
||||
├── build.py # Main build script - processes template variables
|
||||
├── index.html # Build error fallback (should never be served)
|
||||
├── README.md # Basic repository information (minimal)
|
||||
├── LICENSE # Project license
|
||||
├── CNAME # GitHub Pages configuration
|
||||
├── .gitignore # Excludes dist/, radata/, node_modules/
|
||||
├── src/ # Source files with template variables
|
||||
│ ├── index.html # Main application HTML with %%PREFETCH%% variables
|
||||
│ ├── app_logic.js # Core application logic and authentication
|
||||
│ ├── app_modules.js # Application modules and utilities
|
||||
│ ├── config.js # Configuration and CouchDB setup
|
||||
│ ├── db.js # PouchDB wrapper and replication
|
||||
│ ├── pwa.js # Progressive Web App functionality
|
||||
│ ├── sw.js # Service Worker with cache configuration
|
||||
│ └── page/ # Individual page modules
|
||||
│ ├── login.js # Login functionality
|
||||
│ ├── index.js # Main dashboard
|
||||
│ ├── materiales.js # Materials management
|
||||
│ ├── personas.js # People management
|
||||
│ ├── supercafe.js # SuperCafé module
|
||||
│ ├── comedor.js # Dining hall module
|
||||
│ ├── importar.js # Data import functionality
|
||||
│ ├── exportar.js # Data export functionality
|
||||
│ ├── resumen_diario.js # Daily summary
|
||||
│ └── notificaciones.js # Notifications
|
||||
└── assets/ # Static assets copied to dist/
|
||||
├── manifest.json # PWA manifest
|
||||
├── *.png, *.jpg # Icons and images
|
||||
├── static/ # JavaScript libraries and CSS
|
||||
│ ├── euskaditech-css/ # CSS framework
|
||||
│ └── ico/ # Application icons
|
||||
└── page/ # Page-specific assets (empty placeholder)
|
||||
```
|
||||
|
||||
### Build Process Details
|
||||
The `build.py` script performs these operations:
|
||||
1. **Clean:** Removes existing `dist/` directory (if it exists)
|
||||
2. **Copy Assets:** Copies all files from `assets/` to `dist/`
|
||||
3. **Process Templates:** Processes files from `src/` and replaces:
|
||||
- `%%PREFETCH%%` - Generates link prefetch tags for all assets
|
||||
- `%%VERSIONCO%%` - Inserts version code "2025-08-04_1"
|
||||
- `%%ASSETSJSON%%` - Inserts JSON array of all asset files
|
||||
4. **Output:** Creates complete deployable application in `dist/`
|
||||
|
||||
## Application Architecture
|
||||
|
||||
### Technology Stack
|
||||
- **Frontend:** Vanilla JavaScript, HTML5, CSS3
|
||||
- **Data Layer:** PouchDB (local-first) with optional CouchDB replication
|
||||
- **Networking:** WebRTC for peer-to-peer connections (where applicable)
|
||||
- **Authentication:** Group codes + secret keys (converted to uppercase)
|
||||
- **Storage:** Browser LocalStorage + PouchDB local datastore
|
||||
- **PWA Features:** Service Worker, Web App Manifest
|
||||
|
||||
### Remote Sync (Optional)
|
||||
The application can optionally replicate to a remote CouchDB server for cloud backup and multi-device syncing. Configure the CouchDB server, database name, and credentials in the login/setup form in the application.
|
||||
|
||||
### Application Modules
|
||||
- **Login/Authentication:** Group-based access with secret keys
|
||||
- **Materials Management:** Track and manage materials/supplies
|
||||
- **People Management:** Manage group members
|
||||
- **SuperCafé:** Café/beverage ordering system
|
||||
- **Dining Hall:** Restaurant/meal management
|
||||
- **Import/Export:** Data backup and restoration
|
||||
- **Daily Summary:** Reports and analytics
|
||||
- **Notifications:** Alert system
|
||||
|
||||
## Common Development Tasks
|
||||
|
||||
### Making Changes to the Application
|
||||
1. **ALWAYS** edit files in `src/` directory, never `dist/`
|
||||
2. Run `python3 build.py` to rebuild after changes
|
||||
3. Refresh browser or restart web server to see changes
|
||||
4. Test authentication flow and network connectivity after any changes
|
||||
|
||||
### Adding New Features
|
||||
1. Create new JavaScript files in `src/page/` for new modules
|
||||
2. Add script references in `src/index.html`
|
||||
3. Update assets if new static files are needed
|
||||
4. Rebuild and test complete user workflows
|
||||
|
||||
### Debugging Common Issues
|
||||
- **Login Issues:** Check browser console for replication/auth errors and DB initialization logs
|
||||
- **Network Connectivity:** Verify remote CouchDB server is reachable and replication is active
|
||||
- **Build Issues:** Check Python syntax in build.py
|
||||
- **Performance:** Monitor browser DevTools Network tab for asset loading
|
||||
|
||||
## Validation Scenarios
|
||||
|
||||
### Complete User Workflow Test
|
||||
After making any changes, ALWAYS test this complete scenario:
|
||||
|
||||
1. **Build and Serve:**
|
||||
```bash
|
||||
cd /home/runner/work/TeleSec/TeleSec
|
||||
python3 build.py
|
||||
cd dist
|
||||
python3 -m http.server 8000
|
||||
```
|
||||
|
||||
2. **Login Test:**
|
||||
- Navigate to `http://localhost:8000`
|
||||
- Enter group code: "TEST"
|
||||
- Enter secret key: "SECRET123"
|
||||
- Click "Iniciar sesión"
|
||||
- Verify header shows: "TeleSec - TEST" and that the login is accepted
|
||||
|
||||
3. **Network Connectivity Test:**
|
||||
- Confirm green connection indicator appears (bottom right)
|
||||
- Check browser console shows PouchDB replication logs when a remote is configured
|
||||
- Verify heartbeat/last-seen docs are being updated in the local DB
|
||||
|
||||
4. **PWA Functionality Test:**
|
||||
- Check Service Worker registers successfully
|
||||
- Verify offline caching works (Network tab → Offline)
|
||||
- Test manifest.json loads correctly
|
||||
|
||||
## Quick Reference Commands
|
||||
|
||||
### Essential Operations
|
||||
```bash
|
||||
# Build application (< 0.1 seconds)
|
||||
python3 build.py
|
||||
|
||||
# Serve with Python (most compatible)
|
||||
cd dist && python3 -m http.server 8000
|
||||
|
||||
# Serve with Node.js (advanced features)
|
||||
cd dist && npx http-server . --port 8001 --cors
|
||||
|
||||
# Clean rebuild
|
||||
rm -rf dist && python3 build.py
|
||||
|
||||
# Check build output
|
||||
ls -la dist/
|
||||
```
|
||||
|
||||
### File Structure Verification
|
||||
```bash
|
||||
# Verify all source files exist
|
||||
find src/ -name "*.js" -o -name "*.html" | sort
|
||||
|
||||
# Check template variable processing
|
||||
grep -r "%%.*%%" dist/ || echo "All template variables processed correctly"
|
||||
|
||||
# Verify assets copied correctly
|
||||
diff -r assets/ dist/ --exclude="*.js" --exclude="*.html" || echo "Some differences expected due to processing"
|
||||
```
|
||||
|
||||
**CRITICAL REMINDERS:**
|
||||
- **NEVER CANCEL**: Builds complete in under 0.1 seconds - no timeout needed
|
||||
- **ALWAYS test login and network connectivity** after changes
|
||||
- **Edit source files in `src/` directory only**, never `dist/`
|
||||
- **Test with real user credentials** to verify distributed networking
|
||||
- **Monitor browser console** for connection status and errors
|
||||
45
.github/workflows/static.yml
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
# Simple workflow for deploying static content to GitHub Pages
|
||||
name: Deploy to Github Pages
|
||||
|
||||
on:
|
||||
# Runs on pushes targeting the default branch
|
||||
push:
|
||||
branches: ["main"]
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
||||
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
|
||||
permissions:
|
||||
contents: read
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
|
||||
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
|
||||
concurrency:
|
||||
group: "pages"
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
# Single deploy job since we're just deploying
|
||||
deploy:
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Setup Pages
|
||||
uses: actions/configure-pages@v5
|
||||
- name: Build
|
||||
run: TELESEC_HOSTER=GitHub-Pages python3 build.py
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v3
|
||||
with:
|
||||
# Upload entire repository
|
||||
path: './dist/'
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v4
|
||||
46
.github/workflows/windows-agent-release.yml
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
name: Build Windows Agent (Release)
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
build-windows-agent:
|
||||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
|
||||
- name: Install dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -r requirements.txt
|
||||
pip install pyinstaller
|
||||
|
||||
- name: Build hidden EXE with PyInstaller
|
||||
shell: bash
|
||||
run: |
|
||||
cd python_sdk ; pyinstaller --noconfirm --clean --onefile --noconsole --hidden-import=telesec_couchdb --name telesec-windows-agent windows_agent.py
|
||||
|
||||
- name: Upload workflow artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: telesec-windows-agent
|
||||
path: python_sdk/dist/telesec-windows-agent.exe
|
||||
|
||||
- name: Upload asset to GitHub Release
|
||||
if: github.event_name == 'release'
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
files: python_sdk/dist/telesec-windows-agent.exe
|
||||
16
.gitignore
vendored
@@ -1,2 +1,14 @@
|
||||
dist/index.html
|
||||
dist/sw.js
|
||||
dist/*
|
||||
radata/*
|
||||
node_modules/*
|
||||
.DS_Store
|
||||
._*
|
||||
# Python
|
||||
__pycache__/*
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.pyd
|
||||
*.egg-info/*
|
||||
*.egg
|
||||
.venv/*
|
||||
venv/*
|
||||
3
.gitmodules
vendored
@@ -1,3 +0,0 @@
|
||||
[submodule "dist/static/euskaditech-css"]
|
||||
path = dist/static/euskaditech-css
|
||||
url = https://git.tech.eus/EuskadiTech/css.git
|
||||
7
.prettierrc.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"printWidth": 100,
|
||||
"singleQuote": true,
|
||||
"semi": true,
|
||||
"trailingComma": "es5",
|
||||
"embeddedLanguageFormatting": "auto"
|
||||
}
|
||||
6
.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"tobermory.es6-string-html",
|
||||
"esbenp.prettier-vscode"
|
||||
]
|
||||
}
|
||||
92
README.md
@@ -1,2 +1,94 @@
|
||||
# TeleSec
|
||||
Nuevo programa de datos
|
||||
|
||||
## Python SDK (CouchDB directo)
|
||||
|
||||
Se añadió un SDK Python en `python_sdk/` para acceder directamente a CouchDB (sin replicación local), compatible con el formato de cifrado de `TS_encrypt`:
|
||||
|
||||
- Formato: `RSA{...}`
|
||||
- Algoritmo: `CryptoJS.AES.encrypt(payload, secret)` (modo passphrase/OpenSSL)
|
||||
|
||||
### Instalación
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### Uso rápido
|
||||
|
||||
```python
|
||||
from python_sdk import TeleSecCouchDB
|
||||
|
||||
db = TeleSecCouchDB(
|
||||
server_url="https://tu-couchdb",
|
||||
dbname="telesec",
|
||||
username="usuario",
|
||||
password="clave",
|
||||
secret="SECRET123",
|
||||
)
|
||||
|
||||
# Guardar cifrado (como TS_encrypt)
|
||||
db.put("personas", "abc123", {"nombre": "Ana"}, encrypt=True)
|
||||
|
||||
# Leer y descifrar
|
||||
obj = db.get("personas", "abc123", decrypt=True)
|
||||
|
||||
# Listar una tabla
|
||||
rows = db.list("personas", decrypt=True)
|
||||
for row in rows:
|
||||
print(row.id, row.data)
|
||||
```
|
||||
|
||||
API principal:
|
||||
|
||||
- `TeleSecCouchDB.put(table, item_id, data, encrypt=True)`
|
||||
- `TeleSecCouchDB.get(table, item_id, decrypt=True)`
|
||||
- `TeleSecCouchDB.list(table, decrypt=True)`
|
||||
- `TeleSecCouchDB.delete(table, item_id)`
|
||||
- `ts_encrypt(value, secret)` / `ts_decrypt(value, secret)`
|
||||
|
||||
## Agente Windows (Gest-Aula > Ordenadores)
|
||||
|
||||
Se añadió soporte para control de ordenadores del aula:
|
||||
|
||||
- Tabla: `aulas_ordenadores`
|
||||
- Campos reportados por agente: `Hostname`, `UsuarioActual`, `AppActualEjecutable`, `AppActualTitulo`, `LastSeenAt`
|
||||
- Control remoto: `ShutdownBeforeDate` (programado desde web a `hora_servidor + 2 minutos`)
|
||||
|
||||
### Ejecutar agente en Windows
|
||||
|
||||
El agente usa un archivo de configuración en la carpeta personal del usuario:
|
||||
|
||||
- Ruta por defecto: `~/.telesec/windows_agent.json`
|
||||
- Se crea automáticamente si no existe
|
||||
|
||||
```bash
|
||||
python -m python_sdk.windows_agent --once
|
||||
```
|
||||
|
||||
Ejemplo del JSON de configuración:
|
||||
|
||||
```json
|
||||
{
|
||||
"server": "https://tu-couchdb",
|
||||
"db": "telesec",
|
||||
"user": "usuario",
|
||||
"password": "clave",
|
||||
"secret": "SECRET123",
|
||||
"machine_id": "",
|
||||
"interval": 15
|
||||
}
|
||||
```
|
||||
|
||||
También puedes sobrescribir valores por CLI (`--server`, `--secret`, etc.).
|
||||
|
||||
Opciones útiles:
|
||||
|
||||
- `--once`: una sola iteración
|
||||
- `--interval 15`: intervalo (segundos)
|
||||
- `--dry-run`: no apaga realmente, solo simula
|
||||
- `--config <ruta>`: ruta alternativa del archivo JSON
|
||||
|
||||
### Hora de servidor (sin depender del reloj local)
|
||||
|
||||
El frontend y el agente usan la hora del servidor (cabecera HTTP `Date` de CouchDB) para comparar `ShutdownBeforeDate`.
|
||||
|
||||
86
_assets.json
@@ -1,86 +0,0 @@
|
||||
[
|
||||
"icon512_maskable.png",
|
||||
"icon512_rounded.png",
|
||||
"index.html",
|
||||
"manifest.json",
|
||||
"static/axe.js",
|
||||
"static/doublescroll.js",
|
||||
"static/gun.js",
|
||||
"static/jquery.js",
|
||||
"static/load.js",
|
||||
"static/open.js",
|
||||
"static/path.js",
|
||||
"static/radisk.js",
|
||||
"static/radix.js",
|
||||
"static/rindexed.js",
|
||||
"static/sea.js",
|
||||
"static/showdown.min.js",
|
||||
"static/simplemde.min.css",
|
||||
"static/simplemde.min.js",
|
||||
"static/store.js",
|
||||
"static/synchronous.js",
|
||||
"static/TeleSec.jpg",
|
||||
"static/toastr.min.css",
|
||||
"static/toastr.min.js",
|
||||
"static/webrtc.js",
|
||||
"static/yson.js",
|
||||
"static/ico/add.png",
|
||||
"static/ico/azucar-moreno.png",
|
||||
"static/ico/azucar-blanco.jpg",
|
||||
"static/ico/stevia.jpg",
|
||||
"static/ico/stevia-gotas.webp",
|
||||
"static/ico/sacarina.jpg",
|
||||
"static/ico/arrow_down_blue.png",
|
||||
"static/ico/arrow_left_green.png",
|
||||
"static/ico/arrow_up_red.png",
|
||||
"static/ico/camera2.png",
|
||||
"static/ico/cereales.png",
|
||||
"static/ico/checkbox.png",
|
||||
"static/ico/checkbox_unchecked.png",
|
||||
"static/ico/connect_ok.svg",
|
||||
"static/ico/connect_ko.svg",
|
||||
"static/ico/coffee_bean.png",
|
||||
"static/ico/colacao.jpg",
|
||||
"static/ico/cookies.png",
|
||||
"static/ico/cow.png",
|
||||
"static/ico/delete.png",
|
||||
"static/ico/fire.png",
|
||||
"static/ico/keyboard_key_g.png",
|
||||
"static/ico/keyboard_key_p.png",
|
||||
"static/ico/lollipop.png",
|
||||
"static/ico/milk.png",
|
||||
"static/ico/preferences.png",
|
||||
"static/ico/sizes.png",
|
||||
"static/ico/statusok.png",
|
||||
"static/ico/snowflake.png",
|
||||
"static/ico/tea_bag.png",
|
||||
"static/ico/thermometer2.png",
|
||||
"static/ico/user.png",
|
||||
"static/ico/user_generic.png",
|
||||
"static/ico/water_tap.png",
|
||||
"static/ico/wheat.png",
|
||||
"static/ico/layered1/Azucar-Az. Blanco.png",
|
||||
"static/ico/layered1/Azucar-Az. Moreno.png",
|
||||
"static/ico/layered1/Azucar-Edulcorante.png",
|
||||
"static/ico/layered1/Azucar-Sacarina.png",
|
||||
"static/ico/layered1/Azucar-Sin.png",
|
||||
"static/ico/layered1/Azucar-Stevia (Gotas).png",
|
||||
"static/ico/layered1/Azucar-Stevia (Pastillas).png",
|
||||
"static/ico/layered1/Background.png",
|
||||
"static/ico/layered1/Cafeina-Con.png",
|
||||
"static/ico/layered1/Cafeina-Sin.png",
|
||||
"static/ico/layered1/Leche-Agua.png",
|
||||
"static/ico/layered1/Leche-Sin lactosa.png",
|
||||
"static/ico/layered1/Leche-Vegetal.png",
|
||||
"static/ico/layered1/Leche-de Vaca.png",
|
||||
"static/ico/layered1/Selección-CafeSolo.png",
|
||||
"static/ico/layered1/Selección-CaféLeche.png",
|
||||
"static/ico/layered1/Selección-ColaCao.png",
|
||||
"static/ico/layered1/Selección-Infusion.png",
|
||||
"static/ico/layered1/Selección-Leche.png",
|
||||
"static/ico/layered1/Tamaño-Grande.png",
|
||||
"static/ico/layered1/Tamaño-Pequeño.png",
|
||||
"static/ico/layered1/Temperatura-Caliente.png",
|
||||
"static/ico/layered1/Temperatura-Frio.png",
|
||||
"static/ico/layered1/Temperatura-Templado.png"
|
||||
]
|
||||
|
Before Width: | Height: | Size: 210 KiB After Width: | Height: | Size: 210 KiB |
BIN
assets/favicon.ico
Normal file
|
After Width: | Height: | Size: 103 KiB |
|
Before Width: | Height: | Size: 378 KiB After Width: | Height: | Size: 378 KiB |
|
Before Width: | Height: | Size: 300 KiB After Width: | Height: | Size: 300 KiB |
BIN
assets/load.gif
Normal file
|
After Width: | Height: | Size: 47 KiB |
0
assets/page/.placeholder
Normal file
35
assets/static/aes.js
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
CryptoJS v3.1.2
|
||||
code.google.com/p/crypto-js
|
||||
(c) 2009-2013 by Jeff Mott. All rights reserved.
|
||||
code.google.com/p/crypto-js/wiki/License
|
||||
*/
|
||||
var CryptoJS=CryptoJS||function(u,p){var d={},l=d.lib={},s=function(){},t=l.Base={extend:function(a){s.prototype=this;var c=new s;a&&c.mixIn(a);c.hasOwnProperty("init")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},
|
||||
r=l.WordArray=t.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=p?c:4*a.length},toString:function(a){return(a||v).stringify(this)},concat:function(a){var c=this.words,e=a.words,j=this.sigBytes;a=a.sigBytes;this.clamp();if(j%4)for(var k=0;k<a;k++)c[j+k>>>2]|=(e[k>>>2]>>>24-8*(k%4)&255)<<24-8*((j+k)%4);else if(65535<e.length)for(k=0;k<a;k+=4)c[j+k>>>2]=e[k>>>2];else c.push.apply(c,e);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<
|
||||
32-8*(c%4);a.length=u.ceil(c/4)},clone:function(){var a=t.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],e=0;e<a;e+=4)c.push(4294967296*u.random()|0);return new r.init(c,a)}}),w=d.enc={},v=w.Hex={stringify:function(a){var c=a.words;a=a.sigBytes;for(var e=[],j=0;j<a;j++){var k=c[j>>>2]>>>24-8*(j%4)&255;e.push((k>>>4).toString(16));e.push((k&15).toString(16))}return e.join("")},parse:function(a){for(var c=a.length,e=[],j=0;j<c;j+=2)e[j>>>3]|=parseInt(a.substr(j,
|
||||
2),16)<<24-4*(j%8);return new r.init(e,c/2)}},b=w.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var e=[],j=0;j<a;j++)e.push(String.fromCharCode(c[j>>>2]>>>24-8*(j%4)&255));return e.join("")},parse:function(a){for(var c=a.length,e=[],j=0;j<c;j++)e[j>>>2]|=(a.charCodeAt(j)&255)<<24-8*(j%4);return new r.init(e,c)}},x=w.Utf8={stringify:function(a){try{return decodeURIComponent(escape(b.stringify(a)))}catch(c){throw Error("Malformed UTF-8 data");}},parse:function(a){return b.parse(unescape(encodeURIComponent(a)))}},
|
||||
q=l.BufferedBlockAlgorithm=t.extend({reset:function(){this._data=new r.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=x.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,e=c.words,j=c.sigBytes,k=this.blockSize,b=j/(4*k),b=a?u.ceil(b):u.max((b|0)-this._minBufferSize,0);a=b*k;j=u.min(4*a,j);if(a){for(var q=0;q<a;q+=k)this._doProcessBlock(e,q);q=e.splice(0,a);c.sigBytes-=j}return new r.init(q,j)},clone:function(){var a=t.clone.call(this);
|
||||
a._data=this._data.clone();return a},_minBufferSize:0});l.Hasher=q.extend({cfg:t.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){q.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(b,e){return(new a.init(e)).finalize(b)}},_createHmacHelper:function(a){return function(b,e){return(new n.HMAC.init(a,
|
||||
e)).finalize(b)}}});var n=d.algo={};return d}(Math);
|
||||
(function(){var u=CryptoJS,p=u.lib.WordArray;u.enc.Base64={stringify:function(d){var l=d.words,p=d.sigBytes,t=this._map;d.clamp();d=[];for(var r=0;r<p;r+=3)for(var w=(l[r>>>2]>>>24-8*(r%4)&255)<<16|(l[r+1>>>2]>>>24-8*((r+1)%4)&255)<<8|l[r+2>>>2]>>>24-8*((r+2)%4)&255,v=0;4>v&&r+0.75*v<p;v++)d.push(t.charAt(w>>>6*(3-v)&63));if(l=t.charAt(64))for(;d.length%4;)d.push(l);return d.join("")},parse:function(d){var l=d.length,s=this._map,t=s.charAt(64);t&&(t=d.indexOf(t),-1!=t&&(l=t));for(var t=[],r=0,w=0;w<
|
||||
l;w++)if(w%4){var v=s.indexOf(d.charAt(w-1))<<2*(w%4),b=s.indexOf(d.charAt(w))>>>6-2*(w%4);t[r>>>2]|=(v|b)<<24-8*(r%4);r++}return p.create(t,r)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})();
|
||||
(function(u){function p(b,n,a,c,e,j,k){b=b+(n&a|~n&c)+e+k;return(b<<j|b>>>32-j)+n}function d(b,n,a,c,e,j,k){b=b+(n&c|a&~c)+e+k;return(b<<j|b>>>32-j)+n}function l(b,n,a,c,e,j,k){b=b+(n^a^c)+e+k;return(b<<j|b>>>32-j)+n}function s(b,n,a,c,e,j,k){b=b+(a^(n|~c))+e+k;return(b<<j|b>>>32-j)+n}for(var t=CryptoJS,r=t.lib,w=r.WordArray,v=r.Hasher,r=t.algo,b=[],x=0;64>x;x++)b[x]=4294967296*u.abs(u.sin(x+1))|0;r=r.MD5=v.extend({_doReset:function(){this._hash=new w.init([1732584193,4023233417,2562383102,271733878])},
|
||||
_doProcessBlock:function(q,n){for(var a=0;16>a;a++){var c=n+a,e=q[c];q[c]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360}var a=this._hash.words,c=q[n+0],e=q[n+1],j=q[n+2],k=q[n+3],z=q[n+4],r=q[n+5],t=q[n+6],w=q[n+7],v=q[n+8],A=q[n+9],B=q[n+10],C=q[n+11],u=q[n+12],D=q[n+13],E=q[n+14],x=q[n+15],f=a[0],m=a[1],g=a[2],h=a[3],f=p(f,m,g,h,c,7,b[0]),h=p(h,f,m,g,e,12,b[1]),g=p(g,h,f,m,j,17,b[2]),m=p(m,g,h,f,k,22,b[3]),f=p(f,m,g,h,z,7,b[4]),h=p(h,f,m,g,r,12,b[5]),g=p(g,h,f,m,t,17,b[6]),m=p(m,g,h,f,w,22,b[7]),
|
||||
f=p(f,m,g,h,v,7,b[8]),h=p(h,f,m,g,A,12,b[9]),g=p(g,h,f,m,B,17,b[10]),m=p(m,g,h,f,C,22,b[11]),f=p(f,m,g,h,u,7,b[12]),h=p(h,f,m,g,D,12,b[13]),g=p(g,h,f,m,E,17,b[14]),m=p(m,g,h,f,x,22,b[15]),f=d(f,m,g,h,e,5,b[16]),h=d(h,f,m,g,t,9,b[17]),g=d(g,h,f,m,C,14,b[18]),m=d(m,g,h,f,c,20,b[19]),f=d(f,m,g,h,r,5,b[20]),h=d(h,f,m,g,B,9,b[21]),g=d(g,h,f,m,x,14,b[22]),m=d(m,g,h,f,z,20,b[23]),f=d(f,m,g,h,A,5,b[24]),h=d(h,f,m,g,E,9,b[25]),g=d(g,h,f,m,k,14,b[26]),m=d(m,g,h,f,v,20,b[27]),f=d(f,m,g,h,D,5,b[28]),h=d(h,f,
|
||||
m,g,j,9,b[29]),g=d(g,h,f,m,w,14,b[30]),m=d(m,g,h,f,u,20,b[31]),f=l(f,m,g,h,r,4,b[32]),h=l(h,f,m,g,v,11,b[33]),g=l(g,h,f,m,C,16,b[34]),m=l(m,g,h,f,E,23,b[35]),f=l(f,m,g,h,e,4,b[36]),h=l(h,f,m,g,z,11,b[37]),g=l(g,h,f,m,w,16,b[38]),m=l(m,g,h,f,B,23,b[39]),f=l(f,m,g,h,D,4,b[40]),h=l(h,f,m,g,c,11,b[41]),g=l(g,h,f,m,k,16,b[42]),m=l(m,g,h,f,t,23,b[43]),f=l(f,m,g,h,A,4,b[44]),h=l(h,f,m,g,u,11,b[45]),g=l(g,h,f,m,x,16,b[46]),m=l(m,g,h,f,j,23,b[47]),f=s(f,m,g,h,c,6,b[48]),h=s(h,f,m,g,w,10,b[49]),g=s(g,h,f,m,
|
||||
E,15,b[50]),m=s(m,g,h,f,r,21,b[51]),f=s(f,m,g,h,u,6,b[52]),h=s(h,f,m,g,k,10,b[53]),g=s(g,h,f,m,B,15,b[54]),m=s(m,g,h,f,e,21,b[55]),f=s(f,m,g,h,v,6,b[56]),h=s(h,f,m,g,x,10,b[57]),g=s(g,h,f,m,t,15,b[58]),m=s(m,g,h,f,D,21,b[59]),f=s(f,m,g,h,z,6,b[60]),h=s(h,f,m,g,C,10,b[61]),g=s(g,h,f,m,j,15,b[62]),m=s(m,g,h,f,A,21,b[63]);a[0]=a[0]+f|0;a[1]=a[1]+m|0;a[2]=a[2]+g|0;a[3]=a[3]+h|0},_doFinalize:function(){var b=this._data,n=b.words,a=8*this._nDataBytes,c=8*b.sigBytes;n[c>>>5]|=128<<24-c%32;var e=u.floor(a/
|
||||
4294967296);n[(c+64>>>9<<4)+15]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360;n[(c+64>>>9<<4)+14]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360;b.sigBytes=4*(n.length+1);this._process();b=this._hash;n=b.words;for(a=0;4>a;a++)c=n[a],n[a]=(c<<8|c>>>24)&16711935|(c<<24|c>>>8)&4278255360;return b},clone:function(){var b=v.clone.call(this);b._hash=this._hash.clone();return b}});t.MD5=v._createHelper(r);t.HmacMD5=v._createHmacHelper(r)})(Math);
|
||||
(function(){var u=CryptoJS,p=u.lib,d=p.Base,l=p.WordArray,p=u.algo,s=p.EvpKDF=d.extend({cfg:d.extend({keySize:4,hasher:p.MD5,iterations:1}),init:function(d){this.cfg=this.cfg.extend(d)},compute:function(d,r){for(var p=this.cfg,s=p.hasher.create(),b=l.create(),u=b.words,q=p.keySize,p=p.iterations;u.length<q;){n&&s.update(n);var n=s.update(d).finalize(r);s.reset();for(var a=1;a<p;a++)n=s.finalize(n),s.reset();b.concat(n)}b.sigBytes=4*q;return b}});u.EvpKDF=function(d,l,p){return s.create(p).compute(d,
|
||||
l)}})();
|
||||
CryptoJS.lib.Cipher||function(u){var p=CryptoJS,d=p.lib,l=d.Base,s=d.WordArray,t=d.BufferedBlockAlgorithm,r=p.enc.Base64,w=p.algo.EvpKDF,v=d.Cipher=t.extend({cfg:l.extend(),createEncryptor:function(e,a){return this.create(this._ENC_XFORM_MODE,e,a)},createDecryptor:function(e,a){return this.create(this._DEC_XFORM_MODE,e,a)},init:function(e,a,b){this.cfg=this.cfg.extend(b);this._xformMode=e;this._key=a;this.reset()},reset:function(){t.reset.call(this);this._doReset()},process:function(e){this._append(e);return this._process()},
|
||||
finalize:function(e){e&&this._append(e);return this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(e){return{encrypt:function(b,k,d){return("string"==typeof k?c:a).encrypt(e,b,k,d)},decrypt:function(b,k,d){return("string"==typeof k?c:a).decrypt(e,b,k,d)}}}});d.StreamCipher=v.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var b=p.mode={},x=function(e,a,b){var c=this._iv;c?this._iv=u:c=this._prevBlock;for(var d=0;d<b;d++)e[a+d]^=
|
||||
c[d]},q=(d.BlockCipherMode=l.extend({createEncryptor:function(e,a){return this.Encryptor.create(e,a)},createDecryptor:function(e,a){return this.Decryptor.create(e,a)},init:function(e,a){this._cipher=e;this._iv=a}})).extend();q.Encryptor=q.extend({processBlock:function(e,a){var b=this._cipher,c=b.blockSize;x.call(this,e,a,c);b.encryptBlock(e,a);this._prevBlock=e.slice(a,a+c)}});q.Decryptor=q.extend({processBlock:function(e,a){var b=this._cipher,c=b.blockSize,d=e.slice(a,a+c);b.decryptBlock(e,a);x.call(this,
|
||||
e,a,c);this._prevBlock=d}});b=b.CBC=q;q=(p.pad={}).Pkcs7={pad:function(a,b){for(var c=4*b,c=c-a.sigBytes%c,d=c<<24|c<<16|c<<8|c,l=[],n=0;n<c;n+=4)l.push(d);c=s.create(l,c);a.concat(c)},unpad:function(a){a.sigBytes-=a.words[a.sigBytes-1>>>2]&255}};d.BlockCipher=v.extend({cfg:v.cfg.extend({mode:b,padding:q}),reset:function(){v.reset.call(this);var a=this.cfg,b=a.iv,a=a.mode;if(this._xformMode==this._ENC_XFORM_MODE)var c=a.createEncryptor;else c=a.createDecryptor,this._minBufferSize=1;this._mode=c.call(a,
|
||||
this,b&&b.words)},_doProcessBlock:function(a,b){this._mode.processBlock(a,b)},_doFinalize:function(){var a=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){a.pad(this._data,this.blockSize);var b=this._process(!0)}else b=this._process(!0),a.unpad(b);return b},blockSize:4});var n=d.CipherParams=l.extend({init:function(a){this.mixIn(a)},toString:function(a){return(a||this.formatter).stringify(this)}}),b=(p.format={}).OpenSSL={stringify:function(a){var b=a.ciphertext;a=a.salt;return(a?s.create([1398893684,
|
||||
1701076831]).concat(a).concat(b):b).toString(r)},parse:function(a){a=r.parse(a);var b=a.words;if(1398893684==b[0]&&1701076831==b[1]){var c=s.create(b.slice(2,4));b.splice(0,4);a.sigBytes-=16}return n.create({ciphertext:a,salt:c})}},a=d.SerializableCipher=l.extend({cfg:l.extend({format:b}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);var l=a.createEncryptor(c,d);b=l.finalize(b);l=l.cfg;return n.create({ciphertext:b,key:c,iv:l.iv,algorithm:a,mode:l.mode,padding:l.padding,blockSize:a.blockSize,formatter:d.format})},
|
||||
decrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);return a.createDecryptor(c,d).finalize(b.ciphertext)},_parse:function(a,b){return"string"==typeof a?b.parse(a,this):a}}),p=(p.kdf={}).OpenSSL={execute:function(a,b,c,d){d||(d=s.random(8));a=w.create({keySize:b+c}).compute(a,d);c=s.create(a.words.slice(b),4*c);a.sigBytes=4*b;return n.create({key:a,iv:c,salt:d})}},c=d.PasswordBasedCipher=a.extend({cfg:a.cfg.extend({kdf:p}),encrypt:function(b,c,d,l){l=this.cfg.extend(l);d=l.kdf.execute(d,
|
||||
b.keySize,b.ivSize);l.iv=d.iv;b=a.encrypt.call(this,b,c,d.key,l);b.mixIn(d);return b},decrypt:function(b,c,d,l){l=this.cfg.extend(l);c=this._parse(c,l.format);d=l.kdf.execute(d,b.keySize,b.ivSize,c.salt);l.iv=d.iv;return a.decrypt.call(this,b,c,d.key,l)}})}();
|
||||
(function(){for(var u=CryptoJS,p=u.lib.BlockCipher,d=u.algo,l=[],s=[],t=[],r=[],w=[],v=[],b=[],x=[],q=[],n=[],a=[],c=0;256>c;c++)a[c]=128>c?c<<1:c<<1^283;for(var e=0,j=0,c=0;256>c;c++){var k=j^j<<1^j<<2^j<<3^j<<4,k=k>>>8^k&255^99;l[e]=k;s[k]=e;var z=a[e],F=a[z],G=a[F],y=257*a[k]^16843008*k;t[e]=y<<24|y>>>8;r[e]=y<<16|y>>>16;w[e]=y<<8|y>>>24;v[e]=y;y=16843009*G^65537*F^257*z^16843008*e;b[k]=y<<24|y>>>8;x[k]=y<<16|y>>>16;q[k]=y<<8|y>>>24;n[k]=y;e?(e=z^a[a[a[G^z]]],j^=a[a[j]]):e=j=1}var H=[0,1,2,4,8,
|
||||
16,32,64,128,27,54],d=d.AES=p.extend({_doReset:function(){for(var a=this._key,c=a.words,d=a.sigBytes/4,a=4*((this._nRounds=d+6)+1),e=this._keySchedule=[],j=0;j<a;j++)if(j<d)e[j]=c[j];else{var k=e[j-1];j%d?6<d&&4==j%d&&(k=l[k>>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255]):(k=k<<8|k>>>24,k=l[k>>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255],k^=H[j/d|0]<<24);e[j]=e[j-d]^k}c=this._invKeySchedule=[];for(d=0;d<a;d++)j=a-d,k=d%4?e[j]:e[j-4],c[d]=4>d||4>=j?k:b[l[k>>>24]]^x[l[k>>>16&255]]^q[l[k>>>
|
||||
8&255]]^n[l[k&255]]},encryptBlock:function(a,b){this._doCryptBlock(a,b,this._keySchedule,t,r,w,v,l)},decryptBlock:function(a,c){var d=a[c+1];a[c+1]=a[c+3];a[c+3]=d;this._doCryptBlock(a,c,this._invKeySchedule,b,x,q,n,s);d=a[c+1];a[c+1]=a[c+3];a[c+3]=d},_doCryptBlock:function(a,b,c,d,e,j,l,f){for(var m=this._nRounds,g=a[b]^c[0],h=a[b+1]^c[1],k=a[b+2]^c[2],n=a[b+3]^c[3],p=4,r=1;r<m;r++)var q=d[g>>>24]^e[h>>>16&255]^j[k>>>8&255]^l[n&255]^c[p++],s=d[h>>>24]^e[k>>>16&255]^j[n>>>8&255]^l[g&255]^c[p++],t=
|
||||
d[k>>>24]^e[n>>>16&255]^j[g>>>8&255]^l[h&255]^c[p++],n=d[n>>>24]^e[g>>>16&255]^j[h>>>8&255]^l[k&255]^c[p++],g=q,h=s,k=t;q=(f[g>>>24]<<24|f[h>>>16&255]<<16|f[k>>>8&255]<<8|f[n&255])^c[p++];s=(f[h>>>24]<<24|f[k>>>16&255]<<16|f[n>>>8&255]<<8|f[g&255])^c[p++];t=(f[k>>>24]<<24|f[n>>>16&255]<<16|f[g>>>8&255]<<8|f[h&255])^c[p++];n=(f[n>>>24]<<24|f[g>>>16&255]<<16|f[h>>>8&255]<<8|f[k&255])^c[p++];a[b]=q;a[b+1]=s;a[b+2]=t;a[b+3]=n},keySize:8});u.AES=p._createHelper(d)})();
|
||||
45
assets/static/appico/Alert_Warning.svg
Normal file
@@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<svg version="1.1" width="64" height="64" color-interpolation="linearRGB"
|
||||
xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg">
|
||||
<g>
|
||||
<path style="fill:#010101; fill-opacity:0.4549"
|
||||
d="M30 62H36L38 60L42 62H56L64 52L54 48H44L43 49L40 48H38L30 62z"
|
||||
/>
|
||||
<path style="fill:none; stroke:#000000; stroke-width:4"
|
||||
d="M14 41V52L30 60L38 52V41L22 35L14 41z"
|
||||
/>
|
||||
<linearGradient id="gradient0" gradientUnits="userSpaceOnUse" x1="56.22" y1="56.15" x2="49.67" y2="65.65">
|
||||
<stop offset="0" stop-color="#e07900"/>
|
||||
<stop offset="1" stop-color="#fff289"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient0)"
|
||||
d="M14 41L30 48L38 41L22 35L14 41z"
|
||||
/>
|
||||
<path style="fill:none; stroke:#000000; stroke-width:4"
|
||||
d="M14 6V34L30 41L38 35V6L22 2L14 6z"
|
||||
/>
|
||||
<linearGradient id="gradient1" gradientUnits="userSpaceOnUse" x1="24.32" y1="-24.13" x2="51.3" y2="-13.84">
|
||||
<stop offset="0" stop-color="#fff49e"/>
|
||||
<stop offset="1" stop-color="#ffbd30"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient1)"
|
||||
d="M14 6V34L30 41V11L14 6z
|
||||
M14 41V52L30 60V48L14 41z"
|
||||
/>
|
||||
<linearGradient id="gradient2" gradientUnits="userSpaceOnUse" x1="30.5" y1="-22.81" x2="56.01" y2="-9.13">
|
||||
<stop offset="0" stop-color="#ffffff"/>
|
||||
<stop offset="1" stop-color="#fff289"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient2)"
|
||||
d="M14 6L30 11L38 6L22 2L14 6z"
|
||||
/>
|
||||
<linearGradient id="gradient3" gradientUnits="userSpaceOnUse" x1="33.3" y1="-0.68" x2="46.77" y2="0.74">
|
||||
<stop offset="0" stop-color="#ed9406"/>
|
||||
<stop offset="1" stop-color="#fcb23d"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient3)"
|
||||
d="M30 11V41L38 35V6L30 11z
|
||||
M30 48V60L38 52V41L30 48z"
|
||||
/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
75
assets/static/appico/App_CodyCam.svg
Normal file
@@ -0,0 +1,75 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<svg version="1.1" width="64" height="64" color-interpolation="linearRGB"
|
||||
xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg">
|
||||
<g>
|
||||
<path style="fill:#010101; fill-opacity:0.4078"
|
||||
d="M38 40C25.84 40 16 45.37 16 52C16 52 25.84 64 38 64C50.14 64 60 58.61 60 52C60 45.37 50.14 40 38 40z"
|
||||
/>
|
||||
<linearGradient id="gradient0" gradientUnits="userSpaceOnUse" x1="52" y1="-64" x2="68" y2="-64">
|
||||
<stop offset="0" stop-color="#010000"/>
|
||||
<stop offset="1" stop-color="#010000" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
<path style="fill:none; stroke:url(#gradient0); stroke-width:4"
|
||||
d="M44 44C44 44 49.51 38 54 38C58 38 56 46 64 42"
|
||||
/>
|
||||
<path style="fill:none; stroke:#010000; stroke-width:4"
|
||||
d="M28 34C28 34 23 48 14 49V52L34 62L48 48L45 34H28z"
|
||||
/>
|
||||
<linearGradient id="gradient1" gradientUnits="userSpaceOnUse" x1="41.67" y1="-9.73" x2="71.92" y2="-3.5">
|
||||
<stop offset="0" stop-color="#5c5c5c"/>
|
||||
<stop offset="1" stop-color="#b8b8b8"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient1)"
|
||||
d="M34 36V62L48 48L45 34L34 36z"
|
||||
/>
|
||||
<linearGradient id="gradient2" gradientUnits="userSpaceOnUse" x1="14.26" y1="97.46" x2="-8.94" y2="81.76">
|
||||
<stop offset="0" stop-color="#c9c9c9"/>
|
||||
<stop offset="1" stop-color="#ffffff"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient2)"
|
||||
d="M14 52L34 62V58L14 49V52z"
|
||||
/>
|
||||
<linearGradient id="gradient3" gradientUnits="userSpaceOnUse" x1="51.94" y1="63.65" x2="26.51" y2="73.34">
|
||||
<stop offset="0" stop-color="#797979"/>
|
||||
<stop offset="1" stop-color="#e4e4e4"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient3)"
|
||||
d="M34 58C41 51 40 39 40 39L28 34C28 34 23 48 14 49L34 58z"
|
||||
/>
|
||||
<path style="fill:none; stroke:#010000; stroke-width:4"
|
||||
d="M30 2C18.95 2 10 10.95 10 22C10 33.03 18.95 42 30 42C41.03 42 50 33.03 50 22C50 10.95 41.03 2 30 2z"
|
||||
/>
|
||||
<radialGradient id="gradient4" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="64" gradientTransform="matrix(0.373,0.2924,-0.3363,0.4291,25.2905,16.1419)">
|
||||
<stop offset="0.1647" stop-color="#ffffff"/>
|
||||
<stop offset="0.7686" stop-color="#959191"/>
|
||||
<stop offset="1" stop-color="#b9b9b9"/>
|
||||
</radialGradient>
|
||||
<path style="fill:url(#gradient4)"
|
||||
d="M30 2C18.95 2 10 10.95 10 22C10 33.03 18.95 42 30 42C41.03 42 50 33.03 50 22C50 10.95 41.03 2 30 2z"
|
||||
/>
|
||||
<linearGradient id="gradient5" gradientUnits="userSpaceOnUse" x1="-6" y1="-4" x2="38" y2="-4">
|
||||
<stop offset="0.2509" stop-color="#010101"/>
|
||||
<stop offset="1" stop-color="#c1acac"/>
|
||||
</linearGradient>
|
||||
<path style="fill:none; stroke:url(#gradient5); stroke-width:4"
|
||||
d="M12.25 43.25C9.83 45.6 10.61 50.31 13.99 53.76C17.35 57.23 22.03 58.1 24.46 55.75C26.87 53.41 26.09 48.7 22.73 45.24C19.36 41.79 14.67 40.91 12.25 43.25z"
|
||||
transform="matrix(0.9846,0.4347,-0.4379,0.9773,24.6832,-30.2941)"
|
||||
/>
|
||||
<radialGradient id="gradient6" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="64" gradientTransform="matrix(0.1345,0.0871,-0.0673,0.1039,20.7047,50.7358)">
|
||||
<stop offset="0" stop-color="#434a68"/>
|
||||
<stop offset="1" stop-color="#0f1238"/>
|
||||
</radialGradient>
|
||||
<path style="fill:url(#gradient6)"
|
||||
d="M12.25 43.25C9.83 45.6 10.61 50.31 13.99 53.76C17.35 57.23 22.03 58.1 24.46 55.75C26.87 53.41 26.09 48.7 22.73 45.24C19.36 41.79 14.67 40.91 12.25 43.25z"
|
||||
transform="matrix(0.9846,0.4347,-0.4379,0.9773,26.8385,-30.2941)"
|
||||
/>
|
||||
<path style="fill:#ffffff"
|
||||
d="M12.25 43.25C9.83 45.6 10.61 50.31 13.99 53.76C17.35 57.23 22.03 58.1 24.46 55.75C26.87 53.41 26.09 48.7 22.73 45.24C19.36 41.79 14.67 40.91 12.25 43.25z"
|
||||
transform="matrix(-0.0781,0.1744,-0.1757,-0.0775,31.659,20.9543)"
|
||||
/>
|
||||
<path style="fill:#ffffff"
|
||||
d="M19 53C19 53 22.24 53.24 23.24 52.24C24.24 51.24 24 49 24 49C24 49 24.87 52.1 23.87 53.1C22.87 54.1 19 53 19 53z"
|
||||
transform="matrix(0.9846,0.4347,-0.4379,0.9773,26.8385,-30.2941)"
|
||||
/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.9 KiB |
83
assets/static/appico/App_Dropbox.svg
Normal file
@@ -0,0 +1,83 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<svg version="1.1" width="64" height="64" color-interpolation="linearRGB"
|
||||
xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg">
|
||||
<g>
|
||||
<path style="fill:#000000; fill-opacity:0.396"
|
||||
d="M32 62H40L44 64L61 43L55.8 40.4L60 38L52 37L32 62z"
|
||||
/>
|
||||
<path style="fill:none; stroke:#000000; stroke-width:4; stroke-linejoin:round"
|
||||
d="M10 39V49L32 60L50 42V36"
|
||||
/>
|
||||
<linearGradient id="gradient0" gradientUnits="userSpaceOnUse" x1="46.07" y1="78.24" x2="23.93" y2="73.15">
|
||||
<stop offset="0" stop-color="#82aac8"/>
|
||||
<stop offset="1" stop-color="#40407c"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient0)"
|
||||
d="M32 38L50 20V42L32 60V38z"
|
||||
/>
|
||||
<path style="fill:#3d3d5d"
|
||||
d="M32 38H42L32 48V38z"
|
||||
/>
|
||||
<linearGradient id="gradient1" gradientUnits="userSpaceOnUse" x1="44.47" y1="70.75" x2="29.89" y2="79.36">
|
||||
<stop offset="0" stop-color="#5a6e82"/>
|
||||
<stop offset="1" stop-color="#9be2ff"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient1)"
|
||||
d="M11.89 36.01L14 46L32 55V60L10 49V35.99L11.89 36.01z"
|
||||
/>
|
||||
<linearGradient id="gradient2" gradientUnits="userSpaceOnUse" x1="54.08" y1="49.54" x2="50.66" y2="59.95">
|
||||
<stop offset="0" stop-color="#5a6e82"/>
|
||||
<stop offset="1" stop-color="#3a7d99"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient2)"
|
||||
d="M32 38V55L14 46L11.89 36.01L32 38z"
|
||||
/>
|
||||
<path style="fill:none; stroke:#000000; stroke-width:4; stroke-linejoin:round"
|
||||
d="M24 46L2 35L10 27H2L24 14H30L37 6L54 12L50 23L62 26L44 44L32 38L24 46z"
|
||||
/>
|
||||
<linearGradient id="gradient3" gradientUnits="userSpaceOnUse" x1="44.25" y1="2.48" x2="55.01" y2="17.28">
|
||||
<stop offset="0" stop-color="#40407c"/>
|
||||
<stop offset="0.9962" stop-color="#417297"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient3)"
|
||||
d="M10 27L30 14V33L23.89 37.88L10 30.99V27z"
|
||||
/>
|
||||
<linearGradient id="gradient4" gradientUnits="userSpaceOnUse" x1="42.68" y1="-29.81" x2="61.51" y2="-25.25">
|
||||
<stop offset="0" stop-color="#6dc8ed"/>
|
||||
<stop offset="1" stop-color="#a4c6e1"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient4)"
|
||||
d="M30 14L34 30L50 37V22L30 14z"
|
||||
/>
|
||||
<path style="fill:#3d3d5d"
|
||||
d="M30 14L34 30L50 37L41.85 38.33L30 33V14z"
|
||||
/>
|
||||
<path style="fill:#376181"
|
||||
d="M30 33L23.89 37.88L32 38L36.1 35.74L30 33z"
|
||||
/>
|
||||
<linearGradient id="gradient5" gradientUnits="userSpaceOnUse" x1="32.24" y1="-14.37" x2="49.83" y2="-16.21">
|
||||
<stop offset="0" stop-color="#9be2ff"/>
|
||||
<stop offset="1" stop-color="#5789bd"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient5)"
|
||||
d="M37 6L54 12L50 23L30 14L37 6z"
|
||||
/>
|
||||
<linearGradient id="gradient6" gradientUnits="userSpaceOnUse" x1="1.22" y1="-19.6" x2="44.89" y2="-14.22">
|
||||
<stop offset="0" stop-color="#9be2ff"/>
|
||||
<stop offset="1" stop-color="#5d81a5"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient6)"
|
||||
d="M2 35L24 46L32 38L10 27L2 35z"
|
||||
/>
|
||||
<path style="fill:#9be2ff"
|
||||
d="M2 27L24 14H30L10 27H2z"
|
||||
/>
|
||||
<linearGradient id="gradient7" gradientUnits="userSpaceOnUse" x1="43.44" y1="10.75" x2="62.48" y2="20.22">
|
||||
<stop offset="0" stop-color="#9be2ff"/>
|
||||
<stop offset="1" stop-color="#5a6e82"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient7)"
|
||||
d="M32 38L50 23L62 26L44 44L32 38z"
|
||||
/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.3 KiB |
7
assets/static/appico/Chat.svg
Normal file
@@ -0,0 +1,7 @@
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Transformed by: SVG Repo Mixer Tools -->
|
||||
<svg fill="#000000" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="256px" height="256px" viewBox="0 0 428.428 428.428" xml:space="preserve">
|
||||
|
||||
<g id="SVGRepo_bgCarrier" stroke-width="0"/>
|
||||
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
99
assets/static/appico/Classroom.svg
Normal file
@@ -0,0 +1,99 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg fill="#000000" height="800px" width="800px" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
viewBox="0 0 512.001 512.001" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M467.309,16.768H221.454c-6.128,0-11.095,4.967-11.095,11.095v86.451l12.305-7.64c3.131-1.945,6.475-3.257,9.884-3.978
|
||||
V38.958h223.665v160.016H232.549v-25.89l-22.19,13.778v23.208c0,6.128,4.967,11.095,11.095,11.095h245.855
|
||||
c6.127,0,11.095-4.967,11.095-11.095V27.863C478.404,21.735,473.436,16.768,467.309,16.768z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M306.001,78.356c-2.919-3.702-8.285-4.335-11.986-1.418l-38.217,30.133c3.649,2.385,6.85,5.58,9.301,9.527
|
||||
c0.695,1.117,1.298,2.266,1.834,3.431l37.651-29.687C308.286,87.424,308.92,82.057,306.001,78.356z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<circle cx="121.535" cy="31.935" r="31.935"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M252.01,124.728c-4.489-7.229-13.987-9.451-21.218-4.963l-31.206,19.375c-0.13-25.879-0.061-12.145-0.144-28.811
|
||||
c-0.101-20.005-16.458-36.281-36.464-36.281h-15.159c-12.951,33.588-8.779,21.12-19.772,49.63l4.623-20.131
|
||||
c0.32-1.508,0.088-3.08-0.655-4.43l-6.264-11.393l5.559-10.109c0.829-1.508-0.264-3.356-1.985-3.356h-15.271
|
||||
c-1.72,0-2.815,1.848-1.985,3.356l5.57,10.13l-6.276,11.414c-0.728,1.325-0.966,2.865-0.672,4.347l4.005,20.172
|
||||
c-2.159-5.599-17.084-44.306-19.137-49.63H80.093c-20.005,0-36.363,16.275-36.464,36.281l-0.569,113.2
|
||||
c-0.042,8.51,6.821,15.443,15.331,15.486c0.027,0,0.052,0,0.079,0c8.473,0,15.364-6.848,15.406-15.331l0.569-113.2
|
||||
c0-0.018,0-0.036,0-0.053c0.024-1.68,1.399-3.026,3.079-3.013c1.68,0.012,3.034,1.378,3.034,3.058l0.007,160.381
|
||||
c14.106-0.6,27.176,4.488,36.981,13.423v-62.568h7.983v71.773c5.623,8.268,8.914,18.243,8.914,28.974
|
||||
c0,9.777-2.732,18.928-7.469,26.731c4.866,0.023,9.592,0.669,14.099,1.861c6.076-5.271,13.385-9.151,21.437-11.136
|
||||
c0-279.342-0.335-106.627-0.335-229.418c0-1.779,1.439-3.221,3.218-3.224c1.779-0.004,3.224,1.432,3.232,3.211
|
||||
c0.054,10.807,0.224,44.59,0.283,56.351c0.028,5.579,3.07,10.708,7.953,13.407c4.874,2.694,10.835,2.554,15.583-0.394
|
||||
l54.604-33.903C254.276,141.458,256.499,131.957,252.01,124.728z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<circle cx="429.221" cy="322.831" r="33.803"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M511.459,405.811c-0.107-21.176-17.421-38.404-38.598-38.404c-9.137,0-76.583,0-84.781,0
|
||||
c3.637,7.068,5.704,15.069,5.704,23.55c0,9.005-2.405,18.413-7.5,26.782c18.904,0.764,35.468,10.91,45.149,25.897h40.579v-37.43
|
||||
c0-1.842,1.46-3.352,3.301-3.415s3.402,1.345,3.526,3.182c0,0,0,0.001,0,0.002l0.19,37.661h32.621L511.459,405.811z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M290.469,390.956c0-8.629,2.138-16.763,5.894-23.92c-22.009,0-47.852,0-75.267,0c3.472,6.939,5.437,14.756,5.437,23.029
|
||||
c0,9.721-2.73,18.926-7.469,26.731c15.558,0.074,29.912,6.538,40.283,17.267c10.054-9.822,23.759-15.914,38.836-15.995
|
||||
C292.948,409.616,290.469,400.126,290.469,390.956z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M264.819,288.655c-18.668,0-33.804,15.132-33.804,33.803c0,18.628,15.107,33.803,33.804,33.803
|
||||
c18.518,0,33.803-14.965,33.803-33.803C298.622,303.808,283.517,288.655,264.819,288.655z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M123.217,390.065c0-8.252,1.956-16.053,5.411-22.98c-1.457-0.072,4.672-0.049-89.485-0.049
|
||||
c-21.068,0-38.491,17.138-38.598,38.404l-0.192,38.196c14.907,0,17.906,0,32.621,0l0.191-38.031
|
||||
c0.01-1.884,1.541-3.402,3.423-3.397c1.882,0.006,3.404,1.532,3.404,3.414v38.014h45.727c9.855-15.754,26.8-25.646,45.243-26.406
|
||||
C125.956,409.168,123.217,399.865,123.217,390.065z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M82.786,288.655c-18.668,0-33.803,15.134-33.803,33.803c0,18.584,15.046,33.803,33.803,33.803
|
||||
c18.536,0,33.804-15.015,33.804-33.803C116.59,303.788,101.455,288.655,82.786,288.655z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M422.533,473.807c-0.105-21.178-17.42-38.406-38.597-38.406c-2.246,0-82.969,0-85.507,0
|
||||
c-21.176,0-39.601,17.227-39.708,38.404l-0.275-0.891c-0.105-21.092-17.341-38.404-38.597-38.404c-24.544,0-59.795,0-85.507,0
|
||||
c-21.176,0-39.601,17.227-39.708,38.404L94.442,512h32.621l0.191-38.922c0.008-1.622,1.327-2.93,2.948-2.926
|
||||
c1.621,0.004,2.932,1.32,2.932,2.941v38.908c19.121,0,68.483,0,86.392,0v-38.908c0-1.736,1.405-3.144,3.141-3.149
|
||||
c1.735-0.004,3.149,1.397,3.158,3.133l0.191,38.923c6.669,0,58.238,0,65.134,0l0.191-38.031c0,0,0-0.001,0-0.002
|
||||
c0.009-1.621,1.328-2.928,2.949-2.924c1.621,0.004,2.931,1.32,2.931,2.941v38.016c19.121,0,68.483,0,86.392,0v-38.016
|
||||
c0-1.736,1.405-3.144,3.141-3.149c1.735-0.004,3.149,1.397,3.158,3.133l0.191,38.031h32.621L422.533,473.807z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<circle cx="175.934" cy="389.933" r="34.198"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<circle cx="342.07" cy="390.821" r="34.198"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.8 KiB |
97
assets/static/appico/Coffee.svg
Normal file
@@ -0,0 +1,97 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="287.96585" height="275.66766" id="svg2" version="1.1" inkscape:version="0.48.0 r9654" sodipodi:docname="Coffee cup.svg">
|
||||
<defs id="defs4">
|
||||
<linearGradient id="linearGradient3817">
|
||||
<stop style="stop-color:#bdbdbd;stop-opacity:1;" offset="0" id="stop3819"/>
|
||||
<stop style="stop-color:#ececec;stop-opacity:1;" offset="1" id="stop3821"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient3801">
|
||||
<stop style="stop-color:#ececec;stop-opacity:1;" offset="0" id="stop3803"/>
|
||||
<stop style="stop-color:#bdbdbd;stop-opacity:1;" offset="1" id="stop3805"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient3791">
|
||||
<stop style="stop-color:#ececec;stop-opacity:1;" offset="0" id="stop3793"/>
|
||||
<stop style="stop-color:#bdbdbd;stop-opacity:1;" offset="1" id="stop3795"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient3767">
|
||||
<stop style="stop-color:#2b2b2b;stop-opacity:1;" offset="0" id="stop3769"/>
|
||||
<stop style="stop-color:#666666;stop-opacity:1;" offset="1" id="stop3771"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient3755">
|
||||
<stop style="stop-color:#dddddd;stop-opacity:1;" offset="0" id="stop3757"/>
|
||||
<stop style="stop-color:#b2b2b2;stop-opacity:1;" offset="1" id="stop3759"/>
|
||||
</linearGradient>
|
||||
<filter inkscape:collect="always" id="filter3781" x="-0.079655327" width="1.1593107" y="-0.23315777" height="1.4663155" color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur inkscape:collect="always" stdDeviation="13.323301" id="feGaussianBlur3783"/>
|
||||
</filter>
|
||||
<filter inkscape:collect="always" id="filter3842" x="-0.1819846" width="1.3639692" y="-0.44528148" height="1.890563" color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur inkscape:collect="always" stdDeviation="4.4043134" id="feGaussianBlur3844"/>
|
||||
</filter>
|
||||
<filter inkscape:collect="always" id="filter3868" color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur inkscape:collect="always" stdDeviation="1.8652408" id="feGaussianBlur3870"/>
|
||||
</filter>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3817" id="linearGradient3884" gradientUnits="userSpaceOnUse" x1="343.33261" y1="220.75931" x2="422.52917" y2="140.95724"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3791" id="radialGradient3886" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1, 0, 0, 0.7, 0, 57.7087)" cx="280" cy="139.50504" fx="280" fy="139.50504" r="100"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3801" id="radialGradient3888" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.83246, 2.65218e-08, 0, 0.162304, -233.089, 102.502)" cx="280" cy="73.071892" fx="280" fy="73.071892" r="95.5"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3767" id="radialGradient3910" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1, 0, 0, 0.341637, 0, 263.019)" cx="392.14285" cy="583.4931" fx="392.14285" fy="583.4931" r="200.71428"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3767" id="radialGradient3918" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1, 0, 0, 0.341637, 0, 263.019)" cx="392.14285" cy="583.4931" fx="392.14285" fy="583.4931" r="200.71428"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3755" id="radialGradient3920" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1, 0, 0, 0.341637, 0, 263.019)" cx="396.42856" cy="491.49908" fx="396.42856" fy="491.49908" r="200.71428"/>
|
||||
<filter inkscape:collect="always" id="filter3939" x="-0.16236658" width="1.3247333" y="-0.47526056" height="1.9505211" color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur inkscape:collect="always" stdDeviation="27.157745" id="feGaussianBlur3941"/>
|
||||
</filter>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3801" id="radialGradient3950" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.83246, 2.65218e-08, 0, 0.162304, -125.31, 250.603)" cx="280" cy="73.071892" fx="280" fy="73.071892" r="95.5"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3791" id="radialGradient3953" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1, 0, 0, 0.7, 107.779, 205.809)" cx="280" cy="139.50504" fx="280" fy="139.50504" r="100"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3817" id="linearGradient3957" gradientUnits="userSpaceOnUse" x1="343.33261" y1="220.75931" x2="422.52917" y2="140.95724" gradientTransform="matrix(0.800412, 0, 0, 0.800412, 185.295, 183.555)"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3817" id="linearGradient3971" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.800412, 0, 0, 0.800412, 185.295, 183.555)" x1="343.33261" y1="220.75931" x2="422.52917" y2="140.95724"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3791" id="radialGradient3973" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1, 0, 0, 0.7, 107.779, 205.809)" cx="280" cy="139.50504" fx="280" fy="139.50504" r="100"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3801" id="radialGradient3975" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.83246, 2.65218e-08, 0, 0.162304, -125.31, 250.603)" cx="280" cy="73.071892" fx="280" fy="73.071892" r="95.5"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3767" id="radialGradient3997" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1, 0, 0, 0.341637, 0, 263.019)" cx="392.14285" cy="583.4931" fx="392.14285" fy="583.4931" r="200.71428"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3767" id="radialGradient3999" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1, 0, 0, 0.341637, 0, 263.019)" cx="392.14285" cy="583.4931" fx="392.14285" fy="583.4931" r="200.71428"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3755" id="radialGradient4001" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1, 0, 0, 0.341637, 0, 263.019)" cx="396.42856" cy="491.49908" fx="396.42856" fy="491.49908" r="200.71428"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3817" id="linearGradient4003" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.800412, 0, 0, 0.800412, 185.295, 183.555)" x1="343.33261" y1="220.75931" x2="422.52917" y2="140.95724"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3791" id="radialGradient4005" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1, 0, 0, 0.7, 107.779, 205.809)" cx="280" cy="139.50504" fx="280" fy="139.50504" r="100"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3801" id="radialGradient4007" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.83246, 2.65218e-08, 0, 0.162304, -125.31, 250.603)" cx="280" cy="73.071892" fx="280" fy="73.071892" r="95.5"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3817" id="linearGradient3061" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.800412, 0, 0, 0.800412, 185.295, 183.555)" x1="343.33261" y1="220.75931" x2="422.52917" y2="140.95724"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3791" id="radialGradient3063" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1, 0, 0, 0.7, 107.779, 205.809)" cx="280" cy="139.50504" fx="280" fy="139.50504" r="100"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3801" id="radialGradient3065" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.83246, 2.65218e-08, 0, 0.162304, -125.31, 250.603)" cx="280" cy="73.071892" fx="280" fy="73.071892" r="95.5"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3801" id="radialGradient3074" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.83246, 2.65218e-08, 0, 0.162304, -123.31, 250.603)" cx="280" cy="73.071892" fx="280" fy="73.071892" r="95.5"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3791" id="radialGradient3077" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1, 0, 0, 0.7, 109.779, 205.809)" cx="280" cy="139.50504" fx="280" fy="139.50504" r="100"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3817" id="linearGradient3081" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.800412, 0, 0, 0.800412, 187.295, 183.555)" x1="343.33261" y1="220.75931" x2="422.52917" y2="140.95724"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3767" id="radialGradient3083" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1, 0, 0, 0.341637, 0, 263.019)" cx="392.14285" cy="583.4931" fx="392.14285" fy="583.4931" r="200.71428"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3767" id="radialGradient3085" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1, 0, 0, 0.341637, 0, 263.019)" cx="392.14285" cy="583.4931" fx="392.14285" fy="583.4931" r="200.71428"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3755" id="radialGradient3087" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1, 0, 0, 0.341637, 0, 263.019)" cx="396.42856" cy="491.49908" fx="396.42856" fy="491.49908" r="200.71428"/>
|
||||
</defs>
|
||||
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="0.7071068" inkscape:cx="7.436507" inkscape:cy="230.98232" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" inkscape:window-width="1024" inkscape:window-height="742" inkscape:window-x="-4" inkscape:window-y="-4" inkscape:window-maximized="1" fit-margin-top="10" fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0">
|
||||
<inkscape:grid type="xygrid" id="grid3785" empspacing="5" visible="true" enabled="true" snapvisiblegridlinesonly="true"/>
|
||||
</sodipodi:namedview>
|
||||
<metadata id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:title/>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(-246.532, -190.385)">
|
||||
<g id="g3094">
|
||||
<path transform="matrix(0.618775, 0, 0, 0.646379, 143.447, 142.829)" sodipodi:type="arc" style="fill:url(#radialGradient3083);fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3781)" id="path3779" sodipodi:cx="399.28571" sodipodi:cy="399.50504" sodipodi:rx="200.71428" sodipodi:ry="68.571426" d="m 599.99998,399.50504 a 200.71428,68.571426 0 1 1 -401.42855,0 200.71428,68.571426 0 1 1 401.42855,0 z"/>
|
||||
<path d="m 599.99998,399.50504 a 200.71428,68.571426 0 1 1 -401.42855,0 200.71428,68.571426 0 1 1 401.42855,0 z" sodipodi:ry="68.571426" sodipodi:rx="200.71428" sodipodi:cy="399.50504" sodipodi:cx="399.28571" id="path3765" style="fill:url(#radialGradient3085);fill-opacity:1;fill-rule:nonzero;stroke:none" sodipodi:type="arc" transform="matrix(0.618775, 0, 0, 0.646379, 143.447, 142.829)"/>
|
||||
<path transform="matrix(0.646379, 0, 0, 0.646379, 132.426, 136.365)" sodipodi:type="arc" style="fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path3763" sodipodi:cx="399.28571" sodipodi:cy="399.50504" sodipodi:rx="200.71428" sodipodi:ry="68.571426" d="m 599.99998,399.50504 a 200.71428,68.571426 0 1 1 -401.42855,0 200.71428,68.571426 0 1 1 401.42855,0 z"/>
|
||||
<path transform="matrix(0.646379, 0, 0, 0.646379, 132.426, 133.78)" d="m 599.99998,399.50504 a 200.71428,68.571426 0 1 1 -401.42855,0 200.71428,68.571426 0 1 1 401.42855,0 z" sodipodi:ry="68.571426" sodipodi:rx="200.71428" sodipodi:cy="399.50504" sodipodi:cx="399.28571" id="path2985" style="fill:url(#radialGradient3087);fill-opacity:1;fill-rule:nonzero;stroke:none" sodipodi:type="arc"/>
|
||||
<path transform="matrix(0.372876, 0, 0, 0.319443, 241.631, 265.685)" sodipodi:type="arc" style="fill:#979797;fill-opacity:0.39215686;fill-rule:nonzero;stroke:#b7b7b7;stroke-width:5.61860895;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" id="path3775" sodipodi:cx="399.28571" sodipodi:cy="399.50504" sodipodi:rx="200.71428" sodipodi:ry="68.571426" d="m 599.99998,399.50504 a 200.71428,68.571426 0 1 1 -401.42855,0 200.71428,68.571426 0 1 1 401.42855,0 z"/>
|
||||
<path d="m 599.99998,399.50504 a 200.71428,68.571426 0 1 1 -401.42855,0 200.71428,68.571426 0 1 1 401.42855,0 z" sodipodi:ry="68.571426" sodipodi:rx="200.71428" sodipodi:cy="399.50504" sodipodi:cx="399.28571" id="path3926" style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3939)" sodipodi:type="arc" transform="matrix(0.265496, 0, 0, 0.200192, 283.77, 318.155)"/>
|
||||
<path sodipodi:nodetypes="cczcczc" inkscape:connector-curvature="0" id="path3815" d="m 473.13884,312.5941 0.45571,-13.03877 c 16.79252,-1.26498 38.44962,-8.39059 38.25779,26.6325 -0.19184,35.02311 -38.64614,28.28143 -48.43686,23.68663 l 0.65784,-10.56391 c 7.09726,2.48526 35.21153,4.81796 35.59877,-13.93125 0.38725,-18.74922 -9.93254,-15.43796 -26.53325,-12.7852 z" style="fill:url(#linearGradient3081);fill-opacity:1;stroke:#d6d6d6;stroke-width:0.80041194;stroke-opacity:1"/>
|
||||
<path sodipodi:nodetypes="czczc" inkscape:connector-curvature="0" id="path3787" d="m 289.77863,270.46269 c 0,0 0,-20 100,-20 100,0 100,20 100,20 0,0 0,20 -100,20 -100,0 -100,-20 -100,-20 z" style="fill:#e6e6e6;fill-opacity:1;stroke:none"/>
|
||||
<path sodipodi:nodetypes="czczc" inkscape:connector-curvature="0" id="path3789" d="m 289.77863,270.46269 c 0,0 0,140 100,140 100,0 100,-140 100,-140 0,0 0,20 -100,20 -100,0 -100,-20 -100,-20 z" style="fill:url(#radialGradient3077);fill-opacity:1;stroke:none"/>
|
||||
<path style="fill:url(#radialGradient3074);fill-opacity:1;stroke:#d6d6d6;stroke-opacity:1" d="m 294.77863,270.46269 c 0,0 0,-15 95,-15 95,0 95,15 95,15 0,0 0,15 -95,15 -95,0 -95,-15 -95,-15 z" id="path3799" inkscape:connector-curvature="0" sodipodi:nodetypes="czczc"/>
|
||||
<path id="path3809" d="m 389.77863,265.47551 c -64.11627,0 -83.29251,7.59423 -84.875,11.90625 11.22479,3.93491 34.8967,8.09375 84.875,8.09375 49.9783,0 73.65021,-4.15884 84.875,-8.09375 -1.58249,-4.31202 -20.75873,-11.90625 -84.875,-11.90625 z" style="fill:#562c08;fill-opacity:1;stroke:none" inkscape:connector-curvature="0"/>
|
||||
<path inkscape:connector-curvature="0" id="path3827" d="m 292.10929,298.02015 c 2.55938,4.81149 16.9432,18.3125 97.68492,18.3125 80.69081,0 95.08106,-13.49308 97.65375,-18.3125 -5.46348,5.78106 -25.32465,16.3125 -97.65375,16.3125 -72.39656,0 -92.24323,-10.53491 -97.68492,-16.3125 z" style="fill:#000000;fill-opacity:1;stroke:none"/>
|
||||
<path style="fill:#000000;fill-opacity:1;stroke:none" d="m 291.54108,294.02015 c 2.57427,4.81149 17.04177,18.3125 98.25322,18.3125 81.16025,0 95.63422,-13.49308 98.22187,-18.3125 -5.49527,5.78106 -25.47198,16.3125 -98.22187,16.3125 -72.81774,0 -92.77987,-10.53491 -98.25322,-16.3125 z" id="path3832" inkscape:connector-curvature="0"/>
|
||||
<path sodipodi:nodetypes="cccc" inkscape:connector-curvature="0" id="path3834" d="m 302.9703,288.54748 25.00128,5.17703 c -2.71055,42.30856 3.19121,65.46435 23.73858,99.6263 -25.41202,-23.58673 -42.16474,-53.00575 -48.73986,-104.80333 z" style="fill:#ffffff;fill-opacity:0.35294118;stroke:none"/>
|
||||
<path transform="matrix(1.31762, 0, 0, 1.673, 20.9841, 66.1965)" d="m 308.60161,118.72869 a 29.041885,11.869292 0 1 1 -58.08377,0 29.041885,11.869292 0 1 1 58.08377,0 z" sodipodi:ry="11.869292" sodipodi:rx="29.041885" sodipodi:cy="118.72869" sodipodi:cx="279.55972" id="path3836" style="fill:#ffffff;fill-opacity:0.35294118;fill-rule:nonzero;stroke:none;filter:url(#filter3842)" sodipodi:type="arc"/>
|
||||
<path transform="matrix(0.69763, 0, 0, 0.617722, 194.056, 186.002)" sodipodi:nodetypes="cczzczzzc" inkscape:connector-curvature="0" id="path3846" d="m 307.31913,54.771706 c -11.66884,-21.1275 -16.92627,-23.67626 -27.87348,-26.494634 -20.94721,-2.318374 -29.96874,3.083901 -29.28106,17.972485 0.68768,14.888584 26.53898,25.731883 26.8681,42.599832 0.32912,16.867951 -19.63135,51.743261 -19.63135,51.743261 0,0 31.42782,-33.99061 30.98863,-51.465344 -0.43918,-17.474744 -21.70744,-27.295456 -24.67515,-34.229816 -2.96771,-6.934361 -1.4691,-17.248349 14.72575,-17.437672 16.19485,-0.189323 28.87856,17.311888 28.87856,17.311888 z" style="opacity:0.5;fill:#eaa21f;fill-opacity:0.35294118;stroke:none;filter:url(#filter3868)"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 17 KiB |
12
assets/static/appico/Cogs.svg
Normal file
@@ -0,0 +1,12 @@
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Transformed by: SVG Repo Mixer Tools -->
|
||||
<svg fill="#000000" width="256px" height="256px" viewBox="0 0 54.13 54.13" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" stroke="#000000" stroke-width="0.0005413">
|
||||
|
||||
<g id="SVGRepo_bgCarrier" stroke-width="0"/>
|
||||
|
||||
<g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round" stroke="#CCCCCC" stroke-width="0.5413"/>
|
||||
|
||||
<g id="SVGRepo_iconCarrier">
|
||||
|
||||
<title>cogs</title>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
3
assets/static/appico/Database.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="353" height="512" preserveAspectRatio="xMidYMid">
|
||||
<path fill-rule="evenodd" d="M299.596 492.223C266.856 504.976 223.496 512 177.5 512c-45.996 0-89.357-7.024-122.095-19.777-35.083-13.667-54.404-32.766-54.404-53.78V73.557c0-21.014 19.321-40.113 54.404-53.78C88.144 7.024 131.504 0 177.5 0c45.996 0 89.356 7.024 122.096 19.778 35.069 13.661 54.387 32.751 54.402 53.756 0 .007.001.014.001.023v364.886c0 21.014-19.321 40.113-54.403 53.78ZM293.872 34.44C262.914 22.381 221.585 15.739 177.5 15.739c-44.085 0-85.414 6.642-116.372 18.702-28.2 10.984-44.374 25.243-44.374 39.116 0 13.873 16.174 28.131 44.374 39.116 30.958 12.058 72.287 18.7 116.372 18.7 16.532 0 32.675-.934 48.031-2.738 25.592-3.005 48.992-8.425 68.341-15.963 28.199-10.985 44.372-25.243 44.372-39.116 0-13.873-16.172-28.131-44.372-39.116Zm44.375 70.393c-.015.014-.031.027-.046.041-.133.122-.275.244-.41.367-10.912 9.91-24.554 16.781-38.194 22.095-21.485 8.369-47.544 14.27-75.921 17.339-14.865 1.608-30.364 2.438-46.175 2.438-45.996 0-89.357-7.024-122.095-19.777-13.896-5.413-27.587-12.266-38.614-22.469-.012-.011-.024-.021-.036-.032v90.35c0 13.872 16.173 28.13 44.373 39.115 26.121 10.176 59.624 16.495 95.938 18.221 6.805.325 13.62.482 20.434.482 48.743 0 106.184-3.582 146.132-34.692 5.307-4.133 10.264-9.024 12.936-15.305 1.049-2.46 1.678-5.139 1.678-7.82v-90.353Zm.001 121.627c-.012.009-.024.02-.034.029-2.528 2.319-5.204 4.475-7.998 6.469-17.383 12.41-38.247 19.695-58.788 24.922-16.994 4.324-35.701 7.424-55.406 9.177-.172.014-.343.032-.515.047-6.485.568-13.077.987-19.749 1.261-6.026.248-12.117.377-18.256.377-45.996 0-89.357-7.024-122.095-19.777-13.652-5.316-27.217-12.143-38.139-22.045-.155-.141-.317-.279-.471-.421-.013-.012-.026-.024-.04-.036v90.352c0 13.873 16.173 28.131 44.373 39.116 30.958 12.059 72.287 18.701 116.372 18.701 11.881 0 23.559-.487 34.89-1.429.813-.066 1.625-.137 2.433-.208 29.767-2.655 57.032-8.487 79.049-17.064 12.028-4.685 21.859-9.967 29.189-15.559 6.171-4.708 12.25-10.671 14.436-18.344.015-.052.024-.104.039-.155.458-1.648.71-3.348.71-5.059V226.46Zm.002 121.628c-.013.012-.025.022-.038.034-.172.159-.356.317-.531.475-2.552 2.309-5.255 4.445-8.073 6.42-9.261 6.487-19.492 11.48-30.01 15.577-28.508 11.103-65.07 17.861-104.411 19.423-5.839.232-11.738.352-17.683.352-45.996 0-89.357-7.024-122.095-19.777-13.687-5.33-27.127-12.071-38.086-21.997-.174-.157-.356-.314-.528-.472-.013-.012-.025-.022-.038-.034v90.352c0 13.872 16.173 28.13 44.373 39.115 30.959 12.06 72.286 18.702 116.372 18.702s85.414-6.642 116.373-18.702c28.199-10.985 44.372-25.241 44.372-39.115h.003v-90.353Zm-28.174 80.883c-7.949 0-14.393-6.438-14.393-14.381 0-7.942 6.444-14.381 14.393-14.381 7.95 0 14.394 6.439 14.394 14.381 0 7.943-6.444 14.381-14.394 14.381Zm-49.956 15.047c-7.949 0-14.393-6.438-14.393-14.381 0-7.942 6.444-14.381 14.393-14.381 7.949 0 14.394 6.439 14.394 14.381 0 7.943-6.445 14.381-14.394 14.381Zm-53.012 8.237c-7.949 0-14.393-6.438-14.393-14.381 0-7.942 6.444-14.381 14.393-14.381 7.949 0 14.393 6.439 14.393 14.381 0 7.943-6.444 14.381-14.393 14.381Zm102.968-143.877c-7.949 0-14.393-6.439-14.393-14.381 0-7.943 6.444-14.381 14.393-14.381 7.95 0 14.394 6.438 14.394 14.381 0 7.942-6.444 14.381-14.394 14.381Zm-49.956 15.057c-7.949 0-14.393-6.439-14.393-14.381 0-7.943 6.444-14.381 14.393-14.381 7.949 0 14.394 6.438 14.394 14.381 0 7.942-6.445 14.381-14.394 14.381Zm-53.012 8.237c-7.949 0-14.393-6.439-14.393-14.381 0-7.943 6.444-14.381 14.393-14.381 7.949 0 14.393 6.438 14.393 14.381 0 7.942-6.444 14.381-14.393 14.381Zm102.968-145.986c-7.949 0-14.393-6.438-14.393-14.381 0-7.942 6.444-14.381 14.393-14.381 7.95 0 14.394 6.439 14.394 14.381 0 7.943-6.444 14.381-14.394 14.381Zm-49.956 15.057c-7.949 0-14.393-6.438-14.393-14.381 0-7.942 6.444-14.381 14.393-14.381 7.949 0 14.394 6.439 14.394 14.381 0 7.943-6.445 14.381-14.394 14.381Zm-53.012 8.237c-7.949 0-14.393-6.438-14.393-14.381 0-7.942 6.444-14.381 14.393-14.381 7.949 0 14.393 6.439 14.393 14.381 0 7.943-6.444 14.381-14.393 14.381Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.9 KiB |
61
assets/static/appico/File_Person.svg
Normal file
@@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<svg version="1.1" width="64" height="64" color-interpolation="linearRGB"
|
||||
xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg">
|
||||
<g>
|
||||
<path style="fill:#010101; fill-opacity:0.4235"
|
||||
d="M28 64C28 64 33 64 38 64C43 64 48.2 60.96 52.75 61.12C63.12 61.5 67.25 56.37 60.87 54.37C57.04 53.17 52 53.25 49.12 51.25C45.45 48.69 38 48 38 48V55L28 64z"
|
||||
/>
|
||||
<path style="fill:none; stroke:#000000; stroke-width:4"
|
||||
d="M12 18V35L16 39V56L20 58L22 58L23 59.5L28 62L36 54V43L40 39V21L21 12L12 18z"
|
||||
/>
|
||||
<linearGradient id="gradient0" gradientUnits="userSpaceOnUse" x1="73.74" y1="-57.07" x2="116.61" y2="-8.05">
|
||||
<stop offset="0" stop-color="#ffdb97"/>
|
||||
<stop offset="1" stop-color="#fcaf29"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient0)"
|
||||
d="M12 18V35L16 39V56L20 58L22 58L23 59.5L28 62V45H32V27L12 18z"
|
||||
/>
|
||||
<linearGradient id="gradient1" gradientUnits="userSpaceOnUse" x1="-43.97" y1="-33.98" x2="-24.83" y2="-51.95">
|
||||
<stop offset="0" stop-color="#fff7ea"/>
|
||||
<stop offset="0.9962" stop-color="#fdd17b"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient1)"
|
||||
d="M12 18L32 27L40 21L26 20L31.99 16.99L21 12L12 18z"
|
||||
/>
|
||||
<linearGradient id="gradient2" gradientUnits="userSpaceOnUse" x1="54.23" y1="-52.61" x2="75.84" y2="-45.97">
|
||||
<stop offset="0" stop-color="#c85805"/>
|
||||
<stop offset="1" stop-color="#f06306"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient2)"
|
||||
d="M32 45H28V62L36 54V43L40 39V21L32 27V45z"
|
||||
/>
|
||||
<path style="fill:#a32904"
|
||||
d="M28 45V51L36 43L32 45H28z"
|
||||
/>
|
||||
<linearGradient id="gradient3" gradientUnits="userSpaceOnUse" x1="28.92" y1="-64" x2="39.07" y2="-64">
|
||||
<stop offset="0" stop-color="#c85804"/>
|
||||
<stop offset="1" stop-color="#dc952f"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient3)"
|
||||
d="M26 20L40 21L32 17L26 20z"
|
||||
/>
|
||||
<path style="fill:none; stroke:#000000; stroke-width:4"
|
||||
d="M26 2C22 2 18 6 18 10C18 14 22 18 26 18C30 18 34 14 34 10C34 6 30 2 26 2z"
|
||||
/>
|
||||
<radialGradient id="gradient4" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="64" gradientTransform="matrix(0.2361,0,0,0.2321,22.625,6.375)">
|
||||
<stop offset="0" stop-color="#f2f2f2"/>
|
||||
<stop offset="1" stop-color="#bca184"/>
|
||||
<stop offset="0.6742" stop-color="#7d7a7a"/>
|
||||
</radialGradient>
|
||||
<path style="fill:url(#gradient4)"
|
||||
d="M26 2C22 2 18 6 18 10C18 14 22 18 26 18C30 18 34 14 34 10C34 6 30 2 26 2z"
|
||||
/>
|
||||
<linearGradient id="gradient5" gradientUnits="userSpaceOnUse" x1="54.23" y1="-52.61" x2="75.84" y2="-45.97">
|
||||
<stop offset="0" stop-color="#c85805"/>
|
||||
<stop offset="1" stop-color="#f06306"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient5)"
|
||||
d="M20 58H22V44L20 43V58z"
|
||||
/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
65
assets/static/appico/File_Plugin.svg
Normal file
@@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<svg version="1.1" width="64" height="64" color-interpolation="linearRGB"
|
||||
xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg">
|
||||
<g>
|
||||
<path style="fill:#000000; fill-opacity:0.3882"
|
||||
d="M60 35.39L32 64H38L64 37.39L60 35.39z"
|
||||
/>
|
||||
<path style="fill:none; stroke:#000000; stroke-width:4"
|
||||
d="M2 30V47L32 62L58 36V19L30 10L2 30z"
|
||||
/>
|
||||
<linearGradient id="gradient0" gradientUnits="userSpaceOnUse" x1="45.2" y1="-3.44" x2="66.1" y2="20.77">
|
||||
<stop offset="0" stop-color="#6499e8"/>
|
||||
<stop offset="1" stop-color="#1b63ce"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient0)"
|
||||
d="M32 43L2 30V47L32 62V43z"
|
||||
/>
|
||||
<linearGradient id="gradient1" gradientUnits="userSpaceOnUse" x1="64.29" y1="5.5" x2="75.95" y2="14.74">
|
||||
<stop offset="0" stop-color="#10489b"/>
|
||||
<stop offset="1" stop-color="#0a54c3"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient1)"
|
||||
d="M32 43L58 19V36L32 62V43z"
|
||||
/>
|
||||
<linearGradient id="gradient2" gradientUnits="userSpaceOnUse" x1="8" y1="-64" x2="56" y2="-64">
|
||||
<stop offset="0" stop-color="#c0d9ff"/>
|
||||
<stop offset="1" stop-color="#5e95e8"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient2)"
|
||||
d="M32 43L58 19L30 10L2 30L32 43z"
|
||||
/>
|
||||
<linearGradient id="gradient3" gradientUnits="userSpaceOnUse" x1="18" y1="20" x2="34" y2="20">
|
||||
<stop offset="0" stop-color="#2a4fae"/>
|
||||
<stop offset="0.25" stop-color="#4ca0da"/>
|
||||
<stop offset="1" stop-color="#0434a1"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient3)"
|
||||
d="M15 28C15 25.79 18.58 24 23 24C27.41 24 31 25.79 31 28V31C31 33.2 27.41 35 23 35C18.58 35 15 33.2 15 31V28z"
|
||||
/>
|
||||
<linearGradient id="gradient4" gradientUnits="userSpaceOnUse" x1="4" y1="-65" x2="50" y2="-65">
|
||||
<stop offset="0" stop-color="#c0d9ff"/>
|
||||
<stop offset="1" stop-color="#5e95e8"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient4)"
|
||||
d="M15 27C15 24.79 18.58 23 23 23C27.41 23 31 24.79 31 27C31 29.2 27.41 31 23 31C18.58 31 15 29.2 15 27z"
|
||||
/>
|
||||
<linearGradient id="gradient5" gradientUnits="userSpaceOnUse" x1="18" y1="20" x2="34" y2="20">
|
||||
<stop offset="0" stop-color="#2a4fae"/>
|
||||
<stop offset="0.25" stop-color="#4ca0da"/>
|
||||
<stop offset="1" stop-color="#0434a1"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient5)"
|
||||
d="M15 28C15 25.79 18.58 24 23 24C27.41 24 31 25.79 31 28V31C31 33.2 27.41 35 23 35C18.58 35 15 33.2 15 31V28z"
|
||||
transform="matrix(0.9375,0,0,0.9375,15,-8.125)"
|
||||
/>
|
||||
<linearGradient id="gradient6" gradientUnits="userSpaceOnUse" x1="4" y1="-65" x2="50" y2="-65">
|
||||
<stop offset="0" stop-color="#c0d9ff"/>
|
||||
<stop offset="1" stop-color="#5e95e8"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient6)"
|
||||
d="M15 27C15 24.79 18.58 23 23 23C27.41 23 31 24.79 31 27C31 29.2 27.41 31 23 31C18.58 31 15 29.2 15 27z"
|
||||
transform="matrix(0.9375,0,0,0.9375,15,-8.125)"
|
||||
/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
1
assets/static/appico/Meal.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 122.88 115.21" style="enable-background:new 0 0 122.88 115.21" xml:space="preserve"><g><path d="M29.03,100.46l20.79-25.21l9.51,12.13L41,110.69C33.98,119.61,20.99,110.21,29.03,100.46L29.03,100.46z M53.31,43.05 c1.98-6.46,1.07-11.98-6.37-20.18L28.76,1c-2.58-3.03-8.66,1.42-6.12,5.09L37.18,24c2.75,3.34-2.36,7.76-5.2,4.32L16.94,9.8 c-2.8-3.21-8.59,1.03-5.66,4.7c4.24,5.1,10.8,13.43,15.04,18.53c2.94,2.99-1.53,7.42-4.43,3.69L6.96,18.32 c-2.19-2.38-5.77-0.9-6.72,1.88c-1.02,2.97,1.49,5.14,3.2,7.34L20.1,49.06c5.17,5.99,10.95,9.54,17.67,7.53 c1.03-0.31,2.29-0.94,3.64-1.77l44.76,57.78c2.41,3.11,7.06,3.44,10.08,0.93l0.69-0.57c3.4-2.83,3.95-8,1.04-11.34L50.58,47.16 C51.96,45.62,52.97,44.16,53.31,43.05L53.31,43.05z M65.98,55.65l7.37-8.94C63.87,23.21,99-8.11,116.03,6.29 C136.72,23.8,105.97,66,84.36,55.57l-8.73,11.09L65.98,55.65L65.98,55.65z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
7
assets/static/appico/Newspaper.svg
Normal file
@@ -0,0 +1,7 @@
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Transformed by: SVG Repo Mixer Tools -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512" xml:space="preserve" width="256px" height="256px" fill="#000000">
|
||||
|
||||
<g id="SVGRepo_bgCarrier" stroke-width="0"/>
|
||||
|
||||
|
After Width: | Height: | Size: 5.3 KiB |
7
assets/static/appico/Notepad.svg
Normal file
@@ -0,0 +1,7 @@
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Transformed by: SVG Repo Mixer Tools -->
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 493.474 493.474" xml:space="preserve" width="256px" height="256px" fill="#000000">
|
||||
|
||||
<g id="SVGRepo_bgCarrier" stroke-width="0"/>
|
||||
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
1
assets/static/appico/account-group.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12,5.5A3.5,3.5 0 0,1 15.5,9A3.5,3.5 0 0,1 12,12.5A3.5,3.5 0 0,1 8.5,9A3.5,3.5 0 0,1 12,5.5M5,8C5.56,8 6.08,8.15 6.53,8.42C6.38,9.85 6.8,11.27 7.66,12.38C7.16,13.34 6.16,14 5,14A3,3 0 0,1 2,11A3,3 0 0,1 5,8M19,8A3,3 0 0,1 22,11A3,3 0 0,1 19,14C17.84,14 16.84,13.34 16.34,12.38C17.2,11.27 17.62,9.85 17.47,8.42C17.92,8.15 18.44,8 19,8M5.5,18.25C5.5,16.18 8.41,14.5 12,14.5C15.59,14.5 18.5,16.18 18.5,18.25V20H5.5V18.25M0,20V18.5C0,17.11 1.89,15.94 4.45,15.6C3.86,16.28 3.5,17.22 3.5,18.25V20H0M24,20H20.5V18.25C20.5,17.22 20.14,16.28 19.55,15.6C22.11,15.94 24,17.11 24,18.5V20Z" /></svg>
|
||||
|
After Width: | Height: | Size: 655 B |
BIN
assets/static/appico/apple.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
assets/static/appico/application_enterprise.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
assets/static/appico/barcode.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
assets/static/appico/calendar.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
assets/static/appico/components.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
assets/static/appico/credit_cards.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
assets/static/appico/cup.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
assets/static/appico/edit.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
assets/static/appico/gear_edit.png
Normal file
|
After Width: | Height: | Size: 71 KiB |
BIN
assets/static/appico/house.png
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
assets/static/appico/message.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
assets/static/appico/piggy_bank.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
assets/static/appico/shelf.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
1
assets/static/appico/silverware-fork-knife.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M11,9H9V2H7V9H5V2H3V9C3,11.12 4.66,12.84 6.75,12.97V22H9.25V12.97C11.34,12.84 13,11.12 13,9V2H11V9M16,6V14H18.5V22H21V2C18.24,2 16,4.24 16,6Z" /></svg>
|
||||
|
After Width: | Height: | Size: 220 B |
BIN
assets/static/appico/users.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
assets/static/appico/view.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
assets/static/cash_flow.png
Normal file
|
After Width: | Height: | Size: 57 KiB |
20
assets/static/chart.umd.min.js
vendored
Normal file
474
assets/static/euskaditech-css/simple.css
Normal file
@@ -0,0 +1,474 @@
|
||||
html {
|
||||
color-scheme: light only;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
main {
|
||||
/*max-width: 45rem;
|
||||
margin: 0 auto;*/
|
||||
padding: 15px;
|
||||
margin: 0;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.supermesh-indicator {
|
||||
border-top-left-radius: 15px;
|
||||
background-color: greenyellow;
|
||||
border-top: 5px solid green;
|
||||
border-left: 5px solid green;
|
||||
padding: 15px;
|
||||
max-width: 30rem;
|
||||
position: fixed;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
color: black;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.supermesh-indicator a {
|
||||
color: blue;
|
||||
}
|
||||
|
||||
details.supermesh-indicator summary {
|
||||
font-size: unset;
|
||||
}
|
||||
|
||||
.link,
|
||||
a {
|
||||
color: blue;
|
||||
text-decoration: underline;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.link:hover,
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#articleID {
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
|
||||
.link,
|
||||
a {
|
||||
color: lightblue;
|
||||
}
|
||||
}
|
||||
|
||||
@media print {
|
||||
.supermesh-indicator,
|
||||
.no_print,
|
||||
.no_print * {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
button,
|
||||
.button {
|
||||
display: inline-block;
|
||||
padding: 5px 10px;
|
||||
background-color: beige;
|
||||
border: 2px solid black;
|
||||
font-size: 20px;
|
||||
margin: 3px;
|
||||
text-decoration: none;
|
||||
color: black;
|
||||
}
|
||||
|
||||
button:hover,
|
||||
.button:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* https://coolors.co/palette/ff0000-ff8700-ffd300-deff0a-a1ff0a-0aff99-0aefff-147df5-580aff-be0aff */
|
||||
.rojo {
|
||||
background: #ff0000;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn1 {
|
||||
background: #ff0000;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn2 {
|
||||
background: #ff8700;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn3 {
|
||||
background: #ffd300;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.btn4 {
|
||||
background: #deff0a;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.btn5 {
|
||||
background: #a1ff0a;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.btn6 {
|
||||
background: #0aff99;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.btn7 {
|
||||
background: #0aefff;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.btn8 {
|
||||
background: #147df5;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.nav-disabled {
|
||||
background: black !important;
|
||||
color: grey !important;
|
||||
}
|
||||
|
||||
.nav-disabled:hover {
|
||||
text-decoration: unset !important;
|
||||
}
|
||||
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
font-size: 18px;
|
||||
padding: 5px;
|
||||
width: calc(100% - 11px);
|
||||
}
|
||||
|
||||
input[type="checkbox"]{
|
||||
padding: 0;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
select {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
details input,
|
||||
details select,
|
||||
details textarea {
|
||||
font-size: 18px;
|
||||
padding: 5px;
|
||||
width: calc(100% - 15px);
|
||||
}
|
||||
|
||||
input[type="color"] {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
textarea {
|
||||
height: 150px;
|
||||
}
|
||||
|
||||
details summary {
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
thead tr {
|
||||
background-color: black;
|
||||
color: white;
|
||||
}
|
||||
|
||||
table {
|
||||
display: block;
|
||||
line-break: loose;
|
||||
width: fit-content;
|
||||
min-width: 750px;
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
table tr th {
|
||||
line-break: auto;
|
||||
padding: 2px 5px;
|
||||
}
|
||||
|
||||
table tr td {
|
||||
border-bottom: 3px solid black !important;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.scase {
|
||||
text-transform: lowercase;
|
||||
}
|
||||
|
||||
.scase:first-letter {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
table tr:hover td {
|
||||
text-decoration: underline;
|
||||
background: rgba(200, 200, 200, 0.5);
|
||||
/* color: black; */
|
||||
}
|
||||
|
||||
table tr:hover td.TextBorder {
|
||||
background: inherit;
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
max-width: 25rem;
|
||||
}
|
||||
|
||||
.TextBorder {
|
||||
color: black;
|
||||
text-shadow: -1px -1px 0 #fff, 1px -1px 0 #fff, -1px 1px 0 #fff,
|
||||
1px 1px 0 #fff;
|
||||
-webkit-text-stroke: 0.25px #fff;
|
||||
}
|
||||
|
||||
code {
|
||||
font-size: x-small;
|
||||
color: gray;
|
||||
}
|
||||
|
||||
.activeSCButton {
|
||||
border: 7px dashed beige;
|
||||
color: beige;
|
||||
background: black !important;
|
||||
}
|
||||
|
||||
.btn1.activeSCButton {
|
||||
border-color: #ff0000;
|
||||
color: #ff0000;
|
||||
}
|
||||
|
||||
.btn2.activeSCButton {
|
||||
border-color: #ff8700;
|
||||
color: #ff8700;
|
||||
}
|
||||
|
||||
.btn3.activeSCButton {
|
||||
border-color: #ffd300;
|
||||
color: #ffd300;
|
||||
}
|
||||
|
||||
.btn4.activeSCButton {
|
||||
border-color: #deff0a;
|
||||
color: #deff0a;
|
||||
}
|
||||
|
||||
.btn5.activeSCButton {
|
||||
border-color: #a1ff0a;
|
||||
color: #a1ff0a;
|
||||
}
|
||||
|
||||
.btn6.activeSCButton {
|
||||
border-color: #0aff99;
|
||||
color: #0aff99;
|
||||
}
|
||||
|
||||
.btn7.activeSCButton {
|
||||
border-color: #0aefff;
|
||||
color: #0aefff;
|
||||
}
|
||||
|
||||
.btn8.activeSCButton {
|
||||
border-color: #147df5;
|
||||
color: #147df5;
|
||||
}
|
||||
|
||||
hr {
|
||||
border-color: black;
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
#snackbar {
|
||||
visibility: hidden;
|
||||
/* min-width: 250px; */
|
||||
background-color: #333;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
border-radius: 2px;
|
||||
padding: 16px;
|
||||
position: fixed;
|
||||
z-index: 1;
|
||||
right: 70px;
|
||||
bottom: 25px;
|
||||
}
|
||||
|
||||
#snackbar a {
|
||||
color: lightblue;
|
||||
}
|
||||
|
||||
#snackbar.show {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.ribbon {
|
||||
display: flex;
|
||||
background: linear-gradient(to bottom, #d0d8ec, #eef2fa);
|
||||
border-bottom: 1px solid #a2a9b9;
|
||||
padding: 10px;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.ribbon-orb {
|
||||
width: 50px !important;
|
||||
height: 50px;
|
||||
border-radius: 50%;
|
||||
/* background: url(/icon512_maskable.png); */
|
||||
background-size: 50px 50px;
|
||||
background-position: center middle;
|
||||
border: 1px solid #a2a9b9;
|
||||
margin-right: 10px;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.ribbon-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
margin-top: 1px;
|
||||
width: calc(100% - 60px);
|
||||
}
|
||||
|
||||
.ribbon-tabs {
|
||||
display: flex;
|
||||
background: #c8d4eb;
|
||||
border: 1px solid #a2a9b9;
|
||||
height: 26px;
|
||||
align-items: center;
|
||||
padding: 0 5px;
|
||||
border-radius: 3px 3px 0 0;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.ribbon-tab {
|
||||
padding: 4px 9px;
|
||||
cursor: pointer;
|
||||
border-right: 1px solid #a2a9b9;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.ribbon-tab.active {
|
||||
background-color: #eaf0fb;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.ribbon-panel {
|
||||
display: flex;
|
||||
gap: 3px;
|
||||
background-color: #c8d4eb;
|
||||
border: 1px solid #a2a9b9;
|
||||
overflow-x: auto;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.ribbon-button {
|
||||
width: auto;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
background: none;
|
||||
border: none;
|
||||
color: black;
|
||||
white-space: nowrap;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 1px solid lightskyblue;
|
||||
background: white;
|
||||
padding: 4px;
|
||||
display: inline-block;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.ribbon-button img {
|
||||
height: 60px;
|
||||
display: block;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.ribbon-button .label {
|
||||
font-size: 12px;
|
||||
margin-top: 5px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.ribbon-button.orange {
|
||||
background-color: orange;
|
||||
border-radius: 3px;
|
||||
padding: 2px;
|
||||
box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
|
||||
details {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
details[open] .ribbon-panel {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
details:not([open]) .ribbon-panel {
|
||||
display: none;
|
||||
}
|
||||
|
||||
fieldset legend {
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
}
|
||||
pre {
|
||||
font-size: 15px;
|
||||
}
|
||||
.picto {
|
||||
min-height: 125px;
|
||||
width: 100px;
|
||||
border: 2.5px solid black;
|
||||
border-radius: 5px;
|
||||
text-align: center;
|
||||
background: white;
|
||||
margin-bottom: 20px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
.picto b {
|
||||
padding-top: 40px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.panel-option input {
|
||||
display: none;
|
||||
}
|
||||
.panel-option:has(input:checked) {
|
||||
background-color: #ccc;
|
||||
outline: 5px solid blue;
|
||||
}
|
||||
|
||||
.saveico {
|
||||
border-color: green !important;
|
||||
}
|
||||
.delico {
|
||||
border-color: red !important;
|
||||
}
|
||||
.opicon {
|
||||
border-color: blue !important;
|
||||
}
|
||||
.saveico img, .delico img, .opicon img {
|
||||
height: 52px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.saveico, .delico, .opicon {
|
||||
padding: 2.5px 7.5px;
|
||||
background: transparent;
|
||||
border-radius: 10px;
|
||||
border: 4px solid;
|
||||
}
|
||||
BIN
assets/static/exchange.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
assets/static/exit.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
assets/static/find.png
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
assets/static/floppy_disk_green.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
assets/static/garbage.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.5 KiB |
2
assets/static/ico/almond.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path fill="#000000" d="M428.3 27.27c-5 0-10.3.34-15.9.95-11 17-20.9 33.24-23.5 48.93l-17.8-2.94c2.5-15.07 9.2-28.82 17.1-41.86-.9.19-1.7.36-2.6.57-36.2 8.57-79.3 26.23-122.5 49.46-5.4 2.89-10.8 5.88-16.1 8.94-.8 4.97-1.8 10.98-3.1 17.58-3.2 16.3-7.8 35.2-16.8 48.1-11.5 16.2-32.6 30.4-51.2 41.6-18.6 11.2-34.7 18.9-34.7 18.9l-7.8-16.2s15.4-7.4 33.2-18.1c17.8-10.8 37.8-25.4 45.7-36.6 5.6-7.9 10.9-25.8 14-41.2.1-.7.3-1.4.4-2.1-73.3 44.9-141.29 103.3-171.34 154.8-15.1 26-23.44 58.6-23.11 90.8 13.76-26.2 29.02-52.8 54.31-77.8l12.66 12.8C68.79 314 53.9 347.3 35.71 381.3c5.89 28.2 19.41 53.8 41.59 71.8 4.04 3.3 8.49 6.4 13.29 9.2 1.75-6.2 4.27-14.6 7.45-23.7 6.46-18.5 14.86-39.8 27.26-53 15-15.9 35.8-21.4 54.5-27 18.7-5.5 35.2-11 45.2-22.6 9.3-11 17.9-36.1 23-57.9 5.1-21.7 7.4-40.2 7.4-40.2l17.8 2.2s-2.3 19.3-7.7 42.1c-5.3 22.8-12.9 49.1-26.9 65.4-14.2 16.7-34.9 22.7-53.7 28.3-18.8 5.6-35.9 10.9-46.4 22.1-8.2 8.7-17.4 28.9-23.5 46.5-3.7 10.7-6.4 20-8 25.9 14.1 5.9 30.1 10 46.8 12.3 9-14.4 16.6-22.2 30.1-76.9l17.4 4.4c-11.6 46.7-19.8 62.2-27.4 74.3 36.2 1.6 73.4-5.3 100-19.7 75.3-41.2 138.2-140.1 173.7-233.8 6.8-17.9 12.5-35.6 17.3-52.7-17.9 15.3-32.8 32-41.1 53.1l-16.8-6.6c13-32.8 38.2-55.4 65-75.5 3.5-16.6 5.9-32.2 7-46.3.5-6.82.8-13.29.7-19.34-6.5 3.66-13.9 7.91-21.7 12.71-24.4 15.03-51.9 35.33-62.8 51.93-5.1 7.7-6 18.9-6.7 31.9-.7 13.1-1 27.9-9.6 41-7.8 12-19.9 18.2-30.5 23.7-10.6 5.5-19.8 10.5-25 17.4-10.3 13.6-20.8 41-27.9 64.4-7.2 23.3-11.4 42.8-11.4 42.8l-17.6-3.8s4.4-20.2 11.8-44.3c7.3-24.1 17.3-52.1 30.7-69.9 8.5-11.3 20.6-17.1 31.1-22.5 10.4-5.5 19.1-10.5 23.8-17.6 5-7.8 6-19.1 6.6-32.1.7-13 1.1-27.9 9.7-40.9v-.1c14.5-21.8 43.1-41.68 68.4-57.25 11.1-6.84 21.4-12.65 29.7-17.11-.3-1.99-.7-3.9-1.1-5.71-2.6-11.57-7-18.85-12-22.32-7.3-5.12-18.1-8.01-31.7-8.55-1.7-.1-3.4-.1-5.2-.1zm-113 58.9l17.4 4.5s-4.1 15.83-10.7 34.63c-6.7 18.9-15.4 40.6-27.3 54.4-20.7 24.3-49.8 36.9-77.5 49-27.7 12.1-54 23.9-71.7 43.8v.1c-13.8 15.6-28.7 47.3-39.3 74.5-10.73 27.3-17.58 50.2-17.58 50.2l-17.24-5.2s7.04-23.5 18.02-51.5c11-28 25.4-60.4 42.7-79.9 21-24 50.2-36.3 77.9-48.5 27.7-12.1 53.8-23.9 71.1-44.1 8.2-9.7 17.5-30.7 23.9-48.8 6.4-18 10.3-33.13 10.3-33.13zM197.6 273.2l17.8 2.6c-2.8 19.4-11.8 33.8-23.2 44.2-11.4 10.3-25 17.1-37.9 23.5l-8-16c12.8-6.5 24.8-12.7 33.8-20.9 9-8.1 15.3-17.8 17.5-33.4zm180.3 7.3l16.4 7.2s-9.6 22-23.6 47.7c-14 25.8-31.9 55.4-51 72.3-13.6 12.1-35 21.6-53.6 28.9-18.6 7.4-34.2 12.1-34.2 12.1l-5.2-17.2s15-4.5 32.8-11.6c17.8-7 38.6-17 48.2-25.6 15.3-13.5 33.5-42.4 47.2-67.4 13.6-25.1 23-46.4 23-46.4z"/></svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.0 KiB |
|
Before Width: | Height: | Size: 210 KiB After Width: | Height: | Size: 210 KiB |
|
Before Width: | Height: | Size: 884 B After Width: | Height: | Size: 884 B |
|
Before Width: | Height: | Size: 653 B After Width: | Height: | Size: 653 B |
|
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 246 B After Width: | Height: | Size: 246 B |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |