/*
 * Krowand landing page (Test build), part 2: the template's content
 * sections, in its order and proportions: about (three columns), projects
 * carousel (full-bleed tall cards), textured figure, clients, contacts
 * (address beside a three-column form), footer, all over the faint column
 * guides. Colour and type rules are in base.css.
 */

/* ---------- content layer and column guides ---------- */

.content {
  position: relative;
  isolation: isolate;
  display: flow-root; /* stop the first and last margins collapsing through */
  overflow-x: clip;
}
.page-lines {
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
}
.page-lines .container {
  direction: ltr; /* decorative guides do not mirror */
  height: 100%;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
}
.page-lines span {
  border-left: 1px solid var(--line);
}
.page-lines span:last-child {
  border-right: 1px solid var(--line);
}

/* ---------- section scaffolding ---------- */

.section {
  position: relative;
  margin-block: 7.1rem;
}
.section-header {
  position: relative;
}
.section-title {
  margin-left: 0.32em; /* balance the trailing tracking so the title centres */
  text-align: center;
  font: 400 2.1875rem/1.1 var(--ff-latin-display);
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: var(--fg);
}
:lang(ar) .section-title {
  margin-left: 0;
  font: 500 2.375rem/1.4 var(--ff-ar);
  letter-spacing: 0;
  word-spacing: 0.12em;
  text-transform: none;
}
.tone {
  color: var(--tone);
}
/* the huge faint word that hangs off the edge of the container */
.fade-title {
  position: absolute;
  z-index: -1;
  left: 0;
  top: 0.03em;
  transform: translate(-50%, -50%);
  font: 700 10.8rem/1 var(--ff-latin);
  color: var(--ghost);
  opacity: var(--fade-opacity);
  white-space: nowrap;
  pointer-events: none;
  user-select: none;
}
:lang(ar) .fade-title {
  font-family: var(--ff-ar);
}
.fade-title-right {
  left: 100%;
}
.about .fade-title {
  top: 1em;
}
.contacts .fade-title-right {
  left: 90%;
}
/* everything below the hero mirrors, so the ghost words mirror too */
[dir="rtl"] .fade-title {
  left: auto;
  right: 0;
  transform: translate(50%, -50%);
}
[dir="rtl"] .fade-title-right {
  left: auto;
  right: 100%;
}
[dir="rtl"] .contacts .fade-title-right {
  left: auto;
  right: 104%; /* the Arabic word is shorter, so it needs more bleed to clip */
}
.section-content {
  margin-top: 7.1rem;
}
/* the sentence that sets a section up: one size above body, never full width */
.section-lede {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: 1rem 2.5rem;
  margin-top: 3.4rem;
}
.section-lead {
  max-width: 62ch;
  font-size: 1.0625rem;
  line-height: 1.75;
  color: var(--muted);
  text-wrap: pretty;
}
:lang(ar) .section-lead {
  font-size: 1.125rem;
  line-height: 1.95;
}
.clients .section-lede,
.clients .section-lead {
  max-width: 54ch;
  margin-inline: auto;
  text-align: center;
}
/* the quiet secondary action: a rule under the words, the arrow leads out */
.link-arrow {
  display: inline-flex;
  align-items: center;
  gap: 0.7em;
  flex: none;
  padding-block: 0.35em;
  border-bottom: 1px solid var(--rule);
  color: var(--fg);
  font: 600 0.875rem/1.4 var(--ff-latin);
  letter-spacing: 0.15em;
  text-transform: uppercase;
  text-decoration: none;
  transition: border-color 0.2s ease-out, color 0.2s ease-out;
}
:lang(ar) .link-arrow {
  font: 600 1rem/1.5 var(--ff-ar);
  letter-spacing: 0;
  text-transform: none;
}
.link-arrow .ico-next {
  width: 1.5em;
  height: 0.75em;
  color: var(--tone);
  transition: transform 0.24s var(--ease-out-strong);
}
.link-arrow:hover {
  color: var(--nav-current);
  border-color: currentColor;
}
@media (hover: hover) and (pointer: fine) {
  .link-arrow:hover .ico-next {
    transform: translateX(4px);
  }
  [dir="rtl"] .link-arrow:hover .ico-next {
    transform: scaleX(-1) translateX(4px);
  }
}
.link-arrow:active {
  transform: scale(0.98);
}

/* ---------- about: statement, services, photo ---------- */

