:root {
  color-scheme: dark;
  --bg: #050505;
  --panel: #0d0d0d;
  --ink: #f3f2ef;
  --muted: #8e8d91;
  --line: rgba(197, 197, 197, .18);
  --accent: #4d7cff;
  --accent-light: #7fa1ff;
  --accent-dark: #2448b8;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
html {
  scrollbar-color: #ff6a1a #050505;
  scrollbar-width: thin;
}
html::-webkit-scrollbar { width: 10px; height: 10px; }
html::-webkit-scrollbar-track { background: #050505; }
html::-webkit-scrollbar-thumb {
  border: 2px solid #050505;
  border-radius: 99px;
  background: #ff6a1a;
}
html::-webkit-scrollbar-thumb:hover { background: #ff8748; }
body {
  margin: 0;
  background: var(--bg);
  color: var(--ink);
  font-family: "Fustat", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  overflow-x: clip;
}
a { color: inherit; text-decoration: none; }
::selection {
  background: #383838;
  color: #f3f2ef;
}
::-moz-selection {
  background: #383838;
  color: #f3f2ef;
}

.site-header {
  position: fixed;
  inset: 0 0 auto;
  z-index: 50;
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  padding: 26px clamp(22px, 4vw, 64px);
  transition: transform .4s cubic-bezier(.22,1,.36,1), background .35s ease, padding .35s ease;
}
.site-header.is-scrolled {
  transform: translateY(-110%);
}
.site-header.is-menu-open { transform: translateY(0); }
.brand { display: flex; align-items: center; }
.brand img { 
  width: 100%;
  max-width: 150px;
  height: auto;
  max-height: 45px;
  object-fit: contain;
  display: block;
}

.nav { display: flex; gap: clamp(22px, 3vw, 46px); font-size: 16px; }
.nav a { color: #9d9ca0; transition: color .2s ease; }
.nav__mobile-cta,
.menu-toggle { display: none; }
.site-header > .button { justify-self: end; }

@media (min-width: 761px) {
  .nav a,
  .site-footer__nav > a {
    position: relative;
    isolation: isolate;
  }
  .nav a:hover,
  .nav a:focus-visible,
  .site-footer__nav > a:hover,
  .site-footer__nav > a:focus-visible { color: var(--ink); }
  .nav a::after,
  .site-footer__nav > a::after {
    content: attr(data-label);
    position: absolute;
    inset: 0;
    color: transparent;
    white-space: nowrap;
    pointer-events: none;
    opacity: 0;
    background-image: linear-gradient(108deg, transparent 0%, transparent 44%, rgba(255, 247, 232, .04) 47%, #fffaf1 50%, #f1d9b8 52%, rgba(255, 247, 232, .04) 56%, transparent 60%, transparent 100%);
    background-position: 100% 0;
    background-size: 260% 100%;
    -webkit-background-clip: text;
    background-clip: text;
  }
  .nav a:hover::after,
  .nav a:focus-visible::after,
  .site-footer__nav > a:hover::after,
  .site-footer__nav > a:focus-visible::after { animation: nav-warm-glint .72s cubic-bezier(.22, 1, .36, 1) both; }
}
@keyframes nav-warm-glint {
  0% { background-position: 100% 0; opacity: 0; }
  18% { opacity: .95; }
  76% { opacity: .75; }
  100% { background-position: 0 0; opacity: 0; }
}

.custom-cursor {
  display: none;
  position: fixed;
  top: 0;
  left: 0;
  z-index: 1000;
  width: 24px;
  height: 24px;
  opacity: 0;
  pointer-events: none;
  transform: translate(-50%, -50%);
  transition: opacity .16s ease;
}
.custom-cursor.is-visible { opacity: 1; }
.custom-cursor.is-hidden { opacity: 0; }
.custom-cursor.is-click-pulse { display: block; }
.custom-cursor__pulse {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 4px;
  height: 4px;
  border: 1px solid rgba(243, 242, 239, .78);
  border-radius: 50%;
  opacity: 0;
  pointer-events: none;
  transform: translate(-50%, -50%);
}
.custom-cursor.is-click-pulse .custom-cursor__pulse {
  animation: custom-cursor-click-pulse .42s cubic-bezier(.18, .75, .25, 1) both;
}
@keyframes custom-cursor-click-pulse {
  0% { width: 4px; height: 4px; opacity: .78; }
  100% { width: 46px; height: 46px; opacity: 0; }
}
.touch-pulse {
  display: none;
  position: fixed;
  top: 0;
  left: 0;
  z-index: 1001;
  width: 1px;
  height: 1px;
  pointer-events: none;
  transform: translate(-50%, -50%);
}
.touch-pulse.is-active { display: block; }
.touch-pulse__surface {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 70px;
  height: 70px;
  border: 1px solid #ff6a1a;
  border-radius: 50%;
  background: rgba(255, 106, 26, .24);
  pointer-events: none;
  transform: translate(-50%, -50%) scale(0);
}
.touch-pulse.is-active .touch-pulse__surface {
  animation: touch-tap-pulse .5s ease-out both;
}
.mobile-scrollbar { display: none; }
@keyframes touch-tap-pulse {
  0% { opacity: .9; transform: translate(-50%, -50%) scale(0); }
  100% { opacity: 0; transform: translate(-50%, -50%) scale(1); }
}
.custom-cursor__corner {
  position: absolute;
  width: 7px;
  height: 7px;
  border-color: var(--ink);
  transition: transform .22s cubic-bezier(.22, 1, .36, 1);
}
.custom-cursor__corner--top-left {
  top: 0;
  left: 0;
  border-top: 1px solid;
  border-left: 1px solid;
}
.custom-cursor__corner--top-right {
  top: 0;
  right: 0;
  border-top: 1px solid;
  border-right: 1px solid;
}
.custom-cursor__corner--bottom-left {
  bottom: 0;
  left: 0;
  border-bottom: 1px solid;
  border-left: 1px solid;
}
.custom-cursor__corner--bottom-right {
  right: 0;
  bottom: 0;
  border-right: 1px solid;
  border-bottom: 1px solid;
}
.custom-cursor__center {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 3px;
  height: 3px;
  border-radius: 50%;
  background: var(--ink);
  transform: translate(-50%, -50%);
  transition: width .22s ease, height .22s ease;
}
.custom-cursor.is-interactive .custom-cursor__corner--top-left { transform: translate(-3px, -3px); }
.custom-cursor.is-interactive .custom-cursor__corner--top-right { transform: translate(3px, -3px); }
.custom-cursor.is-interactive .custom-cursor__corner--bottom-left { transform: translate(-3px, 3px); }
.custom-cursor.is-interactive .custom-cursor__corner--bottom-right { transform: translate(3px, 3px); }
.custom-cursor.is-interactive .custom-cursor__center { width: 5px; height: 5px; }
.custom-cursor.is-pressed .custom-cursor__corner--top-left { transform: translate(5px, 5px); }
.custom-cursor.is-pressed .custom-cursor__corner--top-right { transform: translate(-5px, 5px); }
.custom-cursor.is-pressed .custom-cursor__corner--bottom-left { transform: translate(5px, -5px); }
.custom-cursor.is-pressed .custom-cursor__corner--bottom-right { transform: translate(-5px, -5px); }
.custom-cursor.is-pressed .custom-cursor__center { width: 5px; height: 5px; }

@media (hover: hover) and (pointer: fine) and (min-width: 761px) {
  .custom-cursor { display: block; }
  body.has-custom-cursor,
  body.has-custom-cursor * { cursor: none !important; }
  body.has-custom-cursor input:not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="checkbox"]):not([type="radio"]),
  body.has-custom-cursor textarea,
  body.has-custom-cursor [contenteditable]:not([contenteditable="false"]) { cursor: text !important; }
  body.has-custom-cursor select { cursor: auto !important; }
}

@media (prefers-reduced-motion: reduce) {
  .nav a::after,
  .site-footer__nav > a::after { animation: none !important; }
  .custom-cursor,
  .custom-cursor__corner,
  .custom-cursor__center,
  .touch-pulse { transition: none; }
  .custom-cursor__pulse { display: none; }
}

.journey-ring {
  position: fixed;
  z-index: 7;
  left: calc(50% - var(--scroll-lock-center-shift, 0px));
  top: var(--journey-y, 50vh);
  width: var(--journey-size, min(75vh, 85vw));
  aspect-ratio: 358 / 334;
  pointer-events: none;
  opacity: var(--journey-opacity, 1);
  transform: translate(-50%, -50%);
  will-change: width, top, opacity;
}
.journey-ring::before {
  content: "";
  position: absolute;
  inset: 4%;
  border-radius: 50%;
  background: var(--bg);
  opacity: var(--journey-disc-opacity, 0);
  z-index: 0;
}
.journey-ring svg { position: relative; z-index:1; display: block; width: 100%; overflow: visible; }
.ring-compact-shape { display:none; fill:none; stroke:#f6f5f2; stroke-width:1.15; vector-effect:non-scaling-stroke; transform-box:view-box; transform-origin:center; }
.journey-ring.is-compact .ring-mask-group { display:none; }
.journey-ring.is-compact .ring-compact-shape { display:block; transform:rotate(var(--ring-copy-one-angle,0deg)); }
.ring-copy {
  fill: none;
  stroke: currentColor;
  stroke-width: var(--ring-stroke-width, .5);
  shape-rendering: geometricPrecision;
  vector-effect: non-scaling-stroke;
  transform-box: view-box;
  transform-origin: center;
  will-change: transform;
}
.ring-cutout { opacity: var(--ring-cutout-opacity, 1); }
.ring-copy use { vector-effect: non-scaling-stroke; }
.ring-copy--one {
  color: rgba(255,255,255,1);
  opacity: var(--ring-copy-one-opacity, 1);
  transform: scale(1) rotate(var(--ring-copy-one-angle, 350deg));
}
.ring-copy--two {
  color: rgba(255,255,255,1);
  opacity: var(--ring-copy-two-opacity, .3);
  transform: scale(1.05) rotate(var(--ring-copy-two-angle, 3deg));
}
.ring-copy--three {
  color: rgba(255,255,255,1);
  opacity: var(--ring-copy-three-opacity, .2);
  transform: scale(1.1025) rotate(var(--ring-copy-three-angle, 6deg));
}
.ring-copy--four {
  color: rgba(255,255,255,1);
  opacity: var(--ring-copy-four-opacity, .1);
  transform: scale(1.157625) rotate(var(--ring-copy-four-angle, 9deg));
}

.button {
  --button-fill: var(--accent);
  position: relative;
  isolation: isolate;
  overflow: hidden;
  display: inline-flex;
  align-items: center;
  gap: 26px;
  min-height: 56px;
  padding: 0 24px;
  border: 1px solid rgba(197, 197, 197, .2);
  border-radius: 4px;
  background: #0d0d0d;
  box-shadow: inset 3px 0 0 var(--accent), 0 12px 35px rgba(0, 0, 0, .24);
  transition: transform .25s ease, color .25s ease, background .25s ease, border-color .25s ease, box-shadow .25s ease;
}
.button::before {
  content: "";
  position: absolute;
  z-index: 0;
  inset: -1px;
  border-radius: inherit;
  background: var(--button-fill);
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform .55s cubic-bezier(.16, 1, .3, 1);
}
.button > span {
  position: relative;
  z-index: 1;
}
.button > span:not(.button__label) { color: var(--ink); }
.button:hover {
  transform: translateY(-2px);
  border-color: rgba(127, 161, 255, .55);
  background: #0d0d0d;
  box-shadow: inset 3px 0 0 var(--accent-light), 0 18px 42px rgba(36, 72, 184, .28);
}
.button:hover::before,
.button:focus-visible::before {
  transform: scaleX(1);
}
.button:hover > span,
.button:focus-visible > span {
  color: #fff;
}
.button--compact { min-height: 52px; }
.header-cta {
  --button-fill: #ff6a1a;
  box-shadow: inset 3px 0 0 var(--button-fill), 0 12px 35px rgba(0, 0, 0, .24);
}
.header-cta span {
  color: var(--ink);
  transition: color .3s ease, transform .55s cubic-bezier(.16, 1, .3, 1);
}
.header-cta:hover,
.header-cta:focus-visible {
  color: #090909;
  border-color: rgba(255, 106, 26, .9);
  background: #0d0d0d;
  box-shadow: inset 3px 0 0 var(--button-fill), 0 18px 42px rgba(255, 106, 26, .2);
}
.header-cta:hover span,
.header-cta:focus-visible span {
  color: #090909;
  transform: translateX(3px);
}
.header-cta:focus-visible {
  outline: 1px solid #fff;
  outline-offset: 4px;
}

.hero {
  position: relative;
  z-index: 8;
  min-height: 100svh;
  overflow: hidden;
  display: grid;
  place-items: center;
  padding: 130px 24px 116px;
  isolation: isolate;
}
.hero::before {
  content: none;
}
.hero__content { position:relative; z-index:10; text-align: center; width: min(950px, 100%); }
.hero__eyebrow {
  margin: 0 0 26px;
  color: rgba(246, 245, 242, .78);
  font: 500 11px/1 "Space Grotesk", sans-serif;
  letter-spacing: .15em;
  text-transform: uppercase;
}
.hero h1 {
  margin: 0;
  color: var(--ink);
  font-size: clamp(44px, 3.25vw, 68px);
  font-weight: 400;
  line-height: 1.12;
  letter-spacing: -.04em;
}
.hero__summary { margin: 34px auto 28px; color: rgba(246, 245, 242, .88); font-size: clamp(15px, 1.4vw, 20px); }
.hero small { display: block; margin-top: 20px; color: #68676b; }
/* Laptops 13-14": viewport alto <= 880px. El anillo llena desde debajo del
   navbar hasta el borde inferior; el contenido escala proporcional al anillo
   (mismas ratios que desktop grande: h1 ~.077, summary ~.025, button ~.07
   del tamano del anillo) y su centro coincide con el centro del anillo. */
@media (min-width: 761px) and (max-height: 880px) {
  .hero { padding: 130px 24px 50px; }
  .hero__content { width: min(820px, 100%); }
  .hero__eyebrow { margin-bottom: 16px; }
  .hero h1 { font-size: 35px; }
  .hero__summary { margin: 22px auto 20px; font-size: 15px; }
  .hero .button { min-height: 47px; padding: 0 20px; gap: 18px; font-size: 14.5px; }
}
.cursor-tag {
  position:absolute;
  z-index:2;
  font-size:10px;
  animation:drift 9.4s cubic-bezier(.45,0,.25,1) infinite;
  will-change:transform;
}
.cursor-tag span {
  display: block;
  width: 0;
  height: 0;
  border-left: 7px solid transparent;
  border-right: 3px solid transparent;
  border-bottom: 12px solid var(--accent-light);
  transform:rotate(-35deg);
}
.cursor-tag b { display: block; margin: -1px 0 0 8px; padding: 3px 5px; border-radius: 2px; background: var(--accent-dark); font-weight: 500; }
.cursor-tag--one {
  --drift-x-one:132px;
  --drift-y-one:-34px;
  --drift-x-two:86px;
  --drift-y-two:64px;
  --drift-x-three:-28px;
  --drift-y-three:104px;
  --drift-x-four:118px;
  --drift-y-four:26px;
  --drift-x-five:40px;
  --drift-y-five:-12px;
  left:15%;
  top:23%;
}
.cursor-tag--two {
  --drift-x-one:-146px;
  --drift-y-one:-30px;
  --drift-x-two:-98px;
  --drift-y-two:58px;
  --drift-x-three:36px;
  --drift-y-three:-92px;
  --drift-x-four:-120px;
  --drift-y-four:-18px;
  --drift-x-five:-44px;
  --drift-y-five:34px;
  right:14%;
  bottom:25%;
  animation-duration:8.1s;
  animation-delay:-3.6s;
}
.cursor-tag--two span { border-bottom-color:#ff8748; }
.cursor-tag--two b {
  background:#ff6a1a;
  color:#090909;
  box-shadow:0 7px 18px rgba(255,106,26,.22);
}
@keyframes drift {
  0%,100% { transform:translate3d(0,0,0) rotate(0); }
  15% { transform:translate3d(var(--drift-x-one),var(--drift-y-one),0) rotate(1.6deg); }
  34% { transform:translate3d(var(--drift-x-two),var(--drift-y-two),0) rotate(-1.8deg); }
  56% { transform:translate3d(var(--drift-x-four),var(--drift-y-four),0) rotate(.6deg); }
  73% { transform:translate3d(var(--drift-x-three),var(--drift-y-three),0) rotate(-1.1deg); }
  88% { transform:translate3d(var(--drift-x-five),var(--drift-y-five),0) rotate(.4deg); }
}

.services { position: relative; height: 340vh; background: var(--bg); }
.services__sticky { position: sticky; top: 0; height: 100svh; overflow: hidden; padding-top: 1px; }
.services__heading {
  position: absolute;
  z-index: 8;
  top: 28px;
  left: clamp(20px, 1.45vw, 28px);
  right: clamp(20px, 1.45vw, 28px);
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  gap: 20px;
  align-items: end;
  pointer-events: none;
}
.services__heading > span {
  grid-column: 1 / 4;
  color: rgba(197, 197, 197, .42);
  font-size: 11px;
  font-weight: 600;
  line-height: .95;
  letter-spacing: -.03em;
  text-transform: uppercase;
}
.service-grid {
  position: absolute;
  inset: 0;
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  grid-template-rows: repeat(2, 1fr);
  border-bottom: 1px solid var(--line);
  opacity: 1;
  transform:translateY(var(--services-grid-y,190px));
}
.service-card {
  --copy-w:min(420px,68%);
  --copy-w-exp:min(36.8%,448px);
  --title-size:clamp(30px,2.55vw,38px);
  --title-size-exp:clamp(30px,3.4vw,52px);
  --exp-pad-start:clamp(30px, 3.32vw, 43px);
  position: relative;
  min-width: 0;
  padding: clamp(30px, 3.32vw, 43px);
  overflow: hidden;
  outline: none;
  background: transparent;
  transition: background .45s ease, color .35s ease, padding .5s cubic-bezier(.22,1,.36,1), border-radius .5s cubic-bezier(.22,1,.36,1), box-shadow .5s cubic-bezier(.22,1,.36,1);
}
/* Copy expandido +20%: cards 2-4 siempre; card 1 solo bajo 1440px (cuando
   muestra la imagen vertical, que deja mas espacio para el texto). */
.service-card--two,.service-card--three,.service-card--four { --copy-w-exp:min(44.16%,537.6px); }
@media (max-width:1439px) { .service-card--one { --copy-w-exp:min(44.16%,537.6px); } }
/* Card 1: doble mockup. El vertical existe solo en la ventana 761-1439px
   (punto de corte pedido por el usuario); fuera de ahi, nada. */
.service-card--one .mockup--mobile { display:none; }
.service-card::before {
  content:"";
  position:absolute;
  inset:0;
  background-image:linear-gradient(rgba(197,197,197,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(197,197,197,.035) 1px,transparent 1px);
  background-size:38px 38px;
  opacity:0;
  transition:opacity .35s ease;
}
.service-card__copy { position: relative; z-index: 2; width:var(--copy-w); height: 100%; display: flex; flex-direction: column; justify-content:flex-end; align-items: flex-start; }
.service-card--one { --copy-w:min(320px,44%); }
.service-card__copy::before {
  content:none;
}
.service-card__copy > span { margin:22px 0 auto; color: rgba(197,197,197,.38); font:500 10px/1 "Space Grotesk",sans-serif; letter-spacing:.15em; }
.service-card h2 { margin:0; color:#c5c5c5; font-size:var(--title-size); font-weight:400; line-height:1.12; letter-spacing:-.045em; opacity:var(--service-title-opacity,0); transform:translateY(var(--service-title-y,22px)); transition:transform .48s cubic-bezier(.22,1,.36,1),opacity .35s ease,color .3s ease; }
.service-card p { position:static; width:min(360px,100%); max-height:0; margin:0; overflow:hidden; color:#b1afb6; line-height:1.5; opacity:0; transform:translateY(14px); transition:max-height .5s cubic-bezier(.22,1,.36,1),margin .4s ease,opacity .3s ease,transform .4s ease; }
.service-card a {
  --button-fill: var(--accent);
  position: relative;
  isolation:isolate;
  display:inline-flex;
  align-items:center;
  gap:24px;
  min-height:0;
  max-height:0;
  padding:0 18px;
  border:0 solid rgba(255,255,255,.08);
  border-radius:4px;
  background:#0d0d0d;
  font-size:15px;
  opacity:0;
  transform:translateY(10px);
  overflow:hidden;
  transition:max-height .45s cubic-bezier(.22,1,.36,1),min-height .45s cubic-bezier(.22,1,.36,1),margin .4s ease,transform .35s .05s ease,opacity .35s .05s ease,background .2s ease,border-color .2s ease;
}
.service-card a::before {
  content:"";
  position:absolute;
  z-index:0;
  inset:-1px;
  border-radius:inherit;
  background:var(--button-fill);
  transform:scaleX(0);
  transform-origin:left center;
  transition:transform .55s cubic-bezier(.16,1,.3,1);
}
.service-card a > span { position:relative; z-index:1; }
.service-card a .service-card__action-label { color:inherit; }
.service-card a > span:not(.service-card__action-label) { color:var(--accent-light); }
.service-card a:hover,
.service-card a:focus-visible { background:#0d0d0d; border-color:rgba(127,161,255,.7); color:#fff; }
.service-card a:hover::before,
.service-card a:focus-visible::before { transform:scaleX(1); }
.service-card a:hover span,
.service-card a:focus-visible span { color:#fff; }
.service-card:hover,.service-card:focus-visible { background:#0d0d0d; }
.service-card:hover::before, .service-card:focus-visible::before { opacity:1; }
.service-card:hover h2, .service-card:focus-visible h2 { color:#f3f2ef; transform:none; }
@media (min-width: 761px) {
  /* Teaser (Plan A): el hover solo muestra 2 lineas del parrafo con
     elipsis; el texto completo vive en el panel expandido. max-height 3em
     = 2 * line-height 1.5. En mobile no aplica (ahi el parrafo siempre va
     completo y no hay hover real). */
  .service-card:hover p,.service-card:focus-visible p { max-height:3em; margin-top:14px; opacity:1; transform:translateY(0); display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:2; }
}
.service-card--one p { width:100%; }
.service-card:hover a,.service-card:focus-visible a { min-height:52px; max-height:52px; margin-top:18px; border-width:1px; opacity:1; transform:translateY(0); }
.service-card__visual { position:absolute; inset:0; pointer-events:none; opacity:0; clip-path:inset(100% 0 0); transform:translateY(5%) scale(1.04); transition:opacity .3s ease,clip-path .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1); }
.service-card:hover .service-card__visual, .service-card:focus-visible .service-card__visual { opacity:1; clip-path:inset(0); transform:translateY(0) scale(1); }
.mockup {
  position: absolute;
  width: 124px;
  aspect-ratio: .52;
  padding: 12px;
  border-radius: 22px;
  border: 1px solid #707070;
  background: linear-gradient(150deg, #27242d, #111114);
  background-clip: content-box;
  background-origin: content-box;
  background-repeat: no-repeat;
  background-size:100% auto;
  box-shadow: 0 28px 50px rgba(0,0,0,.42);
  transform: translateY(-50%);
}
.mockup::before { content:""; display:block; height:42%; border-radius:10px; background:linear-gradient(140deg,var(--mock-a,#2448b8),var(--mock-b,#7fa1ff)); }
.mockup::after {
  content:"";
  position:absolute;
  inset:-4px;
  border-radius:26px;
  background:
    radial-gradient(circle at 20px 4px,#050505 0 2px,#6b7180 2.5px 3.5px,transparent 4px),
    radial-gradient(circle at calc(100% - 20px) 4px,#050505 0 2px,#6b7180 2.5px 3.5px,transparent 4px),
    radial-gradient(circle at 4px 20px,#050505 0 2px,#6b7180 2.5px 3.5px,transparent 4px),
    radial-gradient(circle at calc(100% - 4px) 20px,#050505 0 2px,#6b7180 2.5px 3.5px,transparent 4px),
    radial-gradient(circle at 20px calc(100% - 4px),#050505 0 2px,#6b7180 2.5px 3.5px,transparent 4px),
    radial-gradient(circle at calc(100% - 20px) calc(100% - 4px),#050505 0 2px,#6b7180 2.5px 3.5px,transparent 4px),
    radial-gradient(circle at 4px calc(100% - 20px),#050505 0 2px,#6b7180 2.5px 3.5px,transparent 4px),
    radial-gradient(circle at calc(100% - 4px) calc(100% - 20px),#050505 0 2px,#6b7180 2.5px 3.5px,transparent 4px);
  box-shadow:none;
  z-index:1;
  pointer-events:none;
}
.mockup i { display:block; height:5px; margin-top:11px; border-radius:3px; background:rgba(255,255,255,.18); }
.mockup i:nth-child(2) { width:72%; }.mockup i:nth-child(3){width:46%}
.mockup--mobile { right:7%; top:50%; width:min(15vw,19.5svh,calc(100% - var(--copy-w) - 30px)); background-position:top center; }
.mockup--desktop { right:4%; top:50%; width:min(max(190px,45%),calc(100% - var(--copy-w) - 42px)); aspect-ratio:16/10; border-radius:22px; background-position:top center; }
.mockup--desktop::after { border-radius:26px; }
/* Imagen real por clase: permite reemplazarla por variante mobile en <=760px sin !important. */
.mockup--a { background-image:url('images/sushi-service-wide.webp'); background-color:#050505; background-position:top center; }
.mockup--c { background-image:url('images/maps-service.webp'); background-color:#111214; background-position:top center; }
.mockup--e { background-image:url('images/whatsapp-service.webp'); background-color:#050505; background-position:top center; }
.mockup--g { background-image:url('images/dental-launch-mobile.webp'); background-size:cover; background-position:center; }
.mockup--a,.mockup--c,.mockup--e,.mockup--g { --mock-a:transparent; --mock-b:transparent; }
@media (min-width: 761px) {
  .service-card--two .mockup--mobile { top:56%; }
}
/* Laptops con poca altura: el hover debe caber completo (titulo + parrafo +
   boton) sin recortar texto ni chocar con el heading. Numeros fuera aqui. */
@media (min-width: 761px) and (max-height: 820px) {
  .services__heading {
    top: 24px;
  }
  .service-card {
    --copy-w:min(58%,340px);
    --title-size:26px;
    --exp-pad-start:24px clamp(22px, 2.4vw, 30px) 20px;
    padding: 24px clamp(22px, 2.4vw, 30px) 20px;
  }
  .service-card--one { --copy-w:min(56%,330px); }
  .service-card__copy > span { display:none; }
  .service-card p { font-size:14.5px; line-height:1.47; }
  .service-card a { font-size:14px; }
  .service-card:hover p,.service-card:focus-visible p { max-height:3em; margin-top:10px; }
  .service-card:hover a,.service-card:focus-visible a { min-height:46px; max-height:46px; margin-top:12px; }
  .mockup--mobile { right:4%; }
  .mockup--desktop { right:2%; }
}
/* Escritorios medianos de altura normal: parrafo mas angosto pero mockups grandes. */
@media (min-width: 761px) and (min-height: 821px) and (max-width: 1279px) {
  .service-card {
    --copy-w:min(60%,400px);
  }
  .service-card--one { --copy-w:min(58%,360px); }
}
.services__cross { position:absolute; inset:0; pointer-events:none; z-index:6; --center-gap:58px; }
.cross-arm { position:absolute; display:flex; align-items:center; background:rgba(197,197,197,.34); opacity:var(--cross-opacity,0); }
.cross-arm i { display:none; }
.cross-arm b { position:absolute; width:8px; height:8px; border:1px solid rgba(246,245,242,.75); border-radius:50%; background:var(--bg); }
.cross-arm span { position:absolute; z-index:2; padding:2px 7px; border-radius:2px; background:var(--bg); color:rgba(197,197,197,.48); font:400 12px/1.45 "Space Grotesk",sans-serif; white-space:nowrap; }
.cross-arm--left,.cross-arm--right { top:50%; width:var(--arm-horizontal-length,0px); height:1px; }
.cross-arm--left { left:0; }
.cross-arm--right { right:0; }
.cross-arm--left b { right:-4px; }.cross-arm--right b { left:-4px; }
.cross-arm--left span,.cross-arm--right span { left:50%; top:50%; transform:translate(-50%,-50%); }
.cross-arm--top,.cross-arm--bottom { left:50%; width:1px; height:var(--arm-vertical-length,0px); flex-direction:column; }
.cross-arm--top { top:var(--vertical-edge-inset,0px); height:var(--top-arm-length,0px); opacity:var(--top-arm-opacity,0); transform:translateY(calc(-1 * var(--services-grid-y,0px))); }
.cross-arm--bottom { bottom:var(--vertical-edge-inset,0px); transform:translateY(calc(-1 * var(--services-grid-y,0px))); }
.cross-arm--top b { bottom:-4px; }.cross-arm--bottom b { top:-4px; }
.cross-arm--top span,.cross-arm--bottom span { top:50%; left:50%; transform:translate(-50%,-50%); }

/* ===== Estado expandido de cards de servicios (solo desktop) ===== */
/* Cada card arranca EXACTAMENTE sobre su cuadrante (mismo tamano y posicion
   que la card colapsada, medidos en JS y guardados en --exp-start-*) y desde
   ahi crece hasta el panel. El contenido morpha en paralelo de la disposicion
   colapsada a la expandida. El wipe direccional anterior se reemplaza por
   este crecimiento, que respeta el frame 0 como copia exacta. */
.service-card--one { --exp-top:0px; --exp-right:42.4vw; --exp-bottom:42.4vh; --exp-left:0px; }
.service-card--two { --exp-top:0px; --exp-right:0px; --exp-bottom:42.4vh; --exp-left:42.4vw; }
.service-card--three { --exp-top:42.4vh; --exp-right:42.4vw; --exp-bottom:0px; --exp-left:0px; }
.service-card--four { --exp-top:42.4vh; --exp-right:0px; --exp-bottom:0px; --exp-left:42.4vw; }
/* Paneles 2-4: la imagen vertical se empuja 70px hacia la derecha (se resta
   del hueco texto-imagen; el piso clamp() de --mock-exp-right limita el
   recorrido en paneles angostos para no pegar la imagen al borde). */
.service-card--two,.service-card--three,.service-card--four { --mock-shift:70px; }
.service-card .label-expand,
.service-card .label-collapse,
.service-card .service-card__contact { display:none; }
.service-card__action { cursor:pointer; }
/* Cierre del panel (solo desktop expandido; en mobile el boton no existe). */
.service-card__close { display:none; }
.service-card__action-label b { font-weight:inherit; }
.action-icon { display:inline-block; width:1em; text-align:center; }
.action-icon::after { content:"↗"; }
@media (min-width: 761px) {
  .service-card .action-icon::after { content:"+"; font-weight:300; }
  .service-card.is-expanded .action-icon::after { content:"−"; font-weight:300; }
  .service-card.is-collapsing .action-icon::after { content:"−"; font-weight:300; }
}
.service-grid::after {
  content:"";
  position:absolute;
  inset:0;
  z-index:9;
  background:rgba(5,5,5,.4);
  opacity:0;
  pointer-events:none;
  transition:opacity .5s ease;
}
body.services-expanded .service-grid::after { opacity:1; }
/* Con el panel abierto las demas cards se quedan en su estado normal (sin
   fondo ni imagen de hover); el scrim las atenua. */
@media (min-width: 761px) {
  .service-card .label-mobile { display:none; }
  .service-card .label-expand { display:inline; }
  .service-card.is-expanded .label-expand { display:none; }
  .service-card.is-expanded .label-collapse { display:inline; }
  .service-card.is-collapsing .label-expand { display:none; }
  .service-card.is-collapsing .label-collapse { display:inline; }
  html.services-expanded { overflow:hidden; }
  body.services-expanded { padding-right:var(--scroll-lock-gap,0px); }
  /* Al bloquear el scroll, html deja de ser scrollport y la sticky se sale de
     su pin (sube el alto ya recorrido), dejando negro el borde del panel. Fijar
     el sticky reproduce la posicion pinneada y conserva las cards de fondo. */
  body.services-expanded .services__sticky {
    position:fixed;
    top:0;
    left:0;
    right:var(--scroll-lock-gap,0px);
    bottom:auto;
    z-index:8;
  }
  body.services-expanded .service-grid { transform:none; }
  /* Fija cada card a su cuadrante. Al expandir, la card activa sale del flujo
     (position:fixed) y sin esto la grilla reacomoda las otras cards, dejando
     un cuadrante vacio (negro) en lugar de su imagen de fondo. */
  body.services-expanded .service-card--one { grid-area:1 / 1; }
  body.services-expanded .service-card--two { grid-area:1 / 2; }
  body.services-expanded .service-card--three { grid-area:2 / 1; }
  body.services-expanded .service-card--four { grid-area:2 / 2; }
  body.services-expanded .services__heading { opacity:0; transition:opacity .2s ease; }
  body.services-expanded .back-to-top { opacity:0; pointer-events:none; }
  /* Layout base desktop del copy: el bloque se empaqueta arriba y el hueco
     entre el numero y el texto lo absorbe un espaciador flexible (::before)
     que se encoge al expandir. Evita animar justify-content (no interpolable)
     y mantiene la posicion colapsada exacta en el frame 0. */
  .service-card__copy {
    justify-content:flex-start;
    transition:width .5s cubic-bezier(.22,1,.36,1), padding-top .5s cubic-bezier(.22,1,.36,1);
  }
  .service-card__copy::before {
    content:"";
    order:2;
    flex:1 1 0px;
    min-height:0;
    transition:flex-grow .5s cubic-bezier(.22,1,.36,1);
  }
  /* Espaciador inferior simetrico: crece 0->1 solo al expandir y, junto con
     el superior (que conserva grow 1), centra verticalmente el bloque de
     texto en el panel. Frame 0 = layout hover exacto (esto vale 0px). */
  .service-card__copy::after {
    content:"";
    order:6;
    flex:0 0 0px;
    min-height:0;
    transition:flex-grow .5s cubic-bezier(.22,1,.36,1);
  }
  .service-card__copy > span { order:1; margin:22px 0 0; transition:margin .5s cubic-bezier(.22,1,.36,1); }
  .service-card__copy > h2 {
    order:3;
    transition:transform .48s cubic-bezier(.22,1,.36,1), opacity .35s ease, color .3s ease, font-size .5s cubic-bezier(.22,1,.36,1);
  }
  .service-card__copy > p {
    order:4;
    transition:max-height .5s cubic-bezier(.22,1,.36,1), margin .4s ease, opacity .3s ease, transform .4s ease, width .5s cubic-bezier(.22,1,.36,1), font-size .5s cubic-bezier(.22,1,.36,1);
  }
  .service-card__copy > a {
    order:5;
    transition:max-height .45s cubic-bezier(.22,1,.36,1), min-height .45s cubic-bezier(.22,1,.36,1), margin .4s ease, transform .35s .05s ease, opacity .35s .05s ease, background .2s ease, border-color .2s ease, border-width .45s cubic-bezier(.22,1,.36,1);
  }
  .mockup--mobile,
  .mockup--desktop { transition:background-size .5s cubic-bezier(.22,1,.36,1); }
  /* Al cambiar de card abierta, la anterior vuelve a su sitio sin animar. */
  .service-card.is-resetting,
  .service-card.is-resetting *,
  .service-card.is-resetting *::before,
  .service-card.is-resetting *::after {
    transition:none!important;
    animation:none!important;
  }
  .service-card.is-expanded,
  .service-card.is-collapsing {
    --exp-width:calc(100vw - var(--exp-left) - var(--exp-right));
    --exp-height:calc(100svh - var(--exp-top) - var(--exp-bottom));
    position:fixed;
    top:var(--exp-top);
    left:var(--exp-left);
    width:var(--exp-width);
    height:var(--exp-height);
    z-index:10;
    background:#0d0d0d;
    border-radius:8px;
    box-shadow:0 0 0 1px var(--line), 0 8px 22px rgba(0, 0, 0, .35);
  }
  .service-card.is-expanded {
    --mock-exp-h:min(45svh,450px);
    /* Hueco objetivo entre el borde derecho del copy y la imagen vertical.
       --mock-exp-right ancla la imagen a ese hueco desde el copy (caseA: copy
       a 44.16% del content box; caseB: copy topado en 537.6px) con piso en el
       margen original para paneles angostos. El % resuelve contra el padding
       box del panel; la deriva 55.84% - .1168*P compensa que el 44.16% del
       copy resuelve contra el content box. Nota: card 1 ≥1440 usa el mockup
       horizontal, por lo que esta formula solo sirve con copy 44.16/537.6. */
    --mock-gap:calc(clamp(48px, 6vw, 120px) + var(--mock-shift, 0px));
    --mock-exp-right:max(
      clamp(20px, 2.4vw, 40px),
      calc(55.84% - .1168 * clamp(32px, 4vw, 72px) - var(--mock-gap) - .52 * var(--mock-exp-h)),
      calc(100% - clamp(32px, 4vw, 72px) - 537.6px - var(--mock-gap) - .52 * var(--mock-exp-h))
    );
    padding:clamp(40px, 5.6svh, 72px) clamp(32px, 4vw, 72px) clamp(32px, 4.4svh, 64px);
    animation:cardExpand .5s cubic-bezier(.22,1,.36,1) backwards;
  }
  .service-card.is-collapsing {
    pointer-events:none;
    animation:cardCollapse .5s cubic-bezier(.76,0,.24,1) both;
  }
  .service-card.is-expanded::before { opacity:1; border-radius:inherit; }
  .service-card.is-collapsing::before { opacity:1; border-radius:inherit; }
  .service-card.is-collapsing .service-card__visual { opacity:1; clip-path:inset(0); transform:none; }
  /* Al contraer el mouse sigue sobre la card: el contenido se mantiene en su
     estado hover (igual que el frame 0 de la expansion) y no se esconde. */
  .service-card.is-collapsing h2 { color:#f3f2ef; transform:none; }
  .service-card.is-collapsing p { max-height:3em; margin-top:14px; opacity:1; transform:translateY(0); display:block; -webkit-line-clamp:none; }
  .service-card.is-collapsing .service-card__action {
    min-height:52px; max-height:52px; margin-top:18px;
    border-width:1px; opacity:1; transform:none;
  }
  .service-card.is-expanded .service-card__copy {
    width:var(--copy-w-exp);
    z-index:3;
    animation:serviceCopyExpand .5s cubic-bezier(.22,1,.36,1) backwards;
  }
  .service-card.is-expanded .service-card__copy::after { flex-grow:1; }
  .service-card.is-expanded .service-card__copy > span { margin:0 0 14px; }
  /* Cards 1 y 2 (cuadrantes superiores): el bloque de texto no se ancla al
     fondo del panel (que luego sube), sino que viaja directo a su posicion
     final. El hueco hover medido (--exp-copy-gap) lo lleva el flex-basis del
     espaciador, animado con keyframes en vez de flex-grow (que absorbe todo
     el espacio de golpe). Cards 3 y 4 no se tocan. */
  .service-card--one .service-card__copy::before,
  .service-card--two .service-card__copy::before { transition:none; }
  .service-card--one.is-expanded .service-card__copy::before,
  .service-card--two.is-expanded .service-card__copy::before {
    flex:1 0 0px;
    animation:copyGapExpand .5s cubic-bezier(.22,1,.36,1) backwards;
  }
  .service-card--one.is-collapsing .service-card__copy::before,
  .service-card--two.is-collapsing .service-card__copy::before {
    flex:1 0 0px;
    animation:copyGapCollapse .5s cubic-bezier(.76,0,.24,1) both;
  }
  .service-card.is-expanded h2 {
    font-size:var(--title-size-exp);
    opacity:1; transform:none; color:#f3f2ef;
    animation:serviceTitleExpand .5s cubic-bezier(.22,1,.36,1) backwards;
  }
  .service-card.is-expanded p {
    width:min(576px,100%);
    max-height:1200px; margin-top:18px; opacity:1; transform:none;
    font-size:clamp(15px,1.05vw,17px);
    /* Libera el teaser de 2 lineas del hover: aqui va el parrafo completo. */
    display:block; -webkit-line-clamp:none;
  }
  .service-card.is-expanded .service-card__action {
    min-height:48px; max-height:48px; margin-top:24px;
    border-width:1px; border-color:rgba(197,197,197,.2);
    opacity:1; transform:none;
  }
  /* ✕ de cierre: esquina superior derecha del panel, lenguaje de la seccion
     (borde .2, radio 8, Space Grotesk; hover con el azul de acento como el
     boton Contraer). Solo existe visualmente con el panel abierto: opacity
     0 + pointer-events none en cualquier otro estado, y se desvanece al
     contraer para no quedar flotando sobre el cuadrante que encoge. */
  .service-card__close {
    display:grid; place-items:center;
    position:absolute;
    top:clamp(16px, 2.4svh, 26px);
    right:clamp(16px, 2vw, 26px);
    z-index:6;
    width:38px; height:38px; padding:0;
    border:1px solid rgba(197,197,197,.2);
    border-radius:8px;
    background:transparent;
    color:#b1afb6;
    font:400 15px/1 "Space Grotesk",sans-serif;
    cursor:pointer;
    opacity:0; visibility:hidden; pointer-events:none;
    transition:opacity .25s ease, visibility .25s ease, background .25s ease, border-color .25s ease, color .25s ease;
  }
  .service-card.is-expanded .service-card__close { opacity:1; visibility:visible; pointer-events:auto; transition-delay:.25s; }
  .service-card__close:hover,
  .service-card__close:focus-visible { border-color:rgba(127,161,255,.7); background:rgba(127,161,255,.1); color:#fff; }
  .service-card.is-expanded .service-card__visual { opacity:1; clip-path:inset(0); transform:none; }
  .service-card.is-expanded .mockup--mobile {
    top:50%; right:var(--mock-exp-right, clamp(20px, 2.4vw, 40px));
    width:calc(var(--mock-exp-h) * .52); height:var(--mock-exp-h);
    animation:mockupMobileExpand .5s cubic-bezier(.22,1,.36,1) backwards;
  }
  /* El mockup horizontal (card 1) va centrado verticalmente en el panel
     (translateY(-50%) de .mockup), igual que el copy y los verticales. */
  .service-card.is-expanded .mockup--desktop {
    --mock-w:min(calc(var(--exp-width) - min(0.368 * var(--exp-width), 448px) - clamp(32px, 4vw, 72px) - clamp(20px, 2.4vw, 40px) - 24px),calc(45svh * 1.6));
    top:50%;
    right:clamp(20px, 2.4vw, 40px);
    width:var(--mock-w);
    border-radius:22px;
    animation:mockupDesktopExpand .5s cubic-bezier(.22,1,.36,1) backwards;
  }
  .service-card.is-expanded .mockup--desktop::after {
    border-radius:26px;
  }
  .service-card.is-collapsing .mockup--mobile {
    animation:mockupMobileCollapse .5s cubic-bezier(.76,0,.24,1) both;
  }
  .service-card.is-collapsing .mockup--desktop {
    animation:mockupDesktopCollapse .5s cubic-bezier(.76,0,.24,1) both;
  }
  /* Frame 0 = rect exacto medido de la card; el panel crece desde ahi. */
  @keyframes cardExpand {
    from {
      top:var(--exp-start-top, var(--exp-top));
      left:var(--exp-start-left, var(--exp-left));
      width:var(--exp-start-width, var(--exp-width));
      height:var(--exp-start-height, var(--exp-height));
      padding:var(--exp-pad-start);
    }
    to {
      top:var(--exp-top);
      left:var(--exp-left);
      width:var(--exp-width);
      height:var(--exp-height);
      padding:clamp(40px, 5.6svh, 72px) clamp(32px, 4vw, 72px) clamp(32px, 4.4svh, 64px);
    }
  }
  @keyframes cardCollapse {
    from {
      top:var(--exp-collapse-top, var(--exp-top));
      left:var(--exp-collapse-left, var(--exp-left));
      width:var(--exp-collapse-width, var(--exp-width));
      height:var(--exp-collapse-height, var(--exp-height));
      padding:clamp(40px, 5.6svh, 72px) clamp(32px, 4vw, 72px) clamp(32px, 4.4svh, 64px);
    }
    to {
      top:var(--exp-start-top, var(--exp-top));
      left:var(--exp-start-left, var(--exp-left));
      width:var(--exp-start-width, var(--exp-width));
      height:var(--exp-start-height, var(--exp-height));
      padding:var(--exp-pad-start);
    }
  }
  @keyframes serviceCopyExpand {
    from { width:var(--copy-w); }
    to { width:var(--copy-w-exp); }
  }
  @keyframes copyGapExpand {
    from { flex-basis:var(--exp-copy-gap, 0px); }
    to { flex-basis:0px; }
  }
  @keyframes copyGapCollapse {
    from { flex-basis:0px; }
    to { flex-basis:var(--exp-copy-gap, 0px); }
  }
  @keyframes serviceTitleExpand {
    from { font-size:var(--title-size); }
    to { font-size:var(--title-size-exp); }
  }
  @keyframes mockupMobileExpand {
    from {
      top:var(--exp-mock-top, 50%);
      right:var(--exp-mock-right, 7%);
      width:var(--exp-mock-w, 124px);
      height:var(--exp-mock-h, auto);
    }
    to {
      top:50%;
      right:var(--mock-exp-right, clamp(20px, 2.4vw, 40px));
      width:calc(var(--mock-exp-h, min(45svh,450px)) * .52);
      height:var(--mock-exp-h, min(45svh,450px));
    }
  }
  @keyframes mockupMobileCollapse {
    from {
      top:var(--exp-collapse-mock-top, 50%);
      right:var(--exp-collapse-mock-right, clamp(20px, 2.4vw, 40px));
      width:var(--exp-collapse-mock-w, calc(var(--mock-exp-h, min(45svh,450px)) * .52));
      height:var(--exp-collapse-mock-h, var(--mock-exp-h, min(45svh,450px)));
    }
    to {
      top:var(--exp-mock-top, 50%);
      right:var(--exp-mock-right, 7%);
      width:var(--exp-mock-w, 124px);
      height:var(--exp-mock-h, auto);
    }
  }
  @keyframes mockupDesktopExpand {
    from {
      top:var(--exp-mock-top, 50%);
      right:var(--exp-mock-right, 4%);
      width:var(--exp-mock-w, 45%);
    }
    to {
      top:50%;
      right:clamp(20px, 2.4vw, 40px);
      width:min(calc(var(--exp-width) - min(0.368 * var(--exp-width), 448px) - clamp(32px, 4vw, 72px) - clamp(20px, 2.4vw, 40px) - 24px),calc(45svh * 1.6));
    }
  }
  @keyframes mockupDesktopCollapse {
    from {
      top:var(--exp-collapse-mock-top, 50%);
      right:var(--exp-collapse-mock-right, clamp(20px, 2.4vw, 40px));
      width:var(--exp-collapse-mock-w, min(calc(var(--exp-width) - min(0.368 * var(--exp-width), 448px) - clamp(32px, 4vw, 72px) - clamp(20px, 2.4vw, 40px) - 24px),calc(45svh * 1.6)));
    }
    to {
      top:var(--exp-mock-top, 50%);
      right:var(--exp-mock-right, 4%);
      width:var(--exp-mock-w, 45%);
    }
  }
}
@media (min-width: 761px) and (prefers-reduced-motion: reduce) {
  .service-card.is-expanded,
  .service-card.is-expanded .service-card__copy,
  .service-card.is-expanded h2,
  .service-card.is-expanded .mockup--mobile,
  .service-card.is-expanded .mockup--desktop { animation:none; }
}
@media (min-width: 761px) and (max-height: 820px) {
  .service-card.is-collapsing p { max-height:3em; margin-top:10px; }
  .service-card.is-collapsing .service-card__action { min-height:46px; max-height:46px; margin-top:12px; }
  /* Laptops 14" (viewport <=820px de alto): el panel de 57.6svh queda corto
     (texto recortado, imagen pequena). Roba 12.4vh al margen del cuadrante
     opuesto al ancla: panel ~70svh. La imagen sube a min(56svh,430px), que
     cabe con aire en el nuevo alto (800: 430 de 480 utiles; 700: 392 de 420).
     Ancho y demas formulas no se tocan: % y var() se autoajustan. */
  .service-card--one,.service-card--two { --exp-bottom:30vh; }
  .service-card--three,.service-card--four { --exp-top:30vh; }
  .service-card.is-expanded { --mock-exp-h:min(56svh,430px); }
}
@media (min-width: 1600px) {
  .service-card__copy { padding-left:clamp(16px, 2vw, 40px); }
}
/* Card 1 entre 761 y 1439px: el mockup horizontal cambia al vertical con la
   captura mobile de Kensei (misma familia que cards 2-4 y que el mobile real).
   Las reglas de .mockup--mobile (colapsada, hover, expandida y keyframes) la
   toman tal cual; JS mide solo el mockup visible. */
@media (min-width: 761px) and (max-width: 1439px) {
  .service-card--one .mockup--desktop { display:none; }
  .service-card--one .mockup--mobile { display:block; }
  .service-card--one { --mock-shift:70px; } /* con el telefono, centrado como cards 2-4 */
  .service-card--one .mockup--a {
    background-image:url('images/sushi-service-phone.webp');
    background-position:top center;
    background-size:100% auto;
  }
}

.projects {
  position: relative;
  z-index: 9;
  min-height: 100svh;
  padding: clamp(90px, 9vw, 138px) clamp(20px, 1.45vw, 28px) clamp(110px, 11vw, 170px);
  background: #050505;
}
.projects__heading,
.projects__layout {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  gap: 20px;
}
.projects__heading { align-items: end; }
.projects__eyebrow {
  grid-column: 1 / 2;
  color: rgba(197, 197, 197, .42);
  font-size: 12px;
  font-weight: 600;
  line-height: .95;
  letter-spacing: -.03em;
  text-transform: uppercase;
}
.projects h2 {
  grid-column: 7 / 12;
  margin: 0;
  color: #c5c5c5;
  font-size: clamp(28px, 2.8vw, 40px);
  font-weight: 500;
  line-height: .8;
  letter-spacing: -.06em;
  text-align: right;
}
.projects__layout {
  align-items: start;
  margin-top: 50px;
}
.project-list {
  grid-column: 1 / 7;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
}
.project-item {
  position: relative;
  display: flex;
  justify-content: flex-end;
  width: 100%;
  color: rgba(197, 197, 197, .82);
  font-size: clamp(40px, 4vw, 58px);
  font-weight: 500;
  line-height: .96;
  letter-spacing: -.06em;
  text-align: right;
  transition: color .3s ease, opacity .3s ease;
}
.project-list:hover .project-item:not(:hover),
.project-list:focus-within .project-item:not(:focus) { opacity: .34; }
.project-item:hover,
.project-item:focus-visible,
.project-item.is-active { color: #f3f2ef; }
.project-item:focus-visible {
  outline: 1px solid rgba(255, 255, 255, .55);
  outline-offset: 5px;
}
.project-item__number,
.project-item__mobile-visual { display: none; }
.project-item__name { display: inline-flex; }
.project-char {
  position: relative;
  display: inline-block;
  overflow: hidden;
}
.project-char__inner,
.project-char__old,
.project-char__new { display: inline-block; }
.project-char__old,
.project-char__new {
  transition: transform .34s cubic-bezier(.4, 0, .2, 1);
  transition-delay: calc(var(--char-index) * 14ms);
}
.project-char__new {
  position: absolute;
  inset: 0 auto auto 0;
  transform: translateY(-110%);
}
.project-item.is-interacting .project-char__old { transform: translateY(110%); }
.project-item.is-interacting .project-char__new { transform: translateY(0); }
.project-preview {
  position: sticky;
  top: 40px;
  grid-column: 8 / 12;
  min-width: 0;
}
.project-preview__link {
  display: block;
  color: inherit;
  cursor: pointer;
}
.project-preview__link:focus-visible {
  outline: 1px solid rgba(255, 255, 255, .65);
  outline-offset: 5px;
}
.project-preview__frame {
  position: relative;
  width: 100%;
  aspect-ratio: 1;
  overflow: hidden;
  background: #121212;
}
.project-preview__image {
  position: absolute;
  inset: 0;
  z-index: 0;
  margin: 0;
  opacity: 0;
  clip-path: inset(100% 0 0);
  transform: scale(1.045);
  pointer-events: none;
}
.project-preview__image img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.project-preview__image.is-active {
  z-index: 2;
  opacity: 1;
  animation: project-image-in .72s cubic-bezier(.22, 1, .36, 1) both;
}
.project-preview__image.is-leaving {
  z-index: 1;
  opacity: 1;
  animation: project-image-out .58s cubic-bezier(.76, 0, .24, 1) both;
}
.project-preview__index { display: none; }
.project-preview p {
  margin: clamp(28px, 3.5vw, 48px) 0 0;
  color: rgba(197, 197, 197, .7);
  font-size: clamp(14px, 1.35vw, 20px);
  font-weight: 500;
  line-height: 1;
  letter-spacing: -.03em;
}
@keyframes project-image-in {
  from { clip-path: inset(100% 0 0); transform: translateY(5%) scale(1.045); }
  to { clip-path: inset(0); transform: translateY(0) scale(1); }
}
@keyframes project-image-out {
  from { clip-path: inset(0); transform: translateY(0) scale(1); }
  to { clip-path: inset(0 0 100%); transform: translateY(-4%) scale(1.035); }
}

.about {
  position: relative;
  z-index: 9;
  overflow: hidden;
  padding: clamp(110px, 10vw, 160px) clamp(28px, 4vw, 64px) clamp(110px, 10vw, 160px);
  border-top: 1px solid var(--line);
  background: var(--bg);
}
.about__heading,
.about__body {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  gap: 20px;
}
.about__heading { align-items: end; }
.about__heading > span {
  grid-column: 1 / 2;
  color: rgba(197, 197, 197, .42);
  font-size: 11px;
  font-weight: 600;
  line-height: .95;
  letter-spacing: -.03em;
  text-transform: uppercase;
}
.about__heading h2 {
  grid-column: 10 / 12;
  margin: 0;
  color: #c5c5c5;
  font-size: clamp(28px, 2.8vw, 40px);
  font-weight: 500;
  line-height: .8;
  letter-spacing: -.06em;
  text-align: right;
}
.about__statement {
  margin: clamp(90px, 9vw, 145px) 0 clamp(48px, 4.5vw, 70px);
}
.about__statement p {
  margin: 0;
  color: #c5c5c5;
  font-size: clamp(56px, 5.45vw, 84px);
  font-weight: 400;
  line-height: .86;
  letter-spacing: -.07em;
}
.about__statement span {
  position: relative;
  color: var(--ink);
}
.about__statement span::after {
  content: "";
  position: absolute;
  right: -.42em;
  bottom: .12em;
  width: .27em;
  height: .06em;
  background: var(--accent);
}
.about__data-line {
  position: relative;
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  gap: 20px;
  margin-bottom: clamp(70px, 7vw, 110px);
  padding: 17px 0 16px;
  border-top: 1px solid var(--line);
  border-bottom: 1px solid rgba(197, 197, 197, .08);
  color: rgba(197, 197, 197, .5);
  font: 500 11px/1 "Space Grotesk", sans-serif;
  letter-spacing: .13em;
  text-transform: uppercase;
}
.about__data-line::after {
  content: "";
  position: absolute;
  top: -1px;
  left: 0;
  width: clamp(42px, 5vw, 72px);
  height: 1px;
  background: var(--accent);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform .9s .15s cubic-bezier(.22, 1, .36, 1);
}
.about__data-line.is-visible::after { transform: scaleX(1); }
.about__data-line span:nth-child(1) { grid-column: 1 / 3; }
.about__data-line span:nth-child(2) { grid-column: 6 / 9; }
.about__data-line span:nth-child(3) {
  grid-column: 11 / 13;
  text-align: right;
}
.about__body { align-items: center; }
.about__visual {
  position: relative;
  grid-column: 1 / 7;
  grid-row: 1;
  aspect-ratio: 16 / 10;
  margin: 0;
  overflow: visible;
  background: #0d0d0d;
  isolation: isolate;
}
.about__visual::before {
  content: "";
  position: absolute;
  inset: 13% 16%;
  z-index: 1;
  background-image:
    linear-gradient(rgba(127, 161, 255, .1) 1px, transparent 1px),
    linear-gradient(90deg, rgba(127, 161, 255, .1) 1px, transparent 1px);
  background-size: 52px 52px;
  opacity: .34;
  pointer-events: none;
}
.about__visual.is-visible::before {
  animation: aboutFrameAdjust 1.75s cubic-bezier(.22, .8, .25, 1) both;
  animation-delay: .1s;
}
.about__visual img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  filter: none;
  clip-path: inset(0);
  transform: scale(1);
  transition:
    filter 1s cubic-bezier(.22, 1, .36, 1),
    clip-path 1.05s cubic-bezier(.16, 1, .3, 1);
}
.about__visual figcaption {
  position: absolute;
  z-index: 3;
  inset: auto 18px 16px;
  display: flex;
  justify-content: space-between;
  gap: 20px;
  color: rgba(255, 255, 255, .7);
  font: 500 11px/1 "Space Grotesk", sans-serif;
  letter-spacing: .12em;
  text-transform: uppercase;
  opacity: 0;
  transition: opacity .35s .78s ease;
}
.about__visual.is-visible figcaption { opacity: 1; }
.about__frame-ui {
  position: absolute;
  inset: 13% 16%;
  z-index: 4;
  border: 1px solid rgba(197, 208, 236, .48);
  box-shadow:
    0 0 0 1px rgba(77, 124, 255, .08),
    inset 0 0 28px rgba(77, 124, 255, .06);
  pointer-events: none;
}
.about__visual.is-visible .about__frame-ui {
  animation: aboutFrameAdjust 1.75s cubic-bezier(.22, .8, .25, 1) both;
  animation-delay: .1s;
}
.about__frame-ui > i {
  position: absolute;
  width: 9px;
  height: 9px;
  border: 1px solid rgba(151, 178, 255, .94);
  border-radius: 50%;
  background: var(--accent);
  box-shadow: 0 0 10px rgba(77, 124, 255, .56);
}
.about__frame-ui > i:nth-child(1) { top: 0; left: 0; transform: translate(-50%, -50%); }
.about__frame-ui > i:nth-child(2) { top: 0; right: 0; transform: translate(50%, -50%); }
.about__frame-ui > i:nth-child(3) { right: 0; bottom: 0; transform: translate(50%, 50%); }
.about__frame-ui > i:nth-child(4) { bottom: 0; left: 0; transform: translate(-50%, 50%); }
.about__measure {
  position: absolute;
  padding: 3px 7px;
  background: var(--bg);
  color: rgba(219, 226, 244, .72);
  font: 400 10px/1 "Space Grotesk", sans-serif;
  letter-spacing: .04em;
  white-space: nowrap;
}
.about__measure--width {
  top: 0;
  left: 50%;
  transform: translate(-50%, -50%);
}
.about__measure--height {
  top: 50%;
  left: 0;
  transform: translate(-50%, -50%) rotate(-90deg);
}
.about__copy {
  grid-column: 7 / 13;
  grid-row: 1;
  max-width: 500px;
  padding: 0 0 2px clamp(10px, 1.7vw, 26px);
}
.about__copy p {
  margin: 0;
  color: #8f8e93;
  font-size: clamp(15px, 1.2vw, 18px);
  line-height: 1.55;
}
.about__copy .about__intro {
  margin-bottom: 30px;
  color: #d5d4d1;
  font-size: clamp(22px, 2vw, 30px);
  line-height: 1.18;
  letter-spacing: -.035em;
}
.about__copy p + p { margin-top: 18px; }
.about [data-about-reveal] {
  opacity: 0;
  transform: translateY(42px);
  transition: opacity .7s ease, transform .85s cubic-bezier(.22, 1, .36, 1);
}
.about [data-about-reveal].is-visible {
  opacity: 1;
  transform: translateY(0);
}
.about__visual[data-about-reveal] {
  opacity: 1;
  transform: none;
}
.about__visual[data-about-reveal] img { clip-path: inset(13% 16%); }
.about__visual[data-about-reveal].is-visible img {
  animation: aboutImageAdjust 1.75s cubic-bezier(.22, .8, .25, 1) both;
  animation-delay: .1s;
}

@keyframes aboutFrameAdjust {
  0%, 10% { inset: 13% 16%; }
  30%, 40% { inset: 5% 9%; }
  60%, 70% { inset: 8% 4%; }
  100% { inset: 0; }
}

@keyframes aboutImageAdjust {
  0%, 10% { clip-path: inset(13% 16%); }
  30%, 40% { clip-path: inset(5% 9%); }
  60%, 70% { clip-path: inset(8% 4%); }
  100% { clip-path: inset(0); }
}

.contact {
  position: relative;
  z-index: 9;
  min-height: 100svh;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  padding: clamp(110px, 10vw, 160px) clamp(28px, 4vw, 64px) 28px;
  border-top: 1px solid var(--line);
  background: var(--bg);
}
.contact__heading {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  align-items: end;
  gap: 20px;
}
.contact__heading > span {
  grid-column: 1 / 3;
  color: rgba(197, 197, 197, .42);
  font-size: 11px;
  font-weight: 600;
  line-height: .95;
  letter-spacing: -.03em;
  text-transform: uppercase;
}
.contact__heading > p {
  grid-column: 10 / 12;
  margin: 0;
  color: #c5c5c5;
  font-size: clamp(28px, 2.8vw, 40px);
  font-weight: 500;
  line-height: .8;
  letter-spacing: -.06em;
  text-align: right;
}
.contact__body {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  gap: 20px;
  align-items: center;
  flex: 1;
  padding: clamp(68px, 7vw, 108px) 0 clamp(74px, 7vw, 112px);
}
.contact__copy { grid-column: 1 / 7; }
.contact h2 {
  margin: 0;
  color: var(--ink);
  font-size: clamp(56px, 5.45vw, 84px);
  font-weight: 400;
  line-height: .86;
  letter-spacing: -.07em;
}
.contact__title-line {
  display: block;
  overflow: hidden;
  padding: .08em .04em .14em;
  margin: -.08em -.04em;
}
.contact__title-line i {
  display: block;
  font-style: normal;
  transform: translateY(112%);
  transition: transform 1.05s cubic-bezier(.16, 1, .3, 1);
}
.contact__title-line:nth-child(1) {
  color: rgba(197, 197, 197, .76);
}
.contact__title-line:nth-child(2) i {
  transition-delay: .11s;
}
.contact h2.is-visible .contact__title-line i {
  transform: translateY(0);
}
.contact__copy > p {
  max-width: 500px;
  margin: clamp(30px, 3vw, 44px) 0 0;
  color: #8f8e93;
  font-size: clamp(15px, 1.15vw, 17px);
  line-height: 1.55;
}
.contact__action {
  --button-fill: #25d366;
  position: relative;
  isolation: isolate;
  overflow: hidden;
  display: inline-flex;
  align-items: center;
  gap: 12px;
  min-height: 54px;
  padding: 0 16px;
  border: 1px solid rgba(197, 197, 197, .26);
  border-radius: 4px;
  background: #0d0d0d;
  color: #d8d7d4;
  font-size: 15px;
  white-space: nowrap;
  margin-top: clamp(26px, 2.5vw, 38px);
  transition: color .3s ease, background .3s ease, border-color .3s ease, transform .3s cubic-bezier(.22, 1, .36, 1);
}
.contact__action::before {
  content: "";
  position: absolute;
  z-index: 0;
  inset: -1px;
  border-radius: inherit;
  background: var(--button-fill);
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform .55s cubic-bezier(.16, 1, .3, 1);
}
.contact__action > * { position: relative; z-index: 1; }
.contact__action svg {
  width: 19px;
  height: 19px;
  overflow: visible;
  color: #25d366;
}
.contact__action svg circle {
  fill: none;
  stroke: currentColor;
  stroke-width: 1.6;
}
.contact__action svg path { fill: currentColor; }
.contact__action b {
  margin-left: 8px;
  color: rgba(197, 197, 197, .58);
  font-size: 17px;
  font-weight: 400;
  transition: transform .35s cubic-bezier(.22, 1, .36, 1);
}
.contact__action:hover,
.contact__action:focus-visible {
  border-color: rgba(37, 211, 102, .85);
  background: #0d0d0d;
  color: #07150c;
  transform: translateY(-2px);
}
.contact__action:hover::before,
.contact__action:focus-visible::before { transform: scaleX(1); }
.contact__action:hover svg,
.contact__action:focus-visible svg,
.contact__action:hover b,
.contact__action:focus-visible b { color: #07150c; }
.contact__action:hover b,
.contact__action:focus-visible b { transform: translate(2px, -2px); }
.contact__action:focus-visible { outline: 1px solid #fff; outline-offset: 4px; }
.contact__gallery {
  position: relative;
  grid-column: 8 / 13;
  width: 100%;
  aspect-ratio: 1;
  overflow: hidden;
  background: #121212;
}
.contact__gallery-link {
  position: absolute;
  inset: 0;
  display: block;
  color: inherit;
  cursor: pointer;
}
.contact__gallery-link:focus-visible {
  z-index: 5;
  outline: 1px solid rgba(255, 255, 255, .7);
  outline-offset: -4px;
}
.contact__gallery-image {
  position: absolute;
  inset: 0;
  z-index: 0;
  margin: 0;
  opacity: 0;
  clip-path: inset(100% 0 0);
  transform: scale(1.045);
  pointer-events: none;
}
.contact__gallery-image img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.contact__gallery-image.is-active {
  z-index: 2;
  opacity: 1;
  animation: project-image-in .72s cubic-bezier(.22, 1, .36, 1) both;
}
.contact__gallery-image.is-leaving {
  z-index: 1;
  opacity: 1;
  animation: project-image-out .58s cubic-bezier(.76, 0, .24, 1) both;
}
.contact__gallery-index {
  position: absolute;
  z-index: 4;
  right: 14px;
  bottom: 14px;
  padding: 7px 10px 6px;
  border: 1px solid rgba(255, 255, 255, .34);
  border-radius: 99px;
  background: rgba(5, 5, 5, .34);
  color: rgba(255, 255, 255, .72);
  backdrop-filter: blur(10px);
  font: 500 9px/1 "Space Grotesk", sans-serif;
  letter-spacing: .1em;
  pointer-events: none;
}
.contact__gallery-index b { color: #fff; font-weight: 500; }
.contact [data-contact-reveal] {
  opacity: 0;
  transform: translateY(32px);
  transition: opacity .7s ease, transform .9s cubic-bezier(.22, 1, .36, 1);
}
.contact [data-contact-reveal].is-visible {
  opacity: 1;
  transform: translateY(0);
}

.site-footer {
  position: relative;
  z-index: 9;
  padding: clamp(72px, 6vw, 96px) clamp(28px, 4vw, 64px) 28px;
  border-top: 1px solid var(--line);
  background: var(--bg);
}
.site-footer__main {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: clamp(28px, 4vw, 56px) 36px;
}
.site-footer__identity {
  flex: 0 1 370px;
  max-width: 370px;
}
.site-footer__identity img {
  display: block;
  width: min(190px, 100%);
  height: auto;
  max-height: 58px;
  object-fit: contain;
  object-position: left center;
}
.site-footer__identity > p {
  max-width: 340px;
  margin: 24px 0 0;
  color: #77767b;
  font-size: clamp(14px, 1.05vw, 16px);
  line-height: 1.55;
}
.site-footer__nav {
  flex: 0 1 auto;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: flex-start;
  gap: 14px;
}
.site-footer__contact {
  flex: 0 1 auto;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: flex-start;
  gap: 14px;
  margin-left: auto;
}
@media (min-width: 761px) {
  .site-footer__main {
    justify-content: space-around;
    column-gap: clamp(36px, 5vw, 72px);
  }
  .site-footer__contact { margin-left: 0; }
}
.site-footer__nav > a {
  display: block;
  width: fit-content;
  margin: 0;
  padding: 6px 0;
  color: #a7a6aa;
  font-size: 15px;
  line-height: 1;
  transition: color .25s ease, transform .3s cubic-bezier(.22, 1, .36, 1);
}
.site-footer__nav a:hover,
.site-footer__nav a:focus-visible {
  color: var(--ink);
  transform: none;
}
.site-footer__nav a:focus-visible,
.site-footer__contact a:focus-visible { outline: 1px solid #fff; outline-offset: 5px; }
.site-footer__contact > a {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  width: fit-content;
  margin: 0;
  padding: 8px 0;
}
.site-footer__contact-value {
  display: block;
  margin: 0;
  color: #d5d4d1;
  font-size: clamp(14px, 1.15vw, 17px);
  line-height: 1;
  letter-spacing: -.03em;
  transition: color .25s ease, transform .3s cubic-bezier(.22, 1, .36, 1);
}
.site-footer__contact a:hover .site-footer__contact-value,
.site-footer__contact a:focus-visible .site-footer__contact-value {
  color: #fff;
  transform: translateX(4px);
}
.site-footer__contact-icon {
  flex: 0 0 auto;
  width: 21px;
  height: 21px;
  overflow: visible;
}
.site-footer__contact-icon--whatsapp {
  color: #25d366;
}
.site-footer__contact-icon--whatsapp circle {
  fill: none;
  stroke: currentColor;
  stroke-width: 1.6;
}
.site-footer__contact-icon--whatsapp path { fill: currentColor; }
.site-footer__contact-icon--mail {
  fill: none;
  stroke: #4D7CFF;
  stroke-width: 1.45;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.site-footer__contact-icon--instagram {
  fill: none;
  stroke: url(#instagram-gradient);
  stroke-width: 1.7;
}
.site-footer__contact-icon--instagram circle:last-child {
  fill: #e1306c;
  stroke: none;
}
.site-footer__code-link {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  width: fit-content;
  color: #d5d4d1;
  font: 600 11px/1 "Space Grotesk", sans-serif;
  letter-spacing: .16em;
  transition: color .25s ease, transform .3s cubic-bezier(.22, 1, .36, 1);
}
.site-footer__code-link:hover,
.site-footer__code-link:focus-visible {
  color: var(--accent-light);
  transform: translateX(4px);
}
.site-footer__identity,
.site-footer__nav,
.site-footer__contact {
  opacity: 0;
  transform: translateY(30px);
  transition: opacity .65s ease, transform .8s cubic-bezier(.22, 1, .36, 1);
}
.site-footer__nav { transition-delay: .09s; }
.site-footer__contact { transition-delay: .18s; }
.site-footer.is-visible .site-footer__identity,
.site-footer.is-visible .site-footer__nav,
.site-footer.is-visible .site-footer__contact {
  opacity: 1;
  transform: translateY(0);
}
.site-footer__bottom {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
  margin-top: clamp(90px, 9vw, 138px);
  padding-top: 22px;
  border-top: 1px solid rgba(197, 197, 197, .12);
  color: rgba(197, 197, 197, .68);
  font: 500 11px/1.3 "Space Grotesk", sans-serif;
  letter-spacing: .08em;
  text-transform: uppercase;
}
.site-footer__legal {
  display: flex;
  justify-content: center;
  gap: clamp(18px, 2.4vw, 38px);
}
.site-footer__legal a {
  color: rgba(197, 197, 197, .76);
  transition: color .25s ease;
}
.site-footer__legal a:hover,
.site-footer__legal a:focus-visible { color: var(--accent-light); }
.site-footer__legal a:focus-visible { outline: 1px solid #fff; outline-offset: 4px; }
.site-footer__bottom > span:last-child { text-align: right; }

.back-to-top {
  position: fixed;
  z-index: 45;
  right: clamp(16px, 2.4vw, 34px);
  bottom: clamp(16px, 2.4vw, 34px);
  display: grid;
  width: 54px;
  aspect-ratio: 1;
  place-items: center;
  overflow: hidden;
  padding: 0;
  border: 1px solid rgba(127, 161, 255, .5);
  border-radius: 15px;
  background: var(--accent);
  color: #fff;
  box-shadow: 0 16px 38px rgba(36, 72, 184, .32);
  opacity: 0;
  pointer-events: none;
  transform: translateY(22px) scale(.78) rotate(10deg);
  transition: opacity .3s ease, transform .55s cubic-bezier(.16, 1, .3, 1), background .3s ease, box-shadow .3s ease;
}
.back-to-top.is-visible {
  opacity: 1;
  pointer-events: auto;
  transform: translateY(0) scale(1) rotate(0);
}
.back-to-top b {
  position: relative;
  z-index: 2;
  font-size: 21px;
  font-weight: 400;
  transition: transform .45s cubic-bezier(.22, 1, .36, 1);
}
.back-to-top::before {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--accent-light);
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform .55s cubic-bezier(.16, 1, .3, 1);
}
.back-to-top:hover,
.back-to-top:focus-visible {
  box-shadow: 0 20px 46px rgba(36, 72, 184, .48);
  transform: translateY(-3px) scale(1.04);
}
.back-to-top:hover::before,
.back-to-top:focus-visible::before { transform: scaleX(1); }
.back-to-top:hover b,
.back-to-top:focus-visible b { transform: translateY(-4px); }
.back-to-top:focus-visible { outline: 1px solid #fff; outline-offset: 4px; }


@media (max-width: 760px) {
  html,
  body {
    scrollbar-width: none;
    scrollbar-color: transparent transparent;
  }
  html::-webkit-scrollbar,
  body::-webkit-scrollbar {
    display: none;
    width: 0 !important;
    height: 0 !important;
  }
  .mobile-scrollbar.is-scrollable {
    display: block;
    position: fixed;
    z-index: 1002;
    inset: 0 3px 0 auto;
    width: 3px;
    pointer-events: none;
  }
  .mobile-scrollbar__thumb {
    position: absolute;
    top: 0;
    right: 0;
    width: 100%;
    height: var(--mobile-scroll-thumb-height, 64px);
    border-radius: 999px;
    background: #ff6a1a;
    transform: translateY(var(--mobile-scroll-thumb-offset, 0px));
  }
  body.menu-open { overflow:hidden; }
  .site-header {
    grid-template-columns:1fr auto;
    padding:20px 18px;
  }
  .site-header .brand,
  .menu-toggle {
    position:relative;
    z-index:3;
  }
  .site-header .brand img {
    width:97px;
    height:auto;
    max-width:97px;
    max-height:none;
  }
  .site-header > .header-cta { display:none; }
  .nav {
    position:fixed;
    z-index:2;
    top:0;
    left:0;
    width:100%;
    height:100svh;
    display:flex;
    flex-direction:column;
    justify-content:center;
    align-items:center;
    gap:0;
    padding:80px 24px 40px;
    overflow:hidden;
    visibility:hidden;
    pointer-events:none;
    transition:visibility 0s linear .7s;
  }
  .nav::before {
    content:"";
    position:absolute;
    top:25px;
    right:5%;
    width:40px;
    height:40px;
    border:1px solid transparent;
    border-radius:50%;
    background:
      linear-gradient(rgba(5,5,5,.98),rgba(5,5,5,.98)) content-box,
      linear-gradient(135deg,rgba(127,161,255,.45),rgba(77,124,255,.45)) border-box;
    transform:scale(0);
    transform-origin:center;
    transition:transform .7s cubic-bezier(.75,0,.25,1);
    z-index:-1;
    will-change:transform;
  }
  .nav a {
    position:relative;
    margin:15px 0;
    color:var(--ink);
    font-family:"Fustat",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
    font-size:clamp(34px,10vw,46px);
    font-weight:400;
    line-height:1;
    letter-spacing:-.045em;
    opacity:0;
    transform:translateY(20px);
    transition:all .3s ease;
    will-change:transform,opacity;
  }
  .nav a:hover,
  .nav a:focus-visible { color:var(--ink); }
  .nav a.nav__mobile-cta {
    isolation:isolate;
    display:inline-flex;
    align-items:center;
    min-height:52px;
    margin:15px 0;
    padding:0 22px;
    overflow:hidden;
    border:1px solid #ff6a1a;
    border-radius:4px;
    background:#ff6a1a;
    box-shadow:0 14px 34px rgba(255,106,26,.18);
    color:#090909;
    font-size:15px!important;
    letter-spacing:0!important;
  }
  .nav__mobile-cta::before {
    content:"";
    position:absolute;
    z-index:0;
    inset:-1px;
    background:#ff8748;
    transform:scaleX(0);
    transform-origin:left center;
    transition:transform .55s cubic-bezier(.16,1,.3,1);
  }
  .nav__mobile-cta span { position:relative; z-index:1; }
  .nav__mobile-cta:hover,
  .nav__mobile-cta:focus-visible { color:#090909!important; }
  .nav__mobile-cta:hover::before,
  .nav__mobile-cta:focus-visible::before { transform:scaleX(1); }
  .nav.is-active {
    visibility:visible;
    pointer-events:auto;
    transition:visibility 0s;
  }
  .nav.is-active::before { transform:scale(80); }
  .nav.is-active a {
    opacity:1;
    transform:translateY(0);
    transition:all .4s ease .3s;
  }
  .menu-toggle {
    display:flex;
    width:32px;
    height:22px;
    padding:0;
    border:0;
    background:transparent;
    flex-direction:column;
    justify-content:space-between;
    justify-self:end;
    color:var(--ink);
    opacity:1;
    visibility:visible;
    appearance:none;
    -webkit-tap-highlight-color:transparent;
    cursor:pointer;
  }
  .menu-toggle span {
    display:block;
    width:100%;
    height:2px;
    border-radius:4px;
    background:currentColor;
    transition:all .4s cubic-bezier(.68,-.55,.265,1.55);
    transform-origin:left center;
  }
  .menu-toggle:focus-visible { outline:1px solid #fff; outline-offset:5px; }
  .menu-toggle.is-active span:nth-child(1) { transform:rotate(45deg); width:110%; }
  .menu-toggle.is-active span:nth-child(2) { opacity:0; transform:translateX(20px); }
  .menu-toggle.is-active span:nth-child(3) { transform:rotate(-45deg); width:110%; }
  .hero { min-height: 100svh; padding:110px 18px 70px; place-items:start center; }
  .journey-ring { position:absolute; width:var(--journey-size,145vw); }
  /* Composicion mobile: el bloque vive DENTRO del anillo, anclado bajo el
     arco interno superior (centro 50svh + 20px del JS - radio interior
     ~42.12vw) con 16px de aire. -74px = +20 JS + 16 de aire - 110 de
     padding-top. El interior del anillo (diametro ~2*42.12vw) apenas supera
     la altura del bloque en telefonos, por eso el espaciado interno es
     compacto: asi titulo, descripcion y boton bajan sin cruzar el arco
     inferior y la masa visual cae ligeramente bajo el centro. */
  .hero__content { margin-top:calc(50svh - 42.12vw - 45px); }
  .hero__eyebrow { margin-bottom:25px; font-size:11px; }
  .hero h1 { font-size:clamp(38px,10vw,52px); line-height:1.04; }
  .hero h1 br { display:none; }
  .hero__summary { margin:25px auto 20px; }
  @media (max-width: 380px) { .hero h1 { font-size:38px; } }
  .services { height:auto; }
  .services__sticky { position:relative; height:auto; overflow:visible; padding-top:0; }
  .services__heading {
    position:relative;
    inset:auto;
    display:flex;
    align-items:flex-end;
    justify-content:space-between;
    gap:24px;
    padding:88px 16px 34px;
  }
  .services__heading > span { font-size:11px; }
  .service-grid { position:relative; inset:auto; display:block; transform:none; opacity:1; border-top:0; border-bottom:1px solid var(--line); }
  .service-card { min-height:338px; border-right:0!important; border-bottom:1px solid var(--line); padding:40px 16px 28px; }
  .service-card::before { opacity:1; }
  .service-card__copy { width:70%; justify-content:flex-start; }
  .service-card__copy > span { display:none; }
  .service-card h2 { margin:0 0 12px; font-size:28px; line-height:1.12; opacity:1; transform:none; }
  .service-card p,.service-card a { opacity:1; transform:none; }
  .service-card p { position:static; width:100%; max-height:none; margin:0 0 14px; font-size:16px; line-height:1.5; overflow:visible; }
  .service-card a { position:static; min-height:48px; max-height:48px; margin-top:auto; padding:0 16px; border-width:1px; }
  .service-card__visual { opacity:1; clip-path:inset(0); transform:none; }
  .service-card:hover h2,.service-card:focus-visible h2 { transform:none; }
  .services__cross { display:none; }
  .mockup--mobile { width:min(192.5px,49.5vw); right:max(-38.5px,-9.9vw); top:50%; }
  /* Card 1 mobile: captura real en formato telefono, misma familia visual que las otras. */
  .mockup--a { background-image:url('images/sushi-service-phone.webp'); background-position:top center; }
  .mockup--desktop { right:max(-38.5px,-9.9vw); top:50%; width:min(192.5px,49.5vw); aspect-ratio:.52; border-radius:22px; }
  .mockup--desktop::after { border-radius:26px; }
  .service-card { min-height:460px; padding:60px 16px 48px; }
  .service-card__copy,
  .service-card--one .service-card__copy { width:54%; height:auto; min-height:100%; }
  .service-card p { width:100%; }

  .projects {
    padding: 88px 16px 96px;
    overflow: hidden;
  }
  .projects__heading {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 24px;
  }
  .projects__eyebrow { font-size: 11px; }
  .projects h2 {
    font-size: clamp(27px, 8vw, 34px);
    line-height: .9;
  }
  .projects__layout { display: block; margin-top: 38px; }
  .project-list {
    display: flex;
    gap: 30px;
    align-items: stretch;
  }
  .project-item {
    display: block;
    width: calc(100% - 28px);
    aspect-ratio: 1;
    overflow: hidden;
    background: #151515;
    color: #fff;
    font-size: clamp(29px, 9.5vw, 43px);
    line-height: .92;
    text-align: left;
    box-shadow: 0 24px 60px rgba(0, 0, 0, .35);
  }
  .project-item:nth-child(even) { margin-left: 28px; }
  .project-list:hover .project-item:not(:hover),
  .project-list:focus-within .project-item:not(:focus) { opacity: 1; }
  .project-item::after {
    content: "";
    position: absolute;
    inset: 34% 0 0;
    z-index: 1;
    background: linear-gradient(to bottom, transparent, rgba(0, 0, 0, .16) 30%, rgba(0, 0, 0, .86));
    pointer-events: none;
  }
  .project-item__mobile-visual {
    display: block;
    position: absolute;
    inset: 0;
  }
  .project-item__mobile-visual img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform .8s cubic-bezier(.22, 1, .36, 1);
  }
  .project-item:active .project-item__mobile-visual img,
  .project-item:focus-visible .project-item__mobile-visual img { transform: scale(1.055); }
  .project-item__number {
    display: block;
    position: absolute;
    z-index: 3;
    top: 16px;
    right: 16px;
    min-width: 40px;
    padding: 7px 8px 6px;
    border: 1px solid rgba(255, 255, 255, .45);
    border-radius: 99px;
    background: rgba(8, 8, 8, .26);
    backdrop-filter: blur(10px);
    font: 500 10px/1 "Space Grotesk", sans-serif;
    letter-spacing: .12em;
    text-align: center;
  }
  .project-item__name {
    position: absolute;
    z-index: 3;
    left: 16px;
    right: 16px;
    bottom: 18px;
    display: inline-flex;
    flex-wrap: wrap;
    align-items: flex-end;
    max-width: 92%;
    text-shadow: 0 4px 25px rgba(0, 0, 0, .55);
  }
  .project-item:focus-visible { outline-offset: -2px; }
  .project-preview { display: none; }

  .about { padding:88px 16px 96px; }
  .about__heading {
    display:flex;
    align-items:flex-end;
    justify-content:space-between;
    gap:24px;
  }
  .about__heading > span { font-size:11px; }
  .about__heading h2 {
    font-size:clamp(27px,8vw,34px);
    line-height:.9;
  }
  .about__statement { margin:70px 0 42px; }
  .about__statement p {
    font-size:clamp(52px,15.2vw,70px);
    line-height:.88;
  }
  .about__statement span::after {
    right:-.3em;
    width:.2em;
  }
  .about__data-line {
    grid-template-columns:repeat(2,minmax(0,1fr));
    gap:9px 12px;
    margin-bottom:58px;
    padding:14px 0 13px;
    letter-spacing:.06em;
    font-size:11px;
  }
  .about__data-line span:nth-child(1) { grid-column:1; }
  .about__data-line span:nth-child(2) {
    grid-column:2;
    text-align:right;
  }
  .about__data-line span:nth-child(3) {
    grid-column:1 / 3;
    text-align:right;
  }
  .about__body { display:block; }
  .about__visual {
    width:100%;
    aspect-ratio:.82;
  }
  .about__visual img {
    object-position:50% center;
    filter:grayscale(1) brightness(.68) contrast(1.08);
    transform:none;
  }
  .about__visual.is-visible img { filter:none; }
  .about__visual[data-about-reveal],
  .about__visual[data-about-reveal].is-visible {
    opacity:1;
    transform:none;
  }
  .about__visual[data-about-reveal] img { clip-path:inset(13% 16%); }
  .about__visual::before {
    inset:13% 16%;
    background-size:36px 36px;
  }
  .about__visual figcaption {
    inset:auto 12px 12px;
    gap:10px;
    font-size:11px;
    letter-spacing:.08em;
  }
  .about__frame-ui > i {
    width:7px;
    height:7px;
  }
  .about__frame-ui { inset:13% 16%; }
  .about__measure {
    padding:3px 6px;
    font-size:8px;
  }
  .about__measure--height { display:none; }
  .about__copy {
    max-width:none;
    padding:38px 0 0;
  }
  .about__copy .about__intro {
    margin-bottom:26px;
    font-size:24px;
  }
  .about__copy p { font-size:16px; }

  .contact {
    min-height:100svh;
    padding:88px 16px 20px;
  }
  .contact__heading {
    display:flex;
    align-items:flex-end;
    justify-content:space-between;
    gap:24px;
  }
  .contact__heading > span { font-size:11px; }
  .contact__heading > p {
    font-size:clamp(27px,8vw,34px);
    line-height:.9;
  }
  .contact__body {
    display:block;
    padding:76px 0 70px;
  }
  .contact h2 {
    font-size:clamp(52px,15.2vw,70px);
    line-height:.88;
  }
  .contact__title-line {
    padding:.08em 0 .14em;
    margin:-.08em 0;
  }
  .contact__copy > p {
    margin-top:30px;
    font-size:16px;
  }
  .contact__action {
    min-height:54px;
    margin-top:26px;
    padding:0 15px;
    font-size:15px;
  }
  .contact__gallery {
    width:100%;
    margin-top:60px;
  }
  .site-footer {
    padding:62px 16px 22px;
  }
  .site-footer__main {
    display:grid;
    grid-template-columns:1fr;
    gap:38px;
    text-align:center;
  }
  .site-footer__identity {
    grid-column:1;
    max-width:330px;
    margin:0 auto;
  }
  .site-footer__identity img {
    width:150px;
    margin:0 auto;
    object-position:center;
  }
  .site-footer__identity > p {
    margin-top:22px;
    font-size:15px;
  }
  .site-footer__nav,
  .site-footer__contact { grid-column:1; }
  .site-footer__nav {
    flex-direction:row;
    flex-wrap:wrap;
    align-items:center;
    flex:0 1 auto;
    justify-content:center;
    gap:10px 20px;
    text-align:center;
  }
  .site-footer__nav > a {
    width:fit-content;
    margin:0;
    padding:6px 0;
    font-size:14px;
    white-space:nowrap;
  }
  .site-footer__contact {
    flex-direction:column;
    align-items:center;
    flex:0 1 auto;
    justify-content:center;
    gap:12px;
    margin-left:0;
    text-align:center;
  }
  .site-footer__contact > a {
    justify-content:center;
    gap:8px;
    width:fit-content;
    margin:0;
    padding:6px 0;
  }
  .site-footer__contact-value {
    overflow-wrap:anywhere;
    font-size:clamp(12px,3.4vw,14px);
  }
  .site-footer__bottom {
    display:flex;
    flex-direction:column;
    align-items:center;
    gap:18px;
    margin-top:48px;
    padding:22px 70px 0;
    font-size:11px;
    text-align:center;
  }
  .site-footer__legal {
    order:-1;
    flex-wrap:wrap;
    justify-content:center;
    align-items:center;
    gap:10px 18px;
    width:100%;
  }
  .site-footer__bottom > span:first-child { text-align:center; }
  .site-footer__bottom > span:last-child { display:none; }
  .back-to-top {
    width:50px;
    border-radius:14px;
    padding:0;
    box-shadow:0 14px 34px rgba(36,72,184,.38);
  }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior:auto; }
  *,*::before,*::after {
    animation-duration:.01ms!important;
    animation-delay:0s!important;
    animation-iteration-count:1!important;
    transition-duration:.01ms!important;
    transition-delay:0s!important;
  }
}
