Auto merge dev → main (#1258)

* meow

* updated it

* meow

* add avg TTL footer to /comp + extend freshness window to 90m when servers slow

---------

Co-authored-by: Clippii <clippii@protonmail.com>
This commit is contained in:
NotSoToothless
2026-05-17 12:58:48 -07:00
committed by GitHub
parent 5148a0c7bb
commit 47ae8b92f7
139 changed files with 44 additions and 49025 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-325
View File
@@ -1,325 +0,0 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
/* Custom Fonts */
@font-face {
font-family: 'skyquakesymbols';
src: url('/Fonts/symbols_skyquake.ttf');
font-display: block;
}
@layer base {
* {
@apply m-0 p-0 box-border;
}
body {
@apply font-sans leading-relaxed text-white overflow-x-hidden min-h-screen antialiased;
background: linear-gradient(rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7)), url('/images/toothless_face.webp');
background-size: cover;
background-position: center;
background-attachment: fixed;
background-repeat: no-repeat;
-webkit-overflow-scrolling: touch;
}
html {
@apply scroll-smooth;
}
}
@layer components {
/* ========================================
COLOR SCHEME:
- Background: Dark earth green (#1C1E1D) to graphite (#0A0B0A)
- Accent/Primary text: Cream (#F5F5DC)
- Secondary/Muted text: Mint green (#90EE90)
======================================== */
/* Vehicle, Squadron, and Player names use custom font */
.vehicle-name,
.squadron-name,
.squadron-tag,
.player-name,
.player-nick {
@apply font-skyquake;
}
/* Primary Button - Cream gradient */
.btn-primary {
@apply inline-flex items-center justify-center px-6 py-3 font-bold rounded-lg
transition-all duration-300 relative overflow-hidden;
background: linear-gradient(135deg, #F5F5DC 0%, #E8E8D0 100%);
color: #1E1E1E;
box-shadow: 0 4px 20px rgba(245, 245, 220, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.4);
}
.btn-primary:hover {
box-shadow: 0 8px 25px rgba(245, 245, 220, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.4);
transform: translateY(-2px);
}
.btn-primary:active {
transform: translateY(0);
}
/* Navigation callouts */
.nav-premium {
color: #f4d35e;
}
.nav-premium:hover {
color: #ffe08a;
}
.nav-rainbow {
color: #ff9b8a;
}
.nav-rainbow:hover {
color: #ffc0b4;
}
.nav-donate {
background: linear-gradient(90deg, #ff7a7a 0%, #ffd166 25%, #90ee90 50%, #8fd3ff 75%, #c79bff 100%);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
color: transparent;
}
.nav-donate:hover {
filter: brightness(1.12);
}
.nav-donate i {
-webkit-text-fill-color: initial;
color: #ffd166;
}
/* Secondary Button */
.btn-secondary {
@apply inline-flex items-center justify-center px-6 py-3
bg-white/10 text-white font-semibold rounded-lg border-2 border-primary-400/50
transition-all duration-300 backdrop-blur-sm
hover:-translate-y-0.5 hover:bg-primary-400/20 hover:border-primary-400
active:translate-y-0;
}
/* Feature Card - used on homepage */
.feature-card {
background: linear-gradient(135deg, rgba(62, 78, 62, 0.2) 0%, rgba(44, 44, 44, 0.2) 100%);
border: 1px solid rgba(245, 245, 220, 0.08);
backdrop-filter: blur(12px);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.card-hover:hover {
transform: translateY(-3px);
background: linear-gradient(135deg, rgba(62, 78, 62, 0.3) 0%, rgba(44, 44, 44, 0.3) 100%);
border-color: rgba(144, 238, 144, 0.3);
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.3);
}
.card-hover:hover i {
color: #F5F5DC;
transform: scale(1.1);
transition: transform 0.3s ease;
}
/* Search Input - Glass effect */
.search-input-glass {
background: rgba(30, 30, 30, 0.6);
border: 1px solid rgba(245, 245, 220, 0.1);
backdrop-filter: blur(10px);
transition: all 0.3s ease;
box-shadow: inset 0 2px 4px rgba(0,0,0,0.2);
}
.search-input-glass:focus {
background: rgba(40, 40, 40, 0.8);
border-color: rgba(144, 238, 144, 0.4);
box-shadow: 0 0 0 2px rgba(144, 238, 144, 0.1), inset 0 2px 4px rgba(0,0,0,0.2);
}
/* Card Component */
.card {
@apply bg-dark-100/80 backdrop-blur-md rounded-2xl border border-primary-400/20
p-6 transition-all duration-300
hover:border-primary-400/40 hover:shadow-lg hover:shadow-primary-400/10;
}
/* Glass Card (more transparent) */
.glass-card {
@apply bg-dark-100/60 backdrop-blur-xl rounded-2xl border border-primary-400/20
p-6 transition-all duration-300;
}
/* Stat Card */
.stat-card {
@apply card text-center relative overflow-hidden
hover:-translate-y-1 hover:border-primary-400;
}
/* Input Field */
.input-field {
@apply w-full px-4 py-3 bg-dark-200/80 border-2 border-primary-400/30
rounded-lg text-white placeholder-white/50
transition-all duration-300 backdrop-blur-sm
focus:outline-none focus:border-primary-400 focus:shadow-lg focus:shadow-primary-400/20;
}
/* Select Dropdown */
.select-field {
@apply input-field cursor-pointer appearance-none pr-10;
background-image: url('data:image/svg+xml;charset=UTF-8,%3csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%2339ff14%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3e%3cpolyline points=%226 9 12 15 18 9%22%3e%3c/polyline%3e%3c/svg%3e');
background-position: right 0.75rem center;
background-size: 1.25rem;
background-repeat: no-repeat;
}
/* Table Styles */
.data-table {
@apply w-full border-collapse bg-dark-200/80 rounded-xl overflow-hidden
shadow-xl border border-primary-400/10;
}
.data-table thead {
@apply bg-gradient-to-r from-primary-400/20 to-primary-500/20;
}
.data-table th {
@apply px-4 py-3 text-white font-semibold text-center border-b-2 border-primary-400/30;
}
.data-table td {
@apply px-4 py-3 text-center text-white/90 border-b border-primary-400/10;
}
.data-table tbody tr {
@apply transition-all duration-300 hover:bg-gradient-to-r hover:from-primary-400/10
hover:to-primary-500/10 hover:scale-[1.01];
}
/* Loading Spinner */
.spinner {
@apply border-4 border-primary-400/30 border-t-primary-400 rounded-full
w-10 h-10 animate-spin mx-auto;
}
/* Badge */
.badge {
@apply inline-flex items-center px-3 py-1 rounded-full text-sm font-semibold
bg-primary-400/10 text-primary-400 border border-primary-400/30;
}
/* Navbar */
.navbar {
@apply fixed top-0 w-full bg-dark-300/95 backdrop-blur-md z-50
border-b border-primary-400/20 transition-all duration-300;
}
/* Container */
.container-custom {
@apply max-w-7xl mx-auto px-4 sm:px-6 lg:px-8;
}
/* Section Title */
.section-title {
@apply text-4xl font-bold text-center mb-4 bg-gradient-to-r from-primary-400 via-primary-500 to-primary-400
bg-clip-text text-transparent bg-[length:200%_auto] animate-gradient-shift;
}
/* Link Hover Effect */
.link-hover {
@apply relative text-white transition-colors duration-300
hover:text-primary-400
after:content-[''] after:absolute after:bottom-0 after:left-0
after:w-0 after:h-0.5 after:bg-gradient-to-r after:from-primary-400 after:to-primary-500
after:transition-all after:duration-300
hover:after:w-full;
}
/* Date Filter Styles */
.date-filter-container {
@apply glass-card space-y-4;
}
.filter-button {
@apply px-4 py-2 rounded-lg border border-primary-400/30 bg-dark-100/50
text-white font-medium transition-all duration-300
hover:border-primary-400 hover:bg-primary-400/10
focus:outline-none focus:ring-2 focus:ring-primary-400/50;
}
.filter-button-active {
@apply filter-button border-primary-400 bg-primary-400/20 text-primary-400 shadow-lg shadow-primary-400/20;
}
}
@layer utilities {
/* Text Gradient */
.text-gradient {
@apply bg-gradient-to-r from-primary-400 via-primary-500 to-primary-600
bg-clip-text text-transparent;
}
/* Glass Effect */
.glass {
@apply bg-white/5 backdrop-blur-md;
}
/* Glow Effect */
.glow {
@apply shadow-lg shadow-primary-400/30;
}
/* Scrollbar Styles */
.custom-scrollbar::-webkit-scrollbar {
@apply w-2 h-2;
}
.custom-scrollbar::-webkit-scrollbar-track {
@apply bg-dark-200 rounded;
}
.custom-scrollbar::-webkit-scrollbar-thumb {
@apply bg-primary-400/30 rounded hover:bg-primary-400/50;
}
}
/* Additional custom animations */
@keyframes gradientShift {
0%, 100% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
}
@keyframes scrollRight {
0% { transform: translateX(0); }
100% { transform: translateX(-50%); }
}
/* Row link overlay - makes entire table row clickable with native right-click support */
tr.row-link {
position: relative;
cursor: pointer;
}
tr.row-link a.row-link-overlay::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0;
}
tr.row-link td a:not(.row-link-overlay),
tr.row-link td button,
tr.row-link td [tabindex],
tr.row-link td input,
tr.row-link td select,
tr.row-link td textarea {
position: relative;
z-index: 1;
}