.about-row {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 3rem 30px;
}
.col-about-title {
  margin-bottom: 1.1em;
  font: 600 1.875rem/1.12 var(--ff-latin);
  color: var(--fg);
  text-wrap: balance;
}
:lang(ar) .col-about-title {
  font: 600 1.75rem/1.45 var(--ff-ar);
}
.col-about-info p + p {
  margin-top: 1.6em;
}
.col-about-spec {
  padding-inline: 3.4625rem;
}
.service-item + .service-item {
  margin-top: 2em;
}
.service-item .ico {
  display: block;
  width: 56px;
  height: 30px;
  color: var(--tone);
}
[dir="rtl"] .service-item .ico-flip {
  transform: scaleX(-1);
}
.service-item h4 {
  margin-top: 0.8em;
  margin-bottom: 0.5em;
  font: 600 1.125rem/1.35 var(--ff-latin);
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--fg);
}
:lang(ar) .service-item h4 {
  font: 600 1.125rem/1.5 var(--ff-ar);
  letter-spacing: 0;
  text-transform: none;
}
.service-desc {
  margin-bottom: 1.1em;
  max-width: 34ch;
  font-size: 0.9375rem;
  color: var(--faint);
}
:lang(ar) .service-desc {
  font-size: 0.9375rem;
  line-height: 1.8;
}
/* the three figures that say what the catalogue actually holds */
.about-facts {
  margin-top: 2.8em;
  border-top: 1px solid var(--rule);
}
.about-fact {
  padding-block: 1.15em;
  border-bottom: 1px solid var(--line);
}
.about-fact:last-child {
  border-bottom: 0;
}
.about-fact dt {
  font: 600 1.5rem/1.25 var(--ff-latin-display);
  letter-spacing: 0.04em;
  color: var(--tone);
}
:lang(ar) .about-fact dt {
  font: 600 1.5rem/1.5 var(--ff-ar);
  letter-spacing: 0;
}
.about-fact dd {
  margin: 0.25em 0 0;
  font-size: 0.9375rem;
  line-height: 1.65;
  color: var(--faint);
  text-wrap: pretty;
}
:lang(ar) .about-fact dd {
  font-size: 0.9375rem;
  line-height: 1.8;
}
.col-about-img {
  position: relative;
  margin-inline-start: -20px;
}
/* the retry pill (base.css) over the photo, clear of the caption below it */
.col-about-img .pic-retry {
  top: 38%;
}
.col-about-img .pic {
  display: block;
  width: 100%;
  aspect-ratio: 380 / 470;
  box-shadow: var(--img-shadow);
}
.about-cap {
  display: grid;
  gap: 0.3em;
  margin-top: 1.25em;
  padding-inline-start: 1em;
  border-inline-start: 2px solid var(--tone);
}
.about-cap-t {
  font: 600 0.8125rem/1.4 var(--ff-latin);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--fg);
}
:lang(ar) .about-cap-t {
  font: 600 1rem/1.5 var(--ff-ar);
  letter-spacing: 0;
  text-transform: none;
}
.about-cap-d {
  font-size: 0.875rem;
  line-height: 1.6;
  color: var(--faint);
}
:lang(ar) .about-cap-d {
  font-size: 0.9375rem;
  line-height: 1.8;
}

/* ---------- projects carousel: four tall cards, full bleed ---------- */

