new home page design (Hero only right now)

This commit is contained in:
Henri
2026-03-27 23:00:35 +02:00
parent ccf4d57cea
commit f73f73767f
16 changed files with 88 additions and 25 deletions

View File

@@ -7,6 +7,8 @@
{#if $text && Object.keys($text).length > 0} {#if $text && Object.keys($text).length > 0}
<Navbar /> <Navbar />
<Router {routes} /> <main>
<Footer /> <Router {routes} />
<Footer />
</main>
{/if} {/if}

View File

@@ -1,5 +1,6 @@
/* Global stylesheet */ /* Global stylesheet */
@import url("https://fonts.googleapis.com/css2?family=Unbounded:wght@300;400;500;600;700&display=swap");
@import "tailwindcss"; @import "tailwindcss";
/* Overwriting tailwindcss specific variables */ /* Overwriting tailwindcss specific variables */
@@ -26,10 +27,6 @@
/* Design tokens & theme variables (light defaults) */ /* Design tokens & theme variables (light defaults) */
:root { :root {
/* layout tokens */
--site-padding: clamp(1rem, 2vw, 2rem); /* horizontal page padding */
--content-max: 1200px; /* main content max width */
/* spacing scale */ /* spacing scale */
--spacing-0: 0px; --spacing-0: 0px;
--spacing-1: 4px; --spacing-1: 4px;
@@ -56,7 +53,7 @@
box-sizing: border-box; box-sizing: border-box;
} }
html { html {
font-family: Inter, ui-sans-serif, system-ui, -apple-system, "Segoe UI", font-family: "Unbounded", ui-sans-serif, system-ui, -apple-system, "Segoe UI",
Roboto, "Helvetica Neue", Arial; Roboto, "Helvetica Neue", Arial;
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;

View File

@@ -21,7 +21,7 @@
</script> </script>
<div class="relative inline-block" on:focusout={handleFocusOut}> <div class="relative inline-block" on:focusout={handleFocusOut}>
<Button onClick={toggle} class={buttonClass}> <Button onClick={toggle} class={`${buttonClass} gap-0`}>
{name} {name}
<svg <svg
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
@@ -29,7 +29,7 @@
viewBox="0 0 24 24" viewBox="0 0 24 24"
stroke-width="2" stroke-width="2"
stroke="currentColor" stroke="currentColor"
class="w-5 ml-2 mt-1 transition-transform inline-block" class="w-4 h-4 ml-1 mr-0 mt-0.5 transition-transform inline-block"
style:transform={isOpen ? "rotate(180deg)" : "none"} style:transform={isOpen ? "rotate(180deg)" : "none"}
> >
<path <path

View File

@@ -18,7 +18,7 @@
{id} {id}
class="w-full {paddingClasses[padding]} {bg} {className}" class="w-full {paddingClasses[padding]} {bg} {className}"
> >
<div class="{fullWidth ? '' : 'max-w-[1200px]'} mx-auto px-(--site-padding)"> <div class="{fullWidth ? '' : 'max-w-[1200px]'} mx-auto">
<slot /> <slot />
</div> </div>
</section> </section>

View File

@@ -1,8 +1,8 @@
<script> <script>
import { import {
Button, Button,
Container,
Dropdown, Dropdown,
Section,
Stack, Stack,
} from "$components"; } from "$components";
import { navigate, getPath, currentLang, text, switchLanguageRoute } from "$lib"; import { navigate, getPath, currentLang, text, switchLanguageRoute } from "$lib";
@@ -105,9 +105,10 @@
} }
</style> </style>
<Section className="text-black" bg="bg-orange-500" padding="tight"> <header class="fixed inset-x-0 top-0 z-50 text-white">
{#if $text && Object.keys($text).length > 0} <Container maxWidth={true} center={false} className="py-2 md:py-3">
<div class="flex items-center w-full relative min-h-12"> {#if $text && Object.keys($text).length > 0}
<div class="flex items-center w-full relative min-h-12">
<!-- Logo --> <!-- Logo -->
{#if currentPath !== "/"} {#if currentPath !== "/"}
<div class="absolute left-1/2 -translate-x-1/2 top-1/2 -translate-y-1/2 md:relative md:left-auto md:translate-x-0 md:top-auto md:translate-y-0"> <div class="absolute left-1/2 -translate-x-1/2 top-1/2 -translate-y-1/2 md:relative md:left-auto md:translate-x-0 md:top-auto md:translate-y-0">
@@ -117,9 +118,9 @@
</div> </div>
{/if} {/if}
<div class="flex items-center justify-end ml-auto w-full md:w-auto"> <div class="flex items-center justify-end ml-auto w-full md:w-auto md:border-b-3 md:border-white">
<!-- Desktop Navigation --> <!-- Desktop Navigation -->
<nav class="z-10 hidden md:flex gap-4 justify-end text-xl"> <nav class="z-10 hidden md:flex gap-2 justify-end text-xl">
<Dropdown <Dropdown
name={$text.about || 'Meist'} name={$text.about || 'Meist'}
buttonClass="rounded-[5px] hover:text-white" buttonClass="rounded-[5px] hover:text-white"
@@ -162,7 +163,7 @@
<!-- Language Switcher --> <!-- Language Switcher -->
<Button <Button
class="rounded-[5px] px-3 py-1 text-sm ml-2 hover:text-white" class="rounded-[5px] px-3 py-1 text-sm ml-4 hover:text-white"
onClick={() => switchLanguageRoute($currentLang === 'est' ? 'en' : 'est')} onClick={() => switchLanguageRoute($currentLang === 'est' ? 'en' : 'est')}
> >
{$currentLang === 'est' ? 'EN' : 'EST'} {$currentLang === 'est' ? 'EN' : 'EST'}
@@ -178,10 +179,11 @@
> >
<Menu size={32} /> <Menu size={32} />
</Button> </Button>
</div> </div>
</div> </div>
{/if} {/if}
</Section> </Container>
</header>
<!-- Full Screen Mobile Menu --> <!-- Full Screen Mobile Menu -->
{#if mobileMenuOpen} {#if mobileMenuOpen}
@@ -191,7 +193,7 @@
class:menu-closing={isClosing} class:menu-closing={isClosing}
> >
<Stack className="min-h-full"> <Stack className="min-h-full">
<div class="absolute top-8 right-0 px-(--site-padding)"> <div class="absolute top-8 right-0">
<Button <Button
onClick={closeMobileMenu} onClick={closeMobileMenu}
class="ml-auto p-2 transition-colors flex bg-transparent hover:text-orange-500" class="ml-auto p-2 transition-colors flex bg-transparent hover:text-orange-500"

View File

@@ -31,7 +31,7 @@ async function loadTranslations(lang) {
// Dynamically import all translation files for the specific language // Dynamically import all translation files for the specific language
// Vite will code-split these and only bundle the ones actually used // Vite will code-split these and only bundle the ones actually used
const modules = import.meta.glob('../locales/*/*.json'); const modules = import.meta.glob('./locales/*/*.json');
for (const path in modules) { for (const path in modules) {
if (path.includes(`/locales/${lang}/`) || path.includes(`\\locales\\${lang}\\`)) { if (path.includes(`/locales/${lang}/`) || path.includes(`\\locales\\${lang}\\`)) {

62
src/routes/NewHome.svelte Normal file
View File

@@ -0,0 +1,62 @@
<script>
import {Section, Grid, Center, Image, Svg} from "$components";
</script>
<!-- Hero Section -->
<Section className="relative min-h-screen overflow-hidden" padding="none" fullWidth={true}>
<div class="relative min-h-screen flex items-center">
<div class="pointer-events-none absolute inset-0" aria-hidden="true">
<Image
src="/assets/carousel-images/1.jpg"
alt=""
objectFit="cover"
className="w-full h-full"
pictureClass="block w-full h-full"
/>
</div>
<div
class="pointer-events-none absolute inset-0 bg-gray-900 [clip-path:polygon(75%_0,100%_0,100%_100%,25%_100%)]"
aria-hidden="true"
></div>
<div
class="pointer-events-none absolute inset-0 bg-orange-500/75 [clip-path:polygon(0_0,75%_0,25%_100%,0_100%)]"
aria-hidden="true"
></div>
<div
class="pointer-events-none absolute inset-0 [clip-path:polygon(0_0,75%_0,25%_100%,0_100%)]"
aria-hidden="true"
>
<Svg
type="connector"
className="absolute left-0 top-[16%] w-[clamp(130px,14vw,230px)] text-white/95"
/>
<Svg
type="branch"
className="absolute left-0 top-[52%] -translate-y-1/2 w-[clamp(56px,6vw,94px)] text-white/95"
/>
<Svg
type="mirrorV"
className="absolute left-0 bottom-[12%] w-[clamp(130px,14vw,230px)] text-white/95"
/>
</div>
<div
class="pointer-events-none absolute inset-x-0 bottom-[6%] z-10 hidden md:flex w-full flex-col items-end gap-3"
aria-hidden="true"
>
<div class="h-6 w-[50%] bg-orange-500/90"></div>
<div class="h-4 w-[60%] bg-orange-500/90"></div>
</div>
<Grid columns={2} className="relative z-20 items-center">
<Center className="self-center md:-translate-y-8">
<img src="/assets/LapLogo_black_white.png" alt="MTÜ Lapikud" class="max-w-lg w-full h-auto p-4"/>
</Center>
<p class="self-center md:translate-y-16 text-center text-2xl leading-[200%] p-8 text-white">
MTÜ Lapikud on Tallinna Tehnikaülikooli Tarkvaraarendusklubi, mis ühendab endisi
ja praegusi IT huvilisi tudengeid.
</p>
</Grid>
</div>
</Section>

View File

@@ -1,7 +1,7 @@
// ADD PAGES HERE TO REGISTER ROUTES // ADD PAGES HERE TO REGISTER ROUTES
// examples: '/page', '/page/:id' // examples: '/page', '/page/:id'
import Home from './Home.svelte' import NewHome from './NewHome.svelte'
import Student from './Student.svelte' import Student from './Student.svelte'
import Mentors from './Mentors.svelte' import Mentors from './Mentors.svelte'
import Helpdesk from './Helpdesk.svelte' import Helpdesk from './Helpdesk.svelte'
@@ -65,7 +65,7 @@ export function getTranslatedRoute(currentPath, targetLang) {
} }
export const routes = { export const routes = {
'/': Home, '/': NewHome,
'/tudengile': Student, '/tudengile': Student,
'/student': Student, '/student': Student,
'/mentorid': Mentors, '/mentorid': Mentors,