mirror of
https://github.com/Lapikud/tipilan.git
synced 2026-06-22 22:24:43 +00:00
Bunch of minor fixes
This commit is contained in:
@@ -30,7 +30,7 @@ export default async function Page({
|
||||
|
||||
return (
|
||||
<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">
|
||||
{/* Main content */}
|
||||
<div>
|
||||
@@ -41,50 +41,56 @@ export default async function Page({
|
||||
{t("rules.houseRules")}
|
||||
</h1>
|
||||
|
||||
<ReactMarkdown
|
||||
components={
|
||||
{
|
||||
h1: (props) => {
|
||||
const id =
|
||||
sections[headingCount]?.id || `section-${headingCount}`;
|
||||
headingCount++;
|
||||
return (
|
||||
<h1
|
||||
id={id}
|
||||
className={`${vipnagorgialla.className} font-bold italic text-2xl md:text-3xl text-white uppercase mb-4 mt-12 first:mt-0 scroll-mt-24 md:scroll-mt-28`}
|
||||
<div className="rules-markdown">
|
||||
<ReactMarkdown
|
||||
components={
|
||||
{
|
||||
h1: (props) => {
|
||||
const id =
|
||||
sections[headingCount]?.id || `section-${headingCount}`;
|
||||
headingCount++;
|
||||
return (
|
||||
<h1
|
||||
id={id}
|
||||
className={`${vipnagorgialla.className} font-bold italic text-2xl md:text-3xl text-white uppercase mb-4 mt-12 first:mt-0 scroll-mt-24 md:scroll-mt-28`}
|
||||
>
|
||||
{props.children}
|
||||
</h1>
|
||||
);
|
||||
},
|
||||
h2: (props) => (
|
||||
<h2
|
||||
className={`${vipnagorgialla.className} font-bold italic text-xl text-white uppercase mb-2 mt-6`}
|
||||
>
|
||||
{props.children}
|
||||
</h1>
|
||||
);
|
||||
},
|
||||
h2: (props) => (
|
||||
<h2
|
||||
className={`${vipnagorgialla.className} font-bold italic text-xl text-white uppercase mb-2 mt-6`}
|
||||
>
|
||||
{props.children}
|
||||
</h2>
|
||||
),
|
||||
ol: (props) => (
|
||||
<ol className="list-decimal list-inside text-white mb-4">
|
||||
{props.children}
|
||||
</ol>
|
||||
),
|
||||
ul: (props) => (
|
||||
<ul className="list-disc list-inside text-white mb-4">
|
||||
{props.children}
|
||||
</ul>
|
||||
),
|
||||
p: (props) => (
|
||||
<p className="text-white mb-4">{props.children}</p>
|
||||
),
|
||||
li: (props) => (
|
||||
<li className="text-white mb-2">{props.children}</li>
|
||||
),
|
||||
} as Components
|
||||
}
|
||||
>
|
||||
{content}
|
||||
</ReactMarkdown>
|
||||
</h2>
|
||||
),
|
||||
ol: (props) => (
|
||||
<ol className="text-white mb-4 leading-[19px]">
|
||||
{props.children}
|
||||
</ol>
|
||||
),
|
||||
ul: (props) => (
|
||||
<ul className="list-disc list-inside text-white mb-4 leading-[19px]">
|
||||
{props.children}
|
||||
</ul>
|
||||
),
|
||||
p: (props) => (
|
||||
<p className="text-white mb-4 leading-[19px]">
|
||||
{props.children}
|
||||
</p>
|
||||
),
|
||||
li: (props) => (
|
||||
<li className="text-white mb-2 leading-[19px]">
|
||||
{props.children}
|
||||
</li>
|
||||
),
|
||||
} as Components
|
||||
}
|
||||
>
|
||||
{content}
|
||||
</ReactMarkdown>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Sidebar navigation */}
|
||||
|
||||
@@ -79,7 +79,7 @@ function TicketCard({
|
||||
</ul>
|
||||
<Link href={buttonHref} target="_blank">
|
||||
<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}
|
||||
</button>
|
||||
|
||||
@@ -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-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">
|
||||
{/* Main content */}
|
||||
<div>
|
||||
@@ -46,14 +46,14 @@ export default async function CS2Tournament({
|
||||
<Link
|
||||
href="https://fienta.com/et/tipilan"
|
||||
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")}
|
||||
</Link>
|
||||
<Link
|
||||
href="https://git.edunaut.ee/slunk/TipiLAN_reeglistik_ruleset/src/branch/main/CS2%20tournament"
|
||||
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")}
|
||||
</Link>
|
||||
@@ -66,7 +66,7 @@ export default async function CS2Tournament({
|
||||
>
|
||||
{t("cs2page.intro.title")}
|
||||
</h2>
|
||||
<p className="text-white mb-6">
|
||||
<p className="text-white mb-6 leading-[19px]">
|
||||
{t("cs2page.intro.description")}
|
||||
</p>
|
||||
|
||||
@@ -75,8 +75,8 @@ export default async function CS2Tournament({
|
||||
>
|
||||
{t("cs2page.intro.previousWinners")}
|
||||
</h3>
|
||||
<p className="text-white font-bold">2025</p>
|
||||
<ol className="text-white list-decimal list-inside mb-4">
|
||||
<p className="text-white font-bold leading-[19px]">2025</p>
|
||||
<ol className="text-white list-decimal list-inside mb-4 leading-[19px]">
|
||||
<li>RAID (Eesti)</li>
|
||||
<li>hypewrld (Läti)</li>
|
||||
<li>CSDIILIT (Soome/Eesti)</li>
|
||||
@@ -90,7 +90,9 @@ export default async function CS2Tournament({
|
||||
>
|
||||
{t("cs2page.info.title")}
|
||||
</h2>
|
||||
<p className="text-white">{t("cs2page.info.description")}</p>
|
||||
<p className="text-white leading-[19px]">
|
||||
{t("cs2page.info.description")}
|
||||
</p>
|
||||
</section>
|
||||
|
||||
{/* AUHINNAFOND */}
|
||||
@@ -106,7 +108,7 @@ export default async function CS2Tournament({
|
||||
>
|
||||
{t("cs2page.prizes.mainTitle")}
|
||||
</h3>
|
||||
<ul className="text-white mb-2">
|
||||
<ul className="text-white mb-2 leading-[19px]">
|
||||
<li>
|
||||
1. koht - 3000€, 600€ inimese kohta, 50% ehk 1/2
|
||||
auhinnafondist.
|
||||
@@ -120,7 +122,7 @@ export default async function CS2Tournament({
|
||||
auhinnafondist.
|
||||
</li>
|
||||
</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")}
|
||||
</p>
|
||||
|
||||
@@ -129,7 +131,7 @@ export default async function CS2Tournament({
|
||||
>
|
||||
{t("cs2page.prizes.secondTitle")}
|
||||
</h3>
|
||||
<ul className="text-white mb-2">
|
||||
<ul className="text-white mb-2 leading-[19px]">
|
||||
<li>
|
||||
1. koht - 500€, 100€ inimese kohta, 66.6...(6)% ehk 2/3
|
||||
auhinnafondist.
|
||||
@@ -139,7 +141,7 @@ export default async function CS2Tournament({
|
||||
auhinnafondist.
|
||||
</li>
|
||||
</ul>
|
||||
<p className="text-white/80 text-sm">
|
||||
<p className="text-white/80 text-sm leading-[19px]">
|
||||
{t("cs2page.prizes.secondNote")}
|
||||
</p>
|
||||
</section>
|
||||
@@ -151,11 +153,15 @@ export default async function CS2Tournament({
|
||||
>
|
||||
{t("cs2page.format.title")}
|
||||
</h2>
|
||||
<p className="text-white mb-4">
|
||||
<p className="text-white mb-4 leading-[19px]">
|
||||
{t("cs2page.format.description")}
|
||||
</p>
|
||||
<p className="text-white">{t("cs2page.format.day1")}</p>
|
||||
<p className="text-white">{t("cs2page.format.day23")}</p>
|
||||
<p className="text-white leading-[19px]">
|
||||
{t("cs2page.format.day1")}
|
||||
</p>
|
||||
<p className="text-white leading-[19px]">
|
||||
{t("cs2page.format.day23")}
|
||||
</p>
|
||||
</section>
|
||||
|
||||
{/* VRS INFO */}
|
||||
@@ -165,8 +171,12 @@ export default async function CS2Tournament({
|
||||
>
|
||||
{t("cs2page.vrs.title")}
|
||||
</h2>
|
||||
<p className="text-white mb-4">{t("cs2page.vrs.description1")}</p>
|
||||
<p className="text-white">{t("cs2page.vrs.description2")}</p>
|
||||
<p className="text-white mb-4 leading-[19px]">
|
||||
{t("cs2page.vrs.description1")}
|
||||
</p>
|
||||
<p className="text-white leading-[19px]">
|
||||
{t("cs2page.vrs.description2")}
|
||||
</p>
|
||||
</section>
|
||||
|
||||
{/* FAQ - commented out until content is ready
|
||||
@@ -194,19 +204,23 @@ export default async function CS2Tournament({
|
||||
>
|
||||
{t("cs2page.rules.title")}
|
||||
</h2>
|
||||
<p className="text-white mb-6">
|
||||
<p className="text-white mb-6 leading-[19px]">
|
||||
{t("cs2page.rules.description")}
|
||||
</p>
|
||||
|
||||
<RulesContent sections={t.raw("cs2page.rules.sections")} />
|
||||
|
||||
<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">
|
||||
{t("cs2page.rules.contactName")}
|
||||
</p>
|
||||
<p className="text-white">{t("cs2page.rules.contactRole")}</p>
|
||||
<p className="text-white">
|
||||
<p className="text-white leading-[19px]">
|
||||
{t("cs2page.rules.contactRole")}
|
||||
</p>
|
||||
<p className="text-white leading-[19px]">
|
||||
Discord:{" "}
|
||||
<a
|
||||
href="https://discord.com/users/292372329747710013"
|
||||
|
||||
@@ -29,7 +29,7 @@ export default async function LoLTournament({
|
||||
|
||||
return (
|
||||
<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">
|
||||
{/* Main content */}
|
||||
<div>
|
||||
@@ -45,7 +45,7 @@ export default async function LoLTournament({
|
||||
<Link
|
||||
href="https://fienta.com/et/tipilan"
|
||||
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")}
|
||||
</Link>
|
||||
@@ -58,7 +58,7 @@ export default async function LoLTournament({
|
||||
>
|
||||
{t("lolpage.intro.title")}
|
||||
</h2>
|
||||
<p className="text-white mb-6">
|
||||
<p className="text-white mb-6 leading-[19px]">
|
||||
{t("lolpage.intro.description")}
|
||||
</p>
|
||||
|
||||
@@ -67,8 +67,8 @@ export default async function LoLTournament({
|
||||
>
|
||||
{t("lolpage.intro.previousWinners")}
|
||||
</h3>
|
||||
<p className="text-white font-bold">2025</p>
|
||||
<ol className="text-white list-decimal list-inside mb-4">
|
||||
<p className="text-white font-bold leading-[19px]">2025</p>
|
||||
<ol className="text-white list-decimal list-inside mb-4 leading-[19px]">
|
||||
<li>Ükssilm (Eesti)</li>
|
||||
<li>Eesti Rästikud (Eesti)</li>
|
||||
<li>LOMiks (Läti)</li>
|
||||
@@ -82,7 +82,9 @@ export default async function LoLTournament({
|
||||
>
|
||||
{t("lolpage.info.title")}
|
||||
</h2>
|
||||
<p className="text-white">{t("lolpage.info.description")}</p>
|
||||
<p className="text-white leading-[19px]">
|
||||
{t("lolpage.info.description")}
|
||||
</p>
|
||||
</section>
|
||||
|
||||
{/* AUHINNAFOND */}
|
||||
@@ -98,12 +100,12 @@ export default async function LoLTournament({
|
||||
>
|
||||
{t("lolpage.prizes.mainTitle")}
|
||||
</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.place2")}</li>
|
||||
<li>{t("lolpage.prizes.place3")}</li>
|
||||
</ul>
|
||||
<p className="text-white/80 text-sm">
|
||||
<p className="text-white/80 text-sm leading-[19px]">
|
||||
{t("lolpage.prizes.note")}
|
||||
</p>
|
||||
</section>
|
||||
@@ -115,11 +117,15 @@ export default async function LoLTournament({
|
||||
>
|
||||
{t("lolpage.format.title")}
|
||||
</h2>
|
||||
<p className="text-white mb-4">
|
||||
<p className="text-white mb-4 leading-[19px]">
|
||||
{t("lolpage.format.description")}
|
||||
</p>
|
||||
<p className="text-white">{t("lolpage.format.day1")}</p>
|
||||
<p className="text-white">{t("lolpage.format.day2")}</p>
|
||||
<p className="text-white leading-[19px]">
|
||||
{t("lolpage.format.day1")}
|
||||
</p>
|
||||
<p className="text-white leading-[19px]">
|
||||
{t("lolpage.format.day2")}
|
||||
</p>
|
||||
</section>
|
||||
|
||||
{/* FAQ - commented out until content is ready
|
||||
@@ -147,19 +153,23 @@ export default async function LoLTournament({
|
||||
>
|
||||
{t("lolpage.rules.title")}
|
||||
</h2>
|
||||
<p className="text-white mb-6">
|
||||
<p className="text-white mb-6 leading-[19px]">
|
||||
{t("lolpage.rules.description")}
|
||||
</p>
|
||||
|
||||
<RulesContent sections={t.raw("lolpage.rules.sections")} />
|
||||
|
||||
<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">
|
||||
{t("lolpage.rules.contactName")}
|
||||
</p>
|
||||
<p className="text-white">{t("lolpage.rules.contactRole")}</p>
|
||||
<p className="text-white">
|
||||
<p className="text-white leading-[19px]">
|
||||
{t("lolpage.rules.contactRole")}
|
||||
</p>
|
||||
<p className="text-white leading-[19px]">
|
||||
Discord:{" "}
|
||||
<a
|
||||
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 {
|
||||
font-variation-settings:
|
||||
"FILL" 1,
|
||||
|
||||
@@ -40,8 +40,11 @@ const Header = ({ navItems }: HeaderProps) => {
|
||||
const pathname = usePathname();
|
||||
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
|
||||
|
||||
// Header navigation should include all options except homepage
|
||||
const mainNavItems = navItems.filter((item) => item.href !== "/");
|
||||
// Header navigation should include all options except homepage and hidden items
|
||||
const hiddenNavHrefs: NavItem["href"][] = ["/messiala", "/ajakava"];
|
||||
const mainNavItems = navItems.filter(
|
||||
(item) => item.href !== "/" && !hiddenNavHrefs.includes(item.href),
|
||||
);
|
||||
const dropdownNavItems = mainNavItems;
|
||||
|
||||
const navIconByHref: Partial<Record<NavItem["href"], string>> = {
|
||||
@@ -86,16 +89,16 @@ const Header = ({ navItems }: HeaderProps) => {
|
||||
<Image
|
||||
src="/tipilan-icon-white.svg"
|
||||
alt="TipiLAN"
|
||||
width={49}
|
||||
width={40}
|
||||
height={40}
|
||||
className="h-10 w-auto"
|
||||
className="h-auto w-10"
|
||||
/>
|
||||
</Link>
|
||||
|
||||
{/* Right side - Navigation + controls */}
|
||||
<div className="flex items-center gap-12">
|
||||
{/* Desktop Navigation */}
|
||||
<nav className="hidden xl:flex items-center gap-12">
|
||||
<nav className="hidden xl:flex items-center gap-8">
|
||||
{mainNavItems.map((item) => {
|
||||
const isActive = pathname === item.href;
|
||||
|
||||
@@ -106,7 +109,7 @@ const Header = ({ navItems }: HeaderProps) => {
|
||||
aria-current={isActive ? "page" : undefined}
|
||||
aria-disabled={isActive ? true : 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
|
||||
? "bg-[#00A3E0] text-black cursor-default pointer-events-none"
|
||||
: "bg-[#1F5673] text-[#EEE5E5] hover:bg-[#00A3E0] hover:text-black"
|
||||
@@ -155,7 +158,7 @@ const Header = ({ navItems }: HeaderProps) => {
|
||||
>
|
||||
{isActive ? (
|
||||
<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]" : ""
|
||||
}`}
|
||||
>
|
||||
@@ -181,7 +184,7 @@ const Header = ({ navItems }: HeaderProps) => {
|
||||
) : (
|
||||
<Link
|
||||
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]" : ""
|
||||
}`}
|
||||
>
|
||||
|
||||
@@ -35,7 +35,7 @@ export default function HeroSection() {
|
||||
</div>
|
||||
<Link
|
||||
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")}
|
||||
</Link>
|
||||
|
||||
@@ -25,7 +25,7 @@ function RuleItem({
|
||||
}) {
|
||||
if (typeof rule === "string") {
|
||||
return (
|
||||
<li className="text-white mb-2">
|
||||
<li className="text-white mb-2 leading-[19px]">
|
||||
<span className="text-white mr-2">{index}.</span>
|
||||
{rule}
|
||||
</li>
|
||||
@@ -33,7 +33,7 @@ function RuleItem({
|
||||
}
|
||||
|
||||
return (
|
||||
<li className="text-white mb-3">
|
||||
<li className="text-white mb-3 leading-[19px]">
|
||||
<span className="text-white mr-2">{index}.</span>
|
||||
{rule.main}
|
||||
{rule.sub && rule.sub.length > 0 && (
|
||||
@@ -41,7 +41,7 @@ function RuleItem({
|
||||
{rule.sub.map((subRule, subIndex) => {
|
||||
if (typeof subRule === "string") {
|
||||
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">
|
||||
{index}.{subIndex + 1}.
|
||||
</span>
|
||||
@@ -50,7 +50,7 @@ function RuleItem({
|
||||
);
|
||||
}
|
||||
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">
|
||||
{index}.{subIndex + 1}.
|
||||
</span>
|
||||
@@ -58,7 +58,10 @@ function RuleItem({
|
||||
{subRule.sub && subRule.sub.length > 0 && (
|
||||
<ol className="ml-6 mt-1">
|
||||
{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">
|
||||
{index}.{subIndex + 1}.{subSubIndex + 1}.
|
||||
</span>
|
||||
|
||||
@@ -94,7 +94,7 @@ export default function TeaserCarousel() {
|
||||
return (
|
||||
<div className="border-b-3 border-[#1F5673]">
|
||||
{/* 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) => {
|
||||
const title = t(`${slide.key}.title`);
|
||||
const description = t(`${slide.key}.description`);
|
||||
@@ -172,7 +172,7 @@ export default function TeaserCarousel() {
|
||||
})}
|
||||
|
||||
{/* 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
|
||||
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>
|
||||
|
||||
{/* 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
|
||||
className="transition-[flex-grow] duration-700 ease-out"
|
||||
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.
|
||||
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
|
||||
2.2. This applies both on the event premises (IRL) and in online environments related to the event.
|
||||
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. 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.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.
|
||||
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.
|
||||
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.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.
|
||||
4.3. When finding lost items, please give them to the organizer or take them to *lost & found* (Merchandise table).
|
||||
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.
|
||||
2. If there is suspicion that theft has occurred, this must be immediately reported to the organizer.
|
||||
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.
|
||||
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.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.
|
||||
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.
|
||||
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
|
||||
2.2. See kehtib nii ürituse alal (IRL) kui ka üritusega seotud online-keskkondades.
|
||||
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. 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.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.
|
||||
1. Kui osalejal on ette nähtud korraldajapoolne majutus, siis majutusalal on osalejal kohustus olla vaikselt ning lubada kaaslastel puhata.
|
||||
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.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.
|
||||
4.3. Kaotatud asjade leidmisel palume anda need korraldajale või viia need *lost & found’i* (Merchilauda).
|
||||
1. Korraldajapoolne majutusala on lukustatav ning kõrvalisi isikuid sinna ei lubata, kuid sellest sõltumata tasub oma väärisesemetel silma peal hoida.
|
||||
2. Kui on tekkinud kahtlus, et on toimunud vargus, tuleb sellest koheselt teavitada korraldajat.
|
||||
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.
|
||||
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.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.
|
||||
9. Keelatud on igasugune hasartmäng nii raha kui muude hüvede peale.
|
||||
|
||||
|
||||
@@ -464,7 +464,7 @@
|
||||
},
|
||||
"intro": {
|
||||
"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"
|
||||
},
|
||||
"info": {
|
||||
|
||||
Reference in New Issue
Block a user