diff --git a/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/68f57fbb84e7058b7509edef0d5b09bf/meta.json b/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/68f57fbb84e7058b7509edef0d5b09bf/meta.json
new file mode 100644
index 0000000..7254d71
--- /dev/null
+++ b/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/68f57fbb84e7058b7509edef0d5b09bf/meta.json
@@ -0,0 +1 @@
+{"creation_dt": "2025-02-18T14:08:30Z", "creation_host": "d9ae498e3528"}
\ No newline at end of file
diff --git a/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/68f57fbb84e7058b7509edef0d5b09bf/private_key.json b/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/68f57fbb84e7058b7509edef0d5b09bf/private_key.json
new file mode 100644
index 0000000..fa0f91d
--- /dev/null
+++ b/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/68f57fbb84e7058b7509edef0d5b09bf/private_key.json
@@ -0,0 +1 @@
+{"n": "uQiCR4LsrI4pn5LDm-WaCTHk49WaklEl_VDuYyLwlexMHPhOYwRuOy-aOXiC1LWtbs9QEl8dxricHe_uKH0YXYqfa971sI9NSmmshCJbdlJ7C_5M2maCYlaA_Wt7g-98lvrGVVOCBPfThpT8_-wKdxG6kQamrbrhPCdOn7zHrDoHWWHltLG62flSb2Y-j8xQIvd8LDFa3hsZR9xh98VWoaCb5XpVowbWnUKLpNWYicPAmSUYo3Do5-nJN5Iis6P0knWDh_H2Hh88NEiRqj3zt2TwQ0PSE5zo98n3fIg8hRdvF3lZR82023T6wm-XARDJreol9WDp0cmlkbTOm7m1JQ", "e": "AQAB", "d": "RNgloPXVmV5LnlO89AQ5i7JEt4CCQm5u9BFooPofCakhqKW6hJzhZqQPfdKY2wu9u7zmze8V5RpK-9iJhAcHScaKCliqkUbAOy-WQJOH9D48CfpUHe6GFJCa7a9QBYbVlFc59AVeGvsaeLh2acIpIqQ2Bj-zRHCD3R3C4ywaHrnVYq9iCQeOEIJ9VMpydNntvpVMpeT341_EGimp4ZTEMME9XZ35ipFC9arVEGUD_pWjJWZMWUB2Zm52fBEvFk1_7cWLIOErzFQUltWI8I7RaZgKe7MshTA0nl3XIBok3m0lpRfu4Jo8JkIMA2LDFYZf0G0PmeTcLcNkfMQ5ubXJ", "p": "9V9VnnY4JDHAGpvSDLM69-soXUdkIB8XKHMlyACMrixd2F9JT4EqQMjrPQGpLzolJ53CcBVheVZat5EgUansrigSYPlvflmUm9M5t55JUzvQMSxS1Mmo2Jp1SeBD3rD0BblZpVwFUhGB34uXFax0VLhRbDTc_qxDlJ8cRFZR4w0", "q": "wQwjvuy8iaNYpx7AdxOI6xw6gmNF3JcfvyxA-UJ9eAWqbTHqOsm6LPAUrMF4y7V7TceMd4KA00aW1A8u2AO0Wp9pQbu8HpjeRThNAaAzGCnYEC8nqg0t6emRQswgs-lzU6zDcM7LcZDbD7wQ4NLVAn6IQ2v5m6o7SrsSQbnR9Hk", "dp": "xVzbV0wruCE0LbLr7z8yzTsfCnhj9tpLHEQSPZ8DiQ0yptlt9D8mp1l0rWtqlAwm2oiwXsszzg9BhKl833LYZvTgY5P-tBiFyhjKMgFlZUeVHBhUv8c8wozqjnOO485dWUVO8AzmUq62UgLLkalXINXo2CplH4ucCC065VSxJPk", "dq": "BGCQFu4rQDux8OgjmQ-aVSposTgrB1tt3tnUB1LYoXYPbTZqhza3v_kZnuksIgJVb2gM6VDONvwsw1Ysy70Zw8xFiLYHB_KTZ6JlLJpDTlL0kTlgftyZo-ol3wvd2fZ7JPSP4ejud_6-2NZ803w0VEAmOtEh8cOkYIdpXJAoEJE", "qi": "1U3jgUeGrL7QS-R3SjEZty64_YCBmJXaDHDBny1uUcAl7giGmVqFdtfMoYgHGUcq7fYyRFv3BfUL3Uch8MH3XklLBrU_nXjYGqTxi0dLrA3WlSkbvgBWHcF3oegEdDR31mPt7-VIyNtzg3CagOnAL0Hvk3h9HWg8YO326L8i3FU", "kty": "RSA"}
\ No newline at end of file
diff --git a/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/68f57fbb84e7058b7509edef0d5b09bf/regr.json b/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/68f57fbb84e7058b7509edef0d5b09bf/regr.json
new file mode 100644
index 0000000..ddb9775
--- /dev/null
+++ b/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/68f57fbb84e7058b7509edef0d5b09bf/regr.json
@@ -0,0 +1 @@
+{"body": {}, "uri": "https://acme-v02.api.letsencrypt.org/acme/acct/2236033565"}
\ No newline at end of file
diff --git a/compose.yaml b/compose.yaml
index 5c071b8..cd6af6b 100644
--- a/compose.yaml
+++ b/compose.yaml
@@ -24,9 +24,6 @@ services:
website_net:
ipv4_address: "88.88.5.2"
- expose:
- - "8006"
-
# volumes:
# - /home/victor/git/website/minishell/linux-minishell/alpine-custom.iso:/boot.iso
@@ -41,19 +38,36 @@ services:
# networks:
# - website_net
- nginx:
- container_name: "nginx"
+ nginx-site:
+ container_name: "nginx-site"
restart: always
build:
context: ./nginx
dockerfile: Dockerfile
+ volumes:
+ - ./nginx/nginx.conf:/etc/nginx/nginx.conf
+ - ./certbot/conf:/etc/letsencrypt:ro
+ - ./certbot/www:/var/www/certbot:ro
+
networks:
website_net:
ipv4_address: "88.88.5.1"
ports:
- - "19001:80"
+ - 80:80
+ - 443:443
+
+ certbot:
+ image: certbot/certbot
+ container_name: "certbot-site"
+
+ volumes:
+ - ./certbot/conf:/etc/letsencrypt:rw
+ - ./certbot/www/:/var/www/certbot/:rw
+
+
+ command: certonly --webroot --webroot-path /var/www/certbot --force-renewal --email victorvobis@protonmail.com -d remoteserver.vps.webdock.cloud --agree-tos
website:
container_name: "site"
@@ -66,9 +80,6 @@ services:
website_net:
ipv4_address: "88.88.5.3"
- expose:
- - "3000"
-
networks:
website_net:
# external: false
diff --git a/index.html b/index.html
deleted file mode 100644
index 3268b35..0000000
--- a/index.html
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
->
diff --git a/misc/deploy.sh b/misc/deploy.sh
new file mode 100755
index 0000000..28976e0
--- /dev/null
+++ b/misc/deploy.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+cd ..
+
+
+# reset server_website directory
+rm -rf server_website
+ssh server rm -rf website
+mkdir -p server_website/{minishell,vvsite/{target,debug}}
+
+# Build server binary
+cd vvsite && cargo leptos build
+cp -r target/site ../server_website/vvsite/target
+cp -r target/debug Dockerfile Cargo.toml ../server_website/vvsite/target/
+
+
+# Build minishell files
+cd ../minishell
+make -C minishell_src
+cp -r ./minishell_src/bin ./Dockerfile ./entrypoint.sh ../server_website/minishell
+
+# Copy to server
+cd ..
+cp -r ./nginx ./compose.yaml server_website
+
+scp -r server_website server:/home/victor/website
+
diff --git a/run.sh b/misc/run.sh
similarity index 100%
rename from run.sh
rename to misc/run.sh
diff --git a/sources.txt b/misc/sources.txt
similarity index 100%
rename from sources.txt
rename to misc/sources.txt
diff --git a/nginx/nginx.conf b/nginx/nginx.conf
index 9ae6e72..75ae806 100644
--- a/nginx/nginx.conf
+++ b/nginx/nginx.conf
@@ -15,51 +15,67 @@ events {
http {
- include mime.types;
- default_type application/octet-stream;
+ limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;
+ server {
+ listen 80;
+ listen [::]:80;
- #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
- # '$status $body_bytes_sent "$http_referer" '
- # '"$http_user_agent" "$http_x_forwarded_for"';
+ charset utf-8;
- #access_log logs/access.log main;
+ server_name victorvobis www.victorvobis.mooo.com;
+ server_tokens off;
- sendfile on;
- #tcp_nopush on;
+ location /.well-known/acme-challenge/ {
+ limit_req zone=one burst=10 nodelay;
+ root /var/www/certbot;
+ }
+ return 301 https://$host$request_uri;
- #keepalive_timeout 0;
- keepalive_timeout 65;
+ }
- #gzip on;
+ server {
+ listen 80;
+ listen [::]:80;
- server {
- listen 80;
- server_name localhost;
+ charset utf-8;
- #charset koi8-r;
+ server_name remoteserver www.remoteserver.vps.webdock.cloud;
+ server_tokens off;
- #access_log logs/host.access.log main;
+ location /.well-known/acme-challenge/ {
+ limit_req zone=one burst=10 nodelay;
+ root /var/www/certbot;
+ }
+ return 301 https://$host$request_uri;
- root /server;
+ }
+ server {
- location /minishell/vnc {
- proxy_pass http://minishell:8006/;
- proxy_http_version 1.1;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "upgrade";
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
- location / {
- proxy_pass http://website:3000/;
- proxy_http_version 1.1;
- # proxy_set_header Upgrade $http_upgrade;
- # proxy_set_header Connection "upgrade";
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
+ listen 443 ssl;
+
+ ssl_certificate /etc/letsencrypt/live/remoteserver.vps.webdock.cloud/fullchain.pem;
+ ssl_certificate_key /etc/letsencrypt/live/remoteserver.vps.webdock.cloud/privkey.pem;
+
+ location /minishell/vnc {
+ proxy_pass http://88.88.5.2:8006/;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
+
+ location / {
+ proxy_pass http://88.88.5.3:3000/;
+ proxy_http_version 1.1;
+ # proxy_set_header Upgrade $http_upgrade;
+ # proxy_set_header Connection "upgrade";
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
+ }
#error_page 404 /404.html;
@@ -86,8 +102,8 @@ http {
#location ~ /\.ht {
# deny all;
#}
- }
+ #access_log logs/host.access.log main;
# another virtual host using mix of IP-, name-, and port-based configuration
#
diff --git a/server_website/compose.yaml b/server_website/compose.yaml
new file mode 100644
index 0000000..1a8f818
--- /dev/null
+++ b/server_website/compose.yaml
@@ -0,0 +1,92 @@
+services:
+ minishell:
+ container_name: "minishell"
+ # image: qemux/qemu-docker
+ restart: always
+ build:
+ context: ./minishell
+ dockerfile: Dockerfile
+
+ cap_drop:
+ - ALL
+ cap_add:
+ - SETGID
+ - FSETID
+ - SETUID
+
+ # Prevents gaining new privileges
+ devices:
+ - /dev/kvm
+ security_opt:
+ - no-new-privileges
+
+ networks:
+ website_net:
+ ipv4_address: "88.88.5.2"
+
+ # volumes:
+ # - /home/victor/git/website/minishell/linux-minishell/alpine-custom.iso:/boot.iso
+
+ # environment:
+ # DISK_SIZE: "1GB"
+ # RAM_SIZE: "500MB"
+ # ARGUMENTS: "-boot d"
+ # DEBUG: "1"
+ # BOOT_MODE: "legacy"
+ # BOOT: "https://dl-cdn.alpinelinux.org/alpine/v3.21/releases/x86_64/alpine-virt-3.21.3-x86_64.iso"
+
+ # networks:
+ # - website_net
+
+ certbot:
+ image: certbot/certbot
+ container_name: "certbot-site"
+ restart: always
+
+ volumes:
+ - ./certbot/conf:/etc/letsencrypt
+ - ./certbot/www:/var/www/certbot
+
+ command: certonly --webroot -w /var/www/certbot --force-renewal --email victorvobis@protonmail.com -d victorvobis.mooo.com --agree-tos
+
+ nginx-site:
+ container_name: "nginx-site"
+ restart: always
+ build:
+ context: ./nginx
+ dockerfile: Dockerfile
+
+ volumes:
+ - ./nginx/nginx.conf:/etc/nginc/nginx.conf
+ - ./certbot/conf:/etc/letsencrypt
+ - ./certbot/www:/var/www/certbot
+
+ depends_on:
+ - "minishell"
+ - "website"
+ networks:
+ website_net:
+ ipv4_address: "88.88.5.1"
+
+ ports:
+ - 8080:80
+
+ website:
+ container_name: "site"
+ restart: always
+ build:
+ context: ./vvsite
+ dockerfile: Dockerfile
+
+ networks:
+ website_net:
+ ipv4_address: "88.88.5.3"
+
+networks:
+ website_net:
+ # external: false
+ # internal: true
+ driver: bridge
+ ipam:
+ config:
+ - subnet: "88.88.0.0/21"
diff --git a/server_website/minishell/Dockerfile b/server_website/minishell/Dockerfile
new file mode 100644
index 0000000..f869763
--- /dev/null
+++ b/server_website/minishell/Dockerfile
@@ -0,0 +1,19 @@
+FROM alpine:edge
+ENV USERNAME="shelluser" \
+ PASSWORD="" \
+ SUDO_OK="false" \
+ AUTOLOGIN="true" \
+ TZ="Etc/UTC"
+
+COPY ./entrypoint.sh /
+COPY --chmod=011 minishell_src/bin/minishell /bin/minishell
+
+RUN apk update && \
+ apk add --no-cache tini ttyd tzdata vim nano && \
+ chmod 700 /entrypoint.sh && \
+ touch /etc/.firstrun && \
+ ln -s "/usr/share/zoneinfo/$TZ" /etc/localtime && \
+ echo $TZ > /etc/timezone
+
+ENTRYPOINT ["/sbin/tini", "--"]
+CMD ["/entrypoint.sh"]
diff --git a/server_website/minishell/bin/minishell b/server_website/minishell/bin/minishell
new file mode 100755
index 0000000..f832fbd
Binary files /dev/null and b/server_website/minishell/bin/minishell differ
diff --git a/server_website/minishell/entrypoint.sh b/server_website/minishell/entrypoint.sh
new file mode 100644
index 0000000..20955f3
--- /dev/null
+++ b/server_website/minishell/entrypoint.sh
@@ -0,0 +1,54 @@
+#!/bin/sh
+set -e
+#set -x
+
+TTYD_ARGS="login"
+
+# Check if this is the container's first run
+if [ -f /etc/.firstrun ]; then
+ # Create user account
+ echo >> /etc/shells /bin/minishell
+ adduser -D --shell=/bin/sh $USERNAME
+ echo "#!/bin/sh
+ trap '' SIGINT
+ while :
+ do
+ echo "*** Starting Minishell ***"
+ minishell
+ done" >> /home/$USERNAME/.runshell.sh
+ chmod +x /home/$USERNAME/.runshell.sh
+ echo >> /home/$USERNAME/.profile "./.runshell.sh"
+
+ # Add a password to the user
+ echo "$USERNAME:$PASSWORD" | chpasswd
+
+ # Allow access to sudo if permitted
+ if [ $SUDO_OK == "true" ]; then
+ addgroup $USERNAME wheel
+ sed -i '/%wheel ALL=(ALL) ALL/s/^# //g' /etc/sudoers
+ fi
+
+ # Prevent this from running again
+ rm /etc/.firstrun
+fi
+
+# Optionally set a timezone
+CURRENT_TZ=$(cat /etc/timezone)
+if [ "$TZ" != "$CURRENT_TZ" ]; then
+ echo "Setting timezone to $TZ"
+
+ # delete symlink if it exists
+ [ -f /etc/localtime ] && rm /etc/localtime
+
+ # set timezone
+ ln -s "/usr/share/zoneinfo/$TZ" /etc/localtime
+ echo $TZ > /etc/timezone
+fi
+
+# Auto login the user, if allowed
+[ $AUTOLOGIN == "true" ] && TTYD_ARGS="$TTYD_ARGS -f $USERNAME"
+
+passwd -l root
+
+# Start ttyd
+exec ttyd -W -m 5 -p 8006 $TTYD_ARGS
diff --git a/nginx/Dockerfile b/server_website/nginx/Dockerfile
similarity index 73%
rename from nginx/Dockerfile
rename to server_website/nginx/Dockerfile
index 21d08ba..16f6d69 100644
--- a/nginx/Dockerfile
+++ b/server_website/nginx/Dockerfile
@@ -2,7 +2,7 @@ FROM nginx
WORKDIR /server
-COPY ./nginx.conf /etc/nginx/nginx.conf
+# COPY ./nginx.conf /etc/nginx/nginx.conf
COPY ./html /server/html
COPY ./index.html /server
diff --git a/server_website/nginx/html/css/output.css b/server_website/nginx/html/css/output.css
new file mode 100644
index 0000000..891da29
--- /dev/null
+++ b/server_website/nginx/html/css/output.css
@@ -0,0 +1,758 @@
+/*! tailwindcss v4.0.6 | MIT License | https://tailwindcss.com */
+@layer theme, base, components, utilities;
+@layer theme {
+ :root, :host {
+ --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
+ "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;
+ --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
+ "Courier New", monospace;
+ --color-red-50: oklch(0.971 0.013 17.38);
+ --color-red-100: oklch(0.936 0.032 17.717);
+ --color-red-200: oklch(0.885 0.062 18.334);
+ --color-red-300: oklch(0.808 0.114 19.571);
+ --color-red-400: oklch(0.704 0.191 22.216);
+ --color-red-500: oklch(0.637 0.237 25.331);
+ --color-red-600: oklch(0.577 0.245 27.325);
+ --color-red-700: oklch(0.505 0.213 27.518);
+ --color-red-800: oklch(0.444 0.177 26.899);
+ --color-red-900: oklch(0.396 0.141 25.723);
+ --color-red-950: oklch(0.258 0.092 26.042);
+ --color-orange-50: oklch(0.98 0.016 73.684);
+ --color-orange-100: oklch(0.954 0.038 75.164);
+ --color-orange-200: oklch(0.901 0.076 70.697);
+ --color-orange-300: oklch(0.837 0.128 66.29);
+ --color-orange-400: oklch(0.75 0.183 55.934);
+ --color-orange-500: oklch(0.705 0.213 47.604);
+ --color-orange-600: oklch(0.646 0.222 41.116);
+ --color-orange-700: oklch(0.553 0.195 38.402);
+ --color-orange-800: oklch(0.47 0.157 37.304);
+ --color-orange-900: oklch(0.408 0.123 38.172);
+ --color-orange-950: oklch(0.266 0.079 36.259);
+ --color-amber-50: oklch(0.987 0.022 95.277);
+ --color-amber-100: oklch(0.962 0.059 95.617);
+ --color-amber-200: oklch(0.924 0.12 95.746);
+ --color-amber-300: oklch(0.879 0.169 91.605);
+ --color-amber-400: oklch(0.828 0.189 84.429);
+ --color-amber-500: oklch(0.769 0.188 70.08);
+ --color-amber-600: oklch(0.666 0.179 58.318);
+ --color-amber-700: oklch(0.555 0.163 48.998);
+ --color-amber-800: oklch(0.473 0.137 46.201);
+ --color-amber-900: oklch(0.414 0.112 45.904);
+ --color-amber-950: oklch(0.279 0.077 45.635);
+ --color-yellow-50: oklch(0.987 0.026 102.212);
+ --color-yellow-100: oklch(0.973 0.071 103.193);
+ --color-yellow-200: oklch(0.945 0.129 101.54);
+ --color-yellow-300: oklch(0.905 0.182 98.111);
+ --color-yellow-400: oklch(0.852 0.199 91.936);
+ --color-yellow-500: oklch(0.795 0.184 86.047);
+ --color-yellow-600: oklch(0.681 0.162 75.834);
+ --color-yellow-700: oklch(0.554 0.135 66.442);
+ --color-yellow-800: oklch(0.476 0.114 61.907);
+ --color-yellow-900: oklch(0.421 0.095 57.708);
+ --color-yellow-950: oklch(0.286 0.066 53.813);
+ --color-lime-50: oklch(0.986 0.031 120.757);
+ --color-lime-100: oklch(0.967 0.067 122.328);
+ --color-lime-200: oklch(0.938 0.127 124.321);
+ --color-lime-300: oklch(0.897 0.196 126.665);
+ --color-lime-400: oklch(0.841 0.238 128.85);
+ --color-lime-500: oklch(0.768 0.233 130.85);
+ --color-lime-600: oklch(0.648 0.2 131.684);
+ --color-lime-700: oklch(0.532 0.157 131.589);
+ --color-lime-800: oklch(0.453 0.124 130.933);
+ --color-lime-900: oklch(0.405 0.101 131.063);
+ --color-lime-950: oklch(0.274 0.072 132.109);
+ --color-green-50: oklch(0.982 0.018 155.826);
+ --color-green-100: oklch(0.962 0.044 156.743);
+ --color-green-200: oklch(0.925 0.084 155.995);
+ --color-green-300: oklch(0.871 0.15 154.449);
+ --color-green-400: oklch(0.792 0.209 151.711);
+ --color-green-500: oklch(0.723 0.219 149.579);
+ --color-green-600: oklch(0.627 0.194 149.214);
+ --color-green-700: oklch(0.527 0.154 150.069);
+ --color-green-800: oklch(0.448 0.119 151.328);
+ --color-green-900: oklch(0.393 0.095 152.535);
+ --color-green-950: oklch(0.266 0.065 152.934);
+ --color-emerald-50: oklch(0.979 0.021 166.113);
+ --color-emerald-100: oklch(0.95 0.052 163.051);
+ --color-emerald-200: oklch(0.905 0.093 164.15);
+ --color-emerald-300: oklch(0.845 0.143 164.978);
+ --color-emerald-400: oklch(0.765 0.177 163.223);
+ --color-emerald-500: oklch(0.696 0.17 162.48);
+ --color-emerald-600: oklch(0.596 0.145 163.225);
+ --color-emerald-700: oklch(0.508 0.118 165.612);
+ --color-emerald-800: oklch(0.432 0.095 166.913);
+ --color-emerald-900: oklch(0.378 0.077 168.94);
+ --color-emerald-950: oklch(0.262 0.051 172.552);
+ --color-teal-50: oklch(0.984 0.014 180.72);
+ --color-teal-100: oklch(0.953 0.051 180.801);
+ --color-teal-200: oklch(0.91 0.096 180.426);
+ --color-teal-300: oklch(0.855 0.138 181.071);
+ --color-teal-400: oklch(0.777 0.152 181.912);
+ --color-teal-500: oklch(0.704 0.14 182.503);
+ --color-teal-600: oklch(0.6 0.118 184.704);
+ --color-teal-700: oklch(0.511 0.096 186.391);
+ --color-teal-800: oklch(0.437 0.078 188.216);
+ --color-teal-900: oklch(0.386 0.063 188.416);
+ --color-teal-950: oklch(0.277 0.046 192.524);
+ --color-cyan-50: oklch(0.984 0.019 200.873);
+ --color-cyan-100: oklch(0.956 0.045 203.388);
+ --color-cyan-200: oklch(0.917 0.08 205.041);
+ --color-cyan-300: oklch(0.865 0.127 207.078);
+ --color-cyan-400: oklch(0.789 0.154 211.53);
+ --color-cyan-500: oklch(0.715 0.143 215.221);
+ --color-cyan-600: oklch(0.609 0.126 221.723);
+ --color-cyan-700: oklch(0.52 0.105 223.128);
+ --color-cyan-800: oklch(0.45 0.085 224.283);
+ --color-cyan-900: oklch(0.398 0.07 227.392);
+ --color-cyan-950: oklch(0.302 0.056 229.695);
+ --color-sky-50: oklch(0.977 0.013 236.62);
+ --color-sky-100: oklch(0.951 0.026 236.824);
+ --color-sky-200: oklch(0.901 0.058 230.902);
+ --color-sky-300: oklch(0.828 0.111 230.318);
+ --color-sky-400: oklch(0.746 0.16 232.661);
+ --color-sky-500: oklch(0.685 0.169 237.323);
+ --color-sky-600: oklch(0.588 0.158 241.966);
+ --color-sky-700: oklch(0.5 0.134 242.749);
+ --color-sky-800: oklch(0.443 0.11 240.79);
+ --color-sky-900: oklch(0.391 0.09 240.876);
+ --color-sky-950: oklch(0.293 0.066 243.157);
+ --color-blue-50: oklch(0.97 0.014 254.604);
+ --color-blue-100: oklch(0.932 0.032 255.585);
+ --color-blue-200: oklch(0.882 0.059 254.128);
+ --color-blue-300: oklch(0.809 0.105 251.813);
+ --color-blue-400: oklch(0.707 0.165 254.624);
+ --color-blue-500: oklch(0.623 0.214 259.815);
+ --color-blue-600: oklch(0.546 0.245 262.881);
+ --color-blue-700: oklch(0.488 0.243 264.376);
+ --color-blue-800: oklch(0.424 0.199 265.638);
+ --color-blue-900: oklch(0.379 0.146 265.522);
+ --color-blue-950: oklch(0.282 0.091 267.935);
+ --color-indigo-50: oklch(0.962 0.018 272.314);
+ --color-indigo-100: oklch(0.93 0.034 272.788);
+ --color-indigo-200: oklch(0.87 0.065 274.039);
+ --color-indigo-300: oklch(0.785 0.115 274.713);
+ --color-indigo-400: oklch(0.673 0.182 276.935);
+ --color-indigo-500: oklch(0.585 0.233 277.117);
+ --color-indigo-600: oklch(0.511 0.262 276.966);
+ --color-indigo-700: oklch(0.457 0.24 277.023);
+ --color-indigo-800: oklch(0.398 0.195 277.366);
+ --color-indigo-900: oklch(0.359 0.144 278.697);
+ --color-indigo-950: oklch(0.257 0.09 281.288);
+ --color-violet-50: oklch(0.969 0.016 293.756);
+ --color-violet-100: oklch(0.943 0.029 294.588);
+ --color-violet-200: oklch(0.894 0.057 293.283);
+ --color-violet-300: oklch(0.811 0.111 293.571);
+ --color-violet-400: oklch(0.702 0.183 293.541);
+ --color-violet-500: oklch(0.606 0.25 292.717);
+ --color-violet-600: oklch(0.541 0.281 293.009);
+ --color-violet-700: oklch(0.491 0.27 292.581);
+ --color-violet-800: oklch(0.432 0.232 292.759);
+ --color-violet-900: oklch(0.38 0.189 293.745);
+ --color-violet-950: oklch(0.283 0.141 291.089);
+ --color-purple-50: oklch(0.977 0.014 308.299);
+ --color-purple-100: oklch(0.946 0.033 307.174);
+ --color-purple-200: oklch(0.902 0.063 306.703);
+ --color-purple-300: oklch(0.827 0.119 306.383);
+ --color-purple-400: oklch(0.714 0.203 305.504);
+ --color-purple-500: oklch(0.627 0.265 303.9);
+ --color-purple-600: oklch(0.558 0.288 302.321);
+ --color-purple-700: oklch(0.496 0.265 301.924);
+ --color-purple-800: oklch(0.438 0.218 303.724);
+ --color-purple-900: oklch(0.381 0.176 304.987);
+ --color-purple-950: oklch(0.291 0.149 302.717);
+ --color-fuchsia-50: oklch(0.977 0.017 320.058);
+ --color-fuchsia-100: oklch(0.952 0.037 318.852);
+ --color-fuchsia-200: oklch(0.903 0.076 319.62);
+ --color-fuchsia-300: oklch(0.833 0.145 321.434);
+ --color-fuchsia-400: oklch(0.74 0.238 322.16);
+ --color-fuchsia-500: oklch(0.667 0.295 322.15);
+ --color-fuchsia-600: oklch(0.591 0.293 322.896);
+ --color-fuchsia-700: oklch(0.518 0.253 323.949);
+ --color-fuchsia-800: oklch(0.452 0.211 324.591);
+ --color-fuchsia-900: oklch(0.401 0.17 325.612);
+ --color-fuchsia-950: oklch(0.293 0.136 325.661);
+ --color-pink-50: oklch(0.971 0.014 343.198);
+ --color-pink-100: oklch(0.948 0.028 342.258);
+ --color-pink-200: oklch(0.899 0.061 343.231);
+ --color-pink-300: oklch(0.823 0.12 346.018);
+ --color-pink-400: oklch(0.718 0.202 349.761);
+ --color-pink-500: oklch(0.656 0.241 354.308);
+ --color-pink-600: oklch(0.592 0.249 0.584);
+ --color-pink-700: oklch(0.525 0.223 3.958);
+ --color-pink-800: oklch(0.459 0.187 3.815);
+ --color-pink-900: oklch(0.408 0.153 2.432);
+ --color-pink-950: oklch(0.284 0.109 3.907);
+ --color-rose-50: oklch(0.969 0.015 12.422);
+ --color-rose-100: oklch(0.941 0.03 12.58);
+ --color-rose-200: oklch(0.892 0.058 10.001);
+ --color-rose-300: oklch(0.81 0.117 11.638);
+ --color-rose-400: oklch(0.712 0.194 13.428);
+ --color-rose-500: oklch(0.645 0.246 16.439);
+ --color-rose-600: oklch(0.586 0.253 17.585);
+ --color-rose-700: oklch(0.514 0.222 16.935);
+ --color-rose-800: oklch(0.455 0.188 13.697);
+ --color-rose-900: oklch(0.41 0.159 10.272);
+ --color-rose-950: oklch(0.271 0.105 12.094);
+ --color-slate-50: oklch(0.984 0.003 247.858);
+ --color-slate-100: oklch(0.968 0.007 247.896);
+ --color-slate-200: oklch(0.929 0.013 255.508);
+ --color-slate-300: oklch(0.869 0.022 252.894);
+ --color-slate-400: oklch(0.704 0.04 256.788);
+ --color-slate-500: oklch(0.554 0.046 257.417);
+ --color-slate-600: oklch(0.446 0.043 257.281);
+ --color-slate-700: oklch(0.372 0.044 257.287);
+ --color-slate-800: oklch(0.279 0.041 260.031);
+ --color-slate-900: oklch(0.208 0.042 265.755);
+ --color-slate-950: oklch(0.129 0.042 264.695);
+ --color-gray-50: oklch(0.985 0.002 247.839);
+ --color-gray-100: oklch(0.967 0.003 264.542);
+ --color-gray-200: oklch(0.928 0.006 264.531);
+ --color-gray-300: oklch(0.872 0.01 258.338);
+ --color-gray-400: oklch(0.707 0.022 261.325);
+ --color-gray-500: oklch(0.551 0.027 264.364);
+ --color-gray-600: oklch(0.446 0.03 256.802);
+ --color-gray-700: oklch(0.373 0.034 259.733);
+ --color-gray-800: oklch(0.278 0.033 256.848);
+ --color-gray-900: oklch(0.21 0.034 264.665);
+ --color-gray-950: oklch(0.13 0.028 261.692);
+ --color-zinc-50: oklch(0.985 0 0);
+ --color-zinc-100: oklch(0.967 0.001 286.375);
+ --color-zinc-200: oklch(0.92 0.004 286.32);
+ --color-zinc-300: oklch(0.871 0.006 286.286);
+ --color-zinc-400: oklch(0.705 0.015 286.067);
+ --color-zinc-500: oklch(0.552 0.016 285.938);
+ --color-zinc-600: oklch(0.442 0.017 285.786);
+ --color-zinc-700: oklch(0.37 0.013 285.805);
+ --color-zinc-800: oklch(0.274 0.006 286.033);
+ --color-zinc-900: oklch(0.21 0.006 285.885);
+ --color-zinc-950: oklch(0.141 0.005 285.823);
+ --color-neutral-50: oklch(0.985 0 0);
+ --color-neutral-100: oklch(0.97 0 0);
+ --color-neutral-200: oklch(0.922 0 0);
+ --color-neutral-300: oklch(0.87 0 0);
+ --color-neutral-400: oklch(0.708 0 0);
+ --color-neutral-500: oklch(0.556 0 0);
+ --color-neutral-600: oklch(0.439 0 0);
+ --color-neutral-700: oklch(0.371 0 0);
+ --color-neutral-800: oklch(0.269 0 0);
+ --color-neutral-900: oklch(0.205 0 0);
+ --color-neutral-950: oklch(0.145 0 0);
+ --color-stone-50: oklch(0.985 0.001 106.423);
+ --color-stone-100: oklch(0.97 0.001 106.424);
+ --color-stone-200: oklch(0.923 0.003 48.717);
+ --color-stone-300: oklch(0.869 0.005 56.366);
+ --color-stone-400: oklch(0.709 0.01 56.259);
+ --color-stone-500: oklch(0.553 0.013 58.071);
+ --color-stone-600: oklch(0.444 0.011 73.639);
+ --color-stone-700: oklch(0.374 0.01 67.558);
+ --color-stone-800: oklch(0.268 0.007 34.298);
+ --color-stone-900: oklch(0.216 0.006 56.043);
+ --color-stone-950: oklch(0.147 0.004 49.25);
+ --color-black: #000;
+ --color-white: #fff;
+ --spacing: 0.25rem;
+ --breakpoint-sm: 40rem;
+ --breakpoint-md: 48rem;
+ --breakpoint-lg: 64rem;
+ --breakpoint-xl: 80rem;
+ --breakpoint-2xl: 96rem;
+ --container-3xs: 16rem;
+ --container-2xs: 18rem;
+ --container-xs: 20rem;
+ --container-sm: 24rem;
+ --container-md: 28rem;
+ --container-lg: 32rem;
+ --container-xl: 36rem;
+ --container-2xl: 42rem;
+ --container-3xl: 48rem;
+ --container-4xl: 56rem;
+ --container-5xl: 64rem;
+ --container-6xl: 72rem;
+ --container-7xl: 80rem;
+ --text-xs: 0.75rem;
+ --text-xs--line-height: calc(1 / 0.75);
+ --text-sm: 0.875rem;
+ --text-sm--line-height: calc(1.25 / 0.875);
+ --text-base: 1rem;
+ --text-base--line-height: calc(1.5 / 1);
+ --text-lg: 1.125rem;
+ --text-lg--line-height: calc(1.75 / 1.125);
+ --text-xl: 1.25rem;
+ --text-xl--line-height: calc(1.75 / 1.25);
+ --text-2xl: 1.5rem;
+ --text-2xl--line-height: calc(2 / 1.5);
+ --text-3xl: 1.875rem;
+ --text-3xl--line-height: calc(2.25 / 1.875);
+ --text-4xl: 2.25rem;
+ --text-4xl--line-height: calc(2.5 / 2.25);
+ --text-5xl: 3rem;
+ --text-5xl--line-height: 1;
+ --text-6xl: 3.75rem;
+ --text-6xl--line-height: 1;
+ --text-7xl: 4.5rem;
+ --text-7xl--line-height: 1;
+ --text-8xl: 6rem;
+ --text-8xl--line-height: 1;
+ --text-9xl: 8rem;
+ --text-9xl--line-height: 1;
+ --font-weight-thin: 100;
+ --font-weight-extralight: 200;
+ --font-weight-light: 300;
+ --font-weight-normal: 400;
+ --font-weight-medium: 500;
+ --font-weight-semibold: 600;
+ --font-weight-bold: 700;
+ --font-weight-extrabold: 800;
+ --font-weight-black: 900;
+ --tracking-tighter: -0.05em;
+ --tracking-tight: -0.025em;
+ --tracking-normal: 0em;
+ --tracking-wide: 0.025em;
+ --tracking-wider: 0.05em;
+ --tracking-widest: 0.1em;
+ --leading-tight: 1.25;
+ --leading-snug: 1.375;
+ --leading-normal: 1.5;
+ --leading-relaxed: 1.625;
+ --leading-loose: 2;
+ --radius-xs: 0.125rem;
+ --radius-sm: 0.25rem;
+ --radius-md: 0.375rem;
+ --radius-lg: 0.5rem;
+ --radius-xl: 0.75rem;
+ --radius-2xl: 1rem;
+ --radius-3xl: 1.5rem;
+ --radius-4xl: 2rem;
+ --shadow-2xs: 0 1px rgb(0 0 0 / 0.05);
+ --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);
+ --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
+ --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
+ --inset-shadow-2xs: inset 0 1px rgb(0 0 0 / 0.05);
+ --inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / 0.05);
+ --inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / 0.05);
+ --drop-shadow-xs: 0 1px 1px rgb(0 0 0 / 0.05);
+ --drop-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.15);
+ --drop-shadow-md: 0 3px 3px rgb(0 0 0 / 0.12);
+ --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / 0.15);
+ --drop-shadow-xl: 0 9px 7px rgb(0 0 0 / 0.1);
+ --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15);
+ --ease-in: cubic-bezier(0.4, 0, 1, 1);
+ --ease-out: cubic-bezier(0, 0, 0.2, 1);
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
+ --animate-spin: spin 1s linear infinite;
+ --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
+ --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
+ --animate-bounce: bounce 1s infinite;
+ --blur-xs: 4px;
+ --blur-sm: 8px;
+ --blur-md: 12px;
+ --blur-lg: 16px;
+ --blur-xl: 24px;
+ --blur-2xl: 40px;
+ --blur-3xl: 64px;
+ --perspective-dramatic: 100px;
+ --perspective-near: 300px;
+ --perspective-normal: 500px;
+ --perspective-midrange: 800px;
+ --perspective-distant: 1200px;
+ --aspect-video: 16 / 9;
+ --default-transition-duration: 150ms;
+ --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ --default-font-family: var(--font-sans);
+ --default-font-feature-settings: var(--font-sans--font-feature-settings);
+ --default-font-variation-settings: var(
+ --font-sans--font-variation-settings
+ );
+ --default-mono-font-family: var(--font-mono);
+ --default-mono-font-feature-settings: var(
+ --font-mono--font-feature-settings
+ );
+ --default-mono-font-variation-settings: var(
+ --font-mono--font-variation-settings
+ );
+ }
+}
+@layer base {
+ *, ::after, ::before, ::backdrop, ::file-selector-button {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+ border: 0 solid;
+ }
+ html, :host {
+ line-height: 1.5;
+ -webkit-text-size-adjust: 100%;
+ tab-size: 4;
+ font-family: var( --default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" );
+ font-feature-settings: var(--default-font-feature-settings, normal);
+ font-variation-settings: var( --default-font-variation-settings, normal );
+ -webkit-tap-highlight-color: transparent;
+ }
+ body {
+ line-height: inherit;
+ }
+ hr {
+ height: 0;
+ color: inherit;
+ border-top-width: 1px;
+ }
+ abbr:where([title]) {
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+ }
+ h1, h2, h3, h4, h5, h6 {
+ font-size: inherit;
+ font-weight: inherit;
+ }
+ a {
+ color: inherit;
+ -webkit-text-decoration: inherit;
+ text-decoration: inherit;
+ }
+ b, strong {
+ font-weight: bolder;
+ }
+ code, kbd, samp, pre {
+ font-family: var( --default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace );
+ font-feature-settings: var( --default-mono-font-feature-settings, normal );
+ font-variation-settings: var( --default-mono-font-variation-settings, normal );
+ font-size: 1em;
+ }
+ small {
+ font-size: 80%;
+ }
+ sub, sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+ }
+ sub {
+ bottom: -0.25em;
+ }
+ sup {
+ top: -0.5em;
+ }
+ table {
+ text-indent: 0;
+ border-color: inherit;
+ border-collapse: collapse;
+ }
+ :-moz-focusring {
+ outline: auto;
+ }
+ progress {
+ vertical-align: baseline;
+ }
+ summary {
+ display: list-item;
+ }
+ ol, ul, menu {
+ list-style: none;
+ }
+ img, svg, video, canvas, audio, iframe, embed, object {
+ display: block;
+ vertical-align: middle;
+ }
+ img, video {
+ max-width: 100%;
+ height: auto;
+ }
+ button, input, select, optgroup, textarea, ::file-selector-button {
+ font: inherit;
+ font-feature-settings: inherit;
+ font-variation-settings: inherit;
+ letter-spacing: inherit;
+ color: inherit;
+ border-radius: 0;
+ background-color: transparent;
+ opacity: 1;
+ }
+ :where(select:is([multiple], [size])) optgroup {
+ font-weight: bolder;
+ }
+ :where(select:is([multiple], [size])) optgroup option {
+ padding-inline-start: 20px;
+ }
+ ::file-selector-button {
+ margin-inline-end: 4px;
+ }
+ ::placeholder {
+ opacity: 1;
+ color: color-mix(in oklab, currentColor 50%, transparent);
+ }
+ textarea {
+ resize: vertical;
+ }
+ ::-webkit-search-decoration {
+ -webkit-appearance: none;
+ }
+ ::-webkit-date-and-time-value {
+ min-height: 1lh;
+ text-align: inherit;
+ }
+ ::-webkit-datetime-edit {
+ display: inline-flex;
+ }
+ ::-webkit-datetime-edit-fields-wrapper {
+ padding: 0;
+ }
+ ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {
+ padding-block: 0;
+ }
+ :-moz-ui-invalid {
+ box-shadow: none;
+ }
+ button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
+ appearance: button;
+ }
+ ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
+ height: auto;
+ }
+ [hidden]:where(:not([hidden="until-found"])) {
+ display: none !important;
+ }
+}
+@layer utilities {
+ .m-2 {
+ margin: calc(var(--spacing) * 2);
+ }
+ .mt-1 {
+ margin-top: calc(var(--spacing) * 1);
+ }
+ .mr-2 {
+ margin-right: calc(var(--spacing) * 2);
+ }
+ .mb-4 {
+ margin-bottom: calc(var(--spacing) * 4);
+ }
+ .mb-6 {
+ margin-bottom: calc(var(--spacing) * 6);
+ }
+ .block {
+ display: block;
+ }
+ .flex {
+ display: flex;
+ }
+ .grid {
+ display: grid;
+ }
+ .h-screen {
+ height: 100vh;
+ }
+ .w-full {
+ width: 100%;
+ }
+ .w-screen {
+ width: 100vw;
+ }
+ .max-w-md {
+ max-width: var(--container-md);
+ }
+ .grow {
+ flex-grow: 1;
+ }
+ .grid-cols-1 {
+ grid-template-columns: repeat(1, minmax(0, 1fr));
+ }
+ .place-items-center {
+ place-items: center;
+ }
+ .items-center {
+ align-items: center;
+ }
+ .justify-center {
+ justify-content: center;
+ }
+ .self-center {
+ align-self: center;
+ }
+ .justify-self-start {
+ justify-self: flex-start;
+ }
+ .rounded {
+ border-radius: 0.25rem;
+ }
+ .border {
+ border-style: var(--tw-border-style);
+ border-width: 1px;
+ }
+ .bg-blue-500 {
+ background-color: var(--color-blue-500);
+ }
+ .bg-gray-100 {
+ background-color: var(--color-gray-100);
+ }
+ .bg-neutral-100 {
+ background-color: var(--color-neutral-100);
+ }
+ .bg-neutral-200 {
+ background-color: var(--color-neutral-200);
+ }
+ .bg-neutral-500 {
+ background-color: var(--color-neutral-500);
+ }
+ .bg-neutral-900 {
+ background-color: var(--color-neutral-900);
+ }
+ .bg-white {
+ background-color: var(--color-white);
+ }
+ .p-8 {
+ padding: calc(var(--spacing) * 8);
+ }
+ .p-20 {
+ padding: calc(var(--spacing) * 20);
+ }
+ .px-3 {
+ padding-inline: calc(var(--spacing) * 3);
+ }
+ .py-2 {
+ padding-block: calc(var(--spacing) * 2);
+ }
+ .text-center {
+ text-align: center;
+ }
+ .text-2xl {
+ font-size: var(--text-2xl);
+ line-height: var(--tw-leading, var(--text-2xl--line-height));
+ }
+ .font-bold {
+ --tw-font-weight: var(--font-weight-bold);
+ font-weight: var(--font-weight-bold);
+ }
+ .text-gray-700 {
+ color: var(--color-gray-700);
+ }
+ .text-white {
+ color: var(--color-white);
+ }
+ .shadow-md {
+ --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
+ }
+ .transition {
+ transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter;
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
+ }
+ .hover\:bg-blue-600 {
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-blue-600);
+ }
+ }
+ }
+ .focus\:border-blue-300 {
+ &:focus {
+ border-color: var(--color-blue-300);
+ }
+ }
+ .focus\:ring {
+ &:focus {
+ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentColor);
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
+ }
+ }
+ .focus\:outline-none {
+ &:focus {
+ --tw-outline-style: none;
+ outline-style: none;
+ }
+ }
+}
+@keyframes spin {
+ to {
+ transform: rotate(360deg);
+ }
+}
+@keyframes ping {
+ 75%, 100% {
+ transform: scale(2);
+ opacity: 0;
+ }
+}
+@keyframes pulse {
+ 50% {
+ opacity: 0.5;
+ }
+}
+@keyframes bounce {
+ 0%, 100% {
+ transform: translateY(-25%);
+ animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
+ }
+ 50% {
+ transform: none;
+ animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
+ }
+}
+@property --tw-border-style {
+ syntax: "*";
+ inherits: false;
+ initial-value: solid;
+}
+@property --tw-font-weight {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-shadow {
+ syntax: "*";
+ inherits: false;
+ initial-value: 0 0 #0000;
+}
+@property --tw-shadow-color {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-inset-shadow {
+ syntax: "*";
+ inherits: false;
+ initial-value: 0 0 #0000;
+}
+@property --tw-inset-shadow-color {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-ring-color {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-ring-shadow {
+ syntax: "*";
+ inherits: false;
+ initial-value: 0 0 #0000;
+}
+@property --tw-inset-ring-color {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-inset-ring-shadow {
+ syntax: "*";
+ inherits: false;
+ initial-value: 0 0 #0000;
+}
+@property --tw-ring-inset {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-ring-offset-width {
+ syntax: "";
+ inherits: false;
+ initial-value: 0px;
+}
+@property --tw-ring-offset-color {
+ syntax: "*";
+ inherits: false;
+ initial-value: #fff;
+}
+@property --tw-ring-offset-shadow {
+ syntax: "*";
+ inherits: false;
+ initial-value: 0 0 #0000;
+}
diff --git a/server_website/nginx/html/css/style.css b/server_website/nginx/html/css/style.css
new file mode 100644
index 0000000..f1d8c73
--- /dev/null
+++ b/server_website/nginx/html/css/style.css
@@ -0,0 +1 @@
+@import "tailwindcss";
diff --git a/server_website/nginx/html/index.html b/server_website/nginx/html/index.html
new file mode 100644
index 0000000..ca08fea
--- /dev/null
+++ b/server_website/nginx/html/index.html
@@ -0,0 +1,47 @@
+
+
+
+
+
+ Login
+
+
+
+
+
+
+
+
diff --git a/nginx/index.html b/server_website/nginx/index.html
similarity index 100%
rename from nginx/index.html
rename to server_website/nginx/index.html
diff --git a/server_website/nginx/nginx.conf b/server_website/nginx/nginx.conf
new file mode 100644
index 0000000..303b6a6
--- /dev/null
+++ b/server_website/nginx/nginx.conf
@@ -0,0 +1,131 @@
+
+#user nobody;
+worker_processes 1;
+
+#error_log logs/error.log;
+#error_log logs/error.log notice;
+#error_log logs/error.log info;
+
+#pid logs/nginx.pid;
+
+#
+events {
+ worker_connections 1024;
+}
+
+
+http {
+ include mime.types;
+ default_type application/octet-stream;
+
+ #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
+ # '$status $body_bytes_sent "$http_referer" '
+ # '"$http_user_agent" "$http_x_forwarded_for"';
+
+ #access_log logs/access.log main;
+
+ sendfile on;
+ #tcp_nopush on;
+
+ #keepalive_timeout 0;
+ keepalive_timeout 65;
+
+ #gzip on;
+
+ server {
+ listen 80;
+ server_name localhost;
+
+ #charset koi8-r;
+
+ #access_log logs/host.access.log main;
+
+ root /server;
+
+ location /minishell/vnc {
+ proxy_pass http://minishell:8006/;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
+ location / {
+ proxy_pass http://website:3000/;
+ proxy_http_version 1.1;
+ # proxy_set_header Upgrade $http_upgrade;
+ # proxy_set_header Connection "upgrade";
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
+
+ location ~ /.well-known/acme-challenge {
+ root /var/www/certbot;
+ }
+
+ #error_page 404 /404.html;
+
+ # redirect server error pages to the static page /50x.html
+ # proxy the PHP scripts to Apache listening on 127.0.0.1:80
+ #
+ #location ~ \.php$ {
+ # proxy_pass http://127.0.0.1;
+ #}
+
+ # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
+ #
+ #location ~ \.php$ {
+ # root html;
+ # fastcgi_pass 127.0.0.1:9000;
+ # fastcgi_index index.php;
+ # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
+ # include fastcgi_params;
+ #}
+
+ # deny access to .htaccess files, if Apache's document root
+ # concurs with nginx's one
+ #
+ #location ~ /\.ht {
+ # deny all;
+ #}
+ }
+
+
+ # another virtual host using mix of IP-, name-, and port-based configuration
+ #
+ #server {
+ # listen 8000;
+ # listen somename:8080;
+ # server_name somename alias another.alias;
+
+ # location / {
+ # root html;
+ # index index.html index.htm;
+ # }
+ #}
+
+
+ # HTTPS server
+ #
+ #server {
+ # listen 443 ssl;
+ # server_name localhost;
+
+ # ssl_certificate cert.pem;
+ # ssl_certificate_key cert.key;
+
+ # ssl_session_cache shared:SSL:1m;
+ # ssl_session_timeout 5m;
+
+ # ssl_ciphers HIGH:!aNULL:!MD5;
+ # ssl_prefer_server_ciphers on;
+
+ # location / {
+ # root html;
+ # index index.html index.htm;
+ # }
+ #}
+
+}
diff --git a/server_website/vvsite/Cargo.toml b/server_website/vvsite/Cargo.toml
new file mode 100644
index 0000000..be4bb1a
--- /dev/null
+++ b/server_website/vvsite/Cargo.toml
@@ -0,0 +1,93 @@
+[package]
+name = "vvsite"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "rlib"]
+
+[dependencies]
+actix-files = { version = "0.6", optional = true }
+actix-web = { version = "4", optional = true, features = ["macros"] }
+console_error_panic_hook = "0.1"
+http = { version = "1.0.0", optional = true }
+leptos = { version = "0.6", features = ["nightly"] }
+leptos_meta = { version = "0.6", features = ["nightly"] }
+leptos_actix = { version = "0.6", optional = true }
+leptos_router = { version = "0.6", features = ["nightly"] }
+wasm-bindgen = "=0.2.100"
+
+[features]
+csr = ["leptos/csr", "leptos_meta/csr", "leptos_router/csr"]
+hydrate = ["leptos/hydrate", "leptos_meta/hydrate", "leptos_router/hydrate"]
+ssr = [
+ "dep:actix-files",
+ "dep:actix-web",
+ "dep:leptos_actix",
+ "leptos/ssr",
+ "leptos_meta/ssr",
+ "leptos_router/ssr",
+]
+
+# Defines a size-optimized profile for the WASM bundle in release mode
+[profile.wasm-release]
+inherits = "release"
+opt-level = 'z'
+lto = true
+codegen-units = 1
+panic = "abort"
+
+[package.metadata.leptos]
+# The name used by wasm-bindgen/cargo-leptos for the JS/WASM bundle. Defaults to the crate name
+output-name = "vvsite"
+# The site root folder is where cargo-leptos generate all output. WARNING: all content of this folder will be erased on a rebuild. Use it in your server setup.
+site-root = "target/site"
+# The site-root relative folder where all compiled output (JS, WASM and CSS) is written
+# Defaults to pkg
+site-pkg-dir = "pkg"
+# [Optional] The source CSS file. If it ends with .sass or .scss then it will be compiled by dart-sass into CSS. The CSS is optimized by Lightning CSS before being written to //app.css
+style-file = "style/main.scss"
+# Assets source dir. All files found here will be copied and synchronized to site-root.
+# The assets-dir cannot have a sub directory with the same name/path as site-pkg-dir.
+
+tailwind-input-file = "assets/tailwind/tailwind.css"
+#
+# Optional. Env: LEPTOS_ASSETS_DIR.
+assets-dir = "assets/public"
+# The IP and port (ex: 127.0.0.1:3000) where the server serves the content. Use it in your server setup.
+site-addr = "0.0.0.0:3000"
+# The port to use for automatic reload monitoring
+reload-port = 3001
+# [Optional] Command to use when running end2end tests. It will run in the end2end dir.
+# [Windows] for non-WSL use "npx.cmd playwright test"
+# This binary name can be checked in Powershell with Get-Command npx
+end2end-cmd = "npx playwright test"
+end2end-dir = "end2end"
+# The browserlist query used for optimizing the CSS.
+browserquery = "defaults"
+# The environment Leptos will run in, usually either "DEV" or "PROD"
+env = "DEV"
+# The features to use when compiling the bin target
+#
+# Optional. Can be over-ridden with the command line parameter --bin-features
+bin-features = ["ssr"]
+
+# If the --no-default-features flag should be used when compiling the bin target
+#
+# Optional. Defaults to false.
+bin-default-features = false
+
+# The features to use when compiling the lib target
+#
+# Optional. Can be over-ridden with the command line parameter --lib-features
+lib-features = ["hydrate"]
+
+# If the --no-default-features flag should be used when compiling the lib target
+#
+# Optional. Defaults to false.
+lib-default-features = false
+
+# The profile to use for the lib target when compiling for release
+#
+# Optional. Defaults to "release".
+lib-profile-release = "wasm-release"
diff --git a/server_website/vvsite/Dockerfile b/server_website/vvsite/Dockerfile
new file mode 100644
index 0000000..2035d61
--- /dev/null
+++ b/server_website/vvsite/Dockerfile
@@ -0,0 +1,10 @@
+FROM archlinux
+
+WORKDIR /website
+COPY ./target/site /website/target/site
+COPY ./target/debug/vvsite /website/vvsite
+
+COPY ./Cargo.toml /website/Cargo.toml
+RUN chmod +x /website/vvsite
+
+CMD ["/website/vvsite"]
diff --git a/server_website/vvsite/target/site/favicon.ico b/server_website/vvsite/target/site/favicon.ico
new file mode 100644
index 0000000..98eb609
Binary files /dev/null and b/server_website/vvsite/target/site/favicon.ico differ
diff --git a/server_website/vvsite/target/site/pkg/vvsite.css b/server_website/vvsite/target/site/pkg/vvsite.css
new file mode 100644
index 0000000..858850c
--- /dev/null
+++ b/server_website/vvsite/target/site/pkg/vvsite.css
@@ -0,0 +1,444 @@
+body {
+ font-family: sans-serif;
+ text-align: center;
+}
+
+*, :before, :after {
+ box-sizing: border-box;
+ border-width: 0;
+ border-style: solid;
+ border-color: #e5e7eb;
+}
+
+:before, :after {
+ --tw-content: "";
+}
+
+html, :host {
+ line-height: 1.5;
+ -webkit-text-size-adjust: 100%;
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+ font-family: ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;
+ font-feature-settings: normal;
+ font-variation-settings: normal;
+ -webkit-tap-highlight-color: transparent;
+}
+
+body {
+ margin: 0;
+ line-height: inherit;
+}
+
+hr {
+ height: 0;
+ color: inherit;
+ border-top-width: 1px;
+}
+
+abbr:where([title]) {
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-size: inherit;
+ font-weight: inherit;
+}
+
+a {
+ color: inherit;
+ text-decoration: inherit;
+}
+
+b, strong {
+ font-weight: bolder;
+}
+
+code, kbd, samp, pre {
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;
+ font-feature-settings: normal;
+ font-variation-settings: normal;
+ font-size: 1em;
+}
+
+small {
+ font-size: 80%;
+}
+
+sub, sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sub {
+ bottom: -.25em;
+}
+
+sup {
+ top: -.5em;
+}
+
+table {
+ text-indent: 0;
+ border-color: inherit;
+ border-collapse: collapse;
+}
+
+button, input, optgroup, select, textarea {
+ font-family: inherit;
+ font-feature-settings: inherit;
+ font-variation-settings: inherit;
+ font-size: 100%;
+ font-weight: inherit;
+ line-height: inherit;
+ color: inherit;
+ margin: 0;
+ padding: 0;
+}
+
+button, select {
+ text-transform: none;
+}
+
+button, [type="button"], [type="reset"], [type="submit"] {
+ -webkit-appearance: button;
+ background-color: rgba(0, 0, 0, 0);
+ background-image: none;
+}
+
+:-moz-focusring {
+ outline: auto;
+}
+
+:-moz-ui-invalid {
+ box-shadow: none;
+}
+
+progress {
+ vertical-align: baseline;
+}
+
+::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
+ height: auto;
+}
+
+[type="search"] {
+ -webkit-appearance: textfield;
+ outline-offset: -2px;
+}
+
+::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button;
+ font: inherit;
+}
+
+summary {
+ display: list-item;
+}
+
+blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre {
+ margin: 0;
+}
+
+fieldset {
+ margin: 0;
+ padding: 0;
+}
+
+legend {
+ padding: 0;
+}
+
+ol, ul, menu {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+dialog {
+ padding: 0;
+}
+
+textarea {
+ resize: vertical;
+}
+
+input::-moz-placeholder, textarea::-moz-placeholder {
+ opacity: 1;
+ color: #9ca3af;
+}
+
+input::placeholder, textarea::placeholder {
+ opacity: 1;
+ color: #9ca3af;
+}
+
+button, [role="button"] {
+ cursor: pointer;
+}
+
+:disabled {
+ cursor: default;
+}
+
+img, svg, video, canvas, audio, iframe, embed, object {
+ display: block;
+ vertical-align: middle;
+}
+
+img, video {
+ max-width: 100%;
+ height: auto;
+}
+
+[hidden] {
+ display: none;
+}
+
+*, :before, :after {
+ --tw-border-spacing-x: 0;
+ --tw-border-spacing-y: 0;
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ --tw-pan-x: ;
+ --tw-pan-y: ;
+ --tw-pinch-zoom: ;
+ --tw-scroll-snap-strictness: proximity;
+ --tw-gradient-from-position: ;
+ --tw-gradient-via-position: ;
+ --tw-gradient-to-position: ;
+ --tw-ordinal: ;
+ --tw-slashed-zero: ;
+ --tw-numeric-figure: ;
+ --tw-numeric-spacing: ;
+ --tw-numeric-fraction: ;
+ --tw-ring-inset: ;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-color: rgba(59, 130, 246, .5);
+ --tw-ring-offset-shadow: 0 0 rgba(0, 0, 0, 0);
+ --tw-ring-shadow: 0 0 rgba(0, 0, 0, 0);
+ --tw-shadow: 0 0 rgba(0, 0, 0, 0);
+ --tw-shadow-colored: 0 0 rgba(0, 0, 0, 0);
+ --tw-blur: ;
+ --tw-brightness: ;
+ --tw-contrast: ;
+ --tw-grayscale: ;
+ --tw-hue-rotate: ;
+ --tw-invert: ;
+ --tw-saturate: ;
+ --tw-sepia: ;
+ --tw-drop-shadow: ;
+ --tw-backdrop-blur: ;
+ --tw-backdrop-brightness: ;
+ --tw-backdrop-contrast: ;
+ --tw-backdrop-grayscale: ;
+ --tw-backdrop-hue-rotate: ;
+ --tw-backdrop-invert: ;
+ --tw-backdrop-opacity: ;
+ --tw-backdrop-saturate: ;
+ --tw-backdrop-sepia: ;
+}
+
+::backdrop {
+ --tw-border-spacing-x: 0;
+ --tw-border-spacing-y: 0;
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ --tw-pan-x: ;
+ --tw-pan-y: ;
+ --tw-pinch-zoom: ;
+ --tw-scroll-snap-strictness: proximity;
+ --tw-gradient-from-position: ;
+ --tw-gradient-via-position: ;
+ --tw-gradient-to-position: ;
+ --tw-ordinal: ;
+ --tw-slashed-zero: ;
+ --tw-numeric-figure: ;
+ --tw-numeric-spacing: ;
+ --tw-numeric-fraction: ;
+ --tw-ring-inset: ;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-color: rgba(59, 130, 246, .5);
+ --tw-ring-offset-shadow: 0 0 rgba(0, 0, 0, 0);
+ --tw-ring-shadow: 0 0 rgba(0, 0, 0, 0);
+ --tw-shadow: 0 0 rgba(0, 0, 0, 0);
+ --tw-shadow-colored: 0 0 rgba(0, 0, 0, 0);
+ --tw-blur: ;
+ --tw-brightness: ;
+ --tw-contrast: ;
+ --tw-grayscale: ;
+ --tw-hue-rotate: ;
+ --tw-invert: ;
+ --tw-saturate: ;
+ --tw-sepia: ;
+ --tw-drop-shadow: ;
+ --tw-backdrop-blur: ;
+ --tw-backdrop-brightness: ;
+ --tw-backdrop-contrast: ;
+ --tw-backdrop-grayscale: ;
+ --tw-backdrop-hue-rotate: ;
+ --tw-backdrop-invert: ;
+ --tw-backdrop-opacity: ;
+ --tw-backdrop-saturate: ;
+ --tw-backdrop-sepia: ;
+}
+
+.m-auto {
+ margin: auto;
+}
+
+.box-border {
+ box-sizing: border-box;
+}
+
+.inline {
+ display: inline;
+}
+
+.flex {
+ display: flex;
+}
+
+.grid {
+ display: grid;
+}
+
+.h-64 {
+ height: 16rem;
+}
+
+.h-\[8vh\] {
+ height: 8vh;
+}
+
+.h-full {
+ height: 100%;
+}
+
+.h-screen {
+ height: 100vh;
+}
+
+.max-h-\[70vh\] {
+ max-height: 70vh;
+}
+
+.min-h-\[40vh\] {
+ min-height: 40vh;
+}
+
+.w-full {
+ width: 100%;
+}
+
+.w-screen {
+ width: 100vw;
+}
+
+.min-w-\[50vw\] {
+ min-width: 50vw;
+}
+
+.max-w-\[100vw\] {
+ max-width: 100vw;
+}
+
+.max-w-\[1300px\] {
+ max-width: 1300px;
+}
+
+.grow {
+ flex-grow: 1;
+}
+
+.flex-col {
+ flex-direction: column;
+}
+
+.place-content-center {
+ place-content: center;
+}
+
+.place-content-stretch {
+ place-content: stretch;
+}
+
+.items-center {
+ align-items: center;
+}
+
+.justify-center {
+ justify-content: center;
+}
+
+.gap-4 {
+ gap: 1rem;
+}
+
+.place-self-center {
+ place-self: center;
+}
+
+.rounded-md {
+ border-radius: .375rem;
+}
+
+.p-1 {
+ padding: .25rem;
+}
+
+.p-4 {
+ padding: 1rem;
+}
+
+.p-8 {
+ padding: 2rem;
+}
+
+.py-8 {
+ padding-top: 2rem;
+ padding-bottom: 2rem;
+}
+
+.text-center {
+ text-align: center;
+}
+
+.text-4xl {
+ font-size: 2.25rem;
+ line-height: 2.5rem;
+}
+
+.text-5xl {
+ font-size: 3rem;
+ line-height: 1;
+}
+
+.text-lg {
+ font-size: 1.125rem;
+ line-height: 1.75rem;
+}
+
+.hover\:bg-\[\#889E73ff\]:hover {
+ background-color: #889e73;
+}
diff --git a/server_website/vvsite/target/site/pkg/vvsite.js b/server_website/vvsite/target/site/pkg/vvsite.js
new file mode 100644
index 0000000..cf09c42
--- /dev/null
+++ b/server_website/vvsite/target/site/pkg/vvsite.js
@@ -0,0 +1,1171 @@
+let wasm;
+
+function getFromExternrefTable0(idx) { return wasm.__wbindgen_export_0.get(idx); }
+
+const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } );
+
+if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); };
+
+let cachedUint8ArrayMemory0 = null;
+
+function getUint8ArrayMemory0() {
+ if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
+ cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
+ }
+ return cachedUint8ArrayMemory0;
+ }
+
+function getStringFromWasm0(ptr, len) {
+ ptr = ptr >>> 0;
+ return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
+ }
+
+function getCachedStringFromWasm0(ptr, len) {
+ if (ptr === 0) {
+ return getFromExternrefTable0(len);
+ } else {
+ return getStringFromWasm0(ptr, len);
+ }
+ }
+
+function addToExternrefTable0(obj) {
+ const idx = wasm.__externref_table_alloc();
+ wasm.__wbindgen_export_0.set(idx, obj);
+ return idx;
+ }
+
+function handleError(f, args) {
+ try {
+ return f.apply(this, args);
+ } catch (e) {
+ const idx = addToExternrefTable0(e);
+ wasm.__wbindgen_exn_store(idx);
+ }
+ }
+
+function isLikeNone(x) {
+ return x === undefined || x === null;
+ }
+
+let WASM_VECTOR_LEN = 0;
+
+const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } );
+
+const encodeString = (typeof cachedTextEncoder.encodeInto === 'function'
+ ? function (arg, view) {
+ return cachedTextEncoder.encodeInto(arg, view);
+ }
+ : function (arg, view) {
+ const buf = cachedTextEncoder.encode(arg);
+ view.set(buf);
+ return {
+ read: arg.length,
+ written: buf.length
+ };
+ });
+
+function passStringToWasm0(arg, malloc, realloc) {
+
+ if (realloc === undefined) {
+ const buf = cachedTextEncoder.encode(arg);
+ const ptr = malloc(buf.length, 1) >>> 0;
+ getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);
+ WASM_VECTOR_LEN = buf.length;
+ return ptr;
+ }
+
+ let len = arg.length;
+ let ptr = malloc(len, 1) >>> 0;
+
+ const mem = getUint8ArrayMemory0();
+
+ let offset = 0;
+
+ for (; offset < len; offset++) {
+ const code = arg.charCodeAt(offset);
+ if (code > 0x7F) break;
+ mem[ptr + offset] = code;
+ }
+
+ if (offset !== len) {
+ if (offset !== 0) {
+ arg = arg.slice(offset);
+ }
+ ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
+ const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
+ const ret = encodeString(arg, view);
+
+ offset += ret.written;
+ ptr = realloc(ptr, len, offset, 1) >>> 0;
+ }
+
+ WASM_VECTOR_LEN = offset;
+ return ptr;
+ }
+
+let cachedDataViewMemory0 = null;
+
+function getDataViewMemory0() {
+ if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {
+ cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
+ }
+ return cachedDataViewMemory0;
+ }
+
+const CLOSURE_DTORS = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(state => {
+ wasm.__wbindgen_export_6.get(state.dtor)(state.a, state.b)
+ });
+
+function makeMutClosure(arg0, arg1, dtor, f) {
+ const state = { a: arg0, b: arg1, cnt: 1, dtor };
+ const real = (...args) => {
+ // First up with a closure we increment the internal reference
+ // count. This ensures that the Rust closure environment won't
+ // be deallocated while we're invoking it.
+ state.cnt++;
+ const a = state.a;
+ state.a = 0;
+ try {
+ return f(a, state.b, ...args);
+ } finally {
+ if (--state.cnt === 0) {
+ wasm.__wbindgen_export_6.get(state.dtor)(a, state.b);
+ CLOSURE_DTORS.unregister(state);
+ } else {
+ state.a = a;
+ }
+ }
+ };
+ real.original = state;
+ CLOSURE_DTORS.register(real, state, state);
+ return real;
+ }
+
+function debugString(val) {
+ // primitive types
+ const type = typeof val;
+ if (type == 'number' || type == 'boolean' || val == null) {
+ return `${val}`;
+ }
+ if (type == 'string') {
+ return `"${val}"`;
+ }
+ if (type == 'symbol') {
+ const description = val.description;
+ if (description == null) {
+ return 'Symbol';
+ } else {
+ return `Symbol(${description})`;
+ }
+ }
+ if (type == 'function') {
+ const name = val.name;
+ if (typeof name == 'string' && name.length > 0) {
+ return `Function(${name})`;
+ } else {
+ return 'Function';
+ }
+ }
+ // objects
+ if (Array.isArray(val)) {
+ const length = val.length;
+ let debug = '[';
+ if (length > 0) {
+ debug += debugString(val[0]);
+ }
+ for(let i = 1; i < length; i++) {
+ debug += ', ' + debugString(val[i]);
+ }
+ debug += ']';
+ return debug;
+ }
+ // Test for built-in
+ const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val));
+ let className;
+ if (builtInMatches && builtInMatches.length > 1) {
+ className = builtInMatches[1];
+ } else {
+ // Failed to match the standard '[object ClassName]'
+ return toString.call(val);
+ }
+ if (className == 'Object') {
+ // we're a user defined class or Object
+ // JSON.stringify avoids problems with cycles, and is generally much
+ // easier than looping through ownProperties of `val`.
+ try {
+ return 'Object(' + JSON.stringify(val) + ')';
+ } catch (_) {
+ return 'Object';
+ }
+ }
+ // errors
+ if (val instanceof Error) {
+ return `${val.name}: ${val.message}\n${val.stack}`;
+ }
+ // TODO we could test for more things here, like `Set`s and `Map`s.
+ return className;
+ }
+
+export function hydrate() {
+wasm.hydrate();
+}
+
+function __wbg_adapter_44(arg0, arg1) {
+wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h4de226542b3bf314(arg0, arg1);
+}
+
+function __wbg_adapter_47(arg0, arg1, arg2) {
+wasm.closure352_externref_shim(arg0, arg1, arg2);
+}
+
+function __wbg_adapter_50(arg0, arg1) {
+wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h91d18030ec7993a5(arg0, arg1);
+}
+
+function __wbg_adapter_53(arg0, arg1, arg2) {
+wasm.closure456_externref_shim(arg0, arg1, arg2);
+}
+
+function __wbg_adapter_277(arg0, arg1, arg2, arg3) {
+wasm.closure481_externref_shim(arg0, arg1, arg2, arg3);
+}
+
+const __wbindgen_enum_ReadableStreamType = ["bytes"];
+
+const IntoUnderlyingByteSourceFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_intounderlyingbytesource_free(ptr >>> 0, 1));
+
+export class IntoUnderlyingByteSource {
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ IntoUnderlyingByteSourceFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_intounderlyingbytesource_free(ptr, 0);
+ }
+ /**
+ * @returns {ReadableStreamType}
+ */
+get type() {
+const ret = wasm.intounderlyingbytesource_type(this.__wbg_ptr);
+return __wbindgen_enum_ReadableStreamType[ret];
+}
+/**
+ * @returns {number}
+ */
+get autoAllocateChunkSize() {
+const ret = wasm.intounderlyingbytesource_autoAllocateChunkSize(this.__wbg_ptr);
+return ret >>> 0;
+}
+/**
+ * @param {ReadableByteStreamController} controller
+ */
+start(controller) {
+wasm.intounderlyingbytesource_start(this.__wbg_ptr, controller);
+}
+/**
+ * @param {ReadableByteStreamController} controller
+ * @returns {Promise}
+ */
+pull(controller) {
+const ret = wasm.intounderlyingbytesource_pull(this.__wbg_ptr, controller);
+return ret;
+}
+cancel() {
+const ptr = this.__destroy_into_raw();
+wasm.intounderlyingbytesource_cancel(ptr);
+}
+}
+
+const IntoUnderlyingSinkFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_intounderlyingsink_free(ptr >>> 0, 1));
+
+export class IntoUnderlyingSink {
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ IntoUnderlyingSinkFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_intounderlyingsink_free(ptr, 0);
+ }
+ /**
+ * @param {any} chunk
+ * @returns {Promise}
+ */
+write(chunk) {
+const ret = wasm.intounderlyingsink_write(this.__wbg_ptr, chunk);
+return ret;
+}
+/**
+ * @returns {Promise}
+ */
+close() {
+const ptr = this.__destroy_into_raw();
+const ret = wasm.intounderlyingsink_close(ptr);
+return ret;
+}
+/**
+ * @param {any} reason
+ * @returns {Promise}
+ */
+abort(reason) {
+const ptr = this.__destroy_into_raw();
+const ret = wasm.intounderlyingsink_abort(ptr, reason);
+return ret;
+}
+}
+
+const IntoUnderlyingSourceFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_intounderlyingsource_free(ptr >>> 0, 1));
+
+export class IntoUnderlyingSource {
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ IntoUnderlyingSourceFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_intounderlyingsource_free(ptr, 0);
+ }
+ /**
+ * @param {ReadableStreamDefaultController} controller
+ * @returns {Promise}
+ */
+pull(controller) {
+const ret = wasm.intounderlyingsource_pull(this.__wbg_ptr, controller);
+return ret;
+}
+cancel() {
+const ptr = this.__destroy_into_raw();
+wasm.intounderlyingsource_cancel(ptr);
+}
+}
+
+async function __wbg_load(module, imports) {
+ if (typeof Response === 'function' && module instanceof Response) {
+ if (typeof WebAssembly.instantiateStreaming === 'function') {
+ try {
+ return await WebAssembly.instantiateStreaming(module, imports);
+
+ } catch (e) {
+ if (module.headers.get('Content-Type') != 'application/wasm') {
+ console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
+
+ } else {
+ throw e;
+ }
+ }
+ }
+
+ const bytes = await module.arrayBuffer();
+ return await WebAssembly.instantiate(bytes, imports);
+
+ } else {
+ const instance = await WebAssembly.instantiate(module, imports);
+
+ if (instance instanceof WebAssembly.Instance) {
+ return { instance, module };
+
+ } else {
+ return instance;
+ }
+ }
+ }
+
+ function __wbg_get_imports() {
+ const imports = {};
+ imports.wbg = {};
+imports.wbg.__wbg_addEventListener_ad9617755da8fbe8 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
+var v0 = getCachedStringFromWasm0(arg1, arg2);
+arg0.addEventListener(v0, arg3);
+}, arguments) };
+imports.wbg.__wbg_altKey_d2ad93ef54deb903 = function(arg0) {
+const ret = arg0.altKey;
+return ret;
+};
+imports.wbg.__wbg_appendChild_daddabaedb4a1728 = function() { return handleError(function (arg0, arg1) {
+const ret = arg0.appendChild(arg1);
+return ret;
+}, arguments) };
+imports.wbg.__wbg_append_3f7f164bc7d0afd9 = function() { return handleError(function (arg0, arg1, arg2) {
+arg0.append(arg1, arg2);
+}, arguments) };
+imports.wbg.__wbg_before_14893f35be58ad51 = function() { return handleError(function (arg0, arg1) {
+arg0.before(arg1);
+}, arguments) };
+imports.wbg.__wbg_before_a5debbbcdc74ee52 = function() { return handleError(function (arg0, arg1) {
+arg0.before(arg1);
+}, arguments) };
+imports.wbg.__wbg_body_39801f8e28a17e0d = function(arg0) {
+const ret = arg0.body;
+return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+};
+imports.wbg.__wbg_buffer_4cc4466b579d16b4 = function(arg0) {
+const ret = arg0.buffer;
+return ret;
+};
+imports.wbg.__wbg_buffer_71667b1101df19da = function(arg0) {
+const ret = arg0.buffer;
+return ret;
+};
+imports.wbg.__wbg_button_e8c44aa42b50bef9 = function(arg0) {
+const ret = arg0.button;
+return ret;
+};
+imports.wbg.__wbg_byobRequest_9dd6d13eb365e223 = function(arg0) {
+const ret = arg0.byobRequest;
+return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+};
+imports.wbg.__wbg_byteLength_e84fb9e4a2940d2c = function(arg0) {
+const ret = arg0.byteLength;
+return ret;
+};
+imports.wbg.__wbg_byteOffset_05ea0b08782f01bd = function(arg0) {
+const ret = arg0.byteOffset;
+return ret;
+};
+imports.wbg.__wbg_call_75b89300dd530ca6 = function() { return handleError(function (arg0, arg1, arg2) {
+const ret = arg0.call(arg1, arg2);
+return ret;
+}, arguments) };
+imports.wbg.__wbg_call_d68488931693e6ee = function() { return handleError(function (arg0, arg1) {
+const ret = arg0.call(arg1);
+return ret;
+}, arguments) };
+imports.wbg.__wbg_childNodes_db685c63dbcd5537 = function(arg0) {
+const ret = arg0.childNodes;
+return ret;
+};
+imports.wbg.__wbg_cloneNode_b3ad5fe78182a3e7 = function() { return handleError(function (arg0) {
+const ret = arg0.cloneNode();
+return ret;
+}, arguments) };
+imports.wbg.__wbg_close_2c98beee2b59af63 = function() { return handleError(function (arg0) {
+arg0.close();
+}, arguments) };
+imports.wbg.__wbg_close_f825000f2241f096 = function() { return handleError(function (arg0) {
+arg0.close();
+}, arguments) };
+imports.wbg.__wbg_composedPath_ee4f72591e0d0f75 = function(arg0) {
+const ret = arg0.composedPath();
+return ret;
+};
+imports.wbg.__wbg_createComment_e4c00ebde70478b2 = function(arg0, arg1, arg2) {
+var v0 = getCachedStringFromWasm0(arg1, arg2);
+const ret = arg0.createComment(v0);
+return ret;
+};
+imports.wbg.__wbg_createDocumentFragment_d041a9d2f85d2ed1 = function(arg0) {
+const ret = arg0.createDocumentFragment();
+return ret;
+};
+imports.wbg.__wbg_createElement_51ffea4765cb1cc5 = function() { return handleError(function (arg0, arg1, arg2) {
+var v0 = getCachedStringFromWasm0(arg1, arg2);
+const ret = arg0.createElement(v0);
+return ret;
+}, arguments) };
+imports.wbg.__wbg_createTextNode_86708483bc3c5132 = function(arg0, arg1, arg2) {
+var v0 = getCachedStringFromWasm0(arg1, arg2);
+const ret = arg0.createTextNode(v0);
+return ret;
+};
+imports.wbg.__wbg_createTreeWalker_a48515596b8beef2 = function() { return handleError(function (arg0, arg1, arg2) {
+const ret = arg0.createTreeWalker(arg1, arg2 >>> 0);
+return ret;
+}, arguments) };
+imports.wbg.__wbg_ctrlKey_b18a47cac80f5ed7 = function(arg0) {
+const ret = arg0.ctrlKey;
+return ret;
+};
+imports.wbg.__wbg_dataset_d2cf01c763ceb005 = function(arg0) {
+const ret = arg0.dataset;
+return ret;
+};
+imports.wbg.__wbg_decodeURIComponent_b5e7c28797af50ab = function() { return handleError(function (arg0, arg1) {
+var v0 = getCachedStringFromWasm0(arg0, arg1);
+const ret = decodeURIComponent(v0);
+return ret;
+}, arguments) };
+imports.wbg.__wbg_decodeURI_708ceea9a5b1301e = function() { return handleError(function (arg0, arg1) {
+var v0 = getCachedStringFromWasm0(arg0, arg1);
+const ret = decodeURI(v0);
+return ret;
+}, arguments) };
+imports.wbg.__wbg_defaultPrevented_732aa296a00ba0f6 = function(arg0) {
+const ret = arg0.defaultPrevented;
+return ret;
+};
+imports.wbg.__wbg_document_7689f46a8f647c96 = function(arg0) {
+const ret = arg0.document;
+return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+};
+imports.wbg.__wbg_done_3ca5b09e8598078d = function(arg0) {
+const ret = arg0.done;
+return ret;
+};
+imports.wbg.__wbg_enqueue_8a48484465436b3b = function() { return handleError(function (arg0, arg1) {
+arg0.enqueue(arg1);
+}, arguments) };
+imports.wbg.__wbg_entries_d873dde863e50b8c = function(arg0) {
+const ret = Object.entries(arg0);
+return ret;
+};
+imports.wbg.__wbg_error_2ca63459aa969937 = function(arg0) {
+console.error(arg0);
+};
+imports.wbg.__wbg_error_7534b8e9a36f1ab4 = function(arg0, arg1) {
+var v0 = getCachedStringFromWasm0(arg0, arg1);
+if (arg0 !== 0) { wasm.__wbindgen_free(arg0, arg1, 1); }
+console.error(v0);
+};
+imports.wbg.__wbg_exec_7230cd5c145b872e = function(arg0, arg1, arg2) {
+var v0 = getCachedStringFromWasm0(arg1, arg2);
+const ret = arg0.exec(v0);
+return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+};
+imports.wbg.__wbg_getAttribute_876366f2916a83fc = function(arg0, arg1, arg2, arg3) {
+var v0 = getCachedStringFromWasm0(arg2, arg3);
+const ret = arg1.getAttribute(v0);
+var ptr2 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+var len2 = WASM_VECTOR_LEN;
+getDataViewMemory0().setInt32(arg0 + 4 * 1, len2, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr2, true);
+};
+imports.wbg.__wbg_getElementById_ce95590ef98fe114 = function(arg0, arg1, arg2) {
+var v0 = getCachedStringFromWasm0(arg1, arg2);
+const ret = arg0.getElementById(v0);
+return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+};
+imports.wbg.__wbg_get_726e3873086e7183 = function(arg0, arg1, arg2, arg3) {
+var v0 = getCachedStringFromWasm0(arg2, arg3);
+const ret = arg1[v0];
+var ptr2 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+var len2 = WASM_VECTOR_LEN;
+getDataViewMemory0().setInt32(arg0 + 4 * 1, len2, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr2, true);
+};
+imports.wbg.__wbg_get_c122b1d576cf1fdb = function(arg0, arg1) {
+const ret = arg0[arg1 >>> 0];
+return ret;
+};
+imports.wbg.__wbg_get_ddd82e34e6366fb9 = function() { return handleError(function (arg0, arg1) {
+const ret = Reflect.get(arg0, arg1);
+return ret;
+}, arguments) };
+imports.wbg.__wbg_getwithrefkey_1dc361bd10053bfe = function(arg0, arg1) {
+const ret = arg0[arg1];
+return ret;
+};
+imports.wbg.__wbg_globalThis_59c7794d9413986f = function() { return handleError(function () {
+const ret = globalThis.globalThis;
+return ret;
+}, arguments) };
+imports.wbg.__wbg_global_04c81bad83a72129 = function() { return handleError(function () {
+const ret = global.global;
+return ret;
+}, arguments) };
+imports.wbg.__wbg_hasAttribute_10d61da464139fd3 = function(arg0, arg1, arg2) {
+var v0 = getCachedStringFromWasm0(arg1, arg2);
+const ret = arg0.hasAttribute(v0);
+return ret;
+};
+imports.wbg.__wbg_hash_1b8b81a17fbce53f = function() { return handleError(function (arg0, arg1) {
+const ret = arg1.hash;
+const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+const len1 = WASM_VECTOR_LEN;
+getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+}, arguments) };
+imports.wbg.__wbg_hash_bca72f76a3178bc8 = function(arg0, arg1) {
+const ret = arg1.hash;
+const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+const len1 = WASM_VECTOR_LEN;
+getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+};
+imports.wbg.__wbg_head_f593be76595faa59 = function(arg0) {
+const ret = arg0.head;
+return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+};
+imports.wbg.__wbg_history_28c9f6bada41fa0e = function() { return handleError(function (arg0) {
+const ret = arg0.history;
+return ret;
+}, arguments) };
+imports.wbg.__wbg_href_02e76f823c19d30c = function(arg0, arg1) {
+const ret = arg1.href;
+const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+const len1 = WASM_VECTOR_LEN;
+getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+};
+imports.wbg.__wbg_href_fe620cbb08310f18 = function(arg0, arg1) {
+const ret = arg1.href;
+const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+const len1 = WASM_VECTOR_LEN;
+getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+};
+imports.wbg.__wbg_instanceof_ArrayBuffer_36214dbc6ea8dd3d = function(arg0) {
+let result;
+ try {
+ result = arg0 instanceof ArrayBuffer;
+ } catch (_) {
+ result = false;
+ }
+ const ret = result;
+return ret;
+};
+imports.wbg.__wbg_instanceof_HtmlAnchorElement_93ffbf43e94800f9 = function(arg0) {
+let result;
+ try {
+ result = arg0 instanceof HTMLAnchorElement;
+ } catch (_) {
+ result = false;
+ }
+ const ret = result;
+return ret;
+};
+imports.wbg.__wbg_instanceof_Uint8Array_0d898f7981fe0a2d = function(arg0) {
+let result;
+ try {
+ result = arg0 instanceof Uint8Array;
+ } catch (_) {
+ result = false;
+ }
+ const ret = result;
+return ret;
+};
+imports.wbg.__wbg_instanceof_Window_47f723ed0409d724 = function(arg0) {
+let result;
+ try {
+ result = arg0 instanceof Window;
+ } catch (_) {
+ result = false;
+ }
+ const ret = result;
+return ret;
+};
+imports.wbg.__wbg_isArray_435f9cb9abc7eccc = function(arg0) {
+const ret = Array.isArray(arg0);
+return ret;
+};
+imports.wbg.__wbg_isSafeInteger_2817b2c8ebdd29d2 = function(arg0) {
+const ret = Number.isSafeInteger(arg0);
+return ret;
+};
+imports.wbg.__wbg_is_c0f4e2085c8d91e1 = function(arg0, arg1) {
+const ret = Object.is(arg0, arg1);
+return ret;
+};
+imports.wbg.__wbg_item_e4865fb0fce356b0 = function(arg0, arg1) {
+const ret = arg0.item(arg1 >>> 0);
+return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+};
+imports.wbg.__wbg_iterator_2a6b115668862130 = function() {
+const ret = Symbol.iterator;
+return ret;
+};
+imports.wbg.__wbg_length_b52c3d528b88468e = function(arg0) {
+const ret = arg0.length;
+return ret;
+};
+imports.wbg.__wbg_length_cc2c33deb047a05b = function(arg0) {
+const ret = arg0.length;
+return ret;
+};
+imports.wbg.__wbg_length_e9123d1e4db12534 = function(arg0) {
+const ret = arg0.length;
+return ret;
+};
+imports.wbg.__wbg_location_d103e836c52d0920 = function(arg0) {
+const ret = arg0.location;
+return ret;
+};
+imports.wbg.__wbg_metaKey_139fd4bb4a7f3fdc = function(arg0) {
+const ret = arg0.metaKey;
+return ret;
+};
+imports.wbg.__wbg_namespaceURI_84ad0fdc486ae542 = function(arg0, arg1) {
+const ret = arg1.namespaceURI;
+var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+var len1 = WASM_VECTOR_LEN;
+getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+};
+imports.wbg.__wbg_new_10003836f2677621 = function(arg0, arg1, arg2, arg3) {
+var v0 = getCachedStringFromWasm0(arg0, arg1);
+var v1 = getCachedStringFromWasm0(arg2, arg3);
+const ret = new RegExp(v0, v1);
+return ret;
+};
+imports.wbg.__wbg_new_51fd3aeaa6d3d03f = function(arg0, arg1) {
+try {
+var state0 = {a: arg0, b: arg1};
+var cb0 = (arg0, arg1) => {
+const a = state0.a;
+state0.a = 0;
+try {
+return __wbg_adapter_277(a, state0.b, arg0, arg1);
+} finally {
+state0.a = a;
+}
+};
+const ret = new Promise(cb0);
+return ret;
+} finally {
+state0.a = state0.b = 0;
+}
+};
+imports.wbg.__wbg_new_5bd3cfec88bd010e = function(arg0, arg1) {
+var v0 = getCachedStringFromWasm0(arg0, arg1);
+const ret = new Error(v0);
+return ret;
+};
+imports.wbg.__wbg_new_8a6f238a6ece86ea = function() {
+const ret = new Error();
+return ret;
+};
+imports.wbg.__wbg_new_9ed4506807911440 = function(arg0) {
+const ret = new Uint8Array(arg0);
+return ret;
+};
+imports.wbg.__wbg_newnoargs_fe7e106c48aadd7e = function(arg0, arg1) {
+var v0 = getCachedStringFromWasm0(arg0, arg1);
+const ret = new Function(v0);
+return ret;
+};
+imports.wbg.__wbg_newwithbase_3e89facdc4b45c72 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
+var v0 = getCachedStringFromWasm0(arg0, arg1);
+var v1 = getCachedStringFromWasm0(arg2, arg3);
+const ret = new URL(v0, v1);
+return ret;
+}, arguments) };
+imports.wbg.__wbg_newwithbyteoffsetandlength_a51b517eb0e8fbf4 = function(arg0, arg1, arg2) {
+const ret = new Uint8Array(arg0, arg1 >>> 0, arg2 >>> 0);
+return ret;
+};
+imports.wbg.__wbg_nextNode_43077ba4421d37bb = function() { return handleError(function (arg0) {
+const ret = arg0.nextNode();
+return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+}, arguments) };
+imports.wbg.__wbg_nextSibling_5dd0879ef893f708 = function(arg0) {
+const ret = arg0.nextSibling;
+return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+};
+imports.wbg.__wbg_next_86c8f7dfb19a94eb = function() { return handleError(function (arg0) {
+const ret = arg0.next();
+return ret;
+}, arguments) };
+imports.wbg.__wbg_next_b39104aeda52ac60 = function(arg0) {
+const ret = arg0.next;
+return ret;
+};
+imports.wbg.__wbg_nodeName_31090a044fc93523 = function(arg0, arg1) {
+const ret = arg1.nodeName;
+const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+const len1 = WASM_VECTOR_LEN;
+getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+};
+imports.wbg.__wbg_origin_33e525b3abd804cf = function() { return handleError(function (arg0, arg1) {
+const ret = arg1.origin;
+const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+const len1 = WASM_VECTOR_LEN;
+getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+}, arguments) };
+imports.wbg.__wbg_origin_81f4bd192488990e = function(arg0, arg1) {
+const ret = arg1.origin;
+const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+const len1 = WASM_VECTOR_LEN;
+getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+};
+imports.wbg.__wbg_outerHTML_e0509691cfdacf56 = function(arg0, arg1) {
+const ret = arg1.outerHTML;
+const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+const len1 = WASM_VECTOR_LEN;
+getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+};
+imports.wbg.__wbg_pathname_12a663b40d81039a = function(arg0, arg1) {
+const ret = arg1.pathname;
+const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+const len1 = WASM_VECTOR_LEN;
+getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+};
+imports.wbg.__wbg_pathname_f4c73464379abf9e = function() { return handleError(function (arg0, arg1) {
+const ret = arg1.pathname;
+const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+const len1 = WASM_VECTOR_LEN;
+getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+}, arguments) };
+imports.wbg.__wbg_preventDefault_7cd87fa71683fc8f = function(arg0) {
+arg0.preventDefault();
+};
+imports.wbg.__wbg_previousSibling_f05e5f738946758c = function(arg0) {
+const ret = arg0.previousSibling;
+return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+};
+imports.wbg.__wbg_pushState_aa3f82bc57f19dd0 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {
+var v0 = getCachedStringFromWasm0(arg2, arg3);
+var v1 = getCachedStringFromWasm0(arg4, arg5);
+arg0.pushState(arg1, v0, v1);
+}, arguments) };
+imports.wbg.__wbg_querySelectorAll_052eac35cdb76210 = function() { return handleError(function (arg0, arg1, arg2) {
+var v0 = getCachedStringFromWasm0(arg1, arg2);
+const ret = arg0.querySelectorAll(v0);
+return ret;
+}, arguments) };
+imports.wbg.__wbg_querySelector_ab5b6a4f61d535d5 = function() { return handleError(function (arg0, arg1, arg2) {
+var v0 = getCachedStringFromWasm0(arg1, arg2);
+const ret = arg0.querySelector(v0);
+return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+}, arguments) };
+imports.wbg.__wbg_queueMicrotask_5a8a9131f3f0b37b = function(arg0) {
+const ret = arg0.queueMicrotask;
+return ret;
+};
+imports.wbg.__wbg_queueMicrotask_6d79674585219521 = function(arg0) {
+queueMicrotask(arg0);
+};
+imports.wbg.__wbg_removeAttribute_2fd4894609c8ce06 = function() { return handleError(function (arg0, arg1, arg2) {
+var v0 = getCachedStringFromWasm0(arg1, arg2);
+arg0.removeAttribute(v0);
+}, arguments) };
+imports.wbg.__wbg_removeChild_28f5cd5ebb18ae8e = function() { return handleError(function (arg0, arg1) {
+const ret = arg0.removeChild(arg1);
+return ret;
+}, arguments) };
+imports.wbg.__wbg_removeEventListener_f420b4f37f515116 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
+var v0 = getCachedStringFromWasm0(arg1, arg2);
+arg0.removeEventListener(v0, arg3);
+}, arguments) };
+imports.wbg.__wbg_remove_52bfcaff25d6cf50 = function(arg0) {
+arg0.remove();
+};
+imports.wbg.__wbg_remove_844123e436d13065 = function(arg0) {
+arg0.remove();
+};
+imports.wbg.__wbg_replaceState_0edd916282b64c6a = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {
+var v0 = getCachedStringFromWasm0(arg2, arg3);
+var v1 = getCachedStringFromWasm0(arg4, arg5);
+arg0.replaceState(arg1, v0, v1);
+}, arguments) };
+imports.wbg.__wbg_requestAnimationFrame_c63a6b8ad5f85d24 = function() { return handleError(function (arg0, arg1) {
+const ret = arg0.requestAnimationFrame(arg1);
+return ret;
+}, arguments) };
+imports.wbg.__wbg_resolve_33aaa312c39e688c = function(arg0) {
+const ret = Promise.resolve(arg0);
+return ret;
+};
+imports.wbg.__wbg_respond_442db8b929a98e76 = function() { return handleError(function (arg0, arg1) {
+arg0.respond(arg1 >>> 0);
+}, arguments) };
+imports.wbg.__wbg_scrollIntoView_7b81853ddfc9f282 = function(arg0) {
+arg0.scrollIntoView();
+};
+imports.wbg.__wbg_scrollTo_10dc674a440a3169 = function(arg0, arg1, arg2) {
+arg0.scrollTo(arg1, arg2);
+};
+imports.wbg.__wbg_searchParams_b91890aed3e49590 = function(arg0) {
+const ret = arg0.searchParams;
+return ret;
+};
+imports.wbg.__wbg_search_89e7e03373553f0b = function(arg0, arg1) {
+const ret = arg1.search;
+const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+const len1 = WASM_VECTOR_LEN;
+getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+};
+imports.wbg.__wbg_search_9766a64e4a830960 = function() { return handleError(function (arg0, arg1) {
+const ret = arg1.search;
+const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+const len1 = WASM_VECTOR_LEN;
+getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+}, arguments) };
+imports.wbg.__wbg_self_c9a63b952bd22cbd = function() { return handleError(function () {
+const ret = self.self;
+return ret;
+}, arguments) };
+imports.wbg.__wbg_setAttribute_3d1326b2d681f50e = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
+var v0 = getCachedStringFromWasm0(arg1, arg2);
+var v1 = getCachedStringFromWasm0(arg3, arg4);
+arg0.setAttribute(v0, v1);
+}, arguments) };
+imports.wbg.__wbg_set_e8d9380e866a1e41 = function(arg0, arg1, arg2) {
+arg0.set(arg1, arg2 >>> 0);
+};
+imports.wbg.__wbg_setdata_5ba64d5808cc682a = function(arg0, arg1, arg2) {
+var v0 = getCachedStringFromWasm0(arg1, arg2);
+arg0.data = v0;
+};
+imports.wbg.__wbg_sethref_b50b9cb99365bb8d = function() { return handleError(function (arg0, arg1, arg2) {
+var v0 = getCachedStringFromWasm0(arg1, arg2);
+arg0.href = v0;
+}, arguments) };
+imports.wbg.__wbg_setinnerHTML_412032fa3570c106 = function(arg0, arg1, arg2) {
+var v0 = getCachedStringFromWasm0(arg1, arg2);
+arg0.innerHTML = v0;
+};
+imports.wbg.__wbg_settextContent_8aa5fee2cdfef876 = function(arg0, arg1, arg2) {
+var v0 = getCachedStringFromWasm0(arg1, arg2);
+arg0.textContent = v0;
+};
+imports.wbg.__wbg_shiftKey_15a826ae86780b66 = function(arg0) {
+const ret = arg0.shiftKey;
+return ret;
+};
+imports.wbg.__wbg_stack_0ed75d68575b0f3c = function(arg0, arg1) {
+const ret = arg1.stack;
+const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+const len1 = WASM_VECTOR_LEN;
+getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+};
+imports.wbg.__wbg_state_700a50d8e8718898 = function() { return handleError(function (arg0) {
+const ret = arg0.state;
+return ret;
+}, arguments) };
+imports.wbg.__wbg_target_07ff857af641679a = function(arg0, arg1) {
+const ret = arg1.target;
+const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+const len1 = WASM_VECTOR_LEN;
+getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+};
+imports.wbg.__wbg_textContent_9d6d40582d0c5e46 = function(arg0, arg1) {
+const ret = arg1.textContent;
+var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+var len1 = WASM_VECTOR_LEN;
+getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+};
+imports.wbg.__wbg_then_acd4f2d41ed1cf58 = function(arg0, arg1) {
+const ret = arg0.then(arg1);
+return ret;
+};
+imports.wbg.__wbg_value_f82ca5432417c8ff = function(arg0) {
+const ret = arg0.value;
+return ret;
+};
+imports.wbg.__wbg_view_f0ef1c95fdf68f4a = function(arg0) {
+const ret = arg0.view;
+return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+};
+imports.wbg.__wbg_warn_f70d9f1be6c62e43 = function(arg0) {
+console.warn(arg0);
+};
+imports.wbg.__wbg_window_81304a10d2638125 = function() { return handleError(function () {
+const ret = window.window;
+return ret;
+}, arguments) };
+imports.wbg.__wbindgen_as_number = function(arg0) {
+const ret = +arg0;
+return ret;
+};
+imports.wbg.__wbindgen_boolean_get = function(arg0) {
+const v = arg0;
+const ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2;
+return ret;
+};
+imports.wbg.__wbindgen_cb_drop = function(arg0) {
+const obj = arg0.original;
+if (obj.cnt-- == 1) {
+obj.a = 0;
+return true;
+}
+const ret = false;
+return ret;
+};
+imports.wbg.__wbindgen_closure_wrapper5748 = function(arg0, arg1, arg2) {
+const ret = makeMutClosure(arg0, arg1, 351, __wbg_adapter_44);
+return ret;
+};
+imports.wbg.__wbindgen_closure_wrapper5750 = function(arg0, arg1, arg2) {
+const ret = makeMutClosure(arg0, arg1, 353, __wbg_adapter_47);
+return ret;
+};
+imports.wbg.__wbindgen_closure_wrapper6504 = function(arg0, arg1, arg2) {
+const ret = makeMutClosure(arg0, arg1, 418, __wbg_adapter_50);
+return ret;
+};
+imports.wbg.__wbindgen_closure_wrapper7766 = function(arg0, arg1, arg2) {
+const ret = makeMutClosure(arg0, arg1, 457, __wbg_adapter_53);
+return ret;
+};
+imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {
+const ret = debugString(arg1);
+const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+const len1 = WASM_VECTOR_LEN;
+getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+};
+imports.wbg.__wbindgen_error_new = function(arg0, arg1) {
+const ret = new Error(getStringFromWasm0(arg0, arg1));
+return ret;
+};
+imports.wbg.__wbindgen_in = function(arg0, arg1) {
+const ret = arg0 in arg1;
+return ret;
+};
+imports.wbg.__wbindgen_init_externref_table = function() {
+const table = wasm.__wbindgen_export_0;
+const offset = table.grow(4);
+table.set(0, undefined);
+table.set(offset + 0, undefined);
+table.set(offset + 1, null);
+table.set(offset + 2, true);
+table.set(offset + 3, false);
+;
+};
+imports.wbg.__wbindgen_is_function = function(arg0) {
+const ret = typeof(arg0) === 'function';
+return ret;
+};
+imports.wbg.__wbindgen_is_null = function(arg0) {
+const ret = arg0 === null;
+return ret;
+};
+imports.wbg.__wbindgen_is_object = function(arg0) {
+const val = arg0;
+const ret = typeof(val) === 'object' && val !== null;
+return ret;
+};
+imports.wbg.__wbindgen_is_string = function(arg0) {
+const ret = typeof(arg0) === 'string';
+return ret;
+};
+imports.wbg.__wbindgen_is_undefined = function(arg0) {
+const ret = arg0 === undefined;
+return ret;
+};
+imports.wbg.__wbindgen_jsval_eq = function(arg0, arg1) {
+const ret = arg0 === arg1;
+return ret;
+};
+imports.wbg.__wbindgen_jsval_loose_eq = function(arg0, arg1) {
+const ret = arg0 == arg1;
+return ret;
+};
+imports.wbg.__wbindgen_memory = function() {
+const ret = wasm.memory;
+return ret;
+};
+imports.wbg.__wbindgen_number_get = function(arg0, arg1) {
+const obj = arg1;
+const ret = typeof(obj) === 'number' ? obj : undefined;
+getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);
+};
+imports.wbg.__wbindgen_string_get = function(arg0, arg1) {
+const obj = arg1;
+const ret = typeof(obj) === 'string' ? obj : undefined;
+var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+var len1 = WASM_VECTOR_LEN;
+getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+};
+imports.wbg.__wbindgen_string_new = function(arg0, arg1) {
+const ret = getStringFromWasm0(arg0, arg1);
+return ret;
+};
+imports.wbg.__wbindgen_throw = function(arg0, arg1) {
+throw new Error(getStringFromWasm0(arg0, arg1));
+};
+
+ return imports;
+ }
+
+ function __wbg_init_memory(imports, memory) {
+
+ }
+
+ function __wbg_finalize_init(instance, module) {
+ wasm = instance.exports;
+ __wbg_init.__wbindgen_wasm_module = module;
+ cachedDataViewMemory0 = null;
+cachedUint8ArrayMemory0 = null;
+
+
+ wasm.__wbindgen_start();
+ return wasm;
+ }
+
+ function initSync(module) {
+ if (wasm !== undefined) return wasm;
+
+
+ if (typeof module !== 'undefined') {
+ if (Object.getPrototypeOf(module) === Object.prototype) {
+ ({module} = module)
+ } else {
+ console.warn('using deprecated parameters for `initSync()`; pass a single object instead')
+ }
+ }
+
+ const imports = __wbg_get_imports();
+
+ __wbg_init_memory(imports);
+
+ if (!(module instanceof WebAssembly.Module)) {
+ module = new WebAssembly.Module(module);
+ }
+
+ const instance = new WebAssembly.Instance(module, imports);
+
+ return __wbg_finalize_init(instance, module);
+ }
+
+ async function __wbg_init(module_or_path) {
+ if (wasm !== undefined) return wasm;
+
+
+ if (typeof module_or_path !== 'undefined') {
+ if (Object.getPrototypeOf(module_or_path) === Object.prototype) {
+ ({module_or_path} = module_or_path)
+ } else {
+ console.warn('using deprecated parameters for the initialization function; pass a single object instead')
+ }
+ }
+
+
+ const imports = __wbg_get_imports();
+
+ if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {
+ module_or_path = fetch(module_or_path);
+ }
+
+ __wbg_init_memory(imports);
+
+ const { instance, module } = await __wbg_load(await module_or_path, imports);
+
+ return __wbg_finalize_init(instance, module);
+ }
+
+export { initSync };
+export default __wbg_init;
diff --git a/server_website/vvsite/target/site/pkg/vvsite.wasm b/server_website/vvsite/target/site/pkg/vvsite.wasm
new file mode 100644
index 0000000..6646518
Binary files /dev/null and b/server_website/vvsite/target/site/pkg/vvsite.wasm differ
diff --git a/vvsite/assets/public/emiku.css b/server_website/vvsite/target/site/website.css
similarity index 99%
rename from vvsite/assets/public/emiku.css
rename to server_website/vvsite/target/site/website.css
index 638a51e..9c87464 100644
--- a/vvsite/assets/public/emiku.css
+++ b/server_website/vvsite/target/site/website.css
@@ -2,6 +2,8 @@ body {
margin: 0;
padding: 0;
font-family: Arial, sans-serif;
+ background-color: #F4D793;
+ color: #FFF6DA;
}
.overlay {
diff --git a/vvsite/assets/public/website.css b/vvsite/assets/public/website.css
new file mode 100644
index 0000000..9c87464
--- /dev/null
+++ b/vvsite/assets/public/website.css
@@ -0,0 +1,238 @@
+body {
+ margin: 0;
+ padding: 0;
+ font-family: Arial, sans-serif;
+ background-color: #F4D793;
+ color: #FFF6DA;
+}
+
+.overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: rgba(0, 0, 0, 0.5);
+ z-index: 999;
+}
+
+/* The floating window */
+.floating-window {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ min-width: 50%;
+ max-width: 80%;
+ max-height: 90vh;
+ background: #fff;
+ border: 1px solid #ccc;
+ border-radius: 5px;
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
+ z-index: 1000;
+ box-sizing: border-box;
+ overflow-y: auto;
+ padding: 20px;
+}
+
+.floating-window header {
+ font-weight: bold;
+ max-width: 80%;
+ border-bottom: 1px solid #ddd;
+ margin-bottom: 10px;
+ padding-bottom: 10px;
+}
+
+.floating-window .close-btn {
+ position: absolute;
+ top: 5px;
+ right: 5px;
+ width: 20px;
+ height: 20px;
+ cursor: pointer;
+ line-height: 1;
+}
+
+.dialog {
+ top: 50%;
+ left: 50%;
+ -webkit-transform: translateX(-50%) translateY(-50%);
+ -moz-transform: translateX(-50%) translateY(-50%);
+ -ms-transform: translateX(-50%) translateY(-50%);
+ transform: translateX(-50%) translateY(-50%);
+}
+
+/* Style the dropdown container */
+.dropdown {
+ position: relative;
+ display: inline-block;
+}
+
+/* Style the dropdown button */
+.dropbtn {
+ background-color: #4caf50;
+ color: white;
+ padding: 16px;
+ font-size: 16px;
+ border: none;
+ cursor: pointer;
+}
+
+/* Style the dropdown content (hidden by default) */
+.dropdown-content {
+ display: block;
+ position: absolute;
+ border-radius: 12px;
+ background-color: #f9f9f9;
+ min-width: 160px;
+ box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.2);
+ z-index: 1;
+}
+
+/* Style the links inside the dropdown */
+.dropdown-content a {
+ color: black;
+ padding: 12px 16px;
+ text-decoration: none;
+ display: block;
+}
+
+/* Change color of links when hovered */
+.dropdown-content a:hover {
+ background-color: #f1f1f1;
+}
+
+/* Show the dropdown menu when hovering over the dropdown button */
+
+/* Change the button color when hovering */
+.dropdown:hover .dropbtn {
+ background-color: #3e8e41;
+}
+/*////////////////////////////////////////////////////////////////////////////*/
+
+/* TABLE */
+/* .table {
+ display: table;
+ width: auto;
+ border-collapse: collapse;
+ max-width: 100%;
+ grid-gap:;
+ table-layout: auto;
+ border-radius: 12px;
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
+}
+
+.table-row {
+ display: table-row;
+}
+
+.table-head,
+.table-cell {
+ display: table-cell;
+ margin: 4;
+ padding: 1em 1.5em;
+ text-align: center;
+ border: 1px solid #e0e0e0;
+ border-radius: 12px;
+ width: auto;
+}
+
+.table-head {
+ background-color: #f5f5f5;
+ font-weight: bold;
+}
+
+.table-cell {
+ background-color: #fff;
+ transition: background-color 0.3s ease;
+}
+
+.table-row:nth-child(even) .table-cell {
+ background-color: #fafafa;
+}
+
+.table-row:hover .table-cell {
+ background-color: #f0f0f0;
+} */
+
+.background-div {
+ /* background-color: rgba(235, 67, 0, 50); */
+ background: #f343048a;
+}
+
+/* Container as a grid instead of table */
+.table {
+ display: grid;
+ /* If you know you have exactly 3 columns, specify them: */
+ /* grid-template-columns: repeat(3, 1fr); */
+ /* or, for a variable number of columns: */
+ /* grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); */
+ max-width: 100%;
+ margin: 20px 0;
+
+ /* Rounded corners and shadow */
+ border-radius: 12px;
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
+
+ /* Optional gap between cells */
+}
+
+/* Each "row" is just a grouping for hover/striped logic */
+.table-row {
+ /* We use 'display: contents' so the child .table-head / .table-cell
+ items will flow into the parent grid columns. */
+ display: contents;
+ overflow: hidden;
+}
+
+/* Common cell styles */
+.table-head,
+.table-cell {
+ /* You can remove margin if you prefer the cells to touch */
+ display: flex;
+ /* margin: 4px; */
+ padding: 0.25em 0.25em;
+ text-align: center;
+ font-size: 12;
+ text-wrap: wrap;
+ font-weight: 500;
+ /* Keep the borders for a cell-like feel */
+ border: 1px solid #a0a0a0;
+ /* border-radius: 12px; */
+ place-items: center;
+
+ /* Smooth text wrapping in columns */
+ /* width: auto; */
+}
+
+/* Header cell styling - Autumn accent */
+.table-head {
+ background-color: #f9dec9; /* light warm-orange shade */
+ font-weight: bold;
+}
+
+/* Body cell styling - Autumn base color */
+.table-cell {
+ overflow: hidden;
+ background-color: #fdf3ee; /* subtle near-white peach */
+ transition: background-color 0.3s ease;
+}
+
+/* Striped rows: every even 'table-row' uses a different shade */
+.table-row:nth-of-type(even) .table-cell {
+ background-color: #fce8d8; /* pale orange-brown */
+}
+
+/* Row hover effect - a slightly darker shade */
+.table-row:hover .table-cell {
+ background-color: #f8dcc2; /* warm peach on hover */
+}
+/* Pointer effect for interactive cells */
+.point {
+ cursor: pointer;
+ transition: background-color 0.3s ease;
+}
+
+.point:hover {
+ background-color: #e9e9e9;
+}
diff --git a/vvsite/src/website/client/app.rs b/vvsite/src/website/client/app.rs
index ef5b3b2..ecfd389 100644
--- a/vvsite/src/website/client/app.rs
+++ b/vvsite/src/website/client/app.rs
@@ -11,28 +11,31 @@ pub fn App() -> impl IntoView {
// injects a stylesheet into the document
// id=leptos means cargo-leptos will hot-reload this stylesheet
+
// sets the document title
// content for this welcome page
-
- "My Personal Website"
-
-
"Home"
-
"Minishell"
-
"MiniRT"
-
"emiku"
+
+ "My Personal Website"
+
-
+
+
+
}
diff --git a/vvsite/src/website/client/pages/minishell.rs b/vvsite/src/website/client/pages/minishell.rs
index c697e16..bd34c02 100644
--- a/vvsite/src/website/client/pages/minishell.rs
+++ b/vvsite/src/website/client/pages/minishell.rs
@@ -8,7 +8,7 @@ pub fn MinishellPage() -> impl IntoView{
"The (mini) Shell"
-
+
}
}