First Version
This commit is contained in:
10
.gitignore
vendored
Normal file
10
.gitignore
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# OS
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
*~
|
||||||
|
|
||||||
|
# Editor
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
133
.htaccess
Normal file
133
.htaccess
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
# ArcaneNeko Website - .htaccess Configuration
|
||||||
|
# Apache server configuration rules
|
||||||
|
|
||||||
|
# Enable Rewrite Engine
|
||||||
|
RewriteEngine On
|
||||||
|
RewriteBase /
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Remove .html extension from URLs
|
||||||
|
# ============================================
|
||||||
|
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.html -f
|
||||||
|
RewriteRule ^(.*)$ $1.html [L]
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# SECURITY & BASIC PROTECTION
|
||||||
|
# ============================================
|
||||||
|
|
||||||
|
# Block access to hidden files (dotfiles)
|
||||||
|
<Files ~ "^\.">
|
||||||
|
Require all denied
|
||||||
|
</Files>
|
||||||
|
|
||||||
|
# Block access to config and environment files
|
||||||
|
<FilesMatch "\.(env|config|conf|log|sh|sql)$">
|
||||||
|
Require all denied
|
||||||
|
</FilesMatch>
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# CUSTOM ERROR PAGES
|
||||||
|
# ============================================
|
||||||
|
ErrorDocument 400 /400
|
||||||
|
ErrorDocument 403 /403
|
||||||
|
ErrorDocument 404 /404
|
||||||
|
ErrorDocument 500 /500
|
||||||
|
ErrorDocument 502 /502
|
||||||
|
ErrorDocument 503 /503
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# CACHE CONTROL & PERFORMANCE
|
||||||
|
# ============================================
|
||||||
|
|
||||||
|
# Static assets caching - 1 year
|
||||||
|
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|webp|svg|eot|otf|woff|woff2|ttf|css|js)$">
|
||||||
|
Header set Cache-Control "max-age=31536000, public"
|
||||||
|
</FilesMatch>
|
||||||
|
|
||||||
|
# HTML documents - no cache
|
||||||
|
<FilesMatch "\.(html|htm)$">
|
||||||
|
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
|
||||||
|
Header set Pragma "no-cache"
|
||||||
|
Header set Expires "0"
|
||||||
|
</FilesMatch>
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# BROWSER CACHING & COMPRESSION
|
||||||
|
# ============================================
|
||||||
|
|
||||||
|
# Enable Gzip compression (mod_deflate)
|
||||||
|
<IfModule mod_deflate.c>
|
||||||
|
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/x-javascript application/json application/rss+xml font/ttf font/otf
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# MIME TYPES & FONT ACCESS
|
||||||
|
# ============================================
|
||||||
|
|
||||||
|
# Allow CORS for web fonts
|
||||||
|
<FilesMatch "\.(woff|woff2|ttf|eot|svg)$">
|
||||||
|
Header set Access-Control-Allow-Origin "*"
|
||||||
|
</FilesMatch>
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# SECURITY HEADERS
|
||||||
|
# ============================================
|
||||||
|
|
||||||
|
Header set X-Content-Type-Options "nosniff"
|
||||||
|
Header set X-Frame-Options "DENY"
|
||||||
|
Header set X-XSS-Protection "1; mode=block"
|
||||||
|
Header set Referrer-Policy "strict-origin-when-cross-origin"
|
||||||
|
Header set Permissions-Policy "geolocation=(), microphone=(), camera=()"
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# SITEMAP
|
||||||
|
# ============================================
|
||||||
|
RewriteRule ^sitemap\.xml$ /sitemap.xml [L]
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# ROBOTS.TXT
|
||||||
|
# ============================================
|
||||||
|
RewriteRule ^robots\.txt$ /robots.txt [L]
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# HTTPS & FORCE SSL (optional)
|
||||||
|
# ============================================
|
||||||
|
# Uncomment the next 3 lines to force HTTPS redirect
|
||||||
|
# RewriteCond %{HTTPS} off
|
||||||
|
# RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# PHP & SERVER-SIDE PROCESSING (optional)
|
||||||
|
# ============================================
|
||||||
|
# If your site needs PHP, uncomment:
|
||||||
|
# AddType application/x-httpd-php .php
|
||||||
|
# DirectoryIndex index.php index.html
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# CLIENT SIDE ROUTING (SPA support - optional)
|
||||||
|
# ============================================
|
||||||
|
# For single-page applications, route all non-file/non-api requests to index.html
|
||||||
|
# Uncomment if you implement client-side routing
|
||||||
|
#
|
||||||
|
# RewriteCond %{REQUEST_FILENAME} !-f
|
||||||
|
# RewriteCond %{REQUEST_FILENAME} !-d
|
||||||
|
# RewriteRule ^ index.html [L]
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# NGINX COMPATIBILITY NOTES
|
||||||
|
# ============================================
|
||||||
|
# This .htaccess is for Apache. If running with Nginx:
|
||||||
|
# - Nginx does not support .htaccess; rules must be in server config
|
||||||
|
# - ErrorDocument directives need server-level config in Nginx
|
||||||
|
# - Header directives need 'add_header' in Nginx context
|
||||||
|
# - Rewrite rules need 'rewrite' directive in Nginx
|
||||||
|
#
|
||||||
|
# Example Nginx config for static assets:
|
||||||
|
# location ~* \.(ico|pdf|flv|jpg|jpeg|png|gif|webp|svg|eot|otf|woff|woff2|ttf|css|js)$ {
|
||||||
|
# expires 1y;
|
||||||
|
# add_header Cache-Control "public";
|
||||||
|
# try_files $uri =404;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# Example Nginx config for sitemap:
|
||||||
|
# rewrite ^/sitemap.xml$ /sitemap.xml break;
|
||||||
109
400.html
Normal file
109
400.html
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" data-theme="crimson">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>400 - Bad Request | ArcaneNeko</title>
|
||||||
|
<meta name="description" content="The request could not be processed.">
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta property="og:url" content="https://arcaneneko.com/400">
|
||||||
|
<meta property="og:title" content="400 - Bad Request">
|
||||||
|
<meta property="og:description" content="The request could not be processed.">
|
||||||
|
<meta property="og:image" content="https://arcaneneko.com/og-image.png">
|
||||||
|
<meta name="theme-color" content="#dc143c">
|
||||||
|
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
||||||
|
<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=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
:root,[data-theme="crimson"]{--bg:#07040a;--bg-alt:#0d070c;--bg-card:rgba(255,255,255,0.04);--bg-card-hover:rgba(255,255,255,0.07);--glass-border:rgba(255,255,255,0.08);--glass-border-hover:rgba(220,20,60,0.45);--accent:#dc143c;--accent-light:#ff1744;--accent-dark:#960f2c;--accent-glow:rgba(220,20,60,0.35);--accent-glow-sm:rgba(220,20,60,0.18);--text:#fff;--text-2:#ddd0d4;--text-muted:#8c7a80;--nav-bg:rgba(7,4,10,0.85);--nav-border:rgba(255,255,255,0.06);--divider:rgba(255,255,255,0.06);--hero-glow-1:rgba(220,20,60,0.22);--hero-glow-2:rgba(220,20,60,0.1);--stats-bg:rgba(220,20,60,0.07);--stats-border:rgba(220,20,60,0.18);--shadow-deep:rgba(0,0,0,0.6);--inset-shine:rgba(255,255,255,0.04)}
|
||||||
|
[data-theme="dark"]{--bg:#080808;--bg-alt:#0f0f0f;--bg-card:rgba(255,255,255,0.04);--glass-border-hover:rgba(255,255,255,0.22);--text-2:#c8c8c8;--nav-bg:rgba(8,8,8,0.88);--nav-border:rgba(255,255,255,0.07);--divider:rgba(255,255,255,0.07);--hero-glow-1:rgba(220,20,60,0.1);--hero-glow-2:rgba(220,20,60,0.04);--stats-bg:rgba(255,255,255,0.03);--stats-border:rgba(255,255,255,0.08);--shadow-deep:rgba(0,0,0,0.7);--inset-shine:rgba(255,255,255,0.03)}
|
||||||
|
[data-theme="light"]{--bg:#f5f4f6;--bg-alt:#eeecef;--bg-card:rgba(255,255,255,0.72);--bg-card-hover:rgba(255,255,255,0.95);--glass-border:rgba(0,0,0,0.08);--glass-border-hover:rgba(192,18,48,0.35);--accent:#c0122e;--accent-light:#e0153a;--accent-dark:#8b0020;--accent-glow:rgba(192,18,48,0.22);--accent-glow-sm:rgba(192,18,48,0.1);--text:#0d0a0e;--text-2:#2e2830;--text-muted:#6a6068;--nav-bg:rgba(245,244,246,0.88);--nav-border:rgba(0,0,0,0.08);--divider:rgba(0,0,0,0.07);--hero-glow-1:rgba(192,18,48,0.12);--hero-glow-2:rgba(192,18,48,0.06);--stats-bg:rgba(192,18,48,0.06);--stats-border:rgba(192,18,48,0.16);--shadow-deep:rgba(0,0,0,0.1);--inset-shine:rgba(255,255,255,0.8)}
|
||||||
|
*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth}body{font-family:Inter,Segoe UI,system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.6;min-height:100vh;display:flex;flex-direction:column;transition:background-color 0.3s ease,color 0.3s ease}
|
||||||
|
.navbar{position:fixed;top:0;left:0;right:0;background:var(--nav-bg);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);border-bottom:1px solid var(--nav-border);z-index:1000}.nav-container{max-width:1100px;margin:0 auto;padding:0.9rem 2rem;display:flex;justify-content:space-between;align-items:center}.nav-logo{font-size:1.35rem;font-weight:800;color:var(--text);text-decoration:none;letter-spacing:-0.5px}.nav-logo span{color:var(--accent)}.nav-links{display:flex;list-style:none;gap:2.25rem}.nav-links a{color:var(--text-muted);text-decoration:none;font-weight:500;font-size:0.9rem;transition:color 0.2s;position:relative}.nav-links a::after{content:'';position:absolute;bottom:-4px;left:0;width:0;height:2px;background:var(--accent);border-radius:2px;transition:width 0.25s ease;box-shadow:0 0 8px var(--accent-glow)}.nav-links a:hover{color:var(--text)}.nav-links a:hover::after{width:100%}.nav-actions{display:flex;align-items:center;gap:0.75rem}.theme-toggle{background:var(--bg-card);border:1px solid var(--glass-border);border-radius:8px;padding:0;cursor:pointer;color:var(--text-muted);display:flex;align-items:center;justify-content:center;transition:all 0.2s;width:36px;height:36px;flex-shrink:0}.theme-toggle:hover{color:var(--accent);border-color:var(--accent-glow);background:var(--bg-card-hover);box-shadow:0 0 12px var(--accent-glow-sm)}.theme-toggle svg{width:16px;height:16px}.hamburger{display:none;flex-direction:column;gap:5px;background:none;border:none;cursor:pointer;padding:4px}.hamburger span{display:block;width:22px;height:2px;background:var(--text-2);border-radius:2px;transition:all 0.3s ease}.hamburger.open span:nth-child(1){transform:translateY(7px) rotate(45deg)}.hamburger.open span:nth-child(2){opacity:0;transform:scaleX(0)}.hamburger.open span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}.mobile-menu{display:none;flex-direction:column;border-top:1px solid var(--nav-border);background:var(--nav-bg);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px)}.mobile-menu.open{display:flex}.mobile-menu a{color:var(--text-2);text-decoration:none;font-size:1rem;font-weight:500;padding:1rem 2rem;border-bottom:1px solid var(--divider);transition:all 0.2s}.mobile-menu a:last-child{border-bottom:none}.mobile-menu a:hover{color:var(--accent);background:var(--bg-card);padding-left:2.5rem}
|
||||||
|
.error-container{flex:1;display:flex;align-items:center;justify-content:center;padding:8rem 2rem 6rem;text-align:center;position:relative}.error-bg{position:absolute;inset:0;background:radial-gradient(ellipse 90% 65% at 50% -5%,var(--hero-glow-1) 0%,transparent 55%),radial-gradient(ellipse 50% 40% at 85% 85%,var(--hero-glow-2) 0%,transparent 55%),var(--bg);z-index:0}.error-content{position:relative;z-index:1;max-width:600px;animation:errorEntrance 0.8s cubic-bezier(0.22,1,0.36,1) both}@keyframes errorEntrance{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}.error-code{font-size:12rem;font-weight:900;line-height:1;color:var(--accent);filter:drop-shadow(0 0 40px var(--accent-glow));letter-spacing:-0.05em}.error-title{font-size:2.5rem;font-weight:800;letter-spacing:-1px;margin:1.5rem 0 1rem;color:var(--text)}.error-message{font-size:1.15rem;color:var(--text-muted);margin-bottom:2.5rem;line-height:1.7}.error-cta{display:flex;gap:1rem;justify-content:center;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;gap:0.5rem;padding:0.875rem 2rem;background:var(--accent);color:#fff;text-decoration:none;border-radius:10px;font-weight:600;font-size:0.95rem;transition:all 0.25s ease;box-shadow:0 4px 24px var(--accent-glow);border:none;cursor:pointer}.btn:hover{background:var(--accent-light);transform:translateY(-2px);box-shadow:0 8px 32px var(--accent-glow);color:#fff;text-decoration:none}.btn-outline{display:inline-flex;align-items:center;gap:0.5rem;padding:0.875rem 2rem;background:var(--bg-card);border:1px solid var(--glass-border);color:var(--text-2);text-decoration:none;border-radius:10px;font-weight:600;font-size:0.95rem;transition:all 0.25s ease;cursor:pointer}.btn-outline:hover{border-color:var(--accent);color:var(--accent-light);background:var(--bg-card-hover);transform:translateY(-2px);text-decoration:none}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.btn:focus-visible,.btn-outline:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
|
||||||
|
.footer{padding:5rem 0 2.5rem;border-top:1px solid var(--divider)}.footer-inner{max-width:1100px;margin:0 auto;padding:0 2rem;display:grid;grid-template-columns:1fr auto auto;gap:4rem;margin-bottom:3.5rem;align-items:start}.footer-logo{font-size:1.35rem;font-weight:800;color:var(--text);letter-spacing:-0.5px;display:block;margin-bottom:0.6rem;text-decoration:none}.footer-logo span{color:var(--accent)}.footer-brand p{color:var(--text-muted);font-size:0.9rem;max-width:260px;line-height:1.7}.footer-links-col{display:flex;flex-direction:column;gap:0.5rem;min-width:140px}.footer-links-col h4{font-size:0.75rem;font-weight:700;text-transform:uppercase;letter-spacing:0.1em;color:var(--text-muted);margin-bottom:0.75rem}.footer-links-col a{color:var(--text-2);text-decoration:none;font-size:0.9rem;font-weight:500;transition:color 0.2s}.footer-links-col a:hover{color:var(--accent-light)}.footer-bottom{max-width:1100px;margin:0 auto;padding:2rem 2rem 0;border-top:1px solid var(--divider)}.footer-bottom p{color:var(--text-muted);font-size:0.85rem}.footer-community{display:flex;gap:0.75rem;margin-top:1rem}.footer-community a{display:flex;align-items:center;justify-content:center;width:36px;height:36px;background:var(--bg-card);border:1px solid var(--glass-border);border-radius:8px;color:var(--text-muted);text-decoration:none;transition:all 0.2s}.footer-community a:hover{border-color:var(--accent-glow);color:var(--accent-light);background:var(--bg-card-hover)}.footer-community svg{width:16px;height:16px}
|
||||||
|
@media(max-width:768px){.nav-links,.nav-actions{display:none}.hamburger{display:flex}.mobile-menu a{padding:1rem 2rem}.error-code{font-size:8rem}.error-title{font-size:2rem}.footer-inner{grid-template-columns:1fr;gap:2.5rem;text-align:center}.footer-brand{text-align:center}.footer-brand p{max-width:none}.footer-community{justify-content:center}}
|
||||||
|
@media(max-width:480px){.error-code{font-size:6rem}.error-cta{flex-direction:column}.btn,.btn-outline{width:100%;justify-content:center}}</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav class="navbar" role="navigation" aria-label="Main navigation">
|
||||||
|
<div class="nav-container">
|
||||||
|
<a href="index" class="nav-logo" aria-label="ArcaneNeko home">Arcane<span>Neko</span></a>
|
||||||
|
<ul class="nav-links" role="list">
|
||||||
|
<li><a href="index#about">About</a></li>
|
||||||
|
<li><a href="index#services">Services</a></li>
|
||||||
|
<li><a href="index#projects">Projects</a></li>
|
||||||
|
<li><a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status</a></li>
|
||||||
|
<li><a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="nav-actions">
|
||||||
|
<button class="theme-toggle" id="themeToggle" title="Switch theme" aria-label="Switch theme"></button>
|
||||||
|
<button class="hamburger" id="hamburger" aria-label="Open menu" aria-expanded="false" aria-controls="mobileMenu">
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mobile-menu" id="mobileMenu" role="menu">
|
||||||
|
<a href="index#about" role="menuitem">About</a>
|
||||||
|
<a href="index#services" role="menuitem">Services</a>
|
||||||
|
<a href="index#projects" role="menuitem">Projects</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer" role="menuitem">Status</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" role="menuitem">Neovoxis</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<main class="error-container">
|
||||||
|
<div class="error-bg"></div>
|
||||||
|
<div class="error-content">
|
||||||
|
<div class="error-code">400</div>
|
||||||
|
<h1 class="error-title">Bad Request</h1>
|
||||||
|
<p class="error-message">The request could not be processed due to a client error.</p>
|
||||||
|
<div class="error-cta">
|
||||||
|
<a href="index" class="btn">Go Home</a>
|
||||||
|
<a href="javascript:history.back()" class="btn-outline">Go Back</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<footer class="footer" role="contentinfo">
|
||||||
|
<div class="footer-inner">
|
||||||
|
<div class="footer-brand">
|
||||||
|
<a href="index" class="footer-logo">Arcane<span>Neko</span></a>
|
||||||
|
<p>Free open source software for developers and creators.</p>
|
||||||
|
<div class="footer-community" aria-label="Community links">
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" title="Join us on Neovoxis" aria-label="Join the ArcaneNeko community on Neovoxis">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>
|
||||||
|
</a>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer" title="Git Instance" aria-label="Visit our Git instance">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><path d="M6 21V9a9 9 0 009 9"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Services</h4>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer">Git Instance</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status Page</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a>
|
||||||
|
<a href="status">Arcane Status</a>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Legal</h4>
|
||||||
|
<a href="privacy">Privacy Policy</a>
|
||||||
|
<a href="terms">Terms of Service</a>
|
||||||
|
<a href="contact">Contact Us</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-bottom">
|
||||||
|
<p>© 2026 ArcaneNeko. All rights reserved.</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script>
|
||||||
|
const THEMES=['crimson','dark','light'],THEME_ICONS={crimson:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>',dark:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg>',light:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><path d="M12 2c0 0-4 4-4 8a4 4 0 0 0 8 0c0-4-4-8-4-8z"/></svg>'},THEME_LABELS={crimson:'Switch to dark mode',dark:'Switch to light mode',light:'Switch to crimson theme'};
|
||||||
|
let currentTheme=localStorage.getItem('an-theme')||'crimson';
|
||||||
|
function applyTheme(theme){document.documentElement.setAttribute('data-theme',theme);document.querySelectorAll('.theme-toggle').forEach(btn=>{btn.innerHTML=THEME_ICONS[theme];btn.setAttribute('title',THEME_LABELS[theme]);btn.setAttribute('aria-label',THEME_LABELS[theme])});localStorage.setItem('an-theme',theme);currentTheme=theme}
|
||||||
|
function nextTheme(){const idx=THEMES.indexOf(currentTheme);return THEMES[(idx+1)%THEMES.length]}
|
||||||
|
document.addEventListener('DOMContentLoaded',function(){applyTheme(currentTheme);document.querySelectorAll('.theme-toggle').forEach(btn=>{btn.addEventListener('click',function(){applyTheme(nextTheme())})});const hamburger=document.getElementById('hamburger'),mobileMenu=document.getElementById('mobileMenu');if(hamburger&&mobileMenu){hamburger.addEventListener('click',function(){const open=hamburger.classList.toggle('open');mobileMenu.classList.toggle('open',open);hamburger.setAttribute('aria-expanded',String(open))});mobileMenu.querySelectorAll('a').forEach(link=>{link.addEventListener('click',function(){hamburger.classList.remove('open');mobileMenu.classList.remove('open');hamburger.setAttribute('aria-expanded','false')})})}});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
109
403.html
Normal file
109
403.html
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" data-theme="crimson">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>403 - Forbidden | ArcaneNeko</title>
|
||||||
|
<meta name="description" content="Access denied.">
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta property="og:url" content="https://arcaneneko.com/403">
|
||||||
|
<meta property="og:title" content="403 - Forbidden">
|
||||||
|
<meta property="og:description" content="Access denied.">
|
||||||
|
<meta property="og:image" content="https://arcaneneko.com/og-image.png">
|
||||||
|
<meta name="theme-color" content="#dc143c">
|
||||||
|
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
||||||
|
<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=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
:root,[data-theme="crimson"]{--bg:#07040a;--bg-alt:#0d070c;--bg-card:rgba(255,255,255,0.04);--bg-card-hover:rgba(255,255,255,0.07);--glass-border:rgba(255,255,255,0.08);--glass-border-hover:rgba(220,20,60,0.45);--accent:#dc143c;--accent-light:#ff1744;--accent-dark:#960f2c;--accent-glow:rgba(220,20,60,0.35);--accent-glow-sm:rgba(220,20,60,0.18);--text:#fff;--text-2:#ddd0d4;--text-muted:#8c7a80;--nav-bg:rgba(7,4,10,0.85);--nav-border:rgba(255,255,255,0.06);--divider:rgba(255,255,255,0.06);--hero-glow-1:rgba(220,20,60,0.22);--hero-glow-2:rgba(220,20,60,0.1);--stats-bg:rgba(220,20,60,0.07);--stats-border:rgba(220,20,60,0.18);--shadow-deep:rgba(0,0,0,0.6);--inset-shine:rgba(255,255,255,0.04)}
|
||||||
|
[data-theme="dark"]{--bg:#080808;--bg-alt:#0f0f0f;--bg-card:rgba(255,255,255,0.04);--glass-border-hover:rgba(255,255,255,0.22);--text-2:#c8c8c8;--nav-bg:rgba(8,8,8,0.88);--nav-border:rgba(255,255,255,0.07);--divider:rgba(255,255,255,0.07);--hero-glow-1:rgba(220,20,60,0.1);--hero-glow-2:rgba(220,20,60,0.04);--stats-bg:rgba(255,255,255,0.03);--stats-border:rgba(255,255,255,0.08);--shadow-deep:rgba(0,0,0,0.7);--inset-shine:rgba(255,255,255,0.03)}
|
||||||
|
[data-theme="light"]{--bg:#f5f4f6;--bg-alt:#eeecef;--bg-card:rgba(255,255,255,0.72);--bg-card-hover:rgba(255,255,255,0.95);--glass-border:rgba(0,0,0,0.08);--glass-border-hover:rgba(192,18,48,0.35);--accent:#c0122e;--accent-light:#e0153a;--accent-dark:#8b0020;--accent-glow:rgba(192,18,48,0.22);--accent-glow-sm:rgba(192,18,48,0.1);--text:#0d0a0e;--text-2:#2e2830;--text-muted:#6a6068;--nav-bg:rgba(245,244,246,0.88);--nav-border:rgba(0,0,0,0.08);--divider:rgba(0,0,0,0.07);--hero-glow-1:rgba(192,18,48,0.12);--hero-glow-2:rgba(192,18,48,0.06);--stats-bg:rgba(192,18,48,0.06);--stats-border:rgba(192,18,48,0.16);--shadow-deep:rgba(0,0,0,0.1);--inset-shine:rgba(255,255,255,0.8)}
|
||||||
|
*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth}body{font-family:Inter,Segoe UI,system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.6;min-height:100vh;display:flex;flex-direction:column;transition:background-color 0.3s ease,color 0.3s ease}
|
||||||
|
.navbar{position:fixed;top:0;left:0;right:0;background:var(--nav-bg);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);border-bottom:1px solid var(--nav-border);z-index:1000}.nav-container{max-width:1100px;margin:0 auto;padding:0.9rem 2rem;display:flex;justify-content:space-between;align-items:center}.nav-logo{font-size:1.35rem;font-weight:800;color:var(--text);text-decoration:none;letter-spacing:-0.5px}.nav-logo span{color:var(--accent)}.nav-links{display:flex;list-style:none;gap:2.25rem}.nav-links a{color:var(--text-muted);text-decoration:none;font-weight:500;font-size:0.9rem;transition:color 0.2s;position:relative}.nav-links a::after{content:'';position:absolute;bottom:-4px;left:0;width:0;height:2px;background:var(--accent);border-radius:2px;transition:width 0.25s ease;box-shadow:0 0 8px var(--accent-glow)}.nav-links a:hover{color:var(--text)}.nav-links a:hover::after{width:100%}.nav-actions{display:flex;align-items:center;gap:0.75rem}.theme-toggle{background:var(--bg-card);border:1px solid var(--glass-border);border-radius:8px;padding:0;cursor:pointer;color:var(--text-muted);display:flex;align-items:center;justify-content:center;transition:all 0.2s;width:36px;height:36px;flex-shrink:0}.theme-toggle:hover{color:var(--accent);border-color:var(--accent-glow);background:var(--bg-card-hover);box-shadow:0 0 12px var(--accent-glow-sm)}.theme-toggle svg{width:16px;height:16px}.hamburger{display:none;flex-direction:column;gap:5px;background:none;border:none;cursor:pointer;padding:4px}.hamburger span{display:block;width:22px;height:2px;background:var(--text-2);border-radius:2px;transition:all 0.3s ease}.hamburger.open span:nth-child(1){transform:translateY(7px) rotate(45deg)}.hamburger.open span:nth-child(2){opacity:0;transform:scaleX(0)}.hamburger.open span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}.mobile-menu{display:none;flex-direction:column;border-top:1px solid var(--nav-border);background:var(--nav-bg);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px)}.mobile-menu.open{display:flex}.mobile-menu a{color:var(--text-2);text-decoration:none;font-size:1rem;font-weight:500;padding:1rem 2rem;border-bottom:1px solid var(--divider);transition:all 0.2s}.mobile-menu a:last-child{border-bottom:none}.mobile-menu a:hover{color:var(--accent);background:var(--bg-card);padding-left:2.5rem}
|
||||||
|
.error-container{flex:1;display:flex;align-items:center;justify-content:center;padding:8rem 2rem 6rem;text-align:center;position:relative}.error-bg{position:absolute;inset:0;background:radial-gradient(ellipse 90% 65% at 50% -5%,var(--hero-glow-1) 0%,transparent 55%),radial-gradient(ellipse 50% 40% at 85% 85%,var(--hero-glow-2) 0%,transparent 55%),var(--bg);z-index:0}.error-content{position:relative;z-index:1;max-width:600px;animation:errorEntrance 0.8s cubic-bezier(0.22,1,0.36,1) both}@keyframes errorEntrance{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}.error-code{font-size:12rem;font-weight:900;line-height:1;color:var(--accent);filter:drop-shadow(0 0 40px var(--accent-glow));letter-spacing:-0.05em}.error-title{font-size:2.5rem;font-weight:800;letter-spacing:-1px;margin:1.5rem 0 1rem;color:var(--text)}.error-message{font-size:1.15rem;color:var(--text-muted);margin-bottom:2.5rem;line-height:1.7}.error-cta{display:flex;gap:1rem;justify-content:center;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;gap:0.5rem;padding:0.875rem 2rem;background:var(--accent);color:#fff;text-decoration:none;border-radius:10px;font-weight:600;font-size:0.95rem;transition:all 0.25s ease;box-shadow:0 4px 24px var(--accent-glow);border:none;cursor:pointer}.btn:hover{background:var(--accent-light);transform:translateY(-2px);box-shadow:0 8px 32px var(--accent-glow);color:#fff;text-decoration:none}.btn-outline{display:inline-flex;align-items:center;gap:0.5rem;padding:0.875rem 2rem;background:var(--bg-card);border:1px solid var(--glass-border);color:var(--text-2);text-decoration:none;border-radius:10px;font-weight:600;font-size:0.95rem;transition:all 0.25s ease;cursor:pointer}.btn-outline:hover{border-color:var(--accent);color:var(--accent-light);background:var(--bg-card-hover);transform:translateY(-2px);text-decoration:none}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.btn:focus-visible,.btn-outline:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
|
||||||
|
.footer{padding:5rem 0 2.5rem;border-top:1px solid var(--divider)}.footer-inner{max-width:1100px;margin:0 auto;padding:0 2rem;display:grid;grid-template-columns:1fr auto auto;gap:4rem;margin-bottom:3.5rem;align-items:start}.footer-logo{font-size:1.35rem;font-weight:800;color:var(--text);letter-spacing:-0.5px;display:block;margin-bottom:0.6rem;text-decoration:none}.footer-logo span{color:var(--accent)}.footer-brand p{color:var(--text-muted);font-size:0.9rem;max-width:260px;line-height:1.7}.footer-links-col{display:flex;flex-direction:column;gap:0.5rem;min-width:140px}.footer-links-col h4{font-size:0.75rem;font-weight:700;text-transform:uppercase;letter-spacing:0.1em;color:var(--text-muted);margin-bottom:0.75rem}.footer-links-col a{color:var(--text-2);text-decoration:none;font-size:0.9rem;font-weight:500;transition:color 0.2s}.footer-links-col a:hover{color:var(--accent-light)}.footer-bottom{max-width:1100px;margin:0 auto;padding:2rem 2rem 0;border-top:1px solid var(--divider)}.footer-bottom p{color:var(--text-muted);font-size:0.85rem}.footer-community{display:flex;gap:0.75rem;margin-top:1rem}.footer-community a{display:flex;align-items:center;justify-content:center;width:36px;height:36px;background:var(--bg-card);border:1px solid var(--glass-border);border-radius:8px;color:var(--text-muted);text-decoration:none;transition:all 0.2s}.footer-community a:hover{border-color:var(--accent-glow);color:var(--accent-light);background:var(--bg-card-hover)}.footer-community svg{width:16px;height:16px}
|
||||||
|
@media(max-width:768px){.nav-links,.nav-actions{display:none}.hamburger{display:flex}.mobile-menu a{padding:1rem 2rem}.error-code{font-size:8rem}.error-title{font-size:2rem}.footer-inner{grid-template-columns:1fr;gap:2.5rem;text-align:center}.footer-brand{text-align:center}.footer-brand p{max-width:none}.footer-community{justify-content:center}}
|
||||||
|
@media(max-width:480px){.error-code{font-size:6rem}.error-cta{flex-direction:column}.btn,.btn-outline{width:100%;justify-content:center}}</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav class="navbar" role="navigation" aria-label="Main navigation">
|
||||||
|
<div class="nav-container">
|
||||||
|
<a href="index" class="nav-logo" aria-label="ArcaneNeko home">Arcane<span>Neko</span></a>
|
||||||
|
<ul class="nav-links" role="list">
|
||||||
|
<li><a href="index#about">About</a></li>
|
||||||
|
<li><a href="index#services">Services</a></li>
|
||||||
|
<li><a href="index#projects">Projects</a></li>
|
||||||
|
<li><a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status</a></li>
|
||||||
|
<li><a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="nav-actions">
|
||||||
|
<button class="theme-toggle" id="themeToggle" title="Switch theme" aria-label="Switch theme"></button>
|
||||||
|
<button class="hamburger" id="hamburger" aria-label="Open menu" aria-expanded="false" aria-controls="mobileMenu">
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mobile-menu" id="mobileMenu" role="menu">
|
||||||
|
<a href="index#about" role="menuitem">About</a>
|
||||||
|
<a href="index#services" role="menuitem">Services</a>
|
||||||
|
<a href="index#projects" role="menuitem">Projects</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer" role="menuitem">Status</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" role="menuitem">Neovoxis</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<main class="error-container">
|
||||||
|
<div class="error-bg"></div>
|
||||||
|
<div class="error-content">
|
||||||
|
<div class="error-code">403</div>
|
||||||
|
<h1 class="error-title">Access Denied</h1>
|
||||||
|
<p class="error-message">You don't have permission to access this resource.</p>
|
||||||
|
<div class="error-cta">
|
||||||
|
<a href="index" class="btn">Go Home</a>
|
||||||
|
<a href="javascript:history.back()" class="btn-outline">Go Back</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<footer class="footer" role="contentinfo">
|
||||||
|
<div class="footer-inner">
|
||||||
|
<div class="footer-brand">
|
||||||
|
<a href="index" class="footer-logo">Arcane<span>Neko</span></a>
|
||||||
|
<p>Free open source software for developers and creators.</p>
|
||||||
|
<div class="footer-community" aria-label="Community links">
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" title="Join us on Neovoxis" aria-label="Join the ArcaneNeko community on Neovoxis">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>
|
||||||
|
</a>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer" title="Git Instance" aria-label="Visit our Git instance">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><path d="M6 21V9a9 9 0 009 9"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Services</h4>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer">Git Instance</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status Page</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a>
|
||||||
|
<a href="status">Arcane Status</a>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Legal</h4>
|
||||||
|
<a href="privacy">Privacy Policy</a>
|
||||||
|
<a href="terms">Terms of Service</a>
|
||||||
|
<a href="contact">Contact Us</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-bottom">
|
||||||
|
<p>© 2026 ArcaneNeko. All rights reserved.</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script>
|
||||||
|
const THEMES=['crimson','dark','light'],THEME_ICONS={crimson:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>',dark:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg>',light:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><path d="M12 2c0 0-4 4-4 8a4 4 0 0 0 8 0c0-4-4-8-4-8z"/></svg>'},THEME_LABELS={crimson:'Switch to dark mode',dark:'Switch to light mode',light:'Switch to crimson theme'};
|
||||||
|
let currentTheme=localStorage.getItem('an-theme')||'crimson';
|
||||||
|
function applyTheme(theme){document.documentElement.setAttribute('data-theme',theme);document.querySelectorAll('.theme-toggle').forEach(btn=>{btn.innerHTML=THEME_ICONS[theme];btn.setAttribute('title',THEME_LABELS[theme]);btn.setAttribute('aria-label',THEME_LABELS[theme])});localStorage.setItem('an-theme',theme);currentTheme=theme}
|
||||||
|
function nextTheme(){const idx=THEMES.indexOf(currentTheme);return THEMES[(idx+1)%THEMES.length]}
|
||||||
|
document.addEventListener('DOMContentLoaded',function(){applyTheme(currentTheme);document.querySelectorAll('.theme-toggle').forEach(btn=>{btn.addEventListener('click',function(){applyTheme(nextTheme())})});const hamburger=document.getElementById('hamburger'),mobileMenu=document.getElementById('mobileMenu');if(hamburger&&mobileMenu){hamburger.addEventListener('click',function(){const open=hamburger.classList.toggle('open');mobileMenu.classList.toggle('open',open);hamburger.setAttribute('aria-expanded',String(open))});mobileMenu.querySelectorAll('a').forEach(link=>{link.addEventListener('click',function(){hamburger.classList.remove('open');mobileMenu.classList.remove('open');hamburger.setAttribute('aria-expanded','false')})})}});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
109
404.html
Normal file
109
404.html
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" data-theme="crimson">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>404 - Page Not Found | ArcaneNeko</title>
|
||||||
|
<meta name="description" content="The page you're looking for doesn't exist.">
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta property="og:url" content="https://arcaneneko.com/404">
|
||||||
|
<meta property="og:title" content="404 - Page Not Found">
|
||||||
|
<meta property="og:description" content="The page you're looking for doesn't exist.">
|
||||||
|
<meta property="og:image" content="https://arcaneneko.com/og-image.png">
|
||||||
|
<meta name="theme-color" content="#dc143c">
|
||||||
|
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
||||||
|
<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=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
:root,[data-theme="crimson"]{--bg:#07040a;--bg-alt:#0d070c;--bg-card:rgba(255,255,255,0.04);--bg-card-hover:rgba(255,255,255,0.07);--glass-border:rgba(255,255,255,0.08);--glass-border-hover:rgba(220,20,60,0.45);--accent:#dc143c;--accent-light:#ff1744;--accent-dark:#960f2c;--accent-glow:rgba(220,20,60,0.35);--accent-glow-sm:rgba(220,20,60,0.18);--text:#fff;--text-2:#ddd0d4;--text-muted:#8c7a80;--nav-bg:rgba(7,4,10,0.85);--nav-border:rgba(255,255,255,0.06);--divider:rgba(255,255,255,0.06);--hero-glow-1:rgba(220,20,60,0.22);--hero-glow-2:rgba(220,20,60,0.1);--stats-bg:rgba(220,20,60,0.07);--stats-border:rgba(220,20,60,0.18);--shadow-deep:rgba(0,0,0,0.6);--inset-shine:rgba(255,255,255,0.04)}
|
||||||
|
[data-theme="dark"]{--bg:#080808;--bg-alt:#0f0f0f;--bg-card:rgba(255,255,255,0.04);--glass-border-hover:rgba(255,255,255,0.22);--text-2:#c8c8c8;--nav-bg:rgba(8,8,8,0.88);--nav-border:rgba(255,255,255,0.07);--divider:rgba(255,255,255,0.07);--hero-glow-1:rgba(220,20,60,0.1);--hero-glow-2:rgba(220,20,60,0.04);--stats-bg:rgba(255,255,255,0.03);--stats-border:rgba(255,255,255,0.08);--shadow-deep:rgba(0,0,0,0.7);--inset-shine:rgba(255,255,255,0.03)}
|
||||||
|
[data-theme="light"]{--bg:#f5f4f6;--bg-alt:#eeecef;--bg-card:rgba(255,255,255,0.72);--bg-card-hover:rgba(255,255,255,0.95);--glass-border:rgba(0,0,0,0.08);--glass-border-hover:rgba(192,18,48,0.35);--accent:#c0122e;--accent-light:#e0153a;--accent-dark:#8b0020;--accent-glow:rgba(192,18,48,0.22);--accent-glow-sm:rgba(192,18,48,0.1);--text:#0d0a0e;--text-2:#2e2830;--text-muted:#6a6068;--nav-bg:rgba(245,244,246,0.88);--nav-border:rgba(0,0,0,0.08);--divider:rgba(0,0,0,0.07);--hero-glow-1:rgba(192,18,48,0.12);--hero-glow-2:rgba(192,18,48,0.06);--stats-bg:rgba(192,18,48,0.06);--stats-border:rgba(192,18,48,0.16);--shadow-deep:rgba(0,0,0,0.1);--inset-shine:rgba(255,255,255,0.8)}
|
||||||
|
*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth}body{font-family:Inter,Segoe UI,system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.6;min-height:100vh;display:flex;flex-direction:column;transition:background-color 0.3s ease,color 0.3s ease}
|
||||||
|
.navbar{position:fixed;top:0;left:0;right:0;background:var(--nav-bg);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);border-bottom:1px solid var(--nav-border);z-index:1000}.nav-container{max-width:1100px;margin:0 auto;padding:0.9rem 2rem;display:flex;justify-content:space-between;align-items:center}.nav-logo{font-size:1.35rem;font-weight:800;color:var(--text);text-decoration:none;letter-spacing:-0.5px}.nav-logo span{color:var(--accent)}.nav-links{display:flex;list-style:none;gap:2.25rem}.nav-links a{color:var(--text-muted);text-decoration:none;font-weight:500;font-size:0.9rem;transition:color 0.2s;position:relative}.nav-links a::after{content:'';position:absolute;bottom:-4px;left:0;width:0;height:2px;background:var(--accent);border-radius:2px;transition:width 0.25s ease;box-shadow:0 0 8px var(--accent-glow)}.nav-links a:hover{color:var(--text)}.nav-links a:hover::after{width:100%}.nav-actions{display:flex;align-items:center;gap:0.75rem}.theme-toggle{background:var(--bg-card);border:1px solid var(--glass-border);border-radius:8px;padding:0;cursor:pointer;color:var(--text-muted);display:flex;align-items:center;justify-content:center;transition:all 0.2s;width:36px;height:36px;flex-shrink:0}.theme-toggle:hover{color:var(--accent);border-color:var(--accent-glow);background:var(--bg-card-hover);box-shadow:0 0 12px var(--accent-glow-sm)}.theme-toggle svg{width:16px;height:16px}.hamburger{display:none;flex-direction:column;gap:5px;background:none;border:none;cursor:pointer;padding:4px}.hamburger span{display:block;width:22px;height:2px;background:var(--text-2);border-radius:2px;transition:all 0.3s ease}.hamburger.open span:nth-child(1){transform:translateY(7px) rotate(45deg)}.hamburger.open span:nth-child(2){opacity:0;transform:scaleX(0)}.hamburger.open span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}.mobile-menu{display:none;flex-direction:column;border-top:1px solid var(--nav-border);background:var(--nav-bg);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px)}.mobile-menu.open{display:flex}.mobile-menu a{color:var(--text-2);text-decoration:none;font-size:1rem;font-weight:500;padding:1rem 2rem;border-bottom:1px solid var(--divider);transition:all 0.2s}.mobile-menu a:last-child{border-bottom:none}.mobile-menu a:hover{color:var(--accent);background:var(--bg-card);padding-left:2.5rem}
|
||||||
|
.error-container{flex:1;display:flex;align-items:center;justify-content:center;padding:8rem 2rem 6rem;text-align:center;position:relative}.error-bg{position:absolute;inset:0;background:radial-gradient(ellipse 90% 65% at 50% -5%,var(--hero-glow-1) 0%,transparent 55%),radial-gradient(ellipse 50% 40% at 85% 85%,var(--hero-glow-2) 0%,transparent 55%),var(--bg);z-index:0}.error-content{position:relative;z-index:1;max-width:600px;animation:errorEntrance 0.8s cubic-bezier(0.22,1,0.36,1) both}@keyframes errorEntrance{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}.error-code{font-size:12rem;font-weight:900;line-height:1;color:var(--accent);filter:drop-shadow(0 0 40px var(--accent-glow));letter-spacing:-0.05em}.error-title{font-size:2.5rem;font-weight:800;letter-spacing:-1px;margin:1.5rem 0 1rem;color:var(--text)}.error-message{font-size:1.15rem;color:var(--text-muted);margin-bottom:2.5rem;line-height:1.7}.error-cta{display:flex;gap:1rem;justify-content:center;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;gap:0.5rem;padding:0.875rem 2rem;background:var(--accent);color:#fff;text-decoration:none;border-radius:10px;font-weight:600;font-size:0.95rem;transition:all 0.25s ease;box-shadow:0 4px 24px var(--accent-glow);border:none;cursor:pointer}.btn:hover{background:var(--accent-light);transform:translateY(-2px);box-shadow:0 8px 32px var(--accent-glow);color:#fff;text-decoration:none}.btn-outline{display:inline-flex;align-items:center;gap:0.5rem;padding:0.875rem 2rem;background:var(--bg-card);border:1px solid var(--glass-border);color:var(--text-2);text-decoration:none;border-radius:10px;font-weight:600;font-size:0.95rem;transition:all 0.25s ease;cursor:pointer}.btn-outline:hover{border-color:var(--accent);color:var(--accent-light);background:var(--bg-card-hover);transform:translateY(-2px);text-decoration:none}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.btn:focus-visible,.btn-outline:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
|
||||||
|
.footer{padding:5rem 0 2.5rem;border-top:1px solid var(--divider)}.footer-inner{max-width:1100px;margin:0 auto;padding:0 2rem;display:grid;grid-template-columns:1fr auto auto;gap:4rem;margin-bottom:3.5rem;align-items:start}.footer-logo{font-size:1.35rem;font-weight:800;color:var(--text);letter-spacing:-0.5px;display:block;margin-bottom:0.6rem;text-decoration:none}.footer-logo span{color:var(--accent)}.footer-brand p{color:var(--text-muted);font-size:0.9rem;max-width:260px;line-height:1.7}.footer-links-col{display:flex;flex-direction:column;gap:0.5rem;min-width:140px}.footer-links-col h4{font-size:0.75rem;font-weight:700;text-transform:uppercase;letter-spacing:0.1em;color:var(--text-muted);margin-bottom:0.75rem}.footer-links-col a{color:var(--text-2);text-decoration:none;font-size:0.9rem;font-weight:500;transition:color 0.2s}.footer-links-col a:hover{color:var(--accent-light)}.footer-bottom{max-width:1100px;margin:0 auto;padding:2rem 2rem 0;border-top:1px solid var(--divider)}.footer-bottom p{color:var(--text-muted);font-size:0.85rem}.footer-community{display:flex;gap:0.75rem;margin-top:1rem}.footer-community a{display:flex;align-items:center;justify-content:center;width:36px;height:36px;background:var(--bg-card);border:1px solid var(--glass-border);border-radius:8px;color:var(--text-muted);text-decoration:none;transition:all 0.2s}.footer-community a:hover{border-color:var(--accent-glow);color:var(--accent-light);background:var(--bg-card-hover)}.footer-community svg{width:16px;height:16px}
|
||||||
|
@media(max-width:768px){.nav-links,.nav-actions{display:none}.hamburger{display:flex}.mobile-menu a{padding:1rem 2rem}.error-code{font-size:8rem}.error-title{font-size:2rem}.footer-inner{grid-template-columns:1fr;gap:2.5rem;text-align:center}.footer-brand{text-align:center}.footer-brand p{max-width:none}.footer-community{justify-content:center}}
|
||||||
|
@media(max-width:480px){.error-code{font-size:6rem}.error-cta{flex-direction:column}.btn,.btn-outline{width:100%;justify-content:center}}</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav class="navbar" role="navigation" aria-label="Main navigation">
|
||||||
|
<div class="nav-container">
|
||||||
|
<a href="index" class="nav-logo" aria-label="ArcaneNeko home">Arcane<span>Neko</span></a>
|
||||||
|
<ul class="nav-links" role="list">
|
||||||
|
<li><a href="index#about">About</a></li>
|
||||||
|
<li><a href="index#services">Services</a></li>
|
||||||
|
<li><a href="index#projects">Projects</a></li>
|
||||||
|
<li><a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status</a></li>
|
||||||
|
<li><a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="nav-actions">
|
||||||
|
<button class="theme-toggle" id="themeToggle" title="Switch theme" aria-label="Switch theme"></button>
|
||||||
|
<button class="hamburger" id="hamburger" aria-label="Open menu" aria-expanded="false" aria-controls="mobileMenu">
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mobile-menu" id="mobileMenu" role="menu">
|
||||||
|
<a href="index#about" role="menuitem">About</a>
|
||||||
|
<a href="index#services" role="menuitem">Services</a>
|
||||||
|
<a href="index#projects" role="menuitem">Projects</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer" role="menuitem">Status</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" role="menuitem">Neovoxis</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<main class="error-container">
|
||||||
|
<div class="error-bg"></div>
|
||||||
|
<div class="error-content">
|
||||||
|
<div class="error-code">404</div>
|
||||||
|
<h1 class="error-title">Page Not Found</h1>
|
||||||
|
<p class="error-message">The page you're looking for doesn't exist.</p>
|
||||||
|
<div class="error-cta">
|
||||||
|
<a href="index" class="btn">Go Home</a>
|
||||||
|
<a href="javascript:history.back()" class="btn-outline">Go Back</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<footer class="footer" role="contentinfo">
|
||||||
|
<div class="footer-inner">
|
||||||
|
<div class="footer-brand">
|
||||||
|
<a href="index" class="footer-logo">Arcane<span>Neko</span></a>
|
||||||
|
<p>Free open source software for developers and creators.</p>
|
||||||
|
<div class="footer-community" aria-label="Community links">
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" title="Join us on Neovoxis" aria-label="Join the ArcaneNeko community on Neovoxis">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>
|
||||||
|
</a>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer" title="Git Instance" aria-label="Visit our Git instance">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><path d="M6 21V9a9 9 0 009 9"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Services</h4>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer">Git Instance</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status Page</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a>
|
||||||
|
<a href="status">Arcane Status</a>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Legal</h4>
|
||||||
|
<a href="privacy">Privacy Policy</a>
|
||||||
|
<a href="terms">Terms of Service</a>
|
||||||
|
<a href="contact">Contact Us</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-bottom">
|
||||||
|
<p>© 2026 ArcaneNeko. All rights reserved.</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script>
|
||||||
|
const THEMES=['crimson','dark','light'],THEME_ICONS={crimson:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>',dark:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg>',light:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><path d="M12 2c0 0-4 4-4 8a4 4 0 0 0 8 0c0-4-4-8-4-8z"/></svg>'},THEME_LABELS={crimson:'Switch to dark mode',dark:'Switch to light mode',light:'Switch to crimson theme'};
|
||||||
|
let currentTheme=localStorage.getItem('an-theme')||'crimson';
|
||||||
|
function applyTheme(theme){document.documentElement.setAttribute('data-theme',theme);document.querySelectorAll('.theme-toggle').forEach(btn=>{btn.innerHTML=THEME_ICONS[theme];btn.setAttribute('title',THEME_LABELS[theme]);btn.setAttribute('aria-label',THEME_LABELS[theme])});localStorage.setItem('an-theme',theme);currentTheme=theme}
|
||||||
|
function nextTheme(){const idx=THEMES.indexOf(currentTheme);return THEMES[(idx+1)%THEMES.length]}
|
||||||
|
document.addEventListener('DOMContentLoaded',function(){applyTheme(currentTheme);document.querySelectorAll('.theme-toggle').forEach(btn=>{btn.addEventListener('click',function(){applyTheme(nextTheme())})});const hamburger=document.getElementById('hamburger'),mobileMenu=document.getElementById('mobileMenu');if(hamburger&&mobileMenu){hamburger.addEventListener('click',function(){const open=hamburger.classList.toggle('open');mobileMenu.classList.toggle('open',open);hamburger.setAttribute('aria-expanded',String(open))});mobileMenu.querySelectorAll('a').forEach(link=>{link.addEventListener('click',function(){hamburger.classList.remove('open');mobileMenu.classList.remove('open');hamburger.setAttribute('aria-expanded','false')})})}});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
109
422.html
Normal file
109
422.html
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" data-theme="crimson">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>422 - Unprocessable Entity | ArcaneNeko</title>
|
||||||
|
<meta name="description" content="The request could not be processed.">
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta property="og:url" content="https://arcaneneko.com/422">
|
||||||
|
<meta property="og:title" content="422 - Unprocessable Entity">
|
||||||
|
<meta property="og:description" content="The request could not be processed.">
|
||||||
|
<meta property="og:image" content="https://arcaneneko.com/og-image.png">
|
||||||
|
<meta name="theme-color" content="#dc143c">
|
||||||
|
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
||||||
|
<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=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
:root,[data-theme="crimson"]{--bg:#07040a;--bg-alt:#0d070c;--bg-card:rgba(255,255,255,0.04);--bg-card-hover:rgba(255,255,255,0.07);--glass-border:rgba(255,255,255,0.08);--glass-border-hover:rgba(220,20,60,0.45);--accent:#dc143c;--accent-light:#ff1744;--accent-dark:#960f2c;--accent-glow:rgba(220,20,60,0.35);--accent-glow-sm:rgba(220,20,60,0.18);--text:#fff;--text-2:#ddd0d4;--text-muted:#8c7a80;--nav-bg:rgba(7,4,10,0.85);--nav-border:rgba(255,255,255,0.06);--divider:rgba(255,255,255,0.06);--hero-glow-1:rgba(220,20,60,0.22);--hero-glow-2:rgba(220,20,60,0.1);--stats-bg:rgba(220,20,60,0.07);--stats-border:rgba(220,20,60,0.18);--shadow-deep:rgba(0,0,0,0.6);--inset-shine:rgba(255,255,255,0.04)}
|
||||||
|
[data-theme="dark"]{--bg:#080808;--bg-alt:#0f0f0f;--bg-card:rgba(255,255,255,0.04);--glass-border-hover:rgba(255,255,255,0.22);--text-2:#c8c8c8;--nav-bg:rgba(8,8,8,0.88);--nav-border:rgba(255,255,255,0.07);--divider:rgba(255,255,255,0.07);--hero-glow-1:rgba(220,20,60,0.1);--hero-glow-2:rgba(220,20,60,0.04);--stats-bg:rgba(255,255,255,0.03);--stats-border:rgba(255,255,255,0.08);--shadow-deep:rgba(0,0,0,0.7);--inset-shine:rgba(255,255,255,0.03)}
|
||||||
|
[data-theme="light"]{--bg:#f5f4f6;--bg-alt:#eeecef;--bg-card:rgba(255,255,255,0.72);--bg-card-hover:rgba(255,255,255,0.95);--glass-border:rgba(0,0,0,0.08);--glass-border-hover:rgba(192,18,48,0.35);--accent:#c0122e;--accent-light:#e0153a;--accent-dark:#8b0020;--accent-glow:rgba(192,18,48,0.22);--accent-glow-sm:rgba(192,18,48,0.1);--text:#0d0a0e;--text-2:#2e2830;--text-muted:#6a6068;--nav-bg:rgba(245,244,246,0.88);--nav-border:rgba(0,0,0,0.08);--divider:rgba(0,0,0,0.07);--hero-glow-1:rgba(192,18,48,0.12);--hero-glow-2:rgba(192,18,48,0.06);--stats-bg:rgba(192,18,48,0.06);--stats-border:rgba(192,18,48,0.16);--shadow-deep:rgba(0,0,0,0.1);--inset-shine:rgba(255,255,255,0.8)}
|
||||||
|
*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth}body{font-family:Inter,Segoe UI,system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.6;min-height:100vh;display:flex;flex-direction:column;transition:background-color 0.3s ease,color 0.3s ease}
|
||||||
|
.navbar{position:fixed;top:0;left:0;right:0;background:var(--nav-bg);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);border-bottom:1px solid var(--nav-border);z-index:1000}.nav-container{max-width:1100px;margin:0 auto;padding:0.9rem 2rem;display:flex;justify-content:space-between;align-items:center}.nav-logo{font-size:1.35rem;font-weight:800;color:var(--text);text-decoration:none;letter-spacing:-0.5px}.nav-logo span{color:var(--accent)}.nav-links{display:flex;list-style:none;gap:2.25rem}.nav-links a{color:var(--text-muted);text-decoration:none;font-weight:500;font-size:0.9rem;transition:color 0.2s;position:relative}.nav-links a::after{content:'';position:absolute;bottom:-4px;left:0;width:0;height:2px;background:var(--accent);border-radius:2px;transition:width 0.25s ease;box-shadow:0 0 8px var(--accent-glow)}.nav-links a:hover{color:var(--text)}.nav-links a:hover::after{width:100%}.nav-actions{display:flex;align-items:center;gap:0.75rem}.theme-toggle{background:var(--bg-card);border:1px solid var(--glass-border);border-radius:8px;padding:0;cursor:pointer;color:var(--text-muted);display:flex;align-items:center;justify-content:center;transition:all 0.2s;width:36px;height:36px;flex-shrink:0}.theme-toggle:hover{color:var(--accent);border-color:var(--accent-glow);background:var(--bg-card-hover);box-shadow:0 0 12px var(--accent-glow-sm)}.theme-toggle svg{width:16px;height:16px}.hamburger{display:none;flex-direction:column;gap:5px;background:none;border:none;cursor:pointer;padding:4px}.hamburger span{display:block;width:22px;height:2px;background:var(--text-2);border-radius:2px;transition:all 0.3s ease}.hamburger.open span:nth-child(1){transform:translateY(7px) rotate(45deg)}.hamburger.open span:nth-child(2){opacity:0;transform:scaleX(0)}.hamburger.open span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}.mobile-menu{display:none;flex-direction:column;border-top:1px solid var(--nav-border);background:var(--nav-bg);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px)}.mobile-menu.open{display:flex}.mobile-menu a{color:var(--text-2);text-decoration:none;font-size:1rem;font-weight:500;padding:1rem 2rem;border-bottom:1px solid var(--divider);transition:all 0.2s}.mobile-menu a:last-child{border-bottom:none}.mobile-menu a:hover{color:var(--accent);background:var(--bg-card);padding-left:2.5rem}
|
||||||
|
.error-container{flex:1;display:flex;align-items:center;justify-content:center;padding:8rem 2rem 6rem;text-align:center;position:relative}.error-bg{position:absolute;inset:0;background:radial-gradient(ellipse 90% 65% at 50% -5%,var(--hero-glow-1) 0%,transparent 55%),radial-gradient(ellipse 50% 40% at 85% 85%,var(--hero-glow-2) 0%,transparent 55%),var(--bg);z-index:0}.error-content{position:relative;z-index:1;max-width:600px;animation:errorEntrance 0.8s cubic-bezier(0.22,1,0.36,1) both}@keyframes errorEntrance{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}.error-code{font-size:12rem;font-weight:900;line-height:1;color:var(--accent);filter:drop-shadow(0 0 40px var(--accent-glow));letter-spacing:-0.05em}.error-title{font-size:2.5rem;font-weight:800;letter-spacing:-1px;margin:1.5rem 0 1rem;color:var(--text)}.error-message{font-size:1.15rem;color:var(--text-muted);margin-bottom:2.5rem;line-height:1.7}.error-cta{display:flex;gap:1rem;justify-content:center;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;gap:0.5rem;padding:0.875rem 2rem;background:var(--accent);color:#fff;text-decoration:none;border-radius:10px;font-weight:600;font-size:0.95rem;transition:all 0.25s ease;box-shadow:0 4px 24px var(--accent-glow);border:none;cursor:pointer}.btn:hover{background:var(--accent-light);transform:translateY(-2px);box-shadow:0 8px 32px var(--accent-glow);color:#fff;text-decoration:none}.btn-outline{display:inline-flex;align-items:center;gap:0.5rem;padding:0.875rem 2rem;background:var(--bg-card);border:1px solid var(--glass-border);color:var(--text-2);text-decoration:none;border-radius:10px;font-weight:600;font-size:0.95rem;transition:all 0.25s ease;cursor:pointer}.btn-outline:hover{border-color:var(--accent);color:var(--accent-light);background:var(--bg-card-hover);transform:translateY(-2px);text-decoration:none}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.btn:focus-visible,.btn-outline:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
|
||||||
|
.footer{padding:5rem 0 2.5rem;border-top:1px solid var(--divider)}.footer-inner{max-width:1100px;margin:0 auto;padding:0 2rem;display:grid;grid-template-columns:1fr auto auto;gap:4rem;margin-bottom:3.5rem;align-items:start}.footer-logo{font-size:1.35rem;font-weight:800;color:var(--text);letter-spacing:-0.5px;display:block;margin-bottom:0.6rem;text-decoration:none}.footer-logo span{color:var(--accent)}.footer-brand p{color:var(--text-muted);font-size:0.9rem;max-width:260px;line-height:1.7}.footer-links-col{display:flex;flex-direction:column;gap:0.5rem;min-width:140px}.footer-links-col h4{font-size:0.75rem;font-weight:700;text-transform:uppercase;letter-spacing:0.1em;color:var(--text-muted);margin-bottom:0.75rem}.footer-links-col a{color:var(--text-2);text-decoration:none;font-size:0.9rem;font-weight:500;transition:color 0.2s}.footer-links-col a:hover{color:var(--accent-light)}.footer-bottom{max-width:1100px;margin:0 auto;padding:2rem 2rem 0;border-top:1px solid var(--divider)}.footer-bottom p{color:var(--text-muted);font-size:0.85rem}.footer-community{display:flex;gap:0.75rem;margin-top:1rem}.footer-community a{display:flex;align-items:center;justify-content:center;width:36px;height:36px;background:var(--bg-card);border:1px solid var(--glass-border);border-radius:8px;color:var(--text-muted);text-decoration:none;transition:all 0.2s}.footer-community a:hover{border-color:var(--accent-glow);color:var(--accent-light);background:var(--bg-card-hover)}.footer-community svg{width:16px;height:16px}
|
||||||
|
@media(max-width:768px){.nav-links,.nav-actions{display:none}.hamburger{display:flex}.mobile-menu a{padding:1rem 2rem}.error-code{font-size:8rem}.error-title{font-size:2rem}.footer-inner{grid-template-columns:1fr;gap:2.5rem;text-align:center}.footer-brand{text-align:center}.footer-brand p{max-width:none}.footer-community{justify-content:center}}
|
||||||
|
@media(max-width:480px){.error-code{font-size:6rem}.error-cta{flex-direction:column}.btn,.btn-outline{width:100%;justify-content:center}}</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav class="navbar" role="navigation" aria-label="Main navigation">
|
||||||
|
<div class="nav-container">
|
||||||
|
<a href="index" class="nav-logo" aria-label="ArcaneNeko home">Arcane<span>Neko</span></a>
|
||||||
|
<ul class="nav-links" role="list">
|
||||||
|
<li><a href="index#about">About</a></li>
|
||||||
|
<li><a href="index#services">Services</a></li>
|
||||||
|
<li><a href="index#projects">Projects</a></li>
|
||||||
|
<li><a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status</a></li>
|
||||||
|
<li><a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="nav-actions">
|
||||||
|
<button class="theme-toggle" id="themeToggle" title="Switch theme" aria-label="Switch theme"></button>
|
||||||
|
<button class="hamburger" id="hamburger" aria-label="Open menu" aria-expanded="false" aria-controls="mobileMenu">
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mobile-menu" id="mobileMenu" role="menu">
|
||||||
|
<a href="index#about" role="menuitem">About</a>
|
||||||
|
<a href="index#services" role="menuitem">Services</a>
|
||||||
|
<a href="index#projects" role="menuitem">Projects</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer" role="menuitem">Status</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" role="menuitem">Neovoxis</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<main class="error-container">
|
||||||
|
<div class="error-bg"></div>
|
||||||
|
<div class="error-content">
|
||||||
|
<div class="error-code">422</div>
|
||||||
|
<h1 class="error-title">Unprocessable Entity</h1>
|
||||||
|
<p class="error-message">The request could not be processed due to semantic errors.</p>
|
||||||
|
<div class="error-cta">
|
||||||
|
<a href="index" class="btn">Go Home</a>
|
||||||
|
<a href="javascript:history.back()" class="btn-outline">Go Back</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<footer class="footer" role="contentinfo">
|
||||||
|
<div class="footer-inner">
|
||||||
|
<div class="footer-brand">
|
||||||
|
<a href="index" class="footer-logo">Arcane<span>Neko</span></a>
|
||||||
|
<p>Free open source software for developers and creators.</p>
|
||||||
|
<div class="footer-community" aria-label="Community links">
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" title="Join us on Neovoxis" aria-label="Join the ArcaneNeko community on Neovoxis">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>
|
||||||
|
</a>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer" title="Git Instance" aria-label="Visit our Git instance">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><path d="M6 21V9a9 9 0 009 9"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Services</h4>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer">Git Instance</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status Page</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a>
|
||||||
|
<a href="status">Arcane Status</a>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Legal</h4>
|
||||||
|
<a href="privacy">Privacy Policy</a>
|
||||||
|
<a href="terms">Terms of Service</a>
|
||||||
|
<a href="contact">Contact Us</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-bottom">
|
||||||
|
<p>© 2026 ArcaneNeko. All rights reserved.</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script>
|
||||||
|
const THEMES=['crimson','dark','light'],THEME_ICONS={crimson:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>',dark:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg>',light:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><path d="M12 2c0 0-4 4-4 8a4 4 0 0 0 8 0c0-4-4-8-4-8z"/></svg>'},THEME_LABELS={crimson:'Switch to dark mode',dark:'Switch to light mode',light:'Switch to crimson theme'};
|
||||||
|
let currentTheme=localStorage.getItem('an-theme')||'crimson';
|
||||||
|
function applyTheme(theme){document.documentElement.setAttribute('data-theme',theme);document.querySelectorAll('.theme-toggle').forEach(btn=>{btn.innerHTML=THEME_ICONS[theme];btn.setAttribute('title',THEME_LABELS[theme]);btn.setAttribute('aria-label',THEME_LABELS[theme])});localStorage.setItem('an-theme',theme);currentTheme=theme}
|
||||||
|
function nextTheme(){const idx=THEMES.indexOf(currentTheme);return THEMES[(idx+1)%THEMES.length]}
|
||||||
|
document.addEventListener('DOMContentLoaded',function(){applyTheme(currentTheme);document.querySelectorAll('.theme-toggle').forEach(btn=>{btn.addEventListener('click',function(){applyTheme(nextTheme())})});const hamburger=document.getElementById('hamburger'),mobileMenu=document.getElementById('mobileMenu');if(hamburger&&mobileMenu){hamburger.addEventListener('click',function(){const open=hamburger.classList.toggle('open');mobileMenu.classList.toggle('open',open);hamburger.setAttribute('aria-expanded',String(open))});mobileMenu.querySelectorAll('a').forEach(link=>{link.addEventListener('click',function(){hamburger.classList.remove('open');mobileMenu.classList.remove('open');hamburger.setAttribute('aria-expanded','false')})})}});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
109
500.html
Normal file
109
500.html
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" data-theme="crimson">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>500 - Internal Server Error | ArcaneNeko</title>
|
||||||
|
<meta name="description" content="Something went wrong on our end.">
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta property="og:url" content="https://arcaneneko.com/500">
|
||||||
|
<meta property="og:title" content="500 - Internal Server Error">
|
||||||
|
<meta property="og:description" content="Something went wrong on our end.">
|
||||||
|
<meta property="og:image" content="https://arcaneneko.com/og-image.png">
|
||||||
|
<meta name="theme-color" content="#dc143c">
|
||||||
|
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
||||||
|
<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=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
:root,[data-theme="crimson"]{--bg:#07040a;--bg-alt:#0d070c;--bg-card:rgba(255,255,255,0.04);--bg-card-hover:rgba(255,255,255,0.07);--glass-border:rgba(255,255,255,0.08);--glass-border-hover:rgba(220,20,60,0.45);--accent:#dc143c;--accent-light:#ff1744;--accent-dark:#960f2c;--accent-glow:rgba(220,20,60,0.35);--accent-glow-sm:rgba(220,20,60,0.18);--text:#fff;--text-2:#ddd0d4;--text-muted:#8c7a80;--nav-bg:rgba(7,4,10,0.85);--nav-border:rgba(255,255,255,0.06);--divider:rgba(255,255,255,0.06);--hero-glow-1:rgba(220,20,60,0.22);--hero-glow-2:rgba(220,20,60,0.1);--stats-bg:rgba(220,20,60,0.07);--stats-border:rgba(220,20,60,0.18);--shadow-deep:rgba(0,0,0,0.6);--inset-shine:rgba(255,255,255,0.04)}
|
||||||
|
[data-theme="dark"]{--bg:#080808;--bg-alt:#0f0f0f;--bg-card:rgba(255,255,255,0.04);--glass-border-hover:rgba(255,255,255,0.22);--text-2:#c8c8c8;--nav-bg:rgba(8,8,8,0.88);--nav-border:rgba(255,255,255,0.07);--divider:rgba(255,255,255,0.07);--hero-glow-1:rgba(220,20,60,0.1);--hero-glow-2:rgba(220,20,60,0.04);--stats-bg:rgba(255,255,255,0.03);--stats-border:rgba(255,255,255,0.08);--shadow-deep:rgba(0,0,0,0.7);--inset-shine:rgba(255,255,255,0.03)}
|
||||||
|
[data-theme="light"]{--bg:#f5f4f6;--bg-alt:#eeecef;--bg-card:rgba(255,255,255,0.72);--bg-card-hover:rgba(255,255,255,0.95);--glass-border:rgba(0,0,0,0.08);--glass-border-hover:rgba(192,18,48,0.35);--accent:#c0122e;--accent-light:#e0153a;--accent-dark:#8b0020;--accent-glow:rgba(192,18,48,0.22);--accent-glow-sm:rgba(192,18,48,0.1);--text:#0d0a0e;--text-2:#2e2830;--text-muted:#6a6068;--nav-bg:rgba(245,244,246,0.88);--nav-border:rgba(0,0,0,0.08);--divider:rgba(0,0,0,0.07);--hero-glow-1:rgba(192,18,48,0.12);--hero-glow-2:rgba(192,18,48,0.06);--stats-bg:rgba(192,18,48,0.06);--stats-border:rgba(192,18,48,0.16);--shadow-deep:rgba(0,0,0,0.1);--inset-shine:rgba(255,255,255,0.8)}
|
||||||
|
*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth}body{font-family:Inter,Segoe UI,system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.6;min-height:100vh;display:flex;flex-direction:column;transition:background-color 0.3s ease,color 0.3s ease}
|
||||||
|
.navbar{position:fixed;top:0;left:0;right:0;background:var(--nav-bg);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);border-bottom:1px solid var(--nav-border);z-index:1000}.nav-container{max-width:1100px;margin:0 auto;padding:0.9rem 2rem;display:flex;justify-content:space-between;align-items:center}.nav-logo{font-size:1.35rem;font-weight:800;color:var(--text);text-decoration:none;letter-spacing:-0.5px}.nav-logo span{color:var(--accent)}.nav-links{display:flex;list-style:none;gap:2.25rem}.nav-links a{color:var(--text-muted);text-decoration:none;font-weight:500;font-size:0.9rem;transition:color 0.2s;position:relative}.nav-links a::after{content:'';position:absolute;bottom:-4px;left:0;width:0;height:2px;background:var(--accent);border-radius:2px;transition:width 0.25s ease;box-shadow:0 0 8px var(--accent-glow)}.nav-links a:hover{color:var(--text)}.nav-links a:hover::after{width:100%}.nav-actions{display:flex;align-items:center;gap:0.75rem}.theme-toggle{background:var(--bg-card);border:1px solid var(--glass-border);border-radius:8px;padding:0;cursor:pointer;color:var(--text-muted);display:flex;align-items:center;justify-content:center;transition:all 0.2s;width:36px;height:36px;flex-shrink:0}.theme-toggle:hover{color:var(--accent);border-color:var(--accent-glow);background:var(--bg-card-hover);box-shadow:0 0 12px var(--accent-glow-sm)}.theme-toggle svg{width:16px;height:16px}.hamburger{display:none;flex-direction:column;gap:5px;background:none;border:none;cursor:pointer;padding:4px}.hamburger span{display:block;width:22px;height:2px;background:var(--text-2);border-radius:2px;transition:all 0.3s ease}.hamburger.open span:nth-child(1){transform:translateY(7px) rotate(45deg)}.hamburger.open span:nth-child(2){opacity:0;transform:scaleX(0)}.hamburger.open span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}.mobile-menu{display:none;flex-direction:column;border-top:1px solid var(--nav-border);background:var(--nav-bg);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px)}.mobile-menu.open{display:flex}.mobile-menu a{color:var(--text-2);text-decoration:none;font-size:1rem;font-weight:500;padding:1rem 2rem;border-bottom:1px solid var(--divider);transition:all 0.2s}.mobile-menu a:last-child{border-bottom:none}.mobile-menu a:hover{color:var(--accent);background:var(--bg-card);padding-left:2.5rem}
|
||||||
|
.error-container{flex:1;display:flex;align-items:center;justify-content:center;padding:8rem 2rem 6rem;text-align:center;position:relative}.error-bg{position:absolute;inset:0;background:radial-gradient(ellipse 90% 65% at 50% -5%,var(--hero-glow-1) 0%,transparent 55%),radial-gradient(ellipse 50% 40% at 85% 85%,var(--hero-glow-2) 0%,transparent 55%),var(--bg);z-index:0}.error-content{position:relative;z-index:1;max-width:600px;animation:errorEntrance 0.8s cubic-bezier(0.22,1,0.36,1) both}@keyframes errorEntrance{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}.error-code{font-size:12rem;font-weight:900;line-height:1;color:var(--accent);filter:drop-shadow(0 0 40px var(--accent-glow));letter-spacing:-0.05em}.error-title{font-size:2.5rem;font-weight:800;letter-spacing:-1px;margin:1.5rem 0 1rem;color:var(--text)}.error-message{font-size:1.15rem;color:var(--text-muted);margin-bottom:2.5rem;line-height:1.7}.error-cta{display:flex;gap:1rem;justify-content:center;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;gap:0.5rem;padding:0.875rem 2rem;background:var(--accent);color:#fff;text-decoration:none;border-radius:10px;font-weight:600;font-size:0.95rem;transition:all 0.25s ease;box-shadow:0 4px 24px var(--accent-glow);border:none;cursor:pointer}.btn:hover{background:var(--accent-light);transform:translateY(-2px);box-shadow:0 8px 32px var(--accent-glow);color:#fff;text-decoration:none}.btn-outline{display:inline-flex;align-items:center;gap:0.5rem;padding:0.875rem 2rem;background:var(--bg-card);border:1px solid var(--glass-border);color:var(--text-2);text-decoration:none;border-radius:10px;font-weight:600;font-size:0.95rem;transition:all 0.25s ease;cursor:pointer}.btn-outline:hover{border-color:var(--accent);color:var(--accent-light);background:var(--bg-card-hover);transform:translateY(-2px);text-decoration:none}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.btn:focus-visible,.btn-outline:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
|
||||||
|
.footer{padding:5rem 0 2.5rem;border-top:1px solid var(--divider)}.footer-inner{max-width:1100px;margin:0 auto;padding:0 2rem;display:grid;grid-template-columns:1fr auto auto;gap:4rem;margin-bottom:3.5rem;align-items:start}.footer-logo{font-size:1.35rem;font-weight:800;color:var(--text);letter-spacing:-0.5px;display:block;margin-bottom:0.6rem;text-decoration:none}.footer-logo span{color:var(--accent)}.footer-brand p{color:var(--text-muted);font-size:0.9rem;max-width:260px;line-height:1.7}.footer-links-col{display:flex;flex-direction:column;gap:0.5rem;min-width:140px}.footer-links-col h4{font-size:0.75rem;font-weight:700;text-transform:uppercase;letter-spacing:0.1em;color:var(--text-muted);margin-bottom:0.75rem}.footer-links-col a{color:var(--text-2);text-decoration:none;font-size:0.9rem;font-weight:500;transition:color 0.2s}.footer-links-col a:hover{color:var(--accent-light)}.footer-bottom{max-width:1100px;margin:0 auto;padding:2rem 2rem 0;border-top:1px solid var(--divider)}.footer-bottom p{color:var(--text-muted);font-size:0.85rem}.footer-community{display:flex;gap:0.75rem;margin-top:1rem}.footer-community a{display:flex;align-items:center;justify-content:center;width:36px;height:36px;background:var(--bg-card);border:1px solid var(--glass-border);border-radius:8px;color:var(--text-muted);text-decoration:none;transition:all 0.2s}.footer-community a:hover{border-color:var(--accent-glow);color:var(--accent-light);background:var(--bg-card-hover)}.footer-community svg{width:16px;height:16px}
|
||||||
|
@media(max-width:768px){.nav-links,.nav-actions{display:none}.hamburger{display:flex}.mobile-menu a{padding:1rem 2rem}.error-code{font-size:8rem}.error-title{font-size:2rem}.footer-inner{grid-template-columns:1fr;gap:2.5rem;text-align:center}.footer-brand{text-align:center}.footer-brand p{max-width:none}.footer-community{justify-content:center}}
|
||||||
|
@media(max-width:480px){.error-code{font-size:6rem}.error-cta{flex-direction:column}.btn,.btn-outline{width:100%;justify-content:center}}</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav class="navbar" role="navigation" aria-label="Main navigation">
|
||||||
|
<div class="nav-container">
|
||||||
|
<a href="index" class="nav-logo" aria-label="ArcaneNeko home">Arcane<span>Neko</span></a>
|
||||||
|
<ul class="nav-links" role="list">
|
||||||
|
<li><a href="index#about">About</a></li>
|
||||||
|
<li><a href="index#services">Services</a></li>
|
||||||
|
<li><a href="index#projects">Projects</a></li>
|
||||||
|
<li><a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status</a></li>
|
||||||
|
<li><a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="nav-actions">
|
||||||
|
<button class="theme-toggle" id="themeToggle" title="Switch theme" aria-label="Switch theme"></button>
|
||||||
|
<button class="hamburger" id="hamburger" aria-label="Open menu" aria-expanded="false" aria-controls="mobileMenu">
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mobile-menu" id="mobileMenu" role="menu">
|
||||||
|
<a href="index#about" role="menuitem">About</a>
|
||||||
|
<a href="index#services" role="menuitem">Services</a>
|
||||||
|
<a href="index#projects" role="menuitem">Projects</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer" role="menuitem">Status</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" role="menuitem">Neovoxis</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<main class="error-container">
|
||||||
|
<div class="error-bg"></div>
|
||||||
|
<div class="error-content">
|
||||||
|
<div class="error-code">500</div>
|
||||||
|
<h1 class="error-title">Internal Server Error</h1>
|
||||||
|
<p class="error-message">Something went wrong on our end.</p>
|
||||||
|
<div class="error-cta">
|
||||||
|
<a href="index" class="btn">Go Home</a>
|
||||||
|
<a href="javascript:history.back()" class="btn-outline">Go Back</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<footer class="footer" role="contentinfo">
|
||||||
|
<div class="footer-inner">
|
||||||
|
<div class="footer-brand">
|
||||||
|
<a href="index" class="footer-logo">Arcane<span>Neko</span></a>
|
||||||
|
<p>Free open source software for developers and creators.</p>
|
||||||
|
<div class="footer-community" aria-label="Community links">
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" title="Join us on Neovoxis" aria-label="Join the ArcaneNeko community on Neovoxis">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>
|
||||||
|
</a>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer" title="Git Instance" aria-label="Visit our Git instance">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><path d="M6 21V9a9 9 0 009 9"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Services</h4>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer">Git Instance</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status Page</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a>
|
||||||
|
<a href="status">Arcane Status</a>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Legal</h4>
|
||||||
|
<a href="privacy">Privacy Policy</a>
|
||||||
|
<a href="terms">Terms of Service</a>
|
||||||
|
<a href="contact">Contact Us</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-bottom">
|
||||||
|
<p>© 2026 ArcaneNeko. All rights reserved.</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script>
|
||||||
|
const THEMES=['crimson','dark','light'],THEME_ICONS={crimson:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>',dark:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg>',light:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><path d="M12 2c0 0-4 4-4 8a4 4 0 0 0 8 0c0-4-4-8-4-8z"/></svg>'},THEME_LABELS={crimson:'Switch to dark mode',dark:'Switch to light mode',light:'Switch to crimson theme'};
|
||||||
|
let currentTheme=localStorage.getItem('an-theme')||'crimson';
|
||||||
|
function applyTheme(theme){document.documentElement.setAttribute('data-theme',theme);document.querySelectorAll('.theme-toggle').forEach(btn=>{btn.innerHTML=THEME_ICONS[theme];btn.setAttribute('title',THEME_LABELS[theme]);btn.setAttribute('aria-label',THEME_LABELS[theme])});localStorage.setItem('an-theme',theme);currentTheme=theme}
|
||||||
|
function nextTheme(){const idx=THEMES.indexOf(currentTheme);return THEMES[(idx+1)%THEMES.length]}
|
||||||
|
document.addEventListener('DOMContentLoaded',function(){applyTheme(currentTheme);document.querySelectorAll('.theme-toggle').forEach(btn=>{btn.addEventListener('click',function(){applyTheme(nextTheme())})});const hamburger=document.getElementById('hamburger'),mobileMenu=document.getElementById('mobileMenu');if(hamburger&&mobileMenu){hamburger.addEventListener('click',function(){const open=hamburger.classList.toggle('open');mobileMenu.classList.toggle('open',open);hamburger.setAttribute('aria-expanded',String(open))});mobileMenu.querySelectorAll('a').forEach(link=>{link.addEventListener('click',function(){hamburger.classList.remove('open');mobileMenu.classList.remove('open');hamburger.setAttribute('aria-expanded','false')})})}});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
109
502.html
Normal file
109
502.html
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" data-theme="crimson">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>502 - Bad Gateway | ArcaneNeko</title>
|
||||||
|
<meta name="description" content="The gateway encountered an error.">
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta property="og:url" content="https://arcaneneko.com/502">
|
||||||
|
<meta property="og:title" content="502 - Bad Gateway">
|
||||||
|
<meta property="og:description" content="The gateway encountered an error.">
|
||||||
|
<meta property="og:image" content="https://arcaneneko.com/og-image.png">
|
||||||
|
<meta name="theme-color" content="#dc143c">
|
||||||
|
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
||||||
|
<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=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
:root,[data-theme="crimson"]{--bg:#07040a;--bg-alt:#0d070c;--bg-card:rgba(255,255,255,0.04);--bg-card-hover:rgba(255,255,255,0.07);--glass-border:rgba(255,255,255,0.08);--glass-border-hover:rgba(220,20,60,0.45);--accent:#dc143c;--accent-light:#ff1744;--accent-dark:#960f2c;--accent-glow:rgba(220,20,60,0.35);--accent-glow-sm:rgba(220,20,60,0.18);--text:#fff;--text-2:#ddd0d4;--text-muted:#8c7a80;--nav-bg:rgba(7,4,10,0.85);--nav-border:rgba(255,255,255,0.06);--divider:rgba(255,255,255,0.06);--hero-glow-1:rgba(220,20,60,0.22);--hero-glow-2:rgba(220,20,60,0.1);--stats-bg:rgba(220,20,60,0.07);--stats-border:rgba(220,20,60,0.18);--shadow-deep:rgba(0,0,0,0.6);--inset-shine:rgba(255,255,255,0.04)}
|
||||||
|
[data-theme="dark"]{--bg:#080808;--bg-alt:#0f0f0f;--bg-card:rgba(255,255,255,0.04);--glass-border-hover:rgba(255,255,255,0.22);--text-2:#c8c8c8;--nav-bg:rgba(8,8,8,0.88);--nav-border:rgba(255,255,255,0.07);--divider:rgba(255,255,255,0.07);--hero-glow-1:rgba(220,20,60,0.1);--hero-glow-2:rgba(220,20,60,0.04);--stats-bg:rgba(255,255,255,0.03);--stats-border:rgba(255,255,255,0.08);--shadow-deep:rgba(0,0,0,0.7);--inset-shine:rgba(255,255,255,0.03)}
|
||||||
|
[data-theme="light"]{--bg:#f5f4f6;--bg-alt:#eeecef;--bg-card:rgba(255,255,255,0.72);--bg-card-hover:rgba(255,255,255,0.95);--glass-border:rgba(0,0,0,0.08);--glass-border-hover:rgba(192,18,48,0.35);--accent:#c0122e;--accent-light:#e0153a;--accent-dark:#8b0020;--accent-glow:rgba(192,18,48,0.22);--accent-glow-sm:rgba(192,18,48,0.1);--text:#0d0a0e;--text-2:#2e2830;--text-muted:#6a6068;--nav-bg:rgba(245,244,246,0.88);--nav-border:rgba(0,0,0,0.08);--divider:rgba(0,0,0,0.07);--hero-glow-1:rgba(192,18,48,0.12);--hero-glow-2:rgba(192,18,48,0.06);--stats-bg:rgba(192,18,48,0.06);--stats-border:rgba(192,18,48,0.16);--shadow-deep:rgba(0,0,0,0.1);--inset-shine:rgba(255,255,255,0.8)}
|
||||||
|
*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth}body{font-family:Inter,Segoe UI,system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.6;min-height:100vh;display:flex;flex-direction:column;transition:background-color 0.3s ease,color 0.3s ease}
|
||||||
|
.navbar{position:fixed;top:0;left:0;right:0;background:var(--nav-bg);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);border-bottom:1px solid var(--nav-border);z-index:1000}.nav-container{max-width:1100px;margin:0 auto;padding:0.9rem 2rem;display:flex;justify-content:space-between;align-items:center}.nav-logo{font-size:1.35rem;font-weight:800;color:var(--text);text-decoration:none;letter-spacing:-0.5px}.nav-logo span{color:var(--accent)}.nav-links{display:flex;list-style:none;gap:2.25rem}.nav-links a{color:var(--text-muted);text-decoration:none;font-weight:500;font-size:0.9rem;transition:color 0.2s;position:relative}.nav-links a::after{content:'';position:absolute;bottom:-4px;left:0;width:0;height:2px;background:var(--accent);border-radius:2px;transition:width 0.25s ease;box-shadow:0 0 8px var(--accent-glow)}.nav-links a:hover{color:var(--text)}.nav-links a:hover::after{width:100%}.nav-actions{display:flex;align-items:center;gap:0.75rem}.theme-toggle{background:var(--bg-card);border:1px solid var(--glass-border);border-radius:8px;padding:0;cursor:pointer;color:var(--text-muted);display:flex;align-items:center;justify-content:center;transition:all 0.2s;width:36px;height:36px;flex-shrink:0}.theme-toggle:hover{color:var(--accent);border-color:var(--accent-glow);background:var(--bg-card-hover);box-shadow:0 0 12px var(--accent-glow-sm)}.theme-toggle svg{width:16px;height:16px}.hamburger{display:none;flex-direction:column;gap:5px;background:none;border:none;cursor:pointer;padding:4px}.hamburger span{display:block;width:22px;height:2px;background:var(--text-2);border-radius:2px;transition:all 0.3s ease}.hamburger.open span:nth-child(1){transform:translateY(7px) rotate(45deg)}.hamburger.open span:nth-child(2){opacity:0;transform:scaleX(0)}.hamburger.open span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}.mobile-menu{display:none;flex-direction:column;border-top:1px solid var(--nav-border);background:var(--nav-bg);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px)}.mobile-menu.open{display:flex}.mobile-menu a{color:var(--text-2);text-decoration:none;font-size:1rem;font-weight:500;padding:1rem 2rem;border-bottom:1px solid var(--divider);transition:all 0.2s}.mobile-menu a:last-child{border-bottom:none}.mobile-menu a:hover{color:var(--accent);background:var(--bg-card);padding-left:2.5rem}
|
||||||
|
.error-container{flex:1;display:flex;align-items:center;justify-content:center;padding:8rem 2rem 6rem;text-align:center;position:relative}.error-bg{position:absolute;inset:0;background:radial-gradient(ellipse 90% 65% at 50% -5%,var(--hero-glow-1) 0%,transparent 55%),radial-gradient(ellipse 50% 40% at 85% 85%,var(--hero-glow-2) 0%,transparent 55%),var(--bg);z-index:0}.error-content{position:relative;z-index:1;max-width:600px;animation:errorEntrance 0.8s cubic-bezier(0.22,1,0.36,1) both}@keyframes errorEntrance{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}.error-code{font-size:12rem;font-weight:900;line-height:1;color:var(--accent);filter:drop-shadow(0 0 40px var(--accent-glow));letter-spacing:-0.05em}.error-title{font-size:2.5rem;font-weight:800;letter-spacing:-1px;margin:1.5rem 0 1rem;color:var(--text)}.error-message{font-size:1.15rem;color:var(--text-muted);margin-bottom:2.5rem;line-height:1.7}.error-cta{display:flex;gap:1rem;justify-content:center;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;gap:0.5rem;padding:0.875rem 2rem;background:var(--accent);color:#fff;text-decoration:none;border-radius:10px;font-weight:600;font-size:0.95rem;transition:all 0.25s ease;box-shadow:0 4px 24px var(--accent-glow);border:none;cursor:pointer}.btn:hover{background:var(--accent-light);transform:translateY(-2px);box-shadow:0 8px 32px var(--accent-glow);color:#fff;text-decoration:none}.btn-outline{display:inline-flex;align-items:center;gap:0.5rem;padding:0.875rem 2rem;background:var(--bg-card);border:1px solid var(--glass-border);color:var(--text-2);text-decoration:none;border-radius:10px;font-weight:600;font-size:0.95rem;transition:all 0.25s ease;cursor:pointer}.btn-outline:hover{border-color:var(--accent);color:var(--accent-light);background:var(--bg-card-hover);transform:translateY(-2px);text-decoration:none}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.btn:focus-visible,.btn-outline:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
|
||||||
|
.footer{padding:5rem 0 2.5rem;border-top:1px solid var(--divider)}.footer-inner{max-width:1100px;margin:0 auto;padding:0 2rem;display:grid;grid-template-columns:1fr auto auto;gap:4rem;margin-bottom:3.5rem;align-items:start}.footer-logo{font-size:1.35rem;font-weight:800;color:var(--text);letter-spacing:-0.5px;display:block;margin-bottom:0.6rem;text-decoration:none}.footer-logo span{color:var(--accent)}.footer-brand p{color:var(--text-muted);font-size:0.9rem;max-width:260px;line-height:1.7}.footer-links-col{display:flex;flex-direction:column;gap:0.5rem;min-width:140px}.footer-links-col h4{font-size:0.75rem;font-weight:700;text-transform:uppercase;letter-spacing:0.1em;color:var(--text-muted);margin-bottom:0.75rem}.footer-links-col a{color:var(--text-2);text-decoration:none;font-size:0.9rem;font-weight:500;transition:color 0.2s}.footer-links-col a:hover{color:var(--accent-light)}.footer-bottom{max-width:1100px;margin:0 auto;padding:2rem 2rem 0;border-top:1px solid var(--divider)}.footer-bottom p{color:var(--text-muted);font-size:0.85rem}.footer-community{display:flex;gap:0.75rem;margin-top:1rem}.footer-community a{display:flex;align-items:center;justify-content:center;width:36px;height:36px;background:var(--bg-card);border:1px solid var(--glass-border);border-radius:8px;color:var(--text-muted);text-decoration:none;transition:all 0.2s}.footer-community a:hover{border-color:var(--accent-glow);color:var(--accent-light);background:var(--bg-card-hover)}.footer-community svg{width:16px;height:16px}
|
||||||
|
@media(max-width:768px){.nav-links,.nav-actions{display:none}.hamburger{display:flex}.mobile-menu a{padding:1rem 2rem}.error-code{font-size:8rem}.error-title{font-size:2rem}.footer-inner{grid-template-columns:1fr;gap:2.5rem;text-align:center}.footer-brand{text-align:center}.footer-brand p{max-width:none}.footer-community{justify-content:center}}
|
||||||
|
@media(max-width:480px){.error-code{font-size:6rem}.error-cta{flex-direction:column}.btn,.btn-outline{width:100%;justify-content:center}}</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav class="navbar" role="navigation" aria-label="Main navigation">
|
||||||
|
<div class="nav-container">
|
||||||
|
<a href="index" class="nav-logo" aria-label="ArcaneNeko home">Arcane<span>Neko</span></a>
|
||||||
|
<ul class="nav-links" role="list">
|
||||||
|
<li><a href="index#about">About</a></li>
|
||||||
|
<li><a href="index#services">Services</a></li>
|
||||||
|
<li><a href="index#projects">Projects</a></li>
|
||||||
|
<li><a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status</a></li>
|
||||||
|
<li><a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="nav-actions">
|
||||||
|
<button class="theme-toggle" id="themeToggle" title="Switch theme" aria-label="Switch theme"></button>
|
||||||
|
<button class="hamburger" id="hamburger" aria-label="Open menu" aria-expanded="false" aria-controls="mobileMenu">
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mobile-menu" id="mobileMenu" role="menu">
|
||||||
|
<a href="index#about" role="menuitem">About</a>
|
||||||
|
<a href="index#services" role="menuitem">Services</a>
|
||||||
|
<a href="index#projects" role="menuitem">Projects</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer" role="menuitem">Status</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" role="menuitem">Neovoxis</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<main class="error-container">
|
||||||
|
<div class="error-bg"></div>
|
||||||
|
<div class="error-content">
|
||||||
|
<div class="error-code">502</div>
|
||||||
|
<h1 class="error-title">Bad Gateway</h1>
|
||||||
|
<p class="error-message">The server, while acting as a gateway or proxy, received an invalid response from the upstream server.</p>
|
||||||
|
<div class="error-cta">
|
||||||
|
<a href="index" class="btn">Go Home</a>
|
||||||
|
<a href="javascript:history.back()" class="btn-outline">Go Back</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<footer class="footer" role="contentinfo">
|
||||||
|
<div class="footer-inner">
|
||||||
|
<div class="footer-brand">
|
||||||
|
<a href="index" class="footer-logo">Arcane<span>Neko</span></a>
|
||||||
|
<p>Free open source software for developers and creators.</p>
|
||||||
|
<div class="footer-community" aria-label="Community links">
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" title="Join us on Neovoxis" aria-label="Join the ArcaneNeko community on Neovoxis">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>
|
||||||
|
</a>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer" title="Git Instance" aria-label="Visit our Git instance">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><path d="M6 21V9a9 9 0 009 9"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Services</h4>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer">Git Instance</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status Page</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a>
|
||||||
|
<a href="status">Arcane Status</a>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Legal</h4>
|
||||||
|
<a href="privacy">Privacy Policy</a>
|
||||||
|
<a href="terms">Terms of Service</a>
|
||||||
|
<a href="contact">Contact Us</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-bottom">
|
||||||
|
<p>© 2026 ArcaneNeko. All rights reserved.</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script>
|
||||||
|
const THEMES=['crimson','dark','light'],THEME_ICONS={crimson:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>',dark:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg>',light:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><path d="M12 2c0 0-4 4-4 8a4 4 0 0 0 8 0c0-4-4-8-4-8z"/></svg>'},THEME_LABELS={crimson:'Switch to dark mode',dark:'Switch to light mode',light:'Switch to crimson theme'};
|
||||||
|
let currentTheme=localStorage.getItem('an-theme')||'crimson';
|
||||||
|
function applyTheme(theme){document.documentElement.setAttribute('data-theme',theme);document.querySelectorAll('.theme-toggle').forEach(btn=>{btn.innerHTML=THEME_ICONS[theme];btn.setAttribute('title',THEME_LABELS[theme]);btn.setAttribute('aria-label',THEME_LABELS[theme])});localStorage.setItem('an-theme',theme);currentTheme=theme}
|
||||||
|
function nextTheme(){const idx=THEMES.indexOf(currentTheme);return THEMES[(idx+1)%THEMES.length]}
|
||||||
|
document.addEventListener('DOMContentLoaded',function(){applyTheme(currentTheme);document.querySelectorAll('.theme-toggle').forEach(btn=>{btn.addEventListener('click',function(){applyTheme(nextTheme())})});const hamburger=document.getElementById('hamburger'),mobileMenu=document.getElementById('mobileMenu');if(hamburger&&mobileMenu){hamburger.addEventListener('click',function(){const open=hamburger.classList.toggle('open');mobileMenu.classList.toggle('open',open);hamburger.setAttribute('aria-expanded',String(open))});mobileMenu.querySelectorAll('a').forEach(link=>{link.addEventListener('click',function(){hamburger.classList.remove('open');mobileMenu.classList.remove('open');hamburger.setAttribute('aria-expanded','false')})})}});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
109
503.html
Normal file
109
503.html
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" data-theme="crimson">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>503 - Service Unavailable | ArcaneNeko</title>
|
||||||
|
<meta name="description" content="Service temporarily unavailable.">
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta property="og:url" content="https://arcaneneko.com/503">
|
||||||
|
<meta property="og:title" content="503 - Service Unavailable">
|
||||||
|
<meta property="og:description" content="Service temporarily unavailable.">
|
||||||
|
<meta property="og:image" content="https://arcaneneko.com/og-image.png">
|
||||||
|
<meta name="theme-color" content="#dc143c">
|
||||||
|
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
||||||
|
<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=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
:root,[data-theme="crimson"]{--bg:#07040a;--bg-alt:#0d070c;--bg-card:rgba(255,255,255,0.04);--bg-card-hover:rgba(255,255,255,0.07);--glass-border:rgba(255,255,255,0.08);--glass-border-hover:rgba(220,20,60,0.45);--accent:#dc143c;--accent-light:#ff1744;--accent-dark:#960f2c;--accent-glow:rgba(220,20,60,0.35);--accent-glow-sm:rgba(220,20,60,0.18);--text:#fff;--text-2:#ddd0d4;--text-muted:#8c7a80;--nav-bg:rgba(7,4,10,0.85);--nav-border:rgba(255,255,255,0.06);--divider:rgba(255,255,255,0.06);--hero-glow-1:rgba(220,20,60,0.22);--hero-glow-2:rgba(220,20,60,0.1);--stats-bg:rgba(220,20,60,0.07);--stats-border:rgba(220,20,60,0.18);--shadow-deep:rgba(0,0,0,0.6);--inset-shine:rgba(255,255,255,0.04)}
|
||||||
|
[data-theme="dark"]{--bg:#080808;--bg-alt:#0f0f0f;--bg-card:rgba(255,255,255,0.04);--glass-border-hover:rgba(255,255,255,0.22);--text-2:#c8c8c8;--nav-bg:rgba(8,8,8,0.88);--nav-border:rgba(255,255,255,0.07);--divider:rgba(255,255,255,0.07);--hero-glow-1:rgba(220,20,60,0.1);--hero-glow-2:rgba(220,20,60,0.04);--stats-bg:rgba(255,255,255,0.03);--stats-border:rgba(255,255,255,0.08);--shadow-deep:rgba(0,0,0,0.7);--inset-shine:rgba(255,255,255,0.03)}
|
||||||
|
[data-theme="light"]{--bg:#f5f4f6;--bg-alt:#eeecef;--bg-card:rgba(255,255,255,0.72);--bg-card-hover:rgba(255,255,255,0.95);--glass-border:rgba(0,0,0,0.08);--glass-border-hover:rgba(192,18,48,0.35);--accent:#c0122e;--accent-light:#e0153a;--accent-dark:#8b0020;--accent-glow:rgba(192,18,48,0.22);--accent-glow-sm:rgba(192,18,48,0.1);--text:#0d0a0e;--text-2:#2e2830;--text-muted:#6a6068;--nav-bg:rgba(245,244,246,0.88);--nav-border:rgba(0,0,0,0.08);--divider:rgba(0,0,0,0.07);--hero-glow-1:rgba(192,18,48,0.12);--hero-glow-2:rgba(192,18,48,0.06);--stats-bg:rgba(192,18,48,0.06);--stats-border:rgba(192,18,48,0.16);--shadow-deep:rgba(0,0,0,0.1);--inset-shine:rgba(255,255,255,0.8)}
|
||||||
|
*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth}body{font-family:Inter,Segoe UI,system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.6;min-height:100vh;display:flex;flex-direction:column;transition:background-color 0.3s ease,color 0.3s ease}
|
||||||
|
.navbar{position:fixed;top:0;left:0;right:0;background:var(--nav-bg);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);border-bottom:1px solid var(--nav-border);z-index:1000}.nav-container{max-width:1100px;margin:0 auto;padding:0.9rem 2rem;display:flex;justify-content:space-between;align-items:center}.nav-logo{font-size:1.35rem;font-weight:800;color:var(--text);text-decoration:none;letter-spacing:-0.5px}.nav-logo span{color:var(--accent)}.nav-links{display:flex;list-style:none;gap:2.25rem}.nav-links a{color:var(--text-muted);text-decoration:none;font-weight:500;font-size:0.9rem;transition:color 0.2s;position:relative}.nav-links a::after{content:'';position:absolute;bottom:-4px;left:0;width:0;height:2px;background:var(--accent);border-radius:2px;transition:width 0.25s ease;box-shadow:0 0 8px var(--accent-glow)}.nav-links a:hover{color:var(--text)}.nav-links a:hover::after{width:100%}.nav-actions{display:flex;align-items:center;gap:0.75rem}.theme-toggle{background:var(--bg-card);border:1px solid var(--glass-border);border-radius:8px;padding:0;cursor:pointer;color:var(--text-muted);display:flex;align-items:center;justify-content:center;transition:all 0.2s;width:36px;height:36px;flex-shrink:0}.theme-toggle:hover{color:var(--accent);border-color:var(--accent-glow);background:var(--bg-card-hover);box-shadow:0 0 12px var(--accent-glow-sm)}.theme-toggle svg{width:16px;height:16px}.hamburger{display:none;flex-direction:column;gap:5px;background:none;border:none;cursor:pointer;padding:4px}.hamburger span{display:block;width:22px;height:2px;background:var(--text-2);border-radius:2px;transition:all 0.3s ease}.hamburger.open span:nth-child(1){transform:translateY(7px) rotate(45deg)}.hamburger.open span:nth-child(2){opacity:0;transform:scaleX(0)}.hamburger.open span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}.mobile-menu{display:none;flex-direction:column;border-top:1px solid var(--nav-border);background:var(--nav-bg);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px)}.mobile-menu.open{display:flex}.mobile-menu a{color:var(--text-2);text-decoration:none;font-size:1rem;font-weight:500;padding:1rem 2rem;border-bottom:1px solid var(--divider);transition:all 0.2s}.mobile-menu a:last-child{border-bottom:none}.mobile-menu a:hover{color:var(--accent);background:var(--bg-card);padding-left:2.5rem}
|
||||||
|
.error-container{flex:1;display:flex;align-items:center;justify-content:center;padding:8rem 2rem 6rem;text-align:center;position:relative}.error-bg{position:absolute;inset:0;background:radial-gradient(ellipse 90% 65% at 50% -5%,var(--hero-glow-1) 0%,transparent 55%),radial-gradient(ellipse 50% 40% at 85% 85%,var(--hero-glow-2) 0%,transparent 55%),var(--bg);z-index:0}.error-content{position:relative;z-index:1;max-width:600px;animation:errorEntrance 0.8s cubic-bezier(0.22,1,0.36,1) both}@keyframes errorEntrance{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}.error-code{font-size:12rem;font-weight:900;line-height:1;color:var(--accent);filter:drop-shadow(0 0 40px var(--accent-glow));letter-spacing:-0.05em}.error-title{font-size:2.5rem;font-weight:800;letter-spacing:-1px;margin:1.5rem 0 1rem;color:var(--text)}.error-message{font-size:1.15rem;color:var(--text-muted);margin-bottom:2.5rem;line-height:1.7}.error-cta{display:flex;gap:1rem;justify-content:center;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;gap:0.5rem;padding:0.875rem 2rem;background:var(--accent);color:#fff;text-decoration:none;border-radius:10px;font-weight:600;font-size:0.95rem;transition:all 0.25s ease;box-shadow:0 4px 24px var(--accent-glow);border:none;cursor:pointer}.btn:hover{background:var(--accent-light);transform:translateY(-2px);box-shadow:0 8px 32px var(--accent-glow);color:#fff;text-decoration:none}.btn-outline{display:inline-flex;align-items:center;gap:0.5rem;padding:0.875rem 2rem;background:var(--bg-card);border:1px solid var(--glass-border);color:var(--text-2);text-decoration:none;border-radius:10px;font-weight:600;font-size:0.95rem;transition:all 0.25s ease;cursor:pointer}.btn-outline:hover{border-color:var(--accent);color:var(--accent-light);background:var(--bg-card-hover);transform:translateY(-2px);text-decoration:none}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.btn:focus-visible,.btn-outline:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
|
||||||
|
.footer{padding:5rem 0 2.5rem;border-top:1px solid var(--divider)}.footer-inner{max-width:1100px;margin:0 auto;padding:0 2rem;display:grid;grid-template-columns:1fr auto auto;gap:4rem;margin-bottom:3.5rem;align-items:start}.footer-logo{font-size:1.35rem;font-weight:800;color:var(--text);letter-spacing:-0.5px;display:block;margin-bottom:0.6rem;text-decoration:none}.footer-logo span{color:var(--accent)}.footer-brand p{color:var(--text-muted);font-size:0.9rem;max-width:260px;line-height:1.7}.footer-links-col{display:flex;flex-direction:column;gap:0.5rem;min-width:140px}.footer-links-col h4{font-size:0.75rem;font-weight:700;text-transform:uppercase;letter-spacing:0.1em;color:var(--text-muted);margin-bottom:0.75rem}.footer-links-col a{color:var(--text-2);text-decoration:none;font-size:0.9rem;font-weight:500;transition:color 0.2s}.footer-links-col a:hover{color:var(--accent-light)}.footer-bottom{max-width:1100px;margin:0 auto;padding:2rem 2rem 0;border-top:1px solid var(--divider)}.footer-bottom p{color:var(--text-muted);font-size:0.85rem}.footer-community{display:flex;gap:0.75rem;margin-top:1rem}.footer-community a{display:flex;align-items:center;justify-content:center;width:36px;height:36px;background:var(--bg-card);border:1px solid var(--glass-border);border-radius:8px;color:var(--text-muted);text-decoration:none;transition:all 0.2s}.footer-community a:hover{border-color:var(--accent-glow);color:var(--accent-light);background:var(--bg-card-hover)}.footer-community svg{width:16px;height:16px}
|
||||||
|
@media(max-width:768px){.nav-links,.nav-actions{display:none}.hamburger{display:flex}.mobile-menu a{padding:1rem 2rem}.error-code{font-size:8rem}.error-title{font-size:2rem}.footer-inner{grid-template-columns:1fr;gap:2.5rem;text-align:center}.footer-brand{text-align:center}.footer-brand p{max-width:none}.footer-community{justify-content:center}}
|
||||||
|
@media(max-width:480px){.error-code{font-size:6rem}.error-cta{flex-direction:column}.btn,.btn-outline{width:100%;justify-content:center}}</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav class="navbar" role="navigation" aria-label="Main navigation">
|
||||||
|
<div class="nav-container">
|
||||||
|
<a href="index" class="nav-logo" aria-label="ArcaneNeko home">Arcane<span>Neko</span></a>
|
||||||
|
<ul class="nav-links" role="list">
|
||||||
|
<li><a href="index#about">About</a></li>
|
||||||
|
<li><a href="index#services">Services</a></li>
|
||||||
|
<li><a href="index#projects">Projects</a></li>
|
||||||
|
<li><a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status</a></li>
|
||||||
|
<li><a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="nav-actions">
|
||||||
|
<button class="theme-toggle" id="themeToggle" title="Switch theme" aria-label="Switch theme"></button>
|
||||||
|
<button class="hamburger" id="hamburger" aria-label="Open menu" aria-expanded="false" aria-controls="mobileMenu">
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mobile-menu" id="mobileMenu" role="menu">
|
||||||
|
<a href="index#about" role="menuitem">About</a>
|
||||||
|
<a href="index#services" role="menuitem">Services</a>
|
||||||
|
<a href="index#projects" role="menuitem">Projects</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer" role="menuitem">Status</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" role="menuitem">Neovoxis</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<main class="error-container">
|
||||||
|
<div class="error-bg"></div>
|
||||||
|
<div class="error-content">
|
||||||
|
<div class="error-code">503</div>
|
||||||
|
<h1 class="error-title">Service Unavailable</h1>
|
||||||
|
<p class="error-message">The server is temporarily unable to handle the request. This is often due to maintenance or temporary overload.</p>
|
||||||
|
<div class="error-cta">
|
||||||
|
<a href="index" class="btn">Go Home</a>
|
||||||
|
<a href="javascript:history.back()" class="btn-outline">Go Back</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<footer class="footer" role="contentinfo">
|
||||||
|
<div class="footer-inner">
|
||||||
|
<div class="footer-brand">
|
||||||
|
<a href="index" class="footer-logo">Arcane<span>Neko</span></a>
|
||||||
|
<p>Free open source software for developers and creators.</p>
|
||||||
|
<div class="footer-community" aria-label="Community links">
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" title="Join us on Neovoxis" aria-label="Join the ArcaneNeko community on Neovoxis">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>
|
||||||
|
</a>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer" title="Git Instance" aria-label="Visit our Git instance">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><path d="M6 21V9a9 9 0 009 9"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Services</h4>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer">Git Instance</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status Page</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a>
|
||||||
|
<a href="status">Arcane Status</a>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Legal</h4>
|
||||||
|
<a href="privacy">Privacy Policy</a>
|
||||||
|
<a href="terms">Terms of Service</a>
|
||||||
|
<a href="contact">Contact Us</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-bottom">
|
||||||
|
<p>© 2026 ArcaneNeko. All rights reserved.</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script>
|
||||||
|
const THEMES=['crimson','dark','light'],THEME_ICONS={crimson:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>',dark:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg>',light:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><path d="M12 2c0 0-4 4-4 8a4 4 0 0 0 8 0c0-4-4-8-4-8z"/></svg>'},THEME_LABELS={crimson:'Switch to dark mode',dark:'Switch to light mode',light:'Switch to crimson theme'};
|
||||||
|
let currentTheme=localStorage.getItem('an-theme')||'crimson';
|
||||||
|
function applyTheme(theme){document.documentElement.setAttribute('data-theme',theme);document.querySelectorAll('.theme-toggle').forEach(btn=>{btn.innerHTML=THEME_ICONS[theme];btn.setAttribute('title',THEME_LABELS[theme]);btn.setAttribute('aria-label',THEME_LABELS[theme])});localStorage.setItem('an-theme',theme);currentTheme=theme}
|
||||||
|
function nextTheme(){const idx=THEMES.indexOf(currentTheme);return THEMES[(idx+1)%THEMES.length]}
|
||||||
|
document.addEventListener('DOMContentLoaded',function(){applyTheme(currentTheme);document.querySelectorAll('.theme-toggle').forEach(btn=>{btn.addEventListener('click',function(){applyTheme(nextTheme())})});const hamburger=document.getElementById('hamburger'),mobileMenu=document.getElementById('mobileMenu');if(hamburger&&mobileMenu){hamburger.addEventListener('click',function(){const open=hamburger.classList.toggle('open');mobileMenu.classList.toggle('open',open);hamburger.setAttribute('aria-expanded',String(open))});mobileMenu.querySelectorAll('a').forEach(link=>{link.addEventListener('click',function(){hamburger.classList.remove('open');mobileMenu.classList.remove('open');hamburger.setAttribute('aria-expanded','false')})})}});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
18
LICENSE
18
LICENSE
@@ -1,18 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2026 ArcaneNeko
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
|
||||||
associated documentation files (the "Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the
|
|
||||||
following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial
|
|
||||||
portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
|
|
||||||
LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
|
|
||||||
EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
||||||
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
193
README.md
193
README.md
@@ -1,2 +1,193 @@
|
|||||||
# Website
|
# ArcaneNeko Website
|
||||||
|
|
||||||
|
The official ArcaneNeko website - open source and available under the MIT License.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT License - see [LICENSE](../LICENSE) for details.
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
This is a static HTML/CSS/JS website showcasing ArcaneNeko's services and projects. It's designed to be simple, fast, and easily customizable.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **Static HTML** — No frameworks, just clean semantic HTML
|
||||||
|
- **Responsive Design** — Works on mobile, tablet, and desktop
|
||||||
|
- **Theme System** — Three built-in themes: crimson (default), dark, light
|
||||||
|
- **Theme Toggle** — Users can switch between themes with persisted preference
|
||||||
|
- **Modular CSS** — Easy to add custom themes
|
||||||
|
- **No Dependencies** — Plain CSS and vanilla JavaScript
|
||||||
|
- **Accessible** — ARIA labels and keyboard navigation support
|
||||||
|
- **Self-contained Error Pages** — Error pages include header/footer and all CSS/JS
|
||||||
|
|
||||||
|
## File Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
ArcaneNekoWebsite/
|
||||||
|
├── index.html # Main landing page
|
||||||
|
├── status.html # Arcane Status product page
|
||||||
|
├── privacy.html # Privacy policy
|
||||||
|
├── terms.html # Terms of service
|
||||||
|
├── contact.html # Contact page
|
||||||
|
├── coming-soon.html # Coming soon page
|
||||||
|
├── 400.html # Bad Request error page
|
||||||
|
├── 403.html # Forbidden error page
|
||||||
|
├── 404.html # Not Found error page
|
||||||
|
├── 422.html # Unprocessable Entity error page
|
||||||
|
├── 500.html # Internal Server Error page
|
||||||
|
├── 502.html # Bad Gateway error page
|
||||||
|
├── 503.html # Service Unavailable error page
|
||||||
|
├── favicon.svg # Favicon
|
||||||
|
├── robots.txt # Robots.txt
|
||||||
|
├── sitemap.xml # XML sitemap for search engines
|
||||||
|
├── .htaccess # Apache configuration
|
||||||
|
├── css/
|
||||||
|
│ ├── index.css # Main CSS (imports all others)
|
||||||
|
│ ├── themes.css # Theme CSS variables
|
||||||
|
│ ├── base.css # Base reset and styles
|
||||||
|
│ ├── navbar.css # Navbar styles
|
||||||
|
│ ├── hero.css # Hero section styles
|
||||||
|
│ ├── buttons.css # Button styles
|
||||||
|
│ ├── stats.css # Stats bar styles
|
||||||
|
│ ├── about.css # About section styles
|
||||||
|
│ ├── sections.css # Generic section styles
|
||||||
|
│ ├── cards.css # Card & feature styles
|
||||||
|
│ ├── footer.css # Footer styles
|
||||||
|
│ ├── legal.css # Legal page styles
|
||||||
|
│ ├── contact.css # Contact page styles
|
||||||
|
│ ├── utility.css # Utility styles
|
||||||
|
│ └── responsive.css # Mobile/tablet breakpoints
|
||||||
|
├── js/
|
||||||
|
│ ├── theme.js # Theme switching logic
|
||||||
|
│ └── main.js # Main initialization
|
||||||
|
└── README.md
|
||||||
|
```
|
||||||
|
|
||||||
|
## Error Pages
|
||||||
|
|
||||||
|
The website includes 7 self-contained error pages:
|
||||||
|
|
||||||
|
| Page | Description |
|
||||||
|
|------|-----------|
|
||||||
|
| `400.html` | Bad Request |
|
||||||
|
| `403.html` | Forbidden/Access Denied |
|
||||||
|
| `404.html` | Page Not Found |
|
||||||
|
| `422.html` | Unprocessable Entity |
|
||||||
|
| `500.html` | Internal Server Error |
|
||||||
|
| `502.html` | Bad Gateway |
|
||||||
|
| `503.html` | Service Unavailable |
|
||||||
|
|
||||||
|
Each error page includes:
|
||||||
|
- Full website header (navbar with navigation links, theme toggle, mobile hamburger menu)
|
||||||
|
- Full website footer (brand, community links, services links, legal links)
|
||||||
|
- Embedded CSS (themes, navbar, footer, error content, responsive styles)
|
||||||
|
- Embedded JavaScript (theme switching, mobile menu)
|
||||||
|
- Theme selection that persists via localStorage
|
||||||
|
- Responsive design for all screen sizes
|
||||||
|
|
||||||
|
The error pages are configured in `.htaccess` - see the [Apache Configuration](#apache-configuration) section below.
|
||||||
|
|
||||||
|
## Customization
|
||||||
|
|
||||||
|
### Creating a Custom Theme
|
||||||
|
|
||||||
|
1. Edit `css/themes.css` to add your theme:
|
||||||
|
|
||||||
|
```css
|
||||||
|
[data-theme="custom"] {
|
||||||
|
--bg: #your-bg-color;
|
||||||
|
--bg-alt: #your-bg-alt-color;
|
||||||
|
--accent: #your-accent-color;
|
||||||
|
/* ... add other variables */
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Update the `THEMES` array in `js/theme.js` to include your theme:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const THEMES = ['crimson', 'dark', 'light', 'custom'];
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Add theme icons and labels in `js/theme.js`:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const THEME_ICONS = {
|
||||||
|
custom: '<svg>...</svg>',
|
||||||
|
};
|
||||||
|
|
||||||
|
const THEME_LABELS = {
|
||||||
|
custom: 'Switch to custom theme',
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
### Adding New Pages
|
||||||
|
|
||||||
|
1. Copy an existing page (e.g., `contact.html`)
|
||||||
|
2. Update the navbar links in all HTML files to include your new page
|
||||||
|
3. Add footer links in the same way
|
||||||
|
|
||||||
|
### Modifying CSS
|
||||||
|
|
||||||
|
Each CSS file contains specific component styles:
|
||||||
|
- **themes.css** - Theme variables
|
||||||
|
- **navbar.css** - Navbar and mobile menu
|
||||||
|
- **hero.css** - Hero section
|
||||||
|
- **buttons.css** - Button styles
|
||||||
|
- **cards.css** - Cards and features
|
||||||
|
- **footer.css** - Footer
|
||||||
|
- **legal.css** - Legal pages
|
||||||
|
- **contact.css** - Contact & coming soon
|
||||||
|
|
||||||
|
## Apache Configuration
|
||||||
|
|
||||||
|
The `.htaccess` file provides:
|
||||||
|
|
||||||
|
### URL Rewriting
|
||||||
|
- Removes `.html` extension from URLs (e.g., `/about` instead of `/about.html`)
|
||||||
|
|
||||||
|
### Custom Error Pages
|
||||||
|
- Maps HTTP errors to error pages:
|
||||||
|
- `400` → `/400`
|
||||||
|
- `403` → `/403`
|
||||||
|
- `404` → `/404`
|
||||||
|
- `500` → `/500`
|
||||||
|
- `502` → `/502`
|
||||||
|
- `503` → `/503`
|
||||||
|
|
||||||
|
### Security
|
||||||
|
- Blocks access to hidden files (dotfiles)
|
||||||
|
- Blocks access to config/environment files (`.env`, `.config`, `.log`, etc.)
|
||||||
|
- Sets security headers (X-Content-Type-Options, X-Frame-Options, X-XSS-Protection, Referrer-Policy, Permissions-Policy)
|
||||||
|
|
||||||
|
### Performance
|
||||||
|
- Static assets caching (1 year for images, fonts, CSS, JS)
|
||||||
|
- No cache for HTML documents
|
||||||
|
- Gzip compression for HTML, CSS, JS, text, fonts
|
||||||
|
|
||||||
|
### Sitemap & Robots.txt
|
||||||
|
- `sitemap.xml` - XML sitemap for search engines
|
||||||
|
- `robots.txt` - Robots.txt allowing all crawlers and pointing to sitemap
|
||||||
|
|
||||||
|
### HTTPS (Optional)
|
||||||
|
- Uncomment lines to force HTTPS redirect
|
||||||
|
|
||||||
|
### Nginx Compatibility
|
||||||
|
|
||||||
|
If using Nginx instead of Apache:
|
||||||
|
- These rules must be translated to Nginx config or handled upstream
|
||||||
|
- ErrorDocument directives need server-level configuration in Nginx
|
||||||
|
- Header directives need `add_header` in Nginx context
|
||||||
|
- Rewrite rules need `rewrite` directive in Nginx
|
||||||
|
|
||||||
|
The `.htaccess` file contains notes for Nginx compatibility at the bottom.
|
||||||
|
|
||||||
|
## Browser Support
|
||||||
|
|
||||||
|
- Chrome/Edge 90+
|
||||||
|
- Firefox 88+
|
||||||
|
- Safari 14+
|
||||||
|
|
||||||
|
## Deployment
|
||||||
|
|
||||||
|
Simply upload all files to any web server or static hosting service. No server-side code required.
|
||||||
169
coming-soon.html
Normal file
169
coming-soon.html
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" data-theme="crimson">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Coming Soon | ArcaneNeko</title>
|
||||||
|
<meta name="description" content="Something new is coming from ArcaneNeko. Stay tuned.">
|
||||||
|
|
||||||
|
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
||||||
|
<link rel="stylesheet" href="css/index.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=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<!-- Navbar -->
|
||||||
|
<nav class="navbar" role="navigation" aria-label="Main navigation">
|
||||||
|
<div class="nav-container">
|
||||||
|
<a href="#" class="nav-logo" aria-label="ArcaneNeko home">Arcane<span>Neko</span></a>
|
||||||
|
<ul class="nav-links" role="list">
|
||||||
|
<li><a href="index#about">About</a></li>
|
||||||
|
<li><a href="index#services">Services</a></li>
|
||||||
|
<li><a href="index#projects">Projects</a></li>
|
||||||
|
<li><a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status</a></li>
|
||||||
|
<li><a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="nav-actions">
|
||||||
|
<button class="theme-toggle" id="themeToggle" title="Switch theme" aria-label="Switch theme"></button>
|
||||||
|
<button class="hamburger" id="hamburger" aria-label="Open menu" aria-expanded="false" aria-controls="mobileMenu">
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mobile-menu" id="mobileMenu" role="menu">
|
||||||
|
<a href="index#about" role="menuitem">About</a>
|
||||||
|
<a href="index#services" role="menuitem">Services</a>
|
||||||
|
<a href="index#projects" role="menuitem">Projects</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer" role="menuitem">Status</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" role="menuitem">Neovoxis</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section class="hero coming-soon-hero" aria-label="Coming Soon">
|
||||||
|
<div class="hero-bg" aria-hidden="true"></div>
|
||||||
|
<div class="hero-grid" aria-hidden="true"></div>
|
||||||
|
<div class="coming-soon-content">
|
||||||
|
<div class="coming-soon-badge">Coming Soon</div>
|
||||||
|
<h1>Something <span>Exciting</span> Is Brewing</h1>
|
||||||
|
<p class="hero-subtitle">We're working on something new. Stay tuned for updates.</p>
|
||||||
|
<div class="coming-soon-cta">
|
||||||
|
<a href="https://arcaneneko.com" class="btn">Back to Home</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Footer -->
|
||||||
|
<footer class="footer" role="contentinfo">
|
||||||
|
<div class="container">
|
||||||
|
<div class="footer-inner">
|
||||||
|
<div class="footer-brand">
|
||||||
|
<a href="#" class="footer-logo">Arcane<span>Neko</span></a>
|
||||||
|
<p>Free open source software for developers and creators.</p>
|
||||||
|
<div class="footer-community" aria-label="Community links">
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" title="Join us on Neovoxis" aria-label="Join the ArcaneNeko community on Neovoxis">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>
|
||||||
|
</a>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer" title="Git Instance" aria-label="Visit our Git instance">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><path d="M6 21V9a9 9 0 009 9"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Services</h4>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer">Git Instance</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status Page</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a>
|
||||||
|
<a href="status">Arcane Status</a>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Legal</h4>
|
||||||
|
<a href="privacy">Privacy Policy</a>
|
||||||
|
<a href="terms">Terms of Service</a>
|
||||||
|
<a href="contact">Contact Us</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-bottom">
|
||||||
|
<p>© 2026 ArcaneNeko. All rights reserved.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script src="js/theme.js"></script>
|
||||||
|
<script src="js/main.js"></script>
|
||||||
|
<style>
|
||||||
|
.coming-soon-hero {
|
||||||
|
min-height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
text-align: center;
|
||||||
|
position: relative;
|
||||||
|
padding: 8rem 2rem 6rem;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.coming-soon-content {
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
max-width: 600px;
|
||||||
|
animation: heroEntrance 0.9s cubic-bezier(0.22, 1, 0.36, 1) both;
|
||||||
|
}
|
||||||
|
|
||||||
|
.coming-soon-badge {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0.5rem 1.25rem;
|
||||||
|
background: var(--bg-card);
|
||||||
|
border: 1px solid var(--accent-glow);
|
||||||
|
border-radius: 100px;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--accent-light);
|
||||||
|
letter-spacing: 0.1em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
box-shadow: 0 0 20px var(--accent-glow-sm);
|
||||||
|
}
|
||||||
|
|
||||||
|
.coming-soon-hero h1 {
|
||||||
|
font-size: 3.5rem;
|
||||||
|
font-weight: 900;
|
||||||
|
line-height: 1.15;
|
||||||
|
letter-spacing: -2px;
|
||||||
|
color: var(--text);
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.coming-soon-hero h1 span {
|
||||||
|
color: var(--accent);
|
||||||
|
filter: drop-shadow(0 0 28px var(--accent-glow));
|
||||||
|
}
|
||||||
|
|
||||||
|
.coming-soon-hero .hero-subtitle {
|
||||||
|
font-size: 1.15rem;
|
||||||
|
color: var(--text-muted);
|
||||||
|
max-width: 420px;
|
||||||
|
margin: 0 auto 2.5rem;
|
||||||
|
line-height: 1.75;
|
||||||
|
}
|
||||||
|
|
||||||
|
.coming-soon-cta {
|
||||||
|
display: flex;
|
||||||
|
gap: 1rem;
|
||||||
|
justify-content: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.coming-soon-hero h1 {
|
||||||
|
font-size: 2.5rem;
|
||||||
|
letter-spacing: -1.5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
206
contact.html
Normal file
206
contact.html
Normal file
@@ -0,0 +1,206 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" data-theme="crimson">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Contact Us | ArcaneNeko</title>
|
||||||
|
<meta name="description" content="Get in touch with ArcaneNeko support, security reports, legal enquiries, and more.">
|
||||||
|
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta property="og:url content="https://arcaneneko.com/contact">">
|
||||||
|
<meta property="og:title" content="Contact Us | ArcaneNeko">
|
||||||
|
<meta property="og:description" content="Get in touch with ArcaneNeko for support, security reports, or general enquiries.">
|
||||||
|
<meta property="og:image" content="https://arcaneneko.com/og-image.png">
|
||||||
|
<meta name="theme-color" content="#dc143c">
|
||||||
|
|
||||||
|
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
||||||
|
<link rel="stylesheet" href="css/index.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=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<!-- Navbar -->
|
||||||
|
<nav class="navbar" role="navigation" aria-label="Main navigation">
|
||||||
|
<div class="nav-container">
|
||||||
|
<a href="index" class="nav-logo" aria-label="ArcaneNeko home">Arcane<span>Neko</span></a>
|
||||||
|
<ul class="nav-links" role="list">
|
||||||
|
<li><a href="index#about">About</a></li>
|
||||||
|
<li><a href="index#services">Services</a></li>
|
||||||
|
<li><a href="index#projects">Projects</a></li>
|
||||||
|
<li><a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status</a></li>
|
||||||
|
<li><a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="nav-actions">
|
||||||
|
<button class="theme-toggle" id="themeToggle" title="Switch theme" aria-label="Switch theme"></button>
|
||||||
|
<button class="hamburger" id="hamburger" aria-label="Open menu" aria-expanded="false" aria-controls="mobileMenu">
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mobile-menu" id="mobileMenu" role="menu">
|
||||||
|
<a href="index#about" role="menuitem">About</a>
|
||||||
|
<a href="index#services" role="menuitem">Services</a>
|
||||||
|
<a href="index#projects" role="menuitem">Projects</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer" role="menuitem">Status</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" role="menuitem">Neovoxis</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<!-- Hero -->
|
||||||
|
<div class="legal-hero">
|
||||||
|
<div class="legal-tag">Get in touch</div>
|
||||||
|
<h1>Contact <span>Us</span></h1>
|
||||||
|
<p class="legal-meta">We're a small team. We'll get back to you as soon as we can.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Contact grid -->
|
||||||
|
<main id="main-content">
|
||||||
|
<section class="section" aria-labelledby="contact-heading">
|
||||||
|
<div class="container">
|
||||||
|
<span class="section-label" aria-hidden="true">Contact</span>
|
||||||
|
<h2 class="section-title" id="contact-heading">How to reach us</h2>
|
||||||
|
|
||||||
|
<div class="contact-grid">
|
||||||
|
|
||||||
|
<div class="contact-card reveal">
|
||||||
|
<div class="contact-card-icon" aria-hidden="true">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/>
|
||||||
|
<polyline points="22,6 12,13 2,6"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3>General Enquiries</h3>
|
||||||
|
<p>Questions about ArcaneNeko, our projects, or anything else? We'd love to hear from you.</p>
|
||||||
|
<a href="mailto:hello@arcaneneko.com" class="contact-email">
|
||||||
|
hello@arcaneneko.com →
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="contact-card reveal">
|
||||||
|
<div class="contact-card-icon" aria-hidden="true">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<circle cx="12" cy="12" r="10"/>
|
||||||
|
<line x1="12" y1="8" x2="12" y2="12"/>
|
||||||
|
<line x1="12" y1="16" x2="12.01" y2="16"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3>Support</h3>
|
||||||
|
<p>Need help with your Git account, Neovoxis, or any of our services? Support enquiries go here.</p>
|
||||||
|
<a href="mailto:support@arcaneneko.com" class="contact-email">
|
||||||
|
support@arcaneneko.com →
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="contact-card reveal">
|
||||||
|
<div class="contact-card-icon" aria-hidden="true">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3>Security Reports</h3>
|
||||||
|
<p>Found a vulnerability? Please report it responsibly before public disclosure. We take all reports seriously.</p>
|
||||||
|
<a href="mailto:security@arcaneneko.com" class="contact-email">
|
||||||
|
security@arcaneneko.com →
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="contact-card reveal">
|
||||||
|
<div class="contact-card-icon" aria-hidden="true">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<rect x="3" y="3" width="18" height="18" rx="2" ry="2"/>
|
||||||
|
<line x1="9" y1="9" x2="15" y2="15"/>
|
||||||
|
<line x1="15" y1="9" x2="9" y2="15"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3>Abuse Reports</h3>
|
||||||
|
<p>Report content or accounts that violate our Terms of Service, including harassment, spam, or illegal content.</p>
|
||||||
|
<a href="mailto:abuse@arcaneneko.com" class="contact-email">
|
||||||
|
abuse@arcaneneko.com →
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="contact-card reveal">
|
||||||
|
<div class="contact-card-icon" aria-hidden="true">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/>
|
||||||
|
<polyline points="14 2 14 8 20 8"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3>Legal & Privacy</h3>
|
||||||
|
<p>Data access requests, GDPR/UK GDPR rights, or legal enquiries. See our <a href="privacy">Privacy Policy</a> for your rights.</p>
|
||||||
|
<a href="mailto:legal@arcaneneko.com" class="contact-email">
|
||||||
|
legal@arcaneneko.com →
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="contact-card reveal">
|
||||||
|
<div class="contact-card-icon" aria-hidden="true">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3>Community</h3>
|
||||||
|
<p>Want to chat with us and the community in real time? Join us on Neovoxis, it's our own platform and we're active there.</p>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" class="contact-email">
|
||||||
|
Join Neovoxis →
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p class="contact-note">
|
||||||
|
<strong>Response times:</strong> We're a small, volunteer-run team. We aim to reply to all emails within a few days. Security reports are prioritised and will receive a response within 48 hours where possible. We don't have a support ticket system, a plain email is all you need.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<!-- Footer -->
|
||||||
|
<footer class="footer" role="contentinfo">
|
||||||
|
<div class="container">
|
||||||
|
<div class="footer-inner">
|
||||||
|
<div class="footer-brand">
|
||||||
|
<a href="index" class="footer-logo">Arcane<span>Neko</span></a>
|
||||||
|
<p>Free open source software for developers and creators.</p>
|
||||||
|
<div class="footer-community" aria-label="Community links">
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" title="Join us on Neovoxis" aria-label="Join the ArcaneNeko community on Neovoxis">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>
|
||||||
|
</a>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer" title="Git Instance" aria-label="Visit our Git instance">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><path d="M6 21V9a9 9 0 009 9"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Services</h4>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer">Git Instance</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status Page</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a>
|
||||||
|
<a href="status">Arcane Status</a>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Legal</h4>
|
||||||
|
<a href="privacy">Privacy Policy</a>
|
||||||
|
<a href="terms">Terms of Service</a>
|
||||||
|
<a href="contact">Contact Us</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-bottom">
|
||||||
|
<p>© 2026 ArcaneNeko. All rights reserved.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<button class="back-to-top" id="backToTop" aria-label="Back to top">
|
||||||
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="18 15 12 9 6 15"/></svg>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<script src="js/theme.js"></script>
|
||||||
|
<script src="js/main.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
42
css/about.css
Normal file
42
css/about.css
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* About Section Styles
|
||||||
|
*/
|
||||||
|
|
||||||
|
.about {
|
||||||
|
padding: 8rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.about-inner {
|
||||||
|
max-width: 680px;
|
||||||
|
margin: 0 auto;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.about-eyebrow {
|
||||||
|
font-size: 0.75rem;
|
||||||
|
font-weight: 700;
|
||||||
|
letter-spacing: 0.12em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--accent);
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.about h2 {
|
||||||
|
font-size: 2.5rem;
|
||||||
|
font-weight: 800;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
margin-bottom: 1.75rem;
|
||||||
|
color: var(--text);
|
||||||
|
}
|
||||||
|
|
||||||
|
.about p {
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-size: 1.05rem;
|
||||||
|
line-height: 1.85;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.about p:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
57
css/base.css
Normal file
57
css/base.css
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* Base Styles - Reset and foundational styles
|
||||||
|
*/
|
||||||
|
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: 'Inter', 'Segoe UI', system-ui, sans-serif;
|
||||||
|
background-color: var(--bg);
|
||||||
|
color: var(--text);
|
||||||
|
line-height: 1.6;
|
||||||
|
overflow-x: hidden;
|
||||||
|
transition: background-color 0.3s ease, color 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
max-width: 1100px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 0 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: var(--accent);
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
color: var(--accent-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
.skip-link {
|
||||||
|
position: absolute;
|
||||||
|
left: 1rem;
|
||||||
|
top: -3rem;
|
||||||
|
z-index: 2000;
|
||||||
|
background: var(--accent);
|
||||||
|
color: #fff;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: 700;
|
||||||
|
padding: 0.75rem 1rem;
|
||||||
|
border-radius: 10px;
|
||||||
|
box-shadow: 0 8px 24px var(--accent-glow);
|
||||||
|
transition: top 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.skip-link:focus {
|
||||||
|
top: 1rem;
|
||||||
|
}
|
||||||
67
css/buttons.css
Normal file
67
css/buttons.css
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
* Button Styles
|
||||||
|
*/
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
padding: 0.875rem 2rem;
|
||||||
|
background: var(--accent);
|
||||||
|
color: #fff;
|
||||||
|
text-decoration: none;
|
||||||
|
border-radius: 10px;
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 0.95rem;
|
||||||
|
transition: all 0.25s ease;
|
||||||
|
box-shadow: 0 4px 24px var(--accent-glow);
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn:hover {
|
||||||
|
background: var(--accent-light);
|
||||||
|
transform: translateY(-2px);
|
||||||
|
box-shadow: 0 8px 32px var(--accent-glow);
|
||||||
|
color: #fff;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-outline {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
padding: 0.875rem 2rem;
|
||||||
|
background: var(--bg-card);
|
||||||
|
border: 1px solid var(--glass-border);
|
||||||
|
color: var(--text-2);
|
||||||
|
text-decoration: none;
|
||||||
|
border-radius: 10px;
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 0.95rem;
|
||||||
|
transition: all 0.25s ease;
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-outline:hover {
|
||||||
|
border-color: var(--accent);
|
||||||
|
color: var(--accent-light);
|
||||||
|
background: var(--bg-card-hover);
|
||||||
|
transform: translateY(-2px);
|
||||||
|
box-shadow: 0 4px 16px var(--accent-glow-sm);
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:focus-visible,
|
||||||
|
button:focus-visible {
|
||||||
|
outline: 2px solid var(--accent);
|
||||||
|
outline-offset: 3px;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn:focus-visible,
|
||||||
|
.btn-outline:focus-visible {
|
||||||
|
outline: 2px solid var(--accent-light);
|
||||||
|
outline-offset: 3px;
|
||||||
|
}
|
||||||
171
css/cards.css
Normal file
171
css/cards.css
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
/*
|
||||||
|
* Card Styles
|
||||||
|
*/
|
||||||
|
|
||||||
|
.card-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||||||
|
gap: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card {
|
||||||
|
background: var(--bg-card);
|
||||||
|
border: 1px solid var(--glass-border);
|
||||||
|
border-radius: 20px;
|
||||||
|
padding: 2.5rem;
|
||||||
|
backdrop-filter: blur(20px);
|
||||||
|
-webkit-backdrop-filter: blur(20px);
|
||||||
|
box-shadow:
|
||||||
|
0 4px 24px var(--shadow-deep),
|
||||||
|
inset 0 1px 0 var(--inset-shine);
|
||||||
|
transition: all 0.35s ease;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
height: 2px;
|
||||||
|
background: linear-gradient(90deg, transparent, var(--accent), transparent);
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card:hover {
|
||||||
|
border-color: var(--glass-border-hover);
|
||||||
|
transform: translateY(-6px);
|
||||||
|
box-shadow:
|
||||||
|
0 20px 48px var(--shadow-deep),
|
||||||
|
0 0 0 1px var(--accent-glow-sm),
|
||||||
|
inset 0 1px 0 var(--inset-shine);
|
||||||
|
}
|
||||||
|
|
||||||
|
.card:hover::after {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-icon {
|
||||||
|
width: 52px;
|
||||||
|
height: 52px;
|
||||||
|
background: linear-gradient(135deg, var(--accent-dark) 0%, var(--accent) 100%);
|
||||||
|
border-radius: 14px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
box-shadow: 0 4px 16px var(--accent-glow);
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-icon svg {
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
stroke: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card .badge {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0.3rem 0.85rem;
|
||||||
|
background: var(--accent-glow-sm);
|
||||||
|
border: 1px solid var(--accent-glow);
|
||||||
|
color: var(--accent-light);
|
||||||
|
font-size: 0.7rem;
|
||||||
|
font-weight: 700;
|
||||||
|
border-radius: 6px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.1em;
|
||||||
|
margin-bottom: 1.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card h3 {
|
||||||
|
font-size: 1.4rem;
|
||||||
|
font-weight: 700;
|
||||||
|
margin-bottom: 0.75rem;
|
||||||
|
color: var(--text);
|
||||||
|
letter-spacing: -0.3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card p {
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-size: 0.95rem;
|
||||||
|
line-height: 1.8;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-link {
|
||||||
|
color: var(--accent);
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.4rem;
|
||||||
|
transition: all 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-link:hover {
|
||||||
|
color: var(--accent-light);
|
||||||
|
gap: 0.8rem;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Feature cards */
|
||||||
|
.feature-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
|
||||||
|
gap: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature-card {
|
||||||
|
background: var(--bg-card);
|
||||||
|
border: 1px solid var(--glass-border);
|
||||||
|
border-radius: 16px;
|
||||||
|
padding: 2rem;
|
||||||
|
backdrop-filter: blur(16px);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature-card:hover {
|
||||||
|
border-color: var(--glass-border-hover);
|
||||||
|
transform: translateY(-4px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature-card h3 {
|
||||||
|
font-size: 1.15rem;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--accent);
|
||||||
|
margin-bottom: 0.6rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature-card p {
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-size: 0.9rem;
|
||||||
|
line-height: 1.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Scroll reveal */
|
||||||
|
.reveal {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(28px) scale(0.98);
|
||||||
|
transition: opacity 0.6s ease, transform 0.6s cubic-bezier(0.22, 1, 0.36, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.reveal.visible {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0) scale(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.reveal:nth-child(2) { transition-delay: 0.12s; }
|
||||||
|
.reveal:nth-child(3) { transition-delay: 0.24s; }
|
||||||
|
.reveal:nth-child(4) { transition-delay: 0.36s; }
|
||||||
|
|
||||||
|
@media (prefers-reduced-motion: reduce) {
|
||||||
|
.reveal {
|
||||||
|
opacity: 1;
|
||||||
|
transform: none;
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
143
css/contact.css
Normal file
143
css/contact.css
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
/*
|
||||||
|
* Contact Page Styles
|
||||||
|
*/
|
||||||
|
|
||||||
|
.contact-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
||||||
|
gap: 1.5rem;
|
||||||
|
margin-bottom: 4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-card {
|
||||||
|
background: var(--bg-card);
|
||||||
|
border: 1px solid var(--glass-border);
|
||||||
|
border-radius: 20px;
|
||||||
|
padding: 2rem;
|
||||||
|
backdrop-filter: blur(20px);
|
||||||
|
-webkit-backdrop-filter: blur(20px);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-card::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0; left: 0; right: 0;
|
||||||
|
height: 2px;
|
||||||
|
background: linear-gradient(90deg, transparent, var(--accent), transparent);
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-card:hover {
|
||||||
|
border-color: var(--glass-border-hover);
|
||||||
|
transform: translateY(-4px);
|
||||||
|
box-shadow: 0 16px 40px var(--shadow-deep);
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-card:hover::after { opacity: 1; }
|
||||||
|
|
||||||
|
.contact-card-icon {
|
||||||
|
width: 44px;
|
||||||
|
height: 44px;
|
||||||
|
background: linear-gradient(135deg, var(--accent-dark) 0%, var(--accent) 100%);
|
||||||
|
border-radius: 12px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
margin-bottom: 1.25rem;
|
||||||
|
box-shadow: 0 4px 12px var(--accent-glow);
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-card-icon svg {
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
stroke: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-card h3 {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--text);
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-card p {
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-size: 0.9rem;
|
||||||
|
line-height: 1.65;
|
||||||
|
margin-bottom: 1.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-card a.contact-email {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.4rem;
|
||||||
|
color: var(--accent);
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
transition: all 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-card a.contact-email:hover {
|
||||||
|
color: var(--accent-light);
|
||||||
|
gap: 0.7rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-note {
|
||||||
|
background: var(--bg-card);
|
||||||
|
border: 1px solid var(--glass-border);
|
||||||
|
border-left: 3px solid var(--accent);
|
||||||
|
border-radius: 0 12px 12px 0;
|
||||||
|
padding: 1.25rem 1.5rem;
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-size: 0.9rem;
|
||||||
|
line-height: 1.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-note strong {
|
||||||
|
color: var(--text-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Coming soon */
|
||||||
|
.coming-soon-hero {
|
||||||
|
min-height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
text-align: center;
|
||||||
|
position: relative;
|
||||||
|
padding: 8rem 2rem 6rem;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.coming-soon-content {
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
max-width: 600px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.coming-soon-badge {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0.5rem 1.25rem;
|
||||||
|
background: var(--accent-glow-sm);
|
||||||
|
border: 1px solid var(--accent-glow);
|
||||||
|
color: var(--accent-light);
|
||||||
|
font-size: 0.75rem;
|
||||||
|
font-weight: 700;
|
||||||
|
border-radius: 100px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.1em;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.coming-soon-cta {
|
||||||
|
display: flex;
|
||||||
|
gap: 1rem;
|
||||||
|
justify-content: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin-top: 2.5rem;
|
||||||
|
}
|
||||||
107
css/footer.css
Normal file
107
css/footer.css
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
/*
|
||||||
|
* Footer Styles
|
||||||
|
*/
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
padding: 5rem 0 2.5rem;
|
||||||
|
border-top: 1px solid var(--divider);
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-inner {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr auto auto;
|
||||||
|
gap: 4rem;
|
||||||
|
margin-bottom: 3.5rem;
|
||||||
|
align-items: start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-logo {
|
||||||
|
font-size: 1.35rem;
|
||||||
|
font-weight: 800;
|
||||||
|
color: var(--text);
|
||||||
|
letter-spacing: -0.5px;
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 0.6rem;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-logo span {
|
||||||
|
color: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-brand p {
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-size: 0.9rem;
|
||||||
|
max-width: 260px;
|
||||||
|
line-height: 1.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-links-col {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.5rem;
|
||||||
|
min-width: 140px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-links-col h4 {
|
||||||
|
font-size: 0.75rem;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.1em;
|
||||||
|
color: var(--text-muted);
|
||||||
|
margin-bottom: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-links-col a {
|
||||||
|
color: var(--text-2);
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
font-weight: 500;
|
||||||
|
transition: color 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-links-col a:hover {
|
||||||
|
color: var(--accent-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-bottom {
|
||||||
|
padding-top: 2rem;
|
||||||
|
border-top: 1px solid var(--divider);
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-bottom p {
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-size: 0.85rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Footer community links */
|
||||||
|
.footer-community {
|
||||||
|
display: flex;
|
||||||
|
gap: 0.75rem;
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-community a {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
background: var(--bg-card);
|
||||||
|
border: 1px solid var(--glass-border);
|
||||||
|
border-radius: 8px;
|
||||||
|
color: var(--text-muted);
|
||||||
|
text-decoration: none;
|
||||||
|
transition: all 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-community a:hover {
|
||||||
|
border-color: var(--accent-glow);
|
||||||
|
color: var(--accent-light);
|
||||||
|
background: var(--bg-card-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-community svg {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
}
|
||||||
118
css/hero.css
Normal file
118
css/hero.css
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
/*
|
||||||
|
* Hero Styles
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hero {
|
||||||
|
min-height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
text-align: center;
|
||||||
|
position: relative;
|
||||||
|
padding: 8rem 2rem 6rem;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-bg {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
background:
|
||||||
|
radial-gradient(ellipse 90% 65% at 50% -5%, var(--hero-glow-1) 0%, transparent 55%),
|
||||||
|
radial-gradient(ellipse 50% 40% at 85% 85%, var(--hero-glow-2) 0%, transparent 55%),
|
||||||
|
radial-gradient(ellipse 40% 35% at 10% 80%, var(--hero-glow-2) 0%, transparent 55%),
|
||||||
|
var(--bg);
|
||||||
|
z-index: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-grid {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
background-image: radial-gradient(circle, var(--accent-glow-sm) 1px, transparent 1px);
|
||||||
|
background-size: 48px 48px;
|
||||||
|
opacity: 0;
|
||||||
|
animation: gridFadeIn 2s ease 0.4s forwards, gridDrift 40s ease-in-out 2.4s infinite;
|
||||||
|
pointer-events: none;
|
||||||
|
-webkit-mask-image: radial-gradient(ellipse 80% 70% at 50% 50%, black 20%, transparent 80%);
|
||||||
|
mask-image: radial-gradient(ellipse 80% 70% at 50% 50%, black 20%, transparent 80%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-content {
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
max-width: 820px;
|
||||||
|
animation: heroEntrance 0.9s cubic-bezier(0.22, 1, 0.36, 1) both;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-tag {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0.4rem 1.1rem;
|
||||||
|
background: var(--bg-card);
|
||||||
|
border: 1px solid var(--glass-border);
|
||||||
|
border-radius: 100px;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--text-muted);
|
||||||
|
letter-spacing: 0.08em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero h1 {
|
||||||
|
font-size: 5.5rem;
|
||||||
|
font-weight: 900;
|
||||||
|
line-height: 1;
|
||||||
|
letter-spacing: -3px;
|
||||||
|
color: var(--text);
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero h1 span {
|
||||||
|
color: var(--accent);
|
||||||
|
filter: drop-shadow(0 0 28px var(--accent-glow));
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-subtitle {
|
||||||
|
font-size: 1.2rem;
|
||||||
|
color: var(--text-muted);
|
||||||
|
max-width: 520px;
|
||||||
|
margin: 0 auto 2.75rem;
|
||||||
|
line-height: 1.75;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-cta {
|
||||||
|
display: flex;
|
||||||
|
gap: 1.25rem;
|
||||||
|
justify-content: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hero animation keyframes */
|
||||||
|
@keyframes gridFadeIn {
|
||||||
|
to { opacity: 0.35; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes gridDrift {
|
||||||
|
0%, 100% { transform: translate(0, 0); }
|
||||||
|
33% { transform: translate(6px, -8px); }
|
||||||
|
66% { transform: translate(-6px, 4px); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes heroEntrance {
|
||||||
|
from { opacity: 0; transform: translateY(24px); }
|
||||||
|
to { opacity: 1; transform: translateY(0); }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reduced motion - hero */
|
||||||
|
@media (prefers-reduced-motion: reduce) {
|
||||||
|
.hero-grid {
|
||||||
|
animation: none;
|
||||||
|
opacity: 0.2;
|
||||||
|
}
|
||||||
|
.hero-content {
|
||||||
|
animation: none;
|
||||||
|
opacity: 1;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
46
css/index.css
Normal file
46
css/index.css
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* ArcaneNeko Website Styles
|
||||||
|
* Import order matters - later files can override earlier ones
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Theme variables (must come first) */
|
||||||
|
@import url('./themes.css');
|
||||||
|
|
||||||
|
/* Base styles */
|
||||||
|
@import url('./base.css');
|
||||||
|
|
||||||
|
/* Navbar */
|
||||||
|
@import url('./navbar.css');
|
||||||
|
|
||||||
|
/* Hero */
|
||||||
|
@import url('./hero.css');
|
||||||
|
|
||||||
|
/* Buttons */
|
||||||
|
@import url('./buttons.css');
|
||||||
|
|
||||||
|
/* Stats */
|
||||||
|
@import url('./stats.css');
|
||||||
|
|
||||||
|
/* About */
|
||||||
|
@import url('./about.css');
|
||||||
|
|
||||||
|
/* Sections */
|
||||||
|
@import url('./sections.css');
|
||||||
|
|
||||||
|
/* Cards */
|
||||||
|
@import url('./cards.css');
|
||||||
|
|
||||||
|
/* Footer */
|
||||||
|
@import url('./footer.css');
|
||||||
|
|
||||||
|
/* Legal pages */
|
||||||
|
@import url('./legal.css');
|
||||||
|
|
||||||
|
/* Contact & Coming Soon */
|
||||||
|
@import url('./contact.css');
|
||||||
|
|
||||||
|
/* Utilities */
|
||||||
|
@import url('./utility.css');
|
||||||
|
|
||||||
|
/* Responsive (must come last) */
|
||||||
|
@import url('./responsive.css');
|
||||||
432
css/legal.css
Normal file
432
css/legal.css
Normal file
@@ -0,0 +1,432 @@
|
|||||||
|
/*
|
||||||
|
* Legal Page Styles
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Hero */
|
||||||
|
.legal-hero {
|
||||||
|
padding: 9rem 2rem 4rem;
|
||||||
|
background:
|
||||||
|
radial-gradient(ellipse 70% 50% at 50% -10%, var(--hero-glow-1) 0%, transparent 55%),
|
||||||
|
var(--bg);
|
||||||
|
border-bottom: 1px solid var(--divider);
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-hero .legal-tag {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0.35rem 1rem;
|
||||||
|
background: var(--bg-card);
|
||||||
|
border: 1px solid var(--glass-border);
|
||||||
|
border-radius: 100px;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--text-muted);
|
||||||
|
letter-spacing: 0.08em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
margin-bottom: 1.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-hero h1 {
|
||||||
|
font-size: 2.75rem;
|
||||||
|
font-weight: 900;
|
||||||
|
letter-spacing: -1.5px;
|
||||||
|
margin-bottom: 0.75rem;
|
||||||
|
color: var(--text);
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-hero h1 span {
|
||||||
|
color: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-hero .legal-meta {
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-size: 0.9rem;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Layout */
|
||||||
|
.legal-wrap {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 220px 1fr;
|
||||||
|
gap: 4rem;
|
||||||
|
max-width: 1100px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 4rem 2rem 6rem;
|
||||||
|
align-items: start;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TOC */
|
||||||
|
.legal-toc {
|
||||||
|
position: sticky;
|
||||||
|
top: 90px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-toc h4 {
|
||||||
|
font-size: 0.7rem;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.12em;
|
||||||
|
color: var(--text-muted);
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-toc ul {
|
||||||
|
list-style: none;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.15rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-toc a {
|
||||||
|
display: block;
|
||||||
|
color: var(--text-muted);
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: 0.85rem;
|
||||||
|
font-weight: 500;
|
||||||
|
padding: 0.45rem 0.75rem;
|
||||||
|
border-radius: 7px;
|
||||||
|
border-left: 2px solid transparent;
|
||||||
|
transition: all 0.2s;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-toc a:hover,
|
||||||
|
.legal-toc a.active {
|
||||||
|
color: var(--accent-light);
|
||||||
|
background: var(--bg-card);
|
||||||
|
border-left-color: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Content */
|
||||||
|
.legal-content {
|
||||||
|
min-width: 0;
|
||||||
|
scroll-margin-top: 90px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-section {
|
||||||
|
margin-bottom: 3.5rem;
|
||||||
|
padding-bottom: 3.5rem;
|
||||||
|
border-bottom: 1px solid var(--divider);
|
||||||
|
scroll-margin-top: 92px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-section:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
margin-bottom: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-section h2 {
|
||||||
|
font-size: 1.4rem;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--text);
|
||||||
|
margin-bottom: 1.25rem;
|
||||||
|
letter-spacing: -0.3px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-section h2 .section-num {
|
||||||
|
font-size: 0.75rem;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--accent);
|
||||||
|
background: var(--accent-glow-sm);
|
||||||
|
border: 1px solid var(--accent-glow);
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 0.2rem 0.55rem;
|
||||||
|
letter-spacing: 0;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-section h3 {
|
||||||
|
font-size: 1.05rem;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--text);
|
||||||
|
margin: 1.75rem 0 0.6rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-section p {
|
||||||
|
color: var(--text-2);
|
||||||
|
font-size: 0.98rem;
|
||||||
|
line-height: 1.85;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-section p:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-section ul,
|
||||||
|
.legal-section ol {
|
||||||
|
color: var(--text-2);
|
||||||
|
font-size: 0.98rem;
|
||||||
|
line-height: 1.85;
|
||||||
|
padding-left: 1.5rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-section ul li,
|
||||||
|
.legal-section ol li {
|
||||||
|
margin-bottom: 0.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-section a {
|
||||||
|
color: var(--accent);
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-section a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
color: var(--accent-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Callouts */
|
||||||
|
.callout {
|
||||||
|
background: var(--bg-card);
|
||||||
|
border: 1px solid var(--glass-border);
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 1.25rem 1.5rem;
|
||||||
|
margin: 1.5rem 0;
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.callout.callout--info {
|
||||||
|
border-left: 3px solid var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.callout.callout--lock {
|
||||||
|
border-left: 3px solid #22c55e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.callout .callout-title {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.08em;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.callout.callout--info .callout-title { color: var(--accent); }
|
||||||
|
.callout.callout--lock .callout-title { color: #22c55e; }
|
||||||
|
|
||||||
|
.callout p {
|
||||||
|
margin-bottom: 0 !important;
|
||||||
|
font-size: 0.9rem !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Data table */
|
||||||
|
.data-table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin: 1.25rem 0;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.data-table th {
|
||||||
|
text-align: left;
|
||||||
|
padding: 0.75rem 1rem;
|
||||||
|
background: var(--bg-card);
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-size: 0.72rem;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.08em;
|
||||||
|
border-bottom: 1px solid var(--divider);
|
||||||
|
}
|
||||||
|
|
||||||
|
.data-table th:first-child { border-radius: 8px 0 0 0; }
|
||||||
|
.data-table th:last-child { border-radius: 0 8px 0 0; }
|
||||||
|
|
||||||
|
.data-table td {
|
||||||
|
padding: 0.85rem 1rem;
|
||||||
|
color: var(--text-2);
|
||||||
|
border-bottom: 1px solid var(--divider);
|
||||||
|
vertical-align: top;
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.data-table tr:last-child td { border-bottom: none; }
|
||||||
|
|
||||||
|
.data-table td:first-child {
|
||||||
|
font-weight: 600;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Section kicker */
|
||||||
|
.section-kicker {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: 0.75rem;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
font-weight: 700;
|
||||||
|
letter-spacing: 0.12em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-at-a-glance,
|
||||||
|
.legal-overview {
|
||||||
|
margin-bottom: 3.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-at-a-glance h2,
|
||||||
|
.legal-overview h2 {
|
||||||
|
font-size: 1.65rem;
|
||||||
|
letter-spacing: -0.4px;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Summary/Comparison grids */
|
||||||
|
.summary-grid,
|
||||||
|
.comparison-grid,
|
||||||
|
.action-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-card,
|
||||||
|
.comparison-card,
|
||||||
|
.action-card {
|
||||||
|
background: var(--bg-card);
|
||||||
|
border: 1px solid var(--glass-border);
|
||||||
|
border-radius: 16px;
|
||||||
|
padding: 1.15rem 1.1rem;
|
||||||
|
backdrop-filter: blur(12px);
|
||||||
|
-webkit-backdrop-filter: blur(12px);
|
||||||
|
box-shadow: 0 8px 24px var(--shadow-deep), inset 0 1px 0 var(--inset-shine);
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-card h3,
|
||||||
|
.comparison-card h3,
|
||||||
|
.action-card strong {
|
||||||
|
color: var(--text);
|
||||||
|
font-size: 1rem;
|
||||||
|
margin-bottom: 0.45rem;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-card p,
|
||||||
|
.comparison-card p,
|
||||||
|
.action-card p {
|
||||||
|
color: var(--text-2);
|
||||||
|
font-size: 0.92rem;
|
||||||
|
line-height: 1.7;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.comparison-card h3,
|
||||||
|
.summary-card h3 {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.answer-strip {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||||
|
gap: 0.9rem;
|
||||||
|
margin: 1.1rem 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.answer-strip > div {
|
||||||
|
background: var(--bg-card);
|
||||||
|
border: 1px solid var(--glass-border);
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 0.9rem 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.answer-strip strong {
|
||||||
|
display: block;
|
||||||
|
color: var(--text);
|
||||||
|
font-size: 0.88rem;
|
||||||
|
margin-bottom: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.answer-strip span,
|
||||||
|
.answer-strip a {
|
||||||
|
color: var(--text-2);
|
||||||
|
font-size: 0.88rem;
|
||||||
|
line-height: 1.55;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mini-summary {
|
||||||
|
margin: 0 0 1rem;
|
||||||
|
padding: 0.95rem 1rem;
|
||||||
|
border-radius: 12px;
|
||||||
|
background: linear-gradient(180deg, var(--bg-card), transparent), var(--bg-card);
|
||||||
|
border: 1px solid var(--glass-border);
|
||||||
|
color: var(--text-2);
|
||||||
|
line-height: 1.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mini-summary strong {
|
||||||
|
color: var(--text);
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-card {
|
||||||
|
text-decoration: none;
|
||||||
|
transition: transform 0.2s ease, border-color 0.2s ease, background 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-card:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
border-color: var(--glass-border-hover);
|
||||||
|
background: var(--bg-card-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-label {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
font-size: 0.74rem;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.1em;
|
||||||
|
color: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TOC toggle */
|
||||||
|
.legal-toc-toggle {
|
||||||
|
display: none;
|
||||||
|
width: 100%;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
background: var(--bg-card);
|
||||||
|
border: 1px solid var(--glass-border);
|
||||||
|
color: var(--text);
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 0.95rem 1rem;
|
||||||
|
font: inherit;
|
||||||
|
font-weight: 700;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-toc-panel {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-toc-toggle::after {
|
||||||
|
content: '\25BE';
|
||||||
|
color: var(--accent);
|
||||||
|
font-size: 0.95rem;
|
||||||
|
transition: transform 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-toc-toggle[aria-expanded="true"]::after {
|
||||||
|
transform: rotate(180deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Demo section */
|
||||||
|
.demo {
|
||||||
|
padding: 8rem 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-desc {
|
||||||
|
color: var(--text-muted);
|
||||||
|
margin-bottom: 2.5rem;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.features {
|
||||||
|
padding: 8rem 0;
|
||||||
|
background: var(--bg-alt);
|
||||||
|
}
|
||||||
162
css/navbar.css
Normal file
162
css/navbar.css
Normal file
@@ -0,0 +1,162 @@
|
|||||||
|
/*
|
||||||
|
* Navbar Styles
|
||||||
|
*/
|
||||||
|
|
||||||
|
.navbar {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
background: var(--nav-bg);
|
||||||
|
backdrop-filter: blur(24px);
|
||||||
|
-webkit-backdrop-filter: blur(24px);
|
||||||
|
border-bottom: 1px solid var(--nav-border);
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-container {
|
||||||
|
max-width: 1100px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 0.9rem 2rem;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-logo {
|
||||||
|
font-size: 1.35rem;
|
||||||
|
font-weight: 800;
|
||||||
|
color: var(--text);
|
||||||
|
text-decoration: none;
|
||||||
|
letter-spacing: -0.5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-logo span {
|
||||||
|
color: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-links {
|
||||||
|
display: flex;
|
||||||
|
list-style: none;
|
||||||
|
gap: 2.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-links a {
|
||||||
|
color: var(--text-muted);
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
transition: color 0.2s;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-links a::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
bottom: -4px;
|
||||||
|
left: 0;
|
||||||
|
width: 0;
|
||||||
|
height: 2px;
|
||||||
|
background: var(--accent);
|
||||||
|
border-radius: 2px;
|
||||||
|
transition: width 0.25s ease;
|
||||||
|
box-shadow: 0 0 8px var(--accent-glow);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-links a:hover {
|
||||||
|
color: var(--text);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-links a:hover::after {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-actions {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.theme-toggle {
|
||||||
|
background: var(--bg-card);
|
||||||
|
border: 1px solid var(--glass-border);
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
color: var(--text-muted);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
transition: all 0.2s;
|
||||||
|
width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.theme-toggle:hover {
|
||||||
|
color: var(--accent);
|
||||||
|
border-color: var(--accent-glow);
|
||||||
|
background: var(--bg-card-hover);
|
||||||
|
box-shadow: 0 0 12px var(--accent-glow-sm);
|
||||||
|
}
|
||||||
|
|
||||||
|
.theme-toggle svg {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hamburger {
|
||||||
|
display: none;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 5px;
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hamburger span {
|
||||||
|
display: block;
|
||||||
|
width: 22px;
|
||||||
|
height: 2px;
|
||||||
|
background: var(--text-2);
|
||||||
|
border-radius: 2px;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hamburger.open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
|
||||||
|
.hamburger.open span:nth-child(2) { opacity: 0; transform: scaleX(0); }
|
||||||
|
.hamburger.open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
|
||||||
|
|
||||||
|
.mobile-menu {
|
||||||
|
display: none;
|
||||||
|
flex-direction: column;
|
||||||
|
border-top: 1px solid var(--nav-border);
|
||||||
|
background: var(--nav-bg);
|
||||||
|
backdrop-filter: blur(24px);
|
||||||
|
-webkit-backdrop-filter: blur(24px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.mobile-menu.open {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mobile-menu a {
|
||||||
|
color: var(--text-2);
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: 500;
|
||||||
|
padding: 1rem 2rem;
|
||||||
|
border-bottom: 1px solid var(--divider);
|
||||||
|
transition: all 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mobile-menu a:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mobile-menu a:hover {
|
||||||
|
color: var(--accent);
|
||||||
|
background: var(--bg-card);
|
||||||
|
padding-left: 2.5rem;
|
||||||
|
}
|
||||||
146
css/responsive.css
Normal file
146
css/responsive.css
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
/*
|
||||||
|
* Responsive Styles - Mobile/tablet breakpoints
|
||||||
|
*/
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.nav-links {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hamburger {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero h1 {
|
||||||
|
font-size: 3.5rem;
|
||||||
|
letter-spacing: -2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-subtitle {
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stats-grid {
|
||||||
|
grid-template-columns: repeat(2, 1fr);
|
||||||
|
gap: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.about h2,
|
||||||
|
.section-title {
|
||||||
|
font-size: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-grid {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-inner {
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
gap: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-brand {
|
||||||
|
grid-column: 1 / -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Legal pages */
|
||||||
|
.legal-wrap {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-toc {
|
||||||
|
position: static;
|
||||||
|
background: var(--bg-card);
|
||||||
|
border: 1px solid var(--glass-border);
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 1.25rem 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-toc ul {
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 0.35rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-toc a {
|
||||||
|
border-left: none;
|
||||||
|
border-bottom: 2px solid transparent;
|
||||||
|
padding: 0.3rem 0.5rem;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-toc a:hover,
|
||||||
|
.legal-toc a.active {
|
||||||
|
border-left-color: transparent;
|
||||||
|
border-bottom-color: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.data-table {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-grid,
|
||||||
|
.comparison-grid,
|
||||||
|
.action-grid,
|
||||||
|
.answer-strip {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-toc {
|
||||||
|
padding: 0;
|
||||||
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-toc-toggle {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-toc-panel {
|
||||||
|
display: none;
|
||||||
|
margin-top: 0.75rem;
|
||||||
|
background: var(--bg-card);
|
||||||
|
border: 1px solid var(--glass-border);
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-toc.open .legal-toc-panel {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-toc ul {
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-toc a {
|
||||||
|
border-bottom: none;
|
||||||
|
padding: 0.5rem 0.6rem;
|
||||||
|
font-size: 0.88rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-hero h1 {
|
||||||
|
font-size: 2rem;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 480px) {
|
||||||
|
.hero h1 {
|
||||||
|
font-size: 2.75rem;
|
||||||
|
letter-spacing: -1.5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-cta {
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn,
|
||||||
|
.btn-outline {
|
||||||
|
width: 100%;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
53
css/sections.css
Normal file
53
css/sections.css
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* Generic Section Styles
|
||||||
|
*/
|
||||||
|
|
||||||
|
.section {
|
||||||
|
padding: 6rem 0;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.alt-bg {
|
||||||
|
background: var(--bg-alt);
|
||||||
|
}
|
||||||
|
|
||||||
|
.alt-bg::before,
|
||||||
|
.section::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 5%;
|
||||||
|
right: 5%;
|
||||||
|
height: 1px;
|
||||||
|
background: linear-gradient(90deg, transparent, var(--divider), transparent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-label {
|
||||||
|
font-size: 0.75rem;
|
||||||
|
font-weight: 700;
|
||||||
|
letter-spacing: 0.12em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--accent);
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-title {
|
||||||
|
font-size: 2.5rem;
|
||||||
|
font-weight: 800;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
margin-bottom: 3rem;
|
||||||
|
color: var(--text);
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-title::after {
|
||||||
|
content: '';
|
||||||
|
display: block;
|
||||||
|
width: 36px;
|
||||||
|
height: 3px;
|
||||||
|
background: var(--accent);
|
||||||
|
border-radius: 2px;
|
||||||
|
margin-top: 0.85rem;
|
||||||
|
box-shadow: 0 0 12px var(--accent-glow);
|
||||||
|
}
|
||||||
59
css/stats.css
Normal file
59
css/stats.css
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* Stats Bar Styles
|
||||||
|
*/
|
||||||
|
|
||||||
|
.stats-bar {
|
||||||
|
background: var(--stats-bg);
|
||||||
|
border-top: 1px solid var(--stats-border);
|
||||||
|
border-bottom: 1px solid var(--stats-border);
|
||||||
|
padding: 1.25rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stats-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(4, 1fr);
|
||||||
|
gap: 0.75rem;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.15rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat-value {
|
||||||
|
font-size: 1.6rem;
|
||||||
|
font-weight: 900;
|
||||||
|
color: var(--accent);
|
||||||
|
letter-spacing: -0.5px;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat-label {
|
||||||
|
font-size: 0.75rem;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--text-muted);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.1em;
|
||||||
|
margin-top: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat {
|
||||||
|
animation: statPop 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) both;
|
||||||
|
animation-play-state: paused;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat.animated {
|
||||||
|
animation-play-state: running;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat:nth-child(1) { animation-delay: 0s; }
|
||||||
|
.stat:nth-child(2) { animation-delay: 0.1s; }
|
||||||
|
.stat:nth-child(3) { animation-delay: 0.2s; }
|
||||||
|
.stat:nth-child(4) { animation-delay: 0.3s; }
|
||||||
|
|
||||||
|
@keyframes statPop {
|
||||||
|
from { opacity: 0; transform: translateY(12px) scale(0.9); }
|
||||||
|
to { opacity: 1; transform: translateY(0) scale(1); }
|
||||||
|
}
|
||||||
82
css/themes.css
Normal file
82
css/themes.css
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
/*
|
||||||
|
* Theme Variables - Edit these to create new themes
|
||||||
|
*/
|
||||||
|
|
||||||
|
:root,
|
||||||
|
[data-theme="crimson"] {
|
||||||
|
--bg: #07040a;
|
||||||
|
--bg-alt: #0d070c;
|
||||||
|
--bg-card: rgba(255, 255, 255, 0.04);
|
||||||
|
--bg-card-hover: rgba(255, 255, 255, 0.07);
|
||||||
|
--glass-border: rgba(255, 255, 255, 0.08);
|
||||||
|
--glass-border-hover: rgba(220, 20, 60, 0.45);
|
||||||
|
--accent: #dc143c;
|
||||||
|
--accent-light: #ff1744;
|
||||||
|
--accent-dark: #960f2c;
|
||||||
|
--accent-glow: rgba(220, 20, 60, 0.35);
|
||||||
|
--accent-glow-sm: rgba(220, 20, 60, 0.18);
|
||||||
|
--text: #ffffff;
|
||||||
|
--text-2: #ddd0d4;
|
||||||
|
--text-muted: #8c7a80;
|
||||||
|
--nav-bg: rgba(7, 4, 10, 0.85);
|
||||||
|
--nav-border: rgba(255, 255, 255, 0.06);
|
||||||
|
--stats-bg: rgba(220, 20, 60, 0.07);
|
||||||
|
--stats-border: rgba(220, 20, 60, 0.18);
|
||||||
|
--divider: rgba(255, 255, 255, 0.06);
|
||||||
|
--shadow-deep: rgba(0, 0, 0, 0.6);
|
||||||
|
--inset-shine: rgba(255, 255, 255, 0.04);
|
||||||
|
--hero-glow-1: rgba(220, 20, 60, 0.22);
|
||||||
|
--hero-glow-2: rgba(220, 20, 60, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme="dark"] {
|
||||||
|
--bg: #080808;
|
||||||
|
--bg-alt: #0f0f0f;
|
||||||
|
--bg-card: rgba(255, 255, 255, 0.04);
|
||||||
|
--bg-card-hover: rgba(255, 255, 255, 0.07);
|
||||||
|
--glass-border: rgba(255, 255, 255, 0.08);
|
||||||
|
--glass-border-hover: rgba(255, 255, 255, 0.22);
|
||||||
|
--accent: #dc143c;
|
||||||
|
--accent-light: #ff1744;
|
||||||
|
--accent-dark: #960f2c;
|
||||||
|
--accent-glow: rgba(220, 20, 60, 0.28);
|
||||||
|
--accent-glow-sm: rgba(220, 20, 60, 0.1);
|
||||||
|
--text: #ffffff;
|
||||||
|
--text-2: #c8c8c8;
|
||||||
|
--text-muted: #707070;
|
||||||
|
--nav-bg: rgba(8, 8, 8, 0.88);
|
||||||
|
--nav-border: rgba(255, 255, 255, 0.07);
|
||||||
|
--stats-bg: rgba(255, 255, 255, 0.03);
|
||||||
|
--stats-border: rgba(255, 255, 255, 0.08);
|
||||||
|
--divider: rgba(255, 255, 255, 0.07);
|
||||||
|
--shadow-deep: rgba(0, 0, 0, 0.7);
|
||||||
|
--inset-shine: rgba(255, 255, 255, 0.03);
|
||||||
|
--hero-glow-1: rgba(220, 20, 60, 0.1);
|
||||||
|
--hero-glow-2: rgba(220, 20, 60, 0.04);
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme="light"] {
|
||||||
|
--bg: #f5f4f6;
|
||||||
|
--bg-alt: #eeecef;
|
||||||
|
--bg-card: rgba(255, 255, 255, 0.72);
|
||||||
|
--bg-card-hover: rgba(255, 255, 255, 0.95);
|
||||||
|
--glass-border: rgba(0, 0, 0, 0.08);
|
||||||
|
--glass-border-hover: rgba(192, 18, 48, 0.35);
|
||||||
|
--accent: #c0122e;
|
||||||
|
--accent-light: #e0153a;
|
||||||
|
--accent-dark: #8b0020;
|
||||||
|
--accent-glow: rgba(192, 18, 48, 0.22);
|
||||||
|
--accent-glow-sm: rgba(192, 18, 48, 0.1);
|
||||||
|
--text: #0d0a0e;
|
||||||
|
--text-2: #2e2830;
|
||||||
|
--text-muted: #6a6068;
|
||||||
|
--nav-bg: rgba(245, 244, 246, 0.88);
|
||||||
|
--nav-border: rgba(0, 0, 0, 0.08);
|
||||||
|
--stats-bg: rgba(192, 18, 48, 0.06);
|
||||||
|
--stats-border: rgba(192, 18, 48, 0.16);
|
||||||
|
--divider: rgba(0, 0, 0, 0.07);
|
||||||
|
--shadow-deep: rgba(0, 0, 0, 0.1);
|
||||||
|
--inset-shine: rgba(255, 255, 255, 0.8);
|
||||||
|
--hero-glow-1: rgba(192, 18, 48, 0.12);
|
||||||
|
--hero-glow-2: rgba(192, 18, 48, 0.06);
|
||||||
|
}
|
||||||
92
css/utility.css
Normal file
92
css/utility.css
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
/*
|
||||||
|
* Utility Styles - Back to top, scroll progress, focus states, etc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Back to top button */
|
||||||
|
.back-to-top {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 2rem;
|
||||||
|
right: 2rem;
|
||||||
|
width: 44px;
|
||||||
|
height: 44px;
|
||||||
|
min-width: 44px;
|
||||||
|
min-height: 44px;
|
||||||
|
background: var(--accent);
|
||||||
|
border: none;
|
||||||
|
border-radius: 10px;
|
||||||
|
color: #fff;
|
||||||
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(12px);
|
||||||
|
transition: opacity 0.3s ease, transform 0.3s ease, background 0.2s;
|
||||||
|
pointer-events: none;
|
||||||
|
box-shadow: 0 4px 20px var(--accent-glow);
|
||||||
|
z-index: 900;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-to-top.visible {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-to-top:hover {
|
||||||
|
background: var(--accent-light);
|
||||||
|
transform: translateY(-3px);
|
||||||
|
box-shadow: 0 8px 28px var(--accent-glow);
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-to-top:focus-visible {
|
||||||
|
outline: 2px solid var(--accent-light);
|
||||||
|
outline-offset: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Scroll progress bar */
|
||||||
|
.scroll-progress {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
height: 3px;
|
||||||
|
width: 0%;
|
||||||
|
background: linear-gradient(90deg, var(--accent-dark), var(--accent), var(--accent-light));
|
||||||
|
z-index: 1100;
|
||||||
|
box-shadow: 0 0 10px var(--accent-glow);
|
||||||
|
transition: width 0.08s linear;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Touch targets */
|
||||||
|
.theme-toggle,
|
||||||
|
.hamburger {
|
||||||
|
min-width: 44px;
|
||||||
|
min-height: 44px;
|
||||||
|
width: 44px;
|
||||||
|
height: 44px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.theme-toggle {
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reduced motion */
|
||||||
|
@media (prefers-reduced-motion: reduce) {
|
||||||
|
*,
|
||||||
|
*::before,
|
||||||
|
*::after {
|
||||||
|
animation-duration: 0.01ms !important;
|
||||||
|
animation-iteration-count: 1 !important;
|
||||||
|
transition-duration: 0.01ms !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat {
|
||||||
|
animation: none;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-to-top {
|
||||||
|
transition: opacity 0.01ms;
|
||||||
|
}
|
||||||
|
}
|
||||||
12
favicon.svg
Normal file
12
favicon.svg
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
|
||||||
|
<rect width="100" height="100" rx="22" fill="#07040a"/>
|
||||||
|
<text
|
||||||
|
x="50"
|
||||||
|
y="73"
|
||||||
|
text-anchor="middle"
|
||||||
|
font-family="Inter, 'Segoe UI', system-ui, sans-serif"
|
||||||
|
font-size="64"
|
||||||
|
font-weight="900"
|
||||||
|
fill="#dc143c"
|
||||||
|
letter-spacing="-2">A</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 335 B |
223
index.html
Normal file
223
index.html
Normal file
@@ -0,0 +1,223 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" data-theme="crimson">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>ArcaneNeko | Open Source Software & Services</title>
|
||||||
|
<meta name="description" content="ArcaneNeko builds free, open source software for developers and creators. Git hosting, status pages, Neovoxis, and more.">
|
||||||
|
|
||||||
|
<!-- Open Graph / Social previews -->
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta property="og:url" content="https://arcaneneko.com/">
|
||||||
|
<meta property="og:title" content="ArcaneNeko | Open Source Software & Services">
|
||||||
|
<meta property="og:description" content="Free and open source software for developers and creators. No paywalls, no subscriptions.">
|
||||||
|
<meta property="og:image" content="https://arcaneneko.com/og-image.png">
|
||||||
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
|
<meta name="theme-color" content="#dc143c">
|
||||||
|
|
||||||
|
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
||||||
|
<link rel="stylesheet" href="css/index.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=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<!-- Navbar -->
|
||||||
|
<nav class="navbar" role="navigation" aria-label="Main navigation">
|
||||||
|
<div class="nav-container">
|
||||||
|
<a href="index" class="nav-logo" aria-label="ArcaneNeko home">Arcane<span>Neko</span></a>
|
||||||
|
<ul class="nav-links" role="list">
|
||||||
|
<li><a href="#about">About</a></li>
|
||||||
|
<li><a href="#services">Services</a></li>
|
||||||
|
<li><a href="#projects">Projects</a></li>
|
||||||
|
<li><a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status</a></li>
|
||||||
|
<li><a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="nav-actions">
|
||||||
|
<button class="theme-toggle" id="themeToggle" title="Switch theme" aria-label="Switch theme"></button>
|
||||||
|
<button class="hamburger" id="hamburger" aria-label="Open menu" aria-expanded="false" aria-controls="mobileMenu">
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mobile-menu" id="mobileMenu" role="menu">
|
||||||
|
<a href="#about" role="menuitem">About</a>
|
||||||
|
<a href="#services" role="menuitem">Services</a>
|
||||||
|
<a href="#projects" role="menuitem">Projects</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer" role="menuitem">Status</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" role="menuitem">Neovoxis</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<!-- Hero -->
|
||||||
|
<section class="hero" aria-label="Welcome">
|
||||||
|
<div class="hero-bg" aria-hidden="true"></div>
|
||||||
|
<div class="hero-grid" aria-hidden="true"></div>
|
||||||
|
<div class="hero-content">
|
||||||
|
<div class="hero-tag" aria-hidden="true">Free & Open Source</div>
|
||||||
|
<h1>Arcane<span>Neko</span></h1>
|
||||||
|
<p class="hero-subtitle">Building free, open source tools for developers and creators, no strings attached.</p>
|
||||||
|
<div class="hero-cta">
|
||||||
|
<a href="#projects" class="btn">Explore Projects</a>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer" class="btn-outline">
|
||||||
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><path d="M6 21V9a9 9 0 009 9"/></svg>
|
||||||
|
Git Instance
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Stats bar -->
|
||||||
|
<div class="stats-bar" aria-label="Key facts">
|
||||||
|
<div class="container">
|
||||||
|
<div class="stats-grid">
|
||||||
|
<div class="stat">
|
||||||
|
<span class="stat-value" data-count="100" data-suffix="%">100%</span>
|
||||||
|
<span class="stat-label">Free</span>
|
||||||
|
</div>
|
||||||
|
<div class="stat">
|
||||||
|
<span class="stat-value">Open</span>
|
||||||
|
<span class="stat-label">Source</span>
|
||||||
|
</div>
|
||||||
|
<div class="stat">
|
||||||
|
<span class="stat-value">MIT</span>
|
||||||
|
<span class="stat-label">Licensed</span>
|
||||||
|
</div>
|
||||||
|
<div class="stat">
|
||||||
|
<span class="stat-value" data-count="0">0</span>
|
||||||
|
<span class="stat-label">Paywalls<span style="color:var(--accent)">*</span></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p style="text-align:center;color:var(--text-muted);font-size:0.75rem;margin-top:0.75rem;">* <span style="color:var(--accent)">Neovoxis</span> hosted instance may include paid features. Self-hosted instances include all features free.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- About -->
|
||||||
|
<section id="about" class="about">
|
||||||
|
<div class="container">
|
||||||
|
<div class="about-inner">
|
||||||
|
<span class="about-eyebrow">Who we are</span>
|
||||||
|
<h2>Software for everyone</h2>
|
||||||
|
<p>ArcaneNeko is a small team building free, open source software for developers and the broader tech community. We believe software should be accessible to everyone.</p>
|
||||||
|
<p>From git hosting to status pages and a modern communication platform, every project we ship is open for anyone to use, contribute to, or self-host.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Services -->
|
||||||
|
<section id="services" class="section" aria-labelledby="services-heading">
|
||||||
|
<div class="container">
|
||||||
|
<span class="section-label" aria-hidden="true">Services</span>
|
||||||
|
<h2 class="section-title" id="services-heading">What we offer</h2>
|
||||||
|
<div class="card-grid">
|
||||||
|
|
||||||
|
<div class="card reveal">
|
||||||
|
<div class="card-icon" aria-hidden="true">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/>
|
||||||
|
<path d="M6 21V9a9 9 0 009 9"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3>Git Hosting</h3>
|
||||||
|
<p>Free and open git hosting powered by Gitea at git.arcaneneko.com. Open to everyone - create repos, collaborate, and host your code with no limits.</p>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer" class="card-link">Visit Git Instance →</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card reveal">
|
||||||
|
<div class="card-icon" aria-hidden="true">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3>Arcane Status</h3>
|
||||||
|
<p>Free status page software under MIT License. Monitor your services and keep users informed with a clean, minimal status page you can self-host.</p>
|
||||||
|
<a href="status" class="card-link">Learn More →</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Projects -->
|
||||||
|
<section id="projects" class="section alt-bg" aria-labelledby="projects-heading">
|
||||||
|
<div class="container">
|
||||||
|
<span class="section-label" aria-hidden="true">Projects</span>
|
||||||
|
<h2 class="section-title" id="projects-heading">What we're building</h2>
|
||||||
|
<div class="card-grid">
|
||||||
|
|
||||||
|
<div class="card reveal">
|
||||||
|
<span class="badge">Early Preview</span>
|
||||||
|
<div class="card-icon" aria-hidden="true">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3>Neovoxis</h3>
|
||||||
|
<p>A modern Discord-like chat platform with text channels, forums, and a clean interface. Currently in early preview with active development ongoing.</p>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" class="btn-outline">Visit Neovoxis</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card reveal">
|
||||||
|
<span class="badge">MIT License</span>
|
||||||
|
<div class="card-icon" aria-hidden="true">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3>Arcane Status</h3>
|
||||||
|
<p>Free and open source status page software. Minimal setup, easy to customize, and ready to deploy. Keep your users informed about service health.</p>
|
||||||
|
<a href="status" class="btn-outline">View Details</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Footer -->
|
||||||
|
<footer class="footer" role="contentinfo">
|
||||||
|
<div class="container">
|
||||||
|
<div class="footer-inner">
|
||||||
|
<div class="footer-brand">
|
||||||
|
<a href="index" class="footer-logo">Arcane<span>Neko</span></a>
|
||||||
|
<p>Free open source software for developers and creators.</p>
|
||||||
|
<div class="footer-community" aria-label="Community links">
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" title="Join us on Neovoxis" aria-label="Join the ArcaneNeko community on Neovoxis">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>
|
||||||
|
</a>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer" title="Git Instance" aria-label="Visit our Git instance">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><path d="M6 21V9a9 9 0 009 9"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Services</h4>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer">Git Instance</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status Page</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a>
|
||||||
|
<a href="status">Arcane Status</a>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Legal</h4>
|
||||||
|
<a href="privacy">Privacy Policy</a>
|
||||||
|
<a href="terms">Terms of Service</a>
|
||||||
|
<a href="contact">Contact Us</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-bottom">
|
||||||
|
<p>© 2026 ArcaneNeko. All rights reserved.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<!-- Back to top -->
|
||||||
|
<button class="back-to-top" id="backToTop" aria-label="Back to top">
|
||||||
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="18 15 12 9 6 15"/></svg>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<script src="js/theme.js"></script>
|
||||||
|
<script src="js/main.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
230
js/main.js
Normal file
230
js/main.js
Normal file
@@ -0,0 +1,230 @@
|
|||||||
|
/**
|
||||||
|
* ArcaneNeko Website - Main Initialization
|
||||||
|
*
|
||||||
|
* Handles: mobile menu, scroll reveal, stat counters,
|
||||||
|
* back-to-top, scroll progress, smooth scroll
|
||||||
|
*/
|
||||||
|
|
||||||
|
// ----------------------
|
||||||
|
// Mobile Hamburger Menu
|
||||||
|
// ----------------------
|
||||||
|
function initMobileMenu() {
|
||||||
|
const hamburger = document.getElementById('hamburger');
|
||||||
|
const mobileMenu = document.getElementById('mobileMenu');
|
||||||
|
if (!hamburger || !mobileMenu) return;
|
||||||
|
|
||||||
|
hamburger.addEventListener('click', () => {
|
||||||
|
const open = hamburger.classList.toggle('open');
|
||||||
|
mobileMenu.classList.toggle('open', open);
|
||||||
|
hamburger.setAttribute('aria-expanded', String(open));
|
||||||
|
});
|
||||||
|
|
||||||
|
mobileMenu.querySelectorAll('a').forEach(link => {
|
||||||
|
link.addEventListener('click', () => {
|
||||||
|
hamburger.classList.remove('open');
|
||||||
|
mobileMenu.classList.remove('open');
|
||||||
|
hamburger.setAttribute('aria-expanded', 'false');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------
|
||||||
|
// Scroll Reveal (cards)
|
||||||
|
// ----------------------
|
||||||
|
function initScrollReveal() {
|
||||||
|
const observer = new IntersectionObserver(entries => {
|
||||||
|
entries.forEach(entry => {
|
||||||
|
if (entry.isIntersecting) {
|
||||||
|
entry.target.classList.add('visible');
|
||||||
|
observer.unobserve(entry.target);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, { threshold: 0.1 });
|
||||||
|
|
||||||
|
document.querySelectorAll('.reveal').forEach(el => observer.observe(el));
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------
|
||||||
|
// Stat Counter Animation
|
||||||
|
// ----------------------
|
||||||
|
function animateCount(el, target, suffix, duration) {
|
||||||
|
const start = performance.now();
|
||||||
|
const from = 0;
|
||||||
|
|
||||||
|
function step(now) {
|
||||||
|
const elapsed = now - start;
|
||||||
|
const progress = Math.min(elapsed / duration, 1);
|
||||||
|
const eased = 1 - Math.pow(1 - progress, 3);
|
||||||
|
const current = Math.round(from + (target - from) * eased);
|
||||||
|
el.textContent = current + suffix;
|
||||||
|
if (progress < 1) requestAnimationFrame(step);
|
||||||
|
}
|
||||||
|
requestAnimationFrame(step);
|
||||||
|
}
|
||||||
|
|
||||||
|
function initStatCounters() {
|
||||||
|
const statsBar = document.querySelector('.stats-bar');
|
||||||
|
if (!statsBar) return;
|
||||||
|
|
||||||
|
const observer = new IntersectionObserver(entries => {
|
||||||
|
if (!entries[0].isIntersecting) return;
|
||||||
|
observer.disconnect();
|
||||||
|
|
||||||
|
document.querySelectorAll('.stat').forEach(el => el.classList.add('animated'));
|
||||||
|
|
||||||
|
document.querySelectorAll('.stat-value[data-count]').forEach(el => {
|
||||||
|
const target = parseFloat(el.dataset.count);
|
||||||
|
const suffix = el.dataset.suffix || '';
|
||||||
|
const duration = 1400;
|
||||||
|
animateCount(el, target, suffix, duration);
|
||||||
|
});
|
||||||
|
|
||||||
|
}, { threshold: 0.5 });
|
||||||
|
|
||||||
|
observer.observe(statsBar);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------
|
||||||
|
// Back to Top Button
|
||||||
|
// ----------------------
|
||||||
|
function initBackToTop() {
|
||||||
|
const btn = document.getElementById('backToTop');
|
||||||
|
if (!btn) return;
|
||||||
|
|
||||||
|
window.addEventListener('scroll', () => {
|
||||||
|
btn.classList.toggle('visible', window.scrollY > 450);
|
||||||
|
}, { passive: true });
|
||||||
|
|
||||||
|
btn.addEventListener('click', () => {
|
||||||
|
window.scrollTo({ top: 0, behavior: 'smooth' });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------
|
||||||
|
// Scroll Progress Bar (legal pages)
|
||||||
|
// ----------------------
|
||||||
|
function initScrollProgress() {
|
||||||
|
const bar = document.getElementById('scrollProgress');
|
||||||
|
if (!bar) return;
|
||||||
|
|
||||||
|
const updateProgress = () => {
|
||||||
|
const total = document.documentElement.scrollHeight - window.innerHeight;
|
||||||
|
const progress = total > 0 ? (window.scrollY / total) * 100 : 0;
|
||||||
|
const rounded = Math.round(progress);
|
||||||
|
bar.style.width = progress + '%';
|
||||||
|
bar.setAttribute('aria-valuenow', String(rounded));
|
||||||
|
};
|
||||||
|
|
||||||
|
updateProgress();
|
||||||
|
window.addEventListener('scroll', updateProgress, { passive: true });
|
||||||
|
window.addEventListener('resize', updateProgress);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------
|
||||||
|
// Navbar scroll shadow
|
||||||
|
// ----------------------
|
||||||
|
function initNavShadow() {
|
||||||
|
const navbar = document.querySelector('.navbar');
|
||||||
|
if (!navbar) return;
|
||||||
|
window.addEventListener('scroll', () => {
|
||||||
|
navbar.style.boxShadow = window.scrollY > 10
|
||||||
|
? '0 4px 24px rgba(0,0,0,0.3)'
|
||||||
|
: 'none';
|
||||||
|
}, { passive: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------
|
||||||
|
// Smooth scroll (hash links)
|
||||||
|
// ----------------------
|
||||||
|
function initSmoothScroll() {
|
||||||
|
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
||||||
|
anchor.addEventListener('click', e => {
|
||||||
|
const href = anchor.getAttribute('href');
|
||||||
|
if (href === '#') return;
|
||||||
|
const target = document.querySelector(href);
|
||||||
|
if (target) {
|
||||||
|
e.preventDefault();
|
||||||
|
const offset = 80;
|
||||||
|
window.scrollTo({
|
||||||
|
top: target.getBoundingClientRect().top + window.scrollY - offset,
|
||||||
|
behavior: 'smooth'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------
|
||||||
|
// Legal page TOC highlight
|
||||||
|
// ----------------------
|
||||||
|
function initTocHighlight() {
|
||||||
|
const sections = document.querySelectorAll('.legal-section');
|
||||||
|
const tocLinks = document.querySelectorAll('.legal-toc a');
|
||||||
|
if (!sections.length || !tocLinks.length) return;
|
||||||
|
|
||||||
|
const observer = new IntersectionObserver(entries => {
|
||||||
|
entries.forEach(entry => {
|
||||||
|
if (entry.isIntersecting) {
|
||||||
|
tocLinks.forEach(l => l.classList.remove('active'));
|
||||||
|
const active = document.querySelector(`.legal-toc a[href="#${entry.target.id}"]`);
|
||||||
|
if (active) active.classList.add('active');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, { rootMargin: '-20% 0px -70% 0px' });
|
||||||
|
|
||||||
|
sections.forEach(s => observer.observe(s));
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------
|
||||||
|
// Legal page mobile TOC
|
||||||
|
// ----------------------
|
||||||
|
function initLegalTocToggle() {
|
||||||
|
document.querySelectorAll('.legal-toc').forEach(toc => {
|
||||||
|
const button = toc.querySelector('.legal-toc-toggle');
|
||||||
|
const panel = toc.querySelector('.legal-toc-panel');
|
||||||
|
if (!button || !panel) return;
|
||||||
|
|
||||||
|
button.addEventListener('click', () => {
|
||||||
|
const open = toc.classList.toggle('open');
|
||||||
|
button.setAttribute('aria-expanded', String(open));
|
||||||
|
});
|
||||||
|
|
||||||
|
panel.querySelectorAll('a').forEach(link => {
|
||||||
|
link.addEventListener('click', () => {
|
||||||
|
if (window.innerWidth <= 768) {
|
||||||
|
toc.classList.remove('open');
|
||||||
|
button.setAttribute('aria-expanded', 'false');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------
|
||||||
|
// Init on DOM ready
|
||||||
|
// ----------------------
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
// Apply saved theme before anything renders
|
||||||
|
if (window.ThemeUtils) {
|
||||||
|
window.ThemeUtils.applyTheme(window.ThemeUtils.getCurrentTheme());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Theme toggle
|
||||||
|
document.querySelectorAll('.theme-toggle').forEach(btn => {
|
||||||
|
btn.addEventListener('click', () => {
|
||||||
|
if (window.ThemeUtils) {
|
||||||
|
window.ThemeUtils.applyTheme(window.ThemeUtils.nextTheme());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
initMobileMenu();
|
||||||
|
initScrollReveal();
|
||||||
|
initStatCounters();
|
||||||
|
initBackToTop();
|
||||||
|
initScrollProgress();
|
||||||
|
initNavShadow();
|
||||||
|
initSmoothScroll();
|
||||||
|
initTocHighlight();
|
||||||
|
initLegalTocToggle();
|
||||||
|
});
|
||||||
44
js/theme.js
Normal file
44
js/theme.js
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
/**
|
||||||
|
* Theme Switcher Utility
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Theme configuration
|
||||||
|
const THEMES = ['crimson', 'dark', 'light'];
|
||||||
|
|
||||||
|
const THEME_ICONS = {
|
||||||
|
crimson: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>`,
|
||||||
|
dark: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg>`,
|
||||||
|
light: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="16" height="16" aria-hidden="true"><path d="M12 2c0 0-4 4-4 8a4 4 0 0 0 8 0c0-4-4-8-4-8z"/></svg>`,
|
||||||
|
};
|
||||||
|
|
||||||
|
const THEME_LABELS = {
|
||||||
|
crimson: 'Switch to dark mode',
|
||||||
|
dark: 'Switch to light mode',
|
||||||
|
light: 'Switch to crimson theme',
|
||||||
|
};
|
||||||
|
|
||||||
|
let currentTheme = localStorage.getItem('an-theme') || 'crimson';
|
||||||
|
|
||||||
|
function applyTheme(theme) {
|
||||||
|
document.documentElement.setAttribute('data-theme', theme);
|
||||||
|
document.querySelectorAll('.theme-toggle').forEach(btn => {
|
||||||
|
btn.innerHTML = THEME_ICONS[theme];
|
||||||
|
btn.setAttribute('title', THEME_LABELS[theme]);
|
||||||
|
btn.setAttribute('aria-label', THEME_LABELS[theme]);
|
||||||
|
});
|
||||||
|
localStorage.setItem('an-theme', theme);
|
||||||
|
currentTheme = theme;
|
||||||
|
}
|
||||||
|
|
||||||
|
function nextTheme() {
|
||||||
|
const idx = THEMES.indexOf(currentTheme);
|
||||||
|
return THEMES[(idx + 1) % THEMES.length];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Export for use in other files
|
||||||
|
window.ThemeUtils = {
|
||||||
|
THEMES,
|
||||||
|
applyTheme,
|
||||||
|
nextTheme,
|
||||||
|
getCurrentTheme: () => currentTheme,
|
||||||
|
};
|
||||||
519
privacy.html
Normal file
519
privacy.html
Normal file
@@ -0,0 +1,519 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<html data-theme="crimson" lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8"/>
|
||||||
|
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
|
||||||
|
<title>Privacy Policy | ArcaneNeko</title>
|
||||||
|
<meta content="ArcaneNeko Privacy Policy, how we handle your data across all our services." name="description"/>
|
||||||
|
<meta content="website" property="og:type"/>
|
||||||
|
<meta content="https://arcaneneko.com/privacy.html" property="og:url"/>
|
||||||
|
<meta content="Privacy Policy | ArcaneNeko" property="og:title"/>
|
||||||
|
<meta content="How ArcaneNeko handles your data across all services, plain English, GDPR compliant." property="og:description"/>
|
||||||
|
<meta content="https://arcaneneko.com/og-image.png" property="og:image"/>
|
||||||
|
<meta content="#dc143c" name="theme-color"/>
|
||||||
|
<link href="favicon.svg" rel="icon" type="image/svg+xml"/>
|
||||||
|
<link href="css/index.css" rel="stylesheet"/>
|
||||||
|
<link href="https://fonts.googleapis.com" rel="preconnect"/>
|
||||||
|
<link crossorigin="" href="https://fonts.gstatic.com" rel="preconnect"/>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet"/>
|
||||||
|
</head>
|
||||||
|
<body><a class="skip-link" href="#mainContent">Skip to main content</a>
|
||||||
|
<!-- Scroll progress bar (legal pages) -->
|
||||||
|
<div aria-label="Reading progress" aria-valuemax="100" aria-valuemin="0" aria-valuenow="0" class="scroll-progress" id="scrollProgress" role="progressbar"></div>
|
||||||
|
<!-- Navbar -->
|
||||||
|
<nav aria-label="Main navigation" class="navbar" role="navigation">
|
||||||
|
<div class="nav-container">
|
||||||
|
<a aria-label="ArcaneNeko home" class="nav-logo" href="#">Arcane<span>Neko</span></a>
|
||||||
|
<ul class="nav-links" role="list">
|
||||||
|
<li><a href="index#about">About</a></li>
|
||||||
|
<li><a href="index#services">Services</a></li>
|
||||||
|
<li><a href="index#projects">Projects</a></li>
|
||||||
|
<li><a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status</a></li>
|
||||||
|
<li><a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="nav-actions">
|
||||||
|
<button aria-label="Switch theme" class="theme-toggle" id="themeToggle" title="Switch theme"></button>
|
||||||
|
<button aria-controls="mobileMenu" aria-expanded="false" aria-label="Open menu" class="hamburger" id="hamburger">
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mobile-menu" id="mobileMenu" role="menu">
|
||||||
|
<a href="index#about" role="menuitem">About</a>
|
||||||
|
<a href="index#services" role="menuitem">Services</a>
|
||||||
|
<a href="index#projects" role="menuitem">Projects</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer" role="menuitem">Status</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" role="menuitem">Neovoxis</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<!-- Hero -->
|
||||||
|
<div class="legal-hero">
|
||||||
|
<div class="legal-tag">Legal</div>
|
||||||
|
<h1>Privacy <span>Policy</span></h1>
|
||||||
|
<p class="legal-meta">Last updated: April 2026 · Applies to all ArcaneNeko services</p>
|
||||||
|
</div>
|
||||||
|
<!-- Content -->
|
||||||
|
<div class="legal-wrap">
|
||||||
|
<!-- Table of Contents -->
|
||||||
|
<aside class="legal-toc" id="legalToc"><button aria-controls="privacyTocPanel" aria-expanded="false" class="legal-toc-toggle" type="button">Contents</button><div class="legal-toc-panel" id="privacyTocPanel"><ul>
|
||||||
|
<li><a href="#intro">Introduction</a></li>
|
||||||
|
<li><a href="#who-we-are">Who we are</a></li>
|
||||||
|
<li><a href="#website">Main Website & Arcane Status</a></li>
|
||||||
|
<li><a href="#git">Git Hosting</a></li>
|
||||||
|
<li><a href="#neovoxis">Neovoxis</a></li>
|
||||||
|
<li><a href="#encryption">Encryption & Security</a></li>
|
||||||
|
<li><a href="#sharing">Data Sharing</a></li>
|
||||||
|
<li><a href="#retention">Data Retention</a></li>
|
||||||
|
<li><a href="#cookies">Cookies</a></li>
|
||||||
|
<li><a href="#your-rights">Your Rights</a></li>
|
||||||
|
<li><a href="#transfers">International Transfers</a></li>
|
||||||
|
<li><a href="#contact">Contact & Complaints</a></li>
|
||||||
|
<li><a href="#changes">Changes to this Policy</a></li>
|
||||||
|
</ul></div></aside>
|
||||||
|
<!-- Main content -->
|
||||||
|
<article class="legal-content" id="mainContent">
|
||||||
|
<!-- Introduction -->
|
||||||
|
<section class="legal-section" id="intro">
|
||||||
|
<h2><span class="section-num">01</span> Introduction</h2>
|
||||||
|
<p>This Privacy Policy explains what personal data ArcaneNeko collects, why we collect it, and how we use it. We've written this in plain English, no dense legal walls of text. If something isn't clear, please get in touch.</p>
|
||||||
|
<p>We are based in the United Kingdom and our services are available globally. We operate in compliance with the <strong>UK GDPR</strong> and, where applicable, the <strong>EU GDPR</strong>. Both laws give you strong rights over your personal data, which are explained in the <a href="#your-rights">Your Rights</a> section.</p>
|
||||||
|
<div class="callout callout--info">
|
||||||
|
<p class="callout-title">Our approach</p>
|
||||||
|
<p>We believe in collecting as little data as possible and being transparent about what we do collect. We don't sell your data, we don't run ads, and we never will.</p>
|
||||||
|
</div>
|
||||||
|
<div class="answer-strip">
|
||||||
|
<div><strong>What this page answers</strong><span>What we collect, why, how long we keep it, and your rights</span></div>
|
||||||
|
<div><strong>What we don't do</strong><span>Sell data, run ads, or use third-party analytics scripts on the main site</span></div>
|
||||||
|
<div><strong>Questions?</strong><span><a href="#contact">Jump to contact options</a></span></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
<section aria-labelledby="privacy-glance-title" class="legal-at-a-glance reveal">
|
||||||
|
<div class="section-kicker">Quick read</div>
|
||||||
|
<h2 id="privacy-glance-title">At a glance</h2>
|
||||||
|
<div class="summary-grid">
|
||||||
|
<div class="summary-card"><h3>We keep collection minimal</h3><p>We collect only what we need to run the service, secure it, and support your account.</p></div>
|
||||||
|
<div class="summary-card"><h3>We do not sell data</h3><p>No ads, no data selling, and no marketing trackers across the services described here.</p></div>
|
||||||
|
<div class="summary-card"><h3>Different services collect different things</h3><p>The main site logs basic server data, while accounts and hosted content only exist on the services that need them.</p></div>
|
||||||
|
<div class="summary-card"><h3>DMs are different</h3><p>Neovoxis direct messages are end-to-end encrypted, so ArcaneNeko cannot read their content.</p></div>
|
||||||
|
<div class="summary-card"><h3>You have rights</h3><p>You can ask for access, correction, deletion, or restriction depending on the law that applies to you.</p></div>
|
||||||
|
<div class="summary-card"><h3>Questions are easy to route</h3><p>Use the contact options near the end of the page for privacy, support, abuse, or security concerns.</p></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section aria-labelledby="service-differences-title" class="legal-overview reveal">
|
||||||
|
<div class="section-kicker">Compare services</div>
|
||||||
|
<h2 id="service-differences-title">What each service collects</h2>
|
||||||
|
<div class="comparison-grid">
|
||||||
|
<div class="comparison-card"><h3>Main website & Arcane Status</h3><p>Basic server logs like IP address, browser details, pages visited, timestamps, and referrers. No accounts. No analytics scripts.</p></div>
|
||||||
|
<div class="comparison-card"><h3>Git hosting</h3><p>Account details, repository content, SSH/GPG keys if you add them, and security logs needed to run the service.</p></div>
|
||||||
|
<div class="comparison-card"><h3>Neovoxis</h3><p>Account details, server content, media, and security logs. Direct messages are end-to-end encrypted and not readable by ArcaneNeko.</p></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Who we are -->
|
||||||
|
<section class="legal-section" id="who-we-are">
|
||||||
|
<h2><span class="section-num">02</span> Who We Are</h2>
|
||||||
|
<p>The data controller for all ArcaneNeko services is <strong>ArcaneNeko</strong>, a software team based in the United Kingdom.</p>
|
||||||
|
<p>If you have any privacy-related questions or requests, contact us at: <a href="mailto:legal@arcaneneko.com">legal@arcaneneko.com</a></p>
|
||||||
|
<h3>Services covered by this policy</h3>
|
||||||
|
<ul>
|
||||||
|
<li><strong>arcaneneko.com</strong> - our main website</li>
|
||||||
|
<li><strong>git.arcaneneko.com</strong> - our Gitea-powered git hosting service</li>
|
||||||
|
<li><strong>Arcane Status</strong> - our open source status page software and hosted instance</li>
|
||||||
|
<li><strong>neovoxis.com</strong> - our chat and community platform</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<!-- Main website & Arcane Status -->
|
||||||
|
<section class="legal-section" id="website">
|
||||||
|
<h2><span class="section-num">03</span> Main Website & Arcane Status</h2>
|
||||||
|
<p>When you visit <strong>arcaneneko.com</strong> or the <strong>Arcane Status</strong> instance at status.arcaneneko.com, we collect only the data that any web server automatically logs. There are no user accounts, no marketing tracking, and no third-party analytics scripts.</p>
|
||||||
|
<h3>What we collect</h3>
|
||||||
|
<table class="data-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Data</th>
|
||||||
|
<th>Why</th>
|
||||||
|
<th>Legal basis</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>IP address</td>
|
||||||
|
<td>Security, abuse prevention, diagnosing server errors</td>
|
||||||
|
<td>Legitimate interests</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Browser type & version</td>
|
||||||
|
<td>Ensuring the site works correctly across browsers</td>
|
||||||
|
<td>Legitimate interests</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Operating system</td>
|
||||||
|
<td>Compatibility testing and debugging</td>
|
||||||
|
<td>Legitimate interests</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Pages visited & timestamps</td>
|
||||||
|
<td>Understanding usage, debugging errors</td>
|
||||||
|
<td>Legitimate interests</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Referring URL</td>
|
||||||
|
<td>Understanding where visitors come from</td>
|
||||||
|
<td>Legitimate interests</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<p>This data is held in standard server access logs and is not linked to any personal account. It is typically retained for up to 30 days and then deleted.</p>
|
||||||
|
<div class="callout callout--info">
|
||||||
|
<p class="callout-title">Note on Arcane Status software</p>
|
||||||
|
<p>Arcane Status is open source software distributed under the MIT License. When you self-host it, <strong>you</strong> become the data controller for your own instance. This policy only applies to our hosted instance at status.arcaneneko.com.</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!-- Git hosting -->
|
||||||
|
<section class="legal-section" id="git">
|
||||||
|
<h2><span class="section-num">04</span> Git Hosting (git.arcaneneko.com)</h2><div class="mini-summary"><strong>In short:</strong> Git hosting needs account information and repository data to work. Public repositories are public, and private repositories stay private unless you choose otherwise.</div>
|
||||||
|
<p>Our git hosting service is powered by <strong>Gitea</strong> and allows anyone to create a free account to host repositories, file issues, and collaborate on code.</p>
|
||||||
|
<h3>What we collect</h3>
|
||||||
|
<table class="data-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Data</th>
|
||||||
|
<th>Why</th>
|
||||||
|
<th>Legal basis</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>Username</td>
|
||||||
|
<td>Identifies your account and is shown publicly</td>
|
||||||
|
<td>Contractual necessity</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Email address</td>
|
||||||
|
<td>Account login, password resets, git commit attribution</td>
|
||||||
|
<td>Contractual necessity</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Display name</td>
|
||||||
|
<td>Shown on your profile and contributions</td>
|
||||||
|
<td>Contractual necessity</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Password (hashed)</td>
|
||||||
|
<td>Account authentication. We never store your plain password, only a secure one-way hash (bcrypt).</td>
|
||||||
|
<td>Contractual necessity</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>SSH / GPG keys</td>
|
||||||
|
<td>Secure access to repositories (only if you add them)</td>
|
||||||
|
<td>Contractual necessity</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Repository content</td>
|
||||||
|
<td>Storing and serving your code, issues, and comments</td>
|
||||||
|
<td>Contractual necessity</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>IP address & server logs</td>
|
||||||
|
<td>Security, abuse prevention, debugging</td>
|
||||||
|
<td>Legitimate interests</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<h3>Public vs private repositories</h3>
|
||||||
|
<p>Content in <strong>public repositories</strong> (code, commits, issues, comments) is visible to anyone. If you want your code to remain private, use a private repository. Please be mindful about what information you include in commits, as commit history is permanent and public once pushed to a public repo.</p>
|
||||||
|
<h3>Account deletion</h3>
|
||||||
|
<p>You can delete your account at any time through your account settings. Your account data is deleted within 30 days. Note that commits attributed to your email in other users' repositories may remain, as removing them would alter repository history.</p>
|
||||||
|
</section>
|
||||||
|
<!-- Neovoxis -->
|
||||||
|
<section class="legal-section" id="neovoxis">
|
||||||
|
<h2><span class="section-num">05</span> Neovoxis (neovoxis.com)</h2><div class="mini-summary"><strong>In short:</strong> Neovoxis needs account and platform data to function, but direct messages are end-to-end encrypted and unreadable by ArcaneNeko.</div>
|
||||||
|
<p>Neovoxis is our chat and community platform, currently in early preview. We've designed it with privacy in mind, particularly for private conversations.</p>
|
||||||
|
<h3>What we collect</h3>
|
||||||
|
<table class="data-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Data</th>
|
||||||
|
<th>Why</th>
|
||||||
|
<th>Legal basis</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>Username</td>
|
||||||
|
<td>Identifies you on the platform</td>
|
||||||
|
<td>Contractual necessity</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Email address</td>
|
||||||
|
<td>Account creation, login, and password resets</td>
|
||||||
|
<td>Contractual necessity</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Password (hashed)</td>
|
||||||
|
<td>Account authentication. Stored as a secure hash only.</td>
|
||||||
|
<td>Contractual necessity</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Server messages & content</td>
|
||||||
|
<td>Delivering messages to other users; stored encrypted at rest</td>
|
||||||
|
<td>Contractual necessity</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Direct messages (DMs)</td>
|
||||||
|
<td>Private conversations between users. <strong>End-to-end encrypted</strong>, we cannot read these.</td>
|
||||||
|
<td>Contractual necessity</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Media & file uploads</td>
|
||||||
|
<td>Serving uploaded files to recipients; stored encrypted at rest</td>
|
||||||
|
<td>Contractual necessity</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>IP address</td>
|
||||||
|
<td>Security, abuse prevention, rate limiting</td>
|
||||||
|
<td>Legitimate interests</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Device & browser information</td>
|
||||||
|
<td>Understanding what platforms our users are on, so we can prioritise compatibility and development</td>
|
||||||
|
<td>Legitimate interests</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="callout callout--lock">
|
||||||
|
<p class="callout-title">End-to-end encrypted direct messages</p>
|
||||||
|
<p>Direct Messages (DMs) on Neovoxis are <strong>end-to-end encrypted</strong>. This means only you and the person you're messaging can read them. ArcaneNeko cannot access the content of your DMs, not now, not ever. Even if we were compelled by law, we would be technically unable to hand over DM content.</p>
|
||||||
|
</div>
|
||||||
|
<div class="callout callout--info">
|
||||||
|
<p class="callout-title">Server messages & media</p>
|
||||||
|
<p>Messages sent in servers (channels) and all uploaded media are <strong>encrypted at rest</strong> on our servers. Unlike DMs, these are not end-to-end encrypted, we hold the encryption keys, which are needed to deliver messages to all members. This is consistent with how similar platforms work.</p>
|
||||||
|
</div>
|
||||||
|
<h3>Future data collection</h3>
|
||||||
|
<p>Neovoxis is actively being developed. We may collect additional data in the future as new features are added. We will always update this Privacy Policy and notify users before doing so. Our commitment is to collect only what is genuinely necessary for the service.</p>
|
||||||
|
<h3>Account deletion</h3>
|
||||||
|
<p>You can request account deletion at any time. Your account, profile data, and server messages will be deleted within 30 days. Due to the nature of E2EE, your DM cryptographic keys are deleted, rendering encrypted DM content permanently inaccessible.</p>
|
||||||
|
</section>
|
||||||
|
<!-- Encryption -->
|
||||||
|
<section class="legal-section" id="encryption">
|
||||||
|
<h2><span class="section-num">06</span> Encryption & Security</h2>
|
||||||
|
<p>We take the security of your data seriously. Here's a summary of our encryption approach:</p>
|
||||||
|
<table class="data-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Service</th>
|
||||||
|
<th>Encryption</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>All services</td>
|
||||||
|
<td>HTTPS (TLS) in transit for all web traffic</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Passwords</td>
|
||||||
|
<td>Never stored in plain text, hashed using bcrypt</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Neovoxis DMs</td>
|
||||||
|
<td>End-to-end encrypted. We cannot read them.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Neovoxis server messages</td>
|
||||||
|
<td>Encrypted at rest on our servers</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Media & file uploads</td>
|
||||||
|
<td>Encrypted at rest on our servers</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<p>Despite our best efforts, no system is 100% secure. If you discover a security vulnerability, please contact us responsibly at <a href="mailto:security@arcaneneko.com">security@arcaneneko.com</a> before disclosing it publicly.</p>
|
||||||
|
</section>
|
||||||
|
<!-- Sharing -->
|
||||||
|
<section class="legal-section" id="sharing">
|
||||||
|
<h2><span class="section-num">07</span> Data Sharing</h2><div class="mini-summary"><strong>In short:</strong> We do not sell your data. Sharing only happens for infrastructure, legal obligations, or because you posted something publicly yourself.</div>
|
||||||
|
<p>We do not sell, rent, or trade your personal data. We do not share it with third parties for advertising or marketing purposes.</p>
|
||||||
|
<h3>When we may share data</h3>
|
||||||
|
<ul>
|
||||||
|
<li><strong>Legal obligations:</strong> If we receive a lawful request from UK or EU law enforcement authorities (e.g. a court order or warrant), we may be required to disclose certain data. We will challenge any requests we believe to be unlawful or disproportionate. Note that for DMs, we cannot comply even if compelled, as we don't hold the keys.</li>
|
||||||
|
<li><strong>Service providers:</strong> We may use third-party services to help run our infrastructure (e.g. hosting providers). These providers act as data processors under contract and are only permitted to use your data to provide the service to us.</li>
|
||||||
|
<li><strong>Your own actions:</strong> Content you post publicly (e.g. in public git repositories or public Neovoxis servers) is visible to anyone by design.</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<!-- Retention -->
|
||||||
|
<section class="legal-section" id="retention">
|
||||||
|
<h2><span class="section-num">08</span> Data Retention</h2><div class="mini-summary"><strong>In short:</strong> We keep data only as long as needed for the service, account recovery, deletion processing, and backups.</div>
|
||||||
|
<p>We keep your data only for as long as it's needed:</p>
|
||||||
|
<table class="data-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Data type</th>
|
||||||
|
<th>How long we keep it</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>Server access logs</td>
|
||||||
|
<td>Up to 30 days</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Git account data</td>
|
||||||
|
<td>Until you delete your account, then within 30 days</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Neovoxis account data</td>
|
||||||
|
<td>Until you delete your account, then within 30 days</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Neovoxis messages & media</td>
|
||||||
|
<td>Until deleted by you or upon account deletion (within 30 days)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Backup copies</td>
|
||||||
|
<td>May persist in encrypted backups for up to 90 days after deletion</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
<!-- Cookies -->
|
||||||
|
<section class="legal-section" id="cookies">
|
||||||
|
<h2><span class="section-num">09</span> Cookies</h2>
|
||||||
|
<p>We use cookies and similar browser storage (<code>localStorage</code>) only where strictly necessary:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>Session cookies:</strong> Used by our git and Neovoxis services to keep you logged in. These expire when you log out or close your browser.</li>
|
||||||
|
<li><strong>Theme preference:</strong> We store your chosen colour theme (crimson/dark/light) in your browser's <code>localStorage</code>. This never leaves your device.</li>
|
||||||
|
</ul>
|
||||||
|
<p>We do not use advertising cookies, third-party tracking cookies, or analytics cookies. No cookie consent banner is needed for strictly necessary cookies under UK/EU law.</p>
|
||||||
|
</section>
|
||||||
|
<!-- Your rights -->
|
||||||
|
<section class="legal-section" id="your-rights">
|
||||||
|
<h2><span class="section-num">10</span> Your Rights</h2><div class="mini-summary"><strong>In short:</strong> Depending on your location, you can request access, correction, deletion, objection, portability, or restriction.</div>
|
||||||
|
<p>Under the UK GDPR and EU GDPR, you have the following rights regarding your personal data. To exercise any of them, email us at <a href="mailto:legal@arcaneneko.com">legal@arcaneneko.com</a>. We will respond within <strong>30 days</strong>.</p>
|
||||||
|
<table class="data-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Right</th>
|
||||||
|
<th>What it means</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>Right of access</td>
|
||||||
|
<td>You can request a copy of the personal data we hold about you.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Right to rectification</td>
|
||||||
|
<td>You can ask us to correct inaccurate data. You can also update most data directly in your account settings.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Right to erasure</td>
|
||||||
|
<td>Also known as the "right to be forgotten." You can ask us to delete your personal data. Some data may need to be retained for legal or security reasons.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Right to restrict processing</td>
|
||||||
|
<td>You can ask us to pause processing your data in certain circumstances.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Right to data portability</td>
|
||||||
|
<td>You can request your data in a structured, machine-readable format.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Right to object</td>
|
||||||
|
<td>You can object to processing based on legitimate interests. We will stop unless we have compelling legitimate grounds.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Rights re: automated decisions</td>
|
||||||
|
<td>We do not make any automated decisions about you that have legal or significant effects.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
<!-- International transfers -->
|
||||||
|
<section class="legal-section" id="transfers">
|
||||||
|
<h2><span class="section-num">11</span> International Data Transfers</h2>
|
||||||
|
<p>ArcaneNeko is based in the United Kingdom. If you access our services from outside the UK, your data may be transferred to and processed in the UK.</p>
|
||||||
|
<p>The European Commission has recognised the UK as providing an adequate level of data protection under GDPR. This means transfers from the EU/EEA to the UK are permitted without additional safeguards.</p>
|
||||||
|
<p>We do not routinely transfer data outside the UK or EU/EEA. If this changes, we will update this policy and ensure appropriate safeguards are in place.</p>
|
||||||
|
</section>
|
||||||
|
<!-- Contact & complaints -->
|
||||||
|
<section class="legal-section" id="contact">
|
||||||
|
<h2><span class="section-num">12</span> Contact & Complaints</h2>
|
||||||
|
<div class="action-grid">
|
||||||
|
<a class="action-card" href="mailto:legal@arcaneneko.com"><span class="action-label">Privacy request</span><strong>legal@arcaneneko.com</strong><p>Access, correction, deletion, or privacy questions.</p></a>
|
||||||
|
<a class="action-card" href="mailto:security@arcaneneko.com"><span class="action-label">Security report</span><strong>security@arcaneneko.com</strong><p>Responsible disclosure or account compromise issues.</p></a>
|
||||||
|
<a class="action-card" href="mailto:support@arcaneneko.com"><span class="action-label">Account support</span><strong>support@arcaneneko.com</strong><p>Help with using the service or deleting your account.</p></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>For any privacy-related questions, requests, or concerns, please contact us:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>Email:</strong> <a href="mailto:legal@arcaneneko.com">legal@arcaneneko.com</a></li>
|
||||||
|
</ul>
|
||||||
|
<h3>Right to lodge a complaint</h3>
|
||||||
|
<p>If you're based in the <strong>UK</strong>, you have the right to lodge a complaint with the <strong>Information Commissioner's Office (ICO)</strong>:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Website: <a href="https://ico.org.uk" rel="noopener" target="_blank">ico.org.uk</a></li>
|
||||||
|
<li>Helpline: 0303 123 1113</li>
|
||||||
|
</ul>
|
||||||
|
<p>If you're based in the <strong>EU/EEA</strong>, you can also contact your local national data protection authority. A list of authorities is available at <a href="https://edpb.europa.eu/about-edpb/about-edpb/members_en" rel="noopener" target="_blank">edpb.europa.eu</a>.</p>
|
||||||
|
<p>We'd always prefer to resolve any issue directly with you first, please reach out before filing a formal complaint.</p>
|
||||||
|
</section>
|
||||||
|
<!-- Changes -->
|
||||||
|
<section class="legal-section" id="changes">
|
||||||
|
<h2><span class="section-num">13</span> Changes to this Policy</h2>
|
||||||
|
<p>We may update this Privacy Policy from time to time, for example when we add new features to our services. When we make significant changes, we will:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Post the updated policy on this page with a new "last updated" date</li>
|
||||||
|
<li>Notify registered users of Neovoxis and our git service via email or an in-app notice</li>
|
||||||
|
</ul>
|
||||||
|
<p>Continuing to use our services after changes take effect means you accept the updated policy. If you disagree with changes, you can delete your account before they take effect.</p>
|
||||||
|
</section>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<!-- Footer -->
|
||||||
|
<footer class="footer" role="contentinfo">
|
||||||
|
<div class="container">
|
||||||
|
<div class="footer-inner">
|
||||||
|
<div class="footer-brand">
|
||||||
|
<a class="footer-logo" href="#">Arcane<span>Neko</span></a>
|
||||||
|
<p>Free open source software for developers and creators.</p>
|
||||||
|
<div class="footer-community" aria-label="Community links">
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" title="Join us on Neovoxis" aria-label="Join the ArcaneNeko community on Neovoxis">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>
|
||||||
|
</a>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer" title="Git Instance" aria-label="Visit our Git instance">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><path d="M6 21V9a9 9 0 009 9"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Services</h4>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer">Git Instance</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status Page</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a>
|
||||||
|
<a href="status">Arcane Status</a>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Legal</h4>
|
||||||
|
<a href="privacy">Privacy Policy</a>
|
||||||
|
<a href="terms">Terms of Service</a>
|
||||||
|
<a href="contact">Contact Us</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-bottom">
|
||||||
|
<p>© 2026 ArcaneNeko. All rights reserved.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<!-- Back to top -->
|
||||||
|
<button aria-label="Back to top" class="back-to-top" id="backToTop">
|
||||||
|
<svg aria-hidden="true" fill="none" height="18" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" viewbox="0 0 24 24" width="18"><polyline points="18 15 12 9 6 15"></polyline></svg>
|
||||||
|
</button>
|
||||||
|
<script src="js/theme.js"></script>
|
||||||
|
<script src="js/main.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
4
robots.txt
Normal file
4
robots.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
User-agent: *
|
||||||
|
Allow: /
|
||||||
|
|
||||||
|
Sitemap: https://arcaneneko.com/sitemap.xml
|
||||||
73
sitemap.xml
Normal file
73
sitemap.xml
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||||
|
<url>
|
||||||
|
<loc>https://arcaneneko.com/</loc>
|
||||||
|
<changefreq>weekly</changefreq>
|
||||||
|
<priority>1.0</priority>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://arcaneneko.com/index</loc>
|
||||||
|
<changefreq>weekly</changefreq>
|
||||||
|
<priority>1.0</priority>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://arcaneneko.com/status</loc>
|
||||||
|
<changefreq>monthly</changefreq>
|
||||||
|
<priority>0.8</priority>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://arcaneneko.com/privacy</loc>
|
||||||
|
<changefreq>yearly</changefreq>
|
||||||
|
<priority>0.3</priority>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://arcaneneko.com/terms</loc>
|
||||||
|
<changefreq>yearly</changefreq>
|
||||||
|
<priority>0.3</priority>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://arcaneneko.com/contact</loc>
|
||||||
|
<changefreq>monthly</changefreq>
|
||||||
|
<priority>0.5</priority>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://arcaneneko.com/coming-soon</loc>
|
||||||
|
<changefreq>weekly</changefreq>
|
||||||
|
<priority>0.5</priority>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://arcaneneko.com/400</loc>
|
||||||
|
<changefreq>yearly</changefreq>
|
||||||
|
<priority>0.1</priority>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://arcaneneko.com/403</loc>
|
||||||
|
<changefreq>yearly</changefreq>
|
||||||
|
<priority>0.1</priority>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://arcaneneko.com/404</loc>
|
||||||
|
<changefreq>yearly</changefreq>
|
||||||
|
<priority>0.1</priority>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://arcaneneko.com/422</loc>
|
||||||
|
<changefreq>yearly</changefreq>
|
||||||
|
<priority>0.1</priority>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://arcaneneko.com/500</loc>
|
||||||
|
<changefreq>yearly</changefreq>
|
||||||
|
<priority>0.1</priority>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://arcaneneko.com/502</loc>
|
||||||
|
<changefreq>yearly</changefreq>
|
||||||
|
<priority>0.1</priority>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://arcaneneko.com/503</loc>
|
||||||
|
<changefreq>yearly</changefreq>
|
||||||
|
<priority>0.1</priority>
|
||||||
|
</url>
|
||||||
|
</urlset>
|
||||||
173
status.html
Normal file
173
status.html
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" data-theme="crimson">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Arcane Status | Free Open Source Status Pages</title>
|
||||||
|
<meta name="description" content="Arcane Status is free, open source status page software under MIT License. Self-host your own status page.">
|
||||||
|
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta property="og:url content="https://arcaneneko.com/status">">
|
||||||
|
<meta property="og:title" content="Arcane Status | Free Open Source Status Pages">
|
||||||
|
<meta property="og:description" content="Free, open source status page software under MIT License. Self-host your own, no subscriptions.">
|
||||||
|
<meta property="og:image" content="https://arcaneneko.com/og-image.png">
|
||||||
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
|
<meta name="theme-color" content="#dc143c">
|
||||||
|
|
||||||
|
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
||||||
|
<link rel="stylesheet" href="css/index.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=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<!-- Navbar -->
|
||||||
|
<nav class="navbar" role="navigation" aria-label="Main navigation">
|
||||||
|
<div class="nav-container">
|
||||||
|
<a href="#" class="nav-logo" aria-label="ArcaneNeko home">Arcane<span>Neko</span></a>
|
||||||
|
<ul class="nav-links" role="list">
|
||||||
|
<li><a href="index#about">About</a></li>
|
||||||
|
<li><a href="index#services">Services</a></li>
|
||||||
|
<li><a href="index#projects">Projects</a></li>
|
||||||
|
<li><a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status</a></li>
|
||||||
|
<li><a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="nav-actions">
|
||||||
|
<button class="theme-toggle" id="themeToggle" title="Switch theme" aria-label="Switch theme"></button>
|
||||||
|
<button class="hamburger" id="hamburger" aria-label="Open menu" aria-expanded="false" aria-controls="mobileMenu">
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mobile-menu" id="mobileMenu" role="menu">
|
||||||
|
<a href="index#about" role="menuitem">About</a>
|
||||||
|
<a href="index#services" role="menuitem">Services</a>
|
||||||
|
<a href="index#projects" role="menuitem">Projects</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer" role="menuitem">Status</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" role="menuitem">Neovoxis</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<!-- Hero -->
|
||||||
|
<section class="hero" aria-label="Arcane Status overview">
|
||||||
|
<div class="hero-bg" aria-hidden="true"></div>
|
||||||
|
<div class="hero-grid" aria-hidden="true"></div>
|
||||||
|
<div class="hero-content">
|
||||||
|
<div class="hero-tag" aria-hidden="true">MIT License - Free Forever</div>
|
||||||
|
<h1>Arcane<span>Status</span></h1>
|
||||||
|
<p class="hero-subtitle">Free and open source status page software. Monitor your services and keep your users informed, self-hosted, no subscriptions.</p>
|
||||||
|
<div class="hero-cta">
|
||||||
|
<a href="https://git.arcaneneko.com/ArcaneNeko/Arcane-Status" target="_blank" rel="noopener noreferrer" class="btn">
|
||||||
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><path d="M6 21V9a9 9 0 009 9"/></svg>
|
||||||
|
View on Git
|
||||||
|
</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer" class="btn-outline">Live Demo</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Features -->
|
||||||
|
<section id="features" class="features" aria-labelledby="features-heading">
|
||||||
|
<div class="container">
|
||||||
|
<span class="section-label" aria-hidden="true">Features</span>
|
||||||
|
<h2 class="section-title" id="features-heading">Everything you need</h2>
|
||||||
|
<div class="feature-grid">
|
||||||
|
<div class="feature-card reveal">
|
||||||
|
<h3>Real-time Monitoring</h3>
|
||||||
|
<p>Monitor HTTP/HTTPS endpoints, TCP ports, and ICMP ping with configurable check intervals from 10 seconds to 1 hour.</p>
|
||||||
|
</div>
|
||||||
|
<div class="feature-card reveal">
|
||||||
|
<h3>Live Updates</h3>
|
||||||
|
<p>WebSocket-powered real-time updates pushed to both the public status page and admin dashboard.</p>
|
||||||
|
</div>
|
||||||
|
<div class="feature-card reveal">
|
||||||
|
<h3>Incident Management</h3>
|
||||||
|
<p>Create, update, and resolve incidents with severity levels. Link incidents to affected endpoints and write post-mortems.</p>
|
||||||
|
</div>
|
||||||
|
<div class="feature-card reveal">
|
||||||
|
<h3>Scheduled Maintenance</h3>
|
||||||
|
<p>Schedule maintenance windows to pause monitoring and display notices to visitors.</p>
|
||||||
|
</div>
|
||||||
|
<div class="feature-card reveal">
|
||||||
|
<h3>Email Notifications</h3>
|
||||||
|
<p>SMTP-based notifications with per-user preferences. Subscribe to all endpoints or specific categories.</p>
|
||||||
|
</div>
|
||||||
|
<div class="feature-card reveal">
|
||||||
|
<h3>API Access</h3>
|
||||||
|
<p>Generate API keys for programmatic access. Rate-limited public API with status.json endpoint for integration.</p>
|
||||||
|
</div>
|
||||||
|
<div class="feature-card reveal">
|
||||||
|
<h3>Uptime Analytics</h3>
|
||||||
|
<p>Automatic uptime calculation with SLA tracking, heatmaps, response time charts, and jitter/packet loss metrics.</p>
|
||||||
|
</div>
|
||||||
|
<div class="feature-card reveal">
|
||||||
|
<h3>Zero Dependencies</h3>
|
||||||
|
<p>SQLite database only - no Redis or Postgres required. Just Node.js and you're ready to go.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Get Started / Demo -->
|
||||||
|
<section id="get-started" class="demo section" aria-labelledby="demo-heading">
|
||||||
|
<div class="container">
|
||||||
|
<span class="section-label" aria-hidden="true">Try it out</span>
|
||||||
|
<h2 class="section-title" id="demo-heading">See it in action</h2>
|
||||||
|
<p class="demo-desc">Visit our live instance or grab the source code and host your own.</p>
|
||||||
|
<div class="hero-cta">
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer" class="btn">Visit Live Demo</a>
|
||||||
|
<a href="https://git.arcaneneko.com/ArcaneNeko/Arcane-Status" target="_blank" rel="noopener noreferrer" class="btn-outline">
|
||||||
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><path d="M6 21V9a9 9 0 009 9"/></svg>
|
||||||
|
Source Code
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Footer -->
|
||||||
|
<footer class="footer" role="contentinfo">
|
||||||
|
<div class="container">
|
||||||
|
<div class="footer-inner">
|
||||||
|
<div class="footer-brand">
|
||||||
|
<a href="#" class="footer-logo">Arcane<span>Neko</span></a>
|
||||||
|
<p>Free open source software for developers and creators.</p>
|
||||||
|
<div class="footer-community" aria-label="Community links">
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" title="Join us on Neovoxis" aria-label="Join the ArcaneNeko community on Neovoxis">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>
|
||||||
|
</a>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer" title="Git Instance" aria-label="Visit our Git instance">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><path d="M6 21V9a9 9 0 009 9"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Services</h4>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer">Git Instance</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status Page</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a>
|
||||||
|
<a href="status">Arcane Status</a>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Legal</h4>
|
||||||
|
<a href="privacy">Privacy Policy</a>
|
||||||
|
<a href="terms">Terms of Service</a>
|
||||||
|
<a href="contact">Contact Us</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-bottom">
|
||||||
|
<p>© 2026 ArcaneNeko. All rights reserved.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<button class="back-to-top" id="backToTop" aria-label="Back to top">
|
||||||
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="18 15 12 9 6 15"/></svg>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<script src="js/theme.js"></script>
|
||||||
|
<script src="js/main.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
334
terms.html
Normal file
334
terms.html
Normal file
@@ -0,0 +1,334 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<html data-theme="crimson" lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8"/>
|
||||||
|
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
|
||||||
|
<title>Terms of Service | ArcaneNeko</title>
|
||||||
|
<meta content="ArcaneNeko Terms of Service, the rules for using our services." name="description"/>
|
||||||
|
<meta content="website" property="og:type"/>
|
||||||
|
<meta content="https://arcaneneko.com/terms.html" property="og:url"/>
|
||||||
|
<meta content="Terms of Service | ArcaneNeko" property="og:title"/>
|
||||||
|
<meta content="The terms for using ArcaneNeko services plain English, fair, and UK law governed." property="og:description"/>
|
||||||
|
<meta content="https://arcaneneko.com/og-image.png" property="og:image"/>
|
||||||
|
<meta content="#dc143c" name="theme-color"/>
|
||||||
|
<link href="favicon.svg" rel="icon" type="image/svg+xml"/>
|
||||||
|
<link href="css/index.css" rel="stylesheet"/>
|
||||||
|
<link href="https://fonts.googleapis.com" rel="preconnect"/>
|
||||||
|
<link crossorigin="" href="https://fonts.gstatic.com" rel="preconnect"/>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet"/>
|
||||||
|
</head>
|
||||||
|
<body><a class="skip-link" href="#mainContent">Skip to main content</a>
|
||||||
|
<div aria-label="Reading progress" aria-valuemax="100" aria-valuemin="0" aria-valuenow="0" class="scroll-progress" id="scrollProgress" role="progressbar"></div>
|
||||||
|
<!-- Navbar -->
|
||||||
|
<nav aria-label="Main navigation" class="navbar" role="navigation">
|
||||||
|
<div class="nav-container">
|
||||||
|
<a aria-label="ArcaneNeko home" class="nav-logo" href="#">Arcane<span>Neko</span></a>
|
||||||
|
<ul class="nav-links" role="list">
|
||||||
|
<li><a href="index#about">About</a></li>
|
||||||
|
<li><a href="index#services">Services</a></li>
|
||||||
|
<li><a href="index#projects">Projects</a></li>
|
||||||
|
<li><a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status</a></li>
|
||||||
|
<li><a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="nav-actions">
|
||||||
|
<button aria-label="Switch theme" class="theme-toggle" id="themeToggle" title="Switch theme"></button>
|
||||||
|
<button aria-controls="mobileMenu" aria-expanded="false" aria-label="Open menu" class="hamburger" id="hamburger">
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mobile-menu" id="mobileMenu" role="menu">
|
||||||
|
<a href="index#about" role="menuitem">About</a>
|
||||||
|
<a href="index#services" role="menuitem">Services</a>
|
||||||
|
<a href="index#projects" role="menuitem">Projects</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer" role="menuitem">Status</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" role="menuitem">Neovoxis</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<!-- Hero -->
|
||||||
|
<div class="legal-hero">
|
||||||
|
<div class="legal-tag">Legal</div>
|
||||||
|
<h1>Terms of <span>Service</span></h1>
|
||||||
|
<p class="legal-meta">Last updated: April 2026 · Applies to all ArcaneNeko services</p>
|
||||||
|
</div>
|
||||||
|
<!-- Content -->
|
||||||
|
<div class="legal-wrap">
|
||||||
|
<!-- Table of Contents -->
|
||||||
|
<aside class="legal-toc" id="legalToc"><button aria-controls="termsTocPanel" aria-expanded="false" class="legal-toc-toggle" type="button">Contents</button><div class="legal-toc-panel" id="termsTocPanel"><ul>
|
||||||
|
<li><a href="#intro">Introduction</a></li>
|
||||||
|
<li><a href="#services">Our Services</a></li>
|
||||||
|
<li><a href="#eligibility">Eligibility</a></li>
|
||||||
|
<li><a href="#accounts">Your Account</a></li>
|
||||||
|
<li><a href="#acceptable-use">Acceptable Use</a></li>
|
||||||
|
<li><a href="#content">Content & Ownership</a></li>
|
||||||
|
<li><a href="#git-terms">Git Hosting</a></li>
|
||||||
|
<li><a href="#neovoxis-terms">Neovoxis</a></li>
|
||||||
|
<li><a href="#open-source">Open Source Software</a></li>
|
||||||
|
<li><a href="#availability">Service Availability</a></li>
|
||||||
|
<li><a href="#termination">Termination</a></li>
|
||||||
|
<li><a href="#liability">Liability</a></li>
|
||||||
|
<li><a href="#governing-law">Governing Law</a></li>
|
||||||
|
<li><a href="#changes">Changes</a></li>
|
||||||
|
<li><a href="#contact">Contact Us</a></li>
|
||||||
|
</ul></div></aside>
|
||||||
|
<!-- Main content -->
|
||||||
|
<article class="legal-content" id="mainContent">
|
||||||
|
<!-- Introduction -->
|
||||||
|
<section class="legal-section" id="intro">
|
||||||
|
<h2><span class="section-num">01</span> Introduction</h2>
|
||||||
|
<p>These Terms of Service ("Terms") govern your use of all services provided by <strong>ArcaneNeko</strong>. By accessing or using any of our services, you agree to be bound by these Terms.</p>
|
||||||
|
<p>Please read them carefully. If you do not agree with any part of these Terms, please do not use our services.</p>
|
||||||
|
<p>These Terms should be read alongside our <a href="privacy">Privacy Policy</a>, which explains how we handle your data.</p>
|
||||||
|
<div class="callout callout--info">
|
||||||
|
<p class="callout-title">Plain English summary</p>
|
||||||
|
<p>Use our services sensibly. Don't do anything illegal or harmful. Be responsible for what you post. We'll try to keep things running smoothly, but we can't make guarantees. If you break the rules, we may suspend your access.</p>
|
||||||
|
</div>
|
||||||
|
<div class="answer-strip">
|
||||||
|
<div><strong>Who this is for</strong><span>Anyone using ArcaneNeko services</span></div>
|
||||||
|
<div><strong>What it covers</strong><span>Rules, responsibilities, suspensions, and service limits</span></div>
|
||||||
|
<div><strong>Best paired with</strong><span><a href="privacy">Privacy Policy</a></span></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
<section aria-labelledby="terms-glance-title" class="legal-at-a-glance reveal">
|
||||||
|
<div class="section-kicker">Quick read</div>
|
||||||
|
<h2 id="terms-glance-title">At a glance</h2>
|
||||||
|
<div class="summary-grid">
|
||||||
|
<div class="summary-card"><h3>Free services</h3><p>Everything listed here is free to use. There are no subscriptions or paid tiers.</p></div>
|
||||||
|
<div class="summary-card"><h3>Use them lawfully</h3><p>Don't use ArcaneNeko for illegal content, abuse, malware, spam, or attacks on our systems.</p></div>
|
||||||
|
<div class="summary-card"><h3>Your content stays yours</h3><p>You keep ownership of what you upload. We only get the rights needed to run the service.</p></div>
|
||||||
|
<div class="summary-card"><h3>Public means public</h3><p>Anything posted in public repositories or public communities can be seen by others.</p></div>
|
||||||
|
<div class="summary-card"><h3>We can suspend abuse</h3><p>We may suspend or remove accounts that break these rules, especially for serious violations.</p></div>
|
||||||
|
<div class="summary-card"><h3>Need help?</h3><p>You can jump to contact details anytime for support, abuse reports, privacy questions, or security issues.</p></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Our services -->
|
||||||
|
<section class="legal-section" id="services">
|
||||||
|
<h2><span class="section-num">02</span> Our Services</h2>
|
||||||
|
<p>ArcaneNeko provides the following services, all of which are free to use:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>arcaneneko.com</strong> - our main website, providing information about ArcaneNeko and our projects</li>
|
||||||
|
<li><strong>git.arcaneneko.com</strong> - free git hosting powered by Gitea, open to anyone</li>
|
||||||
|
<li><strong>Arcane Status</strong> - free, open source status page software (MIT License) and a hosted instance</li>
|
||||||
|
<li><strong>neovoxis.com</strong> - a chat and community platform currently in early preview</li>
|
||||||
|
</ul>
|
||||||
|
<p>All services are provided free of charge with no premium tiers, paywalls, or subscriptions.</p>
|
||||||
|
</section>
|
||||||
|
<!-- Eligibility -->
|
||||||
|
<section class="legal-section" id="eligibility">
|
||||||
|
<h2><span class="section-num">03</span> Eligibility</h2>
|
||||||
|
<p>To create an account on any ArcaneNeko service, you must be at least <strong>13 years old</strong>.</p>
|
||||||
|
<p>If you are between 13 and 15 years old and based in an EU/EEA country, you must have permission from a parent or guardian to use our services, in accordance with EU GDPR age requirements for digital services.</p>
|
||||||
|
<p>By creating an account, you confirm that you meet the age requirements applicable in your country. If we become aware that an account belongs to someone under the minimum age, we will terminate that account.</p>
|
||||||
|
</section>
|
||||||
|
<!-- Accounts -->
|
||||||
|
<section class="legal-section" id="accounts">
|
||||||
|
<h2><span class="section-num">04</span> Your Account</h2>
|
||||||
|
<p>When you create an account on our git service or on Neovoxis, you are responsible for:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Keeping your login credentials confidential</li>
|
||||||
|
<li>All activity that takes place under your account</li>
|
||||||
|
<li>Notifying us promptly at <a href="mailto:security@arcaneneko.com">security@arcaneneko.com</a> if you believe your account has been compromised</li>
|
||||||
|
</ul>
|
||||||
|
<p>You must provide accurate and truthful information when creating your account. You may not create an account on behalf of someone else without their permission, or impersonate any person or entity.</p>
|
||||||
|
<p>You may only hold one account per service unless we specifically permit otherwise. Duplicate accounts created to evade suspensions or bans are not permitted.</p>
|
||||||
|
</section>
|
||||||
|
<!-- Acceptable use -->
|
||||||
|
<section class="legal-section" id="acceptable-use">
|
||||||
|
<h2><span class="section-num">05</span> Acceptable Use</h2><div class="mini-summary"><strong>In short:</strong> Use the services responsibly. Illegal content, harassment, malware, spam, fraud, and attacks on our systems are not allowed.</div>
|
||||||
|
<p>Our services may be used only for lawful purposes and in accordance with these Terms. You agree not to use our services to:</p>
|
||||||
|
<h3>Illegal or harmful content</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Post, upload, or distribute any content that is illegal under UK or EU law</li>
|
||||||
|
<li>Share child sexual abuse material (CSAM), this will result in immediate account termination and referral to law enforcement</li>
|
||||||
|
<li>Distribute malware, ransomware, spyware, or any other malicious software</li>
|
||||||
|
<li>Facilitate fraud, phishing, or other scams</li>
|
||||||
|
<li>Violate intellectual property rights, including copyright and trademarks</li>
|
||||||
|
</ul>
|
||||||
|
<h3>Harassment and abuse</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Harass, threaten, bully, or intimidate any person</li>
|
||||||
|
<li>Post content that is grossly offensive, hateful, or discriminatory based on protected characteristics</li>
|
||||||
|
<li>Doxx individuals (share someone's private information without consent)</li>
|
||||||
|
<li>Stalk or monitor individuals without their knowledge or consent</li>
|
||||||
|
</ul>
|
||||||
|
<h3>Abuse of our systems</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Attempt to gain unauthorised access to our systems or to other users' accounts</li>
|
||||||
|
<li>Launch denial-of-service attacks or otherwise disrupt our services</li>
|
||||||
|
<li>Send spam, unsolicited bulk messages, or use our services for mass marketing</li>
|
||||||
|
<li>Abuse our free hosting resources (e.g. using our git service as a file hosting CDN or crypto mining operation)</li>
|
||||||
|
<li>Scrape or systematically harvest data from our services without permission</li>
|
||||||
|
</ul>
|
||||||
|
<p>We reserve the right to determine what constitutes a violation of these rules. When in doubt, ask us before doing something that could be considered borderline.</p>
|
||||||
|
</section>
|
||||||
|
<!-- Content & ownership -->
|
||||||
|
<section class="legal-section" id="content">
|
||||||
|
<h2><span class="section-num">06</span> Content & Ownership</h2><div class="mini-summary"><strong>In short:</strong> Your content belongs to you. We only need limited rights to host and deliver it, and public content can be seen by anyone.</div>
|
||||||
|
<h3>Your content</h3>
|
||||||
|
<p>You retain ownership of all content you create and upload to our services, your code, messages, and files are yours.</p>
|
||||||
|
<p>By uploading content to our services, you grant ArcaneNeko a limited, non-exclusive licence to store, transmit, and display that content solely for the purpose of providing the service to you. We do not claim ownership of your content and will not use it for any other purpose.</p>
|
||||||
|
<h3>Public content</h3>
|
||||||
|
<p>Content you post in public git repositories or public Neovoxis servers is visible to anyone. Think carefully before posting sensitive information publicly. Public repository content may be indexed by search engines or forked by other users.</p>
|
||||||
|
<h3>Your responsibility</h3>
|
||||||
|
<p>You are solely responsible for the content you post. ArcaneNeko is not responsible for user-generated content, though we will act on reports of content that violates these Terms.</p>
|
||||||
|
<h3>Reporting content</h3>
|
||||||
|
<p>If you encounter content that violates these Terms, please report it to <a href="mailto:abuse@arcaneneko.com">abuse@arcaneneko.com</a>.</p>
|
||||||
|
</section>
|
||||||
|
<!-- Git terms -->
|
||||||
|
<section class="legal-section" id="git-terms">
|
||||||
|
<h2><span class="section-num">07</span> Git Hosting, Additional Terms</h2><div class="mini-summary"><strong>In short:</strong> Use the git service for software projects, not as a general-purpose file host or for harmful tooling.</div>
|
||||||
|
<p>Our git service (git.arcaneneko.com) is intended for hosting software projects and related development work. The following additional rules apply:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>Fair use:</strong> Do not use the service as a general file storage or media hosting service. Repositories should primarily contain source code or project-related files.</li>
|
||||||
|
<li><strong>No malware:</strong> Do not host malicious software, exploit code designed to cause harm, or tools intended primarily for illegal purposes.</li>
|
||||||
|
<li><strong>Public repositories:</strong> You are responsible for the contents of your public repositories. If you accidentally commit sensitive data (API keys, passwords), treat it as compromised and rotate it immediately.</li>
|
||||||
|
<li><strong>Resource limits:</strong> We may impose fair use limits on repository size or other resources to ensure the service remains available for everyone.</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<!-- Neovoxis terms -->
|
||||||
|
<section class="legal-section" id="neovoxis-terms">
|
||||||
|
<h2><span class="section-num">08</span> Neovoxis, Additional Terms</h2><div class="mini-summary"><strong>In short:</strong> DMs are encrypted, but the platform rules still apply. Server owners must moderate responsibly, and preview features may change.</div>
|
||||||
|
<p>Neovoxis is a chat and community platform. In addition to the general acceptable use rules above, the following applies:</p>
|
||||||
|
<h3>Server owners & administrators</h3>
|
||||||
|
<p>If you create a server on Neovoxis, you are responsible for moderating your community and ensuring it complies with these Terms. ArcaneNeko is not responsible for content posted in user-created servers, but we reserve the right to remove servers that violate these Terms.</p>
|
||||||
|
<h3>Direct messages</h3>
|
||||||
|
<p>Direct messages are end-to-end encrypted. While we cannot read DM content, the acceptable use rules still apply. Using DMs to send spam, harassment, illegal material, or CSAM is prohibited regardless of encryption.</p>
|
||||||
|
<h3>Early preview</h3>
|
||||||
|
<p>Neovoxis is currently in early preview. This means the platform is still under active development. Features may change, be removed, or be unstable. We appreciate your patience and feedback.</p>
|
||||||
|
<h3>Community standards</h3>
|
||||||
|
<p>Beyond what's legally prohibited, we expect users to treat each other with basic respect. We reserve the right to act on behaviour that, while not necessarily illegal, is genuinely harmful to other users or to the community.</p>
|
||||||
|
</section>
|
||||||
|
<!-- Open source -->
|
||||||
|
<section class="legal-section" id="open-source">
|
||||||
|
<h2><span class="section-num">09</span> Open Source Software</h2>
|
||||||
|
<p>ArcaneNeko develops and distributes open source software, including <strong>Arcane Status</strong>, under the <strong>MIT License</strong>. When you use this software, the terms of the respective open source licence apply.</p>
|
||||||
|
<p>The MIT License permits you to use, copy, modify, merge, publish, distribute, sublicense, and sell copies of the software, subject to including the original copyright notice.</p>
|
||||||
|
<p>These Terms of Service apply to our <em>hosted services</em> (arcaneneko.com, git.arcaneneko.com, neovoxis.com, status.arcaneneko.com). If you self-host our open source software, these Terms do not apply to your own instance.</p>
|
||||||
|
</section>
|
||||||
|
<!-- Availability -->
|
||||||
|
<section class="legal-section" id="availability">
|
||||||
|
<h2><span class="section-num">10</span> Service Availability</h2>
|
||||||
|
<p>We work hard to keep our services available and reliable, but we cannot guarantee 100% uptime. Our services are provided <strong>"as is"</strong> and <strong>"as available"</strong>, without any warranty of any kind.</p>
|
||||||
|
<p>We may take services offline for:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Scheduled maintenance (we'll try to give advance notice)</li>
|
||||||
|
<li>Emergency security updates</li>
|
||||||
|
<li>Circumstances beyond our control (e.g. infrastructure failures)</li>
|
||||||
|
</ul>
|
||||||
|
<p>We are not liable for any loss or inconvenience caused by service interruptions. For visibility into service health, you can check our status page at <a href="https://status.arcaneneko.com" target="_blank">status.arcaneneko.com</a>.</p>
|
||||||
|
<p>We reserve the right to discontinue any service with reasonable notice. If a service is to be permanently shut down, we will give users at least 30 days' notice to export their data where technically feasible.</p>
|
||||||
|
</section>
|
||||||
|
<!-- Termination -->
|
||||||
|
<section class="legal-section" id="termination">
|
||||||
|
<h2><span class="section-num">11</span> Termination</h2><div class="mini-summary"><strong>In short:</strong> You can leave at any time. We can suspend or remove accounts that break the rules, with immediate action for serious abuse.</div>
|
||||||
|
<h3>By you</h3>
|
||||||
|
<p>You may stop using our services at any time. You can delete your account through your account settings on any service. See our <a href="privacy#retention">Privacy Policy</a> for details on what happens to your data after deletion.</p>
|
||||||
|
<h3>By us</h3>
|
||||||
|
<p>We reserve the right to suspend or permanently terminate your account if you:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Violate these Terms of Service</li>
|
||||||
|
<li>Post illegal content</li>
|
||||||
|
<li>Abuse or disrupt our services</li>
|
||||||
|
<li>Use a fake identity or impersonate others</li>
|
||||||
|
<li>Engage in conduct that is harmful to other users or to ArcaneNeko</li>
|
||||||
|
</ul>
|
||||||
|
<p>For serious violations (e.g. CSAM, malware distribution), termination will be immediate and without notice. For other violations, we will generally attempt to contact you first, except where doing so would be impractical or counterproductive.</p>
|
||||||
|
<p>If your account is suspended and you believe this was in error, you can appeal by contacting <a href="mailto:support@arcaneneko.com">support@arcaneneko.com</a>.</p>
|
||||||
|
</section>
|
||||||
|
<!-- Liability -->
|
||||||
|
<section class="legal-section" id="liability">
|
||||||
|
<h2><span class="section-num">12</span> Limitation of Liability</h2><div class="mini-summary"><strong>In short:</strong> We provide these services free of charge, so our legal liability is limited to the extent allowed by law.</div>
|
||||||
|
<p>To the fullest extent permitted by UK law, ArcaneNeko and its team members shall not be liable for:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Any indirect, incidental, special, or consequential losses arising from your use of our services</li>
|
||||||
|
<li>Loss of data, revenue, or profits</li>
|
||||||
|
<li>Content posted by other users</li>
|
||||||
|
<li>Interruptions to service availability</li>
|
||||||
|
<li>Any damage resulting from unauthorised access to your account due to your own failure to keep your credentials secure</li>
|
||||||
|
</ul>
|
||||||
|
<p>Nothing in these Terms limits our liability for death or personal injury caused by negligence, fraud, or any other liability that cannot be excluded under UK law.</p>
|
||||||
|
<p>Our services are provided free of charge. Given this, it is reasonable that our liability exposure is limited.</p>
|
||||||
|
</section>
|
||||||
|
<!-- Governing law -->
|
||||||
|
<section class="legal-section" id="governing-law">
|
||||||
|
<h2><span class="section-num">13</span> Governing Law</h2>
|
||||||
|
<p>These Terms are governed by and construed in accordance with the laws of <strong>England and Wales</strong>. Any disputes arising under these Terms shall be subject to the exclusive jurisdiction of the courts of England and Wales.</p>
|
||||||
|
<p>If you are based in an EU/EEA country, you may also have rights under applicable EU consumer protection laws. Nothing in these Terms affects your statutory rights as a consumer.</p>
|
||||||
|
</section>
|
||||||
|
<!-- Changes -->
|
||||||
|
<section class="legal-section" id="changes">
|
||||||
|
<h2><span class="section-num">14</span> Changes to These Terms</h2>
|
||||||
|
<p>We may update these Terms from time to time. When we make significant changes, we will:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Post the updated Terms on this page with a new "last updated" date</li>
|
||||||
|
<li>Notify registered users via email or an in-app notice at least <strong>14 days</strong> before changes take effect (except in cases of legal necessity requiring immediate changes)</li>
|
||||||
|
</ul>
|
||||||
|
<p>Your continued use of our services after changes take effect constitutes your acceptance of the updated Terms. If you do not accept the changes, you should stop using the relevant service and, if applicable, delete your account before the changes take effect.</p>
|
||||||
|
</section>
|
||||||
|
<!-- Contact -->
|
||||||
|
<section class="legal-section" id="contact">
|
||||||
|
<h2><span class="section-num">15</span> Contact Us</h2>
|
||||||
|
<div class="action-grid">
|
||||||
|
<a class="action-card" href="mailto:support@arcaneneko.com"><span class="action-label">Account help</span><strong>support@arcaneneko.com</strong><p>Appeals, account issues, and access problems.</p></a>
|
||||||
|
<a class="action-card" href="mailto:abuse@arcaneneko.com"><span class="action-label">Report abuse</span><strong>abuse@arcaneneko.com</strong><p>Illegal content, harassment, spam, or service misuse.</p></a>
|
||||||
|
<a class="action-card" href="mailto:security@arcaneneko.com"><span class="action-label">Security issue</span><strong>security@arcaneneko.com</strong><p>Responsible disclosure and account compromise reports.</p></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>If you have questions about these Terms, or want to report a violation, get in touch:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>General enquiries:</strong> <a href="mailto:hello@arcaneneko.com">hello@arcaneneko.com</a></li>
|
||||||
|
<li><strong>Legal / privacy:</strong> <a href="mailto:legal@arcaneneko.com">legal@arcaneneko.com</a></li>
|
||||||
|
<li><strong>Security reports:</strong> <a href="mailto:security@arcaneneko.com">security@arcaneneko.com</a></li>
|
||||||
|
<li><strong>Abuse reports:</strong> <a href="mailto:abuse@arcaneneko.com">abuse@arcaneneko.com</a></li>
|
||||||
|
<li><strong>Account support:</strong> <a href="mailto:support@arcaneneko.com">support@arcaneneko.com</a></li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<!-- Footer -->
|
||||||
|
<footer class="footer" role="contentinfo">
|
||||||
|
<div class="container">
|
||||||
|
<div class="footer-inner">
|
||||||
|
<div class="footer-brand">
|
||||||
|
<a class="footer-logo" href="#">Arcane<span>Neko</span></a>
|
||||||
|
<p>Free open source software for developers and creators.</p>
|
||||||
|
<div class="footer-community" aria-label="Community links">
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer" title="Join us on Neovoxis" aria-label="Join the ArcaneNeko community on Neovoxis">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>
|
||||||
|
</a>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer" title="Git Instance" aria-label="Visit our Git instance">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><path d="M6 21V9a9 9 0 009 9"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Services</h4>
|
||||||
|
<a href="https://git.arcaneneko.com" target="_blank" rel="noopener noreferrer">Git Instance</a>
|
||||||
|
<a href="https://status.arcaneneko.com" target="_blank" rel="noopener noreferrer">Status Page</a>
|
||||||
|
<a href="https://neovoxis.com" target="_blank" rel="noopener noreferrer">Neovoxis</a>
|
||||||
|
<a href="status">Arcane Status</a>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links-col">
|
||||||
|
<h4>Legal</h4>
|
||||||
|
<a href="privacy">Privacy Policy</a>
|
||||||
|
<a href="terms">Terms of Service</a>
|
||||||
|
<a href="contact">Contact Us</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-bottom">
|
||||||
|
<p>© 2026 ArcaneNeko. All rights reserved.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<button aria-label="Back to top" class="back-to-top" id="backToTop">
|
||||||
|
<svg aria-hidden="true" fill="none" height="18" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" viewbox="0 0 24 24" width="18"><polyline points="18 15 12 9 6 15"></polyline></svg>
|
||||||
|
</button>
|
||||||
|
<script src="js/theme.js"></script>
|
||||||
|
<script src="js/main.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user