Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 79 additions & 0 deletions _data/ball/2026.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
name: CSS BALL
year: 2026
location: Macdonald Burlington Hotel
date: 27th March

tickets:
- type: 3 Course
member-price: £35
non-member-price: £45
- type: Non-Food
member-price: £22
non-member-price: £28

links:
- text: Menu
url: '/ball/2026/menu'
- text: Tickets
url: '#tickets'
- text: FAQs
url: '#faq'
- text: Photos
url: '/ball/2026/photos'

menu-links:
- text: Home
url: '/ball/2026'
- text: Tickets
url: '/ball/2026#tickets'
- text: FAQs
url: '/ball/2026#faq'

menu:
starters:
- dish: Ham hock & pea terrine, wholegrain honey mustard & parsley
type:
- dish: Tomato & basil soup
type: vegetarian, vegan, gluten free
mains:
- dish: Honey glazed pork belly, mustard mash, seasonal vegetables, apple cider jus
type: gluten free
- dish: Pumpkin & sage ravioli, creamy mushroom sauce, parmesan
type: vegetarian, vegan on request
dessert:
- dish: Chocolate brownie, chocolate sauce, vanilla ice cream
type: vegan on request, gluten free on request
- dish: Raspberry cheesecake, chantilly cream, berries glaze
type:

faq:
- question: What is a Ball?
answer: A ball is a solid or hollow spherical or egg-shaped object that is kicked, thrown, or hit in a game. <br><br> Ok but seriously, a Ball is an opportunity to come together and celebrate the year. Many societies hold them for their members and we're no different. Our annual Ball is the biggest night of the year so if you're not attending you're really missing out.
- question: What will be there?
answer: The ball will have a 3 course meal, a bar, and a dancefloor. We will also have some bangin' tunes, a photobooth, and a photographer.
- question: Is the venue accessible?
answer: Yes! There is step free access and accessible toilets on the same floor. Full details can be found on the <a href="https://www.accessable.co.uk/birmingham-city-council/access-guides/macdonald-burlington-hotel">AccessAble website</a>.
- question: When can I buy tickets?
answer: NOW! Head over to the <a href=/ball/2026/#tickets> tickets section </a> for more details!
- question: How much do tickets cost?
answer: We have a number of different ticket options available and all of our member tickets are cheaper than the last 2 years! The Guild will also add on a £1 booking fee - There's nothing we can do about that sadly. Take a look at the <a href=/ball/2026/#tickets> tickets page </a> for more details.
- question: Can I bring a guest?
answer: Absolutely! Non-Member tickets will be available alongside member tickets. If your guest is not a student they will need to create a guest account on the Guild website. If they're a member of staff or current student resitting externally or on a leave of absence they can still get membership prices, but will need to follow the steps on the <a href=/membership>membership page</a>.
- question: Will I need to show my ticket when I arrive?
answer: No, but we will ask to see your student ID or any other form of ID to confirm your identity. You'll then be given a wristband so you can come and go as you wish.
- question: What time should I arrive?
answer: You are welcome to arrive any time from 7pm onwards, but we ask you to arrive no later than 7:45 as we expect to begin dinner service at 8pm.
- question: How do I get there?
answer: The Burlington is in the city centre - right across the street from New Street Station. <br><br>If you're coming from campus or Selly Oak, the 61 / 63 bus will get you to the otherside of New Street, from which it's a 5 minute walk. <br>From the Vale, you'll want the X22 or X21 and for Harborne you'll want the 23 / 24 all of which drop you just the other side of New Street. <br><br>There's also a tram stop right in front of the hotel if you're coming from the Jewellery Quarter or Wolverhampton.
- question: What will happen when I get there?
answer: When you arrive, come either up the stairs, or the lift, to the 1st floor. From there you'll come to the reception desk and will be asked for either your student ID or some other ID. We'll then tick your name off on the list and give you a wristband and optionally your physical ticket if you hadn't picked this up already. You'll then be able to sit down and wait for food service or hang out and get some pictures in the photobooth! <br><br>Food service will start around 8pm and expect to last approximately 2 hours. It'll then be up to you to sit and chat, boogy on the dance-floor, head over to the bar for another drink, or pop round to the photobooth to capture some great memories!
- question: Who will I sit next to for dinner?
answer: We'll ask you for the names of up to 2 people who you would like to sit near. We'll try our best to sit people near their friends, but we can't make promises you'll be next to both.<br><br> If you bring a +1 we will make sure you're sat with them, but we can only do this if you say so in the seating preference or contact us separately.<br><br> We can also only fit 10 people per table, so if you can please organise within your friend group who you would like to sit next to who and we will do our best to factor this in.
- question: What about my dietary requirements?
answer: The venue can handle catering for most dietary requirements, and there are vegan and gluten free options. Make sure to let us know any dietary requirements when you purchase your ticket. For more info on the menu please check the menu page <a href=/ball/2026/menu> here </a>.
- question: What should I wear?
answer: Dress to impress! <br>Don your fanciest frocks, smartest suits or whatever you feel fabulous in. It's going to be the big night of the year so feel free to go all out!
- question: Will I be photographed?
answer: Yes. We'll have a photographer taking photos all night so we can share them all with you afterwards. If you don't want to be in photos, please speak to our lovely photographer on the night or email us in advance.
- question: I bought a ticket but can't attend anymore.
answer: Oh no! That's okay though. You're welcome to sell your ticket to someone else, though we will not be able to offer a refund, nor are we able to change the meal options or dietary requirements once a ticket has been purchased. Please also contact committee to let us know who you've sold your ticket to.
121 changes: 121 additions & 0 deletions ball/2026/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
---
layout: page
styles:
- /css/main.css
- /css/ball/2026/main.css
- "https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"
title: CSS Ball
favicon: /ball/favicon.ico
---

