Виджеты - HTML

HTML:
<xf:css>
.neon-countdown-sidebar {
text-align: center;
padding: 15px 10px;
background: #ffffff;
border-radius: 12px;
border: 1px solid #e0e0e0;
box-shadow:
0 4px 20px rgba(0, 0, 0, 0.1),
0 0 0 1px rgba(0, 123, 255, 0.1),
inset 0 0 20px rgba(0, 0, 0, 0.05);
margin: 10px 0;
position: relative;
overflow: hidden;
transition: all 0.3s ease;
}
.neon-countdown-sidebar:hover {
transform: translateY(-2px);
box-shadow:
0 6px 25px rgba(0, 0, 0, 0.15),
0 0 0 1px rgba(0, 123, 255, 0.2),
inset 0 0 25px rgba(0, 0, 0, 0.08);
background: #f8f9fa;
}
.garland-top {
position: absolute;
top: -5px;
left: 10px;
right: 10px;
height: 20px;
display: flex;
justify-content: space-between;
pointer-events: none;
z-index: 2;
}
.garland-bottom {
position: absolute;
bottom: -5px;
left: 10px;
right: 10px;
height: 20px;
display: flex;
justify-content: space-between;
pointer-events: none;
z-index: 2;
}
.garland-bulb {
width: 12px;
height: 12px;
border-radius: 50%;
position: relative;
animation: bulb-flicker 2s infinite alternate;
box-shadow: 0 0 8px currentColor;
}
.garland-bulb:nth-child(3n) { animation-delay: 0s; background: #ff4757; color: #ff4757; }
.garland-bulb:nth-child(3n+1) { animation-delay: 0.4s; background: #2ed573; color: #2ed573; }
.garland-bulb:nth-child(3n+2) { animation-delay: 0.8s; background: #ffa502; color: #ffa502; }
.garland-bulb:nth-child(4n) { animation-delay: 1.2s; background: #3742fa; color: #3742fa; }
.garland-bulb:nth-child(5n) { animation-delay: 1.6s; background: #ff6b81; color: #ff6b81; }
.garland-wire {
position: absolute;
top: 5px;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(90deg,
transparent 10%,
#ff6b6b 20%,
#ffd166 40%,
#06d6a0 60%,
#118ab2 80%,
transparent 90%
);
z-index: 1;
}
.neon-countdown-sidebar::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
border-radius: 12px;
background: linear-gradient(
135deg,
rgba(0, 123, 255, 0.05) 0%,
rgba(108, 99, 255, 0.03) 50%,
transparent 100%
);
pointer-events: none;
z-index: 0;
}
.sidebar-title {
font-family: 'Segoe UI', 'Arial Narrow', sans-serif;
font-size: 1.2rem;
font-weight: 700;
color: #2c3e50;
text-shadow:
0 1px 2px rgba(0, 0, 0, 0.1);
letter-spacing: 1px;
margin-bottom: 15px;
padding-bottom: 8px;
position: relative;
z-index: 1;
}
.sidebar-title::after {
content: '';
position: absolute;
bottom: -2px;
left: 25%;
right: 25%;
height: 2px;
background: linear-gradient(90deg, #ff6b6b, #ffd166, #06d6a0, #118ab2);
border-radius: 1px;
}
.countdown-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-template-rows: repeat(2, auto);
gap: 12px;
margin-bottom: 10px;
position: relative;
z-index: 1;
}
.countdown-cell {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 8px 5px;
position: relative;
}
.countdown-cell::before {
content: '❄';
position: absolute;
top: -5px;
right: -5px;
font-size: 10px;
color: #118ab2;
opacity: 0;
transition: opacity 0.3s ease;
}
.countdown-cell:hover::before {
opacity: 1;
animation: snowflake-spin 1s linear;
}
.cell-number {
font-family: 'Courier New', monospace;
font-size: 1.8rem;
font-weight: 800;
line-height: 1;
color: #007bff;
text-shadow:
0 2px 4px rgba(0, 123, 255, 0.3);
background: linear-gradient(
145deg,
#ffffff 0%,
#f8f9fa 100%
);
padding: 10px 8px;
border-radius: 8px;
border: 2px solid #007bff;
box-shadow:
inset 0 0 10px rgba(0, 123, 255, 0.1),
0 4px 12px rgba(0, 123, 255, 0.2),
0 2px 4px rgba(0, 0, 0, 0.1);
margin-bottom: 4px;
animation: number-pulse 2s ease-in-out infinite alternate;
width: 70px;
height: 60px;
display: flex;
align-items: center;
justify-content: center;
position: relative;
overflow: hidden;
transition: all 0.3s ease;
}
/* Эффект новогодних конфетти на числах */
.cell-number::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
border-radius: 8px;
background-image: radial-gradient(circle at 20% 80%, rgba(255, 107, 107, 0.1) 2px, transparent 2px),
radial-gradient(circle at 80% 20%, rgba(255, 209, 102, 0.1) 2px, transparent 2px),
radial-gradient(circle at 40% 40%, rgba(6, 214, 160, 0.1) 2px, transparent 2px),
radial-gradient(circle at 60% 60%, rgba(17, 138, 178, 0.1) 2px, transparent 2px);
background-size: 10px 10px;
opacity: 0.5;
pointer-events: none;
}
.cell-label {
font-family: 'Segoe UI', sans-serif;
font-size: 0.75rem;
font-weight: 600;
color: #495057;
text-transform: uppercase;
letter-spacing: 1px;
background: #f8f9fa;
padding: 4px 10px;
border-radius: 12px;
margin-top: 4px;
border: 1px solid #dee2e6;
transition: all 0.3s ease;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
.countdown-cell:hover .cell-label {
background: linear-gradient(135deg, #ff6b6b, #ffd166);
color: white;
border-color: transparent;
transform: translateY(-1px);
box-shadow: 0 3px 8px rgba(255, 107, 107, 0.3);
}
.newyear-icon {
margin-top: 12px;
font-size: 1.8rem;
color: #ff6b6b;
text-shadow:
0 2px 4px rgba(255, 107, 107, 0.3);
animation: icon-bounce 2s infinite;
position: relative;
z-index: 1;
}
@keyframes number-pulse {
from {
transform: scale(1);
box-shadow:
inset 0 0 10px rgba(0, 123, 255, 0.1),
0 4px 12px rgba(0, 123, 255, 0.2),
0 2px 4px rgba(0, 0, 0, 0.1);
}
to {
transform: scale(1.02);
box-shadow:
inset 0 0 15px rgba(0, 123, 255, 0.15),
0 6px 20px rgba(0, 123, 255, 0.3),
0 4px 8px rgba(0, 0, 0, 0.15);
}
}
@keyframes icon-bounce {
0%, 100% {
transform: translateY(0);
}
50% {
transform: translateY(-5px);
}
}
@keyframes bulb-flicker {
0%, 100% {
opacity: 0.7;
transform: scale(1);
}
25% {
opacity: 1;
transform: scale(1.2);
}
50% {
opacity: 0.9;
transform: scale(1.1);
}
75% {
opacity: 1;
transform: scale(1.15);
}
}
@keyframes snowflake-spin {
0% {
transform: rotate(0deg) scale(0);
}
50% {
transform: rotate(180deg) scale(1.2);
}
100% {
transform: rotate(360deg) scale(1);
}
}
.neon-countdown-sidebar::after {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: radial-gradient(
circle,
rgba(255, 107, 107, 0.05) 1%,
rgba(255, 209, 102, 0.03) 2%,
rgba(6, 214, 160, 0.02) 3%,
transparent 5%
);
opacity: 0.3;
animation: background-twinkle 8s linear infinite;
pointer-events: none;
z-index: 0;
}
@keyframes background-twinkle {
0%, 100% {
opacity: 0.1;
transform: rotate(0deg);
}
50% {
opacity: 0.3;
}
100% {
transform: rotate(180deg);
}
}
@media (max-width: 500px) {
.countdown-grid {
gap: 10px;
}
.cell-number {
width: 65px;
height: 55px;
font-size: 1.6rem;
padding: 8px 6px;
}
.cell-label {
font-size: 0.7rem;
padding: 3px 8px;
}
.sidebar-title {
font-size: 1.1rem;
}
.newyear-icon {
font-size: 1.6rem;
}
.garland-top, .garland-bottom {
left: 5px;
right: 5px;
}
.garland-bulb {
width: 10px;
height: 10px;
}
}
@media (min-width: 300px) and (max-width: 400px) {
.cell-number {
width: 60px;
height: 50px;
font-size: 1.5rem;
}
.garland-bulb {
width: 8px;
height: 8px;
}
}
@keyframes holiday-sparkle {
0% { background-position: 0% 0%; }
100% { background-position: 20px 20px; }
}
</xf:css>
<div class="neon-countdown-sidebar">
<div class="garland-top">
<div class="garland-wire"></div>
<div class="garland-bulb"></div>
<div class="garland-bulb"></div>
<div class="garland-bulb"></div>
<div class="garland-bulb"></div>
<div class="garland-bulb"></div>
<div class="garland-bulb"></div>
<div class="garland-bulb"></div>
<div class="garland-bulb"></div>
<div class="garland-bulb"></div>
</div>
<div class="garland-bottom">
<div class="garland-wire"></div>
<div class="garland-bulb"></div>
<div class="garland-bulb"></div>
<div class="garland-bulb"></div>
<div class="garland-bulb"></div>
<div class="garland-bulb"></div>
<div class="garland-bulb"></div>
<div class="garland-bulb"></div>
<div class="garland-bulb"></div>
<div class="garland-bulb"></div>
</div>
<div class="sidebar-title">ДО НОВОГО ГОДА:</div>
<div class="countdown-grid">
<div class="countdown-cell">
<div id="sidebar-days" class="cell-number">00</div>
<div class="cell-label">Дней</div>
</div>
<div class="countdown-cell">
<div id="sidebar-hours" class="cell-number">00</div>
<div class="cell-label">Часов</div>
</div>
<div class="countdown-cell">
<div id="sidebar-minutes" class="cell-number">00</div>
<div class="cell-label">Минут</div>
</div>
<div class="countdown-cell">
<div id="sidebar-seconds" class="cell-number">00</div>
<div class="cell-label">Секунд</div>
</div>
</div>
<div class="newyear-icon">✨</div>
</div>
<xf:js>
function updateSidebarCountdown() {
const now = new Date();
const currentYear = now.getFullYear();
const newYear = new Date(currentYear + 1, 0, 1, 0, 0, 0, 0);
const diff = newYear - now;
if (diff <= 0) {
document.querySelector('.sidebar-title').textContent = 'С НОВЫМ ГОДОМ!';
document.querySelector('.newyear-icon').textContent = '🎉';
document.getElementById('sidebar-days').textContent = '00';
document.getElementById('sidebar-hours').textContent = '00';
document.getElementById('sidebar-minutes').textContent = '00';
document.getElementById('sidebar-seconds').textContent = '00';
const container = document.querySelector('.neon-countdown-sidebar');
container.style.background = 'linear-gradient(135deg, #ffd166, #ff6b6b, #6c63ff)';
container.style.boxShadow = '0 0 30px rgba(255, 107, 107, 0.4), inset 0 0 30px rgba(255, 209, 102, 0.2)';
container.style.borderColor = '#ffd166';
const bulbs = document.querySelectorAll('.garland-bulb');
bulbs.forEach(bulb => {
bulb.style.animation = 'bulb-flicker 0.5s infinite alternate';
});
const numbers = document.querySelectorAll('.cell-number');
numbers.forEach(num => {
num.style.animation = 'number-pulse 0.8s ease-in-out infinite alternate';
num.style.color = '#ff6b6b';
num.style.borderColor = '#ffd166';
num.style.textShadow = '0 2px 6px rgba(255, 107, 107, 0.5)';
num.style.background = 'linear-gradient(145deg, #ffd166, #ff6b6b)';
});
container.style.backgroundImage = 'radial-gradient(circle at 20% 80%, #ff6b6b 2px, transparent 2px), radial-gradient(circle at 80% 20%, #ffd166 2px, transparent 2px), radial-gradient(circle at 40% 40%, #06d6a0 2px, transparent 2px)';
container.style.backgroundSize = '20px 20px';
container.style.animation = 'holiday-sparkle 2s linear infinite';
return;
}
const days = Math.floor(diff / (1000 * 60 * 60 * 24));
const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((diff % (1000 * 60)) / 1000);
document.getElementById('sidebar-days').textContent = String(days).padStart(2, '0');
document.getElementById('sidebar-hours').textContent = String(hours).padStart(2, '0');
document.getElementById('sidebar-minutes').textContent = String(minutes).padStart(2, '0');
document.getElementById('sidebar-seconds').textContent = String(seconds).padStart(2, '0');
const icon = document.querySelector('.newyear-icon');
const title = document.querySelector('.sidebar-title');
const bulbs = document.querySelectorAll('.garland-bulb');
if (days < 1) {
icon.textContent = '🎆';
icon.style.color = '#ff6b6b';
icon.style.textShadow = '0 2px 6px rgba(255, 107, 107, 0.5)';
title.style.color = '#ff6b6b';
bulbs.forEach(bulb => {
bulb.style.animation = 'bulb-flicker 0.8s infinite alternate';
});
const numbers = document.querySelectorAll('.cell-number');
numbers.forEach(num => {
num.style.animation = 'number-pulse 0.5s ease-in-out infinite alternate';
num.style.borderColor = '#ff6b6b';
num.style.color = '#ff6b6b';
});
} else if (days < 7) {
icon.textContent = '⏳';
icon.style.color = '#6c63ff';
icon.style.textShadow = '0 2px 6px rgba(108, 99, 255, 0.4)';
bulbs.forEach(bulb => {
bulb.style.animation = 'bulb-flicker 1.2s infinite alternate';
});
} else if (days < 30) {
icon.textContent = '🎄';
icon.style.color = '#06d6a0';
icon.style.textShadow = '0 2px 6px rgba(6, 214, 160, 0.4)';
bulbs.forEach((bulb, index) => {
bulb.style.animation = 'bulb-flicker ' + (1.5 + index * 0.1) + 's infinite alternate';
});
} else {
// Более месяца
icon.textContent = '✨';
icon.style.color = '#007bff';
icon.style.textShadow = '0 2px 6px rgba(0, 123, 255, 0.4)';
bulbs.forEach(bulb => {
bulb.style.animation = 'bulb-flicker 2s infinite alternate';
});
}
}
updateSidebarCountdown();
let countdownInterval = setInterval(updateSidebarCountdown, 1000);
document.addEventListener('visibilitychange', function() {
if (document.hidden) {
clearInterval(countdownInterval);
} else {
updateSidebarCountdown();
countdownInterval = setInterval(updateSidebarCountdown, 1000);
}
});
document.addEventListener('DOMContentLoaded', function() {
const cells = document.querySelectorAll('.countdown-cell');
cells.forEach(cell => {
cell.addEventListener('mouseenter', function() {
const number = this.querySelector('.cell-number');
number.style.transform = 'scale(1.05)';
number.style.zIndex = '10';
number.style.boxShadow =
'inset 0 0 20px rgba(255, 107, 107, 0.2), ' +
'0 0 30px rgba(255, 107, 107, 0.3), ' +
'0 6px 15px rgba(0, 0, 0, 0.2)';
});
cell.addEventListener('mouseleave', function() {
const number = this.querySelector('.cell-number');
number.style.transform = 'scale(1)';
number.style.zIndex = '1';
number.style.boxShadow = '';
});
});
const bulbs = document.querySelectorAll('.garland-bulb');
bulbs.forEach((bulb, index) => {
bulb.style.animationDelay = (index * 0.2) + 's';
});
});
</xf:js>