diff --git a/main_dc/valitovgaziz/html/digital_background.js b/main_dc/valitovgaziz/html/digital_background.js
index 9be1465..3f0d138 100644
--- a/main_dc/valitovgaziz/html/digital_background.js
+++ b/main_dc/valitovgaziz/html/digital_background.js
@@ -1,10 +1,31 @@
-// Initialize digital background
-document.addEventListener('DOMContentLoaded', function() {
- createBinaryRain();
- createFloatingCode();
- createConnectionNodes();
- createDataFlows();
-});
+// Digital Background Initialization
+// Обновляем функцию для интеграции с темной темой
+function updateBackgroundForTheme() {
+ const isDarkMode = document.body.classList.contains('dark-mode');
+ const binaryDigits = document.querySelectorAll('.binary-digit');
+ const floatingCode = document.querySelectorAll('.floating-code');
+ const connectionNodes = document.querySelectorAll('.connection-node');
+ const dataFlows = document.querySelectorAll('.data-flow');
+
+ // Обновляем цвета элементов в реальном времени
+ const accentColor = isDarkMode ? 'rgba(41, 128, 185, 0.8)' : 'rgba(0, 123, 255, 0.8)';
+
+ binaryDigits.forEach(digit => {
+ digit.style.color = accentColor;
+ });
+
+ floatingCode.forEach(code => {
+ code.style.color = accentColor;
+ });
+
+ connectionNodes.forEach(node => {
+ node.style.background = accentColor;
+ });
+
+ dataFlows.forEach(flow => {
+ flow.style.background = `linear-gradient(90deg, transparent, ${accentColor}, transparent)`;
+ });
+}
// Create binary rain effect
function createBinaryRain() {
@@ -12,27 +33,35 @@ function createBinaryRain() {
container.className = 'binary-rain';
document.body.appendChild(container);
- for (let i = 0; i < 50; i++) {
+ // Создаем больше потоков для полного покрытия
+ for (let i = 0; i < 80; i++) { // Увеличиваем количество потоков
setTimeout(() => {
createBinaryStream(container);
- }, i * 200);
+ }, i * 150);
}
}
function createBinaryStream(container) {
const stream = document.createElement('div');
stream.className = 'binary-stream';
+ // Распределяем потоки по всей ширине экрана
const left = Math.random() * 100;
stream.style.left = `${left}%`;
+ stream.style.position = 'absolute';
+ stream.style.width = 'auto';
- for (let i = 0; i < 20; i++) {
+ // Создаем больше цифр в каждом потоке
+ for (let i = 0; i < 25; i++) {
const digit = document.createElement('div');
digit.className = 'binary-digit';
digit.textContent = Math.random() > 0.5 ? '1' : '0';
+ digit.style.position = 'absolute';
digit.style.left = '0';
- digit.style.top = `${-i * 20}px`;
- digit.style.animationDuration = `${3 + Math.random() * 4}s`;
- digit.style.animationDelay = `${i * 0.2}s`;
+ digit.style.top = `${-i * 25}px`; // Увеличиваем расстояние между цифрами
+ digit.style.animationDuration = `${2 + Math.random() * 3}s`; // Быстрее анимация
+ digit.style.animationDelay = `${i * 0.15}s`;
+ digit.style.opacity = `${0.3 + Math.random() * 0.7}`; // Разная прозрачность
+ digit.style.fontSize = `${12 + Math.random() * 8}px`; // Разный размер шрифта
stream.appendChild(digit);
}
@@ -41,41 +70,105 @@ function createBinaryStream(container) {
// Create floating code elements
function createFloatingCode() {
- const symbols = ['{', '}', '<>', '();', '[]', '>', '=>', '&&'];
+ const symbols = ['{', '}', '<>', '();', '[]', '>', '=>', '&&', 'function', 'const', 'let', 'var', 'class', 'import', 'export', 'return'];
const classes = ['code-bracket', 'code-parenthesis', 'code-brace', 'code-tag'];
- symbols.forEach((symbol, index) => {
+ // Создаем больше плавающих элементов
+ for (let i = 0; i < 25; i++) {
+ const symbol = symbols[Math.floor(Math.random() * symbols.length)];
const element = document.createElement('div');
- element.className = `floating-code ${classes[index % classes.length]}`;
+ element.className = `floating-code ${classes[Math.floor(Math.random() * classes.length)]}`;
element.textContent = symbol;
element.style.left = `${Math.random() * 100}%`;
element.style.top = `${Math.random() * 100}%`;
+ element.style.animationDuration = `${20 + Math.random() * 20}s`;
+ element.style.fontSize = `${10 + Math.random() * 6}px`;
+ element.style.opacity = `${0.05 + Math.random() * 0.1}`;
document.body.appendChild(element);
- });
+ }
}
// Create connection nodes
function createConnectionNodes() {
- for (let i = 0; i < 15; i++) {
+ for (let i = 0; i < 20; i++) {
const node = document.createElement('div');
node.className = 'connection-node';
node.style.left = `${Math.random() * 100}%`;
node.style.top = `${Math.random() * 100}%`;
node.style.animationDelay = `${Math.random() * 4}s`;
+ node.style.width = `${4 + Math.random() * 6}px`;
+ node.style.height = node.style.width;
document.body.appendChild(node);
}
}
// Create data flow lines
function createDataFlows() {
- for (let i = 0; i < 8; i++) {
+ for (let i = 0; i < 12; i++) {
const flow = document.createElement('div');
flow.className = 'data-flow';
flow.style.top = `${Math.random() * 100}%`;
- flow.style.width = `${30 + Math.random() * 40}%`;
- flow.style.left = `${-Math.random() * 20}%`;
- flow.style.animationDuration = `${4 + Math.random() * 8}s`;
- flow.style.animationDelay = `${Math.random() * 6}s`;
+ flow.style.width = `${40 + Math.random() * 50}%`;
+ flow.style.left = `${-Math.random() * 30}%`;
+ flow.style.animationDuration = `${5 + Math.random() * 10}s`;
+ flow.style.animationDelay = `${Math.random() * 8}s`;
+ flow.style.height = `${1 + Math.random() * 2}px`;
document.body.appendChild(flow);
}
-}
\ No newline at end of file
+}
+
+// Initialize digital background with theme integration
+document.addEventListener('DOMContentLoaded', function() {
+ // Сначала создаем элементы
+ createBinaryRain();
+ createFloatingCode();
+ createConnectionNodes();
+ createDataFlows();
+
+ // Затем настраиваем наблюдение за темой
+ const observer = new MutationObserver(function(mutations) {
+ mutations.forEach(function(mutation) {
+ if (mutation.attributeName === 'class') {
+ setTimeout(updateBackgroundForTheme, 100); // Небольшая задержка для применения стилей
+ }
+ });
+ });
+
+ observer.observe(document.body, {
+ attributes: true,
+ attributeFilter: ['class']
+ });
+
+ // Инициализируем цвета при загрузке
+ setTimeout(updateBackgroundForTheme, 500);
+});
+
+// Также обновляем тему при переключении
+function toggleTheme() {
+ document.body.classList.toggle('dark-mode');
+ const btn = document.querySelector('.theme-toggle');
+
+ if (document.body.classList.contains('dark-mode')) {
+ btn.textContent = '☀️ Светлая тема';
+ localStorage.setItem('theme', 'dark');
+ } else {
+ btn.textContent = '🌙 Темная тема';
+ localStorage.setItem('theme', 'light');
+ }
+
+ // Обновляем фон после переключения темы
+ setTimeout(updateBackgroundForTheme, 100);
+}
+
+// Загрузка темы при загрузке страницы
+document.addEventListener('DOMContentLoaded', function() {
+ const savedTheme = localStorage.getItem('theme');
+ const btn = document.querySelector('.theme-toggle');
+
+ if (savedTheme === 'dark') {
+ document.body.classList.add('dark-mode');
+ btn.textContent = '☀️ Светлая тема';
+ } else {
+ btn.textContent = '🌙 Темная тема';
+ }
+});
\ No newline at end of file
diff --git a/main_dc/valitovgaziz/html/style.css b/main_dc/valitovgaziz/html/style.css
index 4b3e014..68f8d74 100644
--- a/main_dc/valitovgaziz/html/style.css
+++ b/main_dc/valitovgaziz/html/style.css
@@ -1,3 +1,4 @@
+@import url("./style/digital_background.css");
@import url("saveContactsButtonStyle.css");
@import url("darkTheme.css");
@import url("./style/about.css");
@@ -8,7 +9,6 @@
@import url("./style/repository_section.css");
@import url("./style/links_style.css");
@import url("./style/skill_section.css");
-@import url("./style/digital_background.css");
/* style.css - обновленный */
:root {
diff --git a/main_dc/valitovgaziz/html/style/digital_background.css b/main_dc/valitovgaziz/html/style/digital_background.css
index 101134e..0eb11e6 100644
--- a/main_dc/valitovgaziz/html/style/digital_background.css
+++ b/main_dc/valitovgaziz/html/style/digital_background.css
@@ -1,22 +1,24 @@
/* Digital Background for Software Development Website */
-/* CSS Variables for Theme Support */
+/* Интеграция с существующей системой тем */
+
+/* Используем переменные из darkTheme.css */
:root {
- /* Light Theme Colors */
+ /* Light Theme Colors - интегрируем с существующими переменными */
--bg-primary-light: #f8f9fa;
--bg-secondary-light: #e9ecef;
--accent-primary-light: #007bff;
--accent-secondary-light: #6c757d;
--text-primary-light: #212529;
--particle-color-light: rgba(0, 123, 255, 0.1);
-
- /* Dark Theme Colors */
- --bg-primary-dark: #121212;
- --bg-secondary-dark: #1e1e1e;
- --accent-primary-dark: #0d6efd;
- --accent-secondary-dark: #495057;
- --text-primary-dark: #f8f9fa;
- --particle-color-dark: rgba(13, 110, 253, 0.15);
-
+
+ /* Dark Theme Colors - используем переменные из darkTheme.css */
+ --bg-primary-dark: var(--dark-bg, #1a252f);
+ --bg-secondary-dark: var(--dark-card, #2c3e50);
+ --accent-primary-dark: var(--dark-secondary, #2980b9);
+ --accent-secondary-dark: var(--dark-border, #34495e);
+ --text-primary-dark: var(--dark-text, #ecf0f1);
+ --particle-color-dark: rgba(41, 128, 185, 0.15);
+
/* Current Theme - defaults to light */
--bg-primary: var(--bg-primary-light);
--bg-secondary: var(--bg-secondary-light);
@@ -26,8 +28,8 @@
--particle-color: var(--particle-color-light);
}
-/* Dark Theme Class */
-body.dark-theme {
+/* Интеграция с существующей темной темой */
+body.dark-mode {
--bg-primary: var(--bg-primary-dark);
--bg-secondary: var(--bg-secondary-dark);
--accent-primary: var(--accent-primary-dark);
@@ -36,62 +38,35 @@ body.dark-theme {
--particle-color: var(--particle-color-dark);
}
-/* Auto Theme Detection */
-@media (prefers-color-scheme: dark) {
- body.auto-theme {
- --bg-primary: var(--bg-primary-dark);
- --bg-secondary: var(--bg-secondary-dark);
- --accent-primary: var(--accent-primary-dark);
- --accent-secondary: var(--accent-secondary-dark);
- --text-primary: var(--text-primary-dark);
- --particle-color: var(--particle-color-dark);
- }
-}
-
/* Base Body Styles */
body {
margin: 0;
padding: 0;
min-height: 100vh;
- background: linear-gradient(
- 135deg,
- var(--bg-primary) 0%,
- var(--bg-secondary) 100%
- );
+ background: linear-gradient(135deg, var(--bg-primary) 0%, var(--bg-secondary) 100%);
color: var(--text-primary);
- font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
overflow-x: hidden;
position: relative;
}
/* Animated Background Elements */
body::before {
- content: "";
+ content: '';
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
- background: radial-gradient(
- circle at 20% 80%,
- var(--particle-color) 0%,
- transparent 50%
- ),
- radial-gradient(
- circle at 80% 20%,
- var(--particle-color) 0%,
- transparent 50%
- ),
- radial-gradient(
- circle at 40% 40%,
- var(--particle-color) 0%,
- transparent 50%
- );
+ background:
+ radial-gradient(circle at 20% 80%, var(--particle-color) 0%, transparent 50%),
+ radial-gradient(circle at 80% 20%, var(--particle-color) 0%, transparent 50%),
+ radial-gradient(circle at 40% 40%, var(--particle-color) 0%, transparent 50%);
animation: backgroundPulse 8s ease-in-out infinite;
- z-index: -1;
+ z-index: -3;
}
-/* Binary Code Rain Effect */
+/* Binary Code Rain Effect - ИСПРАВЛЕННЫЙ СТИЛЬ */
.binary-rain {
position: fixed;
top: 0;
@@ -100,17 +75,17 @@ body::before {
height: 100%;
pointer-events: none;
z-index: -1;
- opacity: 0.4;
+ opacity: 0.6;
}
.binary-digit {
position: absolute;
color: var(--accent-primary);
- font-family: "Courier New", monospace;
- font-size: 14px;
+ font-family: 'Courier New', monospace;
font-weight: bold;
animation: fall linear infinite;
- text-shadow: 0 0 8px currentColor;
+ text-shadow: 0 0 5px currentColor;
+ white-space: nowrap;
}
/* Circuit Board Grid */
@@ -120,46 +95,33 @@ body::before {
left: 0;
width: 100%;
height: 100%;
- background-image: linear-gradient(
- var(--accent-secondary) 1px,
- transparent 1px
- ),
+ background-image:
+ linear-gradient(var(--accent-secondary) 1px, transparent 1px),
linear-gradient(90deg, var(--accent-secondary) 1px, transparent 1px);
background-size: 40px 40px;
opacity: 0.03;
- z-index: -1;
+ z-index: -2;
animation: gridMove 20s linear infinite;
}
/* Floating Code Elements */
.floating-code {
position: fixed;
- font-family: "Courier New", monospace;
- font-size: 12px;
+ font-family: 'Courier New', monospace;
color: var(--accent-primary);
opacity: 0.1;
z-index: -1;
pointer-events: none;
}
-.code-bracket {
- animation: float 15s ease-in-out infinite;
-}
-.code-parenthesis {
- animation: float 18s ease-in-out infinite reverse;
-}
-.code-brace {
- animation: float 20s ease-in-out infinite;
-}
-.code-tag {
- animation: float 16s ease-in-out infinite reverse;
-}
+.code-bracket { animation: float 15s ease-in-out infinite; }
+.code-parenthesis { animation: float 18s ease-in-out infinite reverse; }
+.code-brace { animation: float 20s ease-in-out infinite; }
+.code-tag { animation: float 16s ease-in-out infinite reverse; }
/* Connection Nodes */
.connection-node {
position: fixed;
- width: 6px;
- height: 6px;
background: var(--accent-primary);
border-radius: 50%;
opacity: 0.2;
@@ -170,90 +132,65 @@ body::before {
/* Data Flow Lines */
.data-flow {
position: fixed;
- height: 1px;
- background: linear-gradient(
- 90deg,
- transparent,
- var(--accent-primary),
- transparent
- );
+ background: linear-gradient(90deg, transparent, var(--accent-primary), transparent);
opacity: 0.1;
z-index: -1;
animation: dataFlow 6s linear infinite;
}
+/* ОБЯЗАТЕЛЬНО: Убедимся что основной контент поверх фона */
+header, .section, footer {
+ position: relative;
+ z-index: 1;
+}
+
/* Animations */
@keyframes backgroundPulse {
- 0%,
- 100% {
- opacity: 0.5;
- }
- 50% {
- opacity: 0.8;
- }
+ 0%, 100% { opacity: 0.5; }
+ 50% { opacity: 0.8; }
}
@keyframes fall {
- to {
- transform: translateY(100vh);
+ to {
+ transform: translateY(100vh);
}
}
@keyframes float {
- 0%,
- 100% {
- transform: translate(0, 0) rotate(0deg);
+ 0%, 100% {
+ transform: translate(0, 0) rotate(0deg);
}
- 25% {
- transform: translate(100px, 50px) rotate(90deg);
+ 25% {
+ transform: translate(20px, 20px) rotate(5deg);
}
- 50% {
- transform: translate(50px, 100px) rotate(180deg);
+ 50% {
+ transform: translate(-15px, 30px) rotate(-5deg);
}
- 75% {
- transform: translate(-50px, 75px) rotate(270deg);
+ 75% {
+ transform: translate(10px, -10px) rotate(3deg);
}
}
@keyframes gridMove {
- 0% {
- transform: translate(0, 0);
- }
- 100% {
- transform: translate(40px, 40px);
- }
+ 0% { transform: translate(0, 0); }
+ 100% { transform: translate(20px, 20px); }
}
@keyframes nodePulse {
- 0%,
- 100% {
- transform: scale(1);
- opacity: 0.2;
- }
- 50% {
- transform: scale(1.5);
- opacity: 0.4;
- }
+ 0%, 100% { transform: scale(1); opacity: 0.2; }
+ 50% { transform: scale(1.3); opacity: 0.4; }
}
@keyframes dataFlow {
- 0% {
- transform: translateX(-100%);
- opacity: 0;
- }
- 50% {
- opacity: 0.3;
- }
- 100% {
- transform: translateX(100%);
- opacity: 0;
- }
+ 0% { transform: translateX(-100%); opacity: 0; }
+ 50% { opacity: 0.3; }
+ 100% { transform: translateX(100%); opacity: 0; }
}
/* Interactive Elements */
.connection-node:hover {
opacity: 0.6;
- transform: scale(2);
+ transform: scale(1.5);
transition: all 0.3s ease;
}
@@ -271,14 +208,19 @@ body::before {
/* Responsive Adjustments */
@media (max-width: 768px) {
.binary-digit {
- font-size: 12px;
- }
-
- .circuit-grid {
- background-size: 30px 30px;
- }
-
- .floating-code {
font-size: 10px;
}
+
+ .circuit-grid {
+ background-size: 20px 20px;
+ }
+
+ .floating-code {
+ font-size: 8px;
+ }
}
+
+/* Убедимся что кнопка переключения темы всегда поверх всего */
+.theme-toggle {
+ z-index: 1000 !important;
+}
\ No newline at end of file