/* ============================================================================
   MOISÉS MOTA · MY DIGITAL WORLD — PÁGINA /contacto
   ----------------------------------------------------------------------------
   Hoja propia de una sola página. La carga website/contact/index.blade.php
   mediante @push('styles'), igual que mm-agentes.css en /agentes.

   No redefine nada compartido. Toda regla va bajo el prefijo .mm-ct- y
   reutiliza las variables que ya existen:

     mm-shell.css  → paleta (--background, --text-*, --border-color)
                     CTA mostaza (--mm-cta, --mm-cta-hover, --mm-cta-texto)
                     curva (--mm-shell-ease)
     mm-2026.css   → --mm-ease y el par .mm-reveal / .is-visible
     mm-inner.css  → adaptación oscura de Bootstrap (.form-control, .alert…)

   Los campos del formulario conservan las clases de Bootstrap para que la
   validación (.is-invalid / .invalid-feedback) siga funcionando igual. Acá
   sólo se ajusta su presentación, siempre acotada a .mm-ct-form.
   ========================================================================== */

.mm-ct {
    /* Altura real de .navbar-dark medida en el navegador: 83px a 1440 y a
       1024 (padding 18px arriba y abajo + el lockup). El margen de 28px es
       el aire pedido entre la barra y la card cuando queda fija. */
    --mm-ct-nav: 83px;
    --mm-ct-sticky-top: calc(var(--mm-ct-nav) + 28px);

    --mm-ct-radio: 20px;
    --mm-ct-gap: 56px;

    /* El --text-muted compartido (#64748b) da 4,23:1 sobre este fondo y no
       llega al 4,5 de AA. Estos dos tonos son sólo de esta página: 5,39:1
       para el texto apagado y 4,78:1 para los placeholders. No se toca la
       variable compartida, que otras páginas usan sobre otros fondos. */
    --mm-ct-apagado: #74869b;
    --mm-ct-placeholder: #6b7d93;
}

/* ============================================
   LOOP 1 — HERO
   Banda corta, sin degradado violeta y sin animación permanente.
   La reja es un patrón estático: dos gradientes repetidos, nada que anime.
   ============================================ */