.products-lede + .projects-carousel,
.projects .section-content.projects-carousel {
  margin-top: 4.6rem;
}
.projects-carousel {
  position: relative;
  background: var(--photo-ground); /* the cards cover it; the arrows read against it */
}
.project-track {
  display: flex;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scrollbar-width: none;
  overscroll-behavior-x: contain;
}
.project-track::-webkit-scrollbar {
  display: none;
}
.project {
  position: relative;
  flex: 0 0 25%;
  scroll-snap-align: start;
  overflow: hidden;
}
.project-link {
  display: block;
  color: var(--on-photo);
  text-decoration: none;
}
.project figure {
  position: relative;
  aspect-ratio: 480 / 880;
  max-height: 90svh;
  overflow: hidden;
  background: var(--photo-ground);
}
.project .pic {
  display: block;
  width: 100%;
  height: 100%;
  transition: transform 8s linear;
}
.project figure::after {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--photo-ground);
  opacity: 0.7;
  transition: opacity 0.5s;
}
/* the two pale renders need a denser band behind the caption only */
.project-light figure::after {
  background: linear-gradient(
    to bottom,
    rgba(var(--scrim), 0.72) 0,
    rgba(var(--scrim), 0.72) 22%,
    rgba(var(--scrim), 0.4) 36%,
    rgba(var(--scrim), 0.4) 70%,
    rgba(var(--scrim), 0.64) 100%
  );
  opacity: 1;
}
.project figcaption {
  position: absolute;
  z-index: 1;
  inset: 3.2rem 3.6rem;
}
.project-title {
  position: relative;
  top: 0;
  font: 400 1.5625rem/1.45 var(--ff-latin-display);
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--on-photo);
  transition: top 0.5s, opacity 0.5s;
}
:lang(ar) .project-title {
  font: 600 1.625rem/1.45 var(--ff-ar);
  letter-spacing: 0;
}
.project-spec {
  position: relative;
  top: 0;
  margin-top: 0.6em;
  font: 400 0.875rem/1.55 var(--ff-latin);
  color: var(--on-photo);
  text-shadow: 0 1px 10px rgba(17, 17, 17, 0.75), 0 0 2px rgba(17, 17, 17, 0.5);
  transition: top 0.5s 0.05s, opacity 0.5s 0.05s;
}
:lang(ar) .project-spec {
  font: 400 0.9375rem/1.7 var(--ff-ar);
}
.project-category {
  position: absolute;
  left: 0;
  bottom: 0.55em;
  writing-mode: vertical-rl;
  transform: rotate(180deg);
  font: 400 14px/1 var(--ff-latin-display);
  letter-spacing: 0.8em;
  text-transform: uppercase;
  white-space: nowrap;
  color: var(--on-photo);
  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.85), 0 0 18px rgba(0, 0, 0, 0.6);
  transition: letter-spacing 0.5s, opacity 0.5s;
}
:lang(ar) .project-category {
  bottom: 0.55em;
  font: 600 0.9375rem/1 var(--ff-ar);
  letter-spacing: 0;
  text-orientation: sideways;
  word-spacing: 0;
  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.85), 0 0 18px rgba(0, 0, 0, 0.6);
}
[dir="rtl"] .project-category {
  left: auto;
  right: 0;
}
.project-zoom {
  position: absolute;
  left: 50%;
  top: 50%;
  display: grid;
  place-items: center;
  width: 9em;
  height: 9em;
  margin: -4.5em;
  border-radius: 50%;
  background: var(--zoom-bg);
  color: var(--zoom-fg);
  opacity: 0;
  transform: scale(0.5);
  transition: opacity 0.7s, transform 0.7s ease;
}
.project-zoom .ico {
  width: 2.5em;
  height: 2.5em;
}
@media (hover: hover) and (pointer: fine) {
  .project-link:hover figure::after {
    opacity: 0;
  }
  .project-link:hover .pic {
    transform: scale(1.4);
  }
  .project-link:hover .project-title,
  .project-link:hover .project-spec {
    top: 30px;
    opacity: 0;
  }
  .project-link:hover .project-category {
    opacity: 0;
  }
  :lang(en) .project-link:hover .project-category {
    letter-spacing: 2em;
  }
  .project-link:hover .project-zoom {
    opacity: 1;
    transform: scale(1);
  }
}
.project-link:focus-visible {
  outline: 3px solid var(--focus-photo);
  outline-offset: -6px;
}
/* the positioned figure paints over the anchor's own outline */
.project-link:focus-visible figure::before {
  content: "";
  position: absolute;
  inset: 6px;
  z-index: 3;
  border: 3px solid var(--focus-photo);
  pointer-events: none;
}
.project-link:focus-visible .project-zoom {
  opacity: 1;
  transform: scale(1);
}

/* carousel PREV / NEXT on the photographs */
.owl-arrow {
  position: absolute;
  z-index: 2;
  top: 50%;
  display: inline-flex;
  align-items: center;
  gap: 0.8em;
  min-height: 44px;
  padding: 0.75em 1.15em;
  transform: translateY(-50%);
  font: 400 1rem/1 var(--ff-latin-display);
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: var(--on-photo);
  /* the label reads over a photograph: it needs a scrim, not a shadow */
  background: rgba(var(--scrim), 0.72);
  text-shadow: 0 1px 12px rgba(0, 0, 0, 0.5);
  transition: background-color 0.3s;
}
:lang(ar) .owl-arrow {
  font: 500 1rem/1 var(--ff-ar);
  letter-spacing: 0;
}
.owl-arrow:hover,
.owl-arrow:focus-visible {
  background: rgba(var(--scrim), 0.88);
}
.owl-arrow:focus-visible {
  outline-color: var(--focus-photo);
}
.owl-arrow .ico-long {
  opacity: 1;
}
.owl-prev {
  inset-inline-start: 3.6rem;
}
.owl-next {
  inset-inline-end: 3.6rem;
}

/* ---------- experience: the photograph shows through the figure ---------- */

