Добавлены новые зависимости, обновлены стили и улучшена структура проекта. Обновлен README с описанием функционала и технологий. Реализована анимация и адаптивный дизайн. Настроена авторизация с использованием Apollo Client.

This commit is contained in:
Bivekich
2025-07-16 18:00:41 +03:00
parent d260749bc9
commit 823ef9a28c
69 changed files with 15539 additions and 210 deletions

View File

@ -1,26 +1,378 @@
@import "tailwindcss";
@import "tw-animate-css";
:root {
--background: #ffffff;
--foreground: #171717;
}
@custom-variant dark (&:is(.dark *));
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--font-sans: var(--font-geist-sans);
--font-mono: var(--font-geist-mono);
--color-sidebar-ring: var(--sidebar-ring);
--color-sidebar-border: var(--sidebar-border);
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
--color-sidebar-accent: var(--sidebar-accent);
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
--color-sidebar-primary: var(--sidebar-primary);
--color-sidebar-foreground: var(--sidebar-foreground);
--color-sidebar: var(--sidebar);
--color-chart-5: var(--chart-5);
--color-chart-4: var(--chart-4);
--color-chart-3: var(--chart-3);
--color-chart-2: var(--chart-2);
--color-chart-1: var(--chart-1);
--color-ring: var(--ring);
--color-input: var(--input);
--color-border: var(--border);
--color-destructive: var(--destructive);
--color-accent-foreground: var(--accent-foreground);
--color-accent: var(--accent);
--color-muted-foreground: var(--muted-foreground);
--color-muted: var(--muted);
--color-secondary-foreground: var(--secondary-foreground);
--color-secondary: var(--secondary);
--color-primary-foreground: var(--primary-foreground);
--color-primary: var(--primary);
--color-popover-foreground: var(--popover-foreground);
--color-popover: var(--popover);
--color-card-foreground: var(--card-foreground);
--color-card: var(--card);
--radius-sm: calc(var(--radius) - 4px);
--radius-md: calc(var(--radius) - 2px);
--radius-lg: var(--radius);
--radius-xl: calc(var(--radius) + 4px);
}
@media (prefers-color-scheme: dark) {
:root {
--background: #0a0a0a;
--foreground: #ededed;
:root {
--radius: 0.625rem;
--background: oklch(0.98 0.02 320);
--foreground: oklch(0.145 0 0);
--card: oklch(1 0 0);
--card-foreground: oklch(0.145 0 0);
--popover: oklch(1 0 0);
--popover-foreground: oklch(0.145 0 0);
--primary: oklch(0.65 0.28 315);
--primary-foreground: oklch(0.985 0 0);
--secondary: oklch(0.94 0.08 315);
--secondary-foreground: oklch(0.205 0 0);
--muted: oklch(0.94 0.05 315);
--muted-foreground: oklch(0.556 0 0);
--accent: oklch(0.90 0.12 315);
--accent-foreground: oklch(0.205 0 0);
--destructive: oklch(0.577 0.245 27.325);
--border: oklch(0.90 0.08 315);
--input: oklch(0.96 0.05 315);
--ring: oklch(0.65 0.28 315);
--chart-1: oklch(0.70 0.25 315);
--chart-2: oklch(0.65 0.22 290);
--chart-3: oklch(0.60 0.20 340);
--chart-4: oklch(0.75 0.18 305);
--chart-5: oklch(0.68 0.24 325);
--sidebar: oklch(0.985 0 0);
--sidebar-foreground: oklch(0.145 0 0);
--sidebar-primary: oklch(0.65 0.28 315);
--sidebar-primary-foreground: oklch(0.985 0 0);
--sidebar-accent: oklch(0.90 0.12 315);
--sidebar-accent-foreground: oklch(0.205 0 0);
--sidebar-border: oklch(0.90 0.08 315);
--sidebar-ring: oklch(0.65 0.28 315);
}
.dark {
--background: oklch(0.08 0.08 315);
--foreground: oklch(0.985 0 0);
--card: oklch(0.12 0.08 315);
--card-foreground: oklch(0.985 0 0);
--popover: oklch(0.12 0.08 315);
--popover-foreground: oklch(0.985 0 0);
--primary: oklch(0.75 0.32 315);
--primary-foreground: oklch(0.08 0.08 315);
--secondary: oklch(0.18 0.12 315);
--secondary-foreground: oklch(0.985 0 0);
--muted: oklch(0.18 0.10 315);
--muted-foreground: oklch(0.708 0 0);
--accent: oklch(0.20 0.15 315);
--accent-foreground: oklch(0.985 0 0);
--destructive: oklch(0.704 0.191 22.216);
--border: oklch(0.22 0.12 315);
--input: oklch(0.15 0.10 315);
--ring: oklch(0.75 0.32 315);
--chart-1: oklch(0.75 0.32 315);
--chart-2: oklch(0.70 0.28 290);
--chart-3: oklch(0.65 0.25 340);
--chart-4: oklch(0.80 0.20 305);
--chart-5: oklch(0.72 0.30 325);
--sidebar: oklch(0.12 0.08 315);
--sidebar-foreground: oklch(0.985 0 0);
--sidebar-primary: oklch(0.75 0.32 315);
--sidebar-primary-foreground: oklch(0.08 0.08 315);
--sidebar-accent: oklch(0.20 0.15 315);
--sidebar-accent-foreground: oklch(0.985 0 0);
--sidebar-border: oklch(0.22 0.12 315);
--sidebar-ring: oklch(0.75 0.32 315);
}
@layer base {
* {
@apply border-border outline-ring/50;
}
body {
@apply bg-background text-foreground;
}
}
body {
background: var(--background);
color: var(--foreground);
font-family: Arial, Helvetica, sans-serif;
@layer utilities {
.gradient-purple {
background: linear-gradient(135deg,
oklch(0.75 0.32 315) 0%,
oklch(0.68 0.28 280) 30%,
oklch(0.65 0.30 250) 70%,
oklch(0.60 0.25 330) 100%);
}
.gradient-purple-light {
background: linear-gradient(135deg,
oklch(0.95 0.12 315) 0%,
oklch(0.96 0.10 280) 50%,
oklch(0.98 0.08 250) 100%);
}
.bg-gradient-smooth {
background: linear-gradient(135deg,
oklch(0.22 0.20 315) 0%,
oklch(0.20 0.18 280) 30%,
oklch(0.18 0.16 250) 60%,
oklch(0.15 0.12 330) 100%);
}
.text-gradient-bright {
background: linear-gradient(135deg,
oklch(0.85 0.35 315) 0%,
oklch(0.80 0.32 280) 40%,
oklch(0.75 0.30 250) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
text-shadow: 0 0 20px oklch(0.75 0.32 315 / 0.4);
}
.text-gradient {
background: linear-gradient(135deg,
oklch(0.75 0.32 315) 0%,
oklch(0.70 0.30 280) 50%,
oklch(0.68 0.28 250) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
/* Glass Morphism Effects */
.glass-card {
background: rgba(255, 255, 255, 0.12);
backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.2);
box-shadow:
0 8px 32px rgba(168, 85, 247, 0.18),
0 4px 16px rgba(147, 51, 234, 0.12),
inset 0 1px 0 rgba(255, 255, 255, 0.3);
transition: all 0.3s ease;
}
.glass-card:hover {
background: rgba(255, 255, 255, 0.15);
border: 1px solid rgba(255, 255, 255, 0.3);
box-shadow:
0 12px 40px rgba(168, 85, 247, 0.25),
0 6px 20px rgba(147, 51, 234, 0.18),
inset 0 1px 0 rgba(255, 255, 255, 0.4);
}
.glass-input {
background: rgba(255, 255, 255, 0.08);
backdrop-filter: blur(12px);
border: 1px solid rgba(255, 255, 255, 0.15);
transition: all 0.3s ease;
}
.glass-input:focus {
background: rgba(255, 255, 255, 0.12);
border: 1px solid rgba(168, 85, 247, 0.5);
box-shadow:
0 0 0 3px rgba(168, 85, 247, 0.15),
0 4px 16px rgba(147, 51, 234, 0.25);
}
.glass-button {
background: linear-gradient(135deg,
rgba(168, 85, 247, 0.9) 0%,
rgba(120, 119, 248, 0.9) 40%,
rgba(59, 130, 246, 0.85) 100%);
backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.2);
box-shadow:
0 8px 32px rgba(168, 85, 247, 0.35),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.glass-button::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg,
transparent,
rgba(255, 255, 255, 0.25),
transparent);
transition: left 0.5s ease;
}
.glass-button:hover::before {
left: 100%;
}
.glass-button:hover {
background: linear-gradient(135deg,
rgba(168, 85, 247, 1) 0%,
rgba(120, 119, 248, 1) 40%,
rgba(59, 130, 246, 0.95) 100%);
box-shadow:
0 12px 40px rgba(168, 85, 247, 0.45),
inset 0 1px 0 rgba(255, 255, 255, 0.3);
transform: translateY(-2px);
}
.glass-button:active {
transform: translateY(0);
box-shadow:
0 4px 16px rgba(168, 85, 247, 0.35),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
.glass-secondary {
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(16px);
border: 1px solid rgba(255, 255, 255, 0.15);
transition: all 0.3s ease;
}
.glass-secondary:hover {
background: rgba(255, 255, 255, 0.15);
border: 1px solid rgba(255, 255, 255, 0.25);
box-shadow: 0 8px 24px rgba(139, 69, 199, 0.15);
}
/* Обеспечиваем курсор pointer для всех кликабельных элементов */
button, [role="button"], [data-state] {
cursor: pointer;
}
/* Специальные стили для вкладок */
[data-slot="tabs-list"] {
background: rgba(255, 255, 255, 0.12);
backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.2);
}
[data-slot="tabs-trigger"] {
cursor: pointer !important;
transition: all 0.3s ease;
}
[data-slot="tabs-trigger"]:hover {
background: rgba(255, 255, 255, 0.1);
}
[data-slot="tabs-trigger"][data-state="active"] {
background: rgba(255, 255, 255, 0.2) !important;
color: white !important;
border: 1px solid rgba(255, 255, 255, 0.3);
}
/* Animated Background */
.bg-animated {
background: linear-gradient(135deg,
oklch(0.22 0.20 315) 0%,
oklch(0.18 0.16 300) 40%,
oklch(0.15 0.12 330) 100%);
position: relative;
overflow: hidden;
}
.bg-animated::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
radial-gradient(circle at 20% 50%, rgba(168, 85, 247, 0.35) 0%, transparent 50%),
radial-gradient(circle at 80% 20%, rgba(120, 119, 248, 0.35) 0%, transparent 50%),
radial-gradient(circle at 40% 80%, rgba(59, 130, 246, 0.25) 0%, transparent 50%),
radial-gradient(circle at 60% 30%, rgba(192, 132, 252, 0.20) 0%, transparent 50%);
animation: float 20s ease-in-out infinite;
}
@keyframes float {
0%, 100% { opacity: 1; transform: translateY(0px) rotate(0deg); }
33% { opacity: 0.8; transform: translateY(-20px) rotate(2deg); }
66% { opacity: 0.9; transform: translateY(10px) rotate(-1deg); }
}
/* Floating Particles Effect */
.particles {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
overflow: hidden;
z-index: 1;
}
.particle {
position: absolute;
background: rgba(255, 255, 255, 0.3);
border-radius: 50%;
animation: particleFloat 15s linear infinite;
}
.particle:nth-child(1) { width: 3px; height: 3px; left: 10%; animation-delay: 0s; }
.particle:nth-child(2) { width: 2px; height: 2px; left: 20%; animation-delay: 2s; }
.particle:nth-child(3) { width: 4px; height: 4px; left: 30%; animation-delay: 4s; }
.particle:nth-child(4) { width: 2px; height: 2px; left: 40%; animation-delay: 6s; }
.particle:nth-child(5) { width: 3px; height: 3px; left: 50%; animation-delay: 8s; }
.particle:nth-child(6) { width: 2px; height: 2px; left: 60%; animation-delay: 10s; }
.particle:nth-child(7) { width: 4px; height: 4px; left: 70%; animation-delay: 12s; }
.particle:nth-child(8) { width: 2px; height: 2px; left: 80%; animation-delay: 14s; }
.particle:nth-child(9) { width: 3px; height: 3px; left: 90%; animation-delay: 16s; }
@keyframes particleFloat {
0% { transform: translateY(100vh) rotate(0deg); opacity: 0; }
10% { opacity: 1; }
90% { opacity: 1; }
100% { transform: translateY(-100px) rotate(360deg); opacity: 0; }
}
/* Enhanced Glow Effects */
.glow-purple {
box-shadow:
0 0 20px rgba(168, 85, 247, 0.5),
0 0 40px rgba(120, 119, 248, 0.35),
0 0 60px rgba(59, 130, 246, 0.2),
0 0 80px rgba(192, 132, 252, 0.15);
}
.glow-text {
text-shadow:
0 0 10px rgba(168, 85, 247, 0.6),
0 0 20px rgba(120, 119, 248, 0.45),
0 0 30px rgba(59, 130, 246, 0.3),
0 0 40px rgba(192, 132, 252, 0.25);
}
}