Tons of fixes to every page

This commit is contained in:
2026-05-02 20:18:48 +03:00
parent e2c3ec5b8a
commit 0368d64bcc
15 changed files with 490 additions and 286 deletions

View File

@@ -28,9 +28,11 @@ export default async function LocaleLayout({
enableSystem
disableTransitionOnChange
>
<SidebarParent />
{children}
<Footer />
<div className="min-h-screen flex flex-col">
<SidebarParent />
<main className="flex-1 flex flex-col">{children}</main>
<Footer />
</div>
</ThemeProvider>
</NextIntlClientProvider>
</div>

View File

@@ -17,12 +17,12 @@ export default async function Home({
return (
<div>
{/* Hero */}
<div className="mt-18">
<div className="mt-16">
<HeroSection />
</div>
{/* Nav cards: Piletid + Turniirid */}
<div className="grid grid-cols-1 md:grid-cols-2 md:h-[260px] border-b-3 border-[#1F5673]">
<div className="grid grid-cols-1 md:grid-cols-2 md:h-65 border-b-3 border-[#1F5673]">
<Link
href="/piletid"
className="px-8 md:px-12 py-8 flex flex-col justify-center gap-4 border-b-3 md:border-b-0 md:border-r-3 group border-[#1F5673] hover:bg-[#007CAB] dark:hover:bg-[#00A3E0] transition"
@@ -71,7 +71,6 @@ export default async function Home({
{/* Sponsors */}
<Sponsors />
</div>
);
}

View File

@@ -12,6 +12,7 @@ interface TicketCardProps {
buttonHref: string;
backgroundImage?: string;
backgroundOpacity?: number;
className?: string;
}
function TicketCard({
@@ -23,9 +24,12 @@ function TicketCard({
buttonHref,
backgroundImage,
backgroundOpacity = 40,
className = "",
}: TicketCardProps) {
return (
<div className="relative bg-[#0E0F19] border-r border-[#1F5673] p-8 flex flex-col min-h-[350px]">
<div
className={`relative bg-[#0E0F19] border-[#1F5673] p-8 flex flex-col min-h-87.5 h-full ${className}`}
>
{backgroundImage && (
<Image
src={backgroundImage}
@@ -51,13 +55,13 @@ function TicketCard({
>
{price}
</p>
<ul className="flex flex-col gap-1 mb-6 flex-grow">
<ul className="flex flex-col gap-1 mb-6 grow">
{features.map((feature, index) => (
<li
key={index}
className="flex items-start gap-2 text-[#EEE5E5] text-sm"
className="flex items-start gap-2 text-[#EEE5E5] text-base"
>
<span className="w-1 h-full min-h-[1.25rem] bg-[#00A3E0] flex-shrink-0" />
<span className="w-1 h-full min-h-5 bg-[#00A3E0] shrink-0" />
<span>{feature}</span>
</li>
))}
@@ -84,53 +88,59 @@ export default async function Tickets({
const t = await getTranslations({ locale });
return (
<div className="bg-[#0E0F19]">
<div className="bg-[#0E0F19] min-h-0 flex flex-col flex-1">
{/* 2x2 Grid */}
<div className="grid grid-cols-1 md:grid-cols-2 pt-16 md:pt-20">
{/* KÜLASTAJA PILET */}
<TicketCard
title={t("tickets.visitor.name")}
subtitle={t("tickets.subtitle")}
price={t("tickets.visitor.price")}
features={t.raw("tickets.visitor.features")}
buttonText={t("tickets.buyButton")}
buttonHref="https://fienta.com/et/tipilan"
backgroundImage="/images/landing/visitor_tournament.jpg"
/>
<div className="grid grid-cols-1 md:grid-cols-2 md:grid-rows-2 auto-rows-fr pt-14 flex-1 min-h-0">
{/* KÜLASTAJA PILET */}
<TicketCard
title={t("tickets.visitor.name")}
subtitle={t("tickets.subtitle")}
price={t("tickets.visitor.price")}
features={t.raw("tickets.visitor.features")}
buttonText={t("tickets.buyButton")}
buttonHref="https://fienta.com/et/tipilan"
backgroundImage="/images/landing/visitor_tournament.jpg"
backgroundOpacity={30}
className="border-b-[3px] md:border-b-[3px] md:border-r-[3px]"
/>
{/* TOETAJA PILET */}
<TicketCard
title={t("tickets.supporter.name")}
subtitle={t("tickets.subtitle")}
price={t("tickets.supporter.price")}
features={t.raw("tickets.supporter.features")}
buttonText={t("tickets.buyButton")}
buttonHref="https://fienta.com/et/tipilan"
backgroundImage="/images/landing/explore_teaser.png"
/>
{/* TOETAJA PILET */}
<TicketCard
title={t("tickets.supporter.name")}
subtitle={t("tickets.subtitle")}
price={t("tickets.supporter.price")}
features={t.raw("tickets.supporter.features")}
buttonText={t("tickets.buyButton")}
buttonHref="https://fienta.com/et/tipilan"
backgroundImage="/images/landing/explore_teaser.png"
backgroundOpacity={80}
className="border-b-[3px]"
/>
{/* LOL TURNIIRI PILET */}
<TicketCard
title={t("tickets.lol.name")}
subtitle={t("tickets.subtitle")}
price={t("tickets.lol.price")}
features={t.raw("tickets.lol.features")}
buttonText={t("tickets.buyButton")}
buttonHref="https://fienta.com/et/tipilan"
backgroundImage="/images/landing/league_ticket.jpg"
/>
{/* LOL TURNIIRI PILET */}
<TicketCard
title={t("tickets.lol.name")}
subtitle={t("tickets.subtitle")}
price={t("tickets.lol.price")}
features={t.raw("tickets.lol.features")}
buttonText={t("tickets.buyButton")}
buttonHref="https://fienta.com/et/tipilan"
backgroundImage="/images/landing/league_ticket.jpg"
className="border-b-[3px] md:border-b-0 md:border-r-[3px]"
/>
{/* CS2 TURNIIRI PILET */}
<TicketCard
title={t("tickets.cs2.name")}
subtitle={t("tickets.subtitle")}
price={t("tickets.cs2.price")}
features={t.raw("tickets.cs2.features")}
buttonText={t("tickets.buyButton")}
buttonHref="https://fienta.com/et/tipilan"
backgroundImage="/images/landing/compete_teaser.jpg"
backgroundOpacity={30}
/>
{/* CS2 TURNIIRI PILET */}
<TicketCard
title={t("tickets.cs2.name")}
subtitle={t("tickets.subtitle")}
price={t("tickets.cs2.price")}
features={t.raw("tickets.cs2.features")}
buttonText={t("tickets.buyButton")}
buttonHref="https://fienta.com/et/tipilan"
backgroundImage="/images/landing/compete_teaser.jpg"
backgroundOpacity={30}
className="border-b-0"
/>
</div>
</div>
);

View File

@@ -1,6 +1,6 @@
import { vipnagorgialla } from "@/components/Vipnagorgialla";
import CS2Sidebar from "@/components/CS2Sidebar";
import CS2Rules from "@/components/CS2Rules";
import RuleNav from "@/components/RuleNav";
import RulesContent from "@/components/RulesContent";
import Link from "next/link";
import { getTranslations, setRequestLocale } from "next-intl/server";
@@ -30,7 +30,7 @@ export default async function CS2Tournament({
return (
<div className="bg-[#0E0F19] min-h-screen pt-16 md:pt-20">
<div className="max-w-[1920px] mx-auto px-6 md:px-12 py-8 md:py-16">
<div className="max-w-480 mx-auto px-6 md:px-12 py-8 md:py-16">
<div className="grid grid-cols-1 lg:grid-cols-[1fr_300px] gap-8 lg:gap-16">
{/* Main content */}
<div>
@@ -60,7 +60,7 @@ export default async function CS2Tournament({
</div>
{/* SISSEJUHATUS */}
<section id="intro" className="mb-12">
<section id="intro" className="mb-12 scroll-mt-24 md:scroll-mt-28">
<h2
className={`${vipnagorgialla.className} font-bold italic text-2xl md:text-3xl text-[#EEE5E5] uppercase mb-4`}
>
@@ -84,7 +84,7 @@ export default async function CS2Tournament({
</section>
{/* ÜLDINE INFO */}
<section id="info" className="mb-12">
<section id="info" className="mb-12 scroll-mt-24 md:scroll-mt-28">
<h2
className={`${vipnagorgialla.className} font-bold italic text-2xl md:text-3xl text-[#EEE5E5] uppercase mb-4`}
>
@@ -96,7 +96,7 @@ export default async function CS2Tournament({
</section>
{/* AUHINNAFOND */}
<section id="prizes" className="mb-12">
<section id="prizes" className="mb-12 scroll-mt-24 md:scroll-mt-28">
<h2
className={`${vipnagorgialla.className} font-bold italic text-2xl md:text-3xl text-[#EEE5E5] uppercase mb-4`}
>
@@ -109,9 +109,18 @@ export default async function CS2Tournament({
{t("cs2page.prizes.mainTitle")}
</h3>
<ul className="text-[#EEE5E5]/80 mb-2">
<li>1. koht - 3000, 600 inimese kohta, 50% ehk 1/2 auhinnafondist.</li>
<li>2. koht - 2000, 400 inimese kohta, 33.3...(3)% ehk 1/3 auhinnafondist.</li>
<li>3. koht - 1000, 200 inimese kohta, 16.6...(6)% ehk 1/6 auhinnafondist.</li>
<li>
1. koht - 3000, 600 inimese kohta, 50% ehk 1/2
auhinnafondist.
</li>
<li>
2. koht - 2000, 400 inimese kohta, 33.3...(3)% ehk 1/3
auhinnafondist.
</li>
<li>
3. koht - 1000, 200 inimese kohta, 16.6...(6)% ehk 1/6
auhinnafondist.
</li>
</ul>
<p className="text-[#EEE5E5]/60 text-sm mb-6">
{t("cs2page.prizes.mainNote")}
@@ -123,8 +132,14 @@ export default async function CS2Tournament({
{t("cs2page.prizes.secondTitle")}
</h3>
<ul className="text-[#EEE5E5]/80 mb-2">
<li>1. koht - 500, 100 inimese kohta, 66.6...(6)% ehk 2/3 auhinnafondist.</li>
<li>2. koht - 250, 50 inimese kohta, 33.3...(3)% ehk 1/3 auhinnafondist.</li>
<li>
1. koht - 500, 100 inimese kohta, 66.6...(6)% ehk 2/3
auhinnafondist.
</li>
<li>
2. koht - 250, 50 inimese kohta, 33.3...(3)% ehk 1/3
auhinnafondist.
</li>
</ul>
<p className="text-[#EEE5E5]/60 text-sm">
{t("cs2page.prizes.secondNote")}
@@ -132,7 +147,7 @@ export default async function CS2Tournament({
</section>
{/* TURNIIRI FORMAAT */}
<section id="format" className="mb-12">
<section id="format" className="mb-12 scroll-mt-24 md:scroll-mt-28">
<h2
className={`${vipnagorgialla.className} font-bold italic text-2xl md:text-3xl text-[#EEE5E5] uppercase mb-4`}
>
@@ -141,16 +156,12 @@ export default async function CS2Tournament({
<p className="text-[#EEE5E5]/80 mb-4">
{t("cs2page.format.description")}
</p>
<p className="text-[#EEE5E5]/80">
{t("cs2page.format.day1")}
</p>
<p className="text-[#EEE5E5]/80">
{t("cs2page.format.day23")}
</p>
<p className="text-[#EEE5E5]/80">{t("cs2page.format.day1")}</p>
<p className="text-[#EEE5E5]/80">{t("cs2page.format.day23")}</p>
</section>
{/* VRS INFO */}
<section id="vrs" className="mb-12">
<section id="vrs" className="mb-12 scroll-mt-24 md:scroll-mt-28">
<h2
className={`${vipnagorgialla.className} font-bold italic text-2xl md:text-3xl text-[#EEE5E5] uppercase mb-4`}
>
@@ -183,7 +194,7 @@ export default async function CS2Tournament({
*/}
{/* REEGLID */}
<section id="rules" className="mb-12">
<section id="rules" className="mb-12 scroll-mt-24 md:scroll-mt-28">
<h2
className={`${vipnagorgialla.className} font-bold italic text-2xl md:text-3xl text-[#EEE5E5] uppercase mb-4`}
>
@@ -193,12 +204,18 @@ export default async function CS2Tournament({
{t("cs2page.rules.description")}
</p>
<CS2Rules sections={t.raw("cs2page.rules.sections")} />
<RulesContent sections={t.raw("cs2page.rules.sections")} />
<div className="mt-8">
<p className="text-[#EEE5E5]/80 mb-2">{t("cs2page.rules.contact")}</p>
<p className="text-[#00A3E0] font-bold">{t("cs2page.rules.contactName")}</p>
<p className="text-[#EEE5E5]/70">{t("cs2page.rules.contactRole")}</p>
<p className="text-[#EEE5E5]/80 mb-2">
{t("cs2page.rules.contact")}
</p>
<p className="text-[#00A3E0] font-bold">
{t("cs2page.rules.contactName")}
</p>
<p className="text-[#EEE5E5]/70">
{t("cs2page.rules.contactRole")}
</p>
<p className="text-[#EEE5E5]/70">
Discord:{" "}
<a
@@ -214,7 +231,7 @@ export default async function CS2Tournament({
</div>
{/* Sidebar navigation */}
<CS2Sidebar sections={sections} />
<RuleNav sections={sections} />
</div>
</div>
</div>

View File

@@ -1,6 +1,6 @@
import { vipnagorgialla } from "@/components/Vipnagorgialla";
import CS2Sidebar from "@/components/CS2Sidebar";
import CS2Rules from "@/components/CS2Rules";
import RuleNav from "@/components/RuleNav";
import RulesContent from "@/components/RulesContent";
import Link from "next/link";
import { getTranslations, setRequestLocale } from "next-intl/server";
@@ -52,7 +52,7 @@ export default async function LoLTournament({
</div>
{/* SISSEJUHATUS */}
<section id="intro" className="mb-12">
<section id="intro" className="mb-12 scroll-mt-24 md:scroll-mt-28">
<h2
className={`${vipnagorgialla.className} font-bold italic text-2xl md:text-3xl text-[#EEE5E5] uppercase mb-4`}
>
@@ -76,7 +76,7 @@ export default async function LoLTournament({
</section>
{/* ÜLDINE INFO */}
<section id="info" className="mb-12">
<section id="info" className="mb-12 scroll-mt-24 md:scroll-mt-28">
<h2
className={`${vipnagorgialla.className} font-bold italic text-2xl md:text-3xl text-[#EEE5E5] uppercase mb-4`}
>
@@ -88,7 +88,7 @@ export default async function LoLTournament({
</section>
{/* AUHINNAFOND */}
<section id="prizes" className="mb-12">
<section id="prizes" className="mb-12 scroll-mt-24 md:scroll-mt-28">
<h2
className={`${vipnagorgialla.className} font-bold italic text-2xl md:text-3xl text-[#EEE5E5] uppercase mb-4`}
>
@@ -111,7 +111,7 @@ export default async function LoLTournament({
</section>
{/* TURNIIRI FORMAAT */}
<section id="format" className="mb-12">
<section id="format" className="mb-12 scroll-mt-24 md:scroll-mt-28">
<h2
className={`${vipnagorgialla.className} font-bold italic text-2xl md:text-3xl text-[#EEE5E5] uppercase mb-4`}
>
@@ -120,12 +120,8 @@ export default async function LoLTournament({
<p className="text-[#EEE5E5]/80 mb-4">
{t("lolpage.format.description")}
</p>
<p className="text-[#EEE5E5]/80">
{t("lolpage.format.day1")}
</p>
<p className="text-[#EEE5E5]/80">
{t("lolpage.format.day2")}
</p>
<p className="text-[#EEE5E5]/80">{t("lolpage.format.day1")}</p>
<p className="text-[#EEE5E5]/80">{t("lolpage.format.day2")}</p>
</section>
{/* FAQ - commented out until content is ready
@@ -147,7 +143,7 @@ export default async function LoLTournament({
*/}
{/* REEGLID */}
<section id="rules" className="mb-12">
<section id="rules" className="mb-12 scroll-mt-24 md:scroll-mt-28">
<h2
className={`${vipnagorgialla.className} font-bold italic text-2xl md:text-3xl text-[#EEE5E5] uppercase mb-4`}
>
@@ -157,12 +153,18 @@ export default async function LoLTournament({
{t("lolpage.rules.description")}
</p>
<CS2Rules sections={t.raw("lolpage.rules.sections")} />
<RulesContent sections={t.raw("lolpage.rules.sections")} />
<div className="mt-8">
<p className="text-[#EEE5E5]/80 mb-2">{t("lolpage.rules.contact")}</p>
<p className="text-[#00A3E0] font-bold">{t("lolpage.rules.contactName")}</p>
<p className="text-[#EEE5E5]/70">{t("lolpage.rules.contactRole")}</p>
<p className="text-[#EEE5E5]/80 mb-2">
{t("lolpage.rules.contact")}
</p>
<p className="text-[#00A3E0] font-bold">
{t("lolpage.rules.contactName")}
</p>
<p className="text-[#EEE5E5]/70">
{t("lolpage.rules.contactRole")}
</p>
<p className="text-[#EEE5E5]/70">
Discord:{" "}
<a
@@ -178,7 +180,7 @@ export default async function LoLTournament({
</div>
{/* Sidebar navigation */}
<CS2Sidebar sections={sections} />
<RuleNav sections={sections} />
</div>
</div>
</div>

View File

@@ -1,46 +1,44 @@
import { vipnagorgialla } from "@/components/Vipnagorgialla";
import Link from "next/link";
import Image from "next/image";
import { getTranslations, setRequestLocale } from "next-intl/server";
import { setRequestLocale } from "next-intl/server";
interface TournamentCardProps {
title: string;
buttonText: string;
buttonHref: string;
backgroundImage: string;
objectPosition?: string;
className?: string;
}
function TournamentCard({
title,
buttonText,
buttonHref,
backgroundImage,
objectPosition = "center",
className = "",
}: TournamentCardProps) {
return (
<div className="relative bg-[#0E0F19] border-r border-[#1F5673] flex flex-col items-center justify-center h-[818px]">
<Link
href={buttonHref}
aria-label={title}
className={`group relative bg-[#0E0F19] border-[#1F5673] flex flex-col items-center justify-center h-full min-h-87.5 transition-colors duration-200 focus-visible:outline-none focus-visible:ring-4 focus-visible:ring-[#00A3E0]/40 ${className}`}
>
<Image
src={backgroundImage}
alt=""
fill
className="object-cover opacity-50"
className="object-cover opacity-50 transition-opacity duration-200 group-hover:opacity-40 group-focus-visible:opacity-40"
style={{ objectPosition }}
/>
<div className="relative z-10 flex flex-col items-center text-center">
<h2
className={`${vipnagorgialla.className} font-bold italic text-[clamp(2rem,1.5rem+3vw,4rem)] leading-none text-[#EEE5E5] uppercase mb-4`}
className={`${vipnagorgialla.className} font-bold italic text-[clamp(2rem,1.5rem+3vw,4rem)] leading-none text-[#EEE5E5] uppercase transition-colors duration-200 group-hover:text-[#00A3E0] group-focus-visible:text-[#00A3E0]`}
>
{title}
</h2>
<Link
href={buttonHref}
className={`${vipnagorgialla.className} font-bold italic text-xl text-[#00A3E0] hover:text-[#EEE5E5] uppercase transition`}
>
{buttonText}
</Link>
</div>
</div>
</Link>
);
}
@@ -51,27 +49,25 @@ export default async function Tourney({
}) {
const { locale } = await params;
setRequestLocale(locale);
const t = await getTranslations({ locale });
return (
<div className="bg-[#0E0F19]">
<div className="bg-[#0E0F19] min-h-0 flex flex-col flex-1">
{/* 1x2 Grid */}
<div className="grid grid-cols-1 md:grid-cols-2 pt-16 md:pt-20">
<div className="grid grid-cols-1 md:grid-cols-2 auto-rows-fr pt-14 flex-1 min-h-0">
{/* CS2 */}
<TournamentCard
title="COUNTER-STRIKE 2"
buttonText={t("tournaments.clickButton")}
buttonHref="/turniirid/cs2"
backgroundImage="/images/landing/cs2_tournament.jpg"
className="border-b-[3px] md:border-b-0 md:border-r-3"
/>
{/* LoL */}
<TournamentCard
title="LEAGUE OF LEGENDS"
buttonText={t("tournaments.clickButton")}
buttonHref="/turniirid/lol"
backgroundImage="/images/landing/lol_tournament.png"
objectPosition="bottom left"
className="border-b-0"
/>
</div>
</div>