class CustomNavbar extends HTMLElement { connectedCallback() { this.attachShadow({ mode: 'open' }); this.shadowRoot.innerHTML = `
`; this.initNavbarScroll(); this.initMobileMenu(); } initNavbarScroll() { const navbar = this.shadowRoot.querySelector('.navbar'); window.addEventListener('scroll', () => { if (window.scrollY > 100) { navbar.classList.add('navbar-scrolled'); } else { navbar.classList.remove('navbar-scrolled'); } }); } initMobileMenu() { const mobileMenuButton = this.shadowRoot.querySelector('[data-mobile-menu]'); const mobileMenu = this.shadowRoot.querySelector('[data-mobile-menu-content]'); if (mobileMenuButton && mobileMenu) { mobileMenuButton.addEventListener('click', () => { mobileMenu.classList.toggle('hidden'); }); } } } customElements.define('custom-navbar', CustomNavbar);
Digital Bison - Цифровая Зуботехническая Лаборатория

DIGITAL
BISON

Помогаем стоматологам создавать красивые улыбки с помощью передовых цифровых технологий

Цифровые технологии

Полный цикл производства

Фрезер циркония

Почему выбирают нас

Многолетний опыт и передовые технологии для создания совершенных стоматологических конструкций

На связи 24/7

Всегда доступны для консультаций и решения вопросов

Опыт и мастерство

Профессионалы с многолетним опытом работы

Бесплатная доставка

Доставляем работы нашим курьером по Санкт-Петербургу

Наши услуги

E.Max конструкции

От 4500 руб. • Срок 4 дня

Подробнее →

Металлокерамика CAD/CAM

От 4000 руб. • Срок 4 дня

Подробнее →

Циркониевые конструкции

От 5500 руб. • Срок 4 дня

Подробнее →

Парк оборудования

Сканер Medit T310

Точность сканирования 9 мкм

Фрезерный станок Bloomden

Высокоточная обработка материалов

3D принтер Asiga MAX UV

Разрешение печати 27 микрон

11

Высококлассных специалистов

8457

Довольных пациентов

24/7

Бесплатная доставка по СПб

Контакты

Свяжитесь с нами

Мы готовы ответить на все ваши вопросы

