Moved to data format

This commit is contained in:
Trit0 2026-02-06 21:21:50 -05:00 committed by Tristan
parent 1280acf3e3
commit f707368d3b
16 changed files with 376 additions and 297 deletions

116
README.md
View File

@ -2,10 +2,6 @@
Site web officiel du club Conjure de l'École de Technologie Supérieure (ÉTS).
## À propos
Laboratoire de médias interactifs - depuis 2009. Le Club Conjure offre formation, équipement et des opportunités de compétition aux développeurs de jeux vidéo et médias interactifs.
## Technologies
- **Framework**: [Astro](https://astro.build) - Framework web statique ultra-rapide
@ -25,86 +21,6 @@ Laboratoire de médias interactifs - depuis 2009. Le Club Conjure offre formatio
npm install
```
### Développement
Démarrer le serveur de développement :
```bash
npm run dev
```
Le site sera disponible à `http://localhost:3000`
### Build
Créer une version optimisée pour la production :
```bash
npm run build
```
Les fichiers générés seront dans le répertoire `dist/`
### Aperçu du Build
Prévisualiser le build localement :
```bash
npm run preview
```
## Structure du Projet
```
src/
├── pages/ # Routes statiques
│ ├── index.astro # Page d'accueil (principal)
│ ├── 404.astro # Page d'erreur 404
│ ├── 500.astro # Page d'erreur 500
│ └── fr/ # Routes françaises
│ ├── index.astro
│ └── 404.astro
├── layouts/ # Layouts réutilisables
│ └── MainLayout.astro
├── components/ # Composants réutilisables
│ ├── Navigation.astro
│ └── Footer.astro
├── styles/ # Feuilles de style SCSS
│ ├── main.scss
│ └── _partials/
│ ├── _general.scss
│ ├── _navigation.scss
│ └── _media.scss
├── scripts/ # Scripts JavaScript/TypeScript
│ └── app.ts # Logique d'application principale
└── env.d.ts # Déclarations TypeScript Astro
public/ # Fichiers statiques
├── img/ # Images
│ ├── icons/
│ ├── competitions/
│ └── sponsors/
├── js/ # Scripts JS compilés
└── css/ # CSS minifiés
```
## Pages
- **`/`** - Page d'accueil principale (français)
- **`/fr/`** - Page d'accueil francaise (alias)
- **`/404`** - Page d'erreur 404
- **`/fr/404`** - Page d'erreur 404 (français)
- **`/500`** - Page d'erreur 500
## Fonctionnalités
- ✨ Navigation responsive avec menu hamburger
- 📱 Design mobile-first avec Bulma
- 🎠 Carousel de compétitions
- ✏️ Animation de chiffres (année)
- 🎬 Sections d'activités interactives
- 🗺️ Carte intégrée Google Maps
- 📱 Routes bilingues (Français disponible)
## Scripts
| Commande | Description |
@ -113,32 +29,6 @@ public/ # Fichiers statiques
| `npm run build` | Crée une version optimisée pour la production |
| `npm run preview` | Prévisualise le build en local |
## Déploiement
Le site Astro génère des fichiers HTML/CSS/JS statiques optimisés. Ces fichiers peuvent être déployés sur n'importe quel serveur web statique :
- Netlify
- Vercel
- GitHub Pages
- AWS S3
- Hébergement traditionnel
Déployez simplement le contenu du répertoire `dist/`
## Scripts Personnalisés
### Carousel (`src/scripts/app.ts`)
Initialise Bulma Carousel pour le slider de compétitions.
### Animation de Chiffres
Anime les années dans la section splash screen (2009 - année courante).
### Activités Interactives
Gère les clics sur les boutons d'activités pour afficher/masquer le contenu détaillé.
## Ressources
- [Documentation Astro](https://docs.astro.build)
@ -149,13 +39,9 @@ Gère les clics sur les boutons d'activités pour afficher/masquer le contenu d
Club Conjure - ÉTS
## Licence
ISC
## Contactez-nous
- 📧 Email: conjure@ens.etsmtl.ca
- 📧 Email: <conjure@ens.etsmtl.ca>
- 📍 Adresse: 1219 William, Montréal, Local D-2020
- 📞 Téléphone: (514) 396-8800 poste #7713
- 📱 Instagram: [@conjure_ets](https://instagram.com/conjure_ets)

View File

@ -1,5 +1,5 @@
{
"name": "Conjure-Site",
"name": "conjure-site",
"version": "1.0.0",
"description": "Site web officiel du club Conjure de l'ÉTS",
"type": "module",

View File

@ -0,0 +1,54 @@
---
import { aboutSections, contactInfo, memberInfo } from '../data/about';
interface Props {
showMaps?: boolean;
}
const { showMaps = true } = Astro.props;
---
<section class="section" id="apropos">
<h2>Qui sommes-nous ?</h2>
<div class="columns is-centered">
<div class="column is-three-quarters-desktop is-full-tablet">
<div class="columns is-centered">
{
aboutSections.map((section) => (
<div class="column is-one-third-tablet is-full-mobile">
<img class="is-quarter" src={section.icon} alt={section.title} />
<h3>{section.title}</h3>
<p>{section.description}</p>
</div>
))
}
</div>
<div class="columns is-centered">
{showMaps && (
<div class="column is-half-tablet is-hidden-mobile sub-section-contact">
<h3>Contactez-nous</h3>
<iframe
width="500"
height="600"
src="https://www.google.com/maps/embed/v1/place?q=place_id:ChIJB5eDqmAayUwR9kVcpBmnMrc&key=AIzaSyDa73RDd5rn0c6jqn8nAXKh01L8NfrQGQM"
allowfullscreen></iframe>
<address>
{contactInfo.address}
<br />
{contactInfo.room}
<br />
<a href={`mailto:${contactInfo.email}`}>{contactInfo.email}</a>
<br />
</address>
</div>
)}
<div class="column is-half-tablet is-full-mobile sub-section-members">
<h3>Membres</h3>
{memberInfo.split('\n\n').map((paragraph) => <p>{paragraph}</p>)}
</div>
</div>
</div>
</div>
</section>

View File

@ -0,0 +1,46 @@
---
interface Props {
id: string;
title: string;
image: string;
description?: string;
content?: string;
logo?: string;
cta?: string;
ctaLink?: string;
isInversed?: boolean;
}
const { id, title, image, description, content, logo, cta, ctaLink, isInversed = false } = Astro.props;
---
<div class={`full-height full-width columns is-full sub-section ${isInversed ? 'animation-inversed' : ''}`}>
{!isInversed && <div class="bg-img full-height full-width" style={`background-image: url('${image}');`}></div>}
{!isInversed ? (
<div class="headline">
<h2>{title}</h2>
<p>{description}</p>
{cta && ctaLink && (
<a href={ctaLink}>
<button class={`button is-${id}-btn is-info is-outlined is-medium`}>{cta}</button>
</a>
)}
</div>
) : (
<>
<div class="column full-height no-spacing">
<div class="bg-img full-height full-width" style={`background-image: url('${image}');`}></div>
<div class="headline is-headline-inversed">
<h2>{title}</h2>
<p>{description}</p>
<button class={`button is-${id}-btn is-info is-hidden-mobile is-outlined is-medium`}>En savoir plus</button>
</div>
</div>
<div class="content column is-one-quarter-fullhd is-two-fifths-desktop is-half-tablet is-three-quarters-mobile full-height">
{logo && <img alt={`${title} Logo`} src={logo} />}
{content && <p>{content}</p>}
</div>
</>
)}
</div>

View File

@ -0,0 +1,28 @@
---
import { competitions } from '../data/competitions';
---
<section class="section" id="competitions">
<h2>Compétitions</h2>
<div class="border-seperator"></div>
<div class="columns is-centered">
<div class="slider column is-three-fifths-tablet is-four-fifths-mobile">
{
competitions.map((competition) => (
<div class="slider-item">
<img src={competition.image} alt={`Logo ${competition.name}`} />
</div>
))
}
</div>
</div>
</section>
<script>
import { initCarousel } from '../scripts/app';
// Small delay to ensure DOM is fully ready
setTimeout(() => {
initCarousel();
}, 100);
</script>

View File

@ -22,5 +22,8 @@
</footer>
<script>
document.getElementById('current-year').textContent = new Date().getFullYear();
const yearElement = document.getElementById('current-year');
if (yearElement) {
yearElement.textContent = new Date().getFullYear().toString();
}
</script>

View File

@ -1,5 +1,11 @@
---
// Navigation component
import { menuItems, socialLinks } from '../data/links';
interface Props {
alwaysOpen?: number;
}
const { alwaysOpen = 2 } = Astro.props;
---
<header class="logo-container">
@ -13,35 +19,37 @@
<span class="hamburger"></span>
<span class="hamburger"></span>
</label>
<a href="#apropos" class="menu-item has-tooltip-text">
<span>À propos</span>
<img src="/img/icons/profile.png" alt="À Propos" />
<!-- Menu items -->
{
menuItems.map((item) => (
<a href={item.href} class="menu-item has-tooltip-text">
<span>{item.label}</span>
<img src={item.icon} alt={item.label} />
</a>
<a href="#activites" class="menu-item has-tooltip-text">
<span>Activitiés</span>
<img src="/img/icons/medal.png" alt="Activitiés / Compétitions" />
</a>
<a href="#partenaires" class="menu-item has-tooltip-text">
<span>Partenaires</span>
<img src="/img/icons/sponsor.png" alt="Partenaires" />
</a>
<a href="https://instagram.com/conjure_ets/" target="_blank" rel="noopener noreferrer" class="menu-item">
))
}
<!-- Social links -->
{
socialLinks.map((link, index) => {
const isAlwaysOpen = index >= socialLinks.length - alwaysOpen;
return (
<a
href={link.url}
target="_blank"
rel="noopener noreferrer"
class={isAlwaysOpen ? 'menu-item-always-open' : 'menu-item'}
>
{link.class ? (
<div class="icon-centerer">
<img src="/img/icons/instagram.svg" alt="Instagram" class="icon-32" />
<img src={link.icon} alt={link.name} class={link.class} />
</div>
) : (
<img src={link.icon} alt={link.name} />
)}
</a>
<a href="https://linkedin.com/company/conjure-ets" target="_blank" rel="noopener noreferrer" class="menu-item">
<img src="/img/icons/linkedin.svg" alt="LinkedIn" />
</a>
<a href="https://conjure.itch.io" target="_blank" rel="noopener noreferrer" class="menu-item">
<img src="/img/icons/itch-io.svg" alt="Itch.io" />
</a>
<a href="https://linktr.ee/conjureetsmtl" target="_blank" rel="noopener noreferrer" class="menu-item-always-open">
<div class="icon-centerer">
<img src="/img/icons/linktree.svg" alt="Linktree" class="icon-32" />
</div>
</a>
<a href="mailto:conjure@ens.etsmtl.ca" class="menu-item-always-open">
<img src="/img/icons/email.png" alt="Courriel" />
</a>
);
})
}
</nav>

View File

@ -0,0 +1,25 @@
---
import { partners } from '../data/partners';
---
<section class="section" id="partenaires">
<h2>Partenaires</h2>
<div class="border-seperator"></div>
<div class="columns is-full full-width sub-section is-centered">
<div class="imq-section column is-two-fifths is-8-tablet is-full-mobile">
<div class="grid columns is-multiline">
{
partners.map((partner) => (
<a
class="column is-one-third-widescreen is-one-third-desktop is-one-third-tablet is-half-mobile"
target="_blank"
href={partner.url}
>
<img src={partner.logo} alt={`Logo ${partner.name}`} />
</a>
))
}
</div>
</div>
</div>
</section>

View File

@ -0,0 +1,22 @@
---
interface Props {
startYear?: number;
endYear?: 'current' | number;
}
const { startYear = 2009, endYear = 'current' } = Astro.props;
const displayEndYear = endYear === 'current' ? new Date().getFullYear() : endYear;
---
<section class="section full-height" id="splashscreen">
<div class="bg-img full-height full-width"></div>
<div class="splashscreen-text-container full-width">
<h1>Laboratoire de médias interactifs</h1>
<div class="border-seperator"></div>
<h2>
<span class="year-animated" data-endvalue={startYear}>{String(startYear).padStart(4, '0')}</span>
{' - '}
<span class="year-animated" data-delay="750">{String(displayEndYear).padStart(4, '0')}</span>
</h2>
</div>
</section>

26
src/data/about.ts Normal file
View File

@ -0,0 +1,26 @@
export const aboutSections = [
{
title: 'Apprendre',
icon: '/img/learn.png',
description: 'En plus d\'avoir des membres avec de l\'expérience dans l\'industrie, nous offrons à nos membres une multitude de formations sous différents langages et disciplines, dont une formation intégrale pour Unreal Engine et les conférences au MIGS.',
},
{
title: 'Équipement',
icon: '/img/remote.png',
description: 'Le club offre aux membres tout l\'équipement nécessaire pour produire vos jeux. Cela inclut une installation complète de réalité virtuelle.',
},
{
title: 'Compétitions',
icon: '/img/medal.png',
description: 'En tant que membres, vous serez accommodés pour les divers compétitions et événement que le club permet d\'assister. Cela donne accès à diverses opportunités de réseautage.',
},
];
export const contactInfo = {
address: '1219 William, Montreal',
room: 'Local D-2020',
email: 'conjure@ens.etsmtl.ca',
phone: '(514) 396-8800 poste: #7713',
};
export const memberInfo = 'Vous êtes étudiant ou étudiante à l\'ÉTS et vous êtes intéressé au développement de médias interactifs / jeux vidéos ? Venez au local pour nous parler. On vous donnera un laboratoire de bienvenue qui vous donnera les outils nécessaires pour vous débrouiller dans le domaine. N\'hésitez pas à nous poser des questions. Une fois le laboratoire remis, vous aurez une formation nécessaire fournie par l\'école et vous serez membres à part entière. Vous aurez finalement accès à tous les avantages d\'être dans notre club.\n\nLes membres ont accès à des formations en ligne et d\'autres fournies par nos commanditaires. De plus, ils ont accès à notre équipement pour faire leurs différents projets. Une fois par année, on organise un événement servant à mettre en valeur le travail fourni par les membres où on invite les recruteurs des compagnies en jeux vidéos pour qu\'ils puissent vous connaitre ainsi que vous donner une chance de faire des contactes dans l\'industrie et de trouver des stages plus facilement.';

20
src/data/activities.ts Normal file
View File

@ -0,0 +1,20 @@
export const activities = [
{
id: 'gala',
title: 'Gala Conjure',
image: '/img/gala.jpg',
description: 'Le gala est une activité annuelle permettant aux membres du club de présenter sur quoi ils ont travaillé durant l\'année aux différentes compagnies du domaine. L\'événement se présente sous forme de 5 à 8 dans les alentours du début du mois d\'octobre. Tous les gens du domaine du jeu vidéo sont invités à venir voir les efforts mis par la relève.',
cta: 'En savoir plus, contactez-nous',
ctaLink: 'mailto:conjure@ens.etsmtl.ca',
ctaType: 'primary',
},
{
id: 'mtlgj',
title: 'Montréal Game Jam',
image: '/img/mtlgj.jpg',
logo: '/img/MTLGJ-Logo.jpg',
shortDescription: 'Le Montréal Game Jam est le chapitre montréalais pour le Global Game Jam. Cet événement international donne comme défi aux participants de réaliser un prototype de jeu basé sur une thématique spécifique pendant une période de 48 heures.',
fullDescription: 'L\'organisation du Montreal Game Jam est constituée de l\'union de multiples universités et professionnels de Montréal dont le mandat commun est de promouvoir l\'industrie du jeu vidéo.\n\nNous rassemblons étudiants et professionnels pour stimuler la création et l\'expérimentation de nouvelles idées et concepts. Nous voulons renforcer la collaboration avec la communauté du jeu et ainsi offrir la possibilité de créer de nouveaux liens à travers cet événement. C\'est en supportant le développement de cette communauté que nous pourrons renforcer l\'expertise générale. Considérant la forte présence médiatique, nos partenaires pourront ainsi démontrer leur intérêt à promouvoir la culture du jeu. C\'est le temps de découvrir de nouveaux talents, de cultiver de nouvelles idées et de former de nouveaux liens.\n\nQue les participants soient à l\'université ou de l\'industrie, l\'événement offre la possibilité de briser cette barrière et ainsi collaborer. Nous voulons surtout que vous ayez du plaisir à accomplir ce défi et réaliser ce qui vous passionne!\n\nPlus d\'information sur le site du Montreal Game Jam',
ctaLink: 'http://mtlgj.org/lang/fr/index.html',
},
];

26
src/data/competitions.ts Normal file
View File

@ -0,0 +1,26 @@
export const competitions = [
{
name: 'Creative Jam',
image: '/img/competitions/CreativeJam.png',
},
{
name: 'Concours Universitaire Ubisoft',
image: '/img/competitions/GamelabUbisoft.png',
},
{
name: 'Ludum Dare',
image: '/img/competitions/LudumDare.png',
},
{
name: 'McGill Game Jam',
image: '/img/competitions/McGameJam.png',
},
{
name: 'Pixel Challenge Québec',
image: '/img/competitions/PixelChallenge.png',
},
{
name: 'Game Jam Battle',
image: '/img/competitions/GameJamBattle.png',
},
];

54
src/data/links.ts Normal file
View File

@ -0,0 +1,54 @@
// Social links
export const socialLinks = [
{
name: 'Instagram',
url: 'https://instagram.com/conjure_ets',
icon: '/img/icons/instagram.svg',
class: 'icon-32',
},
{
name: 'LinkedIn',
url: 'https://linkedin.com/company/conjure-ets',
icon: '/img/icons/linkedin.svg',
},
{
name: 'Itch.io',
url: 'https://conjure.itch.io',
icon: '/img/icons/itch-io.svg',
},
{
name: 'Facebook',
url: 'https://facebook.com/conjure.ets',
icon: '/img/icons/facebook.png',
},
{
name: 'Linktree',
url: 'https://linktr.ee/conjureetsmtl',
icon: '/img/icons/linktree.svg',
class: 'icon-32',
},
{
name: 'Email',
url: 'mailto:conjure@ens.etsmtl.ca',
icon: '/img/icons/email.png',
},
];
// Menu items
export const menuItems = [
{
label: 'À propos',
href: '#apropos',
icon: '/img/icons/profile.png',
},
{
label: 'Activitiés',
href: '#activites',
icon: '/img/icons/medal.png',
},
{
label: 'Partenaires',
href: '#partenaires',
icon: '/img/icons/sponsor.png',
},
];

17
src/data/partners.ts Normal file
View File

@ -0,0 +1,17 @@
export const partners = [
{
name: 'École de technologie supérieure',
logo: '/img/sponsors/ETS-color.png',
url: 'https://www.etsmtl.ca',
},
{
name: 'LanETS',
logo: '/img/sponsors/LanETS-black.png',
url: 'https://lanets.ca',
},
{
name: 'AEETS',
logo: '/img/sponsors/AEETS-color.png',
url: 'https://www.aeets.com/',
},
];

View File

@ -2,94 +2,19 @@
import MainLayout from '../layouts/MainLayout.astro';
import Navigation from '../components/Navigation.astro';
import Footer from '../components/Footer.astro';
import SplashScreen from '../components/SplashScreen.astro';
import AboutSection from '../components/AboutSection.astro';
import CompetitionsSection from '../components/CompetitionsSection.astro';
import PartnersSection from '../components/PartnersSection.astro';
---
<MainLayout title="Club Conjure - Laboratoire de médias interactifs">
<Navigation />
<main>
<!-- Splash Screen Section -->
<section class="section full-height" id="splashscreen">
<div class="bg-img full-height full-width"></div>
<div class="splashscreen-text-container full-width">
<h1>Laboratoire de médias interactifs</h1>
<div class="border-seperator"></div>
<h2>
<span class="year-animated" data-endvalue="2009">0000</span>
{' - '}
<span class="year-animated" data-delay="750">0000</span>
</h2>
</div>
</section>
<SplashScreen startYear={2009} endYear="current" />
<!-- About Section -->
<section class="section" id="apropos">
<h2>Qui sommes-nous ?</h2>
<div class="columns is-centered">
<div class="column is-three-quarters-desktop is-full-tablet">
<div class="columns is-centered">
<div class="column is-one-third-tablet is-full-mobile">
<img class="is-quarter" src="/img/learn.png" alt="Apprendre" />
<h3>Apprendre</h3>
<p>
En plus d'avoir des membres avec de l'expérience dans l'industrie, nous offrons à nos membres une
multitude de formations sous différents langages et disciplines, dont une formation intégrale pour
Unreal Engine et les conférences au MIGS.
</p>
</div>
<div class="column is-one-third-tablet is-full-mobile">
<img class="is-quarter" src="/img/remote.png" alt="Équipement" />
<h3>Équipement</h3>
<p>
Le club offre aux membres tout l'équipement nécessaire pour produire vos jeux. Cela inclut une
installation complète de réalité virtuelle.
</p>
</div>
<div class="column is-one-third-tablet is-full-mobile">
<img class="is-quarter" src="/img/medal.png" alt="Compétitions" />
<h3>Compétitions</h3>
<p>
En tant que membres, vous serez accommodés pour les divers compétitions et événement que le club
permet d'assister. Cela donne accès à diverses opportunités de réseautage.
</p>
</div>
</div>
<div class="columns is-centered">
<div class="column is-half-tablet is-hidden-mobile sub-section-contact">
<h3>Contactez-nous</h3>
<iframe
width="500"
height="600"
src="https://www.google.com/maps/embed/v1/place?q=place_id:ChIJB5eDqmAayUwR9kVcpBmnMrc&key=AIzaSyDa73RDd5rn0c6jqn8nAXKh01L8NfrQGQM"
allowfullscreen></iframe>
<address>
1219 William, Montreal<br />
Local D-2020<br />
<a href="mailto:conjure@ens.etsmtl.ca">conjure@ens.etsmtl.ca</a><br />
</address>
</div>
<div class="column is-half-tablet is-full-mobile sub-section-members">
<h3>Membres</h3>
<p>
Vous êtes étudiant ou étudiante à l'ÉTS et vous êtes intéressé au développement de médias
interactifs / jeux vidéos ? Venez au local pour nous parler. On vous donnera un laboratoire de
bienvenue qui vous donnera les outils nécessaires pour vous débrouiller dans le domaine.
N'hésitez pas à nous poser des questions. Une fois le laboratoire remis, vous aurez une formation
nécessaire fournie par l'école et vous serez membres à part entière. Vous aurez finalement accès à
tous les avantages d'être dans notre club.
</p>
<p>
Les membres ont accès à des formations en ligne et d'autres fournies par nos commanditaires. De
plus, ils ont accès à notre équipement pour faire leurs différents projets. Une fois par année, on
organise un événement servant à mettre en valeur le travail fourni par les membres où on invite les
recruteurs des compagnies en jeux vidéos pour qu'ils puissent vous connaitre ainsi que vous donner
une chance de faire des contactes dans l'industrie et de trouver des stages plus facilement.
</p>
</div>
</div>
</div>
</div>
</section>
<AboutSection />
<!-- Activities Section -->
<section class="section" id="activites">
@ -155,80 +80,19 @@ import Footer from '../components/Footer.astro';
</div>
</section>
<!-- Competitions Section -->
<section class="section" id="competitions">
<h2>Compétitions</h2>
<div class="border-seperator"></div>
<div class="columns is-centered">
<div class="slider column is-three-fifths-tablet is-four-fifths-mobile">
<div class="slider-item">
<img src="/img/competitions/CreativeJam.png" alt="Logo Creative Jam" />
</div>
<div class="slider-item">
<img src="/img/competitions/GamelabUbisoft.png" alt="Logo Concours Universitaire Ubisoft" />
</div>
<div class="slider-item">
<img src="/img/competitions/LudumDare.png" alt="Logo Ludum Dare" />
</div>
<div class="slider-item">
<img src="/img/competitions/McGameJam.png" alt="Logo McGill Game Jam" />
</div>
<div class="slider-item">
<img src="/img/competitions/PixelChallenge.png" alt="Logo Pixel Challenge Québec" />
</div>
<div class="slider-item">
<img src="/img/competitions/GameJamBattle.png" alt="Logo Creative Jam" />
</div>
</div>
</div>
</section>
<!-- Partners Section -->
<section class="section" id="partenaires">
<h2>Partenaires</h2>
<div class="border-seperator"></div>
<div class="columns is-full full-width sub-section is-centered">
<div class="imq-section column is-two-fifths is-8-tablet is-full-mobile">
<div class="grid columns is-multiline">
<a
class="column is-one-third-widescreen is-one-third-desktop is-one-third-tablet is-half-mobile"
target="_blank"
href="https://www.etsmtl.ca"
><img class="" src="/img/sponsors/ETS-color.png" alt="Logo École de technologie supérieure"
/></a
>
<a
class="column is-one-third-widescreen is-one-third-desktop is-one-third-tablet is-half-mobile"
target="_blank"
href="https://lanets.ca"
><img class="" src="/img/sponsors/LanETS-black.png" alt="Logo LanETS"
/></a
>
<a
class="column is-one-third-widescreen is-one-third-desktop is-one-third-tablet is-half-mobile"
target="_blank"
href="https://www.aeets.com/"
><img class="" src="/img/sponsors/AEETS-color.png" alt="Logo AEETS-color"
/></a
>
</div>
</div>
</div>
</section>
<CompetitionsSection />
<PartnersSection />
</main>
<Footer />
</MainLayout>
<script>
import { initCarousel, animateNumbers, setupActivityButtons } from '../scripts/app';
// Initialize carousel
initCarousel();
import { animateNumbers, setupActivityButtons } from '../scripts/app';
// Animate year numbers
document.querySelectorAll('.year-animated').forEach((item) => {
animateNumbers(item);
animateNumbers(item as HTMLElement);
});
// Setup activity buttons

View File

@ -3,7 +3,7 @@ $fg: #115FA2;
$pi: 3.14;
//config
$menu-items: 6;
$menu-items: 7;
$menu-items-always-open: 3;
$open-distance: 105px;
$opening-angle: $pi*2;