Merge pull request #1 from wah-su/V3

V3
This commit is contained in:
Kentai Radiquum 2024-11-30 20:42:06 +05:00 committed by GitHub
commit d8efaca7dd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
38 changed files with 1556 additions and 2996 deletions

4
.gitignore vendored
View file

@ -1,2 +1,2 @@
node_modules
TODO.md
V2/
node_modules/

View file

@ -2,4 +2,4 @@
This repository contains a home page for a wah.su.
It is made using HTML, JS and Tailwind with Flowbite components.
It is made using HTML, JS and Tailwind.

View file

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View file

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

View file

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

View file

Before

Width:  |  Height:  |  Size: 550 B

After

Width:  |  Height:  |  Size: 550 B

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -3,12 +3,12 @@
"short_name": "",
"icons": [
{
"src": "/public/favicon/android-chrome-192x192.png",
"src": "/favicon/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/public/favicon/android-chrome-512x512.png",
"src": "/favicon/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}

View file

@ -2,133 +2,67 @@
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>wah.su | Homepage</title>
<link href="/public/output.css" rel="stylesheet" />
<link rel="stylesheet" href="./static/tailwind.css">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Ubuntu+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap" rel="stylesheet">
<link rel="apple-touch-icon" sizes="180x180" href="/public/favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/public/favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/public/favicon/favicon-16x16.png">
<link rel="manifest" href="/public/favicon/site.webmanifest">
<link rel="preload" href="./static/will-rust-Vv1E0zcQDCI-unsplash.jpg" as="image">
<link rel="prefetch" href="./services.html" />
<link rel="prefetch" href="./privacy.html" />
<link rel="apple-touch-icon" sizes="180x180" href="./favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="./favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="./favicon/favicon-16x16.png">
<link rel="manifest" href="./favicon/site.webmanifest">
<meta charset="UTF-8">
<meta name="description"
content="Looking for a cozy, reliable den away from tech companies? wah.su is all about providing a safe and stable environment for your projects.">
<meta name="description" content="wah.su project run by https://wah.su/radiquum">
<meta name="keywords" content="wah.su, radiquum, invite-only, hosting">
<!-- Twitter Card data -->
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="https://home.wah.su/">
<meta name="twitter:title" content="wah.su | Homepage">
<meta name="twitter:description"
content="Looking for a cozy, reliable den away from tech companies? wah.su is all about providing a safe and stable environment for your projects.">
<meta name="twitter:image" content="https://home.wah.su/public/preview.png">
<meta name="twitter:description" content="wah.su project run by https://wah.su/radiquum">
<meta name="twitter:image" content="https://home.wah.su/static/og/index.png">
<!-- Open Graph data -->
<meta property="og:title" content="wah.su | Homepage" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://home.wah.su/" />
<meta property="og:image" content="https://home.wah.su/public/preview.png" />
<meta property="og:description"
content="Looking for a cozy, reliable den away from tech companies? wah.su is all about providing a safe and stable environment for your projects." />
<meta property="og:image" content="https://home.wah.su/static/og/index.png" />
<meta property="og:description" content="wah.su project run by https://wah.su/radiquum" />
</head>
<body class="light dark:bg-slate-900" id="body">
<header class="top-0 left-0 pt-4 pb-6 shadow-lg bg-slate-50 dark:bg-slate-800">
<div
class="flex flex-col md:flex-row gap-2 md:gap-0 items-center container max-w-[1440px] justify-between px-4">
<div class="self-start"><img src="/public/images/logo-light.svg" alt="wah.su" id="logo" /></div>
<div class="self-start md:self-auto">
<!--noformat-->
<a href="https://status.wah.su" class="flex flex-row items-center gap-2" target="_blank">
<div class="w-4 h-4 transition ease-in bg-gray-500 rounded-full duration-400" id="status-icon"></div>
<p class="dark:text-slate-50" id="status-text">Fetching Services Status</p>
</a>
<!--noformat-->
</div>
<div class="flex flex-row items-center self-start justify-center gap-6 -ml-4">
<label class="inline-flex items-center cursor-pointer">
<span class="mr-4 text-sm font-medium text-gray-900 ms-3 dark:text-gray-300"><svg
class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
viewBox="0 0 24 24">
<path fill-rule="evenodd"
d="M13 3a1 1 0 1 0-2 0v2a1 1 0 1 0 2 0V3ZM6.343 4.929A1 1 0 0 0 4.93 6.343l1.414 1.414a1 1 0 0 0 1.414-1.414L6.343 4.929Zm12.728 1.414a1 1 0 0 0-1.414-1.414l-1.414 1.414a1 1 0 0 0 1.414 1.414l1.414-1.414ZM12 7a5 5 0 1 0 0 10 5 5 0 0 0 0-10Zm-9 4a1 1 0 1 0 0 2h2a1 1 0 1 0 0-2H3Zm16 0a1 1 0 1 0 0 2h2a1 1 0 1 0 0-2h-2ZM7.757 17.657a1 1 0 1 0-1.414-1.414l-1.414 1.414a1 1 0 1 0 1.414 1.414l1.414-1.414Zm9.9-1.414a1 1 0 0 0-1.414 1.414l1.414 1.414a1 1 0 0 0 1.414-1.414l-1.414-1.414ZM13 19a1 1 0 1 0-2 0v2a1 1 0 1 0 2 0v-2Z"
clip-rule="evenodd" />
</svg>
</span>
<input type="checkbox" class="sr-only peer" id="theme-toggle">
<div
class="relative w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full rtl:peer-checked:after:-translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:start-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-blue-600">
</div>
<span class="text-sm font-medium text-gray-900 ms-3 dark:text-gray-300"><svg
class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
viewBox="0 0 24 24">
<path fill-rule="evenodd"
d="M11.675 2.015a.998.998 0 0 0-.403.011C6.09 2.4 2 6.722 2 12c0 5.523 4.477 10 10 10 4.356 0 8.058-2.784 9.43-6.667a1 1 0 0 0-1.02-1.33c-.08.006-.105.005-.127.005h-.001l-.028-.002A5.227 5.227 0 0 0 20 14a8 8 0 0 1-8-8c0-.952.121-1.752.404-2.558a.996.996 0 0 0 .096-.428V3a1 1 0 0 0-.825-.985Z"
clip-rule="evenodd" />
</svg>
</span>
</label>
<a href="https://auth.wah.su"
class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center inline-flex items-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800">
<svg class="w-6 h-6 text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24"
height="24" fill="currentColor" viewBox="0 0 24 24">
<path fill-rule="evenodd"
d="M4.857 3A1.857 1.857 0 0 0 3 4.857v4.286C3 10.169 3.831 11 4.857 11h4.286A1.857 1.857 0 0 0 11 9.143V4.857A1.857 1.857 0 0 0 9.143 3H4.857Zm10 0A1.857 1.857 0 0 0 13 4.857v4.286c0 1.026.831 1.857 1.857 1.857h4.286A1.857 1.857 0 0 0 21 9.143V4.857A1.857 1.857 0 0 0 19.143 3h-4.286Zm-10 10A1.857 1.857 0 0 0 3 14.857v4.286C3 20.169 3.831 21 4.857 21h4.286A1.857 1.857 0 0 0 11 19.143v-4.286A1.857 1.857 0 0 0 9.143 13H4.857Zm10 0A1.857 1.857 0 0 0 13 14.857v4.286c0 1.026.831 1.857 1.857 1.857h4.286A1.857 1.857 0 0 0 21 19.143v-4.286A1.857 1.857 0 0 0 19.143 13h-4.286Z"
clip-rule="evenodd" />
</svg>
<p class="ml-2">Dashboard</p>
</a>
</div>
<body class="bg-[#120D0C] text-white ubuntu-mono-regular">
<div class="container flex flex-col justify-between w-full h-[100dvh] p-8 md:p-16">
<img class="absolute inset-0 object-cover w-full h-full blur-sm -z-10" src="./static/will-rust-Vv1E0zcQDCI-unsplash.jpg" alt=""/>
<div class="flex flex-col gap-8 lg:items-center lg:justify-between lg:flex-row">
<img class="w-96" src="./static/LOGO.svg" alt="wah.su" id="logo" />
<a href="https://status.wah.su" class="flex flex-row items-center justify-center gap-4" target="_blank">
<div class="w-6 h-6 transition ease-in bg-gray-500 rounded-full sm:w-8 sm:h-8 aspect-square duration-400" id="status-icon"></div>
<p class="text-xl sm:text-3xl" id="status-text">Fetching Services Status</p>
</a>
</div>
</header>
<div class="container max-w-[1440px] mt-14 text-center px-4">
<h1 class="text-6xl font-bold text-gray-800 md:text-8xl dark:text-slate-200">Welcome to wah.su!</h1>
<!--noformat-->
<p class="max-w-[840px] mx-auto mt-6 text-gray-700 dark:text-slate-300 text-left w-full">
Looking for a cozy, reliable den away from tech companies? You've come to the right place!
wah.su is all about providing a safe and stable environment for your projects.
</p>
<p class="max-w-[840px] mx-auto mt-6 text-gray-700 dark:text-slate-300 text-left w-full">
Run by yours truly, <a href="https://wah.su/radiquum" class="font-medium text-blue-600 dark:text-blue-500 hover:underline" target="_blank">@radiquum</a>, we believe in quality over quantity, which is why access is currently invite-only.
Interested in joining the pack? Reach out to me to sniff out an invitation.
</p>
<!--noformat-->
</div>
<div class="container max-w-[1440px] mt-16 px-4">
<div class="bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mb-4">
<h1 class="text-2xl font-bold text-gray-800 dark:text-slate-200">Proudly Hosting</h1>
<div class="flex flex-col-reverse gap-8 lg:flex-row lg:items-end lg:justify-between">
<div class="text-lg sm:text-2xl">
<p>Run by <a class="underline hover:text-[#ff851b] transition-colors" href="https://wah.su/radiquum">@radiquum</a></p>
<p>Photo by <a class="underline hover:text-[#ff851b] transition-colors" href="https://unsplash.com/@willrust">Will Rust</a> on <a class="underline hover:text-[#ff851b] transition-colors" href="https://unsplash.com/">Unsplash</a></p>
</div>
<div class="text-2xl lg:text-right">
<p><a class="underline hover:text-[#ff851b] transition-colors" href="https://github.com/wah-su">Github</a></p>
<!-- <p><a class="underline hover:text-[#ff851b] transition-colors" href="https://wah.su">Discord</a></p> -->
<p><a class="underline hover:text-[#ff851b] transition-colors" href="./services.html">View Services</a></p>
<p><a class="underline hover:text-[#ff851b] transition-colors" href="./privacy.html">Privacy Policy</a></p>
</div>
</div>
<div class="flex flex-row flex-wrap justify-center gap-2 md:justify-start" id="services">
</div>
</div>
<footer class="m-4 bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto md:flex md:items-center md:justify-between">
<span class="text-sm text-gray-500 sm:text-center dark:text-gray-400">© 2024 wah.su | All Rights Reserved.
</span>
<ul class="flex flex-wrap items-center mt-3 text-sm font-medium text-gray-500 dark:text-gray-400 sm:mt-0">
<li>
<a href="/privacy.html" class="hover:underline me-4 md:me-6">Privacy Policy</a>
</li>
<li>
<a href="https://wah.su/radiquum" class="hover:underline">Contact</a>
</li>
</ul>
</div>
</footer>
<script src="/public/js/theme.js"></script>
<script src="/public/js/flowbite.min.js"></script>
<script src="/public/js/cards.js"></script>
<script src="/public/js/status.js"></script>
<script src="./static/js/checkstatus.js"></script>
</body>
</html>
</html>

390
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,5 @@
{
"devDependencies": {
"tailwindcss": "^3.4.3"
},
"dependencies": {
"flowbite": "^2.3.0"
"tailwindcss": "^3.4.15"
}
}

View file

@ -1,227 +1,200 @@
<!DOCTYPE html>
<html lang="en">
<head>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>wah.su | Privacy Policy</title>
<link href="/public/output.css" rel="stylesheet" />
<link rel="stylesheet" href="./static/tailwind.css" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Ubuntu+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap"
rel="stylesheet"
/>
<link rel="apple-touch-icon" sizes="180x180" href="/public/favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/public/favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/public/favicon/favicon-16x16.png">
<link rel="manifest" href="/public/favicon/site.webmanifest">
<link rel="prefetch" href="./index.html" />
<link rel="apple-touch-icon" sizes="180x180" href="./favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="./favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="./favicon/favicon-16x16.png">
<link rel="manifest" href="./favicon/site.webmanifest">
<meta charset="UTF-8">
<meta name="description" content="Privacy Policy for wah.su.">
<meta name="description" content="">
<meta name="keywords" content="wah.su, radiquum, invite-only, hosting">
<!-- Twitter Card data -->
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="https://home.wah.su/privacy.html">
<meta name="twitter:title" content="wah.su | Privacy Policy">
<meta name="twitter:description" content="Privacy Policy for wah.su.">
<meta name="twitter:image" content="https://home.wah.su/public/preview.png">
<meta name="twitter:description" content="Privacy Policy of wah.su">
<meta name="twitter:image" content="https://home.wah.su/static/og/privacy.png">
<!-- Open Graph data -->
<meta property="og:title" content="wah.su | Privacy Policy" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://home.wah.su/privacy.html" />
<meta property="og:image" content="https://home.wah.su/public/preview.png" />
<meta property="og:description" content="Privacy Policy for wah.su." />
</head>
<meta property="og:image" content="https://home.wah.su/static/og/privacy.png" />
<meta property="og:description" content="Privacy Policy of wah.su" />
</head>
<body class="light dark:bg-slate-900" id="body">
<header class="top-0 left-0 pt-4 pb-6 shadow-lg bg-slate-50 dark:bg-slate-800">
<body class="bg-[#120D0C] text-white ubuntu-mono-regular">
<div class="container flex flex-col w-full h-auto gap-16 p-8 md:p-16">
<div
class="flex flex-col gap-8 lg:items-center lg:justify-between lg:flex-row"
>
<div
class="flex flex-col md:flex-row gap-2 md:gap-0 items-center container max-w-[1440px] justify-between px-4">
<div class="self-start">
<a href="/">
<img src="/public/images/logo-light.svg" alt="wah.su" id="logo" />
</a>
</div>
<div class="self-start md:self-auto">
<!--noformat-->
<a href="https://status.wah.su" class="flex flex-row items-center gap-2" target="_blank">
<div class="w-4 h-4 transition ease-in bg-gray-500 rounded-full duration-400" id="status-icon"></div>
<p class="dark:text-slate-50" id="status-text">Fetching Services Status</p>
</a>
<!--noformat-->
</div>
<div class="flex flex-row items-center self-start justify-center gap-6 -ml-4">
<label class="inline-flex items-center cursor-pointer">
<span class="mr-4 text-sm font-medium text-gray-900 ms-3 dark:text-gray-300"><svg
class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
viewBox="0 0 24 24">
<path fill-rule="evenodd"
d="M13 3a1 1 0 1 0-2 0v2a1 1 0 1 0 2 0V3ZM6.343 4.929A1 1 0 0 0 4.93 6.343l1.414 1.414a1 1 0 0 0 1.414-1.414L6.343 4.929Zm12.728 1.414a1 1 0 0 0-1.414-1.414l-1.414 1.414a1 1 0 0 0 1.414 1.414l1.414-1.414ZM12 7a5 5 0 1 0 0 10 5 5 0 0 0 0-10Zm-9 4a1 1 0 1 0 0 2h2a1 1 0 1 0 0-2H3Zm16 0a1 1 0 1 0 0 2h2a1 1 0 1 0 0-2h-2ZM7.757 17.657a1 1 0 1 0-1.414-1.414l-1.414 1.414a1 1 0 1 0 1.414 1.414l1.414-1.414Zm9.9-1.414a1 1 0 0 0-1.414 1.414l1.414 1.414a1 1 0 0 0 1.414-1.414l-1.414-1.414ZM13 19a1 1 0 1 0-2 0v2a1 1 0 1 0 2 0v-2Z"
clip-rule="evenodd" />
</svg>
</span>
<input type="checkbox" class="sr-only peer" id="theme-toggle">
<div
class="relative w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full rtl:peer-checked:after:-translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:start-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-blue-600">
</div>
<span class="text-sm font-medium text-gray-900 ms-3 dark:text-gray-300"><svg
class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
viewBox="0 0 24 24">
<path fill-rule="evenodd"
d="M11.675 2.015a.998.998 0 0 0-.403.011C6.09 2.4 2 6.722 2 12c0 5.523 4.477 10 10 10 4.356 0 8.058-2.784 9.43-6.667a1 1 0 0 0-1.02-1.33c-.08.006-.105.005-.127.005h-.001l-.028-.002A5.227 5.227 0 0 0 20 14a8 8 0 0 1-8-8c0-.952.121-1.752.404-2.558a.996.996 0 0 0 .096-.428V3a1 1 0 0 0-.825-.985Z"
clip-rule="evenodd" />
</svg>
</span>
</label>
<a href="https://auth.wah.su"
class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center inline-flex items-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800">
<svg class="w-6 h-6 text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24"
height="24" fill="currentColor" viewBox="0 0 24 24">
<path fill-rule="evenodd"
d="M4.857 3A1.857 1.857 0 0 0 3 4.857v4.286C3 10.169 3.831 11 4.857 11h4.286A1.857 1.857 0 0 0 11 9.143V4.857A1.857 1.857 0 0 0 9.143 3H4.857Zm10 0A1.857 1.857 0 0 0 13 4.857v4.286c0 1.026.831 1.857 1.857 1.857h4.286A1.857 1.857 0 0 0 21 9.143V4.857A1.857 1.857 0 0 0 19.143 3h-4.286Zm-10 10A1.857 1.857 0 0 0 3 14.857v4.286C3 20.169 3.831 21 4.857 21h4.286A1.857 1.857 0 0 0 11 19.143v-4.286A1.857 1.857 0 0 0 9.143 13H4.857Zm10 0A1.857 1.857 0 0 0 13 14.857v4.286c0 1.026.831 1.857 1.857 1.857h4.286A1.857 1.857 0 0 0 21 19.143v-4.286A1.857 1.857 0 0 0 19.143 13h-4.286Z"
clip-rule="evenodd" />
</svg>
<p class="ml-2">Dashboard</p>
</a>
</div>
class="flex flex-col gap-4 text-4xl sm:items-center sm:text-6xl sm:flex-row"
>
<a href="./index.html" class="block"
><img class="w-96" src="static/LOGO.svg" alt="wah.su" id="logo"
/></a>
<p class="block">/Privacy</p>
</div>
</header>
<a
href="https://status.wah.su"
class="flex flex-row items-center justify-center gap-4"
target="_blank"
>
<div
class="w-6 h-6 transition ease-in bg-gray-500 rounded-full sm:w-8 sm:h-8 aspect-square duration-400"
id="status-icon"
></div>
<p class="text-xl sm:text-3xl" id="status-text">
Fetching Services Status
</p>
</a>
</div>
<!--noformat-->
<div class="container max-w-[768px] mt-4 px-4 text-gray-800 dark:text-slate-200">
<div class="bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto mb-4">
<h1 class="mb-4 text-2xl font-bold">Privacy Policy for wah.su</h1>
<p class="mb-4">
At wah.su, accessible from https://wah.su and its subdomains, one of our main priorities is the privacy of our visitors.
This Privacy Policy document contains types of information that is collected and recorded by wah.su and how we use it.
</p>
<p class="mb-4">
If you have additional questions or require more information about our Privacy Policy, do not hesitate to contact us.
</p>
</div>
<div class="flex flex-col gap-8 text-xl">
<div>
<h1 class="mb-4 text-4xl font-bold">Privacy Policy for wah.su</h1>
<p class="mb-4">
At wah.su, accessible from https://wah.su and its subdomains, one of
our main priorities is the privacy of our visitors. This Privacy
Policy document contains types of information that is collected and
recorded by wah.su and how we use it.
</p>
<p>
If you have additional questions or require more information about
our Privacy Policy, do not hesitate to contact us.
</p>
</div>
<div class="bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto mb-4">
<h2 class="mb-4 text-2xl font-bold">Log Files</h2>
<p class="mb-4">
wah.su follows a standard procedure of using log files.
These files log visitors when they visit websites.
All hosting companies do this and a part of hosting services' analytics.
The information collected by log files include internet protocol (IP) addresses, browser type, Internet Service Provider (ISP), date and timestamp, referring/exit pages, and possibly the number of clicks.
These are not linked to any information that is personally identifiable. The purpose of the information is for analyzing trends, administering the site, tracking users' movement on the website, and gathering demographic information.
</p>
</div>
<div>
<h1 class="mb-4 text-4xl font-bold">Log Files</h1>
<p>
wah.su follows a standard procedure of using log files. These files
log visitors when they visit websites. All hosting companies do this
and a part of hosting services' analytics. The information collected
by log files include internet protocol (IP) addresses, browser type,
Internet Service Provider (ISP), date and timestamp, referring/exit
pages, and possibly the number of clicks. These are not linked to
any information that is personally identifiable. The purpose of the
information is for analyzing trends, administering the site,
tracking users' movement on the website, and gathering demographic
information.
</p>
</div>
<div class="bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto mb-4">
<h2 class="mb-4 text-2xl font-bold">Cookies and Web Beacons</h2>
<p class="mb-4">
Like any other website, wah.su uses "cookies".
These cookies are used to store information including visitors' preferences, and the pages on the website that the visitor accessed or visited.
The information is used to optimize the users' experience by customizing our web page content based on visitors' browser type and/or other information.
</p>
</div>
<div>
<h1 class="mb-4 text-4xl font-bold">Cookies and Web Beacons</h1>
<p>
Like any other website, wah.su uses "cookies". These cookies are
used to store information including visitors' preferences, and the
pages on the website that the visitor accessed or visited. The
information is used to optimize the users' experience by customizing
our web page content based on visitors' browser type and/or other
information.
</p>
</div>
<div class="bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto mb-4">
<h2 class="mb-4 text-2xl font-bold">Privacy Policies</h2>
<p class="mb-4">
You may consult this list to find the Privacy Policy for each of the advertising partners of wah.su.
</p>
<p class="mb-4">
Third-party ad servers or ad networks uses technologies like cookies, JavaScript, or Web Beacons that are used in their respective advertisements and links that appear on wah.su, which are sent directly to users' browser.
They automatically receive your IP address when this occurs.
These technologies are used to measure the effectiveness of their advertising campaigns and/or to personalize the advertising content that you see on websites that you visit.
</p>
<p class="mb-4">
Note that wah.su has no access to or control over these cookies that are used by third-party advertisers. </p>
</div>
<!-- <div>
<h2 class="mb-4 text-4xl font-bold">Privacy Policies</h2>
<p class="mb-4">
You may consult this list to find the Privacy Policy for each of the
advertising partners of wah.su.
</p>
<p class="mb-4">
Third-party ad servers or ad networks uses technologies like
cookies, JavaScript, or Web Beacons that are used in their
respective advertisements and links that appear on wah.su, which are
sent directly to users' browser. They automatically receive your IP
address when this occurs. These technologies are used to measure the
effectiveness of their advertising campaigns and/or to personalize
the advertising content that you see on websites that you visit.
</p>
<p>
Note that wah.su has no access to or control over these cookies that
are used by third-party advertisers.
</p>
</div> -->
<div>
<h2 class="mb-4 text-4xl font-bold">Third Party Privacy Policies</h2>
<p class="mb-4">
wah.su's Privacy Policy does not apply to other advertisers or
websites. Thus, we are advising you to consult the respective
Privacy Policies of these third-party ad servers for more detailed
information. It may include their practices and instructions about
how to opt-out of certain options.
</p>
<p>
You can choose to disable cookies through your individual browser
options. To know more detailed information about cookie management
with specific web browsers, it can be found at the browsers'
respective websites.
</p>
</div>
<div class="bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto mb-4">
<h2 class="mb-4 text-2xl font-bold">Third Party Privacy Policies</h2>
<p class="mb-4">
wah.su's Privacy Policy does not apply to other advertisers or websites.
Thus, we are advising you to consult the respective Privacy Policies of these third-party ad servers for more detailed information.
It may include their practices and instructions about how to opt-out of certain options.
</p>
<p class="mb-4">
You can choose to disable cookies through your individual browser options.
To know more detailed information about cookie management with specific web browsers, it can be found at the browsers' respective websites.
</p>
</div>
<div>
<h2 class="mb-4 text-4xl font-bold">Children's Information</h2>
<p class="mb-4">
Another part of our priority is adding protection for children while
using the internet. We encourage parents and guardians to observe,
participate in, and/or monitor and guide their online activity.
</p>
<p>
wah.su does not knowingly collect any Personal Identifiable
Information from children under the age of 13. If you think that
your child provided this kind of information on our website, we
strongly encourage you to contact us immediately and we will do our
best efforts to promptly remove such information from our records.
</p>
</div>
<div class="bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto mb-4">
<h2 class="mb-4 text-2xl font-bold">Children's Information</h2>
<p class="mb-4">
Another part of our priority is adding protection for children while using the internet.
We encourage parents and guardians to observe, participate in, and/or monitor and guide their online activity.
</p>
<p class="mb-4">
wah.su does not knowingly collect any Personal Identifiable Information from children under the age of 13.
If you think that your child provided this kind of information on our website, we strongly encourage you to contact us immediately and we will do our best efforts to promptly remove such information from our records.
</p>
</div>
<div>
<h2 class="mb-4 text-4xl font-bold">Online Privacy Policy Only</h2>
<p>
This Privacy Policy applies only to our online activities and is
valid for visitors to our website with regards to the information
that they shared and/or collect in wah.su. This policy is not
applicable to any information collected offline or via channels
other than this website.
</p>
</div>
<div class="bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto mb-4">
<h2 class="mb-4 text-2xl font-bold">Online Privacy Policy Only</h2>
<p class="mb-4">
This Privacy Policy applies only to our online activities and is valid for visitors to our website with regards to the information that they shared and/or collect in wah.su.
This policy is not applicable to any information collected offline or via channels other than this website.
</p>
</div>
</div>
<!-- <div>
<h2 class="mb-4 text-4xl font-bold">Consent</h2>
<p>
By using our website, you hereby consent to our Privacy Policy and
agree to its Terms and Conditions.
</p>
</div> -->
<div class="bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto mb-4">
<h2 class="mb-4 text-2xl font-bold">Consent</h2>
<p class="mb-4">
By using our website, you hereby consent to our Privacy Policy and agree to its Terms and Conditions.
</p>
</div>
</div>
<div class="bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto mb-4">
<p>
Our Privacy Policy was created with the help of the <a href="https://www.privacypolicygenerator.org" class="font-medium text-blue-600 dark:text-blue-500 hover:underline">Privacy Policy Generator</a>.
</p>
</div>
<div>
<p>
Our Privacy Policy was created with the help of the
<a
href="https://www.privacypolicygenerator.org"
class="font-medium underline hover:text-[#ff851b] transition-colors"
>Privacy Policy Generator</a
>.
</p>
</div>
</div>
</div>
<!--noformat-->
<footer class="m-4 bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto md:flex md:items-center md:justify-between">
<span class="text-sm text-gray-500 sm:text-center dark:text-gray-400">© 2024 wah.su | All Rights
Reserved.
</span>
<ul class="flex flex-wrap items-center mt-3 text-sm font-medium text-gray-500 dark:text-gray-400 sm:mt-0">
<li>
<a href="/privacy.html" class="hover:underline me-4 md:me-6">Privacy Policy</a>
</li>
<li>
<a href="https://wah.su/radiquum" class="hover:underline">Contact</a>
</li>
</ul>
</div>
</footer>
<script src="/public/js/theme.js"></script>
<script src="/public/js/flowbite.min.js"></script>
<script src="/public/js/status.js"></script>
</body>
<script src="./static/js/checkstatus.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.3 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

View file

@ -1,90 +0,0 @@
const cards = [
{
image: "/public/images/vaultwarden.png",
name: "Vaultwarden",
description: "Unofficial Bitwarden compatible server.",
about: "https://github.com/dani-garcia/vaultwarden",
url: "https://vault.wah.su",
hasDarkMode: true,
},
{
image: "/public/images/nextcloud.png",
name: "Nextcloud",
description:
"productivity suite, offering file sharing and collaboration tools.",
about: "https://nextcloud.com/",
url: "https://cloud.wah.su",
hasDarkMode: false,
},
{
image: "/public/images/immich.png",
name: "Immich",
description: "platform for managing and browsing your photos.",
about: "https://immich.app",
url: "https://photos.wah.su",
hasDarkMode: false,
},
{
image: "/public/images/element.svg",
name: "Matrix",
description: "An open network for secure, decentralised communication.",
about: "https://matrix.org",
url: "https://chat.wah.su",
hasDarkMode: false,
},
{
image: "/public/images/zipline.png",
name: "Zipline",
description: "image uploading with ShareX compatibility.",
about: "https://zipline.diced.sh/",
url: "https://x.wah.su",
hasDarkMode: false,
},
];
const services = document.getElementById("services");
function renderCards() {
const theme = localStorage.getItem("theme");
services.innerHTML = "";
for (let index = 0; index < cards.length; index++) {
const image_name = cards[index].image.split(".")[0];
const image_ext = cards[index].image.split(".")[1];
const image_url = `${image_name}${
cards[index].hasDarkMode ? `-${theme}` : ""
}.${image_ext}`;
const template = `
<img class="rounded-t-lg object-cover h-[192px] w-full" src="${image_url}" alt="" />
<div class="p-5">
<h5 class="mb-2 text-2xl font-bold tracking-tight text-gray-800 dark:text-white">${cards[index].name}
</h5>
<p class="mb-3 font-normal text-gray-700 dark:text-gray-400">${cards[index].description}
</p>
<div class="flex gap-1 items-center justify-center flex-wrap">
<a href="${cards[index].about}" target="_blank"
class="w-full inline-flex justify-center items-center py-2.5 px-5 me-2 mb-2 text-sm font-medium text-gray-900 focus:outline-none bg-white rounded-lg border border-gray-200 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-100 dark:focus:ring-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700">
Read more
</a>
<a href="${cards[index].url}"
class="w-full inline-flex justify-center items-center text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-blue-600 dark:hover:bg-blue-700 focus:outline-none dark:focus:ring-blue-800">
open
<svg class="rtl:rotate-180 w-3.5 h-3.5 ms-2" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 14 10">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"
stroke-width="2" d="M1 5h12m0 0L9 1m4 4L9 9" />
</svg>
</a>
</div>
</div>
`;
const element = document.createElement("div");
element.className =
"max-w-[324px] sm:max-w-[275px] bg-white border border-gray-200 rounded-lg shadow dark:bg-gray-800 dark:border-gray-700";
element.innerHTML = template;
services.appendChild(element);
}
}
window.onload = renderCards();

File diff suppressed because one or more lines are too long

View file

@ -1,35 +0,0 @@
const bodyElement = document.getElementById("body");
const logo = document.getElementById("logo");
const themeToggle = document.getElementById("theme-toggle");
const setTheme = (theme) => {
bodyElement.classList.remove(theme == "light" ? "dark" : "light");
bodyElement.classList.add(theme == "light" ? "light" : "dark");
theme == "light"
? (themeToggle.checked = false)
: (themeToggle.checked = true);
logo.src = `/public/images/logo-${theme}.svg`;
localStorage.setItem("theme", theme);
};
function updateTheme() {
let theme = localStorage.getItem("theme");
if (theme) {
setTheme(theme);
} else {
setTheme("light");
}
}
themeToggle.addEventListener("click", () => {
let theme = localStorage.getItem("theme");
if (theme == "light") {
setTheme("dark");
renderCards();
} else {
setTheme("light");
renderCards();
}
});
updateTheme();

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

126
services.html Normal file
View file

@ -0,0 +1,126 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>wah.su | Services</title>
<link rel="stylesheet" href="./static/tailwind.css" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Ubuntu+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap"
rel="stylesheet" />
<link rel="prefetch" href="./index.html" />
<link rel="apple-touch-icon" sizes="180x180" href="./favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="./favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="./favicon/favicon-16x16.png">
<link rel="manifest" href="./favicon/site.webmanifest">
<meta charset="UTF-8">
<meta name="description" content="Services hosted at wah.su">
<meta name="keywords" content="wah.su, radiquum, invite-only, hosting">
<!-- Twitter Card data -->
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="https://home.wah.su/services.html">
<meta name="twitter:title" content="wah.su | Services">
<meta name="twitter:description" content="Services hosted at wah.su">
<meta name="twitter:image" content="https://home.wah.su/static/og/services.png">
<!-- Open Graph data -->
<meta property="og:title" content="wah.su | Services" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://home.wah.su/services.html" />
<meta property="og:image" content="https://home.wah.su/static/og/services.png" />
<meta property="og:description" content="Services hosted at wah.su" />
</head>
<body class="bg-[#120D0C] text-white ubuntu-mono-regular">
<div class="container flex flex-col w-full h-auto gap-8 p-8 md:p-16">
<div class="flex flex-col gap-8 pb-8 lg:items-center lg:justify-between lg:flex-row">
<div class="flex flex-col gap-4 text-4xl sm:items-center sm:text-6xl sm:flex-row">
<a href="./index.html" class="block"><img class="w-96" src="static/LOGO.svg" alt="wah.su" id="logo" /></a>
<p class="block">/Services</p>
</div>
<a href="https://status.wah.su" class="flex flex-row items-center justify-center gap-4" target="_blank">
<div class="w-6 h-6 transition ease-in bg-gray-500 rounded-full sm:w-8 sm:h-8 aspect-square duration-400"
id="status-icon"></div>
<p class="text-xl sm:text-3xl" id="status-text">
Fetching Services Status
</p>
</a>
</div>
<div>
<h2 class="mb-4 text-4xl font-bold">File Sharing</h2>
<div class="flex flex-wrap gap-4">
<div class="py-2 max-w-96">
<div class="flex items-center gap-4 mb-2">
<img alt="" src="./static/logos/nextcloud.png" class="w-16 h-16 rounded-full"/>
<p class="text-3xl font-bold">NextCloud</p>
</div>
<p class="text-xl">Productivity suite, offering file sharing and collaboration tools.</p>
</div>
<div class="py-2 max-w-96">
<div class="flex items-center gap-4 mb-2">
<img alt="" src="./static/logos/zipline.png" class="w-16 h-16 rounded-full"/>
<p class="text-3xl font-bold">Zipline</p>
</div>
<p class="text-xl">Image uploading with ShareX compatibility.</p>
</div>
</div>
</div>
<div>
<h2 class="mb-4 text-4xl font-bold">Media</h2>
<div class="flex flex-wrap gap-4">
<div class="py-2 max-w-96">
<div class="flex items-center gap-4 mb-2">
<img alt="" src="./static/logos/immich.png" class="w-16 h-16 rounded-full"/>
<p class="text-3xl font-bold">Immich</p>
</div>
<p class="text-xl">Platform for managing and browsing your photos.</p>
</div>
<div class="py-2 max-w-96">
<div class="flex items-center gap-4 mb-2">
<img alt="" src="./static/logos/navidrome.png" class="w-16 h-16 rounded-full"/>
<p class="text-3xl font-bold">Navidrome</p>
</div>
<p class="text-xl">Self-hosted music library and player with subsonic protocol support.</p>
</div>
</div>
</div>
<div>
<h2 class="mb-4 text-4xl font-bold">Security and Privacy</h2>
<div class="flex flex-wrap gap-4">
<div class="py-2 max-w-96">
<div class="flex items-center gap-4 mb-2">
<img alt="" src="./static/logos/vaultwarden.png" class="w-16 h-16 rounded-full"/>
<p class="text-3xl font-bold">Vaultwarden</p>
</div>
<p class="text-xl">Unofficial Bitwarden password manager compatible server.</p>
</div>
</div>
</div>
<div>
<h2 class="mb-4 text-4xl font-bold">Communication</h2>
<div class="flex flex-wrap gap-4">
<div class="py-2 max-w-96">
<div class="flex items-center gap-4 mb-2">
<img alt="" src="./static/logos/element.svg" class="w-16 h-16 rounded-full"/>
<p class="text-3xl font-bold">Matrix</p>
</div>
<p class="text-xl">An open network for secure, decentralised communication.</p>
</div>
</div>
</div>
</div>
<script src="./static/js/checkstatus.js"></script>
</body>
</html>

View file

@ -1,3 +0,0 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

27
src/tailwind.css Normal file
View file

@ -0,0 +1,27 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
.ubuntu-mono-regular {
font-family: "Ubuntu Mono", monospace;
font-weight: 400;
font-style: normal;
}
.ubuntu-mono-bold {
font-family: "Ubuntu Mono", monospace;
font-weight: 700;
font-style: normal;
}
.ubuntu-mono-regular-italic {
font-family: "Ubuntu Mono", monospace;
font-weight: 400;
font-style: italic;
}
.ubuntu-mono-bold-italic {
font-family: "Ubuntu Mono", monospace;
font-weight: 700;
font-style: italic;
}

View file

@ -15,7 +15,7 @@ const serviceDown = {
};
const serviceUnknown = {
color: ["bg-gray-500", "dark:bg-gray-400"],
text: "Services Status Unknown",
text: "Unknown or Failed to fetch",
};
async function getServicesHealth() {
@ -33,42 +33,39 @@ async function getServicesHealth() {
heartbeatDict[key][heartbeatDict[key].length - 1].status
);
}
let status = "up";
const count = lastHeartbeats.reduce((partialSum, a) => partialSum + a, 0);
if (count === lastHeartbeats.length) {
status = "up";
} else if (count === 0) {
status = "down";
} else {
status = "degraded";
}
if (status === "up") {
statusIcon.classList.add(...serviceUp.color);
statusIcon.classList.remove(
...serviceDegraded.color,
...serviceDown.color,
...serviceUnknown.color
);
statusText.textContent = serviceUp.text;
} else if (status === "degraded") {
statusIcon.classList.add(...serviceDegraded.color);
statusIcon.classList.remove(
...serviceUp.color,
...serviceDown.color,
...serviceUnknown.color
);
statusText.textContent = serviceDegraded.text;
} else if (status === "down") {
statusIcon.classList.add(...serviceDown.color);
statusIcon.classList.remove(
...serviceUp.color,
...serviceDegraded.color,
...serviceUnknown.color
);
statusText.textContent = serviceDown.text;
switch (count) {
case lastHeartbeats.length: {
statusIcon.classList.add(...serviceUp.color);
statusIcon.classList.remove(
...serviceDegraded.color,
...serviceDown.color,
...serviceUnknown.color
);
statusText.textContent = serviceUp.text;
break;
}
case 0: {
statusIcon.classList.add(...serviceDown.color);
statusIcon.classList.remove(
...serviceUp.color,
...serviceDegraded.color,
...serviceUnknown.color
);
statusText.textContent = serviceDown.text;
break;
}
default: {
statusIcon.classList.add(...serviceDegraded.color);
statusIcon.classList.remove(
...serviceUp.color,
...serviceDown.color,
...serviceUnknown.color
);
statusText.textContent = serviceDegraded.text;
break;
}
}
} catch (error) {
statusIcon.classList.add(...serviceUnknown.color);
@ -84,5 +81,4 @@ async function getServicesHealth() {
}
getServicesHealth();
setInterval(getServicesHealth, 600000);

52
static/logo.svg Normal file
View file

@ -0,0 +1,52 @@
<svg width="551" height="111" viewBox="0 0 551 111" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_33_157)">
<g clip-path="url(#clip1_33_157)">
<g clip-path="url(#clip2_33_157)">
<g clip-path="url(#clip3_33_157)">
<g clip-path="url(#clip4_33_157)">
<g clip-path="url(#clip5_33_157)">
<path d="M0 53.0013C0 23.7292 23.4314 0 52.3351 0C81.2393 0 104.67 23.7297 104.671 53.0013C104.671 82.2734 81.2393 106.003 52.3351 106.003C23.4309 106.003 0 82.2734 0 53.0013ZM52.3351 102.388C79.2679 102.388 101.101 80.277 101.101 53.0013C101.101 25.7256 79.2679 3.6147 52.3351 3.6147C25.4023 3.6147 3.56927 25.7261 3.56927 53.0013C3.56927 80.277 25.4027 102.388 52.3351 102.388Z" fill="#FE633D"/>
<path d="M52.3354 105.473C80.9503 105.473 104.147 81.9807 104.147 53.0015C104.147 24.0223 80.9503 0.530029 52.3354 0.530029C23.7204 0.530029 0.523438 24.0223 0.523438 53.0015C0.523438 81.9807 23.7204 105.473 52.3354 105.473Z" fill="#FE633D"/>
<g clip-path="url(#clip6_33_157)">
<g clip-path="url(#clip7_33_157)">
<path d="M81.0596 52.8843C81.0596 56.9643 77.8002 60.2633 73.7698 60.2633C69.7465 60.2633 66.4854 56.9643 66.4854 52.8843C66.4854 48.8099 73.1235 42.1573 77.1485 42.1573C81.1808 42.1573 81.0596 48.8099 81.0596 52.8843Z" fill="white"/>
<path d="M38.1869 52.8843C38.1869 56.9643 34.9276 60.2633 30.8962 60.2633C26.8721 60.2633 23.6136 56.9643 23.6136 52.8843C23.6136 48.8099 23.365 42.1573 27.3882 42.1573C31.4196 42.1573 38.1869 48.8099 38.1869 52.8843Z" fill="white"/>
<path d="M68.7905 38.1255C68.7905 42.2045 65.5312 45.5054 61.5025 45.5054C57.4775 45.5054 54.2163 42.2045 54.2163 38.1255C54.2163 34.052 57.4775 24.5085 61.5025 24.5085C65.5312 24.5076 68.7905 34.051 68.7905 38.1255Z" fill="white"/>
<path d="M70.3857 67.1504C72.3408 75.3085 64.095 81.7211 51.9507 81.4884C39.819 81.2547 31.7168 74.6539 33.846 66.7295C35.9716 58.8151 44.2165 52.3925 52.2658 52.3925C60.3239 52.3934 68.4315 59.0042 70.3857 67.1504Z" fill="white"/>
<path d="M50.3321 38.1255C50.3321 42.2045 47.0719 45.5054 43.0432 45.5054C39.0173 45.5054 35.7588 42.2045 35.7588 38.1255C35.7588 34.052 39.0173 24.5085 43.0432 24.5085C47.0719 24.5076 50.3321 34.051 50.3321 38.1255Z" fill="white"/>
</g>
</g>
</g>
</g>
<path d="M144.44 96.7675H134.078L120.47 37.3439H129.334L140.07 85.6414L150.682 43.5392H159.421L170.033 85.6414L180.769 37.3439H189.134L175.526 96.7675H165.289L154.927 55.171L144.44 96.7675ZM221.718 98.2847C214.56 98.2847 209.026 96.6157 205.114 93.2779C201.202 89.9569 199.246 85.3463 199.246 79.4461C199.246 73.7988 201.077 69.5001 204.739 66.55C208.401 63.5999 213.895 62.1248 221.219 62.1248H243.691V59.5961C243.691 54.1174 242.417 50.2148 239.87 47.8885C237.34 45.5789 233.037 44.4242 226.962 44.4242C219.138 44.4242 212.064 46.1521 205.738 49.6079L202.867 41.6427C210.024 37.7654 218.181 35.8267 227.336 35.8267C236.158 35.8267 242.584 37.6137 246.612 41.1875C250.657 44.7782 252.679 50.4508 252.679 58.2054V96.7675H245.938L244.814 90.4458C241.402 93.0588 237.781 95.0143 233.953 96.3123C230.124 97.6272 226.046 98.2847 221.718 98.2847ZM222.967 89.6872C230.79 89.6872 237.698 87.4114 243.691 82.8598V70.2165H220.969C216.724 70.2165 213.578 70.992 211.531 72.5429C209.5 74.1107 208.485 76.4117 208.485 79.4461C208.485 82.8177 209.691 85.3632 212.105 87.0827C214.519 88.819 218.139 89.6872 222.967 89.6872ZM283.516 96.7675H274.527V7H283.516V42.7806C289.825 38.1447 296.816 35.8267 304.49 35.8267C311.381 35.8267 316.599 37.6811 320.145 41.3898C323.674 45.0985 325.438 50.7037 325.438 58.2054V96.7675H316.475V59.5961C316.475 54.286 315.393 50.4255 313.229 48.0149C311.065 45.6211 307.644 44.4242 302.966 44.4242C299.637 44.4242 296.292 44.9889 292.929 46.1184C289.567 47.2647 286.429 48.9336 283.516 51.1251V96.7675ZM372.005 98.2847C369.425 98.2847 367.219 97.3575 365.388 95.5031C363.557 93.6488 362.642 91.4151 362.642 88.8022C362.642 86.2735 363.557 84.0567 365.388 82.1518C367.219 80.2637 369.425 79.3197 372.005 79.3197C374.585 79.3197 376.791 80.2637 378.622 82.1518C380.453 84.0567 381.368 86.2735 381.368 88.8022C381.368 91.4151 380.453 93.6488 378.622 95.5031C376.791 97.3575 374.585 98.2847 372.005 98.2847ZM444.29 98.2847C434.053 98.2847 424.897 95.8403 416.824 90.9515L420.445 83.2391C424.023 85.3463 427.852 86.9478 431.93 88.0436C436.008 89.1393 440.253 89.6872 444.664 89.6872C455.9 89.6872 461.518 86.4 461.518 79.8254C461.518 77.3811 460.769 75.5857 459.271 74.4394C457.773 73.3099 455.151 72.4923 451.406 71.9866L437.174 69.9637C431.098 69.0365 426.67 67.3676 423.89 64.9569C421.094 62.5631 419.695 59.0061 419.695 54.286C419.695 48.3858 421.843 43.8342 426.137 40.6312C430.415 37.4282 436.425 35.8267 444.165 35.8267C452.904 35.8267 461.144 37.8497 468.884 41.8955L465.638 49.7344C459.063 46.1942 451.822 44.4242 443.915 44.4242C433.844 44.4242 428.809 47.5007 428.809 53.6538C428.809 56.0139 429.558 57.7418 431.056 58.8376C432.554 59.9333 435.176 60.734 438.921 61.2398L453.154 63.2627C459.313 64.1056 463.765 65.7492 466.512 68.1936C469.259 70.638 470.632 74.3045 470.632 79.1933C470.632 85.3463 468.368 90.0665 463.84 93.3538C459.296 96.641 452.779 98.2847 444.29 98.2847ZM511.955 98.2847C505.13 98.2847 499.928 96.405 496.35 92.6457C492.771 88.9033 490.981 83.3234 490.981 75.906V37.3439H499.97V74.5153C499.97 79.8254 501.052 83.6774 503.216 86.0712C505.38 88.4819 508.792 89.6872 513.453 89.6872C516.866 89.6872 520.253 89.0972 523.616 87.9172C526.995 86.7371 530.099 85.0935 532.929 82.9863V37.3439H541.918V96.7675H535.176L534.177 90.4458C530.848 93.0588 527.328 95.0143 523.616 96.3123C519.92 97.6272 516.033 98.2847 511.955 98.2847Z" fill="#FF851B"/>
</g>
</g>
</g>
</g>
<defs>
<clipPath id="clip0_33_157">
<rect width="551" height="111" fill="white"/>
</clipPath>
<clipPath id="clip1_33_157">
<rect width="551" height="106" fill="white"/>
</clipPath>
<clipPath id="clip2_33_157">
<rect width="551" height="111" fill="white"/>
</clipPath>
<clipPath id="clip3_33_157">
<rect width="550.601" height="111" fill="white" transform="translate(0.398682)"/>
</clipPath>
<clipPath id="clip4_33_157">
<rect width="104.671" height="106.003" fill="white"/>
</clipPath>
<clipPath id="clip5_33_157">
<rect width="104.671" height="106.003" fill="white"/>
</clipPath>
<clipPath id="clip6_33_157">
<rect width="57.4493" height="56.986" fill="white" transform="translate(23.6106 24.5085)"/>
</clipPath>
<clipPath id="clip7_33_157">
<rect width="57.4493" height="56.986" fill="white" transform="translate(23.6106 24.5085)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

View file

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

BIN
static/logos/navidrome.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View file

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View file

Before

Width:  |  Height:  |  Size: 7 KiB

After

Width:  |  Height:  |  Size: 7 KiB

View file

Before

Width:  |  Height:  |  Size: 193 KiB

After

Width:  |  Height:  |  Size: 193 KiB

BIN
static/og/index.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
static/og/privacy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
static/og/services.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

980
static/tailwind.css Normal file
View file

@ -0,0 +1,980 @@
*, ::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: rgb(59 130 246 / 0.5);
--tw-ring-offset-shadow: 0 0 #0000;
--tw-ring-shadow: 0 0 #0000;
--tw-shadow: 0 0 #0000;
--tw-shadow-colored: 0 0 #0000;
--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: ;
--tw-contain-size: ;
--tw-contain-layout: ;
--tw-contain-paint: ;
--tw-contain-style: ;
}
::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: rgb(59 130 246 / 0.5);
--tw-ring-offset-shadow: 0 0 #0000;
--tw-ring-shadow: 0 0 #0000;
--tw-shadow: 0 0 #0000;
--tw-shadow-colored: 0 0 #0000;
--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: ;
--tw-contain-size: ;
--tw-contain-layout: ;
--tw-contain-paint: ;
--tw-contain-style: ;
}
/*
! tailwindcss v3.4.15 | MIT License | https://tailwindcss.com
*/
/*
1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
*/
*,
::before,
::after {
box-sizing: border-box;
/* 1 */
border-width: 0;
/* 2 */
border-style: solid;
/* 2 */
border-color: #e5e7eb;
/* 2 */
}
::before,
::after {
--tw-content: '';
}
/*
1. Use a consistent sensible line-height in all browsers.
2. Prevent adjustments of font size after orientation changes in iOS.
3. Use a more readable tab size.
4. Use the user's configured `sans` font-family by default.
5. Use the user's configured `sans` font-feature-settings by default.
6. Use the user's configured `sans` font-variation-settings by default.
7. Disable tap highlights on iOS
*/
html,
:host {
line-height: 1.5;
/* 1 */
-webkit-text-size-adjust: 100%;
/* 2 */
-moz-tab-size: 4;
/* 3 */
-o-tab-size: 4;
tab-size: 4;
/* 3 */
font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
/* 4 */
font-feature-settings: normal;
/* 5 */
font-variation-settings: normal;
/* 6 */
-webkit-tap-highlight-color: transparent;
/* 7 */
}
/*
1. Remove the margin in all browsers.
2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
*/
body {
margin: 0;
/* 1 */
line-height: inherit;
/* 2 */
}
/*
1. Add the correct height in Firefox.
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
3. Ensure horizontal rules are visible by default.
*/
hr {
height: 0;
/* 1 */
color: inherit;
/* 2 */
border-top-width: 1px;
/* 3 */
}
/*
Add the correct text decoration in Chrome, Edge, and Safari.
*/
abbr:where([title]) {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
}
/*
Remove the default font size and weight for headings.
*/
h1,
h2,
h3,
h4,
h5,
h6 {
font-size: inherit;
font-weight: inherit;
}
/*
Reset links to optimize for opt-in styling instead of opt-out.
*/
a {
color: inherit;
text-decoration: inherit;
}
/*
Add the correct font weight in Edge and Safari.
*/
b,
strong {
font-weight: bolder;
}
/*
1. Use the user's configured `mono` font-family by default.
2. Use the user's configured `mono` font-feature-settings by default.
3. Use the user's configured `mono` font-variation-settings by default.
4. Correct the odd `em` font sizing in all browsers.
*/
code,
kbd,
samp,
pre {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
/* 1 */
font-feature-settings: normal;
/* 2 */
font-variation-settings: normal;
/* 3 */
font-size: 1em;
/* 4 */
}
/*
Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/*
Prevent `sub` and `sup` elements from affecting the line height in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/*
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
3. Remove gaps between table borders by default.
*/
table {
text-indent: 0;
/* 1 */
border-color: inherit;
/* 2 */
border-collapse: collapse;
/* 3 */
}
/*
1. Change the font styles in all browsers.
2. Remove the margin in Firefox and Safari.
3. Remove default padding in all browsers.
*/
button,
input,
optgroup,
select,
textarea {
font-family: inherit;
/* 1 */
font-feature-settings: inherit;
/* 1 */
font-variation-settings: inherit;
/* 1 */
font-size: 100%;
/* 1 */
font-weight: inherit;
/* 1 */
line-height: inherit;
/* 1 */
letter-spacing: inherit;
/* 1 */
color: inherit;
/* 1 */
margin: 0;
/* 2 */
padding: 0;
/* 3 */
}
/*
Remove the inheritance of text transform in Edge and Firefox.
*/
button,
select {
text-transform: none;
}
/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Remove default button styles.
*/
button,
input:where([type='button']),
input:where([type='reset']),
input:where([type='submit']) {
-webkit-appearance: button;
/* 1 */
background-color: transparent;
/* 2 */
background-image: none;
/* 2 */
}
/*
Use the modern Firefox focus style for all focusable elements.
*/
:-moz-focusring {
outline: auto;
}
/*
Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
*/
:-moz-ui-invalid {
box-shadow: none;
}
/*
Add the correct vertical alignment in Chrome and Firefox.
*/
progress {
vertical-align: baseline;
}
/*
Correct the cursor style of increment and decrement buttons in Safari.
*/
::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
height: auto;
}
/*
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/
[type='search'] {
-webkit-appearance: textfield;
/* 1 */
outline-offset: -2px;
/* 2 */
}
/*
Remove the inner padding in Chrome and Safari on macOS.
*/
::-webkit-search-decoration {
-webkit-appearance: none;
}
/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button;
/* 1 */
font: inherit;
/* 2 */
}
/*
Add the correct display in Chrome and Safari.
*/
summary {
display: list-item;
}
/*
Removes the default spacing and border for appropriate elements.
*/
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;
}
/*
Reset default styling for dialogs.
*/
dialog {
padding: 0;
}
/*
Prevent resizing textareas horizontally by default.
*/
textarea {
resize: vertical;
}
/*
1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
2. Set the default placeholder color to the user's configured gray 400 color.
*/
input::-moz-placeholder, textarea::-moz-placeholder {
opacity: 1;
/* 1 */
color: #9ca3af;
/* 2 */
}
input::placeholder,
textarea::placeholder {
opacity: 1;
/* 1 */
color: #9ca3af;
/* 2 */
}
/*
Set the default cursor for buttons.
*/
button,
[role="button"] {
cursor: pointer;
}
/*
Make sure disabled buttons don't get the pointer cursor.
*/
:disabled {
cursor: default;
}
/*
1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
This can trigger a poorly considered lint error in some tools but is included by design.
*/
img,
svg,
video,
canvas,
audio,
iframe,
embed,
object {
display: block;
/* 1 */
vertical-align: middle;
/* 2 */
}
/*
Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
*/
img,
video {
max-width: 100%;
height: auto;
}
/* Make elements with the HTML hidden attribute stay hidden by default */
[hidden]:where(:not([hidden="until-found"])) {
display: none;
}
.container {
width: 100%;
margin-right: auto;
margin-left: auto;
}
@media (min-width: 640px) {
.container {
max-width: 640px;
}
}
@media (min-width: 768px) {
.container {
max-width: 768px;
}
}
@media (min-width: 1024px) {
.container {
max-width: 1024px;
}
}
@media (min-width: 1280px) {
.container {
max-width: 1280px;
}
}
@media (min-width: 1536px) {
.container {
max-width: 1536px;
}
}
.absolute {
position: absolute;
}
.inset-0 {
inset: 0px;
}
.-z-10 {
z-index: -10;
}
.mx-auto {
margin-left: auto;
margin-right: auto;
}
.mb-4 {
margin-bottom: 1rem;
}
.mb-2 {
margin-bottom: 0.5rem;
}
.mb-8 {
margin-bottom: 2rem;
}
.block {
display: block;
}
.flex {
display: flex;
}
.aspect-square {
aspect-ratio: 1 / 1;
}
.h-6 {
height: 1.5rem;
}
.h-\[100dvh\] {
height: 100dvh;
}
.h-auto {
height: auto;
}
.h-full {
height: 100%;
}
.h-16 {
height: 4rem;
}
.w-6 {
width: 1.5rem;
}
.w-96 {
width: 24rem;
}
.w-full {
width: 100%;
}
.w-16 {
width: 4rem;
}
.max-w-screen-xl {
max-width: 1280px;
}
.max-w-96 {
max-width: 24rem;
}
.list-inside {
list-style-position: inside;
}
.list-disc {
list-style-type: disc;
}
.flex-row {
flex-direction: row;
}
.flex-col {
flex-direction: column;
}
.flex-col-reverse {
flex-direction: column-reverse;
}
.flex-wrap {
flex-wrap: wrap;
}
.items-center {
align-items: center;
}
.justify-center {
justify-content: center;
}
.justify-between {
justify-content: space-between;
}
.gap-16 {
gap: 4rem;
}
.gap-4 {
gap: 1rem;
}
.gap-8 {
gap: 2rem;
}
.gap-0 {
gap: 0px;
}
.rounded-full {
border-radius: 9999px;
}
.bg-\[\#120D0C\] {
--tw-bg-opacity: 1;
background-color: rgb(18 13 12 / var(--tw-bg-opacity, 1));
}
.bg-gray-500 {
--tw-bg-opacity: 1;
background-color: rgb(107 114 128 / var(--tw-bg-opacity, 1));
}
.bg-green-500 {
--tw-bg-opacity: 1;
background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1));
}
.bg-red-600 {
--tw-bg-opacity: 1;
background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1));
}
.bg-yellow-400 {
--tw-bg-opacity: 1;
background-color: rgb(250 204 21 / var(--tw-bg-opacity, 1));
}
.object-cover {
-o-object-fit: cover;
object-fit: cover;
}
.p-8 {
padding: 2rem;
}
.p-4 {
padding: 1rem;
}
.py-2 {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
}
.py-1 {
padding-top: 0.25rem;
padding-bottom: 0.25rem;
}
.pb-8 {
padding-bottom: 2rem;
}
.text-2xl {
font-size: 1.5rem;
line-height: 2rem;
}
.text-4xl {
font-size: 2.25rem;
line-height: 2.5rem;
}
.text-lg {
font-size: 1.125rem;
line-height: 1.75rem;
}
.text-xl {
font-size: 1.25rem;
line-height: 1.75rem;
}
.text-8xl {
font-size: 6rem;
line-height: 1;
}
.text-3xl {
font-size: 1.875rem;
line-height: 2.25rem;
}
.font-bold {
font-weight: 700;
}
.font-medium {
font-weight: 500;
}
.text-white {
--tw-text-opacity: 1;
color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}
.text-blue-600 {
--tw-text-opacity: 1;
color: rgb(37 99 235 / var(--tw-text-opacity, 1));
}
.underline {
text-decoration-line: underline;
}
.blur-sm {
--tw-blur: blur(4px);
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}
.transition {
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 150ms;
}
.transition-colors {
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 150ms;
}
.ease-in {
transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
}
.ubuntu-mono-regular {
font-family: "Ubuntu Mono", monospace;
font-weight: 400;
font-style: normal;
}
.ubuntu-mono-bold {
font-family: "Ubuntu Mono", monospace;
font-weight: 700;
font-style: normal;
}
.ubuntu-mono-regular-italic {
font-family: "Ubuntu Mono", monospace;
font-weight: 400;
font-style: italic;
}
.ubuntu-mono-bold-italic {
font-family: "Ubuntu Mono", monospace;
font-weight: 700;
font-style: italic;
}
.hover\:text-\[\#ff851b\]:hover {
--tw-text-opacity: 1;
color: rgb(255 133 27 / var(--tw-text-opacity, 1));
}
.hover\:underline:hover {
text-decoration-line: underline;
}
@media (min-width: 640px) {
.sm\:h-8 {
height: 2rem;
}
.sm\:w-8 {
width: 2rem;
}
.sm\:flex-row {
flex-direction: row;
}
.sm\:items-center {
align-items: center;
}
.sm\:text-2xl {
font-size: 1.5rem;
line-height: 2rem;
}
.sm\:text-3xl {
font-size: 1.875rem;
line-height: 2.25rem;
}
.sm\:text-6xl {
font-size: 3.75rem;
line-height: 1;
}
}
@media (min-width: 768px) {
.md\:p-16 {
padding: 4rem;
}
}
@media (min-width: 1024px) {
.lg\:flex-row {
flex-direction: row;
}
.lg\:items-end {
align-items: flex-end;
}
.lg\:items-center {
align-items: center;
}
.lg\:justify-between {
justify-content: space-between;
}
.lg\:text-right {
text-align: right;
}
}
@media (prefers-color-scheme: dark) {
.dark\:bg-gray-400 {
--tw-bg-opacity: 1;
background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1));
}
.dark\:bg-green-400 {
--tw-bg-opacity: 1;
background-color: rgb(74 222 128 / var(--tw-bg-opacity, 1));
}
.dark\:bg-red-500 {
--tw-bg-opacity: 1;
background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));
}
.dark\:bg-yellow-200 {
--tw-bg-opacity: 1;
background-color: rgb(254 240 138 / var(--tw-bg-opacity, 1));
}
.dark\:text-blue-500 {
--tw-text-opacity: 1;
color: rgb(59 130 246 / var(--tw-text-opacity, 1));
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 MiB

View file

@ -1,19 +1,13 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
darkMode: "selector",
content: [
"./index.html",
"./privacy.html",
"./src/**/*.{html,js}",
"./public/js/cards.js",
"./public/js/status.js",
"./node_modules/flowbite/**/*.js",
],
content: ["./index.html", "./services.html", "./privacy.html", "./static/js/**/*.js"],
theme: {
container: {
center: true,
},
extend: {},
extend: {
},
},
plugins: [require("flowbite/plugin")],
};
plugins: [],
}