.experience {
  overflow-x: clip;
}
.experience-row {
  display: flex;
  align-items: flex-end;
  justify-content: center;
  flex-wrap: wrap;
}
/* the script paints the photo through the numeral on a canvas (oak without it) */
.text-parallax {
  position: relative;
  font: 700 21.8rem/1 var(--ff-latin-display);
  color: var(--tone);
  user-select: none;
}
.js .text-parallax {
  color: transparent;
}
.text-parallax.has-mask {
  overflow: clip;
  background: var(--tone); /* shows through the glyph until the photo paints */
  -webkit-mask: var(--glyph) 0 0 / 100% 100% no-repeat;
  mask: var(--glyph) 0 0 / 100% 100% no-repeat;
  view-timeline-name: --kw-numeral;
}
/* the photo is 160% of the glyph's height and lags behind the page like stellar 0.85 */
.text-parallax canvas {
  position: absolute;
  top: 0;
  left: 0;
  display: block;
  width: 100%;
  height: 160%;
  transform: translateY(-18.75%);
  pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
  @supports (animation-timeline: view()) {
    .text-parallax canvas {
      animation: kw-parallax linear both;
      animation-timeline: --kw-numeral;
    }
  }
}
@keyframes kw-parallax {
  from {
    transform: translateY(-35.625%);
  }
  to {
    transform: translateY(-1.875%);
  }
}
/* the eight families the numeral is counting, named */
.family-line {
  display: flex;
  flex-wrap: wrap;
  gap: 0 2.4rem;
  margin-top: 3.2rem;
  justify-content: center;
}
.family-line li {
  padding-top: 0.75em;
  padding-bottom: 0.2em;
  border-top: 2px solid var(--tone);
  font: 400 0.875rem/1.5 var(--ff-latin-display);
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--fg);
}
:lang(ar) .family-line li {
  font: 500 1rem/1.7 var(--ff-ar);
  letter-spacing: 0;
  text-transform: none;
}
.experience-info {
  margin-bottom: 11.5px;
  margin-inline-start: 0.6em;
  font: 400 1.5625rem/1.45 var(--ff-latin-display);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--fg);
  text-align: start;
}
:lang(ar) .experience-info {
  font: 500 1.625rem/1.55 var(--ff-ar);
  letter-spacing: 0;
}

/* ---------- clients: our two marks, then the brands we carry ---------- */

.clients {
  text-align: center;
}
.brands-group {
  margin-top: 3.8rem;
}
.group-label {
  padding-bottom: 0.2em;
  font: 600 0.8125rem/1.4 var(--ff-latin);
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--label);
}
:lang(ar) .group-label {
  font: 600 1rem/1.6 var(--ff-ar);
  letter-spacing: 0;
  text-transform: none;
}
.clients-list {
  display: grid;
  align-items: start;
  justify-items: center;
  gap: 3.4rem 1.6rem;
  margin-top: 2.1rem;
}
.clients-own {
  grid-template-columns: repeat(2, minmax(0, 19rem));
  justify-content: center;
  gap: 3.4rem 5rem;
}
.clients-carried {
  grid-template-columns: repeat(4, minmax(0, 1fr)); /* one track per carried brand */
  gap: 3.4rem 1.2rem;
}
.clients-list .client {
  width: 100%;
  padding-top: 1.3rem;
  border-top: 1px solid var(--rule);
}
/* the carried cells are a row of their own: no logo to bottom-align against */
.clients-carried .client-name {
  display: block;
  min-height: 0;
}
.clients-cta {
  margin-top: 4.6rem;
}
.cta-line {
  max-width: 54ch;
  margin: 0 auto 2rem;
  font-size: 0.9375rem;
  line-height: 1.7;
  color: var(--faint);
  text-wrap: pretty;
}
:lang(ar) .cta-line {
  font-size: 1rem;
  line-height: 1.9;
}
.client {
  display: flex;
  flex-direction: column;
  align-items: center;
  width: auto;
}
/* the template's logo wall recedes and lifts on hover */
.client img {
  width: 119px;
  height: auto;
  opacity: 0.85;
  transition: opacity 0.5s;
}
.client.is-own:hover img {
  opacity: 1;
}
.client.is-own:first-child img {
  aspect-ratio: 262 / 141;
  height: auto;
  object-fit: contain;
}
:root[data-theme="dark"] .client img {
  opacity: 0.85;
}
.client.is-own + .client.is-own img {
  margin-block: 13px;
}
.client-own {
  margin-top: 0.35rem;
  font: 500 0.8125rem/1.4 var(--ff-latin);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--label);
}
:lang(ar) .client-own {
  font: 600 1rem/1.5 var(--ff-ar);
  letter-spacing: 0;
}
.client-name {
  display: flex;
  align-items: flex-end;
  height: auto;
  min-height: 2.2em;
  font: 400 1.5rem/1 var(--ff-latin-display);
  letter-spacing: 0.3em;
  margin-right: -0.3em;
  text-transform: uppercase;
  color: var(--faint);
  transition: color 0.5s;
}
:lang(ar) .client-name {
  margin-right: 0;
  font: 600 1.5rem/1.2 var(--ff-ar);
  letter-spacing: 0;
}
.client:hover .client-name {
  color: var(--fg);
}
.client-line {
  margin-top: 0.35rem;
  font-size: 0.8125rem;
  line-height: 1.55;
  color: var(--faint);
  text-wrap: pretty;
}
:lang(ar) .client-line {
  font-size: 0.9375rem;
  line-height: 1.7;
}
.client:not(.is-own) .client-line {
  margin-top: 0.35rem;
}

