.e-con {
  padding-inline-start: 0px !important;

  padding-inline-end: 0px !important;
}

.e-con > .e-con-inner {
  max-width: unset !important;
}

.e-con-full,
.e-con > .e-con-inner {
  padding-block-start: 0 !important;

  padding-block-end: 0 !important;
}

.e-con,
.e-con > .e-con-inner {
  display: unset !important;
}

#wpdcom .wpd-form-head {
  display: none !important;
}

#wpdcom {
  max-width: unset !important;
}

#wpd-post-rating {
  margin-bottom: 0 !important;
}

#wpdcom .wpd-thread-head .wpdiscuz-user-settings {
  display: none !important;
}

.wpcf7-form-control-wrap {
  display: block;
}

.wpcf7-form label.error {
  pointer-events: none;
  color: rgb(255, 255, 255) !important;
  display: block;
  font-size: 13.5px;
  padding: 5px 10px;
  text-align: left;
  z-index: 2;
  animation: 0.3s ease-in-out 0s 1 normal forwards running openErrorMessage;
  position: absolute;
  border-radius: 4px;
  background: rgb(220, 53, 69);
  max-width: 80%;
  font-weight: bold;
  word-break: break-word;
  right: auto;
  top: 100%;
  left: 0px;
  font-weight: 500;
}

.wpcf7-form label.error::before {
  content: "";
  border-width: 3px 5px;
  position: absolute;
  border-color: transparent transparent #dc3545 transparent;
  border-style: solid;
  left: 25%;
  bottom: 100%;
  transform: translateX(-50%);
}

@keyframes openErrorMessage {
  0% {
    opacity: 0;
    transform: translateY(15px);
  }
  100% {
    opacity: 1;
    transform: translateY(5px);
  }
}

/* Filter Loading Overlay */
#module__product-result {
  position: relative;
  min-height: 300px;
}

.filter-loading-overlay {
  position: absolute;
  inset: 0;
  background: rgba(255, 255, 255, 0.7);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 10;
  backdrop-filter: blur(2px);
  border-radius: 1rem;
}

.filter-loader {
  width: 48px;
  height: 48px;
  border: 5px solid #093851;
  border-bottom-color: transparent;
  border-radius: 50%;
  display: inline-block;
  box-sizing: border-box;
  animation: rotation 1s linear infinite;
}

@keyframes rotation {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

/* Animations for Government Widgets */
@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(30px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes fadeInLeft {
  from {
    opacity: 0;
    transform: translateX(-30px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes fadeInRight {
  from {
    opacity: 0;
    transform: translateX(30px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes pulse-slow {
  0%,
  100% {
    opacity: 1;
  }
  50% {
    opacity: 0.8;
  }
}

.animate-fadeInUp {
  animation: fadeInUp 0.8s ease-out forwards;
}

.animate-fadeInLeft {
  animation: fadeInLeft 0.8s ease-out forwards;
}

.animate-fadeInRight {
  animation: fadeInRight 0.8s ease-out forwards;
}

.animate-pulse-slow {
  animation: pulse-slow 3s ease-in-out infinite;
}

.delay-100 {
  animation-delay: 100ms;
}
.delay-200 {
  animation-delay: 200ms;
}
.delay-300 {
  animation-delay: 300ms;
}
.delay-400 {
  animation-delay: 400ms;
}
.delay-500 {
  animation-delay: 500ms;
}
.delay-700 {
  animation-delay: 700ms;
}

/* Animation cho Banner */
@keyframes fadeInUpBanner {
  0% {
    opacity: 0;
    transform: translateY(20px);
  }
  100% {
    opacity: 1;
    transform: translateY(0);
  }
}

.swiper-banner-home .swiper-slide .banner-tag,
.swiper-banner-home .swiper-slide .banner-title,
.swiper-banner-home .swiper-slide .banner-desc,
.swiper-banner-home .swiper-slide .banner-btns {
  opacity: 0;
  transform: translateY(20px);
  transition:
    opacity 0.5s ease-in-out,
    transform 0.5s ease-in-out;
}

.swiper-banner-home .swiper-slide-active .banner-tag {
  animation: fadeInUpBanner 0.8s ease-in-out both;
  animation-delay: 0.2s;
}

.swiper-banner-home .swiper-slide-active .banner-title {
  animation: fadeInUpBanner 0.8s ease-in-out both;
  animation-delay: 0.4s;
}

.swiper-banner-home .swiper-slide-active .banner-desc {
  animation: fadeInUpBanner 0.8s ease-in-out both;
  animation-delay: 0.6s;
}

.swiper-banner-home .swiper-slide-active .banner-btns {
  animation: fadeInUpBanner 0.8s ease-in-out both;
  animation-delay: 0.8s;
}

/* Hiệu ứng đánh chữ (typewriter) cho tiêu đề + mô tả Banner V6: gõ tiêu đề -> gõ mô tả -> hiện nút */
.banner-v6-typewriter-cursor {
  display: none;
  width: 3px;
  height: 0.85em;
  margin-left: 3px;
  background-color: currentColor;
  vertical-align: -0.1em;
  animation: bannerV6CursorBlink 0.9s steps(2, start) infinite;
}

.banner-v6-title.is-typing .banner-v6-typewriter-cursor,
.banner-v6-desc.is-typing .banner-v6-typewriter-cursor {
  display: inline-block;
}

@keyframes bannerV6CursorBlink {
  0% {
    opacity: 1;
  }
  50% {
    opacity: 0;
  }
  100% {
    opacity: 1;
  }
}

/* Nút bấm chỉ hiện sau khi gõ xong mô tả (điều khiển bởi JS) */
.banner-v6-btns {
  opacity: 0;
}

.banner-v6-btns.is-visible {
  animation: fadeInUpCS 1s ease-in-out both;
}
