/* ==========================================================================
   FABRICANIM
   Infinite motion effects ported from the addition.zip reference template
   (index.html — .animate-rotate, .iso img zoomInOut, .btn-play pulse-border,
   .service-item-top hover-zoom, .sub-title — and heading_rotate.html's
   scroll-reactive heading tilt), restyled with PAKSA FABRIC's own design
   tokens (var(--orange), var(--ink), DM Mono / Manrope).

   This file is 100% additive: it does not redeclare or override any
   selector from assets/style.css, so the existing site is unaffected
   unless a class below is actually used.
   ========================================================================== */

/* ---------------------------------------------------------------------
   1) Breathing zoom — ported from addition.zip's .iso img { zoomInOut }
   --------------------------------------------------------------------- */
@keyframes fabricanimBreathe {
  0%, 100% { transform: scale(1); }
  50%      { transform: scale(1.08); }
}
.fabricanim-breathe {
  animation: fabricanimBreathe 6s ease-in-out infinite;
  transform-origin: center center;
  will-change: transform;
}

/* ---------------------------------------------------------------------
   2) Continuous circular rotation — ported from addition.zip's
      .animate-rotate { animateRotate 8s linear infinite }
   --------------------------------------------------------------------- */
@keyframes fabricanimRotate {
  100% { transform: rotate(360deg); }
}
.fabricanim-rotate      { animation: fabricanimRotate 12s linear infinite; }
.fabricanim-rotate-slow { animation: fabricanimRotate 26s linear infinite; }

/* ---------------------------------------------------------------------
   3) Pulse-ring ripple — ported from addition.zip's
      .video .btn-play:before { pulse-border 1500ms ease-out infinite }
      Applied to a WRAPPER (not the button itself) since PAKSA's own
      .magnetic-btn already uses overflow:hidden for its own hover fill.
   --------------------------------------------------------------------- */
@keyframes fabricanimPulse {
  0%   { transform: scale(1);    opacity: .6; }
  100% { transform: scale(1.35); opacity: 0; }
}
.fabricanim-pulse-wrap { position: relative; display: inline-block; }
.fabricanim-pulse-wrap::before,
.fabricanim-pulse-wrap::after {
  content: ""; position: absolute; inset: 0; border-radius: 999px;
  border: 1px solid rgba(255, 255, 255, .6); pointer-events: none;
  animation: fabricanimPulse 2.2s ease-out infinite;
}
.fabricanim-pulse-wrap::after { animation-delay: 1.1s; }

/* ---------------------------------------------------------------------
   4) Hover zoom on images — extends addition.zip's
      .service-item-top:hover img { scale(1.1) }
   --------------------------------------------------------------------- */
.fabricanim-hover-zoom { overflow: hidden; display: block; }
.fabricanim-hover-zoom img { transition: transform .6s cubic-bezier(.2, .7, .2, 1); }
.fabricanim-hover-zoom:hover img { transform: scale(1.12); }

/* Applied directly to the fabric rotator card faces — zero markup change,
   pure enhancement on top of the existing JS 3D carousel. */
.fabric-rotation-section .fabric-face.front { overflow: hidden; }
.fabric-rotation-section .fabric-face.front img { transition: transform .6s cubic-bezier(.2, .7, .2, 1); }
.fabric-rotation-section .fabric-card:hover .fabric-face.front img { transform: scale(1.12); }

/* ---------------------------------------------------------------------
   5) Double-line flanking subtitle — ported from addition.zip's
      .sub-title::before / ::after
   --------------------------------------------------------------------- */