/* ---------- contacts: address beside the three-column form ---------- */

.contacts-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 2fr);
  gap: 3rem 30px;
}
.contact-form {
  display: flex;
  flex-direction: column;
  margin-inline-start: -20px;
}
.col-address {
  margin-top: 2.4rem;
  font-style: normal;
  font: 300 1rem/1.6 var(--ff-latin);
  color: var(--muted);
}
:lang(ar) .col-address {
  font: 400 1.0625rem/1.8 var(--ff-ar);
}
.addr-list {
  margin: 0;
  border-top: 1px solid var(--rule);
}
.addr-row {
  padding-block: 0.95em;
  border-bottom: 1px solid var(--line);
}
.addr-row:last-child {
  border-bottom: 0;
}
.addr-row dt {
  margin-bottom: 0.3em;
  font: 600 0.75rem/1.4 var(--ff-latin);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--label);
}
:lang(ar) .addr-row dt {
  font: 600 0.875rem/1.5 var(--ff-ar);
  letter-spacing: 0;
  text-transform: none;
}
.addr-row dd {
  margin: 0;
  color: var(--fg);
}
.addr-row .maps-link {
  display: block;
  margin-top: 0.15em;
  font-size: 0.875rem;
}
:lang(ar) .addr-row .maps-link {
  font-size: 0.9375rem;
}
.addr-row dd[data-i18n="companyLine"] {
  font-size: 0.9375rem;
  color: var(--muted);
}
.col-address a {
  color: inherit;
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 4px;
  text-decoration-color: color-mix(in srgb, currentColor 35%, transparent);
  transition: color 0.3s, text-decoration-color 0.3s;
}
.col-address a:hover {
  color: var(--nav-current);
  text-decoration-color: currentColor;
}
@media (min-width: 768px) {
  .col-address a {
    display: inline-block;
    padding-block: 3px;
    margin-block: -3px;
  }
}
.form-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  grid-template-rows: auto auto minmax(0, 1fr);
  flex: 1;
  gap: 1.4rem 10px;
  margin-bottom: 10px;
}
.field-label {
  display: block;
  margin-bottom: 0.55em;
  font: 600 0.75rem/1.4 var(--ff-latin);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--fg);
}
:lang(ar) .field-label {
  font: 600 0.9375rem/1.5 var(--ff-ar);
  letter-spacing: 0;
  text-transform: none;
}
.field-label .req {
  color: var(--fg);
  font-weight: 700;
}
:root[data-theme="dark"] .field-label .req {
  color: var(--tone); /* the accent only clears 4.5:1 on the dark ground */
}
.field-label .opt {
  margin-inline-start: 0.5em;
  font-weight: 400;
  letter-spacing: 0;
  text-transform: none;
  color: var(--faint);
}
.g-name {
  grid-area: 1 / 1;
}
.g-product {
  grid-area: 2 / 1;
}
.g-phone {
  grid-area: 1 / 2;
}
.g-qty {
  grid-area: 2 / 2;
}
/* the message is the point of the form: full width, and it takes the slack */
.g-msg {
  grid-area: 3 / 1 / auto / span 2;
  display: flex;
  flex-direction: column;
  min-height: 0;
}
.field {
  display: block;
  width: 100%;
  height: 3.625rem;
  padding-inline: 22px;
  border: 1px solid var(--field);
  border-radius: 0.75rem;
  background: var(--field);
  color: var(--fg);
  font: 400 1rem/1.4 var(--ff-body);
  -webkit-appearance: none;
  appearance: none;
  transition: border-color 0.15s, background-color 0.15s, box-shadow 0.15s;
}
.field::placeholder {
  color: var(--faint);
  opacity: 1;
}
[dir="rtl"] .field[dir="ltr"]::placeholder {
  direction: rtl;
  text-align: right;
}
[dir="rtl"] .field[dir="ltr"]:placeholder-shown {
  direction: rtl;
}
[dir="rtl"] .field[dir="ltr"] {
  text-align: right;
}
textarea.field {
  flex: 1;
  height: auto;
  min-height: 9.5em;
  padding-top: 1.1em;
  resize: none;
}
.field:focus {
  outline: none;
  border-color: var(--focus);
  background: var(--bg);
}
.field:focus-visible {
  box-shadow: inset 0 0 0 1px var(--focus);
}
.field[aria-invalid="true"] {
  border-color: var(--danger);
}
.field.is-wobble {
  animation: kw-wobble 1s ease-in-out;
}
@keyframes kw-wobble {
  16.65% {
    transform: translateX(8px);
  }
  33.3% {
    transform: translateX(-6px);
  }
  49.95% {
    transform: translateX(4px);
  }
  66.6% {
    transform: translateX(-2px);
  }
  83.25% {
    transform: translateX(1px);
  }
  to {
    transform: none;
  }
}
.error {
  display: flex;
  align-items: center;
  gap: 0.35rem;
  margin-top: 0.35rem;
  font-size: 0.8125rem;
  font-weight: 500;
  line-height: 1.4;
  color: var(--danger);
}
.error:empty {
  display: none;
}
.error .ico {
  width: 14px;
  height: 14px;
}
.form-submit {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-items: center;
  justify-content: flex-end;
  gap: 0.6rem 1.25rem;
  margin-top: 1.2em;
}
/* the template's SEND swings once as it scrolls in (desktop only, like WOW) */
@media (hover: hover) and (pointer: fine) {
  .js .swing-on-view.is-in {
    animation: kw-swing 1s ease;
    transform-origin: top center;
  }
}
@keyframes kw-swing {
  20% {
    transform: rotate(15deg);
  }
  40% {
    transform: rotate(-10deg);
  }
  60% {
    transform: rotate(5deg);
  }
  80% {
    transform: rotate(-5deg);
  }
  to {
    transform: none;
  }
}
.form-note {
  font-size: 0.8125rem;
  color: var(--faint);
}
.form-status {
  margin-top: 0.75rem;
  text-align: end;
  font-size: 0.875rem;
  color: var(--faint);
}
.form-status:empty {
  display: none;
}

