Help
RSS
API
Feed
Maltego
Contact
Domain > bacsiduong.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2023-03-31
104.21.63.145
(
ClassC
)
2025-12-10
172.67.146.219
(
ClassC
)
Port 443
HTTP/1.1 200 OKDate: Wed, 10 Dec 2025 04:40:49 GMTContent-Type: text/htmlTransfer-Encoding: chunkedConnection: keep-aliveServer: cloudflareLast-Modified: Mon, 24 Nov 2025 04:03:02 GMTNel: {report_to:cf-nel,success_fraction:0.0,max_age:604800}vary: accept-encodingReport-To: {group:cf-nel,max_age:604800,endpoints:{url:https://a.nel.cloudflare.com/report/v4?s7uqSvijRnC2os%2Fo6OPOPH4Ra2z5YtfKcOCYL9DwYbjd3EdOnUOBS%2BFBGL8AKWp89L2N4AT9ygif3xkTkj2MIpUBuq%2B2rX8bUxPQNrLmb}}cf-cache-status: DYNAMICCF-RAY: 9aba10fddc673741-PDXalt-svc: h3:443; ma86400 !DOCTYPE html>html langvi>head> link relpreconnect hrefhttps://fonts.googleapis.com> link relpreconnect hrefhttps://fonts.gstatic.com crossorigin> link relpreconnect hrefhttps://cdn.jsdelivr.net crossorigin> link relpreconnect hrefhttps://cdnjs.cloudflare.com crossorigin> !---preload font --> link relpreload hrefhttps://fonts.googleapis.com/css2?familyRoboto:wght@400;500;700&familyPlayfair+Display:wght@400;700&displayswap asstyle onloadthis.onloadnull;this.relstylesheet> noscript> link relstylesheet hrefhttps://fonts.googleapis.com/css2?familyRoboto:wght@400;500;700&familyPlayfair+Display:wght@400;700&displayswap> /noscript> !-- Basic Meta Tags --> meta charsetUTF-8> meta namegoogle-adsense-account contentca-pub-3492845998447343> meta nameviewport contentwidthdevice-width, initial-scale1.0> title>Bác sĩ Da liễu Dương – Điều trị mụn, nám, sẹo | Hà Nội/title> meta namedescription contentBác sĩ Da liễu Dương: khám, tư vấn và điều trị mụn, nám, sẹo rỗ an toàn; Botox, Filler, Mesotherapy tự nhiên. Phác đồ cá nhân hoá, nhẹ nhàng, dễ theo. Đặt lịch tại Hà Nội.> meta namekeywords contentbác sĩ da liễu, điều trị mụn, điều trị nám, sẹo rỗ, rối loạn sắc tố, botox, filler, mesotherapy, thẩm mỹ da, Hà Nội, Dr. Dương> meta nameauthor contentDr. Dương> !-- Open Graph Meta Tags for Social Media --> meta propertyog:title contentBác sĩ Da liễu Dương – Điều trị mụn, nám, sẹo | Hà Nội> meta propertyog:description contentKhám, tư vấn và điều trị mụn, nám, sẹo rỗ an toàn; Botox, Filler, Mesotherapy tự nhiên. Phác đồ cá nhân hoá, nhẹ nhàng, dễ theo. Đặt lịch tại Hà Nội.> meta propertyog:image contenthttps://bacsiduong.com/images/drduong.webp> meta propertyog:url contenthttps://bacsiduong.com/> meta propertyog:type contentwebsite> !-- Twitter Card Meta Tags --> meta nametwitter:card contentsummary_large_image> meta nametwitter:title contentBác sĩ Da liễu Dương – Điều trị mụn, nám, sẹo | Hà Nội> meta nametwitter:description contentĐiều trị mụn, nám, sẹo rỗ an toàn; Botox, Filler, Mesotherapy tự nhiên. Phác đồ cá nhân hoá, nhẹ nhàng, dễ theo.> meta nametwitter:image contenthttps://bacsiduong.com/images/drduong.webp> !-- Structured Data (JSON-LD) for Local Business --> script typeapplication/ld+json> { @context: https://schema.org, @type: Physician, name: Bác sĩ Da liễu Dương, image: https://bacsiduong.com/images/drduong.webp, @id: https://bacsiduong.com/, url: https://bacsiduong.com/, telephone: +84-344-138-201, medicalSpecialty: Dermatology, priceRange: $$, areaServed: Hà Nội, Việt Nam, address: { @type: PostalAddress, streetAddress: An Khánh, addressLocality: Hà Nội, postalCode: 100000, addressCountry: VN }, geo: { @type: GeoCoordinates, latitude: 21.027763, longitude: 105.834160 }, openingHoursSpecification: { @type: OpeningHoursSpecification, dayOfWeek: Monday, Tuesday, Wednesday, Thursday, Friday , opens: 08:00, closes: 18:00 }, sameAs: https://www.facebook.com/sunny.el.3, https://www.instagram.com/sunny.el.3 } /script> script typeapplication/ld+json> { @context: https://schema.org, @type: FAQPage, mainEntity: { @type: Question, name: Điều trị mụn mất bao lâu?, acceptedAnswer: { @type: Answer, text: Tuỳ mức độ (mụn viêm, mụn ẩn, mụn nội tiết) và tuân thủ phác đồ, thường cần 6–12 tuần để cải thiện rõ, 3–6 tháng để ổn định và hạn chế tái phát. } }, { @type: Question, name: Các dịch vụ có an toàn không?, acceptedAnswer: { @type: Answer, text: Bác sĩ trực tiếp thăm khám và chỉ định; vật tư – dược chất có nguồn gốc minh bạch; quy trình vô khuẩn nghiêm ngặt và giải thích – đồng ý thủ thuật đầy đủ. } }, { @type: Question, name: Tôi cần chuẩn bị gì trước khi đến khám?, acceptedAnswer: { @type: Answer, text: Không trang điểm dày trước khi khám; mang theo đơn thuốc/sản phẩm đang dùng; nếu làm thủ thuật, vui lòng ngưng retinoid/acid 2–3 ngày và thông báo tiền sử dị ứng. } } } /script> !-- Bootstrap 5 CSS --> link hrefhttps://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css relstylesheet> !-- Font Awesome 6 --> link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css crossoriginanonymous referrerpolicyno-referrer /> !-- AOS Animation Library CSS --> link hrefhttps://cdnjs.cloudflare.com/ajax/libs/aos/2.3.4/aos.css relstylesheet> !-- Google AdSense --> script data-ad-clientca-pub-3492845998447343 async srchttps://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js>/script> !-- Google Tag Manager --> script>(function (w, d, s, l, i) { wl wl || ; wl.push({ gtm.start: new Date().getTime(), event: gtm.js }); var f d.getElementsByTagName(s)0, j d.createElement(s), dl l ! dataLayer ? &l + l : ; j.async true; j.src https://www.googletagmanager.com/gtm.js?id + i + dl; f.parentNode.insertBefore(j, f); })(window, document, script, dataLayer, GTM-NH799JDZ);/script> !-- End Google Tag Manager --> !-- Custom CSS --> style> /* Global Styles */ :root { /* Improved Palette for Readability & Female Demographics (15-40) */ /* Primary: Deep Teal - High contrast, trustworthy, calming, medical */ --primary-color: #006D77; /* Secondary: Soft Sage - Balancing and natural */ --secondary-color: #83C5BE; /* Text: Dark Slate - Sharp and clear for reading */ --text-color: #2D3436; /* Background: Warm White - Reduces harsh blue light */ --light-bg: #FFFAF5; /* Dark BG: Professional footer background */ --dark-bg: #264653; /* CTA: Warm Coral/Terracotta - Strong visual cue, feminine, energetic */ --cta-color: #E76F51; --glass-bg: rgba(255, 255, 255, 0.95); /* High opacity for max readability */ --glass-border: rgba(255, 255, 255, 0.8); --glass-shadow: rgba(0, 109, 119, 0.1); /* Subtle Teal shadow */ } body { font-family: Roboto, sans-serif; line-height: 1.8; color: var(--text-color); background-color: var(--light-bg); background: linear-gradient(180deg, #FFFAF5 0%, #F0F4F8 100%); margin: 0; padding: 0; min-height: 100vh; } h1, h2, h3, h4, h5, h6 { font-family: Roboto, sans-serif; letter-spacing: 0; color: var(--primary-color); /* Brand color for headings */ font-weight: 700; } /* Navbar Styles */ .navbar { padding: 15px 0; transition: all 0.4s ease; background: rgba(255, 255, 255, 0.95) !important; /* Solid clean background */ backdrop-filter: blur(12px); border-bottom: 1px solid rgba(0, 0, 0, 0.05); box-shadow: 0 2px 15px rgba(0, 0, 0, 0.03); } .navbar.scrolled { background: rgba(255, 255, 255, 0.95) !important; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); } .navbar-brand { font-size: 1.8rem; font-weight: 700; color: var(--primary-color) !important; /* Brand color for logo */ text-transform: uppercase; letter-spacing: 1px; } /* Text color adjustment for navbar links */ .navbar-light .navbar-brand, .navbar-dark .navbar-brand, .navbar.scrolled .navbar-brand { color: var(--primary-color) !important; } .navbar-nav .nav-link { color: var(--text-color) !important; /* Dark text for readability */ margin-left: 25px; font-weight: 500; position: relative; padding: 5px 0; font-size: 0.95rem; text-transform: uppercase; } .navbar-nav .nav-link::after { content: ; position: absolute; width: 0; height: 2px; bottom: 0; left: 0; background-color: var(--primary-color); transition: width 0.3s ease; } .navbar-nav .nav-link:hover { color: var(--primary-color) !important; } /* Hero Section */ #hero { width: 100%; padding: 140px 0 80px 0; background: linear-gradient(135deg, rgba(0, 109, 119, 0.03), rgba(131, 197, 190, 0.05)); position: relative; overflow: hidden; } #hero::before { content: ; position: absolute; top: -50%; right: -20%; width: 60%; height: 150%; background: radial-gradient(circle, rgba(231, 111, 81, 0.08) 0%, rgba(255,255,255,0) 70%); transform: rotate(-15deg); z-index: 0; } #hero .container { position: relative; z-index: 1; } #hero h1 { margin: 0 0 10px 0; font-size: 3.5rem; font-weight: 700; line-height: 1.2; color: var(--text-color); } #hero h1 span { color: var(--primary-color); } #hero h2 { color: var(--secondary-color); margin-bottom: 30px; font-size: 1.5rem; font-weight: 500; } #hero p { color: var(--text-color); margin-bottom: 40px; font-size: 1.15rem; max-width: 600px; opacity: 0.9; } #hero .btn-get-started { font-family: Roboto, sans-serif; font-weight: 500; font-size: 16px; letter-spacing: 1px; display: inline-block; padding: 12px 32px; border-radius: 50px; transition: 0.5s; color: #fff; background: var(--cta-color); /* Pop color for main action */ text-decoration: none; box-shadow: 0 4px 15px rgba(231, 111, 81, 0.3); } #hero .btn-get-started:hover { background: #d65a3b; transform: translateY(-3px); box-shadow: 0 8px 25px rgba(231, 111, 81, 0.4); } #hero .btn-watch-video { font-size: 16px; display: inline-block; padding: 12px 32px; border-radius: 50px; transition: 0.5s; margin-left: 25px; color: var(--primary-color); border: 2px solid var(--primary-color); text-decoration: none; font-weight: 500; background: transparent; } #hero .btn-watch-video:hover { background: var(--primary-color); color: #fff; } #hero .hero-img { text-align: right; } #hero .hero-img img { width: 80%; border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; box-shadow: 0 15px 40px rgba(0, 0, 0, 0.08); animation: morph 8s ease-in-out infinite; border: 5px solid rgba(255, 255, 255, 0.8); } @keyframes morph { 0% { border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; } 25% { border-radius: 58% 42% 75% 25% / 76% 46% 54% 24%; } 50% { border-radius: 50% 50% 33% 67% / 55% 27% 73% 45%; } 75% { border-radius: 33% 67% 58% 42% / 63% 68% 32% 37%; } 100% { border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; } } @media (max-width: 991px) { #hero { text-align: center; padding: 100px 0 40px 0; /* Reduced padding */ } #hero .hero-img { text-align: center; margin-top: 30px; } #hero .hero-img img { width: 70%; /* Slightly larger image */ max-width: 300px; } #hero h1 { font-size: 2.2rem; /* Slightly smaller for better fit */ } #hero .d-flex { justify-content: center; flex-wrap: wrap; gap: 15px; } #hero .btn-get-started, #hero .btn-watch-video { margin: 0; /* Reset margins for gap handling */ width: 100%; /* Full width on very small screens */ max-width: 250px; display: flex; justify-content: center; align-items: center; } #hero p { margin: 0 auto 20px auto; font-size: 1.05rem; } } /* Why Choose Us Section */ #why-us { padding: 80px 0; background: #fff; } .why-box { padding: 30px; background: var(--primary-color); color: #fff; border-radius: 10px; } .why-box h3 { font-weight: 700; font-size: 34px; margin-bottom: 30px; } .why-box p { margin-bottom: 30px; } .why-box .more-btn { display: inline-block; background: rgba(255, 255, 255, 0.2); padding: 6px 30px 8px 30px; color: #fff; border-radius: 50px; transition: all ease-in-out 0.4s; text-decoration: none; } .why-box .more-btn:hover { color: var(--primary-color); background: #fff; } .icon-box { text-align: center; background: #fff; padding: 40px 30px; width: 100%; height: 100%; border: 1px solid #eef0ef; border-radius: 10px; transition: all 0.3s ease-in-out; box-shadow: 0px 2px 15px rgba(0, 0, 0, 0.05); } .icon-box i { color: var(--primary-color); font-size: 40px; margin-bottom: 15px; background: rgba(0, 109, 119, 0.1); width: 80px; height: 80px; line-height: 80px; border-radius: 50%; transition: 0.3s; } .icon-box:hover { border-color: #fff; box-shadow: 0px 10px 30px rgba(0, 0, 0, 0.1); transform: translateY(-10px); } .icon-box:hover i { color: #fff; background: var(--primary-color); } .icon-box h4 { font-size: 20px; font-weight: 700; margin: 0 0 15px 0; color: var(--text-color); } .icon-box p { font-size: 15px; color: #848484; } /* Updated About Section */ #about { padding: 100px 0; background: var(--light-bg); position: relative; overflow: hidden; color: var(--text-color); } #about::before { display: none; /* Remove the decorative SVG if it doesnt fit the clean look */ } #about h2 { text-align: center; margin-bottom: 50px; color: var(--primary-color); font-size: 3rem; font-weight: 700; } #about p { max-width: 900px; margin: 0 auto; font-size: 1.25rem; line-height: 1.8; margin-top: 30px; color: var(--text-color); } /* Section Styles */ #services, #testimonials, #contact, #recent-activities, #faq { padding: 30px 0; } /* Ensure section titles arent hidden behind fixed navbar when navigating via hash */ #about, #services, #testimonials, #recent-activities, #faq, #contact { scroll-margin-top: 80px; /* navbar height + spacing */ } @media (max-width: 768px) { #about, #services, #testimonials, #recent-activities, #faq, #contact { scroll-margin-top: 110px; /* mobile navbar + extra spacing for mobile layout */ } } #services h2, #testimonials h2, #recent-activities h2, #contact h2, #faq h2 { text-align: center; margin-bottom: 50px; color: var(--primary-color); font-size: 2.8rem; font-weight: 700; } /* Services Section */ #services { background: linear-gradient(135deg, rgba(255, 255, 255, 0.9), rgba(248, 249, 250, 0.9)); backdrop-filter: blur(10px); } .service-item { background: rgba(255, 255, 255, 0.7); backdrop-filter: blur(10px); border: 1px solid var(--glass-border); border-radius: 20px; padding: 40px 30px; transition: all 0.4s ease; box-shadow: 0 8px 32px 0 var(--glass-shadow); text-align: center; } .service-item:hover { transform: translateY(-15px); background: rgba(255, 255, 255, 0.9); box-shadow: 0 15px 45px 0 var(--glass-shadow); } .service-item > i { font-size: 3rem; color: var(--secondary-color); margin-bottom: 25px; transition: transform 0.4s ease; } .service-item:hover > i { transform: scale(1.1); } /* Small arrow in Book now link */ .service-item .text-primary i { font-size: 0.9rem; margin-left: 5px; transition: transform 0.3s ease; } .service-item:hover .text-primary i { transform: translateX(5px); } .service-item h3 { margin-bottom: 20px; color: var(--text-color); font-weight: 600; } .service-item p { color: #555; font-size: 1rem; } /* Testimonials Section */ #testimonials { background: linear-gradient(135deg, rgba(248, 249, 250, 0.9), rgba(255, 255, 255, 0.9)); backdrop-filter: blur(10px); position: relative; } .testimonial-item { background: rgba(255, 255, 255, 0.7); backdrop-filter: blur(10px); border: 1px solid var(--glass-border); border-radius: 20px; padding: 40px; margin: 20px; transition: all 0.4s ease; box-shadow: 0 8px 32px 0 var(--glass-shadow); } .testimonial-item:hover { transform: translateY(-10px); background: rgba(255, 255, 255, 0.9); box-shadow: 0 15px 45px 0 var(--glass-shadow); } .testimonial-item img { width: 120px; height: 120px; border-radius: 50%; object-fit: cover; margin-bottom: 25px; border: 4px solid var(--primary-color); padding: 5px; } .testimonial-item p { font-style: italic; color: var(--text-color); margin-bottom: 20px; font-size: 1.1rem; line-height: 1.8; } .testimonial-item h4 { color: #333; font-weight: 700; } /* Contact Section */ #contact { background: linear-gradient(135deg, rgba(248, 249, 250, 0.9), rgba(255, 255, 255, 0.9)); backdrop-filter: blur(10px); position: relative; } .contact-info { max-width: 700px; margin: 0 auto; text-align: center; background: rgba(255, 255, 255, 0.7); backdrop-filter: blur(10px); border: 1px solid var(--glass-border); padding: 50px; border-radius: 20px; box-shadow: 0 8px 32px 0 var(--glass-shadow); } .contact-info .info-item { margin-bottom: 30px; font-size: 1.2rem; color: var(--text-color); display: flex; align-items: center; justify-content: center; transition: transform 0.3s ease; } .contact-info .info-item:hover { transform: translateX(10px); } .contact-info .info-item i { margin-right: 15px; color: var(--primary-color); font-size: 1.8rem; } .contact-info .qr-code { margin-top: 20px; } .contact-info .qr-code img { width: 150px; height: 150px; } /* Footer */ footer { background: rgba(52, 58, 64, 0.9); backdrop-filter: blur(10px); border-top: 1px solid var(--glass-border); box-shadow: 0 -8px 32px 0 var(--glass-shadow); color: #fff; padding: 30px 0; text-align: center; } footer .social-icons a { color: #fff; margin: 0 15px; font-size: 1.8rem; transition: all 0.3s ease; opacity: 0.8; } footer .social-icons a:hover { color: var(--secondary-color); opacity: 1; transform: translateY(-5px); } /* Touch-Friendly Button Styles */ .btn, .nav-link, .contact-button, .quick-contact-btn { min-height: 44px; min-width: 44px; position: relative; overflow: hidden; } /* Touch Feedback Animation */ .touch-feedback { position: relative; overflow: hidden; } .touch-feedback::before { content: ; position: absolute; top: 50%; left: 50%; width: 0; height: 0; border-radius: 50%; background: rgba(255, 255, 255, 0.3); transform: translate(-50%, -50%); transition: width 0.3s ease, height 0.3s ease; } .touch-feedback:active::before { width: 100px; height: 100px; } /* Enhanced Mobile Navigation */ .navbar-nav .nav-link { padding: 12px 20px; margin: 5px 0; border-radius: 8px; transition: all 0.3s ease; } .navbar-nav .nav-link:hover { background: rgba(255, 255, 255, 0.1); transform: translateX(5px); } /* Touch-friendly service items */ .service-item { min-height: 200px; cursor: pointer; transition: all 0.3s ease; } .service-item:active { transform: translateY(-5px) scale(0.98); } /* Enhanced Contact Button */ .contact-button { min-height: 56px; font-size: 1.1rem; border-radius: 28px; box-shadow: 0 4px 12px rgba(253, 126, 20, 0.3); } .contact-button:active { transform: translateY(1px); box-shadow: 0 2px 6px rgba(253, 126, 20, 0.4); } /* Hamburger Menu Animation */ .navbar-toggler { border: none; padding: 8px; background: rgba(255, 255, 255, 0.1); border-radius: 8px; transition: all 0.3s ease; } .navbar-toggler:focus { box-shadow: none; } .navbar-toggler-icon { background-image: none; width: 24px; height: 18px; position: relative; transition: all 0.3s ease; } .navbar-toggler-icon::before, .navbar-toggler-icon::after, .navbar-toggler-icon { background: #fff; height: 2px; transition: all 0.3s ease; } .navbar-toggler-icon::before, .navbar-toggler-icon::after { content: ; position: absolute; width: 100%; left: 0; } .navbar-toggler-icon::before { top: -6px; } .navbar-toggler-icon::after { bottom: -6px; } /* Hamburger to X animation */ .navbar-toggleraria-expandedtrue .navbar-toggler-icon { background: transparent; } .navbar-toggleraria-expandedtrue .navbar-toggler-icon::before { transform: rotate(45deg); top: 0; } .navbar-toggleraria-expandedtrue .navbar-toggler-icon::after { transform: rotate(-45deg); bottom: 0; } /* Swipe Gesture Support */ .carousel-inner { touch-action: pan-y pinch-zoom; } /* Sticky Footer for Mobile */ .mobile-sticky-footer { display: none; position: fixed; bottom: 0; left: 0; right: 0; background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(10px); border-top: 1px solid rgba(0, 0, 0, 0.1); padding: 15px; z-index: 1030; box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1); } .mobile-footer-actions { display: flex; justify-content: space-around; align-items: center; } .mobile-footer-btn { flex: 1; margin: 0 5px; padding: 12px; border: none; border-radius: 8px; font-weight: 600; text-decoration: none; text-align: center; transition: all 0.3s ease; } .mobile-footer-btn.primary { background: var(--cta-color); color: white; } .mobile-footer-btn.secondary { background: var(--secondary-color); color: white; } @media (max-width: 768px) { .mobile-sticky-footer { display: block; } body { padding-bottom: 80px; } } /* Zalo Floating Button */ .zalo-button { position: fixed; bottom: 100px; right: 30px; z-index: 1000; width: 60px; height: 60px; background: #0068FF; border-radius: 50%; box-shadow: 0 4px 15px rgba(0, 104, 255, 0.3); display: flex; align-items: center; justify-content: center; transition: all 0.3s ease; animation: pulse 2s infinite; } .zalo-button:hover { transform: scale(1.1); box-shadow: 0 6px 20px rgba(0, 104, 255, 0.4); } .zalo-button img { width: 35px; height: 35px; } @keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(0, 104, 255, 0.7); } 70% { box-shadow: 0 0 0 15px rgba(0, 104, 255, 0); } 100% { box-shadow: 0 0 0 0 rgba(0, 104, 255, 0); } } @media (max-width: 768px) { .zalo-button { bottom: 160px; /* Adjusted to not overlap with back to top */ right: 20px; width: 50px; height: 50px; } .zalo-button img { width: 30px; height: 30px; } } /* Enhanced Contact Form Styles */ .contact-form-card { background: rgba(255, 255, 255, 0.9); backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 20px; padding: 40px; box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.1); margin-bottom: 40px; } /* Mobile Content Optimization */ .mobile-text-block { line-height: 1.8; margin-bottom: 20px; } .collapsible-content { max-height: 200px; overflow: hidden; transition: max-height 0.3s ease; position: relative; } .collapsible-content.expanded { max-height: none; } .read-more-btn { background: var(--primary-color); border: none; color: white; padding: 8px 20px; border-radius: 20px; font-size: 0.9rem; transition: all 0.3s ease; margin-top: 15px; } .read-more-btn:hover { transform: translateY(-2px); background: var(--cta-color); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); } /* Enhanced mobile typography */ @media (max-width: 768px) { /* Additional brand color fixes for mobile */ .navbar .navbar-brand, .navbar-expand-lg .navbar-brand { color: #fff !important; opacity: 1 !important; } body { font-size: 16px; line-height: 1.7; } h1 { font-size: 2.5rem; line-height: 1.2; margin-bottom: 1.5rem; } h2 { font-size: 2.2rem; line-height: 1.3; margin-bottom: 1.5rem; } h3 { font-size: 1.8rem; line-height: 1.3; margin-bottom: 1rem; } p, li { font-size: 1.1rem; line-height: 1.8; margin-bottom: 1.2rem; } /* Better section spacing */ section { padding: 60px 0; } .container { padding-left: 25px; padding-right: 25px; } /* Service items mobile optimization */ .service-item { padding: 40px 25px; margin-bottom: 30px; } .service-item h3 { font-size: 1.6rem; margin-bottom: 15px; } .service-item p { font-size: 1rem; line-height: 1.7; } /* Activity items spacing */ .activity-item { padding: 30px 20px; margin-bottom: 35px; } .activity-item h3 { font-size: 1.5rem; margin-bottom: 15px; } /* FAQ mobile optimization */ .accordion-button { font-size: 1.1rem; padding: 20px; } .accordion-body { font-size: 1rem; line-height: 1.7; padding: 20px; } /* Testimonial optimization */ .testimonial-item p, .picture-item p { font-size: 1rem; line-height: 1.6; } } .form-floating > label { color: #6c757d; font-weight: 500; } .form-control { border: 2px solid #e9ecef; border-radius: 12px; padding: 12px 16px; transition: all 0.3s ease; } .form-control:focus { border-color: var(--primary-color); box-shadow: 0 0 0 0.2rem rgba(0, 109, 119, 0.25); background-color: rgba(0, 109, 119, 0.02); } .form-control.is-valid { border-color: #28a745; background-color: rgba(40, 167, 69, 0.02); } .form-control.is-invalid { border-color: #dc3545; background-color: rgba(220, 53, 69, 0.02); } .btn-submit-form { background: linear-gradient(135deg, #007bff, #17a2b8); border: none; padding: 15px 30px; font-weight: 600; transition: all 0.3s ease; border-radius: 12px; min-height: 56px; } .btn-submit-form:hover { transform: translateY(-2px); box-shadow: 0 8px 25px rgba(0, 123, 255, 0.4); } .quick-contact-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px; margin-top: 40px; } .contact-info-item { background: rgba(255, 255, 255, 0.7); backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 15px; padding: 25px; text-align: center; transition: all 0.3s ease; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); } .contact-info-item:hover { transform: translateY(-5px); box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15); } .contact-info-item i { font-size: 2rem; color: #007bff; margin-bottom: 15px; } .contact-info-item a { text-decoration: none; color: inherit; } @media (max-width: 768px) { .contact-form-card { padding: 25px 20px; margin: 20px 10px; } .quick-contact-grid { grid-template-columns: 1fr; gap: 15px; } } /* Responsive Styles */ @media (max-width: 768px) { /* Fix navbar mobile issues */ .navbar { padding: 15px 0; background: rgba(255, 255, 255, 0.98) !important; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05); } .navbar-brand { font-size: 1.6rem; color: var(--primary-color) !important; text-shadow: none; font-weight: 700; } /* Ensure brand stays consistent */ .navbar.scrolled .navbar-brand, .navbar-light .navbar-brand { color: var(--primary-color) !important; } .navbar-toggler { padding: 6px 8px; margin-left: auto; border: 2px solid var(--primary-color); background: transparent; } .navbar-toggler-icon { background-image: none; } .navbar-toggler-icon::before, .navbar-toggler-icon::after, .navbar-toggler-icon { background: var(--primary-color); } .navbar-collapse { margin-top: 15px; max-height: 80vh; overflow-y: auto; } .navbar-nav { background: #fff; border-top: 1px solid rgba(0,0,0,0.05); padding: 10px 0; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.05); margin: 0; border-radius: 0 0 15px 15px; } .navbar-nav .nav-link { padding: 15px 25px; margin: 0; border-radius: 0; font-size: 1.1rem; text-align: left; color: var(--text-color) !important; border-bottom: 1px solid rgba(0,0,0,0.03); } .navbar-nav .nav-link:hover, .navbar-nav .nav-link.active { background: rgba(0, 109, 119, 0.05); color: var(--primary-color) !important; transform: none; padding-left: 35px; /* Indent on hover */ } /* Language switcher mobile fix */ .lang-switcher-mobile { display: flex; gap: 10px; } .lang-switcher-mobile .lang-btn { min-height: 36px; padding: 5px 15px; font-size: 0.9rem; border-radius: 20px; } /* Section spacing reduction for mobile */ section { padding: 50px 0; } #about, #services, #testimonials, #contact, #recent-activities, #faq { scroll-margin-top: 70px; } /* Increased spacing between clickable elements */ .service-item { margin-bottom: 40px; padding: 50px 30px; } .contact-info .info-item { flex-direction: column; text-align: center; margin-bottom: 40px; padding: 20px; border-radius: 12px; background: rgba(255, 255, 255, 0.1); } .contact-info .info-item i { margin-bottom: 15px; margin-right: 0; font-size: 2rem; } /* Larger text for mobile readability */ #about h2, #services h2, #testimonials h2, #contact h2, #picture-gallery h2, #faq h2, #recent-activities h2 { font-size: 2.5rem; line-height: 1.3; margin-bottom: 30px; } /* Better spacing for mobile content */ .container { padding-left: 20px; padding-right: 20px; } /* Touch-friendly carousel controls */ .carousel-control-prev, .carousel-control-next { width: 60px; height: 60px; top: 50%; transform: translateY(-50%); background: rgba(0, 123, 255, 0.8); border-radius: 50%; opacity: 0.9; } .carousel-control-prev-icon, .carousel-control-next-icon { width: 24px; height: 24px; } /* Enhanced back to top button for mobile */ #backToTop { width: 56px !important; height: 56px !important; border-radius: 50% !important; font-size: 16px !important; bottom: 100px !important; /* Above mobile footer */ left: 30px !important; z-index: 1050 !important; /* Above mobile footer */ position: fixed !important; background: rgba(0, 123, 255, 0.8) !important; color: white !important; border: none !important; padding: 15px !important; cursor: pointer !important; } /* Hide contact button on mobile since we have mobile sticky footer */ .contact-button { display: none; } /* Activity items touch-friendly */ .activity-item { padding: 30px 20px; margin-bottom: 40px; } .activity-item img { height: 250px; margin-bottom: 25px; } /* FAQ accordion touch-friendly */ .accordion-button { min-height: 60px; padding: 20px; font-size: 1.1rem; } /* Testimonial items spacing */ .testimonial-item, .picture-item { margin: 30px 15px; padding: 30px 25px; } } /* AdSense Ad Styling */ .adsense-ad { margin: 40px 0; text-align: center; } .adsense-ad img { max-width: 100%; height: auto; } #recent-activities { background: linear-gradient(135deg, rgba(255, 255, 255, 0.9), rgba(248, 249, 250, 0.9)); backdrop-filter: blur(10px); } .activity-item { background: rgba(255, 255, 255, 0.7); backdrop-filter: blur(10px); border: 1px solid var(--glass-border); border-radius: 20px; padding: 20px; margin-bottom: 30px; transition: all 0.4s ease; box-shadow: 0 8px 32px 0 var(--glass-shadow); } .activity-item:hover { transform: translateY(-10px); background: rgba(255, 255, 255, 0.9); box-shadow: 0 15px 45px 0 var(--glass-shadow); } .activity-item img { width: 100%; height: 200px; object-fit: cover; border-radius: 15px; margin-bottom: 20px; transition: all 0.4s ease; } .activity-item h3 { margin-bottom: 10px; color: #333; } .activity-item p { color: #555; font-size: 1rem; } .contact-button { position: fixed; bottom: 30px; right: 30px; z-index: 1000; padding: 15px 30px; background: rgba(253, 126, 20, 0.9); backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.2); box-shadow: 0 8px 32px 0 rgba(253, 126, 20, 0.3); color: #fff; border-radius: 50px; font-size: 1.1rem; font-weight: 500; cursor: pointer; transition: all 0.4s ease; } .contact-button:hover { transform: translateY(-5px); background: rgba(253, 126, 20, 1); box-shadow: 0 15px 45px 0 rgba(253, 126, 20, 0.4); } .vibrate-text { display: inline-block; animation: vibrate 1s ease-in-out infinite; } @keyframes vibrate { 0%, 100% { transform: translate(0); } 25% { transform: translate(-2px, 2px); } 50% { transform: translate(2px, -2px); } 75% { transform: translate(-2px, -2px); } } /* Floating Social Buttons */ .floating-socials { position: fixed; bottom: 100px; right: 20px; z-index: 999; display: flex; flex-direction: column; gap: 15px; } .float-btn { width: 50px; height: 50px; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: white; font-size: 24px; box-shadow: 0 4px 10px rgba(0,0,0,0.2); transition: all 0.3s ease; text-decoration: none; } .float-btn:hover { transform: scale(1.1); color: white; } .zalo-btn { background: #0068FF; border: 2px solid white; } .messenger-btn { background: #0084FF; border: 2px solid white; } /* Before/After Comparison Slider */ .comparison-slider { position: relative; width: 100%; max-width: 800px; margin: 0 auto; overflow: hidden; border-radius: 15px; box-shadow: 0 10px 30px rgba(0,0,0,0.1); cursor: col-resize; } .comparison-slider img { width: 100%; height: auto; display: block; pointer-events: none; } .comparison-slider .resize-image { position: absolute; top: 0; left: 0; height: 100%; width: 50%; overflow: hidden; border-right: 3px solid white; } .comparison-slider .handle { position: absolute; height: 40px; width: 40px; background: white; border-radius: 50%; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 2; display: flex; align-items: center; justify-content: center; box-shadow: 0 0 10px rgba(0,0,0,0.3); color: var(--primary-color); } .comparison-slider .handle::after { content: \f337; /* Font Awesome arrows */ font-family: Font Awesome 5 Free; font-weight: 900; } .comparison-label { position: absolute; top: 20px; padding: 5px 15px; background: rgba(0,0,0,0.5); color: white; border-radius: 20px; font-size: 0.9rem; pointer-events: none; } .label-before { left: 20px; } .label-after { right: 20px; } @media (max-width: 768px) { .floating-socials { bottom: 160px; /* Adjust for mobile nav */ right: 15px; } .float-btn { width: 45px; height: 45px; font-size: 20px; } } #picture-gallery { padding: 30px 0; background-color: var(--light-bg); } #picture-gallery h2 { text-align: center; margin-bottom: 60px; color: var(--primary-color); font-size: 3rem; font-weight: 700; } .picture-item { text-align: center; margin-bottom: 40px; transition: all 0.4s ease; } .picture-item img { width: 100%; height: 300px; object-fit: cover; border-radius: 20px; margin-bottom: 20px; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1); transition: all 0.4s ease; } .picture-item:hover img { transform: scale(1.03); box-shadow: 0 15px 40px rgba(0, 0, 0, 0.2); } .picture-item p { font-size: 1rem; line-height: 1.8; color: var(--text-color); } .customer-name { font-weight: 600; color: var(--primary-color); } #backToTop { display: none; /* Hidden by default */ position: fixed; /* Fixed position */ bottom: 20px; /* Place the button at the bottom of the page */ left: 20px; /* Place the button at the left corner */ z-index: 99; /* Make sure it does not overlap */ border: none; /* Remove borders */ outline: none; /* Remove outline */ background: rgba(0, 123, 255, 0.8); /* Set a background color */ backdrop-filter: blur(10px); color: white; /* Text color */ cursor: pointer; /* Add a mouse pointer on hover */ padding: 10px; /* Some padding */ border-radius: 10px; /* Rounded corners */ box-shadow: 0 8px 32px 0 rgba(0, 123, 255, 0.3); } #backToTop:hover { background: rgba(253, 126, 20, 0.9); box-shadow: 0 15px 45px 0 rgba(253, 126, 20, 0.4); } /* Updated Language Switcher Visibility */ .lang-switcher .lang-btn, .lang-switcher-mobile .lang-btn { background: #fff; border: 2px solid var(--primary-color); color: var(--primary-color); font-weight: 700; opacity: 1; /* Ensure full opacity */ transition: all 0.3s ease; } .lang-switcher .lang-btn:hover, .lang-switcher-mobile .lang-btn:hover, .lang-switcher .lang-btn.active, .lang-switcher-mobile .lang-btn.active { background: var(--primary-color); color: #fff; box-shadow: 0 4px 10px rgba(0, 109, 119, 0.2); } /* Ensure text inside buttons is readable */ .navbar-light .lang-switcher .lang-btn, .navbar-dark .lang-switcher .lang-btn { color: var(--primary-color); border-color: var(--primary-color); } .navbar-light .lang-switcher .lang-btn.active, .navbar-dark .lang-switcher .lang-btn.active { color: #fff; } /* Add smooth scrolling */ html { scroll-behavior: smooth; } /* Performance Optimizations */ :root { --animation-duration: 0.3s; } /* Low bandwidth mode optimizations */ .low-bandwidth * { animation: none !important; transition: none !important; } .low-bandwidth .navbar { backdrop-filter: none; background: rgba(0, 123, 255, 0.95) !important; } .low-bandwidth .service-item, .low-bandwidth .activity-item, .low-bandwidth .testimonial-item { backdrop-filter: none; background: rgba(255, 255, 255, 0.95); } /* Lazy loading placeholder */ img.lazy { background: #f0f0f0; min-height: 200px; } /* Optimize animations for performance */ .service-item, .activity-item, .testimonial-item { will-change: transform; } /* Reduce motion for users who prefer it */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; } } /* Add custom scrollbar */ ::-webkit-scrollbar { width: 10px; } ::-webkit-scrollbar-track { background: rgba(255, 255, 255, 0.1); backdrop-filter: blur(10px); } ::-webkit-scrollbar-thumb { background: var(--primary-color); border-radius: 5px; } ::-webkit-scrollbar-thumb:hover { background: var(--cta-color); } /style>/head>body> button classcontact-button onclickwindow.location.href#contact> span classvibrate-text data-lang-keycontact_button>strong>Liên hệ/strong>/span> /button> a hrefhttps://zalo.me/0344138201 target_blank classzalo-button relnoopener noreferrer> img srchttps://upload.wikimedia.org/wikipedia/commons/9/91/Icon_of_Zalo.svg altChat Zalo> /a> !-- Google Tag Manager (noscript) --> noscript>iframe srchttps://www.googletagmanager.com/ns.html?idGTM-NH799JDZ height0 width0 styledisplay:none;visibility:hidden>/iframe>/noscript> !-- End Google Tag Manager (noscript) --> !-- Navigation --> nav classnavbar navbar-expand-lg navbar-light fixed-top aria-labelMain navigation> div classcontainer> a classnavbar-brand hrefhttps://bacsiduong.com>Dr. Dương/a> !-- Mobile language switcher - shown before hamburger on mobile --> div classd-lg-none d-flex align-items-center me-2> div classlang-switcher-mobile> button onclickswitchLanguage(vi) classbtn btn-sm lang-btn idlang-vi-mobile>VI/button> button onclickswitchLanguage(en) classbtn btn-sm lang-btn idlang-en-mobile>EN/button> /div> /div> button classnavbar-toggler typebutton data-bs-togglecollapse data-bs-target#navbarNav aria-controlsnavbarNav aria-expandedfalse aria-labelToggle navigation idnavbarToggler> span classnavbar-toggler-icon>/span> /button> div classcollapse navbar-collapse justify-content-end idnavbarNav> ul classnavbar-nav> li classnav-item> a classnav-link active touch-feedback aria-currentpage href#about data-lang-keynav_about>Giới Thiệu/a> /li> li classnav-item> a classnav-link touch-feedback href#services data-lang-keynav_services>Dịch Vụ/a> /li> li classnav-item> a classnav-link touch-feedback href#testimonials data-lang-keynav_testimonials>Cảm nhận khách hàng/a> /li> li classnav-item> a classnav-link touch-feedback href#recent-activities data-lang-keynav_activities>Hoạt động/a> /li> li classnav-item> a classnav-link touch-feedback href#faq data-lang-keynav_faq>Câu hỏi thường gặp/a> /li> li classnav-item> a classnav-link touch-feedback href#contact data-lang-keynav_contact>Liên Hệ/a> /li> /ul> !-- Desktop language switcher --> div classlang-switcher d-none d-lg-flex ms-3> button onclickswitchLanguage(vi) classbtn btn-sm lang-btn touch-feedback idlang-vi>VI/button> button onclickswitchLanguage(en) classbtn btn-sm lang-btn touch-feedback idlang-en>EN/button> /div> /div> /div> /nav> !-- Hero Section --> section idhero classd-flex align-items-center> div classcontainer data-aoszoom-out data-aos-delay100> div classrow align-items-center> div classcol-lg-6> h1>Làn da khoẻ đẹp,br>span>Tự tin toả sáng/span>/h1> h2>Bác sĩ Dương - Chuyên gia điều trị span stylecolor: var(--cta-color);>MỤN/span>, nám & thẩm mỹ da khoa học./h2> p data-lang-keyhero_description>Phác đồ cá nhân hoá - An toàn chuẩn y khoa - Hiệu quả bền vững. Đặc biệt chuyên sâu trong việc strong>điều trị dứt điểm các loại mụn/strong> khó chữa và phục hồi da sau mụn./p> div classd-flex> a href#contact classbtn-get-started scrollto touch-feedback data-lang-keyhero_cta_book>Đặt lịch/a> a href#services classbtn-watch-video scrollto touch-feedback data-lang-keyhero_cta_services>i classfas fa-play-circle me-2>/i>Dịch vụ/a> /div> /div> div classcol-lg-6 order-1 order-lg-2 hero-img> img srchttps://bacsiduong.com/images/drduong.webp classimg-fluid animated altBác sĩ Dương - Chuyên gia da liễu width600 height600 fetchpriorityhigh> /div> /div> /div> /section> !-- Why Choose Us Section --> section idwhy-us classwhy-us> div classcontainer> div classrow> div classcol-lg-4 d-flex align-items-stretch data-aosfade-right> div classcontent why-box> h3>Tại sao chọn Bác sĩ Dương?/h3> p> Chúng tôi tin rằng mỗi làn da là một câu chuyện riêng biệt. Tại đây, bạn không chỉ được điều trị mà còn được lắng nghe và thấu hiểu. Với phương châm An toàn - Hiệu quả - Tận tâm, chúng tôi cam kết mang lại trải nghiệm chăm sóc da chuẩn y khoa tốt nhất. /p> div classtext-center> a href#about classmore-btn touch-feedback>Tìm hiểu thêm i classfas fa-chevron-right>/i>/a> /div> /div> /div> div classcol-lg-8 d-flex align-items-stretch> div classicon-boxes d-flex flex-column justify-content-center> div classrow> div classcol-xl-4 d-flex align-items-stretch data-aoszoom-in data-aos-delay100> div classicon-box mt-4 mt-xl-0> i classfas fa-user-md>/i> h4>Cá nhân hoá/h4> p>Phác đồ điều trị riêng biệt dựa trên tình trạng da và thói quen sinh hoạt của từng khách hàng./p> /div> /div> div classcol-xl-4 d-flex align-items-stretch data-aoszoom-in data-aos-delay200> div classicon-box mt-4 mt-xl-0> i classfas fa-shield-alt>/i> h4>Chuẩn Y Khoa/h4> p>Quy trình vô khuẩn, dược mỹ phẩm chính hãng, an toàn tuyệt đối cho làn da của bạn./p> /div> /div> div classcol-xl-4 d-flex align-items-stretch data-aoszoom-in data-aos-delay300> div classicon-box mt-4 mt-xl-0> i classfas fa-heart>/i> h4>Tận tâm/h4> p>Đồng hành cùng bạn từ khi bắt đầu đến khi kết thúc liệu trình, hỗ trợ 24/7./p> /div> /div> /div> /div> /div> /div> /div> /section> !-- About Section --> section idabout stylepadding: 80px 0; background: #f8f9fa;> div classcontainer data-aosfade-up> div classsection-title text-center mb-5> h2 stylecolor: var(--primary-color); font-weight: 700;>Về Bác sĩ Dương/h2> p stylemax-width: 700px; margin: 0 auto;>Người bạn đồng hành tin cậy trên hành trình chăm sóc sắc đẹp./p> /div> div classrow content> div classcol-lg-6 pt-4 pt-lg-0 data-aosfade-left> p stylefont-size: 1.1rem; line-height: 1.8;> Chào bạn, mình là strong>Bác sĩ Dương/strong>. Với kinh nghiệm nhiều năm trong lĩnh vực Da liễu thẩm mỹ, mình luôn tâm niệm rằng vẻ đẹp bền vững phải đến từ một làn da khoẻ mạnh. /p> ul stylelist-style: none; padding: 0;> li stylemargin-bottom: 15px;>i classfas fa-check-circle stylecolor: var(--primary-color); margin-right: 10px;>/i> Tốt nghiệp Bác sĩ Đa khoa & Chuyên khoa Da liễu./li> li stylemargin-bottom: 15px;>i classfas fa-check-circle stylecolor: var(--primary-color); margin-right: 10px;>/i> Chứng chỉ Ứng dụng Laser & Ánh sáng trong Da liễu./li> li stylemargin-bottom: 15px;>i classfas fa-check-circle stylecolor: var(--primary-color); margin-right: 10px;>/i> Chứng chỉ Tiêm chất làm đầy (Filler) & Botulinum Toxin (Botox)./li> /ul> p classfst-italic> Mục tiêu của mình không chỉ là điều trị bệnh lý, mà là giúp bạn hiểu đúng về làn da của mình để chăm sóc nó tốt nhất mỗi ngày. /p> /div> div classcol-lg-6 data-aosfade-right> !-- Placeholder for another image or just text layout improvement. Since we moved the main image to Hero, we can use a different image here or keep it text focused. For now, lets keep it balanced with the text. --> div stylebackground: #fff; padding: 30px; border-radius: 15px; box-shadow: 0 5px 25px rgba(0,0,0,0.05);> h4 stylecolor: var(--secondary-color); font-weight: 600; margin-bottom: 20px;>Triết lý điều trị/h4> p>i classfas fa-quote-left stylecolor: var(--primary-color); font-size: 20px; margin-right: 10px;>/i> strong>Tối giản - Hiệu quả - An toàn./strong> Không lạm dụng thuốc, không chỉ định thừa thãi. Mọi phác đồ đều được xây dựng dựa trên bằng chứng y học và thực tế lâm sàng./p> p>Bác sĩ Dương luôn cập nhật những kiến thức, công nghệ mới nhất để mang lại kết quả tối ưu nhất cho khách hàng./p> /div> /div> /div> /div> /section> !-- Services Section --> section idservices> div classcontainer data-aosfade-up> h2 data-lang-keyservices_title>Dịch vụ/h2> div classrow g-4 mt-4> div classcol-md-4 data-aoszoom-in data-aos-delay100> div classservice-item touch-feedback onclickselectService(consultation)> i classfas fa-user-md>/i> h3 data-lang-keyservice_1_title>Khám – tư vấn thân thiện/h3> p data-lang-keyservice_1_desc>Lắng nghe nhu cầu, soi da – chẩn đoán và gợi ý lộ trình dễ theo, phù hợp ngân sách./p> div classmt-3 text-primary fw-bold small>Đặt lịch i classfas fa-arrow-right>/i>/div> /div> /div> div classcol-md-4 data-aoszoom-in data-aos-delay200> div classservice-item touch-feedback onclickselectService(acne)> i classfas fa-heartbeat>/i> h3 data-lang-keyservice_2_title>Chăm sóc mụn toàn diện/h3> p data-lang-keyservice_2_desc>Kết hợp bôi/uống, lấy nhân mụn – peel – thiết bị (khi cần) để giảm viêm và hạn chế tái phát./p> div classmt-3 text-primary fw-bold small>Đặt lịch i classfas fa-arrow-right>/i>/div> /div> /div> div classcol-md-4 data-aoszoom-in data-aos-delay300> div classservice-item touch-feedback onclickselectService(melasma)> i classfas fa-paint-brush>/i> h3 data-lang-keyservice_3_title>Nám & sắc tố/h3> p data-lang-keyservice_3_desc>Kiểm soát nắng – hoạt chất – peel/laser bài bản, an toàn, hướng tới duy trì lâu dài./p> div classmt-3 text-primary fw-bold small>Đặt lịch i classfas fa-arrow-right>/i>/div> /div> /div> div classcol-md-4 data-aoszoom-in data-aos-delay400> div classservice-item touch-feedback onclickselectService(scar)> i classfas fa-scissors>/i> h3 data-lang-keyservice_4_title>Sẹo mụn/h3> p data-lang-keyservice_4_desc>Kết hợp subcision, TCA CROSS, vi kim RF, laser… theo loại sẹo để bề mặt da mịn hơn./p> div classmt-3 text-primary fw-bold small>Đặt lịch i classfas fa-arrow-right>/i>/div> /div> /div> div classcol-md-4 data-aoszoom-in data-aos-delay500> div classservice-item touch-feedback onclickselectService(consultation)> i classfas fa-syringe>/i> h3 data-lang-keyservice_5_title>Da nhạy cảm – viêm da/h3> p data-lang-keyservice_5_desc>Tìm – tránh tác nhân, phục hồi hàng rào bảo vệ da và hướng dẫn chăm sóc tại nhà./p> div classmt-3 text-primary fw-bold small>Đặt lịch i classfas fa-arrow-right>/i>/div> /div> /div> div classcol-md-4 data-aoszoom-in data-aos-delay600> div classservice-item touch-feedback onclickselectService(botox)> i classfas fa-spa>/i> h3 data-lang-keyservice_6_title>Tiêm thẩm mỹ tự nhiên/h3> p data-lang-keyservice_6_desc>Botox, Filler, Mesotherapy – ưu tiên an toàn và vẻ đẹp tự nhiên, hài hoà./p> div classmt-3 text-primary fw-bold small>Đặt lịch i classfas fa-arrow-right>/i>/div> /div> /div> /div> /div> /section> !-- Testimonials Section --> section idtestimonials> div classcontainer data-aosfade-up> h2 data-lang-keytestimonials_title>Cảm nhận khách hàng/h2> div idpictureCarousel classcarousel slide data-bs-ridecarousel> div classcarousel-inner> div classcarousel-item active> div classrow> div classcol-md-4 picture-item> img srchttps://bacsiduong.com/images/feedback1.webp altFeedback from a happy customer about acne treatment loadinglazy width120 height120> p data-lang-keytestimonial_1>Em cứ tưởng da em không bao giờ hết mụn nữa cơ, ai dè gặp bác sĩ Dương, da láng mịn như trứng gà luộc luôn ạ! Cảm ơn bác sĩ nhiều lắm. - span classcustomer-name>Nh***/span>/p> /div> div classcol-md-4 picture-item> img srchttps://bacsiduong.com/images/feedback2.webp altFeedback from a happy customer about skin care loadinglazy width120 height120> p data-lang-keytestimonial_2>Em đã thử đủ loại mỹ phẩm mà vẫn không khỏi mụn, cuối cùng nhờ có bác sĩ Dương, em đã tìm được chân ái cho làn da của mình! - span classcustomer-name>Kh***/span>/p> /div> div classcol-md-4 picture-item> img srchttps://bacsiduong.com/images/feedback3.webp altFeedback from a happy customer about botox injection loadinglazy width120 height120> p data-lang-keytestimonial_3>Nhờ bác sĩ Dương mà mình tự tin hơn hẳn. Tiêm botox xong trẻ ra cả chục tuổi, ai gặp cũng khen.😘 - span classcustomer-name>Ng***/span>/p> /div> /div> /div> div classcarousel-item> div classrow> div classcol-md-4 picture-item> img srchttps://bacsiduong.com/images/feedback4.webp altFeedback from a happy customer about botox for crows feet loadinglazy width120 height120> p data-lang-keytestimonial_4>Lần đầu tiêm botox nên mình cũng hơi lo lắng. Nhưng bác sĩ Dương tư vấn rất kỹ, tiêm nhẹ nhàng, không đau chút nào. Giờ thì hết nhăn đuôi mắt rồi, cười tươi tự nhiên hơn hẳn.😍 - span classcustomer-name>Ph***/span>/p> /div> div classcol-md-4 picture-item> img srchttps://bacsiduong.com/images/feedback5.webp altFeedback from a happy customer about acne scar treatment loadinglazy width120 height120> p data-lang-keytestimonial_5>Trước đây mình tự ti vì sẹo mụn, giờ thì tự tin hẳn. Nhờ bác sĩ Dương mà mình có làn da đẹp hơn mong đợi. Cảm ơn bác sĩ nhiều! - span classcustomer-name>Li***/span>/p> /div> div classcol-md-4 picture-item> img srchttps://bacsiduong.com/images/feedback6.webp altFeedback from a happy customer on getting healthy skin loadinglazy width120 height120> p data-lang-keytestimonial_6>Cảm ơn bác sĩ Dương đã giúp em lấy lại làn da khỏe mạnh. Em sẽ chăm chỉ thực hiện theo lời dặn của bác sĩ ạ.😘 - span classcustomer-name>Th***/span>/p> /div> /div> /div> /div> /div> button classcarousel-control-prev typebutton data-bs-target#pictureCarousel data-bs-slideprev aria-labelPrevious slide> span classcarousel-control-prev-icon aria-hiddentrue>/span> span classvisually-hidden data-lang-keycarousel_prev>Trước/span> /button> button classcarousel-control-next typebutton data-bs-target#pictureCarousel data-bs-slidenext aria-labelNext slide> span classcarousel-control-next-icon aria-hiddentrue>/span> span classvisually-hidden data-lang-keycarousel_next>Tiếp theo/span> /button> /div> /div> /section> !-- Recent activities --> section idrecent-activities> div classcontainer data-aosfade-up> h2 data-lang-keyactivities_title>Hoạt động/h2> div classrow mt-4> div classcol-md-4 activity-item> img srchttps://bacsiduong.com/images/hoi-nghi-da-lieu-qoan-quoc-6.webp altDr. Duong at the 6th National Dermatology Conference loadinglazy width400 height300> h3 data-lang-keyactivity_1_title>Tham gia hội thảo Da liễu toàn quốc lần thứ 6/h3> p data-lang-keyactivity_1_desc>Bác sĩ Dương đã tham gia Hội thảo Da liễu toàn quốc lần thứ 6, cập nhật những kiến thức và kỹ thuật mới nhất về da liễu thẩm mỹ./p> /div> div classcol-md-4 activity-item> img srchttps://bacsiduong.com/images/hoi-nghi-da-lieu-qoan-quoc-5.webp altDr. Duong at the 5th National Dermatology Conference in Da Nang loadinglazy width400 height300> h3 data-lang-keyactivity_2_title>Tham gia hội thảo Da liễu toàn quốc lần thứ 5/h3> p data-lang-keyactivity_2_desc>Bác sĩ Dương đã tham gia Hội thảo Da liễu toàn quốc lần thứ 5 tại Đà Nẵng nhằm nâng cao kiến thức, bổ sung thông tin và chia sẻ kinh nghiệm thực tiễn trong điều trị và chăm sóc da thẩm mỹ. /p> /div> div classcol-md-4 activity-item> img srchttps://bacsiduong.com/images/hoan-thanh-lop-ung-dung-laser.webp altDr. Duong completing a laser application course loadinglazy width400 height300> h3 data-lang-keyactivity_3_title>Hoàn thành khoá học Laser/h3> p data-lang-keyactivity_3_desc>Bác sĩ Dương được thầy Vỹ trực tiếp hướng dẫn về kĩ thuật lâm sàng và Laser, kết quả là xuất xắc hoàn thành khoá học./p> /div> /div> /div> /section> !-- FAQ Section --> section idfaq stylepadding: 60px 0; background: var(--light-bg);> div classcontainer data-aosfade-up> h2 data-lang-keyfaq_title>Câu hỏi thường gặp/h2> div classaccordion idfaqAccordion> div classaccordion-item> h2 classaccordion-header>button classaccordion-button typebutton data-bs-togglecollapse data-bs-target#faq1 data-lang-keyfaq1_question>Điều trị mụn mất bao lâu?/button>/h2> div idfaq1 classaccordion-collapse collapse show>div classaccordion-body data-lang-keyfaq1_answer>Mỗi làn da sẽ khác nhau, nhưng thường sau 6–12 tuần bạn sẽ thấy cải thiện rõ. Tụi mình sẽ đồng hành để duy trì kết quả và hạn chế tái phát./div>/div> /div> div classaccordion-item> h2 classaccordion-header>button classaccordion-button collapsed typebutton data-bs-togglecollapse data-bs-target#faq2 data-lang-keyfaq2_question>Các dịch vụ có an toàn không?/button>/h2> div idfaq2 classaccordion-collapse collapse>div classaccordion-body data-lang-keyfaq2_answer>Bác sĩ sẽ trực tiếp thăm khám và giải thích rõ ràng. Quy trình nhẹ nhàng, vật tư minh bạch và vô khuẩn chặt chẽ để bạn yên tâm./div>/div> /div> div classaccordion-item> h2 classaccordion-header>button classaccordion-button collapsed typebutton data-bs-togglecollapse data-bs-target#faq3 data-lang-keyfaq3_question>Tôi cần chuẩn bị gì trước khi đến khám?/button>/h2> div idfaq3 classaccordion-collapse collapse>div classaccordion-body data-lang-keyfaq3_answer>Bạn chỉ cần rửa mặt sạch và mang theo các sản phẩm đang dùng. Nếu dự kiến làm thủ thuật, vui lòng báo tiền sử dị ứng và ngưng retinoid/acid 2–3 ngày./div>/div> /div> /div> /div> /section> !-- Contact Section --> section idcontact> div classcontainer data-aosfade-up> h2 data-lang-keycontact_title>Liên Hệ/h2> !-- Contact Form --> div classrow> div classcol-lg-8 mx-auto> div classcontact-form-card> h3 classtext-center mb-4 stylecolor: #007bff;> i classfas fa-calendar-check me-2>/i> span data-lang-keycontact_form_title>Đặt lịch tư vấn/span> /h3> form idcontactForm novalidate> div classrow g-3> div classcol-md-6> div classform-floating> input typetext classform-control touch-feedback idfullName placeholderHọ và tên required autocompletename> label forfullName data-lang-keycontact_form_name>Họ và tên */label> div classinvalid-feedback>/div> div classvalid-feedback>Hợp lệ!/div> /div> /div> div classcol-md-6> div classform-floating> input typetel classform-control touch-feedback idphone placeholderSố điện thoại required autocompletetel> label forphone data-lang-keycontact_form_phone>Số điện thoại */label> div classinvalid-feedback>/div> div classvalid-feedback>Hợp lệ!/div> /div> /div> div classcol-12> div classform-floating> input typeemail classform-control touch-feedback idemail placeholderEmail autocompleteemail> label foremail data-lang-keycontact_form_email>Email (tùy chọn)/label> div classinvalid-feedback>/div> div classvalid-feedback>Hợp lệ!/div> /div> /div> div classcol-12> div classform-floating> select classform-select touch-feedback idserviceType required> option value>Chọn dịch vụ/option> option valueconsultation>Khám tư vấn/option> option valueacne>Điều trị mụn/option> option valuemelasma>Điều trị nám/option> option valuescar>Điều trị sẹo/option> option valuebotox>Botox/option> option valuefiller>Filler/option> option valueother>Khác/option> /select> label forserviceType>Dịch vụ quan tâm */label> div classinvalid-feedback>/div> div classvalid-feedback>Hợp lệ!/div> /div> /div> div classcol-12> div classform-floating> textarea classform-control touch-feedback idmessage placeholderMô tả tình trạng da styleheight: 100px autocompleteoff>/textarea> label formessage>Mô tả tình trạng da (tùy chọn)/label> /div> /div> /div> div classd-grid gap-2 mt-4> button typesubmit classbtn btn-submit-form btn-lg text-white touch-feedback> i classfas fa-calendar-plus me-2>/i> Đặt lịch div classspinner-border spinner-border-sm ms-2 d-none idsubmitSpinner rolestatus> span classvisually-hidden>Loading.../span> /div> /button> /div> /form> /div> /div> /div> !-- Contact Information Grid --> div classquick-contact-grid> div classcontact-info-item touch-feedback> i classfas fa-phone>/i> h5 data-lang-keycontact_info_call>Gọi ngay/h5> a hreftel:+84344138201 data-lang-keycontact_phone>+84-344-138-201/a> /div> div classcontact-info-item touch-feedback> i classfas fa-map-marker-alt>/i> h5 data-lang-keycontact_info_address>Địa chỉ/h5> div> small data-lang-keycontact_address1>CS1: Ngọc Hồi, Thanh Trì, Hà Nội/small>br> small data-lang-keycontact_address2>CS2: An Thượng, Hoài Đức, Hà Nội/small>br> small data-lang-keycontact_address3>CS3: Thái Hà, Đống Đa, Hà Nội/small> /div> /div> div classcontact-info-item touch-feedback> i classfab fa-facebook-f>/i> h5>Facebook/h5> a hrefhttps://www.facebook.com/sunny.el.3 target_blank relnoopener noreferrer data-lang-keycontact_facebook>Facebook của Dr. Dương/a> /div> div classcontact-info-item touch-feedback> i classfab fa-whatsapp>/i> h5 data-lang-keycontact_info_whatsapp>WhatsApp/h5> a hrefhttps://wa.me/84344138201 target_blank relnoopener noreferrer data-lang-keycontact_info_whatsapp_text>Chat ngay/a> /div> /div> /div> /section> button idbackToTop titleGo to top>strong>Top/strong>/button> !-- Mobile Sticky Footer --> div classmobile-sticky-footer> div classmobile-footer-actions> a hreftel:+84344138201 classmobile-footer-btn primary touch-feedback> i classfas fa-phone me-1>/i> Gọi ngay /a> a href#contact classmobile-footer-btn secondary touch-feedback> i classfas fa-calendar me-1>/i> Đặt lịch /a> /div> /div> !-- Footer --> footer> div classcontainer> p data-lang-keyfooter_copyright>© 2025 Dr. Dương./p> /div> /footer> !-- Bootstrap 5 JS and dependencies --> script srchttps://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js defer>/script> !-- AOS Animation Library JS --> script srchttps://cdnjs.cloudflare.com/ajax/libs/aos/2.3.4/aos.js defer>/script> !-- Google Analytics --> !-- script async srchttps://www.googletagmanager.com/gtag/js?idUA-XXXXXXXXX-X>/script> script> window.dataLayer window.dataLayer || ; function gtag(){dataLayer.push(arguments);} gtag(js, new Date()); gtag(config, UA-XXXXXXXXX-X); /script> --> !-- Custom JavaScript --> script> // Define global functions first so they are available for HTML event handlers // Navbar background change on scroll window.addEventListener(scroll, function () { const navbar document.querySelector(.navbar); if (window.scrollY > 50) { navbar.classList.add(scrolled, navbar-dark); navbar.classList.remove(navbar-light); } else { navbar.classList.remove(scrolled, navbar-dark); navbar.classList.add(navbar-light); } }); // Smooth scrolling with offset for fixed navbar const getScrollOffset () > { const navbarEl document.querySelector(.navbar); const isMobile window.innerWidth 768; const baseOffset navbarEl ? navbarEl.offsetHeight : 0; // Add extra offset for mobile due to different navbar structure const extraOffset isMobile ? 25 : 10; return baseOffset + extraOffset; }; const scrollToWithOffset (hash, behavior smooth) > { if (!hash || hash #) return; const targetEl document.querySelector(hash); if (!targetEl) return; const isMobile window.innerWidth 768; const performScroll () > { const y targetEl.getBoundingClientRect().top + window.pageYOffset - getScrollOffset(); window.scrollTo({ top: y, behavior }); }; // On mobile, add small delay to allow navbar to collapse if (isMobile) { setTimeout(performScroll, 300); } else { performScroll(); } }; // Global functions for HTML event handlers function closeMobileNavbar() { const navbarToggler document.querySelector(#navbarToggler); if (navbarToggler && navbarToggler.getAttribute(aria-expanded) true) { navbarToggler.click(); } } function selectService(serviceValue) { const select document.getElementById(serviceType); if(select) { select.value serviceValue; // Trigger change event just in case select.dispatchEvent(new Event(change)); // Scroll to contact const contactSection document.getElementById(contact); if(contactSection) { // Offset for fixed header const headerOffset 80; const elementPosition contactSection.getBoundingClientRect().top; const offsetPosition elementPosition + window.pageYOffset - headerOffset; window.scrollTo({ top: offsetPosition, behavior: smooth }); } } } function toggleContent(contentId, button) { const content document.getElementById(contentId); if (!content) return; if (content.classList.contains(expanded)) { content.classList.remove(expanded); button.innerHTML i classfas fa-chevron-down me-2>/i>Xem thêm; } else { content.classList.add(expanded); button.innerHTML i classfas fa-chevron-up me-2>/i>Ẩn bớt; } } // Wait for DOM to be ready for executions that depend on elements or deferred scripts document.addEventListener(DOMContentLoaded, () > { // Initialize AOS if (typeof AOS ! undefined) { AOS.init({ duration: 1000, once: true, }); } // Initialize Carousel const carousel document.getElementById(pictureCarousel); if (carousel && typeof bootstrap ! undefined) { const carouselInstance new bootstrap.Carousel(carousel); // Carousel Touch/Swipe Support let startX 0; let startY 0; let threshold 50; carousel.addEventListener(touchstart, function(e) { startX e.touches0.clientX; startY e.touches0.clientY; }, {passive: true}); carousel.addEventListener(touchend, function(e) { if (!startX || !startY) return; let endX e.changedTouches0.clientX; let endY e.changedTouches0.clientY; let diffX startX - endX; let diffY startY - endY; // Check if horizontal swipe is more significant than vertical if (Math.abs(diffX) > Math.abs(diffY) && Math.abs(diffX) > threshold) { if (diffX > 0) { // Swipe left - next slide carouselInstance.next(); } else { // Swipe right - previous slide carouselInstance.prev(); } } startX 0; startY 0; }, {passive: true}); } // Smooth scrolling for anchor links document.querySelectorAll(ahref^#).forEach(anchor > { anchor.addEventListener(click, function (e) { const hash this.getAttribute(href); if (!hash || hash #) return; e.preventDefault(); scrollToWithOffset(hash, smooth); }); }); // Navbar links click handler const navbarLinks document.querySelectorAll(.navbar-nav .nav-link); navbarLinks.forEach(link > { link.addEventListener(click, closeMobileNavbar); }); // Click outside to close mobile menu document.addEventListener(click, function (event) { const navbar document.querySelector(.navbar-collapse); const navbarToggler document.querySelector(#navbarToggler); if (navbarToggler && navbarToggler.getAttribute(aria-expanded) true && navbar && !navbar.contains(event.target) && !navbarToggler.contains(event.target)) { closeMobileNavbar(); } }); // Back to Top Button Logic const backToTopButton document.getElementById(backToTop); window.addEventListener(scroll, function () { if (!backToTopButton) return; const scrollTop document.body.scrollTop || document.documentElement.scrollTop; if (scrollTop > 20) { backToTopButton.style.display block; } else { backToTopButton.style.display none; } }); if (backToTopButton) { backToTopButton.addEventListener(click, function () { document.body.scrollTop 0; document.documentElement.scrollTop 0; }); } // Touch feedback document.querySelectorAll(.touch-feedback).forEach(element > { element.addEventListener(touchstart, function(e) { this.style.transform scale(0.95); }, {passive: true}); element.addEventListener(touchend, function(e) { this.style.transform scale(1); }, {passive: true}); element.addEventListener(touchcancel, function(e) { this.style.transform scale(1); }, {passive: true}); }); // Enhanced Contact Form Validation and Submission const contactForm document.getElementById(contactForm); const submitSpinner document.getElementById(submitSpinner); if (contactForm) { // Real-time validation const formInputs contactForm.querySelectorAll(input, select, textarea); formInputs.forEach(input > { input.addEventListener(blur, () > validateField(input)); input.addEventListener(input, () > { if (input.classList.contains(is-invalid) || input.classList.contains(is-valid)) { validateField(input); } }); }); // Form submission contactForm.addEventListener(submit, function(e) { e.preventDefault(); if (validateForm()) { submitContactForm(); } }); } function validateField(field) { const value field.value.trim(); let isValid true; let message ; // Remove existing validation classes field.classList.remove(is-valid, is-invalid); switch(field.id) { case fullName: if (!value) { isValid false; message Vui lòng nhập họ và tên; } else if (value.length 2) { isValid false; message Họ và tên phải có ít nhất 2 ký tự; } break; case phone: const phoneRegex /^0-9+\-\s(){10,15}$/; if (!value) { isValid false; message Vui lòng nhập số điện thoại; } else if (!phoneRegex.test(value.replace(/\s/g, ))) { isValid false; message Số điện thoại không hợp lệ; } break; case email: if (value && !value.includes(@)) { isValid false; message Email không hợp lệ; } break; case serviceType: if (!value) { isValid false; message Vui lòng chọn dịch vụ; } break; } // Apply validation feedback const feedbackEl field.parentNode.querySelector(.invalid-feedback); if (field.hasAttribute(required) || value) { if (isValid) { field.classList.add(is-valid); } else { field.classList.add(is-invalid); if (feedbackEl) feedbackEl.textContent message; } } return isValid; } function validateForm() { const requiredFields fullName, phone, serviceType; let isFormValid true; requiredFields.forEach(fieldId > { const field document.getElementById(fieldId); if (!validateField(field)) { isFormValid false; } }); // Validate email if provided const emailField document.getElementById(email); if (emailField && emailField.value) { if (!validateField(emailField)) { isFormValid false; } } return isFormValid; } function submitContactForm() { const submitBtn contactForm.querySelector(buttontypesubmit); // Show loading state submitBtn.disabled true; if(submitSpinner) submitSpinner.classList.remove(d-none); // Collect form data const formData { name: document.getElementById(fullName).value, phone: document.getElementById(phone).value, email: document.getElementById(email).value, service: document.getElementById(serviceType).value, message: document.getElementById(message).value }; // Simulate form submission (replace with actual API call) setTimeout(() > { // Hide loading state submitBtn.disabled false; if(submitSpinner) submitSpinner.classList.add(d-none); // Show success message showNotification(Cảm ơn bạn! Chúng tôi sẽ liên hệ lại trong thời gian sớm nhất., success); // Reset form contactForm.reset(); const formInputs contactForm.querySelectorAll(input, select, textarea); formInputs.forEach(input > { input.classList.remove(is-valid, is-invalid); }); }, 2000); } function showNotification(message, type info) { const notification document.createElement(div); notification.className `alert alert-${type success ? success : info} alert-dismissible fade show position-fixed`; notification.style.cssText top: 100px; right: 20px; z-index: 9999; max-width: 400px;; notification.innerHTML ` ${message} button typebutton classbtn-close data-bs-dismissalert>/button> `; document.body.appendChild(notification); // Auto remove after 5 seconds setTimeout(() > { if (notification.parentNode) { notification.remove(); } }, 5000); } }); // Handle direct navigation with hash (e.g., page load with #hash or programmatic changes) window.addEventListener(load, () > { if (window.location.hash) { // Use auto to jump immediately without additional smooth animation on initial load setTimeout(() > scrollToWithOffset(window.location.hash, auto), 0); } }); window.addEventListener(hashchange, () > { if (window.location.hash) { scrollToWithOffset(window.location.hash, smooth); } }); // Mobile Performance Optimizations (function() { // Check connection quality and device capabilities const connection navigator.connection || navigator.mozConnection || navigator.webkitConnection; const isLowEndDevice navigator.hardwareConcurrency 2; const isSlowConnection connection && (connection.effectiveType slow-2g || connection.effectiveType 2g); // Reduce animations on low-end devices or slow connections if (isLowEndDevice || isSlowConnection) { document.documentElement.style.setProperty(--animation-duration, 0.1s); // Disable AOS animations on low-end devices if (window.AOS) { AOS.init({ duration: 200, once: true, disable: mobile }); } } // Implement lazy loading for images function lazyLoadImages() { const images document.querySelectorAll(imgdata-src); 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); imageObserver.unobserve(img); } }); }); images.forEach(img > imageObserver.observe(img)); } // Preload critical resources based on connection function preloadCriticalResources() { if (!isSlowConnection) { // Preload hero image const heroImg new Image(); heroImg.src https://bacsiduong.com/images/drduong.webp; // Preload critical fonts const fontPreload document.createElement(link); fontPreload.rel preload; fontPreload.href https://fonts.gstatic.com/s/roboto/v32/KFOmCnqEu92Fr1Me5Q.ttf; fontPreload.as font; fontPreload.type font/ttf; fontPreload.crossOrigin anonymous; document.head.appendChild(fontPreload); } } // Optimize carousel performance function optimizeCarousel() { const carousel document.getElementById(pictureCarousel); if (carousel && isLowEndDevice) { // Disable automatic sliding on low-end devices carousel.setAttribute(data-bs-ride, false); } } // Memory management - cleanup unused event listeners function setupMemoryManagement() { let touchStartTime 0; // Throttle scroll events let scrollTimeout; const originalScrollHandler window.onscroll; window.onscroll function() { if (scrollTimeout) { clearTimeout(scrollTimeout); } scrollTimeout setTimeout(() > { if (originalScrollHandler) originalScrollHandler(); }, 16); // ~60fps }; } // Initialize performance optimizations document.addEventListener(DOMContentLoaded, () > { lazyLoadImages(); preloadCriticalResources(); optimizeCarousel(); setupMemoryManagement(); // Add performance monitoring if (performance in window) { window.addEventListener(load, () > { const loadTime performance.timing.loadEventEnd - performance.timing.navigationStart; console.log(`Page load time: ${loadTime}ms`); // Show performance warning if page loads slowly if (loadTime > 3000) { console.warn(Slow page load detected. Consider optimizing resources.); } }); } }); // Network change detection if (connection) { connection.addEventListener(change, () > { const newConnectionType connection.effectiveType; if (newConnectionType slow-2g || newConnectionType 2g) { // Switch to low-bandwidth mode document.body.classList.add(low-bandwidth); } else { document.body.classList.remove(low-bandwidth); } }); } })(); /script> !-- Language Translation Script --> script> const translations { en: { nav_about: About, nav_services: Services, nav_testimonials: Testimonials, nav_activities: Activities, nav_contact: Contact, nav_faq: FAQ, contact_button: strong>Book a consultation/strong>, about_text: Board-certified dermatologist from Hanoi Medical University. Personalized regimens for acne, melasma, pigment disorders and scars. Safe, evidence-based aesthetics (Botox, Filler, Mesotherapy) with natural-looking results., services_title: Our Services, service_1_title: Warm consultation & simple plan, service_1_desc: We listen to your needs, examine your skin and suggest an easy-to-follow plan., service_2_title: Gentle acne care, service_2_desc: Topicals, orals, extractions and peels as needed to calm acne and prevent relapses., service_3_title: Melasma & pigmentation, service_3_desc: Sun control, right actives and safe procedures for long-term maintenance., service_4_title: Acne scar improvement, service_4_desc: Subcision, TCA CROSS, microneedling RF or lasers – chosen for your scar type., service_5_title: Sensitive skin & dermatitis, service_5_desc: Find triggers, repair the skin barrier and guide daily care at home., service_6_title: Natural-looking injectables, service_6_desc: Botox, Filler, Mesotherapy with safety first and soft, balanced results., testimonials_title: Customer Feedback, testimonial_1: `I thought my skin would never be free of acne, but after meeting Dr. Duong, my skin is as smooth as a peeled egg! Thank you so much, Doctor. - span classcustomer-name>Nh***/span>`, testimonial_2: `I tried all kinds of cosmetics but my acne wouldnt go away. Thanks to Dr. Duong, I finally found the true love for my skin! - span classcustomer-name>Kh***/span>`, testimonial_3: `Thanks to Dr. Duong, Im much more confident. After the botox injection, I look ten years younger, everyone praises me.😘 - span classcustomer-name>Ng***/span>`, testimonial_4: `It was my first time getting botox, so I was a bit nervous. But Dr. Duong was very thorough in his consultation, and the injection was gentle and painless. Now the crows feet are gone, and I can smile more naturally.😍 - span classcustomer-name>Ph***/span>`, testimonial_5: `I used to be self-conscious about my acne scars, but now Im completely confident. Thanks to Dr. Duong, my skin is better than I ever expected. Thank you so much, Doctor! - span classcustomer-name>Li***/span>`, testimonial_6: `Thank you, Dr. Duong, for helping me get my healthy skin back. I will diligently follow your advice.😘 - span classcustomer-name>Th***/span>`, carousel_prev: Previous, carousel_next: Next, activities_title: Activities, activity_1_title: Attended the 6th National Dermatology Conference, activity_1_desc: Dr. Duong attended the 6th National Dermatology Conference, updating the latest knowledge and techniques in cosmetic dermatology., activity_2_title: Attended the 5th National Dermatology Conference, activity_2_desc: Dr. Duong attended the 5th National Dermatology Conference in Da Nang to enhance knowledge, gather information, and share practical experience in aesthetic skin treatment and care., activity_3_title: Completed Laser Course, activity_3_desc: Dr. Duong was directly instructed by Dr. Vy on clinical techniques and Laser, resulting in the excellent completion of the course., contact_title: Contact, contact_phone: Phone: +84-344-138-201, contact_address1: Branch 1: Ngoc Hoi, Thanh Tri, Hanoi, contact_address2: Branch 2: An Thuong, Hoai Duc, Hanoi, contact_address3: Branch 3: Thai Ha, Dong Da, Hanoi, contact_facebook: Dr. Duongs Facebook, contact_form_title: Book a Consultation, contact_form_name: Full Name *, contact_form_phone: Phone Number *, contact_form_email: Email (optional), contact_form_service: Service of Interest *, contact_form_service_placeholder: Select a service, contact_form_service_consultation: General Consultation, contact_form_service_acne: Acne Treatment, contact_form_service_melasma: Melasma Treatment, contact_form_service_scar: Scar Treatment, contact_form_service_botox: Botox, contact_form_service_filler: Filler, contact_form_service_other: Other, contact_form_date: Preferred Date *, contact_form_time: Preferred Time *, contact_form_time_placeholder: Select time slot, contact_form_time_morning: Morning (8:00 - 12:00), contact_form_time_afternoon: Afternoon (13:00 - 17:00), contact_form_time_evening: Evening (17:00 - 20:00), contact_form_message: Describe your skin condition (optional), contact_form_submit: Book Now, contact_info_call: Call Now, contact_info_address: Address, contact_info_whatsapp: WhatsApp, contact_info_whatsapp_text: Chat Now, footer_copyright: © 2025 Dr. Duong., hero_title: Dermatologist Duong, hero_text: Gentle, natural-looking skin care in Hanoi. Safe, effective and easy to follow., hero_cta: Book a visit, faq_title: Frequently Asked Questions, faq1_question: How long does acne treatment take?, faq1_answer: Depends on severity and adherence. Expect visible changes in 6–12 weeks; stabilization 3–6 months with relapse prevention., faq2_question: Are the procedures safe?, faq2_answer: Doctor-led indications, verified supplies, strict asepsis and informed consent ensure maximal safety., faq3_question: How to prepare for the visit?, faq3_answer: Avoid heavy makeup; bring current products/prescriptions; stop retinoids/acids 2–3 days before procedures; report allergies. }, vi: { nav_about: Giới Thiệu, nav_services: Dịch Vụ, nav_testimonials: Cảm nhận khách hàng, nav_activities: Hoạt động, nav_contact: Liên Hệ, nav_faq: Câu hỏi thường gặp, contact_button: strong>Đặt lịch tư vấn/strong>, about_text: Bác sĩ Da liễu Dương – tốt nghiệp Đại học Y Hà Nội. Điều trị mụn, nám, rối loạn sắc tố, sẹo rỗ; thẩm mỹ an toàn (Botox, Filler, Mesotherapy)., services_title: Dịch vụ da liễu & thẩm mỹ, service_1_title: Khám – chẩn đoán – phác đồ cá nhân hoá, service_1_desc: Khai thác bệnh sử, soi da, chẩn đoán và xây dựng phác đồ phù hợp mục tiêu – ngân sách., service_2_title: Điều trị mụn toàn diện, service_2_desc: Kết hợp bôi/uống, lấy nhân mụn, peel, năng lượng (nếu cần) – kiểm soát viêm và ngừa tái phát., service_3_title: Nám & rối loạn sắc tố, service_3_desc: Phác đồ chuẩn hoá: kiểm soát nắng, hoạt chất, peel/laser – giảm tái phát dài hạn., service_4_title: Sẹo mụn – cải thiện cấu trúc, service_4_desc: Subcision, TCA CROSS, vi kim RF, laser phân điểm… phối hợp theo loại sẹo., service_5_title: Viêm da & da nhạy cảm, service_5_desc: Kiểm soát yếu tố khởi phát, phục hồi hàng rào, chiến lược kiểm soát – duy trì., service_6_title: Tiêm thẩm mỹ an toàn, service_6_desc: Botox, Filler, Mesotherapy – đề cao an toàn, cân đối và tự nhiên., testimonials_title: Cảm nhận khách hàng, testimonial_1: `Em cứ tưởng da em không bao giờ hết mụn nữa cơ, ai dè gặp bác sĩ Dương, da láng mịn như trứng gà luộc luôn ạ! Cảm ơn bác sĩ nhiều lắm. - span classcustomer-name>Nh***/span>`, testimonial_2: `Em đã thử đủ loại mỹ phẩm mà vẫn không khỏi mụn, cuối cùng nhờ có bác sĩ Dương, em đã tìm được chân ái cho làn da của mình! - span classcustomer-name>Kh***/span>`, testimonial_3: `Nhờ bác sĩ Dương mà mình tự tin hơn hẳn. Tiêm botox xong trẻ ra cả chục tuổi, ai gặp cũng khen.😘 - span classcustomer-name>Ng***/span>`, testimonial_4: `Lần đầu tiêm botox nên mình cũng hơi lo lắng. Nhưng bác sĩ Dương tư vấn rất kỹ, tiêm nhẹ nhàng, không đau chút nào. Giờ thì hết nhăn đuôi mắt rồi, cười tươi tự nhiên hơn hẳn.😍 - span classcustomer-name>Ph***/span>`, testimonial_5: `Trước đây mình tự ti vì sẹo mụn, giờ thì tự tin hẳn. Nhờ bác sĩ Dương mà mình có làn da đẹp hơn mong đợi. Cảm ơn bác sĩ nhiều! - span classcustomer-name>Li***/span>`, testimonial_6: `Cảm ơn bác sĩ Dương đã giúp em lấy lại làn da khỏe mạnh. Em sẽ chăm chỉ thực hiện theo lời dặn của bác sĩ ạ.😘 - span classcustomer-name>Th***/span>`, carousel_prev: Trước, carousel_next: Tiếp theo, activities_title: Hoạt động, activity_1_title: Tham gia hội thảo Da liễu toàn quốc lần thứ 6, activity_1_desc: Bác sĩ Dương đã tham gia Hội thảo Da liễu toàn quốc lần thứ 6, cập nhật những kiến thức và kỹ thuật mới nhất về da liễu thẩm mỹ., activity_2_title: Tham gia hội thảo Da liễu toàn quốc lần thứ 5, activity_2_desc: Bác sĩ Dương đã tham gia Hội thảo Da liễu toàn quốc lần thứ 5 tại Đà Nẵng nhằm nâng cao kiến thức, bổ sung thông tin và chia sẻ kinh nghiệm thực tiễn trong điều trị và chăm sóc da thẩm mỹ., activity_3_title: Hoàn thành khoá học Laser, activity_3_desc: Bác sĩ Dương được thầy Vỹ trực tiếp hướng dẫn về kĩ thuật lâm sàng và Laser, kết quả là xuất xắc hoàn thành khoá học., contact_title: Liên Hệ, contact_phone: Điện thoại: +84-344-138-201, contact_address1: CS1: Ngọc Hồi, Thanh Trì, Hà Nội, contact_address2: CS2: An Thượng, Hoài Đức, Hà Nội, contact_address3: CS3: Thái Hà, Đống Đa, Hà Nội, contact_facebook: Facebook của Dr. Dương, contact_form_title: Đặt lịch tư vấn, contact_form_name: Họ và tên *, contact_form_phone: Số điện thoại *, contact_form_email: Email (tùy chọn), contact_form_service: Dịch vụ quan tâm *, contact_form_service_placeholder: Chọn dịch vụ, contact_form_service_consultation: Khám tư vấn, contact_form_service_acne: Điều trị mụn, contact_form_service_melasma: Điều trị nám, contact_form_service_scar: Điều trị sẹo, contact_form_service_botox: Botox, contact_form_service_filler: Filler, contact_form_service_other: Khác, contact_form_date: Ngày mong muốn *, contact_form_time: Khung giờ mong muốn *, contact_form_time_placeholder: Chọn khung giờ, contact_form_time_morning: Sáng (8:00 - 12:00), contact_form_time_afternoon: Chiều (13:00 - 17:00), contact_form_time_evening: Tối (17:00 - 20:00), contact_form_message: Mô tả tình trạng da (tùy chọn), contact_form_submit: Đặt lịch, contact_info_call: Gọi ngay, contact_info_address: Địa chỉ, contact_info_whatsapp: WhatsApp, contact_info_whatsapp_text: Chat ngay, footer_copyright: © 2025 Dr. Dương., hero_title: Bác sĩ Da liễu Dương, hero_text: Điều trị da liễu – thẩm mỹ tự nhiên tại Hà Nội. An toàn, hiệu quả, cá nhân hoá phác đồ điều trị., hero_cta: Đặt lịch, faq_title: Câu hỏi thường gặp, faq1_question: Điều trị mụn mất bao lâu?, faq1_answer: Phụ thuộc mức độ và tuân thủ. Thường 6–12 tuần thấy rõ, 3–6 tháng để ổn định và hạn chế tái phát., faq2_question: Dịch vụ có an toàn không?, faq2_answer: Bác sĩ trực tiếp chỉ định, vật tư rõ nguồn gốc, vô khuẩn nghiêm ngặt và tư vấn – đồng ý thủ thuật đầy đủ., faq3_question: Cần chuẩn bị gì trước khi khám?, faq3_answer: Không trang điểm dày; mang theo đơn thuốc/sản phẩm đang dùng; nếu làm thủ thuật, ngưng retinoid/acid 2–3 ngày; báo tiền sử dị ứng. } }; const setLanguage (lang) > { document.documentElement.lang lang; document.querySelectorAll(data-lang-key).forEach(element > { const key element.getAttribute(data-lang-key); if (translationslang && translationslangkey) { element.innerHTML translationslangkey; } }); // Update both desktop and mobile language buttons const viButtons lang-vi, lang-vi-mobile; const enButtons lang-en, lang-en-mobile; if (lang vi) { viButtons.forEach(id > { const btn document.getElementById(id); if (btn) btn.classList.add(active); }); enButtons.forEach(id > { const btn document.getElementById(id); if (btn) btn.classList.remove(active); }); document.title Bác sĩ Da liễu Dương – Chăm da an toàn, tự nhiên | Hà Nội; } else { enButtons.forEach(id > { const btn document.getElementById(id); if (btn) btn.classList.add(active); }); viButtons.forEach(id > { const btn document.getElementById(id); if (btn) btn.classList.remove(active); }); document.title Dermatologist Duong – Gentle, natural-looking care | Hanoi; } localStorage.setItem(language, lang); }; const switchLanguage (lang) > { setLanguage(lang); }; document.addEventListener(DOMContentLoaded, () > { const savedLang localStorage.getItem(language) || vi; setLanguage(savedLang); }); /script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]