.fabricanim-subtitle {
  position: relative; display: inline-block; text-transform: uppercase;
  font: 700 11px 'DM Mono', monospace; letter-spacing: .2em;
  color: var(--orange, #ff4b12); padding: 0 34px; margin: 0 0 18px;
}
.fabricanim-subtitle::before,
.fabricanim-subtitle::after {
  content: ""; position: absolute; top: 50%; width: 24px; height: 1px;
  background: var(--orange, #ff4b12); opacity: .55;
}
.fabricanim-subtitle::before { left: 0; }
.fabricanim-subtitle::after  { right: 0; }

/* ---------------------------------------------------------------------
   6) Scroll-reactive tilt — adapted from heading_rotate.html.
      Kept in normal document flow (not position:fixed) so it enhances
      an element in place instead of pinning it to the viewport.
      Toggled by assets/fabricanim.js on scroll direction change.
   --------------------------------------------------------------------- */
.fabricanim-scrollrotate {
  display: inline-block;
  transition: transform .6s cubic-bezier(.2, .7, .2, 1);
  transform: rotate(0deg);
}
.fabricanim-scrollrotate.fabricanim-tilted { transform: rotate(-8deg); }

/* ---------------------------------------------------------------------
   7) Arrow rotate-on-hover — ported from addition.zip's
      .learn-more-link .arrow { rotate(45deg) -> :hover rotate(90deg) }
   --------------------------------------------------------------------- */
.fabricanim-arrow { display: inline-block; transition: transform .3s ease; }
.fabricanim-arrow-link:hover .fabricanim-arrow { transform: rotate(45deg) translate(2px, -2px); }

/* =========================================================================
   Vision & Mission — ported from addition.zip's About section: a rotating
   logo mark (2) layered over a circular photo, next to Vision/Mission
   cards. Real PAKSA copy carried over from the reference template.
   ========================================================================= */
.fabricanim-vm { background: #fff; }
.fabricanim-vm-grid { display: grid; grid-template-columns: .85fr 1.15fr; gap: 70px; align-items: center; }
.fabricanim-vm-visual { position: relative; min-height: 420px; }
.fabricanim-vm-photo { position: absolute; inset: 0; border-radius: 50% 50% 12px 50%; overflow: hidden; box-shadow: 0 30px 70px rgba(7, 26, 59, .18); }
.fabricanim-vm-photo img { width: 100%; height: 100%; object-fit: cover; }
.fabricanim-vm-logo {
  position: absolute; top: -18px; left: -18px; width: 120px; height: 120px;
  border-radius: 50%; background: #fff; padding: 22px; box-shadow: 0 14px 34px rgba(7, 26, 59, .22); z-index: 2;
}
.fabricanim-vm-logo img { width: 100%; height: 100%; object-fit: contain; }
.fabricanim-vm-copy > p { font-size: 17px; line-height: 1.8; color: var(--muted, #667085); max-width: 560px; }
.fabricanim-vm-cards { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; margin-top: 35px; }
.fabricanim-vm-card { background: #f7f6f2; border-radius: 16px; padding: 30px; }
.fabricanim-vm-icon { width: 46px; height: 46px; padding: 11px; border-radius: 50%; background: var(--orange, #ff4b12); filter: invert(1) brightness(2); margin-bottom: 16px; }
.fabricanim-vm-card h4 { margin: 0 0 10px; font-size: 19px; }
.fabricanim-vm-card p { margin: 0; font-size: 14px; line-height: 1.7; color: var(--muted, #667085); }

@media (max-width: 900px) {
  .fabricanim-vm-grid { grid-template-columns: 1fr; gap: 40px; }
  .fabricanim-vm-visual { min-height: 320px; }
  .fabricanim-vm-cards { grid-template-columns: 1fr; }
}

@media (prefers-reduced-motion: reduce) {
  .fabricanim-breathe,
  .fabricanim-rotate,
  .fabricanim-rotate-slow,
  .fabricanim-pulse-wrap::before,
  .fabricanim-pulse-wrap::after { animation: none; }
}

/* =========================================================================
   OUR PRODUCTS — animated infinite section (point 1)
   Fabric swatches are pure CSS (no extra image assets): a tinted gradient
   base plus a looping diagonal sheen sweep, so every swatch card, and the
   section heading itself, stays in continuous gentle motion.
   ========================================================================= */
.fabricanim-products { background: #eaf3ee; }
.fabricanim-products-head { text-align: center; margin: 0 0 40px; }
.fabricanim-products-head + .fabricanim-products-grid { margin-bottom: 90px; }

.fabricanim-dash-title {
  position: relative; display: inline-block; margin: 0 0 16px; padding: 0 46px;
  text-transform: uppercase; letter-spacing: .01em;
  font: 800 34px/1.1 Manrope, Arial, sans-serif; color: var(--ink, #071a3b);
}
.fabricanim-dash-title::before,
.fabricanim-dash-title::after {
  content: ""; position: absolute; top: 50%; width: 34px; height: 3px;
  background: var(--ink, #071a3b);
  animation: fabricanimDashBreathe 3.2s ease-in-out infinite;
}
.fabricanim-dash-title::before { left: 0; transform-origin: right center; }
.fabricanim-dash-title::after  { right: 0; transform-origin: left center; }
@keyframes fabricanimDashBreathe {
  0%, 100% { transform: scaleX(1);   opacity: .9; }
  50%      { transform: scaleX(1.5); opacity: .45; }
}

.fabricanim-products-group {
  margin: 0; color: var(--orange, #ff4b12); font-weight: 800; font-size: 25px;
  text-transform: uppercase; letter-spacing: .02em;
  animation: fabricanimPulseText 3.6s ease-in-out infinite;
}
.fabricanim-products-note { margin: 8px 0 0; font: 600 13px 'DM Mono', monospace; color: var(--muted, #667085); }
@keyframes fabricanimPulseText {
  0%, 100% { opacity: 1; }
  50%      { opacity: .55; }
}

.fabricanim-products-grid {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 34px 30px;
  max-width: 1180px; margin: 0 auto 60px; padding: 0 9vw;
}
.fabricanim-product-card { transition: transform .35s cubic-bezier(.2, .7, .2, 1); }
.fabricanim-product-card:hover { transform: translateY(-6px); }

.fabricanim-swatch {
  --c: #ccc; position: relative; aspect-ratio: 16 / 10; border-radius: 6px;
  overflow: hidden; background: var(--c);
  box-shadow: 0 14px 30px rgba(7, 26, 59, .16);
  transition: box-shadow .35s ease;
}
.fabricanim-swatch img {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; display: block;
}
.fabricanim-product-card:hover .fabricanim-swatch { box-shadow: 0 22px 46px rgba(7, 26, 59, .28); }
.fabricanim-swatch--stripe {
  background: repeating-linear-gradient(100deg, var(--c1) 0 12%, var(--c2) 12% 24%);
}
.fabricanim-swatch::before {
  content: ""; position: absolute; inset: 0; mix-blend-mode: overlay; pointer-events: none; z-index: 1;
  background: linear-gradient(120deg, rgba(255, 255, 255, .55) 0%, rgba(255, 255, 255, 0) 22%,
    rgba(0, 0, 0, .18) 45%, rgba(255, 255, 255, 0) 62%, rgba(255, 255, 255, .35) 80%, rgba(0, 0, 0, .12) 100%);
}
.fabricanim-swatch::after {
  content: ""; position: absolute; top: -50%; left: -60%; width: 38%; height: 200%; z-index: 2;
  background: linear-gradient(75deg, transparent, rgba(255, 255, 255, .55), transparent);
  transform: rotate(8deg); pointer-events: none;
  animation: fabricanimSheen 4.5s ease-in-out infinite;
  animation-delay: var(--sd, 0s);
}
@keyframes fabricanimSheen {
  0%   { left: -60%; }
  100% { left: 130%; }
}

.fabricanim-product-label {
  display: block; margin-top: 13px; text-align: center; text-transform: uppercase;
  font: 800 12.5px 'DM Mono', monospace; letter-spacing: .05em; color: var(--ink, #071a3b);
}

@media (max-width: 900px) {
  .fabricanim-products-grid { grid-template-columns: repeat(2, 1fr); padding: 0 6vw; }
  .fabricanim-dash-title { font-size: 26px; padding: 0 34px; }
}
@media (max-width: 560px) {
  .fabricanim-products-grid { grid-template-columns: 1fr; }
}

/* =========================================================================
   GLOBAL PRESENCE — static section (point 2). Intentionally carries NO
   fabricanim-breathe / -rotate / -pulse / sheen animation: only the site's
   own one-time scroll-reveal fade, same as every other static block.
   ========================================================================= */
.fabricanim-static { background: #fff; }
.fabricanim-static-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 70px; align-items: center; }
.fabricanim-static-media { border-radius: 18px; overflow: hidden; box-shadow: 0 30px 70px rgba(7, 26, 59, .16); }
.fabricanim-static-media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.fabricanim-static-copy p:not(.kicker) { font-size: 17px; line-height: 1.8; color: var(--muted, #667085); max-width: 520px; }
.fabricanim-static-badges { display: flex; gap: 22px; align-items: center; flex-wrap: wrap; margin-top: 30px; }
.fabricanim-static-badges img { height: 58px; width: auto; object-fit: contain; }

@media (max-width: 900px) {
  .fabricanim-static-grid { grid-template-columns: 1fr; gap: 34px; }
}

/* ---------------------------------------------------------------------
   Reusable sheen-sweep utility (same motion as the product swatches),
   usable on any image frame: <div class="fabricanim-sheen"> wrapping
   an <img>.
   --------------------------------------------------------------------- */
.fabricanim-sheen { position: relative; overflow: hidden; }
.fabricanim-sheen::after {
  content: ""; position: absolute; top: -50%; left: -60%; width: 38%; height: 200%; z-index: 2;
  background: linear-gradient(75deg, transparent, rgba(255, 255, 255, .55), transparent);
  transform: rotate(8deg); pointer-events: none;
  animation: fabricanimSheen 4.5s ease-in-out infinite;
}

/* =========================================================================
   Certified Quality showcase (point 2) — 80%-wide image with a looping
   glow pulse plus the sheen sweep above, so it stays in continuous motion.
   ========================================================================= */
.fabricanim-certs-showcase { background: #f7f6f2; }
.fabricanim-certs-showcase-inner { width: 80%; max-width: 900px; margin: 0 auto; text-align: center; }
.fabricanim-certs-frame {
  border-radius: 18px; overflow: hidden; margin-top: 10px;
  animation: fabricanimGlowPulse 3.4s ease-in-out infinite;
}
.fabricanim-certs-frame img { width: 100%; height: auto; display: block; }
@keyframes fabricanimGlowPulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(255, 75, 18, 0), 0 20px 50px rgba(7, 26, 59, .16); }
  50%      { box-shadow: 0 0 0 16px rgba(255, 75, 18, .12), 0 20px 50px rgba(7, 26, 59, .16); }
}

/* =========================================================================
   Precision Engineering showcase (point 3) — continuous zoom in/out on
   assets/images/fabricanim-target.jpg via the existing .fabricanim-breathe
   keyframes, contained so it never overflows its frame.
   ========================================================================= */
.fabricanim-target-showcase { background: #fff; }
.fabricanim-target-showcase-inner { max-width: 460px; margin: 0 auto; text-align: center; }
.fabricanim-target-frame { border-radius: 16px; overflow: hidden; margin-top: 10px; box-shadow: 0 20px 50px rgba(7, 26, 59, .16); }
.fabricanim-target-frame img { width: 100%; height: auto; display: block; }
