correccion
This commit is contained in:
1 parent
f87cdf5f59
commit
9a8614c871
15 files changed
+67
-14
No files matched your search
@@ -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>
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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>
|
||||||
|
|||||||
Reference in new issue
Block a user