/* ---------- footer ---------- */

/*
 * The footer leaves the 1140 body column for a wider measure of its own, so
 * on a wide screen it reads as the base of the page instead of a boxed grid
 * parked in the middle of it. Two horizontal hairlines carry the structure:
 * the first caps the template's column guides where the footer starts, the
 * second lifts the bottom bar off the directory. Nothing rules the columns
 * vertically, because vertical lines are what turn columns back into cells.
 *
 * Every column is a head cell and a body cell on the same two subgrid rows,
 * so the labels sit on one line and the first link of each list on the next.
 */

.footer {
  --footer-wrap: 1720px;
  --footer-edge: clamp(24px, 3.6vw, 96px);
  --footer-gap: clamp(1.7rem, 2.5vw, 3.1rem);
  --footer-head-gap: 1.2rem;
  position: relative;
  z-index: 0; /* its own stacking context, so the ground hides the guides */
  margin-top: 7.1rem;
  background: var(--bg);
  padding-bottom: 4.125rem;
  font-size: 0.8125rem;
  color: var(--faint);
}
:lang(ar) .footer {
  font-size: 0.875rem;
}
.footer .container {
  width: min(100% - 2 * var(--footer-edge), var(--footer-wrap));
}
.footer-top {
  display: grid;
  grid-template-columns:
    minmax(0, 1.45fr) minmax(0, 0.95fr) minmax(0, 1fr) minmax(0, 1fr)
    minmax(0, 1.12fr) minmax(0, 1.5fr);
  grid-template-rows: auto auto; /* heads, then bodies */
  gap: var(--footer-head-gap) var(--footer-gap);
  padding-top: 3.4rem;
  border-top: 1px solid var(--rule);
}
.footer-col {
  display: grid;
  grid-row: span 2;
  grid-template-rows: subgrid; /* dropped where unsupported: the column then
     keeps rows of its own and only the cross column alignment is lost */
  align-content: start;
}
/* the eight materials take two tracks, so they read four and four */
.footer-col-mat {
  grid-column: span 2;
}
.footer-h {
  align-self: end;
  margin: 0;
  font: 600 0.75rem/1.4 var(--ff-latin);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--label);
}
:lang(ar) .footer-h {
  font: 600 0.9375rem/1.5 var(--ff-ar);
  letter-spacing: 0;
  text-transform: none;
}
.footer-brand {
  justify-self: start;
  align-self: end;
  display: inline-flex;
  padding-block: 9px;
  margin-block: -9px;
  border-radius: 4px;
}
.footer-brand img {
  width: 172px;
  height: auto;
}
.footer-col-body {
  display: grid;
  align-content: start;
  justify-items: start;
}
.footer-note {
  max-width: 42ch;
  margin: 0;
  line-height: 1.7;
}
:lang(ar) .footer-note {
  line-height: 1.95;
}
.footer-wa {
  display: inline-flex;
  align-items: center;
  gap: 0.6em;
  margin-top: 1.7rem;
  padding: 0.75em 1.35em;
  border: 1px solid var(--rule);
  border-radius: 999px;
  color: var(--fg);
  text-decoration: none;
  transition: border-color 0.2s ease-out, color 0.2s ease-out, transform 0.2s ease-out;
}
.footer-wa .ico {
  width: 16px;
  height: 16px;
}
.footer-wa:hover {
  border-color: currentColor;
  color: var(--nav-current);
  transform: translateY(-1px);
}
.footer-links {
  display: grid;
  align-content: start;
  gap: 0.72em var(--footer-gap);
  color: var(--muted);
}
.footer-addr {
  color: var(--muted);
}
.footer-links-split {
  grid-auto-flow: column; /* down the first sub column, then the second */
  grid-template-rows: repeat(4, auto);
  /* the pair sits at the head of its two tracks and keeps its own tighter
     gap, so the eight read as one list and not as a column with no label */
  grid-template-columns: repeat(2, minmax(0, 1fr));
  column-gap: calc(var(--footer-gap) * 0.75);
}
.footer-links a,
.footer-addr a {
  color: inherit;
  text-decoration: none;
  border-bottom: 1px solid transparent;
  transition: color 0.2s ease-out, border-color 0.2s ease-out;
}
.footer-links a {
  display: inline-block;
  padding-block: 4px;
  margin-block: -4px;
}
.footer-links a:hover,
.footer-addr a:hover {
  color: var(--nav-current);
  border-bottom-color: currentColor;
}
.footer-addr {
  display: flex;
  flex-direction: column;
  align-items: flex-start; /* the ltr phone follows the column's inline start */
  gap: 0.85em;
  font-style: normal;
  line-height: 1.7;
}
.footer-addr > * {
  text-wrap: balance; /* the address and the hours keep even lines */
}
.footer-tel {
  color: var(--fg);
}
.footer-row {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: 0.6rem 2rem;
  margin-top: 3.2rem;
  padding-top: 1.5rem;
  border-top: 1px solid var(--rule);
  font-size: 0.8125rem;
  color: var(--faint);
}
:lang(ar) .footer-row {
  font-size: 0.8125rem;
}
.footer-legal {
  color: var(--faint);
}

