mirror of
https://github.com/Lapikud/tipilan.git
synced 2026-06-23 06:31:30 +00:00
Bunch of minor fixes
This commit is contained in:
@@ -30,7 +30,7 @@ export default async function Page({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="bg-[#0E0F19] min-h-screen pt-16 md:pt-20">
|
<div className="bg-[#0E0F19] min-h-screen pt-16 md:pt-20">
|
||||||
<div className="max-w-480 mx-auto px-6 md:px-12 py-8 md:py-16">
|
<div className="max-w-480 mx-auto px-8 md:px-16 py-10 md:py-20">
|
||||||
<div className="grid grid-cols-1 lg:grid-cols-[1fr_300px] gap-8 lg:gap-16">
|
<div className="grid grid-cols-1 lg:grid-cols-[1fr_300px] gap-8 lg:gap-16">
|
||||||
{/* Main content */}
|
{/* Main content */}
|
||||||
<div>
|
<div>
|
||||||
@@ -41,6 +41,7 @@ export default async function Page({
|
|||||||
{t("rules.houseRules")}
|
{t("rules.houseRules")}
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
|
<div className="rules-markdown">
|
||||||
<ReactMarkdown
|
<ReactMarkdown
|
||||||
components={
|
components={
|
||||||
{
|
{
|
||||||
@@ -65,20 +66,24 @@ export default async function Page({
|
|||||||
</h2>
|
</h2>
|
||||||
),
|
),
|
||||||
ol: (props) => (
|
ol: (props) => (
|
||||||
<ol className="list-decimal list-inside text-white mb-4">
|
<ol className="text-white mb-4 leading-[19px]">
|
||||||
{props.children}
|
{props.children}
|
||||||
</ol>
|
</ol>
|
||||||
),
|
),
|
||||||
ul: (props) => (
|
ul: (props) => (
|
||||||
<ul className="list-disc list-inside text-white mb-4">
|
<ul className="list-disc list-inside text-white mb-4 leading-[19px]">
|
||||||
{props.children}
|
{props.children}
|
||||||
</ul>
|
</ul>
|
||||||
),
|
),
|
||||||
p: (props) => (
|
p: (props) => (
|
||||||
<p className="text-white mb-4">{props.children}</p>
|
<p className="text-white mb-4 leading-[19px]">
|
||||||
|
{props.children}
|
||||||
|
</p>
|
||||||
),
|
),
|
||||||
li: (props) => (
|
li: (props) => (
|
||||||
<li className="text-white mb-2">{props.children}</li>
|
<li className="text-white mb-2 leading-[19px]">
|
||||||
|
{props.children}
|
||||||
|
</li>
|
||||||
),
|
),
|
||||||
} as Components
|
} as Components
|
||||||
}
|
}
|
||||||
@@ -86,6 +91,7 @@ export default async function Page({
|
|||||||
{content}
|
{content}
|
||||||
</ReactMarkdown>
|
</ReactMarkdown>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
{/* Sidebar navigation */}
|
{/* Sidebar navigation */}
|
||||||
<RuleNav sections={sections} />
|
<RuleNav sections={sections} />
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ function TicketCard({
|
|||||||
</ul>
|
</ul>
|
||||||
<Link href={buttonHref} target="_blank">
|
<Link href={buttonHref} target="_blank">
|
||||||
<button
|
<button
|
||||||
className={`px-4 py-2 bg-[#00A3E0] hover:bg-[#E5E5EE] text-[#0A121F] cursor-pointer ${vipnagorgialla.className} font-bold italic uppercase transition`}
|
className={`px-4 py-2 border-4 border-transparent bg-[#00A3E0] hover:bg-[#E5E5EE] text-[#0A121F] cursor-pointer ${vipnagorgialla.className} font-bold italic leading-none uppercase transition`}
|
||||||
>
|
>
|
||||||
{buttonText}
|
{buttonText}
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ export default async function CS2Tournament({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="bg-[#0E0F19] min-h-screen pt-16 md:pt-20">
|
<div className="bg-[#0E0F19] min-h-screen pt-16 md:pt-20">
|
||||||
<div className="max-w-480 mx-auto px-6 md:px-12 py-8 md:py-16">
|
<div className="max-w-480 mx-auto px-8 md:px-16 py-10 md:py-20">
|
||||||
<div className="grid grid-cols-1 lg:grid-cols-[1fr_300px] gap-8 lg:gap-16">
|
<div className="grid grid-cols-1 lg:grid-cols-[1fr_300px] gap-8 lg:gap-16">
|
||||||
{/* Main content */}
|
{/* Main content */}
|
||||||
<div>
|
<div>
|
||||||
@@ -46,14 +46,14 @@ export default async function CS2Tournament({
|
|||||||
<Link
|
<Link
|
||||||
href="https://fienta.com/et/tipilan"
|
href="https://fienta.com/et/tipilan"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
className={`${vipnagorgialla.className} font-bold italic px-4 py-3 bg-[#00A3E0] hover:bg-[#E5E5EE] text-[#0A121F] uppercase transition`}
|
className={`${vipnagorgialla.className} font-bold italic leading-none text-lg px-4 py-3 border-4 border-transparent bg-[#00A3E0] hover:bg-[#E5E5EE] text-[#0A121F] uppercase transition`}
|
||||||
>
|
>
|
||||||
{t("cs2page.buyTicket")}
|
{t("cs2page.buyTicket")}
|
||||||
</Link>
|
</Link>
|
||||||
<Link
|
<Link
|
||||||
href="https://git.edunaut.ee/slunk/TipiLAN_reeglistik_ruleset/src/branch/main/CS2%20tournament"
|
href="https://git.edunaut.ee/slunk/TipiLAN_reeglistik_ruleset/src/branch/main/CS2%20tournament"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
className={`${vipnagorgialla.className} font-bold italic text-lg uppercase px-4 py-2 border-2 border-[#00A3E0] bg-[#1F5673] text-[#EEE5E5] hover:bg-[#00A3E0] hover:text-black transition`}
|
className={`${vipnagorgialla.className} font-bold italic leading-none text-lg uppercase px-4 py-3 border-4 border-[#00A3E0] bg-[#1F5673] text-[#EEE5E5] hover:bg-[#00A3E0] hover:text-black transition`}
|
||||||
>
|
>
|
||||||
{t("cs2page.viewGithub")}
|
{t("cs2page.viewGithub")}
|
||||||
</Link>
|
</Link>
|
||||||
@@ -66,7 +66,7 @@ export default async function CS2Tournament({
|
|||||||
>
|
>
|
||||||
{t("cs2page.intro.title")}
|
{t("cs2page.intro.title")}
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-white mb-6">
|
<p className="text-white mb-6 leading-[19px]">
|
||||||
{t("cs2page.intro.description")}
|
{t("cs2page.intro.description")}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -75,8 +75,8 @@ export default async function CS2Tournament({
|
|||||||
>
|
>
|
||||||
{t("cs2page.intro.previousWinners")}
|
{t("cs2page.intro.previousWinners")}
|
||||||
</h3>
|
</h3>
|
||||||
<p className="text-white font-bold">2025</p>
|
<p className="text-white font-bold leading-[19px]">2025</p>
|
||||||
<ol className="text-white list-decimal list-inside mb-4">
|
<ol className="text-white list-decimal list-inside mb-4 leading-[19px]">
|
||||||
<li>RAID (Eesti)</li>
|
<li>RAID (Eesti)</li>
|
||||||
<li>hypewrld (Läti)</li>
|
<li>hypewrld (Läti)</li>
|
||||||
<li>CSDIILIT (Soome/Eesti)</li>
|
<li>CSDIILIT (Soome/Eesti)</li>
|
||||||
@@ -90,7 +90,9 @@ export default async function CS2Tournament({
|
|||||||
>
|
>
|
||||||
{t("cs2page.info.title")}
|
{t("cs2page.info.title")}
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-white">{t("cs2page.info.description")}</p>
|
<p className="text-white leading-[19px]">
|
||||||
|
{t("cs2page.info.description")}
|
||||||
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* AUHINNAFOND */}
|
{/* AUHINNAFOND */}
|
||||||
@@ -106,7 +108,7 @@ export default async function CS2Tournament({
|
|||||||
>
|
>
|
||||||
{t("cs2page.prizes.mainTitle")}
|
{t("cs2page.prizes.mainTitle")}
|
||||||
</h3>
|
</h3>
|
||||||
<ul className="text-white mb-2">
|
<ul className="text-white mb-2 leading-[19px]">
|
||||||
<li>
|
<li>
|
||||||
1. koht - 3000€, 600€ inimese kohta, 50% ehk 1/2
|
1. koht - 3000€, 600€ inimese kohta, 50% ehk 1/2
|
||||||
auhinnafondist.
|
auhinnafondist.
|
||||||
@@ -120,7 +122,7 @@ export default async function CS2Tournament({
|
|||||||
auhinnafondist.
|
auhinnafondist.
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p className="text-white/80 text-sm mb-6">
|
<p className="text-white/80 text-sm mb-6 leading-[19px]">
|
||||||
{t("cs2page.prizes.mainNote")}
|
{t("cs2page.prizes.mainNote")}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -129,7 +131,7 @@ export default async function CS2Tournament({
|
|||||||
>
|
>
|
||||||
{t("cs2page.prizes.secondTitle")}
|
{t("cs2page.prizes.secondTitle")}
|
||||||
</h3>
|
</h3>
|
||||||
<ul className="text-white mb-2">
|
<ul className="text-white mb-2 leading-[19px]">
|
||||||
<li>
|
<li>
|
||||||
1. koht - 500€, 100€ inimese kohta, 66.6...(6)% ehk 2/3
|
1. koht - 500€, 100€ inimese kohta, 66.6...(6)% ehk 2/3
|
||||||
auhinnafondist.
|
auhinnafondist.
|
||||||
@@ -139,7 +141,7 @@ export default async function CS2Tournament({
|
|||||||
auhinnafondist.
|
auhinnafondist.
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p className="text-white/80 text-sm">
|
<p className="text-white/80 text-sm leading-[19px]">
|
||||||
{t("cs2page.prizes.secondNote")}
|
{t("cs2page.prizes.secondNote")}
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
@@ -151,11 +153,15 @@ export default async function CS2Tournament({
|
|||||||
>
|
>
|
||||||
{t("cs2page.format.title")}
|
{t("cs2page.format.title")}
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-white mb-4">
|
<p className="text-white mb-4 leading-[19px]">
|
||||||
{t("cs2page.format.description")}
|
{t("cs2page.format.description")}
|
||||||
</p>
|
</p>
|
||||||
<p className="text-white">{t("cs2page.format.day1")}</p>
|
<p className="text-white leading-[19px]">
|
||||||
<p className="text-white">{t("cs2page.format.day23")}</p>
|
{t("cs2page.format.day1")}
|
||||||
|
</p>
|
||||||
|
<p className="text-white leading-[19px]">
|
||||||
|
{t("cs2page.format.day23")}
|
||||||
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* VRS INFO */}
|
{/* VRS INFO */}
|
||||||
@@ -165,8 +171,12 @@ export default async function CS2Tournament({
|
|||||||
>
|
>
|
||||||
{t("cs2page.vrs.title")}
|
{t("cs2page.vrs.title")}
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-white mb-4">{t("cs2page.vrs.description1")}</p>
|
<p className="text-white mb-4 leading-[19px]">
|
||||||
<p className="text-white">{t("cs2page.vrs.description2")}</p>
|
{t("cs2page.vrs.description1")}
|
||||||
|
</p>
|
||||||
|
<p className="text-white leading-[19px]">
|
||||||
|
{t("cs2page.vrs.description2")}
|
||||||
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* FAQ - commented out until content is ready
|
{/* FAQ - commented out until content is ready
|
||||||
@@ -194,19 +204,23 @@ export default async function CS2Tournament({
|
|||||||
>
|
>
|
||||||
{t("cs2page.rules.title")}
|
{t("cs2page.rules.title")}
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-white mb-6">
|
<p className="text-white mb-6 leading-[19px]">
|
||||||
{t("cs2page.rules.description")}
|
{t("cs2page.rules.description")}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<RulesContent sections={t.raw("cs2page.rules.sections")} />
|
<RulesContent sections={t.raw("cs2page.rules.sections")} />
|
||||||
|
|
||||||
<div className="mt-8">
|
<div className="mt-8">
|
||||||
<p className="text-white mb-2">{t("cs2page.rules.contact")}</p>
|
<p className="text-white mb-2 leading-[19px]">
|
||||||
|
{t("cs2page.rules.contact")}
|
||||||
|
</p>
|
||||||
<p className="text-[#00A3E0] font-bold">
|
<p className="text-[#00A3E0] font-bold">
|
||||||
{t("cs2page.rules.contactName")}
|
{t("cs2page.rules.contactName")}
|
||||||
</p>
|
</p>
|
||||||
<p className="text-white">{t("cs2page.rules.contactRole")}</p>
|
<p className="text-white leading-[19px]">
|
||||||
<p className="text-white">
|
{t("cs2page.rules.contactRole")}
|
||||||
|
</p>
|
||||||
|
<p className="text-white leading-[19px]">
|
||||||
Discord:{" "}
|
Discord:{" "}
|
||||||
<a
|
<a
|
||||||
href="https://discord.com/users/292372329747710013"
|
href="https://discord.com/users/292372329747710013"
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ export default async function LoLTournament({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="bg-[#0E0F19] min-h-screen pt-16 md:pt-20">
|
<div className="bg-[#0E0F19] min-h-screen pt-16 md:pt-20">
|
||||||
<div className="max-w-480 mx-auto px-6 md:px-12 py-8 md:py-16">
|
<div className="max-w-480 mx-auto px-8 md:px-16 py-10 md:py-20">
|
||||||
<div className="grid grid-cols-1 lg:grid-cols-[1fr_300px] gap-8 lg:gap-16">
|
<div className="grid grid-cols-1 lg:grid-cols-[1fr_300px] gap-8 lg:gap-16">
|
||||||
{/* Main content */}
|
{/* Main content */}
|
||||||
<div>
|
<div>
|
||||||
@@ -45,7 +45,7 @@ export default async function LoLTournament({
|
|||||||
<Link
|
<Link
|
||||||
href="https://fienta.com/et/tipilan"
|
href="https://fienta.com/et/tipilan"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
className={`${vipnagorgialla.className} font-bold italic px-4 py-2 bg-[#00A3E0] hover:bg-[#E5E5EE] text-[#0A121F] uppercase transition`}
|
className={`${vipnagorgialla.className} font-bold italic leading-none text-lg px-4 py-3 border-4 border-transparent bg-[#00A3E0] hover:bg-[#E5E5EE] text-[#0A121F] uppercase transition`}
|
||||||
>
|
>
|
||||||
{t("lolpage.buyTicket")}
|
{t("lolpage.buyTicket")}
|
||||||
</Link>
|
</Link>
|
||||||
@@ -58,7 +58,7 @@ export default async function LoLTournament({
|
|||||||
>
|
>
|
||||||
{t("lolpage.intro.title")}
|
{t("lolpage.intro.title")}
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-white mb-6">
|
<p className="text-white mb-6 leading-[19px]">
|
||||||
{t("lolpage.intro.description")}
|
{t("lolpage.intro.description")}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -67,8 +67,8 @@ export default async function LoLTournament({
|
|||||||
>
|
>
|
||||||
{t("lolpage.intro.previousWinners")}
|
{t("lolpage.intro.previousWinners")}
|
||||||
</h3>
|
</h3>
|
||||||
<p className="text-white font-bold">2025</p>
|
<p className="text-white font-bold leading-[19px]">2025</p>
|
||||||
<ol className="text-white list-decimal list-inside mb-4">
|
<ol className="text-white list-decimal list-inside mb-4 leading-[19px]">
|
||||||
<li>Ükssilm (Eesti)</li>
|
<li>Ükssilm (Eesti)</li>
|
||||||
<li>Eesti Rästikud (Eesti)</li>
|
<li>Eesti Rästikud (Eesti)</li>
|
||||||
<li>LOMiks (Läti)</li>
|
<li>LOMiks (Läti)</li>
|
||||||
@@ -82,7 +82,9 @@ export default async function LoLTournament({
|
|||||||
>
|
>
|
||||||
{t("lolpage.info.title")}
|
{t("lolpage.info.title")}
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-white">{t("lolpage.info.description")}</p>
|
<p className="text-white leading-[19px]">
|
||||||
|
{t("lolpage.info.description")}
|
||||||
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* AUHINNAFOND */}
|
{/* AUHINNAFOND */}
|
||||||
@@ -98,12 +100,12 @@ export default async function LoLTournament({
|
|||||||
>
|
>
|
||||||
{t("lolpage.prizes.mainTitle")}
|
{t("lolpage.prizes.mainTitle")}
|
||||||
</h3>
|
</h3>
|
||||||
<ul className="text-white mb-2">
|
<ul className="text-white mb-2 leading-[19px]">
|
||||||
<li>{t("lolpage.prizes.place1")}</li>
|
<li>{t("lolpage.prizes.place1")}</li>
|
||||||
<li>{t("lolpage.prizes.place2")}</li>
|
<li>{t("lolpage.prizes.place2")}</li>
|
||||||
<li>{t("lolpage.prizes.place3")}</li>
|
<li>{t("lolpage.prizes.place3")}</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p className="text-white/80 text-sm">
|
<p className="text-white/80 text-sm leading-[19px]">
|
||||||
{t("lolpage.prizes.note")}
|
{t("lolpage.prizes.note")}
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
@@ -115,11 +117,15 @@ export default async function LoLTournament({
|
|||||||
>
|
>
|
||||||
{t("lolpage.format.title")}
|
{t("lolpage.format.title")}
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-white mb-4">
|
<p className="text-white mb-4 leading-[19px]">
|
||||||
{t("lolpage.format.description")}
|
{t("lolpage.format.description")}
|
||||||
</p>
|
</p>
|
||||||
<p className="text-white">{t("lolpage.format.day1")}</p>
|
<p className="text-white leading-[19px]">
|
||||||
<p className="text-white">{t("lolpage.format.day2")}</p>
|
{t("lolpage.format.day1")}
|
||||||
|
</p>
|
||||||
|
<p className="text-white leading-[19px]">
|
||||||
|
{t("lolpage.format.day2")}
|
||||||
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* FAQ - commented out until content is ready
|
{/* FAQ - commented out until content is ready
|
||||||
@@ -147,19 +153,23 @@ export default async function LoLTournament({
|
|||||||
>
|
>
|
||||||
{t("lolpage.rules.title")}
|
{t("lolpage.rules.title")}
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-white mb-6">
|
<p className="text-white mb-6 leading-[19px]">
|
||||||
{t("lolpage.rules.description")}
|
{t("lolpage.rules.description")}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<RulesContent sections={t.raw("lolpage.rules.sections")} />
|
<RulesContent sections={t.raw("lolpage.rules.sections")} />
|
||||||
|
|
||||||
<div className="mt-8">
|
<div className="mt-8">
|
||||||
<p className="text-white mb-2">{t("lolpage.rules.contact")}</p>
|
<p className="text-white mb-2 leading-[19px]">
|
||||||
|
{t("lolpage.rules.contact")}
|
||||||
|
</p>
|
||||||
<p className="text-[#00A3E0] font-bold">
|
<p className="text-[#00A3E0] font-bold">
|
||||||
{t("lolpage.rules.contactName")}
|
{t("lolpage.rules.contactName")}
|
||||||
</p>
|
</p>
|
||||||
<p className="text-white">{t("lolpage.rules.contactRole")}</p>
|
<p className="text-white leading-[19px]">
|
||||||
<p className="text-white">
|
{t("lolpage.rules.contactRole")}
|
||||||
|
</p>
|
||||||
|
<p className="text-white leading-[19px]">
|
||||||
Discord:{" "}
|
Discord:{" "}
|
||||||
<a
|
<a
|
||||||
href="https://discord.com/users/125585160761638912"
|
href="https://discord.com/users/125585160761638912"
|
||||||
|
|||||||
@@ -132,6 +132,35 @@ body {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.rules-markdown ol {
|
||||||
|
counter-reset: list-item;
|
||||||
|
list-style: none;
|
||||||
|
margin-left: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rules-markdown ol > li {
|
||||||
|
counter-increment: list-item;
|
||||||
|
position: relative;
|
||||||
|
padding-left: 2.5rem;
|
||||||
|
font-variant-numeric: tabular-nums;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rules-markdown ol > li::before {
|
||||||
|
content: counters(list-item, ".") ".";
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
width: 2rem;
|
||||||
|
text-align: right;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rules-markdown ol ol {
|
||||||
|
counter-reset: list-item;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
margin-left: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
.material-symbols-outlined {
|
.material-symbols-outlined {
|
||||||
font-variation-settings:
|
font-variation-settings:
|
||||||
"FILL" 1,
|
"FILL" 1,
|
||||||
|
|||||||
@@ -40,8 +40,11 @@ const Header = ({ navItems }: HeaderProps) => {
|
|||||||
const pathname = usePathname();
|
const pathname = usePathname();
|
||||||
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
|
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
|
||||||
|
|
||||||
// Header navigation should include all options except homepage
|
// Header navigation should include all options except homepage and hidden items
|
||||||
const mainNavItems = navItems.filter((item) => item.href !== "/");
|
const hiddenNavHrefs: NavItem["href"][] = ["/messiala", "/ajakava"];
|
||||||
|
const mainNavItems = navItems.filter(
|
||||||
|
(item) => item.href !== "/" && !hiddenNavHrefs.includes(item.href),
|
||||||
|
);
|
||||||
const dropdownNavItems = mainNavItems;
|
const dropdownNavItems = mainNavItems;
|
||||||
|
|
||||||
const navIconByHref: Partial<Record<NavItem["href"], string>> = {
|
const navIconByHref: Partial<Record<NavItem["href"], string>> = {
|
||||||
@@ -86,16 +89,16 @@ const Header = ({ navItems }: HeaderProps) => {
|
|||||||
<Image
|
<Image
|
||||||
src="/tipilan-icon-white.svg"
|
src="/tipilan-icon-white.svg"
|
||||||
alt="TipiLAN"
|
alt="TipiLAN"
|
||||||
width={49}
|
width={40}
|
||||||
height={40}
|
height={40}
|
||||||
className="h-10 w-auto"
|
className="h-auto w-10"
|
||||||
/>
|
/>
|
||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
{/* Right side - Navigation + controls */}
|
{/* Right side - Navigation + controls */}
|
||||||
<div className="flex items-center gap-12">
|
<div className="flex items-center gap-12">
|
||||||
{/* Desktop Navigation */}
|
{/* Desktop Navigation */}
|
||||||
<nav className="hidden xl:flex items-center gap-12">
|
<nav className="hidden xl:flex items-center gap-8">
|
||||||
{mainNavItems.map((item) => {
|
{mainNavItems.map((item) => {
|
||||||
const isActive = pathname === item.href;
|
const isActive = pathname === item.href;
|
||||||
|
|
||||||
@@ -106,7 +109,7 @@ const Header = ({ navItems }: HeaderProps) => {
|
|||||||
aria-current={isActive ? "page" : undefined}
|
aria-current={isActive ? "page" : undefined}
|
||||||
aria-disabled={isActive ? true : undefined}
|
aria-disabled={isActive ? true : undefined}
|
||||||
tabIndex={isActive ? -1 : undefined}
|
tabIndex={isActive ? -1 : undefined}
|
||||||
className={`${vipnagorgialla.className} group font-bold italic text-lg uppercase px-4 py-1.5 border-2 border-[#00A3E0] transition ${
|
className={`${vipnagorgialla.className} group font-bold italic leading-none text-lg uppercase px-4 py-1.5 border-4 border-[#00A3E0] transition ${
|
||||||
isActive
|
isActive
|
||||||
? "bg-[#00A3E0] text-black cursor-default pointer-events-none"
|
? "bg-[#00A3E0] text-black cursor-default pointer-events-none"
|
||||||
: "bg-[#1F5673] text-[#EEE5E5] hover:bg-[#00A3E0] hover:text-black"
|
: "bg-[#1F5673] text-[#EEE5E5] hover:bg-[#00A3E0] hover:text-black"
|
||||||
@@ -155,7 +158,7 @@ const Header = ({ navItems }: HeaderProps) => {
|
|||||||
>
|
>
|
||||||
{isActive ? (
|
{isActive ? (
|
||||||
<span
|
<span
|
||||||
className={`${vipnagorgialla.className} block w-full cursor-default bg-[#00A3E0] px-5 py-2.5 text-xl font-bold italic uppercase text-black ${
|
className={`${vipnagorgialla.className} block w-full cursor-default bg-[#00A3E0] px-5 py-2.5 text-xl font-bold italic leading-none uppercase text-black ${
|
||||||
hasBottomBorder ? "border-b-3 border-[#1F5673]" : ""
|
hasBottomBorder ? "border-b-3 border-[#1F5673]" : ""
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
@@ -181,7 +184,7 @@ const Header = ({ navItems }: HeaderProps) => {
|
|||||||
) : (
|
) : (
|
||||||
<Link
|
<Link
|
||||||
href={item.href}
|
href={item.href}
|
||||||
className={`${vipnagorgialla.className} group block w-full bg-[#0E0F19] px-5 py-2.5 text-xl font-bold italic uppercase text-[#EEE5E5] transition hover:bg-[#00A3E0] hover:text-black ${
|
className={`${vipnagorgialla.className} group block w-full bg-[#0E0F19] px-5 py-2.5 text-xl font-bold italic leading-none uppercase text-[#EEE5E5] transition hover:bg-[#00A3E0] hover:text-black ${
|
||||||
hasBottomBorder ? "border-b-3 border-[#1F5673]" : ""
|
hasBottomBorder ? "border-b-3 border-[#1F5673]" : ""
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ export default function HeroSection() {
|
|||||||
</div>
|
</div>
|
||||||
<Link
|
<Link
|
||||||
href="/piletid"
|
href="/piletid"
|
||||||
className={`self-center md:self-start px-6 py-3 bg-[#00A3E0] hover:bg-[#E5E5EE] text-[#0A121F] ${vipnagorgialla.className} font-bold italic text-[clamp(1rem,0.8rem+0.8vw,1.5rem)] uppercase transition`}
|
className={`self-center md:self-start px-6 py-3 border-4 border-transparent bg-[#00A3E0] hover:bg-[#E5E5EE] text-[#0A121F] ${vipnagorgialla.className} font-bold italic leading-none text-[clamp(1rem,0.8rem+0.8vw,1.5rem)] uppercase transition`}
|
||||||
>
|
>
|
||||||
{t("hero.buyTicket")}
|
{t("hero.buyTicket")}
|
||||||
</Link>
|
</Link>
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ function RuleItem({
|
|||||||
}) {
|
}) {
|
||||||
if (typeof rule === "string") {
|
if (typeof rule === "string") {
|
||||||
return (
|
return (
|
||||||
<li className="text-white mb-2">
|
<li className="text-white mb-2 leading-[19px]">
|
||||||
<span className="text-white mr-2">{index}.</span>
|
<span className="text-white mr-2">{index}.</span>
|
||||||
{rule}
|
{rule}
|
||||||
</li>
|
</li>
|
||||||
@@ -33,7 +33,7 @@ function RuleItem({
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<li className="text-white mb-3">
|
<li className="text-white mb-3 leading-[19px]">
|
||||||
<span className="text-white mr-2">{index}.</span>
|
<span className="text-white mr-2">{index}.</span>
|
||||||
{rule.main}
|
{rule.main}
|
||||||
{rule.sub && rule.sub.length > 0 && (
|
{rule.sub && rule.sub.length > 0 && (
|
||||||
@@ -41,7 +41,7 @@ function RuleItem({
|
|||||||
{rule.sub.map((subRule, subIndex) => {
|
{rule.sub.map((subRule, subIndex) => {
|
||||||
if (typeof subRule === "string") {
|
if (typeof subRule === "string") {
|
||||||
return (
|
return (
|
||||||
<li key={subIndex} className="text-white mb-1">
|
<li key={subIndex} className="text-white mb-1 leading-[19px]">
|
||||||
<span className="text-white mr-2">
|
<span className="text-white mr-2">
|
||||||
{index}.{subIndex + 1}.
|
{index}.{subIndex + 1}.
|
||||||
</span>
|
</span>
|
||||||
@@ -50,7 +50,7 @@ function RuleItem({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<li key={subIndex} className="text-white mb-2">
|
<li key={subIndex} className="text-white mb-2 leading-[19px]">
|
||||||
<span className="text-white mr-2">
|
<span className="text-white mr-2">
|
||||||
{index}.{subIndex + 1}.
|
{index}.{subIndex + 1}.
|
||||||
</span>
|
</span>
|
||||||
@@ -58,7 +58,10 @@ function RuleItem({
|
|||||||
{subRule.sub && subRule.sub.length > 0 && (
|
{subRule.sub && subRule.sub.length > 0 && (
|
||||||
<ol className="ml-6 mt-1">
|
<ol className="ml-6 mt-1">
|
||||||
{subRule.sub.map((subSubRule, subSubIndex) => (
|
{subRule.sub.map((subSubRule, subSubIndex) => (
|
||||||
<li key={subSubIndex} className="text-white/80 mb-1">
|
<li
|
||||||
|
key={subSubIndex}
|
||||||
|
className="text-white/80 mb-1 leading-[19px]"
|
||||||
|
>
|
||||||
<span className="text-white/80 mr-2">
|
<span className="text-white/80 mr-2">
|
||||||
{index}.{subIndex + 1}.{subSubIndex + 1}.
|
{index}.{subIndex + 1}.{subSubIndex + 1}.
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ export default function TeaserCarousel() {
|
|||||||
return (
|
return (
|
||||||
<div className="border-b-3 border-[#1F5673]">
|
<div className="border-b-3 border-[#1F5673]">
|
||||||
{/* Slides (fade transition + hero lift effect) */}
|
{/* Slides (fade transition + hero lift effect) */}
|
||||||
<div className="relative h-135 sm:h-140 md:h-160 lg:h-175 xl:h-155 2xl:h-165 overflow-hidden">
|
<div className="relative h-135 sm:h-140 md:h-160 lg:h-[720px] xl:h-[780px] 2xl:h-[820px] overflow-hidden">
|
||||||
{slides.map((slide, i) => {
|
{slides.map((slide, i) => {
|
||||||
const title = t(`${slide.key}.title`);
|
const title = t(`${slide.key}.title`);
|
||||||
const description = t(`${slide.key}.description`);
|
const description = t(`${slide.key}.description`);
|
||||||
@@ -172,7 +172,7 @@ export default function TeaserCarousel() {
|
|||||||
})}
|
})}
|
||||||
|
|
||||||
{/* Floating heading (mobile) */}
|
{/* Floating heading (mobile) */}
|
||||||
<div className="absolute top-5 inset-x-0 px-8 z-20 md:hidden pointer-events-none">
|
<div className="absolute top-8 inset-x-0 px-8 z-20 md:hidden pointer-events-none">
|
||||||
<h2
|
<h2
|
||||||
className={`${vipnagorgialla.className} font-bold italic text-[clamp(2rem,1.5rem+4.6vw,3rem)] leading-[0.95] tracking-normal uppercase text-[#EEE5E5] whitespace-normal wrap-break-word text-left max-w-[12ch]`}
|
className={`${vipnagorgialla.className} font-bold italic text-[clamp(2rem,1.5rem+4.6vw,3rem)] leading-[0.95] tracking-normal uppercase text-[#EEE5E5] whitespace-normal wrap-break-word text-left max-w-[12ch]`}
|
||||||
>
|
>
|
||||||
@@ -181,7 +181,7 @@ export default function TeaserCarousel() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Floating heading (desktop/tablet) */}
|
{/* Floating heading (desktop/tablet) */}
|
||||||
<div className="absolute top-8 inset-x-0 px-4 sm:px-6 md:px-12 z-20 hidden md:flex pointer-events-none">
|
<div className="absolute top-12 inset-x-0 px-4 sm:px-6 md:px-12 z-20 hidden md:flex pointer-events-none">
|
||||||
<div
|
<div
|
||||||
className="transition-[flex-grow] duration-700 ease-out"
|
className="transition-[flex-grow] duration-700 ease-out"
|
||||||
style={{ flexGrow: headingOnRight ? 1 : 0 }}
|
style={{ flexGrow: headingOnRight ? 1 : 0 }}
|
||||||
|
|||||||
@@ -12,18 +12,18 @@ Event participation house rules apply to everyone, both visitors and competitors
|
|||||||
|
|
||||||
1. Participants are obligated to behave politely and with dignity and respect other event participants.
|
1. Participants are obligated to behave politely and with dignity and respect other event participants.
|
||||||
2. TipiLAN does not tolerate:
|
2. TipiLAN does not tolerate:
|
||||||
2.1. Hate speech based on national, racial, gender, sexual or religious affiliation, disabilities, appearance or age; harassment, threatening, offensive or aggressive behavior, incitement or support thereof
|
1. Hate speech based on national, racial, gender, sexual or religious affiliation, disabilities, appearance or age; harassment, threatening, offensive or aggressive behavior, incitement or support thereof
|
||||||
2.2. This applies both on the event premises (IRL) and in online environments related to the event.
|
2. This applies both on the event premises (IRL) and in online environments related to the event.
|
||||||
3. Participants are obligated to treat the event building, inventory and furnishings with care. It is forbidden to break, stain or move items that do not belong to the participant.
|
3. Participants are obligated to treat the event building, inventory and furnishings with care. It is forbidden to break, stain or move items that do not belong to the participant.
|
||||||
3.1. If a participant has organizer-provided accommodation, then in the accommodation area the participant is obligated to be quiet and allow companions to rest.
|
1. If a participant has organizer-provided accommodation, then in the accommodation area the participant is obligated to be quiet and allow companions to rest.
|
||||||
3.2. Persons who are not provided accommodation there may not be invited to the accommodation area.
|
2. Persons who are not provided accommodation there may not be invited to the accommodation area.
|
||||||
4. TipiLAN is not responsible for participants' personal property.
|
4. TipiLAN is not responsible for participants' personal property.
|
||||||
4.1. The organizer-provided accommodation area is lockable and unauthorized persons are not allowed there, but regardless of this, it is worth keeping an eye on your valuables.
|
1. The organizer-provided accommodation area is lockable and unauthorized persons are not allowed there, but regardless of this, it is worth keeping an eye on your valuables.
|
||||||
4.2. If there is suspicion that theft has occurred, this must be immediately reported to the organizer.
|
2. If there is suspicion that theft has occurred, this must be immediately reported to the organizer.
|
||||||
4.3. When finding lost items, please give them to the organizer or take them to *lost & found* (Merchandise table).
|
3. When finding lost items, please give them to the organizer or take them to *lost & found* (Merchandise table).
|
||||||
5. Smoking and using vapes is prohibited on the event premises. There are designated smoking areas outside for this purpose.
|
5. Smoking and using vapes is prohibited on the event premises. There are designated smoking areas outside for this purpose.
|
||||||
6. Illegal substances or drugs, sharp objects, firearms, explosives or incendiary materials and other items that may harm participants or others may not be brought to the event.
|
6. Illegal substances or drugs, sharp objects, firearms, explosives or incendiary materials and other items that may harm participants or others may not be brought to the event.
|
||||||
7. Underage participants are prohibited from consuming alcohol or using nicotine-containing products.
|
7. Underage participants are prohibited from consuming alcohol or using nicotine-containing products.
|
||||||
7.1. When purchasing alcohol from the bar, participants are obligated to show identification upon request by bar staff.
|
1. When purchasing alcohol from the bar, participants are obligated to show identification upon request by bar staff.
|
||||||
8. Participants are obligated to behave responsibly regarding alcohol.
|
8. Participants are obligated to behave responsibly regarding alcohol.
|
||||||
9. Any form of gambling for money or other benefits is prohibited.
|
9. Any form of gambling for money or other benefits is prohibited.
|
||||||
@@ -12,19 +12,19 @@
|
|||||||
|
|
||||||
1. Osaleja kohustub käituma viisakalt ning väärikalt ja austama teisi üritusel osalejaid.
|
1. Osaleja kohustub käituma viisakalt ning väärikalt ja austama teisi üritusel osalejaid.
|
||||||
2. TipiLAN ei tolereeri:
|
2. TipiLAN ei tolereeri:
|
||||||
2.1. Vihakõnet rahvusliku, rassilise, soolise, seksuaalse või religioosse kuuluvuse, puude, välimuse või vanuse kohta; ahistamist, ähvardavat, solvavat või agressiivset käitumist, sellele õhutamist või selle pooldamist
|
1. Vihakõnet rahvusliku, rassilise, soolise, seksuaalse või religioosse kuuluvuse, puude, välimuse või vanuse kohta; ahistamist, ähvardavat, solvavat või agressiivset käitumist, sellele õhutamist või selle pooldamist
|
||||||
2.2. See kehtib nii ürituse alal (IRL) kui ka üritusega seotud online-keskkondades.
|
2. See kehtib nii ürituse alal (IRL) kui ka üritusega seotud online-keskkondades.
|
||||||
3. Osaleja kohustub käituma ürituse hoone, inventari ja sisustuse suhtes heaperemehelikult. Keelatud on lõhkuda, määrida või viia mujale esemeid, mis ei kuulu osalejale.
|
3. Osaleja kohustub käituma ürituse hoone, inventari ja sisustuse suhtes heaperemehelikult. Keelatud on lõhkuda, määrida või viia mujale esemeid, mis ei kuulu osalejale.
|
||||||
3.1. Kui osalejal on ette nähtud korraldajapoolne majutus, siis majutusalal on osalejal kohustus olla vaikselt ning lubada kaaslastel puhata.
|
1. Kui osalejal on ette nähtud korraldajapoolne majutus, siis majutusalal on osalejal kohustus olla vaikselt ning lubada kaaslastel puhata.
|
||||||
3.2. Majutusalale ei või kaasa kutsuda isikuid, kellel ei ole seal majutust ette nähtud.
|
2. Majutusalale ei või kaasa kutsuda isikuid, kellel ei ole seal majutust ette nähtud.
|
||||||
4. TipiLAN ei vastuta osaleja isikliku vara eest.
|
4. TipiLAN ei vastuta osaleja isikliku vara eest.
|
||||||
4.1. Korraldajapoolne majutusala on lukustatav ning kõrvalisi isikuid sinna ei lubata, kuid sellest sõltumata tasub oma väärisesemetel silma peal hoida.
|
1. Korraldajapoolne majutusala on lukustatav ning kõrvalisi isikuid sinna ei lubata, kuid sellest sõltumata tasub oma väärisesemetel silma peal hoida.
|
||||||
4.2. Kui on tekkinud kahtlus, et on toimunud vargus, tuleb sellest koheselt teavitada korraldajat.
|
2. Kui on tekkinud kahtlus, et on toimunud vargus, tuleb sellest koheselt teavitada korraldajat.
|
||||||
4.3. Kaotatud asjade leidmisel palume anda need korraldajale või viia need *lost & found’i* (Merchilauda).
|
3. Kaotatud asjade leidmisel palume anda need korraldajale või viia need *lost & found’i* (Merchilauda).
|
||||||
5. Ürituse alal on keelatud suitsetada ning kasutada vape’i. Selleks on õues ette nähtud suitsetamise kohad.
|
5. Ürituse alal on keelatud suitsetada ning kasutada vape’i. Selleks on õues ette nähtud suitsetamise kohad.
|
||||||
6. Üritusele ei tohi kaasa võtta illegaalseid aineid või ravimeid, terariistu, tulirelvi, lõhke- või süüteained ning muid esemeid, mis võivad osalejatele või teistele viga teha.
|
6. Üritusele ei tohi kaasa võtta illegaalseid aineid või ravimeid, terariistu, tulirelvi, lõhke- või süüteained ning muid esemeid, mis võivad osalejatele või teistele viga teha.
|
||||||
7. Alaealisel osalejal on keelatud tarbida alkoholi või kasutada nikotiini sisaldavaid tooteid.
|
7. Alaealisel osalejal on keelatud tarbida alkoholi või kasutada nikotiini sisaldavaid tooteid.
|
||||||
7.1. Olles baarist alkoholi ostmas, on osalejal baaritöötaja nõudmisel kohustus näidata isikuttõendavat dokumenti.
|
1. Olles baarist alkoholi ostmas, on osalejal baaritöötaja nõudmisel kohustus näidata isikuttõendavat dokumenti.
|
||||||
8. Osaleja kohustub käituma alkoholi suhtes vastutustundlikult.
|
8. Osaleja kohustub käituma alkoholi suhtes vastutustundlikult.
|
||||||
9. Keelatud on igasugune hasartmäng nii raha kui muude hüvede peale.
|
9. Keelatud on igasugune hasartmäng nii raha kui muude hüvede peale.
|
||||||
|
|
||||||
|
|||||||
@@ -464,7 +464,7 @@
|
|||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "SISSEJUHATUS",
|
"title": "SISSEJUHATUS",
|
||||||
"description": "TipiLAN korraldas esimese LoL turniiri 2025. aastal oma debüütüritusel. Kohal käis tiime nii Eestist kui ka Lätist.",
|
"description": "League of Legends on juba üle kümne aasta olnud LANide lahutamatu osa. Nii sai ka olema 2025 TipiLANil. Kohale tulid nii Eesti kui ka naabruskonna tippmängijad. Konkurents oli võimas ning tekitas võimsaid emotsioone ja mälestusi. League of Legendsi turniir naaseb ka TipiLAN 2026 raames ning pakub rohkem pinget ja konkurentsi kui kunagi varem!",
|
||||||
"previousWinners": "VARASEMAD VÕITJAD"
|
"previousWinners": "VARASEMAD VÕITJAD"
|
||||||
},
|
},
|
||||||
"info": {
|
"info": {
|
||||||
|
|||||||
Reference in New Issue
Block a user