correccion

This commit is contained in:
Emmanuel Rojas committed 2026-10-06 07:14:27 -05:00
1 parent f87cdf5f59
commit 9a8614c871
15 files changed
+67 -14

No files matched your search

+2
View File
@@ -112,6 +112,8 @@ function BlogContent() {
<img <img
src={art.imageUrl} src={art.imageUrl}
alt={art.title} alt={art.title}
loading="lazy"
decoding="async"
style={{ width: "100%", height: "100%", objectFit: "cover", display: "block" }} style={{ width: "100%", height: "100%", objectFit: "cover", display: "block" }}
onError={(e) => { onError={(e) => {
(e.currentTarget as HTMLImageElement).style.display = "none"; (e.currentTarget as HTMLImageElement).style.display = "none";
@@ -278,6 +278,8 @@ export default function ArticlePage() {
<img <img
src={imageUrl} src={imageUrl}
alt={post.title} alt={post.title}
fetchPriority="high"
decoding="async"
style={{ width: "100%", height: "100%", objectFit: "cover" }} style={{ width: "100%", height: "100%", objectFit: "cover" }}
/> />
</motion.div> </motion.div>
+4 -2
View File
@@ -51,12 +51,14 @@ export const Footer = ({ isNavyBg }: ThemeProps) => {
<img <img
src={isNavyBg ? "/icons/Logo_blanco.svg" : "/icons/Logo_negro.svg"} src={isNavyBg ? "/icons/Logo_blanco.svg" : "/icons/Logo_negro.svg"}
alt="Logo" alt="Logo"
loading="lazy"
decoding="async"
className="h-12 w-12 shrink-0 object-contain" className="h-12 w-12 shrink-0 object-contain"
/> />
<div className="flex flex-col leading-none"> <div className="flex flex-col leading-none">
<span <span
style={{ style={{
fontFamily: "'Quicksand', sans-serif", fontFamily: 'var(--font-sans-public), sans-serif',
fontWeight: 700, fontWeight: 700,
fontSize: 21, fontSize: 21,
letterSpacing: "-0.01em", letterSpacing: "-0.01em",
@@ -67,7 +69,7 @@ export const Footer = ({ isNavyBg }: ThemeProps) => {
</span> </span>
<span <span
style={{ style={{
fontFamily: "'Quicksand', sans-serif", fontFamily: 'var(--font-sans-public), sans-serif',
fontWeight: 500, fontWeight: 500,
fontSize: 13, fontSize: 13,
letterSpacing: "0.04em", letterSpacing: "0.04em",
+2 -2
View File
@@ -66,12 +66,12 @@ export const Navbar = () => {
<img src="/icons/Logo_blanco.svg" alt="Logo" className="hidden h-8 w-8 shrink-0 object-contain dark:block" /> <img src="/icons/Logo_blanco.svg" alt="Logo" className="hidden h-8 w-8 shrink-0 object-contain dark:block" />
<span className="flex flex-col leading-none"> <span className="flex flex-col leading-none">
<span <span
style={{ fontFamily: "'Quicksand', sans-serif", fontWeight: 700, fontSize: 16, letterSpacing: '-0.01em', color: 'var(--foreground)' }} style={{ fontFamily: 'var(--font-sans-public), sans-serif', fontWeight: 700, fontSize: 16, letterSpacing: '-0.01em', color: 'var(--foreground)' }}
> >
Rynext Rynext
</span> </span>
<span <span
style={{ fontFamily: "'Quicksand', sans-serif", fontWeight: 500, fontSize: 10, letterSpacing: '0.04em', color: 'var(--muted-foreground)' }} style={{ fontFamily: 'var(--font-sans-public), sans-serif', fontWeight: 500, fontSize: 10, letterSpacing: '0.04em', color: 'var(--muted-foreground)' }}
> >
Technologies Technologies
</span> </span>
@@ -44,6 +44,9 @@ export default function BrandSlider() {
<img <img
src={assetUrl(brand.logoUrl)} src={assetUrl(brand.logoUrl)}
alt={brand.name} alt={brand.name}
loading="lazy"
decoding="async"
height={150}
className="h-[150px] w-auto max-w-[150px] object-contain" className="h-[150px] w-auto max-w-[150px] object-contain"
onError={(e) => { onError={(e) => {
(e.currentTarget.closest("[title]") as HTMLElement | null)?.style.setProperty("display", "none") (e.currentTarget.closest("[title]") as HTMLElement | null)?.style.setProperty("display", "none")
@@ -53,6 +53,9 @@ function ClientsInner({ isNavyBg }: ThemeProps) {
<img <img
src={assetUrl(c.logoUrl)} src={assetUrl(c.logoUrl)}
alt={c.name} alt={c.name}
loading="lazy"
decoding="async"
height={150}
style={{ style={{
height: 150, height: 150,
width: "auto", width: "auto",
@@ -44,6 +44,9 @@ export const Partners = ({ isNavyBg }: ThemeProps) => {
<img <img
src={assetUrl(p.logoUrl)} src={assetUrl(p.logoUrl)}
alt={p.name} alt={p.name}
loading="lazy"
decoding="async"
height={150}
className="h-[150px] w-auto max-w-[150px] object-contain" className="h-[150px] w-auto max-w-[150px] object-contain"
onError={(e) => { onError={(e) => {
(e.currentTarget as HTMLImageElement).style.display = "none"; (e.currentTarget as HTMLImageElement).style.display = "none";
@@ -106,6 +106,8 @@ function PortfolioInner({ isNavyBg }: ThemeProps) {
<img <img
src={assetUrl(cover.url)} src={assetUrl(cover.url)}
alt={p.title} alt={p.title}
loading="lazy"
decoding="async"
style={{ style={{
width: "100%", width: "100%",
height: "100%", height: "100%",
@@ -93,6 +93,8 @@ function PortafolioContent() {
<img <img
src={assetUrl(cover.url)} src={assetUrl(cover.url)}
alt={p.title} alt={p.title}
loading="lazy"
decoding="async"
style={{ style={{
width: "100%", width: "100%",
height: "100%", height: "100%",
@@ -161,7 +161,7 @@ export default function CaseStudyPage() {
transition={{ duration: 0.4 }} transition={{ duration: 0.4 }}
style={{ overflow: "hidden", borderRadius: 4, aspectRatio: "16/7", marginTop: -1 }} style={{ overflow: "hidden", borderRadius: 4, aspectRatio: "16/7", marginTop: -1 }}
> >
<img src={activeUrl} alt={project.title} style={{ width: "100%", height: "100%", objectFit: "cover" }} /> <img src={activeUrl} alt={project.title} fetchPriority="high" decoding="async" style={{ width: "100%", height: "100%", objectFit: "cover" }} />
</motion.div> </motion.div>
{gallery.length > 1 && ( {gallery.length > 1 && (
<div style={{ display: "flex", gap: 10, padding: "16px 0 24px" }}> <div style={{ display: "flex", gap: 10, padding: "16px 0 24px" }}>
@@ -175,7 +175,7 @@ export default function CaseStudyPage() {
opacity: i === activeImage ? 1 : 0.6, opacity: i === activeImage ? 1 : 0.6,
}} }}
> >
<img src={assetUrl(img.url)} alt="" style={{ width: "100%", height: "100%", objectFit: "cover", display: "block" }} /> <img src={assetUrl(img.url)} alt="" loading="lazy" decoding="async" style={{ width: "100%", height: "100%", objectFit: "cover", display: "block" }} />
</button> </button>
))} ))}
</div> </div>
@@ -145,6 +145,7 @@ function SobreNosotrosContent() {
<img <img
src={TEAM_IMAGE} src={TEAM_IMAGE}
alt="Equipo Rynext Technologies" alt="Equipo Rynext Technologies"
decoding="async"
style={{ style={{
width: "100%", width: "100%",
aspectRatio: "4/3", aspectRatio: "4/3",
+2 -2
View File
@@ -476,7 +476,7 @@ export default function Sidebar({
> >
<span <span
style={{ style={{
fontFamily: "'Quicksand',sans-serif", fontFamily: 'var(--font-quicksand), sans-serif',
fontWeight: 700, fontWeight: 700,
fontSize: 19, fontSize: 19,
letterSpacing: "-0.01em", letterSpacing: "-0.01em",
@@ -487,7 +487,7 @@ export default function Sidebar({
</span> </span>
<span <span
style={{ style={{
fontFamily: "'Quicksand',sans-serif", fontFamily: 'var(--font-quicksand), sans-serif',
fontWeight: 500, fontWeight: 500,
fontSize: 12, fontSize: 12,
letterSpacing: "0.04em", letterSpacing: "0.04em",
+2 -2
View File
@@ -128,7 +128,7 @@ export default function Login() {
<div className="flex flex-col leading-none"> <div className="flex flex-col leading-none">
<span <span
style={{ style={{
fontFamily: "'Quicksand', sans-serif", fontFamily: 'var(--font-quicksand), sans-serif',
fontWeight: 700, fontWeight: 700,
fontSize: 17, fontSize: 17,
letterSpacing: "-0.01em", letterSpacing: "-0.01em",
@@ -139,7 +139,7 @@ export default function Login() {
</span> </span>
<span <span
style={{ style={{
fontFamily: "'Quicksand', sans-serif", fontFamily: 'var(--font-quicksand), sans-serif',
fontWeight: 500, fontWeight: 500,
fontSize: 11, fontSize: 11,
letterSpacing: "0.04em", letterSpacing: "0.04em",
+24 -3
View File
@@ -1,4 +1,3 @@
@import url('https://fonts.googleapis.com/css2?family=Quicksand:wght@300;400;500;600;700&display=swap');
@import "tailwindcss"; @import "tailwindcss";
@custom-variant dark (&:where(.dark, .dark *)); @custom-variant dark (&:where(.dark, .dark *));
@@ -16,8 +15,8 @@
--color-dark-surface: #0f1520; --color-dark-surface: #0f1520;
--color-dark-border: #1c2535; --color-dark-border: #1c2535;
--font-sans: 'Quicksand', system-ui, sans-serif; --font-sans: var(--font-sans-public), system-ui, sans-serif;
--font-display: 'Quicksand', system-ui, sans-serif; --font-display: var(--font-sans-public), system-ui, sans-serif;
--font-mono: 'SF Mono', 'Cascadia Code', 'Fira Code', Consolas, monospace; --font-mono: 'SF Mono', 'Cascadia Code', 'Fira Code', Consolas, monospace;
/* shadcn/ui tokens */ /* shadcn/ui tokens */
@@ -273,6 +272,28 @@
animation-delay: 0.3s; animation-delay: 0.3s;
} }
/* En móvil, blur(110px) animado para siempre es caro de recomponer en cada
frame (GPUs de gama media/baja) y compite por recursos con el scroll. Los
dejamos estáticos (sin animation) y con un blur más chico — la pieza
visual se mantiene, pero deja de costar algo en cada frame. */
@media (max-width: 767px) {
.animate-hero-blob-a,
.animate-hero-blob-b {
animation: none;
opacity: 0.7;
}
}
/* blur(110px) es caro de recomponer en cada scroll/repintado en GPUs
móviles de gama media/baja. Hay ~8 blobs decorativos repartidos por el
sitio con este mismo blur — en vez de tocar cada sección, se achica acá
para todos a la vez en pantallas chicas. */
@media (max-width: 767px) {
.blur-\[110px\] {
filter: blur(60px);
}
}
/* Reduced motion */ /* Reduced motion */
@media (prefers-reduced-motion: reduce) { @media (prefers-reduced-motion: reduce) {
*, *::before, *::after { *, *::before, *::after {
+13 -1
View File
@@ -1,6 +1,18 @@
import type { Metadata, Viewport } from 'next'; import type { Metadata, Viewport } from 'next';
import { Quicksand } from 'next/font/google';
import './globals.css'; import './globals.css';
// next/font/google auto-hospeda la fuente y la incrusta en el build, sin el
// round-trip extra a fonts.googleapis.com que tenía el @import de globals.css
// (ese @import era bloqueante: retrasaba el primer pintado de texto en todo
// el sitio, sobre todo en móvil con latencia alta).
const quicksand = Quicksand({
subsets: ['latin'],
weight: ['300', '400', '500', '600', '700'],
variable: '--font-sans-public',
display: 'swap',
});
export const metadata: Metadata = { export const metadata: Metadata = {
metadataBase: new URL('https://rynext.com.mx'), metadataBase: new URL('https://rynext.com.mx'),
title: 'Rynext Technologies | Software Empresarial 100% Mexicano', title: 'Rynext Technologies | Software Empresarial 100% Mexicano',
@@ -35,7 +47,7 @@ export const viewport: Viewport = {
export default function RootLayout({ children }: { children: React.ReactNode }) { export default function RootLayout({ children }: { children: React.ReactNode }) {
return ( return (
<html lang="es"> <html lang="es" className={quicksand.variable}>
<body> <body>
{children} {children}
</body> </body>