/* ---------- scroll reveal (the template's wow fades) ---------- */

.js .reveal {
  opacity: 0;
  transform: translateY(26px);
  transition: opacity 0.9s var(--ease), transform 0.9s var(--ease);
  transition-delay: calc(var(--d, 0) * 120ms);
}
.js .experience-info.reveal {
  transition: opacity 1s ease, transform 1s ease;
  transition-delay: calc(var(--d, 0) * 120ms);
}
.js .experience-info.reveal:not(.is-in) {
  transform: translateX(100%);
}
.js[dir="rtl"] .experience-info.reveal:not(.is-in) {
  transform: translateX(-100%);
}
.js .reveal.is-in {
  opacity: 1;
  transform: none;
}

/* ---------- responsive ---------- */

@media (max-width: 1199px) {
  .fade-title {
    font-size: 9.936rem;
  }
}
@media (max-width: 991px) {
  .fade-title {
    font-size: 9.18rem;
  }
}
/* the template's owl breakpoints: 4 up, 3 from 1250, 2 from 979, 1 from 479 */
@media (max-width: 1250px) {
  .project {
    flex-basis: 33.3334%;
  }
}
@media (max-width: 979px) {
  .project {
    flex-basis: 50%;
  }
}
@media (max-width: 479px) {
  .project {
    flex-basis: 100%;
  }
}
@media (max-width: 1199px) {
  .col-about-spec {
    padding-inline: 1.5rem;
  }
  .text-parallax {
    font-size: 18rem;
  }
}
@media (max-width: 991px) {
  .clients-carried {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .client img {
    width: min(119px, 100%);
  }
  .about-row {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .col-about-spec {
    padding-inline: 0;
  }
  .col-about-img {
    grid-column: 1 / -1;
    max-width: 460px;
  }
  .contacts-row {
    grid-template-columns: minmax(0, 1fr);
  }
  .col-address {
    margin-top: 1.8rem;
  }
  .col-about-img,
  .contact-form {
    margin-inline-start: 0;
  }
}
/* the footer ladder: six tracks, then the brand takes a row of its own, then
   the contact block becomes a strip, then everything stacks */
@media (max-width: 1199px) {
  .footer-top {
    grid-template-columns: repeat(5, minmax(0, 1fr));
    grid-template-rows: none;
    row-gap: 2.9rem;
  }
  .footer-col {
    grid-row: auto;
    grid-template-rows: none;
    row-gap: var(--footer-head-gap);
  }
  .footer-col-brand {
    grid-column: 1 / -1;
  }
  .footer-h,
  .footer-brand {
    align-self: auto;
  }
}
@media (max-width: 899px) {
  .footer-top {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
  .footer-col-reach {
    grid-column: 1 / -1;
  }
  .footer-addr {
    flex-flow: row wrap;
    gap: 0.6em 2.6rem;
  }
}

@media (max-width: 767px) {
  .section {
    margin-block: 5rem;
  }
  .section-content {
    margin-top: 4rem;
  }
  .section-title {
    font-size: 1.64rem;
    letter-spacing: 0.32em;
    margin-left: 0.32em;
  }
  :lang(ar) .section-title {
    font-size: 1.875rem;
  }
  .fade-title {
    font-size: 8.1rem;
  }
  .about-row {
    grid-template-columns: minmax(0, 1fr);
  }
  .col-about-title,
  :lang(ar) .col-about-title {
    font-size: 1.5rem;
  }
  .project figcaption {
    inset: 2.4rem 2rem 2rem;
  }
  .owl-prev {
    inset-inline-start: 0.8rem;
  }
  .owl-next {
    inset-inline-end: 0.8rem;
  }
  .text-parallax {
    font-size: 16.35rem;
  }
  .experience-row {
    flex-direction: column;
    align-items: center;
  }
  .experience-info,
  :lang(ar) .experience-info {
    margin-bottom: 1.4rem;
    margin-inline-start: 0;
    font-size: 1.5rem; /* oak needs 24px */
    text-align: start;
  }
  .clients-list {
    grid-template-columns: minmax(0, 1fr);
    gap: 2.2rem 0;
  }
  .client img {
    width: min(82px, 100%);
  }
  .clients-list .client {
    padding-top: 1.1rem;
  }
  .section-lede {
    margin-top: 2.6rem;
  }
  .brands-group {
    margin-top: 3.2rem;
  }
  .family-line {
    gap: 0 1.4rem;
    margin-top: 2.4rem;
  }
  .family-line li {
    font-size: 0.8125rem;
    letter-spacing: 0.14em;
  }
  :lang(ar) .family-line li {
    font-size: 0.9375rem;
  }
  .about-facts {
    margin-top: 2.2em;
  }
  .footer-top {
    grid-template-columns: minmax(0, 1fr);
    row-gap: 2.4rem;
  }
  .footer-links a,
  .footer-addr a {
    display: inline-block;
    padding-block: 11px;
    margin-block: -11px;
  }
  .footer-links {
    gap: 0.35em var(--footer-gap);
  }
  .footer-addr {
    gap: 0.35em;
  }
  .footer-col-mat,
  .footer-col-reach {
    grid-column: auto;
  }
  .footer-addr {
    flex-direction: column;
    gap: 0.85em;
  }
  .client-name,
  :lang(ar) .client-name {
    font-size: 1.125rem;
    height: 44px;
  }
  .client-name {
    letter-spacing: 0.2em;
    margin-right: -0.2em;
  }
  .addr-row {
    padding-block: 0.95em;
  }
  .col-address a {
    display: inline-block;
    padding-block: 6px;
  }
  .form-grid {
    grid-template-columns: minmax(0, 1fr);
    gap: 1.2rem;
  }
  .g-name,
  .g-phone,
  .g-product,
  .g-qty,
  .g-msg {
    grid-area: auto;
  }
  .field {
    height: 2.75rem;
  }
  textarea.field {
    min-height: 6rem;
  }
  .form-note {
    order: 0;
    width: auto;
    text-align: start;
  }
  .footer {
    margin-top: 5rem;
    padding-bottom: 2.6rem;
  }
  .footer-top {
    padding-top: 2.8rem;
  }
  .footer-row {
    gap: 0.5rem;
  }
}

/* ---------- motion, contrast, print ---------- */

@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    animation-delay: 0s !important;
    transition-duration: 0.01ms !important;
    transition-delay: 0s !important;
  }
  .js .reveal,
  .js .experience-info.reveal {
    opacity: 1;
    transform: none;
  }
  .project-link:hover .pic {
    transform: none;
  }
}
@media (forced-colors: active) {
  .slide-bg::after,
  .project figure::after {
    display: none;
  }
  .btn {
    border: 1px solid ButtonText;
  }
  .text-parallax,
  .js .text-parallax,
  .text-parallax.has-mask {
    color: CanvasText;
    background: none;
    -webkit-mask: none;
    mask: none;
  }
  .text-parallax canvas {
    display: none;
  }
}
@media print {
  .site-header,
  .hero-arrows,
  .owl-arrow,
  .page-lines,
  .pic-retry,
  .contact-form {
    display: none;
  }
  .hero {
    height: auto;
  }
}