.mm-ct-hero {
    position: relative;
    isolation: isolate;
    /* 86 + 78 de relleno sobre ~128 de contenido dan una banda de ~292px,
       dentro de los 280–320 pedidos. El layout ya separa 92px la barra fija,
       así que este relleno es aire real, no compensación del header. */
    padding: 86px 0 78px;
    background:
        radial-gradient(760px circle at 18% 0%, rgba(6, 182, 212, .10), transparent 58%),
        linear-gradient(180deg, #07172F 0%, #07101F 100%);
    border-bottom: 1px solid var(--border-color);
    overflow: hidden;
}

.mm-ct-hero::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1;
    background-image:
        linear-gradient(rgba(148, 163, 184, .055) 1px, transparent 1px),
        linear-gradient(90deg, rgba(148, 163, 184, .055) 1px, transparent 1px);
    background-size: 64px 64px;
    /* Se desvanece hacia abajo para que la reja no choque con el contenido */
    -webkit-mask-image: linear-gradient(180deg, #000 0%, transparent 82%);
    mask-image: linear-gradient(180deg, #000 0%, transparent 82%);
}

.mm-ct-hero__caja { max-width: 760px; }

.mm-ct-eyebrow {
    display: block;
    margin: 0 0 14px;
    font-size: .76rem;
    font-weight: 600;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: var(--primary);
}

.mm-ct-hero h1 {
    margin: 0 0 14px;
    font-size: clamp(2rem, 1.35rem + 2.1vw, 3rem);
    font-weight: 700;
    line-height: 1.08;
    letter-spacing: -.02em;
    color: var(--text-primary);
}

.mm-ct-hero__sub {
    margin: 0;
    max-width: 52ch;
    font-size: clamp(1rem, .96rem + .2vw, 1.12rem);
    line-height: 1.6;
    color: var(--text-secondary);
}

/* ============================================
   LOOP 2 — COMPOSICIÓN
   42 / 58 en escritorio. Sin align-items: start, a propósito: la columna
   derecha tiene que estirarse hasta la altura de la izquierda para que la
   card del formulario tenga recorrido donde quedarse fija (loop 5).
   ============================================ */
.mm-ct-cuerpo {
    /* El aire de abajo es el que separa la sección del pie (loop 6). */
    padding: 64px 0 96px;
}

.mm-ct-grid {
    display: grid;
    grid-template-columns: 42fr 58fr;
    gap: var(--mm-ct-gap);
}

/* ---- Columna izquierda ---- */
.mm-ct-persona { min-width: 0; }

.mm-ct-figura {
    position: relative;
    margin: 0 0 22px;
}

/* Luz de ambiente detrás del retrato. Muy discreta y estática. */
.mm-ct-figura::before {
    content: "";
    position: absolute;
    z-index: -1;
    /* Sin sangrado lateral: con -8% a cada lado el pseudo-elemento se salía
       del contenedor y sumaba 12px al ancho del documento a 768. El radial
       ya está centrado y sólo cubre el 60% del ancho, así que no lo necesita. */
    inset: auto 0 -6% 0;
    height: 62%;
    background: radial-gradient(60% 100% at 50% 100%, rgba(6, 182, 212, .13), transparent 72%);
    filter: blur(6px);
    pointer-events: none;
}

.mm-ct-foto {
    display: block;
    position: relative;
    border-radius: var(--mm-ct-radio);
    overflow: hidden;
    border: 1px solid rgba(148, 163, 184, .16);
    background: var(--background-secondary);
}

.mm-ct-foto img {
    display: block;
    width: 100%;
    height: auto;
    aspect-ratio: 4 / 5;
    max-height: 430px;
    object-fit: cover;
    object-position: center 18%;
}

/* Degradado inferior muy leve, para asentar la foto sobre el fondo */
.mm-ct-foto::after {
    content: "";
    position: absolute;
    inset: auto 0 0 0;
    height: 34%;
    background: linear-gradient(180deg, transparent 0%, rgba(3, 7, 18, .55) 100%);
    pointer-events: none;
}

.mm-ct-identidad {
    margin: 0 0 26px;
}

.mm-ct-identidad__nombre {
    display: block;
    font-size: 1.22rem;
    font-weight: 700;
    line-height: 1.2;
    color: var(--text-primary);
}

.mm-ct-identidad__lugar {
    display: block;
    margin-top: 4px;
    font-size: .88rem;
    letter-spacing: .02em;
    color: var(--mm-ct-apagado);
}

.mm-ct-identidad__frase {
    margin: 12px 0 0;
    padding-left: 14px;
    border-left: 2px solid var(--primary);
    font-size: 1rem;
    line-height: 1.5;
    color: var(--text-secondary);
}

/* ---- Lista de contacto: compacta, no una segunda sección ---- */
.mm-ct-lista {
    list-style: none;
    margin: 0 0 26px;
    padding: 0;
    border-top: 1px solid var(--border-color);
}

.mm-ct-lista li { border-bottom: 1px solid var(--border-color); }

.mm-ct-lista a,
.mm-ct-lista span {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 2px;
    font-size: .97rem;
    color: var(--text-primary);
    text-decoration: none;
    transition: color .25s var(--mm-shell-ease), gap .25s var(--mm-shell-ease);
}

.mm-ct-lista a:hover,
.mm-ct-lista a:focus-visible {
    color: var(--primary);
    gap: 15px;
}

.mm-ct-lista svg {
    flex-shrink: 0;
    width: 18px;
    height: 18px;
    color: var(--text-muted);
    transition: color .25s var(--mm-shell-ease);
}

.mm-ct-lista a:hover svg,
.mm-ct-lista a:focus-visible svg { color: var(--primary); }

/* WhatsApp conserva su verde sólo en el icono */
.mm-ct-lista .mm-ct-wa svg { color: #25D366; }

.mm-ct-redes__titulo {
    margin: 0 0 12px;
    font-size: .76rem;
    font-weight: 600;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: var(--mm-ct-apagado);
}

.mm-ct-redes__fila {
    display: flex;
    gap: 10px;
}

.mm-ct-red {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: 11px;
    border: 1px solid var(--border-color);
    background: rgba(15, 23, 42, .6);
    color: var(--text-secondary);
    transition: color .25s var(--mm-shell-ease), border-color .25s var(--mm-shell-ease),
                background-color .25s var(--mm-shell-ease);
}

.mm-ct-red:hover,
.mm-ct-red:focus-visible {
    color: var(--text-primary);
    border-color: rgba(6, 182, 212, .4);
    background: rgba(6, 182, 212, .12);
}

/* ============================================
   LOOP 4 — FORMULARIO
   ============================================ */
.mm-ct-form-col { min-width: 0; }

.mm-ct-card {
    padding: 36px 34px 34px;
    border: 1px solid var(--border-color);
    border-radius: var(--mm-ct-radio);
    background: linear-gradient(180deg, rgba(15, 23, 42, .82) 0%, rgba(3, 7, 18, .82) 100%);
    box-shadow: 0 28px 60px -40px rgba(0, 0, 0, .95);
}

.mm-ct-card__titulo {
    margin: 0 0 6px;
    font-size: 1.42rem;
    font-weight: 700;
    letter-spacing: -.01em;
    color: var(--text-primary);
}

.mm-ct-card__sub {
    margin: 0 0 24px;
    font-size: .95rem;
    line-height: 1.55;
    color: var(--text-secondary);
}

.mm-ct-campos {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px 18px;
}

.mm-ct-campo--ancho { grid-column: 1 / -1; }

.mm-ct-form .form-label {
    display: block;
    margin-bottom: 6px;
    font-size: .84rem;
    font-weight: 500;
    letter-spacing: .01em;
    color: var(--text-secondary);
}

.mm-ct-form .form-label .mm-ct-op { color: var(--mm-ct-apagado); font-weight: 400; }
.mm-ct-form .form-label .mm-ct-req { color: var(--mm-cta); }

.mm-ct-form .form-control {
    width: 100%;
    padding: 12px 14px;
    font-size: .97rem;
    line-height: 1.4;
    border-radius: 12px;
    border: 1px solid var(--border-color);
    background: rgba(2, 6, 16, .62);
    color: var(--text-primary);
    transition: border-color .22s var(--mm-shell-ease), background-color .22s var(--mm-shell-ease),
                box-shadow .22s var(--mm-shell-ease);
}

.mm-ct-form .form-control::placeholder { color: var(--mm-ct-placeholder); }

.mm-ct-form .form-control:hover { border-color: rgba(148, 163, 184, .22); }

.mm-ct-form .form-control:focus {
    outline: none;
    background: rgba(2, 6, 16, .85);
    border-color: var(--primary);
    box-shadow: 0 0 0 3px rgba(6, 182, 212, .16);
}

.mm-ct-form textarea.form-control {
    min-height: 148px;
    resize: vertical;
}

.mm-ct-form .form-control.is-invalid {
    border-color: #f87171;
    box-shadow: none;
}

.mm-ct-form .form-control.is-invalid:focus {
    box-shadow: 0 0 0 3px rgba(248, 113, 113, .18);
}

.mm-ct-form .invalid-feedback {
    display: block;
    margin-top: 6px;
    font-size: .83rem;
    color: #fca5a5;
}

.mm-ct-ayuda {
    display: block;
    margin-top: 6px;
    font-size: .8rem;
    color: var(--mm-ct-apagado);
}

/* ---- Botón ---- */
.mm-ct-enviar {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 9px;
    width: 100%;
    padding: 14px 22px;
    border: 0;
    border-radius: 12px;
    font-family: inherit;
    font-size: 1rem;
    font-weight: 600;
    letter-spacing: .01em;
    cursor: pointer;
    /* Contraste medido sobre el fondo del botón: 7,6:1 en reposo y 5,7:1 en
       hover. Ambos pasan AA; el de reposo también AAA. */
    background: var(--mm-cta);
    color: var(--mm-cta-texto);
    transition: background-color .22s var(--mm-shell-ease), transform .22s var(--mm-shell-ease),
                box-shadow .22s var(--mm-shell-ease);
}

.mm-ct-enviar:hover {
    background: var(--mm-cta-hover);
    transform: translateY(-1px);
    box-shadow: 0 10px 24px -14px rgba(211, 154, 30, .9);
}

.mm-ct-enviar:focus-visible {
    outline: 2px solid var(--primary);
    outline-offset: 3px;
}

.mm-ct-enviar:disabled {
    opacity: .72;
    cursor: wait;
    transform: none;
    box-shadow: none;
}

.mm-ct-enviar svg { flex-shrink: 0; }

/* Las dos caras del botón. Bootstrap alterna .d-none por JS y su
   display:none !important gana sobre estas reglas, que es lo que se busca. */
.mm-ct-enviar .btn-text,
.mm-ct-enviar .btn-loading {
    display: inline-flex;
    align-items: center;
    gap: 9px;
}

.mm-ct-enviar .spinner-border {
    width: 1rem;
    height: 1rem;
    border-width: .16em;
}

/* ---- Avisos de éxito y error ---- */
.mm-ct-form-col .alert {
    border-radius: 12px;
    font-size: .93rem;
}

.mm-ct-form-col .alert-success {
    background: rgba(16, 185, 129, .12);
    border: 1px solid rgba(16, 185, 129, .32);
    color: #6ee7b7;
}

.mm-ct-form-col .alert-danger {
    background: rgba(248, 113, 113, .11);
    border: 1px solid rgba(248, 113, 113, .3);
    color: #fca5a5;
}

.mm-ct-form-col .alert-danger ul { padding-left: 18px; }

/* ============================================
   LOOP 5 — STICKY
   Sólo en escritorio. La card se queda fija mientras el usuario recorre la
   columna izquierda y se suelta sola cuando la grilla termina.
   ============================================ */
@media (min-width: 1024px) {
    .mm-ct-card {
        position: sticky;
        top: var(--mm-ct-sticky-top);
    }
}

/* ============================================
   LOOP 8 — MOTION
   Reutiliza .mm-reveal de mm-2026.css (observador en mm-2026.js, que ya
   contempla movimiento reducido, falta de IntersectionObserver y un repaso
   de seguridad a los 1500 ms). Acá sólo se escalonan los retardos.
   El retrato suma un reveal de clip-path que corre una vez y queda quieto.
   ============================================ */
.mm-ct-d1 { --mm-delay: 0ms; }
.mm-ct-d2 { --mm-delay: 90ms; }
.mm-ct-d3 { --mm-delay: 170ms; }
.mm-ct-d4 { --mm-delay: 250ms; }

@keyframes mm-ct-foto-entra {
    from { clip-path: inset(10% 6% 14% 6% round var(--mm-ct-radio)); }
    to   { clip-path: inset(0 0 0 0 round var(--mm-ct-radio)); }
}

.mm-js .mm-ct-figura.is-visible .mm-ct-foto {
    animation: mm-ct-foto-entra .85s var(--mm-ease) both;
    animation-delay: var(--mm-delay, 0ms);
}

/* ============================================
   LOOP 7 — RESPONSIVE
   ============================================ */

/* Tablet y menos: una columna, sin sticky. El corte coincide con el de la
   barra de navegación (hamburguesa a partir de 1023). */
@media (max-width: 1023px) {
    .mm-ct-grid {
        grid-template-columns: 1fr;
        gap: 40px;
    }
    .mm-ct-card { position: static; }
    .mm-ct-cuerpo { padding: 52px 0 76px; }
    .mm-ct-foto img { max-height: 380px; }
}

/* Tablet chico */
@media (max-width: 767px) {
    .mm-ct-hero { padding: 46px 0 42px; }
    .mm-ct-cuerpo { padding: 44px 0 64px; }
    .mm-ct-card { padding: 28px 22px 26px; }
    .mm-ct-foto img { max-height: 340px; }
}

/* Teléfono: los campos que iban de a dos pasan a uno por fila */
@media (max-width: 599px) {
    .mm-ct-campos { grid-template-columns: 1fr; }
    .mm-ct-hero { padding: 40px 0 36px; }
    .mm-ct-cuerpo { padding: 38px 0 56px; }
    .mm-ct-card { padding: 24px 18px 22px; }
    .mm-ct-foto img { max-height: 300px; }
    .mm-ct-figura { margin-bottom: 18px; }
}

/* ============================================
   MOVIMIENTO REDUCIDO
   mm-2026.css ya neutraliza .mm-reveal. Acá se apaga lo propio de la página.
   ============================================ */
@media (prefers-reduced-motion: reduce) {
    .mm-js .mm-ct-figura.is-visible .mm-ct-foto,
    .mm-ct-foto {
        animation: none !important;
        clip-path: none !important;
    }
    .mm-ct-lista a,
    .mm-ct-red,
    .mm-ct-enviar,
    .mm-ct-form .form-control {
        transition: none !important;
    }
    .mm-ct-enviar:hover { transform: none; }
}