{% assign ball = site.data.ball['2026'] %}

<div class="text-center-div margin-top margin-bottom section-details">
<h1 class="title">
{{ball.name}} {{ball.year}}
</h1>
<h2>
<span class="avoidwrap">{{ball.location}}</span> • <span class="avoidwrap">{{ball.date}}</span>
</h2>

<h3 id="count"><br></h3>

{% for link in ball.links %}
<a href='{{link.url}}' class="button {% if link.url == '' %}empty"{% else %}" href='{{link.url}}' {% endif %}>
Copy link

Copilot AI Jan 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The 'href' attribute is duplicated and incorrectly placed. The first href is already set before the class attribute ends, and then it appears again after the closing quote. This creates invalid HTML syntax with a malformed attribute structure.

Suggested change
<a href='{{link.url}}' class="button {% if link.url == '' %}empty"{% else %}" href='{{link.url}}' {% endif %}>
<a href="{{ link.url }}" class="button{% if link.url == '' %} empty{% endif %}">

Copilot uses AI. Check for mistakes.
{{link.text}}{% if link.url == '' %} (Coming Soon){% endif %}</a>
{% endfor %}
</div>
<hr class="bleed-bottom">
<div class="text-center-div margin-top margin-bottom section-info" id="venue">
<h2 class="subtitle mobile-only">The Venue</h2>
<img class="image" src="/assets/images/ball-25-venue.jpg" alt="Image of the Horton Suite, where the CSS Ball is being held.">
Copy link

Copilot AI Jan 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The image source refers to 'ball-25-venue.jpg', which appears to be an image from the 2025 ball. For the 2026 ball, this should either be updated to use a 2026-specific venue image or verified that the same venue image is intentionally being reused.

Suggested change
<img class="image" src="/assets/images/ball-25-venue.jpg" alt="Image of the Horton Suite, where the CSS Ball is being held.">
<img class="image" src="/assets/images/ball-26-venue.jpg" alt="Image of the Horton Suite, where the CSS Ball is being held.">

Copilot uses AI. Check for mistakes.
<div class="description-left text-center-div">
<h2 class="subtitle">The Venue</h2>
<p class="text-block">Macdonald Burlington Hotel<br><br>
We'll have exclusive access to several rooms and facilities including a dedicated bar area, gorgeous dining room, and of course the dancefloor!<br><br>
We'll also have a cloakroom available to store coats and bags.
</p>
</div>
</div>
<hr class="bleed-top">
<div class="section-tickets" id="tickets">
<div class="icon">
<img class="icon" src="/assets/images/ball-2025-ticket-icon.png", alt="A cartoon image of a ticket with the text 'CSS Ball, Fazeley Studios, 26 April, Admit One'"/>
Copy link

Copilot AI Jan 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comma should be replaced with the word 'alt' to properly separate the 'src' and 'alt' attributes. HTML attributes should be space-separated, and using a comma here creates a syntax error.

Suggested change
<img class="icon" src="/assets/images/ball-2025-ticket-icon.png", alt="A cartoon image of a ticket with the text 'CSS Ball, Fazeley Studios, 26 April, Admit One'"/>
<img class="icon" src="/assets/images/ball-2025-ticket-icon.png" alt="A cartoon image of a ticket with the text 'CSS Ball, Fazeley Studios, 26 April, Admit One'"/>

