mirror of
https://github.com/Lapikud/tipilan.git
synced 2026-03-23 13:24:21 +00:00
@@ -3,6 +3,7 @@
|
|||||||
## Prerequisites
|
## Prerequisites
|
||||||
- Git
|
- Git
|
||||||
- Bun
|
- Bun
|
||||||
|
- If on Windows, it's recommended to use WSL (Windows Subsystem for Linux) and do the following steps there.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
@@ -48,6 +49,6 @@
|
|||||||
git push origin <branch-name>
|
git push origin <branch-name>
|
||||||
```
|
```
|
||||||
- Create a pull request:
|
- Create a pull request:
|
||||||
```bash
|
Go to Github,
|
||||||
git pull-request
|
open up this project's repository and make a new pull request.
|
||||||
```
|
```
|
||||||
|
|||||||
BIN
public/images/cs2_tournament.png
Normal file
BIN
public/images/cs2_tournament.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 MiB |
BIN
public/images/lol_tournament.png
Normal file
BIN
public/images/lol_tournament.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.3 MiB |
BIN
public/images/minitournament.png
Normal file
BIN
public/images/minitournament.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 MiB |
Binary file not shown.
|
Before Width: | Height: | Size: 928 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 5.7 MiB |
Binary file not shown.
|
Before Width: | Height: | Size: 6.5 MiB |
@@ -11,9 +11,9 @@ export default function Timetable() {
|
|||||||
const schedule = scheduleData[activeTab];
|
const schedule = scheduleData[activeTab];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col min-h-[90vh] p-6 sm:p-12 pt-18">
|
<div className="flex flex-col min-h-[90vh] m-6 mt-16 md:m-16">
|
||||||
<h1
|
<h1
|
||||||
className={`text-5xl sm:text-6xl ${vipnagorgialla.className} font-bold italic uppercase text-[#2A2C3F] dark:text-[#EEE5E5] mt-14 mb-8`}
|
className={`text-5xl sm:text-6xl ${vipnagorgialla.className} font-bold italic uppercase text-[#2A2C3F] dark:text-[#EEE5E5] mt-8 md:mt-16 mb-8`}
|
||||||
>
|
>
|
||||||
Ajakava
|
Ajakava
|
||||||
</h1>
|
</h1>
|
||||||
|
|||||||
@@ -4,11 +4,11 @@ export default function Rulebook() {
|
|||||||
return (
|
return (
|
||||||
<div className="flex flex-col min-h-[90vh] m-6 mt-16 md:m-16">
|
<div className="flex flex-col min-h-[90vh] m-6 mt-16 md:m-16">
|
||||||
<h1
|
<h1
|
||||||
className={`text-5xl sm:text-6xl ${vipnagorgialla.className} font-bold italic uppercase text-[#2A2C3F] dark:text-[#EEE5E5] mt-8 mb-4`}
|
className={`text-4xl md:text-5xl lg:text-6xl ${vipnagorgialla.className} font-bold italic text-[#2A2C3F] dark:text-[#EEE5E5] mt-8 md:mt-16 mb-4 uppercase`}
|
||||||
>
|
>
|
||||||
Kodukord
|
Kodukord
|
||||||
</h1>
|
</h1>
|
||||||
<ol className="list-decimal ml-6 text-xl text-[#2A2C3F] dark:text-[#EEE5E5] y-4">
|
<ol className="list-decimal ml-6 md:text-xl text-[#2A2C3F] dark:text-[#EEE5E5] y-4">
|
||||||
<li>
|
<li>
|
||||||
Keelatud on:
|
Keelatud on:
|
||||||
<ol className="list-[lower-alpha] ml-6 y-2">
|
<ol className="list-[lower-alpha] ml-6 y-2">
|
||||||
@@ -54,7 +54,7 @@ export default function Rulebook() {
|
|||||||
vanusepiirangutest
|
vanusepiirangutest
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
<p className="text-xl text-[#2A2C3F] dark:text-[#EEE5E5] y-4 mt-4">
|
<p className="md:text-xl text-[#2A2C3F] dark:text-[#EEE5E5] y-4 mt-4">
|
||||||
NB! Reeglite rikkumise puhul on korraldajatel õigus mängija (koos tema
|
NB! Reeglite rikkumise puhul on korraldajatel õigus mängija (koos tema
|
||||||
meeskonnaga) eemaldada ja rakendada edasist keeldu TipiLAN-i üritustelt.
|
meeskonnaga) eemaldada ja rakendada edasist keeldu TipiLAN-i üritustelt.
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -3,15 +3,26 @@
|
|||||||
import { vipnagorgialla } from "@/components/Vipnagorgialla";
|
import { vipnagorgialla } from "@/components/Vipnagorgialla";
|
||||||
import * as THREE from "three";
|
import * as THREE from "three";
|
||||||
import { useEffect, useRef, useState } from "react";
|
import { useEffect, useRef, useState } from "react";
|
||||||
|
import { EyeClosed, Eye } from "lucide-react";
|
||||||
|
|
||||||
|
// Define interface for the ref with toggle function
|
||||||
|
interface MountRefCurrent extends HTMLDivElement {
|
||||||
|
toggleDividers?: (show: boolean) => void;
|
||||||
|
}
|
||||||
|
|
||||||
export default function Expo() {
|
export default function Expo() {
|
||||||
const mountRef = useRef<HTMLDivElement>(null);
|
const mountRef = useRef<MountRefCurrent | null>(null);
|
||||||
const [hoveredRoom, setHoveredRoom] = useState<string | null>(null);
|
const [hoveredRoom, setHoveredRoom] = useState<string | null>(null);
|
||||||
const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 });
|
const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 });
|
||||||
|
const [showDividers, setShowDividers] = useState<boolean>(true);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!mountRef.current) return;
|
if (!mountRef.current) return;
|
||||||
|
|
||||||
|
// Copy ref to variable to avoid stale closure in cleanup
|
||||||
|
const mountElement = mountRef.current;
|
||||||
|
let dividersRef: THREE.Mesh[] = [];
|
||||||
|
|
||||||
// Scene setup
|
// Scene setup
|
||||||
const scene = new THREE.Scene();
|
const scene = new THREE.Scene();
|
||||||
scene.background = new THREE.Color(0x0e0f19);
|
scene.background = new THREE.Color(0x0e0f19);
|
||||||
@@ -53,7 +64,7 @@ export default function Expo() {
|
|||||||
renderer.setSize(width, height);
|
renderer.setSize(width, height);
|
||||||
renderer.shadowMap.enabled = true;
|
renderer.shadowMap.enabled = true;
|
||||||
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
|
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
|
||||||
mountRef.current.appendChild(renderer.domElement);
|
mountElement.appendChild(renderer.domElement);
|
||||||
|
|
||||||
// Raycaster for mouse interactions
|
// Raycaster for mouse interactions
|
||||||
const raycaster = new THREE.Raycaster();
|
const raycaster = new THREE.Raycaster();
|
||||||
@@ -99,6 +110,7 @@ export default function Expo() {
|
|||||||
originalColor: number;
|
originalColor: number;
|
||||||
originalScale: THREE.Vector3;
|
originalScale: THREE.Vector3;
|
||||||
}> = [];
|
}> = [];
|
||||||
|
const dividers: THREE.Mesh[] = [];
|
||||||
|
|
||||||
// Define rooms with custom positions, sizes and colors
|
// Define rooms with custom positions, sizes and colors
|
||||||
const roomDefinitions = [
|
const roomDefinitions = [
|
||||||
@@ -130,11 +142,11 @@ export default function Expo() {
|
|||||||
name: roomNames[2],
|
name: roomNames[2],
|
||||||
}, // EVAL
|
}, // EVAL
|
||||||
{
|
{
|
||||||
width: 2,
|
width: 2.2,
|
||||||
height: 0.7,
|
height: 0.7,
|
||||||
depth: 4,
|
depth: 4.5,
|
||||||
x: 5,
|
x: 5,
|
||||||
z: -1.7,
|
z: -2,
|
||||||
color: roomColors[3],
|
color: roomColors[3],
|
||||||
name: roomNames[3],
|
name: roomNames[3],
|
||||||
}, // Redbull
|
}, // Redbull
|
||||||
@@ -193,6 +205,35 @@ export default function Expo() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Create toggleable room dividers
|
||||||
|
const createTogglableDivider = (
|
||||||
|
width: number,
|
||||||
|
height: number,
|
||||||
|
depth: number,
|
||||||
|
x: number,
|
||||||
|
z: number,
|
||||||
|
) => {
|
||||||
|
const wallGeometry = new THREE.BoxGeometry(width, height, depth);
|
||||||
|
const wallMaterial = new THREE.MeshLambertMaterial({
|
||||||
|
color: 0x555555,
|
||||||
|
transparent: true,
|
||||||
|
opacity: 0,
|
||||||
|
});
|
||||||
|
|
||||||
|
const wall = new THREE.Mesh(wallGeometry, wallMaterial);
|
||||||
|
wall.position.set(x, height / 2, z);
|
||||||
|
wall.visible = false;
|
||||||
|
scene.add(wall);
|
||||||
|
dividers.push(wall);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Add strategic dividers between major areas
|
||||||
|
createTogglableDivider(10, 2, 2, -2.5, 1.5); // Wall between main entrance
|
||||||
|
createTogglableDivider(2, 2, 2, 5.5, 1.5); // Wall right next to Mänguklubi & Redbull
|
||||||
|
|
||||||
|
// Store dividers reference for later access
|
||||||
|
dividersRef = [...dividers];
|
||||||
|
|
||||||
// Ground plane
|
// Ground plane
|
||||||
const groundGeometry = new THREE.PlaneGeometry(14, 10.5);
|
const groundGeometry = new THREE.PlaneGeometry(14, 10.5);
|
||||||
const groundMaterial = new THREE.MeshLambertMaterial({ color: 0xcccccc });
|
const groundMaterial = new THREE.MeshLambertMaterial({ color: 0xcccccc });
|
||||||
@@ -205,7 +246,9 @@ export default function Expo() {
|
|||||||
|
|
||||||
// Second ground plane
|
// Second ground plane
|
||||||
const groundGeometry2 = new THREE.PlaneGeometry(2, 7);
|
const groundGeometry2 = new THREE.PlaneGeometry(2, 7);
|
||||||
const groundMaterial2 = new THREE.MeshLambertMaterial({ color: 0xcccccc });
|
const groundMaterial2 = new THREE.MeshLambertMaterial({
|
||||||
|
color: 0xcccccc,
|
||||||
|
});
|
||||||
const ground2 = new THREE.Mesh(groundGeometry2, groundMaterial2);
|
const ground2 = new THREE.Mesh(groundGeometry2, groundMaterial2);
|
||||||
ground2.rotation.x = -Math.PI / 2;
|
ground2.rotation.x = -Math.PI / 2;
|
||||||
ground2.position.x = -12.2;
|
ground2.position.x = -12.2;
|
||||||
@@ -294,21 +337,41 @@ export default function Expo() {
|
|||||||
|
|
||||||
animate();
|
animate();
|
||||||
|
|
||||||
|
// Function to toggle dividers
|
||||||
|
const toggleDividers = (show: boolean) => {
|
||||||
|
dividersRef.forEach((divider) => {
|
||||||
|
divider.visible = show;
|
||||||
|
(divider.material as THREE.MeshLambertMaterial).opacity = show
|
||||||
|
? 0.4
|
||||||
|
: 0;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// Expose toggle function to parent scope
|
||||||
|
mountElement.toggleDividers = toggleDividers;
|
||||||
|
|
||||||
// Cleanup
|
// Cleanup
|
||||||
return () => {
|
return () => {
|
||||||
window.removeEventListener("resize", handleResize);
|
window.removeEventListener("resize", handleResize);
|
||||||
renderer.domElement.removeEventListener("mousemove", onMouseMove);
|
renderer.domElement.removeEventListener("mousemove", onMouseMove);
|
||||||
if (mountRef.current && renderer.domElement) {
|
if (mountElement && renderer.domElement) {
|
||||||
mountRef.current.removeChild(renderer.domElement);
|
mountElement.removeChild(renderer.domElement);
|
||||||
}
|
}
|
||||||
renderer.dispose();
|
renderer.dispose();
|
||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
// Update dividers when showDividers state changes
|
||||||
|
useEffect(() => {
|
||||||
|
if (mountRef.current?.toggleDividers) {
|
||||||
|
mountRef.current.toggleDividers(showDividers);
|
||||||
|
}
|
||||||
|
}, [showDividers]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col min-h-[90vh] m-6 mt-16 md:m-16">
|
<div className="flex flex-col min-h-[90vh] m-6 mt-16 md:m-16">
|
||||||
<h1
|
<h1
|
||||||
className={`text-5xl sm:text-6xl ${vipnagorgialla.className} font-bold italic uppercase text-[#2A2C3F] dark:text-[#EEE5E5] mt-8 mb-4`}
|
className={`text-4xl md:text-5xl lg:text-6xl ${vipnagorgialla.className} font-bold italic text-[#2A2C3F] dark:text-[#EEE5E5] mt-8 md:mt-16 mb-4 uppercase`}
|
||||||
>
|
>
|
||||||
Messiala
|
Messiala
|
||||||
</h1>
|
</h1>
|
||||||
@@ -316,7 +379,7 @@ export default function Expo() {
|
|||||||
<h2 className="text-2xl text-[#2A2C3F] dark:text-[#EEE5E5] mb-3">
|
<h2 className="text-2xl text-[#2A2C3F] dark:text-[#EEE5E5] mb-3">
|
||||||
Tudengimaja
|
Tudengimaja
|
||||||
</h2>
|
</h2>
|
||||||
<div className="flex flex-wrap gap-4">
|
<div className="flex flex-wrap gap-4 pb-4">
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
<div
|
<div
|
||||||
className="w-4 h-4 border border-gray-300"
|
className="w-4 h-4 border border-gray-300"
|
||||||
@@ -381,10 +444,22 @@ export default function Expo() {
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div className="flex flex-col lg:flex-row gap-8 items-start">
|
||||||
<div className="flex flex-col lg:flex-row gap-8 items-start">
|
<div className="flex-shrink-0 border-3 border-[#1F5673] w-full max-w-[800px] relative">
|
||||||
<div className="flex-shrink-0 border-3 border-[#1F5673] w-full max-w-[800px]">
|
<div ref={mountRef} className="w-full" />
|
||||||
<div ref={mountRef} className="w-full" />
|
<button
|
||||||
|
onClick={() => setShowDividers(!showDividers)}
|
||||||
|
className={`absolute top-2 right-2 px-3 py-2 bg-[#1F5673] text-white hover:bg-[#2A7A9B] ${vipnagorgialla.className} uppercase italic text-sm font-semibold flex items-center transition-colors shadow-lg z-10`}
|
||||||
|
>
|
||||||
|
{showDividers ? (
|
||||||
|
<EyeClosed className="w-6 h-6 mr-2" />
|
||||||
|
) : (
|
||||||
|
<Eye className="w-6 h-6 mr-2" />
|
||||||
|
)}
|
||||||
|
|
||||||
|
{showDividers ? "Peida" : "Näita"}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Tooltip */}
|
{/* Tooltip */}
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
import { vipnagorgialla } from "@/components/Vipnagorgialla";
|
import { vipnagorgialla } from "@/components/Vipnagorgialla";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
import Image from "next/image";
|
||||||
|
|
||||||
export default function Tourney() {
|
export default function Tourney() {
|
||||||
const headingStyle = `text-5xl sm:text-6xl ${vipnagorgialla.className} font-bold italic uppercase text-[#2A2C3F] dark:text-[#EEE5E5]`;
|
const headingStyle = `text-3xl md:text-5xl lg:text-5xl ${vipnagorgialla.className} font-bold italic uppercase text-[#2A2C3F] dark:text-[#EEE5E5] -skew-x-2 md:-skew-x-5`;
|
||||||
|
|
||||||
const SectionDivider = () => <div className="border-b-[3px] border-[#1F5673] w-full" />;
|
const SectionDivider = () => <hr className="border-t-[3px] border-[#1F5673]" />;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col min-h-[90vh] mt-16">
|
<div className="flex flex-col min-h-[90vh] mt-16">
|
||||||
<div className={"md:m-16"}>
|
|
||||||
<h1
|
<h1
|
||||||
className={`${headingStyle}`}
|
className={`text-4xl md:text-5xl lg:text-6xl ${vipnagorgialla.className} font-bold italic uppercase text-[#2A2C3F] dark:text-[#EEE5E5] mt-8 md:mt-16 mb-4 m-6 md:m-16`}
|
||||||
>
|
>
|
||||||
Turniirid
|
Turniirid
|
||||||
</h1>
|
</h1>
|
||||||
@@ -19,28 +19,29 @@ export default function Tourney() {
|
|||||||
{/* Kui tahate oma oskusi proovile panna, siis vaadake siia tagasi! Rohkem*/}
|
{/* Kui tahate oma oskusi proovile panna, siis vaadake siia tagasi! Rohkem*/}
|
||||||
{/* infot lähiajal.*/}
|
{/* infot lähiajal.*/}
|
||||||
{/*</p>*/}
|
{/*</p>*/}
|
||||||
|
<div className="flex flex-col gap-8 md:gap-16">
|
||||||
<div className={"flex flex-row flex-wrap gap-8 md:gap-38"}>
|
{/* CS2 turniir */}
|
||||||
<div className={"-skew-x-2 md:-skew-x-5 pl-4 md:pl-28 md:w-180"}>
|
<div className="grid grid-cols-1 md:grid-cols-2 gap-8 md:gap-16 items-center mx-8 md:mx-16 lg:mx-32 xl:mx-48">
|
||||||
<h2 className={`${headingStyle} mt-12`}>
|
<div className="-skew-x-2 md:-skew-x-5">
|
||||||
|
<h2 className={`${headingStyle}`}>
|
||||||
CS2 turniir
|
CS2 turniir
|
||||||
</h2>
|
</h2>
|
||||||
<p className={"text-xs mb-4 text-neutral-500"}>
|
<p className={"text-2xl mb-4 text-neutral-500"}>
|
||||||
Toimumisaeg veel selgumisel
|
Toimumisaeg veel selgumisel
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p className="text-balance">
|
||||||
TipiLANil toimub Eesti ühe suurima auhinnafondiga CS2 turniire juba sel sügisel. Haara kaasa
|
TipiLANil toimub Eesti ühe suurima auhinnafondiga CS2 turniire juba sel sügisel. Haara kaasa
|
||||||
sõbrad ja
|
sõbrad ja
|
||||||
saa osa adrenaliinirohkest kogemusest!
|
saa osa adrenaliinirohkest kogemusest!
|
||||||
</p>
|
</p>
|
||||||
<br />
|
<br />
|
||||||
<p>
|
<p className="text-balance">
|
||||||
Auhinnafond on suuruses 5250€, mis jaotatakse TOP3 meeskonna vahel ära. Iga tiimiliige saab
|
Auhinnafond on suuruses 5250€, mis jaotatakse TOP3 meeskonna vahel ära. Iga tiimiliige saab
|
||||||
vastavalt
|
vastavalt
|
||||||
saavutatud kohale auhinnaks kas 600€, 300€ või 150€.
|
saavutatud kohale auhinnaks kas 600€, 300€ või 150€.
|
||||||
</p>
|
</p>
|
||||||
<br />
|
<br />
|
||||||
<div className={"flex flex-row flex-wrap gap-8"}>
|
<div className="flex flex-row flex-wrap gap-4 md:gap-8">
|
||||||
<Link href="/kodukord" target="_blank">
|
<Link href="/kodukord" target="_blank">
|
||||||
<button
|
<button
|
||||||
className={`px-4 py-2 bg-[#1F5673] cursor-pointer ${vipnagorgialla.className} font-bold italic`}
|
className={`px-4 py-2 bg-[#1F5673] cursor-pointer ${vipnagorgialla.className} font-bold italic`}
|
||||||
@@ -48,98 +49,132 @@ export default function Tourney() {
|
|||||||
LOE REEGLEID
|
LOE REEGLEID
|
||||||
</button>
|
</button>
|
||||||
</Link>
|
</Link>
|
||||||
<Link href="https://fienta.com/et/tipilan" target="_blank">
|
<a href="https://fienta.com/et/tipilan" target="_blank">
|
||||||
<button
|
<button
|
||||||
className={`px-4 py-2 bg-[#007CAB] cursor-pointer ${vipnagorgialla.className} font-bold italic`}
|
className={`px-4 py-2 bg-[#007CAB] cursor-pointer ${vipnagorgialla.className} font-bold italic`}
|
||||||
>
|
>
|
||||||
OSTA PILET
|
OSTA PILET
|
||||||
</button>
|
</button>
|
||||||
</Link>
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="hidden md:block">
|
||||||
|
<div className="-skew-x-2 md:-skew-x-5">
|
||||||
|
{/* Image needs to be the div that has the skew. Outside div needs to remain so that overflow wont occur*/}
|
||||||
|
<Image
|
||||||
|
src="/images/cs2_tournament.png"
|
||||||
|
alt="CS2 tournament"
|
||||||
|
width={600}
|
||||||
|
height={400}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<SectionDivider />
|
<SectionDivider />
|
||||||
|
|
||||||
<div className={"flex flex-row gap-8 md:gap-38 mt-8 mb-12"}>
|
{/* LoL turniir */}
|
||||||
<div className={"pl-4 md:pl-40 md:w-180"}></div>
|
<div className="grid grid-cols-1 md:grid-cols-2 gap-8 md:gap-16 items-center mx-8 md:mx-16 lg:mx-32 xl:mx-48">
|
||||||
{/* Image placeholder */}
|
<div className="hidden md:block">
|
||||||
<div className={"-skew-x-2 md:-skew-x-5 flex-auto md:w-180 pr-4 md:pr-42 text-right"}>
|
<div className="-skew-x-2 md:-skew-x-5">
|
||||||
<h2 className={`${headingStyle}`}>
|
{/* Image needs to be the div that has the skew. Outside div needs to remain so that overflow wont occur*/}
|
||||||
LoL turniir
|
<Image
|
||||||
</h2>
|
src="/images/lol_tournament.png"
|
||||||
<p className={"text-xs mb-4 text-neutral-500"}>
|
alt="LoL tournament"
|
||||||
Toimumisaeg veel selgumisel
|
width={600}
|
||||||
</p>
|
height={400}
|
||||||
<p>
|
/>
|
||||||
TipiLANil toimub Eesti ühe suurima auhinnafondiga LoL turniire juba sel sügisel.
|
</div>
|
||||||
Haara kaasa sõbrad ja saa osa adrenaliinirohkest kogemusest!
|
</div>
|
||||||
</p>
|
<div className="flex-auto text-right -skew-x-2 md:-skew-x-5">
|
||||||
<br />
|
<h2 className={`${headingStyle}`}>
|
||||||
<p>
|
LoL turniir
|
||||||
Auhinnafond on suuruses 3500€, mis jaotatakse TOP3 meeskonna vahel ära. Iga tiimiliige saab
|
</h2>
|
||||||
vastavalt saavutatud kohale auhinnaks kas 400€, 200€ või 100€.
|
<p className={"text-2xl mb-4 text-neutral-500"}>
|
||||||
</p>
|
Toimumisaeg veel selgumisel
|
||||||
<br />
|
</p>
|
||||||
<div className="flex flex-row flex-wrap gap-8 justify-end">
|
<p className="text-balance">
|
||||||
<Link href="/kodukord" target="_blank">
|
TipiLANil toimub Eesti ühe suurima auhinnafondiga LoL turniire juba sel sügisel.
|
||||||
<button
|
Haara kaasa sõbrad ja saa osa adrenaliinirohkest kogemusest!
|
||||||
className={`px-4 py-2 bg-[#1F5673] cursor-pointer ${vipnagorgialla.className} font-bold italic`}
|
</p>
|
||||||
>
|
<br />
|
||||||
LOE REEGLEID
|
<p className="text-balance">
|
||||||
</button>
|
Auhinnafond on suuruses 3500€, mis jaotatakse TOP3 meeskonna vahel ära. Iga tiimiliige saab
|
||||||
</Link>
|
vastavalt saavutatud kohale auhinnaks kas 400€, 200€ või 100€.
|
||||||
<Link href="https://fienta.com/et/tipilan" target="_blank">
|
</p>
|
||||||
<button
|
<br />
|
||||||
className={`px-4 py-2 bg-[#007CAB] cursor-pointer ${vipnagorgialla.className} font-bold italic`}
|
<div className="flex flex-row flex-wrap gap-4 md:gap-8 justify-end">
|
||||||
>
|
<Link href="/kodukord" target="_blank">
|
||||||
OSTA PILET
|
<button
|
||||||
</button>
|
className={`px-4 py-2 bg-[#1F5673] cursor-pointer ${vipnagorgialla.className} font-bold italic`}
|
||||||
</Link>
|
>
|
||||||
|
LOE REEGLEID
|
||||||
|
</button>
|
||||||
|
</Link>
|
||||||
|
<a href="https://fienta.com/et/tipilan" target="_blank">
|
||||||
|
<button
|
||||||
|
className={`px-4 py-2 bg-[#007CAB] cursor-pointer ${vipnagorgialla.className} font-bold italic`}
|
||||||
|
>
|
||||||
|
OSTA PILET
|
||||||
|
</button>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<SectionDivider />
|
<SectionDivider />
|
||||||
|
|
||||||
<div className={"-skew-x-2 md:-skew-x-5 pl-4 md:pl-40 md:w-180 mt-8 mb-12"}>
|
{/* Mini-turniirid */}
|
||||||
<h2 className={`${headingStyle}`}>
|
<div className="grid grid-cols-1 md:grid-cols-2 gap-8 md:gap-16 items-center mx-8 md:mx-16 lg:mx-32 xl:mx-48">
|
||||||
Miniturniirid
|
<div className="-skew-x-2 md:-skew-x-5">
|
||||||
</h2>
|
<h2 className={`${headingStyle}`}>
|
||||||
<p className={"text-xs mb-4 text-neutral-500"}>
|
Mini­turniirid
|
||||||
Toimumisaeg veel selgumisel
|
</h2>
|
||||||
</p>
|
<p className={"text-2xl mb-4 text-neutral-500"}>
|
||||||
<p>
|
Toimumisaeg veel selgumisel
|
||||||
TipiLANil toimub mitmeid erinevaid lõbusaid ja võistlushimu tekitavaid miniturniire.
|
</p>
|
||||||
Miniturniirid toimuvad järgnevates mängudes: Tetris, SimRacing, Tekken. FIFA, Minecraft Bedwards,
|
<p className="text-balance">
|
||||||
Buckshot Roulette, LostGamer.
|
TipiLANil toimub mitmeid erinevaid lõbusaid ja võistlushimu tekitavaid miniturniire.
|
||||||
</p>
|
Miniturniirid toimuvad järgnevates mängudes: SimRacing, Tekken, FIFA, Minecraft Bedwars,
|
||||||
<br />
|
Buckshot Roulette, LostGamer ja palju muud.
|
||||||
<p>
|
</p>
|
||||||
Auhinnafond on kõigi turniiride peale 1250€ ja reeglina saab rahalise auhinna miniturniiri võitja.
|
<br />
|
||||||
</p>
|
<p className="text-balance">
|
||||||
<br />
|
Auhinnafond on kõigi turniiride peale 1250€ ja reeglina saab rahalise auhinna miniturniiri võitja.
|
||||||
<div className={"flex flex-row flex-wrap gap-8"}>
|
</p>
|
||||||
<Link href="/kodukord" target="_blank">
|
<br />
|
||||||
<button
|
<div className="flex flex-row flex-wrap gap-4 md:gap-8">
|
||||||
className={`px-4 py-2 bg-[#1F5673] cursor-pointer ${vipnagorgialla.className} font-bold italic`}
|
<Link href="/kodukord" target="_blank">
|
||||||
>
|
<button
|
||||||
LOE REEGLEID
|
className={`px-4 py-2 bg-[#1F5673] cursor-pointer ${vipnagorgialla.className} font-bold italic`}
|
||||||
</button>
|
>
|
||||||
</Link>
|
LOE REEGLEID
|
||||||
<Link href="https://fienta.com/et/tipilan" target="_blank">
|
</button>
|
||||||
<button
|
</Link>
|
||||||
className={`px-4 py-2 bg-[#007CAB] cursor-pointer ${vipnagorgialla.className} font-bold italic`}
|
<a href="https://fienta.com/et/tipilan" target="_blank">
|
||||||
>
|
<button
|
||||||
OSTA PILET
|
className={`px-4 py-2 bg-[#007CAB] cursor-pointer ${vipnagorgialla.className} font-bold italic`}
|
||||||
</button>
|
>
|
||||||
</Link>
|
OSTA PILET
|
||||||
|
</button>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="hidden md:block">
|
||||||
|
<div className="-skew-x-2 md:-skew-x-5">
|
||||||
|
{/* Image needs to be the div that has the skew. Outside div needs to remain so that overflow wont occur*/}
|
||||||
|
<Image
|
||||||
|
src="/images/minitournament.png"
|
||||||
|
alt="mini tournaments"
|
||||||
|
width={600}
|
||||||
|
height={400}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<SectionDivider />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<SectionDivider />
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -5,22 +5,22 @@ import Image from "next/image";
|
|||||||
import { vipnagorgialla } from "@/components/Vipnagorgialla";
|
import { vipnagorgialla } from "@/components/Vipnagorgialla";
|
||||||
|
|
||||||
const Footer = () => (
|
const Footer = () => (
|
||||||
<div className="flex flex-col justify-center sm:justify-between px-12 py-16 gap-8">
|
<div className="flex flex-col justify-center sm:justify-between px-6 py-8 md:px-12 md:py-16 gap-4 md:gap-8">
|
||||||
<div className="flex items-center justify-center sm:justify-between">
|
<div className="flex md:items-center gap-8 md:gap-0 justify-between flex-col md:flex-row">
|
||||||
<div className="flex flex-col gap-4 items-center">
|
<div className="flex flex-col items-start md:items-center">
|
||||||
<Image
|
<Image
|
||||||
src="/tipilan-white.svg"
|
src="/tipilan-white.svg"
|
||||||
width={300}
|
width={250}
|
||||||
height={50}
|
height={36}
|
||||||
alt="TipiLAN Logo"
|
alt="TipiLAN Logo"
|
||||||
className="h-9 ml-3 dark:hidden"
|
className="h-9 dark:hidden"
|
||||||
/>
|
/>
|
||||||
<Image
|
<Image
|
||||||
src="/tipilan-dark.svg"
|
src="/tipilan-dark.svg"
|
||||||
width={300}
|
width={250}
|
||||||
height={50}
|
height={36}
|
||||||
alt="TipiLAN Logo"
|
alt="TipiLAN Logo"
|
||||||
className="h-9 ml-3 not-dark:hidden"
|
className="h-9 not-dark:hidden"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
{/* Social media */}
|
{/* Social media */}
|
||||||
@@ -28,7 +28,7 @@ const Footer = () => (
|
|||||||
<a
|
<a
|
||||||
href="https://discord.gg/eB7sVqgJ9b"
|
href="https://discord.gg/eB7sVqgJ9b"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
className="mx-4"
|
className="mx-4 ml-0 md:ml-4"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
>
|
>
|
||||||
<SiDiscord
|
<SiDiscord
|
||||||
@@ -63,7 +63,7 @@ const Footer = () => (
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col gap-4 ml-9">
|
<div className="flex flex-col">
|
||||||
<h2
|
<h2
|
||||||
className={`text-3xl sm:text-4xl ${vipnagorgialla.className} font-bold italic uppercase text-[#2A2C3F] dark:text-[#EEE5E5] mt-8 mb-4`}
|
className={`text-3xl sm:text-4xl ${vipnagorgialla.className} font-bold italic uppercase text-[#2A2C3F] dark:text-[#EEE5E5] mt-8 mb-4`}
|
||||||
>
|
>
|
||||||
|
|||||||
Reference in New Issue
Block a user