г. Санкт-Петербург, Расстанная улица, 3Б
// Объединяем все JS-файлы // Содержимое navbar.js // Содержимое footer.js // Оригинальный код script.js // Dark mode toggle functionality function toggleDarkMode() { const html = document.documentElement; html.classList.toggle('dark'); localStorage.setItem('darkMode', html.classList.contains('dark')); } // Initialize dark mode based on user preference function initDarkMode() { const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; const storedPreference = localStorage.getItem('darkMode'); if (storedPreference === 'false') { document.documentElement.classList.remove('dark'); } else if (storedPreference === 'true' || prefersDark) { document.documentElement.classList.add('dark'); } } // Smooth scrolling for anchor links function initSmoothScroll() { document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function (e) { e.preventDefault(); const target = document.querySelector(this.getAttribute('href')); if (target) { target.scrollIntoView({ behavior: 'smooth', block: 'start' }); } }); }); } // Intersection Observer for animations function initScrollAnimations() { const observerOptions = { threshold: 0.1, rootMargin: '0px 0px -50px 0px' }; const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('section-visible'); } }); }, observerOptions); // Observe all sections with the fade-in class document.querySelectorAll('.section-fade-in').forEach(section => { observer.observe(section); }); } // Equipment data const equipmentData = [ { name: "Сканер Medit T310", description: "Точность сканирования 9 мкм, полная дуга за 18 секунд", icon: "scan", image: "https://static.photos/technology/640x360/1" }, { name: "Фрезерный станок Bloomden X5", description: "Премиальный уровень, точная обработка материалов", icon: "tool", image: "https://static.photos/technology/640x360/2" }, { name: "3D принтер Asiga MAX UV", description: "Разрешение печати 27 микрон, ювелирная точность", icon: "printer", image: "https://static.photos/technology/640x360/3" } ]; // Services data const servicesData = [ { title: "E.Max конструкции", price: "от 4500 руб.", duration: "4 дня", link: "/emax" }, { title: "Металлокерамика CAD/CAM", price: "от 4000 руб.", duration: "4 дня", link: "/metal-cad-cam" }, { title: "Циркониевые конструкции", price: "от 5500 руб.", duration: "4 дня", link: "/bezmetall-ceramic-zro2" } ]; // Form handling function initFormHandling() { const forms = document.querySelectorAll('form'); forms.forEach(form => { form.addEventListener('submit', function(e) { e.preventDefault(); // Add form submission logic here console.log('Form submitted'); }); }); } // Statistics counter animation function animateCounters() { const counters = document.querySelectorAll('.counter'); const speed = 200; counters.forEach(counter => { const target = +counter.innerText; const increment = target / speed; let current = 0; const updateCounter = () => { if (current < target) { current += increment; counter.innerText = Math.ceil(current); setTimeout(updateCounter, 1); } else { counter.innerText = target; } }; updateCounter(); }); } // Mobile menu functionality function initMobileMenu() { const mobileMenuButton = document.querySelector('[data-mobile-menu]'); const mobileMenu = document.querySelector('[data-mobile-menu-content]'); if (mobileMenuButton && mobileMenu) { mobileMenuButton.addEventListener('click', () => { mobileMenu.classList.toggle('hidden'); mobileMenu.classList.add('slide-down'); }); } } // Initialize everything when DOM is loaded document.addEventListener('DOMContentLoaded', function() { initDarkMode(); initSmoothScroll(); initScrollAnimations(); initFormHandling(); initMobileMenu(); // Re-initialize feather icons after dynamic content feather.replace(); }); // Add event listener for window resize to handle mobile menu window.addEventListener('resize', function() { if (window.innerWidth > 768) { const mobileMenu = document.querySelector('[data-mobile-menu-content]'); if (mobileMenu) { mobileMenu.classList.add('hidden'); } } }); // Performance optimization: Debounce function function debounce(func, wait, immediate) { let timeout; return function() { const context = this, args = arguments; const later = function() { timeout = null; if (!immediate) func.apply(context, args); }; const callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) func.apply(context, args); }; } // Lazy loading for images function initLazyLoading() { const imageObserver = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { const img = entry.target; img.src = img.dataset.src; img.classList.remove('lazy'); observer.unobserve(img); } }); }); document.querySelectorAll('img[data-src]').forEach(img => { imageObserver.observe(img); }); } // Add to existing DOMContentLoaded event listener document.addEventListener('DOMContentLoaded', function() { // ... existing code ... initLazyLoading(); });
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap'); * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Inter', sans-serif; scroll-behavior: smooth; } /* Custom scrollbar for dark theme */ ::-webkit-scrollbar { width: 8px; } ::-webkit-scrollbar-track { background: #1f2937; } ::-webkit-scrollbar-thumb { background: #4b5563; border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: #6b7280; } /* Gradient animations */ @keyframes gradient { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } .gradient-bg { background: linear-gradient(-45deg, #0ea5e9, #0369a1, #1e293b, #0f172a); background-size: 400% 400%; animation: gradient 15s ease infinite; } /* Floating animation */ @keyframes float { 0%, 100% { transform: translateY(0px); } 50% { transform: translateY(-20px); } } .float-animation { animation: float 6s ease-in-out infinite; } /* Pulse animation for CTAs */ @keyframes pulse-glow { 0%, 100% { box-shadow: 0 0 20px rgba(14, 165, 233, 0.3); } 50% { box-shadow: 0 0 30px rgba(14, 165, 233, 0.6); } } .pulse-glow { animation: pulse-glow 2s ease-in-out infinite; } /* Glass morphism effect */ .glass { background: rgba(255, 255, 255, 0.1); backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.1); } /* Text gradient */ .text-gradient { background: linear-gradient(135deg, #0ea5e9 0%, #38bdf8 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } /* Hover effects */ .hover-lift { transition: all 0.3s ease; } .hover-lift:hover { transform: translateY(-5px); } /* Loading animation */ @keyframes spin { to { transform: rotate(360deg); } } .loading-spinner { animation: spin 1s linear infinite; } /* Section transitions */ .section-fade-in { opacity: 0; transform: translateY(30px); transition: all 0.6s ease; } .section-visible { opacity: 1; transform: translateY(0); } /* Mobile menu animation */ @keyframes slideDown { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } .slide-down { animation: slideDown 0.3s ease-out; } /* Focus states for accessibility */ .focus-primary:focus { outline: 2px solid #0ea5e9; outline-offset: 2px; } /* Custom button styles */ .btn-primary { background: linear-gradient(135deg, #0ea5e9 0%, #0284c7 100%); transition: all 0.3s ease; } .btn-primary:hover { transform: translateY(-2px); box-shadow: 0 10px 25px rgba(14, 165, 233, 0.4); } /* Equipment card hover effects */ .equipment-card { transition: all 0.3s ease; position: relative; overflow: hidden; } .equipment-card::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(14, 165, 233, 0.1), transparent); transition: left 0.5s ease; } .equipment-card:hover::before { left: 100%; } /* Statistics counter animation */ .counter { font-variant-numeric: tabular-nums; } /* Form input styles */ .form-input { transition: all 0.3s ease; } .form-input:focus { transform: scale(1.02); }