Copilot uses AI. Check for mistakes.
</div>
<div class="text text-center-div">
<h2 class="subtitle">Tickets</h2>
<p class="text-block">We have several different ticket types, designed to give you the most options possible! <br><br> Ticket prices for members are heavily discounted so be sure to pick up a membership if you haven't already!
<br>
<table class="ticket-table">
<tr>
<th><p class="text-block">Ticket Type</p></th>
<th><p class="text-block">Members' Price</p></th>
<th><p class="text-block">Non-Members' Price</p></th>
</tr>
{% for ticket in ball.tickets %}
<tr>
<td><p class="text-block">{{ ticket.type }}</p></td>
<td><p class="text-block"><span class="highlight">{{ ticket.member-price }}</span></p></td>
<td><p class="text-block"><span class="highlight">{{ ticket.non-member-price }}</span></p></td>
</tr>
{% endfor %}

</table>
<br>
<div class="ticket-buttons">
<a class="button" href="https://www.guildofstudents.com/events/6531/10315/">Buy Tickets</a>
<a class="button" href="https://cssbham.com/join">Buy Membership</a>
</div>
</div>
</div>
<hr>
<div class="text-center-div margin-bottom section-faq" id="faq">
<h2 class="subtitle">FAQs</h2>
{% for qanda in ball.faq %}
<div class="faq">
<h3 class="subsubtitle question">{{ qanda.question }}</h3>
<p class="text-block answer">{{ qanda.answer }}</p>
</div>
{% endfor %}
</div>
<hr>
<div class="margin-top margin-bottom section-info">
<div id="map" style="width: 100%; height: 300px;"></div>
</div>
<hr>

<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
<script>
const pos = [52.47881, -1.89882];

let L = window.L;
let map = L.map('map').setView(pos, 17);

L.marker(pos).addTo(map);
L.tooltip(pos, {content: 'Burlington Hotel', permanent: true, offset: [5, 0]}).addTo(map);

L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
}).addTo(map);

const countDownDate = new Date("Mar 27, 2026 19:00:00").getTime();

(function updateTimer() {
let now = new Date().getTime();
let distance = countDownDate - now;
let days = Math.floor(distance / (1000 * 60 * 60 * 24));
let hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
let minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
let seconds = Math.floor((distance % (1000 * 60)) / 1000);

document.getElementById("count").innerHTML = days + " <span>days</span> " + hours + " <span>hours</span> "
+ minutes + " <span>minutes</span> " + seconds + " <span>seconds</span>";

if (distance < 0) {
document.getElementById("count").innerHTML = "<a href='https://cssbham.com/join'>cssbham.com/join</a>";
} else {
setTimeout(updateTimer, 1000)
}
})();
</script>
51 changes: 51 additions & 0 deletions ball/2026/menu.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
layout: page
styles:
- /css/main.css
- /css/ball/2026/main.css
title: CSS Ball
favicon: /ball/favicon.ico
---

{% assign ball = site.data.ball['2026'] %}

<div class="text-center-div margin-top margin-bottom section-details">
<h1 class="title">
{{ ball.name }} {{ ball.year }}
</h1>

<h2>
<span class="avoidwrap">{{ball.location}}</span> • <span class="avoidwrap">{{ball.date}}</span>
</h2>

{% for link in ball.menu-links %}
<a href='{{link.url}}' class="button {% if link.url == '' %}empty"{% else %}" href='{{link.url}}' {% endif %}>
Copy link

Copilot AI Jan 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The 'href' attribute is duplicated and incorrectly placed. The first href is already set before the class attribute ends, and then it appears again after the closing quote. This creates invalid HTML syntax with a malformed attribute structure.

Suggested change
<a href='{{link.url}}' class="button {% if link.url == '' %}empty"{% else %}" href='{{link.url}}' {% endif %}>
<a class="button{% if link.url == '' %} empty{% endif %}" href='{{link.url}}'>

Copilot uses AI. Check for mistakes.
{{link.text}}{% if link.url == '' %} (Coming Soon){% endif %}</a>
{% endfor %}
</div>
<hr>
<div class="text-center-div menu margin-bottom">
<h2 class="subtitle">Menu</h2>
<div class="text-center-div margin-bottom menu-footer">
<p class="text-block">
The venue will alter your chosen dish to account for any dietary requirements. Please ensure to enter any allergy or dietary information when you purchase your ticket.
If a dietary requirement means that the dish cannot be altered to meet your requirements the venue will provide an alternative.
</p>
</div>
{% for section in ball.menu %}
<hr class="small">
<h3 class="menu-section-title">{{ section[0] | capitalize }}</h3>
{% assign first = false %}
{% for item in section[1] %}
{% if first != false %}<div class="menu-item-separator">- OR -</div>{% endif %}
<div class="menu-item-container">
<h2 class="menu-item">{{ item.dish }}</h2>
<br>
{% if item.type %}
<h3 class="menu-type">{{ item.type }}</h3>
{% endif %}
</div>
{% assign first = true %}
{% endfor %}
{% endfor %}
</div>
Loading
Loading