refactor: remove blur effects from AuroraBackground and various components for improved performance and visual clarity
This commit is contained in:
parent
9051d4887c
commit
a440debaff
|
|
@ -5,15 +5,8 @@ import {
|
||||||
getUpcomingMovies,
|
getUpcomingMovies,
|
||||||
} from "@/lib/tmdb/server";
|
} from "@/lib/tmdb/server";
|
||||||
import { Hero } from "@/components/organisms/Hero";
|
import { Hero } from "@/components/organisms/Hero";
|
||||||
import { Carousel } from "@/components/molecules/Carousel";
|
import { FaCalendar, FaChartLine, FaFire, FaPlay } from "react-icons/fa";
|
||||||
import { MovieCard } from "@/components/atoms/MovieCard";
|
import { MovieList } from "@/components/molecules/MovieList";
|
||||||
import {
|
|
||||||
FaCalendar,
|
|
||||||
FaChartLine,
|
|
||||||
FaFire,
|
|
||||||
FaPlay,
|
|
||||||
FaStar,
|
|
||||||
} from "react-icons/fa";
|
|
||||||
|
|
||||||
// 12 hours
|
// 12 hours
|
||||||
export const revalidate = 43200;
|
export const revalidate = 43200;
|
||||||
|
|
@ -48,39 +41,43 @@ export default async function Home() {
|
||||||
<Hero movies={heroMovies} autoRotate />
|
<Hero movies={heroMovies} autoRotate />
|
||||||
|
|
||||||
<section className="blocks">
|
<section className="blocks">
|
||||||
<Carousel heading="Teraz w kinach" icon={<FaPlay />}>
|
<MovieList
|
||||||
{nowPlayingMovies.map((movie) => (
|
overrideMovies={nowPlayingMovies}
|
||||||
<MovieCard key={movie.id} {...movie} simpleToggle layout="aurora" />
|
heading="Teraz w kinach"
|
||||||
))}
|
loadMore
|
||||||
</Carousel>
|
icon={<FaPlay />}
|
||||||
|
colors="blue"
|
||||||
|
/>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section className="blocks">
|
<section className="blocks">
|
||||||
<Carousel
|
<MovieList
|
||||||
|
overrideMovies={upcomingMovies}
|
||||||
heading="Nadchodzące filmy"
|
heading="Nadchodzące filmy"
|
||||||
|
loadMore
|
||||||
icon={<FaCalendar />}
|
icon={<FaCalendar />}
|
||||||
colors="blue"
|
colors="blue"
|
||||||
>
|
/>
|
||||||
{upcomingMovies.map((movie) => (
|
|
||||||
<MovieCard key={movie.id} {...movie} simpleToggle layout="aurora" />
|
|
||||||
))}
|
|
||||||
</Carousel>
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section className="blocks">
|
<section className="blocks">
|
||||||
<Carousel heading="Popularne filmy" icon={<FaFire />} colors="red">
|
<MovieList
|
||||||
{popularMovies.map((movie) => (
|
overrideMovies={popularMovies}
|
||||||
<MovieCard key={movie.id} {...movie} simpleToggle layout="aurora" />
|
heading="Popularne filmy"
|
||||||
))}
|
loadMore
|
||||||
</Carousel>
|
icon={<FaFire />}
|
||||||
|
colors="red"
|
||||||
|
/>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section className="blocks">
|
<section className="blocks">
|
||||||
<Carousel heading="Trendy dnia" icon={<FaChartLine />} colors="green">
|
<MovieList
|
||||||
{trendingMovies.map((movie) => (
|
overrideMovies={trendingMovies}
|
||||||
<MovieCard key={movie.id} {...movie} simpleToggle layout="aurora" />
|
heading="Trendy dnia"
|
||||||
))}
|
loadMore
|
||||||
</Carousel>
|
icon={<FaChartLine />}
|
||||||
|
colors="green"
|
||||||
|
/>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<div className="p-2 text-center text-xs text-gray-500">
|
<div className="p-2 text-center text-xs text-gray-500">
|
||||||
|
|
|
||||||
|
|
@ -49,23 +49,13 @@ export const AuroraLayout: FC<AuroraLayoutProps> = ({
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<article className="group relative w-full overflow-hidden rounded-2xl max-w-[300px] mx-auto">
|
<article className="group relative w-full overflow-hidden rounded-2xl max-w-[300px] mx-auto">
|
||||||
{/* Aurora background effect */}
|
|
||||||
<div className="absolute inset-0 bg-gradient-to-br from-purple-900/20 via-blue-900/20 to-teal-900/20 opacity-60"></div>
|
|
||||||
<div className="absolute inset-0 bg-gradient-to-tr from-pink-500/10 via-transparent to-cyan-500/10 opacity-0 group-hover:opacity-100 transition-opacity duration-1000"></div>
|
|
||||||
|
|
||||||
{/* Main card container */}
|
{/* Main card container */}
|
||||||
<div className="grid relative h-full bg-gradient-to-br from-slate-800/95 via-slate-850/97 to-slate-900/95 border border-slate-700/50 shadow-2xl shadow-purple-500/10 group-hover:shadow-purple-500/20 transition-all duration-500">
|
<div className="grid relative h-full bg-gradient-to-br from-slate-800/95 via-slate-850/97 to-slate-900/95 border border-slate-700/50 shadow-2xl shadow-purple-500/10 group-hover:shadow-purple-500/20 transition-all duration-500">
|
||||||
<div className="absolute inset-0 bg-gradient-to-br from-purple-500/5 via-transparent to-cyan-500/5 opacity-80"></div>
|
|
||||||
{/* Image section with sophisticated overlay */}
|
{/* Image section with sophisticated overlay */}
|
||||||
<figure
|
<figure className="relative overflow-hidden aspect-[4/3] lg:aspect-[342/513]">
|
||||||
className="relative overflow-hidden"
|
|
||||||
style={{
|
|
||||||
aspectRatio: "342/513",
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<Link href={`/film/${id}`}>
|
<Link href={`/film/${id}`}>
|
||||||
<img
|
<img
|
||||||
className="w-full h-full object-cover transition-all duration-700 group-hover:scale-110 group-hover:brightness-110 bg-gradient-to-b from-purple-600/50 to-emerald-600"
|
className="w-full h-full object-cover transition-all duration-700 hover:scale-110 hover:brightness-110 bg-gradient-to-b from-purple-600/50 to-emerald-600"
|
||||||
src={`http://image.tmdb.org/t/p/w342${poster_path}`}
|
src={`http://image.tmdb.org/t/p/w342${poster_path}`}
|
||||||
alt={title}
|
alt={title}
|
||||||
/>
|
/>
|
||||||
|
|
@ -73,7 +63,6 @@ export const AuroraLayout: FC<AuroraLayoutProps> = ({
|
||||||
|
|
||||||
{/* Gradient overlays for depth */}
|
{/* Gradient overlays for depth */}
|
||||||
<div className="absolute inset-0 bg-gradient-to-t from-slate-900 via-slate-900/20 to-transparent pointer-events-none" />
|
<div className="absolute inset-0 bg-gradient-to-t from-slate-900 via-slate-900/20 to-transparent pointer-events-none" />
|
||||||
<div className="absolute inset-0 bg-gradient-to-r from-purple-600/20 via-transparent to-cyan-600/20 opacity-0 group-hover:opacity-100 transition-opacity duration-700 pointer-events-none" />
|
|
||||||
|
|
||||||
{/* Floating rating badge */}
|
{/* Floating rating badge */}
|
||||||
{!!vote_average && (
|
{!!vote_average && (
|
||||||
|
|
@ -158,15 +147,12 @@ export const AuroraLayout: FC<AuroraLayoutProps> = ({
|
||||||
|
|
||||||
{/* Content section with glowing effects */}
|
{/* Content section with glowing effects */}
|
||||||
<div className="relative p-6 flex flex-col justify-between">
|
<div className="relative p-6 flex flex-col justify-between">
|
||||||
{/* Subtle glow effect */}
|
|
||||||
<div className="absolute inset-0 bg-gradient-to-t from-purple-500/5 to-transparent pointer-events-none"></div>
|
|
||||||
|
|
||||||
<div className="relative z-10">
|
<div className="relative z-10">
|
||||||
<Link href={`/film/${id}`}>
|
<Link href={`/film/${id}`}>
|
||||||
<h3 className="font-bold text-xl leading-tight mb-3 transition-colors duration-500 hover:text-secondary flex items-center gap-2">
|
<h3 className="font-bold text-xl leading-tight mb-3 transition-colors duration-500 hover:text-secondary flex items-center gap-2">
|
||||||
{title}
|
{title}
|
||||||
</h3>
|
</h3>
|
||||||
<p className="text-sm text-gray-400 line-clamp-2 leading-relaxed opacity-80 group-hover:opacity-100 transition-colors duration-300 hover:text-secondary">
|
<p className="text-sm text-gray-400 line-clamp-2 leading-relaxed opacity-80 transition-colors duration-300 hover:text-secondary">
|
||||||
{overview}
|
{overview}
|
||||||
</p>
|
</p>
|
||||||
</Link>
|
</Link>
|
||||||
|
|
|
||||||
|
|
@ -7,19 +7,19 @@ export const AuroraBackground = () => {
|
||||||
{/* Static aurora effects */}
|
{/* Static aurora effects */}
|
||||||
<div className="absolute inset-0 opacity-40">
|
<div className="absolute inset-0 opacity-40">
|
||||||
{/* Top-left aurora glow */}
|
{/* Top-left aurora glow */}
|
||||||
<div className="absolute top-0 left-0 w-96 h-96 bg-gradient-radial from-purple-500/20 via-purple-500/5 to-transparent blur-3xl"></div>
|
<div className="absolute top-0 left-0 w-96 h-96 bg-gradient-radial from-purple-500/20 via-purple-500/5 to-transparent"></div>
|
||||||
|
|
||||||
{/* Top-right aurora glow */}
|
{/* Top-right aurora glow */}
|
||||||
<div className="absolute top-20 right-0 w-80 h-80 bg-gradient-radial from-cyan-500/15 via-cyan-500/3 to-transparent blur-3xl"></div>
|
<div className="absolute top-20 right-0 w-80 h-80 bg-gradient-radial from-cyan-500/15 via-cyan-500/3 to-transparent"></div>
|
||||||
|
|
||||||
{/* Center aurora wave */}
|
{/* Center aurora wave */}
|
||||||
<div className="absolute top-1/3 left-1/3 w-[600px] h-40 bg-gradient-to-r from-transparent via-pink-500/10 to-transparent blur-2xl transform rotate-12"></div>
|
<div className="absolute top-1/3 left-1/3 w-[600px] h-40 bg-gradient-to-r from-transparent via-pink-500/10 to-transparent transform rotate-12"></div>
|
||||||
|
|
||||||
{/* Bottom aurora glow */}
|
{/* Bottom aurora glow */}
|
||||||
<div className="absolute bottom-0 left-1/4 w-96 h-64 bg-gradient-radial from-teal-500/15 via-teal-500/3 to-transparent blur-3xl"></div>
|
<div className="absolute bottom-0 left-1/4 w-96 h-64 bg-gradient-radial from-teal-500/15 via-teal-500/3 to-transparent"></div>
|
||||||
|
|
||||||
{/* Right side accent */}
|
{/* Right side accent */}
|
||||||
<div className="absolute top-1/2 right-20 w-32 h-96 bg-gradient-to-b from-transparent via-purple-400/8 to-transparent blur-2xl transform -rotate-12"></div>
|
<div className="absolute top-1/2 right-20 w-32 h-96 bg-gradient-to-b from-transparent via-purple-400/8 to-transparent transform -rotate-12"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Gradient mesh overlay for content readability */}
|
{/* Gradient mesh overlay for content readability */}
|
||||||
|
|
|
||||||
|
|
@ -87,12 +87,12 @@ export const HeroMovie: FC<Props> = ({ movieDetails }) => {
|
||||||
<div className="container">
|
<div className="container">
|
||||||
<div className="flex flex-col lg:flex-row gap-8">
|
<div className="flex flex-col lg:flex-row gap-8">
|
||||||
{/* Movie poster */}
|
{/* Movie poster */}
|
||||||
<div className="flex-shrink-0">
|
<div className="flex-shrink-0 text-center">
|
||||||
<div className="relative group">
|
<div className="relative group inline-block">
|
||||||
<img
|
<img
|
||||||
src={`https://image.tmdb.org/t/p/w500${movieDetails.poster_path}`}
|
src={`https://image.tmdb.org/t/p/w500${movieDetails.poster_path}`}
|
||||||
alt={movieDetails.title}
|
alt={movieDetails.title}
|
||||||
className="w-80 h-auto rounded-2xl shadow-2xl shadow-purple-500/20 group-hover:shadow-purple-500/40 transition-all duration-500"
|
className="w-80 h-auto rounded-2xl shadow-2xl shadow-purple-500/20"
|
||||||
/>
|
/>
|
||||||
<div className="absolute inset-0 rounded-2xl bg-gradient-to-t from-purple-600/20 to-transparent opacity-100" />
|
<div className="absolute inset-0 rounded-2xl bg-gradient-to-t from-purple-600/20 to-transparent opacity-100" />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ export const MovieCast: FC<Props> = ({ movieDetails }) => {
|
||||||
|
|
||||||
{/* Hover overlay with link indication */}
|
{/* Hover overlay with link indication */}
|
||||||
<div className="absolute inset-0 bg-purple-600/20 opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex items-center justify-center">
|
<div className="absolute inset-0 bg-purple-600/20 opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex items-center justify-center">
|
||||||
<div className="bg-white/20 backdrop-blur-sm px-3 py-1 rounded-full text-white text-sm font-medium">
|
<div className="bg-white/20 px-3 py-1 rounded-full text-white text-sm font-medium">
|
||||||
Zobacz profil
|
Zobacz profil
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,17 @@
|
||||||
"use client";
|
"use client";
|
||||||
import { FC, useState } from "react";
|
import { FC, ReactNode, useState } from "react";
|
||||||
import { MovieCard } from "@/components/atoms/MovieCard";
|
import { MovieCard } from "@/components/atoms/MovieCard";
|
||||||
import { Movie } from "@/types/global";
|
import { Movie } from "@/types/global";
|
||||||
import { useGlobalStore } from "@/app/store/globalStore";
|
import { useGlobalStore } from "@/app/store/globalStore";
|
||||||
import { Dropdown } from "@/components/atoms/Dropdown";
|
import { Dropdown } from "@/components/atoms/Dropdown";
|
||||||
import { useAutoAnimate } from "@formkit/auto-animate/react";
|
import { useAutoAnimate } from "@formkit/auto-animate/react";
|
||||||
|
import { Button } from "@/components/atoms/Button";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
heading?: string;
|
heading?: string;
|
||||||
|
icon?: ReactNode;
|
||||||
|
colors?: keyof typeof colorsMap;
|
||||||
|
|
||||||
overrideMovies?: Movie[];
|
overrideMovies?: Movie[];
|
||||||
|
|
||||||
filterSeen?: 0 | 1;
|
filterSeen?: 0 | 1;
|
||||||
|
|
@ -19,10 +23,14 @@ type Props = {
|
||||||
showFilters?: boolean;
|
showFilters?: boolean;
|
||||||
sort?: "title" | "releaseDate" | "popularity";
|
sort?: "title" | "releaseDate" | "popularity";
|
||||||
sortDirection?: "asc" | "desc";
|
sortDirection?: "asc" | "desc";
|
||||||
|
|
||||||
|
loadMore?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const MovieList: FC<Props> = ({
|
export const MovieList: FC<Props> = ({
|
||||||
heading,
|
heading,
|
||||||
|
icon,
|
||||||
|
colors = "white",
|
||||||
overrideMovies,
|
overrideMovies,
|
||||||
filterSeen,
|
filterSeen,
|
||||||
filterFavorites,
|
filterFavorites,
|
||||||
|
|
@ -32,15 +40,17 @@ export const MovieList: FC<Props> = ({
|
||||||
showFilters = true,
|
showFilters = true,
|
||||||
sort = "releaseDate",
|
sort = "releaseDate",
|
||||||
sortDirection = "asc",
|
sortDirection = "asc",
|
||||||
|
loadMore = false,
|
||||||
}) => {
|
}) => {
|
||||||
const { movies: storeMovies } = useGlobalStore();
|
const { movies: storeMovies } = useGlobalStore();
|
||||||
|
const movies = overrideMovies || storeMovies;
|
||||||
|
|
||||||
const [filter, setFilter] = useState<"title" | "releaseDate" | "popularity">(
|
const [filter, setFilter] = useState<"title" | "releaseDate" | "popularity">(
|
||||||
sort
|
sort
|
||||||
);
|
);
|
||||||
|
const [loaded, setLoaded] = useState(loadMore ? 4 : movies.length);
|
||||||
const [parent] = useAutoAnimate();
|
const [parent] = useAutoAnimate();
|
||||||
|
|
||||||
const movies = overrideMovies || storeMovies;
|
|
||||||
|
|
||||||
const filteredMovies = movies.filter((movie) => {
|
const filteredMovies = movies.filter((movie) => {
|
||||||
let result = true;
|
let result = true;
|
||||||
const today = new Date();
|
const today = new Date();
|
||||||
|
|
@ -73,6 +83,8 @@ export const MovieList: FC<Props> = ({
|
||||||
return 0;
|
return 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
sortedMovies = sortedMovies.slice(0, loaded);
|
||||||
|
|
||||||
if (sortDirection === "desc") {
|
if (sortDirection === "desc") {
|
||||||
sortedMovies = sortedMovies.reverse();
|
sortedMovies = sortedMovies.reverse();
|
||||||
}
|
}
|
||||||
|
|
@ -81,21 +93,30 @@ export const MovieList: FC<Props> = ({
|
||||||
<section className="blocks">
|
<section className="blocks">
|
||||||
<div className={`${fluid ? "max-w-full px-4" : "container"}`}>
|
<div className={`${fluid ? "max-w-full px-4" : "container"}`}>
|
||||||
{heading && (
|
{heading && (
|
||||||
<div className="row">
|
<div className="flex items-center gap-3">
|
||||||
<div className="col-12 md:col-10 flex gap-2 items-center">
|
{icon && (
|
||||||
{showFilters && (
|
<div
|
||||||
<Dropdown
|
className={`hidden sm:block p-2 rounded-lg ${colorsMap[colors]}`}
|
||||||
items={[
|
>
|
||||||
{ label: "Tytuł", value: "title" },
|
{icon}
|
||||||
{ label: "Data premiery", value: "releaseDate" },
|
</div>
|
||||||
{ label: "Popularność", value: "popularity" },
|
)}
|
||||||
]}
|
{showFilters && !icon && (
|
||||||
defaultValue={filter}
|
<Dropdown
|
||||||
callback={(value) => setFilter(value as "title")}
|
items={[
|
||||||
/>
|
{ label: "Tytuł", value: "title" },
|
||||||
)}
|
{ label: "Data premiery", value: "releaseDate" },
|
||||||
<h2 className="text-2xl font-bold">{heading}</h2>
|
{ label: "Popularność", value: "popularity" },
|
||||||
</div>
|
]}
|
||||||
|
defaultValue={filter}
|
||||||
|
callback={(value) => setFilter(value as "title")}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
<h2
|
||||||
|
className={`text-3xl font-bold ${colorsMap[colors]} bg-clip-text text-transparent text-center sm:text-left`}
|
||||||
|
>
|
||||||
|
{heading}
|
||||||
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{filteredMovies.length === 0 && (
|
{filteredMovies.length === 0 && (
|
||||||
|
|
@ -111,7 +132,27 @@ export const MovieList: FC<Props> = ({
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
{loadMore && filteredMovies.length > loaded && (
|
||||||
|
<div className="flex justify-center mt-10">
|
||||||
|
<Button theme="teal" onClick={() => setLoaded(movies.length)}>
|
||||||
|
Pokaż więcej
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const colorsMap = {
|
||||||
|
white: "bg-gradient-to-r from-white to-gray-300",
|
||||||
|
yellow: "bg-gradient-to-r from-yellow-400 to-orange-400",
|
||||||
|
blue: "bg-gradient-to-r from-blue-400 to-purple-400",
|
||||||
|
green: "bg-gradient-to-r from-green-400 to-teal-400",
|
||||||
|
red: "bg-gradient-to-r from-red-400 to-pink-400",
|
||||||
|
purple: "bg-gradient-to-r from-purple-400 to-pink-400",
|
||||||
|
orange: "bg-gradient-to-r from-orange-400 to-yellow-400",
|
||||||
|
pink: "bg-gradient-to-r from-pink-400 to-purple-400",
|
||||||
|
teal: "bg-gradient-to-r from-teal-400 to-green-400",
|
||||||
|
gray: "bg-gradient-to-r from-gray-400 to-gray-400",
|
||||||
|
};
|
||||||
|
|
|
||||||
|
|
@ -60,9 +60,7 @@ export const Search = () => {
|
||||||
{isSearchOpen && (
|
{isSearchOpen && (
|
||||||
<div className="fixed inset-0 z-[60] overflow-y-auto">
|
<div className="fixed inset-0 z-[60] overflow-y-auto">
|
||||||
{/* Aurora Background */}
|
{/* Aurora Background */}
|
||||||
<div className="fixed inset-0 bg-gradient-to-br from-purple-900/98 via-blue-900/98 to-teal-900/98"></div>
|
<div className="fixed inset-0 bg-gradient-to-tr from-purple-900/98 via-blue-900/98 to-teal-900/98 brightness-75"></div>
|
||||||
<div className="fixed inset-0 bg-gradient-to-tr from-slate-900/95 via-slate-800/90 to-slate-900/95"></div>
|
|
||||||
<div className="fixed inset-0 bg-gradient-to-tr from-pink-500/20 via-transparent to-cyan-500/20 animate-pulse"></div>
|
|
||||||
|
|
||||||
{/* Close button */}
|
{/* Close button */}
|
||||||
<Button
|
<Button
|
||||||
|
|
@ -87,7 +85,7 @@ export const Search = () => {
|
||||||
|
|
||||||
{/* Enhanced Search Input */}
|
{/* Enhanced Search Input */}
|
||||||
<div className="relative max-w-2xl mx-auto">
|
<div className="relative max-w-2xl mx-auto">
|
||||||
<div className="absolute inset-0 bg-gradient-to-r from-purple-500/30 to-cyan-500/30 rounded-2xl blur-xl"></div>
|
<div className="absolute inset-0 bg-gradient-to-r from-purple-500/30 to-cyan-500/30 rounded-2xl"></div>
|
||||||
<div className="relative bg-gradient-to-br from-white/15 via-white/8 to-white/12 border border-white/20 rounded-2xl p-2 shadow-2xl shadow-purple-500/10">
|
<div className="relative bg-gradient-to-br from-white/15 via-white/8 to-white/12 border border-white/20 rounded-2xl p-2 shadow-2xl shadow-purple-500/10">
|
||||||
<SearchInput
|
<SearchInput
|
||||||
className="w-full px-3 bg-transparent border-none text-lg lg:text-xl placeholder-gray-400 text-white focus:outline-none"
|
className="w-full px-3 bg-transparent border-none text-lg lg:text-xl placeholder-gray-400 text-white focus:outline-none"
|
||||||
|
|
@ -104,7 +102,7 @@ export const Search = () => {
|
||||||
<div className="text-center py-20">
|
<div className="text-center py-20">
|
||||||
<div className="relative inline-block">
|
<div className="relative inline-block">
|
||||||
<Spinner />
|
<Spinner />
|
||||||
<div className="absolute inset-0 bg-gradient-to-r from-purple-400 to-cyan-400 rounded-full opacity-30 blur-lg animate-pulse"></div>
|
<div className="absolute inset-0 bg-gradient-to-r from-purple-400 to-cyan-400 rounded-full opacity-30 animate-pulse"></div>
|
||||||
</div>
|
</div>
|
||||||
<p className="text-gray-300 mt-4 text-lg">Szukam filmów...</p>
|
<p className="text-gray-300 mt-4 text-lg">Szukam filmów...</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -37,8 +37,6 @@ export const Navbar = () => {
|
||||||
<header className="sticky top-0 w-full z-50 transition-all duration-300">
|
<header className="sticky top-0 w-full z-50 transition-all duration-300">
|
||||||
{/* Aurora background effect */}
|
{/* Aurora background effect */}
|
||||||
<div className="absolute inset-0 bg-gradient-to-r from-slate-900/95 via-slate-800/98 to-slate-900/95"></div>
|
<div className="absolute inset-0 bg-gradient-to-r from-slate-900/95 via-slate-800/98 to-slate-900/95"></div>
|
||||||
<div className="absolute inset-0 bg-gradient-to-r from-purple-600/15 via-blue-600/10 to-teal-600/15"></div>
|
|
||||||
<div className="absolute inset-0 bg-gradient-to-r from-purple-500/10 via-transparent to-cyan-500/10"></div>
|
|
||||||
|
|
||||||
{/* Border glow */}
|
{/* Border glow */}
|
||||||
<div className="absolute bottom-0 left-0 right-0 h-px bg-gradient-to-r from-transparent via-purple-400/50 to-transparent"></div>
|
<div className="absolute bottom-0 left-0 right-0 h-px bg-gradient-to-r from-transparent via-purple-400/50 to-transparent"></div>
|
||||||
|
|
@ -57,7 +55,7 @@ export const Navbar = () => {
|
||||||
alt="MovieBox"
|
alt="MovieBox"
|
||||||
className="w-10 h-10 lg:w-12 lg:h-12 transition-all duration-300 group-hover:brightness-110"
|
className="w-10 h-10 lg:w-12 lg:h-12 transition-all duration-300 group-hover:brightness-110"
|
||||||
/>
|
/>
|
||||||
<div className="absolute inset-0 bg-gradient-to-r from-purple-400 to-cyan-400 rounded-full opacity-0 group-hover:opacity-20 transition-opacity duration-300 blur-md"></div>
|
<div className="absolute inset-0 bg-gradient-to-r from-purple-400 to-cyan-400 rounded-full opacity-0 group-hover:opacity-20 transition-opacity duration-300"></div>
|
||||||
</div>
|
</div>
|
||||||
<div className="hidden sm:block">
|
<div className="hidden sm:block">
|
||||||
<h1 className="text-xl lg:text-2xl font-bold text-transparent bg-clip-text bg-gradient-to-r from-white to-gray-300 group-hover:from-purple-200 group-hover:to-cyan-200 transition-all duration-300">
|
<h1 className="text-xl lg:text-2xl font-bold text-transparent bg-clip-text bg-gradient-to-r from-white to-gray-300 group-hover:from-purple-200 group-hover:to-cyan-200 transition-all duration-300">
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue