From 42e7c3ae0bd27efa053d11873f10784444fc00dd Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 00:16:30 +1000 Subject: [PATCH 01/21] Career's Hub Hero Section --- components/CareersHero.tsx | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 components/CareersHero.tsx diff --git a/components/CareersHero.tsx b/components/CareersHero.tsx new file mode 100644 index 0000000..141ba1d --- /dev/null +++ b/components/CareersHero.tsx @@ -0,0 +1,29 @@ +import React from 'react'; +import Link from 'next/link'; +import styles from '../styles/CareersHub.module.css'; + +const CareersHero = () => ( +
+
+

+ Find your unique path +
+ into tech. +

+

+ A one-stop guide to careers, industries, and job-search know-how, built so you can stop + drowning in advice from every direction and start figuring out what actually fits you. +

+
+ + Explore career spotlights → + + + Browse the jobs board + +
+
+
+); + +export default CareersHero; \ No newline at end of file From a1186343de1efe6aba401b330b726ab3b64996ca Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 00:17:43 +1000 Subject: [PATCH 02/21] Career's Hub Navbar --- components/CareersNav.tsx | 54 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 components/CareersNav.tsx diff --git a/components/CareersNav.tsx b/components/CareersNav.tsx new file mode 100644 index 0000000..b4eb797 --- /dev/null +++ b/components/CareersNav.tsx @@ -0,0 +1,54 @@ +import React from 'react'; +import Link from 'next/link'; +import Image from 'next/image'; +import styles from '../styles/CareersHub.module.css'; + +type NavPage = 'home' | 'spotlights' | 'industries' | 'toolkit' | 'jobsboard' | 'sponsors'; + +interface CareersNavProps { + active: NavPage; +} + +const NAV_LINKS: { page: NavPage; href: string; label: string }[] = [ + { page: 'spotlights', href: '/careers-hub/career-spotlights', label: 'Career Spotlights' }, + { page: 'industries', href: '/careers-hub/industry-spotlights', label: 'Industry Spotlights' }, + { page: 'toolkit', href: '/careers-hub/job-searching', label: 'Job Searching' }, + { page: 'jobsboard', href: '/careers-hub/jobs-board', label: 'Jobs Board' }, + { page: 'sponsors', href: '/careers-hub/sponsors', label: 'Sponsors' }, +]; + +// Top nav bar shared by every Careers Hub page. `active` controls which link +// is highlighted — pass the page key rather than relying on scroll position, +// since each section now lives on its own route. +const CareersNav = ({ active }: CareersNavProps) => { + return ( + + ); +}; + +export default CareersNav; \ No newline at end of file From 096ba184e2e4f548099420435893bf7a05a137d0 Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 00:24:10 +1000 Subject: [PATCH 03/21] deleted old jobs board page --- components/Footer.tsx | 4 +- components/OpportunitiesCard.tsx | 48 ------- data/navbar.ts | 6 - lib/api.tsx | 12 -- pages/sponsors/jobs-board.tsx | 107 --------------- styles/JobsBoard.module.css | 218 ------------------------------- 6 files changed, 2 insertions(+), 393 deletions(-) delete mode 100644 components/OpportunitiesCard.tsx delete mode 100644 pages/sponsors/jobs-board.tsx delete mode 100644 styles/JobsBoard.module.css diff --git a/components/Footer.tsx b/components/Footer.tsx index fb6777d..0332ed9 100644 --- a/components/Footer.tsx +++ b/components/Footer.tsx @@ -9,10 +9,10 @@ import Image from 'next/image'; const routes: any = { Home: '/', Events: '/events', - 'Jobs Board': '/sponsors/jobs-board', 'Join Us': '/join-us', 'Our Story': '/about/our-story', Sponsors: '/sponsors/current-sponsors', + 'Careers Hub': '/careers-hub', 'Our Team': '/about/our-team', 'Contact Us': '/contact-us', 'Blog Posts': '/media/blog', @@ -28,7 +28,7 @@ const headings = ['ABOUT US', 'SPONSORS', 'EVENTS', 'MEDIA']; const links = [ ['Home', 'Our Story', 'Our Team', 'Join Us', 'Contact Us'], - ['Current Sponsors', 'Jobs Board'], + ['Current Sponsors', 'Careers Hub'], ['Events', 'Empowerment Mentoring Program', 'Merch Store'], ['Blog Posts', 'Podcast', 'Publications', 'Marketing', 'Videos'], ]; diff --git a/components/OpportunitiesCard.tsx b/components/OpportunitiesCard.tsx deleted file mode 100644 index e8e80aa..0000000 --- a/components/OpportunitiesCard.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import React from 'react'; -import styles from '../styles/JobsBoard.module.css'; -import Link from 'next/link'; - -export default function OpportunitiesCard({ - individualOpportunity, - index, -}: any) { - const { - link, - img, - companyName, - type, - position, - location, - closeDate, - summary, - } = individualOpportunity.fields; - - const imgUrl = 'https:' + img.fields.file.url; - - return ( - - <> -
-
- {/* TODO: change to Image tag - attempted but causes css issues */} - {/* eslint-disable-next-line @next/next/no-img-element */} - {companyName} -
-
-

{type}

-

{position}

-

{companyName}

-

Location: {location}

- {closeDate && ( - // contentfulDate = YYYY-MM-DD - // formattedDate = DD/MM/YYYY -

- Applications close: {closeDate.split('-').reverse().join('/')} -

- )} -

{summary}

-
- - - ); -} diff --git a/data/navbar.ts b/data/navbar.ts index 4c758ae..57dcc8a 100644 --- a/data/navbar.ts +++ b/data/navbar.ts @@ -7,7 +7,6 @@ import LocalPrintshopOutlinedIcon from '@material-ui/icons/LocalPrintshopOutline import ImageOutlinedIcon from '@material-ui/icons/ImageOutlined'; import VideocamOutlinedIcon from '@material-ui/icons/VideocamOutlined'; import AccountBalanceOutlinedIcon from '@material-ui/icons/AccountBalanceOutlined'; -import WorkOutlineOutlinedIcon from '@material-ui/icons/WorkOutlineOutlined'; import CalendarTodayOutlinedIcon from '@material-ui/icons/CalendarTodayOutlined'; import LocalLibraryOutlinedIcon from '@material-ui/icons/LocalLibraryOutlined'; import LocalMallOutlinedIcon from '@material-ui/icons/LocalMallOutlined'; @@ -59,11 +58,6 @@ const sponsorsDropdownContent = [ link: '/sponsors/current-sponsors', icon: AccountBalanceOutlinedIcon, }, - { - pageName: 'Jobs Board', - link: '/sponsors/jobs-board', - icon: WorkOutlineOutlinedIcon, - }, { pageName: 'Careers Hub', link: '/careers-hub', diff --git a/lib/api.tsx b/lib/api.tsx index fee9b98..7a38c0b 100644 --- a/lib/api.tsx +++ b/lib/api.tsx @@ -125,18 +125,6 @@ export async function loadUpcomingEvents() { return res.items; } -export async function loadOpportunities() { - const res = await client - .getEntries({ - content_type: 'opportunities', - select: 'fields', - }) - .catch((error) => { - console.error(error); - }); - return res.items; -} - export async function loadBlogPreviews() { const res = await client .getEntries({ diff --git a/pages/sponsors/jobs-board.tsx b/pages/sponsors/jobs-board.tsx deleted file mode 100644 index c2d4212..0000000 --- a/pages/sponsors/jobs-board.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import PageHeader from '../../components/Header'; -import OpportunitiesCard from '../../components/OpportunitiesCard'; -import styles from '../../styles/JobsBoard.module.css'; -import CircularProgress from '@material-ui/core/CircularProgress'; -import LoadingScreen from '../../components/LoadingScreen'; -import { loadOpportunities } from '../../lib/api'; -import Head from 'next/head'; -import { revalidate } from '../../lib/helpers/constants'; - -const Opportunities = ({ opportunities }: any) => { - const [loading, setLoading] = useState(true); - const [sourceLoading, setSourceLoading] = React.useState(true); - const [headerLoading, setHeaderLoading] = React.useState(true); - useEffect(() => { - window.scrollTo(0, 0); - }, []); - const fetchOpportunities = async () => { - setLoading(false); - setSourceLoading(false); - }; - useEffect(() => { - setLoading(true); - fetchOpportunities().catch((error) => console.error(error)); - }, []); - return ( -
- - Opportunities | UNSW WIT - - {sourceLoading && headerLoading ? ( - - ) : ( - <> - {/* Cover Photo */} - - {/*start of opportunies*/} -
- {loading && ( - - )} -
- {!loading && - (!opportunities.length ? ( -
-

- Keep a lookout here for upcoming opportunities! -

-
- ) : ( -
-

- Here are all the links to all current career opportunities - available ranging from internships to graduate roles. Bookmark - this page and check back regularly to be the first to know - about job opportunities! -

-

- If you would like to make a listing, please contact us - at  - - sponsorships@unswwit.com - - . -

-
- {opportunities.map( - (individualOpportunity: any, index: number) => { - return ( - - ); - } - )} -
-
- ))} - - )} -
- ); -}; - -export default Opportunities; - -export async function getStaticProps() { - const opportunities = await loadOpportunities(); - return { - props: { opportunities }, - revalidate: revalidate - }; -} diff --git a/styles/JobsBoard.module.css b/styles/JobsBoard.module.css deleted file mode 100644 index a8e3a19..0000000 --- a/styles/JobsBoard.module.css +++ /dev/null @@ -1,218 +0,0 @@ -/*-------------------------------Opportunities Preview-----------------------------*/ -.head { - font-family: 'Montserrat', sans-serif; - font-size: 11pt; - font-weight: 400; - color: var(--general-text); - text-align: justify; -} - -.link { - color: var(--general-text); - font-weight: 500; -} - -.link:hover { - text-decoration: underline; -} - -.oppBody { - max-width: 70%; - margin: 0 auto; - margin-bottom: 10%; - margin-top: 4%; -} - -.oppLookout { - text-align: center; - font-family: 'Montserrat', sans-serif; - margin: 0 auto; - padding: 100px 0; - max-width: 70%; -} - -.lookoutSize { - font-size: 12pt; -} - -.oppGridContainer { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(290px, 1fr)); - grid-gap: 50px; - margin-top: 50px; -} - -.oppGridItems { - display: block; - position: relative; - -webkit-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2); - box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2); -} - -.oppDesc { - margin: 50px 30px; - padding: 0; -} - -.oppTypeAndCompany { - color: var(--yellow); - font-family: 'Montserrat', sans-serif; - letter-spacing: 1pt; - margin: 0; - padding: 0; - padding-bottom: 5px; - text-align: center; - font-weight: 500; - font-size: 10pt; - font-weight: 600; -} - -.oppSummary { - color: var(--general-text); - letter-spacing: 0.05em; - font-size: 9pt; - font-family: 'Montserrat', sans-serif; - padding: 0; - padding-bottom: 5px; - margin-top: 10px; - text-align: justify; -} - -.oppImg { - object-fit: scale-down; - display: block; - margin: 0 auto; - width: 250px; - height: 150px; - transform: translate(0%, 20%); - background-color: white; - -webkit-box-shadow: 5px 0px 5px 0 rgba(0, 0, 0, 0.3); - box-shadow: 5px 0px 5px 0 rgba(0, 0, 0, 0.3); - padding: 10px; -} - -.imageContainer { - background-color: black; -} - -.jobPosition { - color: var(--black); - font-size: 14pt; - font-family: 'Playfair Display', serif; - font-weight: 500; - text-align: center; - margin-bottom: 10px; -} - -/*--- Hover animations ---*/ -.darkOverlay { - width: 100%; - background-color: black; - opacity: 0; - position: absolute; - top: 0; - height: 100%; - z-index: 1; - transition: opacity 0.5s ease; -} - -.oppGridContainer .darkOverlay:hover { - opacity: 0.04; -} - -.oppGridContainer a:hover .oppImg { - -ms-transform: scale(1.05); - /* IE 9 */ - -webkit-transform: scale(1.05); - /* Safari 3-8 */ - transform: scale(1.05) translate(0%, 20%); - transition: transform 0.5s ease; -} - -/*--- Dark mode ---*/ -@media (prefers-color-scheme: dark) { - .jobPosition, - .oppBody, - .oppSummary { - color: white; - } - - .oppGridItems { - background-color: var(--dark-slate-grey); - } - - .link:hover { - color: white; - } - - .darkOverlay { - background-color: white; - } - - .oppLookout { - color: white; - } -} - -/*---------------------------Loading Sign--------------------------*/ -#oppLoading { - color: var(--yellow); - margin-top: 5%; - margin-bottom: 5%; -} - -#oppLoadingContainer { - display: flex; - justify-content: center; -} - -/*-------------------------------Responsive mobile design------------------------------*/ -@media only screen and (max-width: 750px) { - .head, - .lookoutSize { - font-size: 10pt; - } - - .oppLookout { - padding: 50px 0; - } -} - -@media only screen and (max-width: 640px) { - .oppBody, - .oppLookout { - max-width: 90%; - } - - .head { - max-width: 80%; - margin: 0 auto; - } - - .oppGridContainer { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); - } -} - -@media only screen and (max-width: 400px) { - .oppBody { - max-width: 100%; - } - - .oppGridContainer { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); - } - - .lookoutSize { - font-size: 9pt; - } -} - -@media only screen and (max-width: 350px) { - .oppImg { - width: 250px; - height: 150px; - } -} From e1022074d941ea57eb1e7c6495d9afc484244162 Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 01:15:20 +1000 Subject: [PATCH 04/21] new sponsorship page --- pages/careers-hub/sponsors.tsx | 151 +++++ styles/CareersHub.module.css | 1129 +++++++++++++++----------------- 2 files changed, 682 insertions(+), 598 deletions(-) create mode 100644 pages/careers-hub/sponsors.tsx diff --git a/pages/careers-hub/sponsors.tsx b/pages/careers-hub/sponsors.tsx new file mode 100644 index 0000000..45754a1 --- /dev/null +++ b/pages/careers-hub/sponsors.tsx @@ -0,0 +1,151 @@ +// @ts-nocheck comment +import React from 'react'; +import Head from 'next/head'; +import Image from 'next/image'; +import styles from '../../styles/CareersHub.module.css'; +import ScrollUpBtn from '../../components/ScrollUpBtn'; +import CareersNav from '../../components/CareersNav'; +import PageBanner from '../../components/PageBanner'; +import { loadSponsors } from '../../lib/api'; +import { revalidate } from '../../lib/helpers/constants'; + +const TIER_ORDER = ['diamond', 'gold', 'silver', 'bronze', 'affiliations', 'partnerships']; +const TIER_LABELS: Record = { + diamond: 'Diamond', + gold: 'Gold', + silver: 'Silver', + bronze: 'Bronze', + affiliations: 'Affiliations', + partnerships: 'Partnerships', +}; +const FEATURED_TIERS = new Set(['diamond', 'gold']); + +const SponsorsPage = ({ sponsors }: any) => { + const sponsors2026 = sponsors.filter((s: any) => s.fields.year === 2026); + const sponsorPool = sponsors2026.length ? sponsors2026 : sponsors; + const sponsorsByTier = TIER_ORDER.reduce((acc: Record, tier) => { + const group = sponsorPool.filter((s: any) => s.fields.type === tier); + if (group.length) acc[tier] = group; + return acc; + }, {}); + + return ( +
+ + Sponsors | Careers Hub | UNSW WIT + + + + + + {Object.keys(sponsorsByTier).length > 0 && ( +
+
+ {TIER_ORDER.filter((tier) => sponsorsByTier[tier]).map((tier) => { + const group: any[] = sponsorsByTier[tier]; + const isFeatured = FEATURED_TIERS.has(tier); + + return ( +
+
+ + {TIER_LABELS[tier]} + +
+ + {isFeatured ? ( +
+ {group.map((sponsor: any, i: number) => { + const logoUrl = 'https:' + sponsor.fields.lightModeLogo.fields.file.url; + const descText = + sponsor.fields.description?.content?.[0]?.content?.[0]?.value || ''; + const displayName = sponsor.fields.name.replace(/\s*\(\d{4}\)$/, ''); + return ( +
+
+ {displayName} +
+

{displayName}

+ {descText &&

{descText}

} + + Find out more + +
+ ); + })} +
+ ) : ( +
+ {group.map((sponsor: any, i: number) => { + const logoUrl = 'https:' + sponsor.fields.lightModeLogo.fields.file.url; + const displayName = sponsor.fields.name.replace(/\s*\(\d{4}\)$/, ''); + return ( + + {displayName} + + ); + })} +
+ )} +
+ ); + })} +
+
+ )} + + +
+ ); +}; + +export async function getStaticProps() { + const sponsors = await loadSponsors(); + return { + props: { + sponsors: sponsors || [], + }, + revalidate: revalidate, + }; +} + +export default SponsorsPage; diff --git a/styles/CareersHub.module.css b/styles/CareersHub.module.css index 5b738a3..5ad2f52 100644 --- a/styles/CareersHub.module.css +++ b/styles/CareersHub.module.css @@ -1,598 +1,531 @@ -/* ─── Animations ─────────────────────────────────────────────────────────── */ -@keyframes fadeUp { - from { - opacity: 0; - transform: translateY(28px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -@keyframes fadeIn { - from { opacity: 0; } - to { opacity: 1; } -} - -@keyframes slideRight { - from { - opacity: 0; - transform: translateX(-20px); - } - to { - opacity: 1; - transform: translateX(0); - } -} - -/* Scroll-reveal base — elements start hidden */ -.reveal { - opacity: 0; -} - -/* JS adds .visible when element enters viewport */ -.reveal.visible { - animation: fadeUp 0.65s ease both; - animation-delay: var(--stagger, 0s); -} - -/* ─── Layout shell ───────────────────────────────────────────────────────── */ -.section { - padding: 72px 0; -} - -.sectionAlt { - background-color: var(--light-yellow); -} - -.inner { - max-width: 68%; - margin: 0 auto; -} - -/* ─── Intro band ─────────────────────────────────────────────────────────── */ -.introBand { - background-color: var(--black); - padding: 52px 0; -} - -.introInner { - max-width: 68%; - margin: 0 auto; -} - -.introText { - font-family: 'Playfair Display', serif; - font-size: 18pt; - font-weight: 400; - color: #fff; - line-height: 1.7; - margin: 0; -} - -/* ─── Section headers ────────────────────────────────────────────────────── */ -.sectionLabel { - display: inline-block; - font-family: 'Montserrat', sans-serif; - font-size: 7.5pt; - font-weight: 700; - letter-spacing: 2.5pt; - color: var(--yellow); - margin-bottom: 12px; -} - -.sectionHeading { - font-family: 'Montserrat', sans-serif; - font-size: 22pt; - font-weight: 700; - color: var(--black); - letter-spacing: 0.5pt; - text-transform: uppercase; - margin: 0 0 8px 0; - text-align: left; -} - -.sectionSub { - font-family: 'Montserrat', sans-serif; - font-size: 10pt; - color: var(--grey); - margin: 0 0 40px 0; - max-width: 560px; - line-height: 1.8; -} - -/* ─── Career pathway cards ───────────────────────────────────────────────── */ -.pathwayGrid { - display: grid; - grid-template-columns: repeat(4, 1fr); - gap: 20px; - margin-top: 36px; -} - -.pathwayCard { - background: var(--white); - border: 1px solid rgba(0, 0, 0, 0.07); - border-radius: 6px; - padding: 28px 24px; - display: flex; - flex-direction: column; - gap: 12px; - transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease; - height: 100%; -} - -.pathwayCard:hover { - transform: translateY(-6px); - box-shadow: 0 12px 32px rgba(0, 0, 0, 0.1); - border-color: var(--yellow); -} - -.pathwayIcon { - font-size: 22pt; - color: var(--yellow); - line-height: 1; -} - -.pathwayTitle { - font-family: 'Playfair Display', serif; - font-size: 14pt; - font-weight: 500; - color: var(--black); - margin: 0; -} - -.pathwayBody { - font-family: 'Montserrat', sans-serif; - font-size: 9pt; - color: var(--grey); - line-height: 1.8; - margin: 0; - flex: 1; -} - -.pathwayTip { - font-family: 'Montserrat', sans-serif; - font-size: 8.5pt; - color: var(--grey); - background: rgba(254, 177, 75, 0.1); - border-left: 3px solid var(--yellow); - padding: 8px 12px; - margin: 4px 0 0 0; - line-height: 1.6; -} - -.tipLabel { - font-weight: 700; - color: var(--yellow); -} - -/* ─── Category filter ────────────────────────────────────────────────────── */ -.categoryFilter { - display: flex; - gap: 8px; - flex-wrap: wrap; - margin-bottom: 28px; -} - -.categoryBtn { - font-family: 'Montserrat', sans-serif; - font-size: 7.5pt; - font-weight: 700; - letter-spacing: 1pt; - text-transform: uppercase; - color: var(--grey); - background: transparent; - border: 1.5px solid rgba(0, 0, 0, 0.18); - padding: 6px 16px; - border-radius: 2px; - cursor: pointer; - transition: all 0.18s ease; -} - -.categoryBtn:hover { - border-color: var(--yellow); - color: var(--yellow); -} - -.categoryBtnActive { - background-color: var(--yellow); - border-color: var(--yellow); - color: #fff; -} - -/* ─── Resource cards ─────────────────────────────────────────────────────── */ -.resourceGrid { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 20px; -} - -.resourceCard { - background: var(--white); - border: 1px solid rgba(0, 0, 0, 0.07); - border-radius: 6px; - padding: 24px; - display: flex; - flex-direction: column; - gap: 10px; - text-decoration: none; - color: inherit; - position: relative; - overflow: hidden; - transition: transform 0.22s ease, box-shadow 0.22s ease, border-color 0.22s ease; -} - -.resourceCard::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 3px; - background: var(--yellow); - transform: scaleX(0); - transform-origin: left; - transition: transform 0.25s ease; -} - -.resourceCard:hover { - transform: translateY(-4px); - box-shadow: 0 10px 28px rgba(0, 0, 0, 0.09); - border-color: transparent; -} - -.resourceCard:hover::before { - transform: scaleX(1); -} - -.resourceTag { - font-family: 'Montserrat', sans-serif; - font-size: 7pt; - font-weight: 700; - letter-spacing: 1pt; - text-transform: uppercase; - color: #fff; - background: var(--yellow); - padding: 3px 9px; - border-radius: 2px; - align-self: flex-start; -} - -.resourceTitle { - font-family: 'Playfair Display', serif; - font-size: 14pt; - font-weight: 500; - color: var(--black); - margin: 0; - line-height: 1.4; -} - -.resourceDesc { - font-family: 'Montserrat', sans-serif; - font-size: 9pt; - color: var(--grey); - line-height: 1.7; - margin: 0; - flex: 1; -} - -.resourceCta { - font-family: 'Montserrat', sans-serif; - font-size: 8.5pt; - font-weight: 700; - color: var(--yellow); - letter-spacing: 0.5pt; - margin-top: auto; -} - -/* ─── Sponsors ───────────────────────────────────────────────────────────── */ -.tierBlock { - margin-top: 48px; -} - -.tierLabelWrap { - display: flex; - align-items: center; - gap: 16px; - margin-bottom: 32px; -} - -.tierDivider { - flex: 1; - height: 1px; - background: rgba(0, 0, 0, 0.1); -} - -.tierLabel { - font-family: 'Montserrat', sans-serif; - font-size: 8pt; - font-weight: 700; - letter-spacing: 2pt; - text-transform: uppercase; - color: var(--grey); - white-space: nowrap; -} - -/* Featured sponsor cards (diamond + gold) */ -.featuredSponsorGrid { - display: flex; - flex-wrap: wrap; - gap: 24px; - justify-content: center; -} - -.featuredSponsorGrid > * { - flex: 0 1 calc(33.333% - 16px); - min-width: 200px; -} - -.featuredSponsorGridFour > * { - flex: 0 1 calc(25% - 18px); -} - -.featuredSponsorCard { - display: flex; - flex-direction: column; - align-items: center; - text-align: center; - padding: 32px 24px 28px; - border: 1px solid rgba(0, 0, 0, 0.08); - border-radius: 6px; - gap: 14px; - background: var(--white); - max-height: 220px; - overflow: hidden; - transition: transform 0.35s ease, box-shadow 0.35s ease, max-height 0.45s ease; -} - -.featuredSponsorCard:hover { - transform: translateY(-5px); - box-shadow: 0 12px 32px rgba(0, 0, 0, 0.09); - max-height: 600px; -} - -.featuredLogoWrap { - height: 72px; - display: flex; - align-items: center; - justify-content: center; -} - -.featuredSponsorName { - font-family: 'Playfair Display', serif; - font-size: 13pt; - font-weight: 500; - color: var(--black); - margin: 0; -} - -.featuredSponsorDesc { - font-family: 'Montserrat', sans-serif; - font-size: 8.5pt; - color: var(--grey); - line-height: 1.8; - margin: 0; - display: -webkit-box; - -webkit-line-clamp: 3; - -webkit-box-orient: vertical; - overflow: hidden; - transition: -webkit-line-clamp 0s, overflow 0s; -} - -.featuredSponsorCard:hover .featuredSponsorDesc { - display: block; - overflow: visible; - -webkit-line-clamp: unset; -} - -.sponsorBtn { - display: inline-block; - font-family: 'Montserrat', sans-serif; - font-size: 8pt; - font-weight: 700; - letter-spacing: 1pt; - text-transform: uppercase; - color: var(--black); - border: 1.5px solid var(--black); - padding: 8px 20px; - border-radius: 2px; - text-decoration: none; - margin-top: auto; - transition: background 0.18s ease, color 0.18s ease, border-color 0.18s ease; -} - -.sponsorBtn:hover { - background: var(--yellow); - border-color: var(--yellow); - color: #fff; -} - -/* Logo wall (silver, bronze, affiliations, partnerships) */ -.logoWall { - display: flex; - flex-wrap: wrap; - gap: 12px; - align-items: center; - justify-content: center; -} - -.logoWallItem { - display: flex; - align-items: center; - justify-content: center; - padding: 16px 24px; - border: 1px solid rgba(0, 0, 0, 0.07); - border-radius: 4px; - transition: border-color 0.2s ease, box-shadow 0.2s ease; -} - -.logoWallItem:hover { - border-color: var(--yellow); - box-shadow: 0 4px 14px rgba(0, 0, 0, 0.07); -} - -.logoWallImg { - transition: transform 0.2s ease; -} - -.logoWallItem:hover .logoWallImg { - transform: scale(1.05); -} - -/* ─── Empty state ────────────────────────────────────────────────────────── */ -.emptyMessage { - text-align: center; - font-family: 'Montserrat', sans-serif; - padding: 60px 0; - color: var(--grey); - font-size: 11pt; -} - -/* ─── Dark mode ──────────────────────────────────────────────────────────── */ -@media (prefers-color-scheme: dark) { - .introBand { - background-color: #1a1a1d; - } - - .sectionAlt { - background-color: #252528; - } - - .sectionHeading { - color: #f0f0f0; - } - - .pathwayCard { - background: var(--dark-slate-grey); - border-color: rgba(255, 255, 255, 0.08); - } - - .pathwayTitle { - color: #f0f0f0; - } - - .pathwayTip { - background: rgba(254, 177, 75, 0.08); - } - - .categoryBtn { - border-color: rgba(255, 255, 255, 0.2); - color: #ccc; - } - - .categoryBtn:hover { - border-color: var(--yellow); - color: var(--yellow); - } - - .categoryBtnActive { - color: #fff; - } - - .resourceCard { - background: var(--dark-slate-grey); - border-color: rgba(255, 255, 255, 0.07); - } - - .resourceTitle { - color: #f0f0f0; - } - - .featuredSponsorCard { - background: var(--dark-slate-grey); - border-color: rgba(255, 255, 255, 0.08); - } - - .featuredSponsorName { - color: #f0f0f0; - } - - .sponsorBtn { - color: #f0f0f0; - border-color: rgba(255, 255, 255, 0.3); - } - - .sponsorBtn:hover { - color: #fff; - border-color: var(--yellow); - } - - .logoWallItem { - border-color: rgba(255, 255, 255, 0.08); - } - - .logoWallItem:hover { - border-color: var(--yellow); - } - - .tierDivider { - background: rgba(255, 255, 255, 0.1); - } - - .emptyMessage { - color: #aaa; - } -} - -/* ─── Responsive ─────────────────────────────────────────────────────────── */ -@media only screen and (max-width: 1100px) { - .pathwayGrid { - grid-template-columns: repeat(2, 1fr); - } - - .featuredSponsorGrid > *, - .featuredSponsorGridFour > * { - flex: 0 1 calc(50% - 12px); - } -} - -@media only screen and (max-width: 900px) { - .inner, - .introInner { - max-width: 85%; - } - - .resourceGrid { - grid-template-columns: repeat(2, 1fr); - } -} - -@media only screen and (max-width: 640px) { - .inner, - .introInner { - max-width: 90%; - } - - .section { - padding: 52px 0; - } - - .introText { - font-size: 14pt; - } - - .sectionHeading { - font-size: 17pt; - } - - .pathwayGrid { - grid-template-columns: 1fr; - } - - .resourceGrid { - grid-template-columns: 1fr; - } - - .featuredSponsorGrid > *, - .featuredSponsorGridFour > * { - flex: 0 1 100%; - } -} - -@media only screen and (max-width: 400px) { - .inner, - .introInner { - max-width: 92%; - } -} +/* Palette mapped from CareersHub.module.css design tokens: + --black / --white / --yellow / --light-yellow / --grey / --dark-slate-grey + Update the hex values below if your global stylesheet's tokens differ. */ +.pageRoot{ + --black:#17140F; + --white:#FFFFFF; + --yellow:#FEB14B; + --yellow-dark:#E8992E; + --light-yellow:#FDF3E3; + --grey:#6E6A63; + --dark-slate-grey:#2B2926; + + --accent:var(--yellow); + --accent-2:var(--yellow-dark); + --accent-soft:var(--light-yellow); + --ink:var(--black); + --ink-soft:var(--grey); + --line:rgba(0,0,0,.08); + --bg:#FFFFFF; + --card:var(--white); + --tip-bg:rgba(254,177,75,.1); + --tip-border:var(--yellow); + --radius:6px; + --radius-sm:4px; + --shadow:0 1px 2px rgba(23,20,15,.03), 0 8px 24px -14px rgba(23,20,15,.12); + --shadow-hover:0 10px 28px rgba(0,0,0,.09); + --serif:'Playfair Display', Georgia, 'Times New Roman', serif; + --sans:'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; +} +/* box-sizing, html/body reset and the `a` colour rule are already handled + site-wide by styles/globals.css — scope the Careers Hub look to this page's + own root instead of touching html, body, the universal selector or a globally. */ +.pageRoot{ + display:block; + min-height:100vh; + background:var(--bg); + color:var(--ink); + font-family:var(--sans); + -webkit-font-smoothing:antialiased; + transition:background .25s ease, color .25s ease; +} +.pageRoot img{max-width:100%;display:block;} +.wrap{max-width:1140px;margin:0 auto;padding:0 28px;} + +/* ---------- Hero ---------- */ +.hero{ + position:relative; + min-height:460px; + display:flex; align-items:flex-end; + padding:200px 0 56px; + overflow:hidden; + border-bottom:1px solid var(--line); + background: + linear-gradient(180deg, rgba(23,20,15,.35) 0%, rgba(23,20,15,.55) 55%, rgba(23,20,15,.86) 100%), + url('/headers/2026-IT-subbies.jpeg') center 30%/cover no-repeat; + color:#fff; +} +.eyebrow{ + display:inline-flex; align-items:center; gap:8px; + font-family:var(--sans); + font-size:11px; font-weight:700; letter-spacing:.18em; text-transform:uppercase; + color:var(--black); background:var(--yellow); border:1px solid rgba(0,0,0,.06); + padding:6px 14px; border-radius:2px; margin-bottom:22px; +} +.hero h1{ + font-family:var(--serif); + font-weight:500; + font-size:clamp(38px, 6vw, 60px); + line-height:1.1; + margin:0 0 20px; + max-width:820px; + letter-spacing:-.01em; + color:#fff; + text-shadow:0 2px 24px rgba(0,0,0,.25); +} +.hero h1 em{ font-style:italic; color:var(--yellow); } +.heroLede{ + font-family:var(--sans); + font-size:16.5px; line-height:1.75; color:rgba(255,255,255,.86); max-width:680px; margin:0 0 28px; +} +.heroCta{ display:flex; gap:12px; flex-wrap:wrap; } +.btn{ + display:inline-flex; align-items:center; gap:8px; + font-family:var(--sans); + padding:13px 26px; border-radius:2px; font-weight:700; font-size:12.5px; + letter-spacing:.05em; text-transform:uppercase; + text-decoration:none; cursor:pointer; border:1.5px solid transparent; + transition:transform .15s ease, box-shadow .15s ease, background .15s ease, color .15s ease; +} +.btn:hover{ transform:translateY(-1px); } +.btnPrimary{ background:var(--orange); color:#fff; } +.btnPrimary:hover{ background:var(--yellow); color:var(--black); } +.btnGhost{ background:transparent; border-color:rgba(255,255,255,.7); color:#fff; } +.btnGhost:hover{ border-color:var(--yellow); background:var(--yellow); color:var(--black); } + +/* ---------- Sections ---------- */ +.section{ padding:76px 0; } +.sectionAlt{ background:var(--light-yellow); border-top:1px solid var(--line); border-bottom:1px solid var(--line); } +.sectionHead{ max-width:680px; margin-bottom:44px; } +.sectionHeadCenter{ max-width:none; margin-left:auto; margin-right:auto; text-align:center; } +.sectionLabel{ + display:block; font-family:var(--sans); font-size:10px; font-weight:700; letter-spacing:.2em; text-transform:uppercase; + color:var(--yellow); margin-bottom:12px; +} +.sectionHeading{ + font-family:var(--sans); font-weight:700; text-transform:uppercase; letter-spacing:.01em; + font-size:clamp(22px,3vw,30px); margin:0 0 12px; color:var(--black); +} +.sectionSub{ font-family:var(--sans); color:var(--ink-soft); font-size:14px; line-height:1.8; margin:0; } + +/* ---------- Intro band content ---------- */ +.introLede{ + font-family:var(--serif); font-weight:500; font-size:clamp(20px,2.4vw,26px); line-height:1.5; + color:var(--ink); max-width:760px; margin:0 0 36px; +} +.introTiles{ display:grid; grid-template-columns:repeat(3,1fr); gap:20px; } +@media (max-width:860px){ .introTiles{ grid-template-columns:1fr; } } +.introTile{ + background:var(--card); border:1px solid var(--line); border-radius:var(--radius); + padding:26px 24px; box-shadow:var(--shadow); transition:transform .18s ease, box-shadow .18s ease; +} +.introTile:hover{ transform:translateY(-3px); box-shadow:var(--shadow-hover); } +.introTileIcon{ display:block; font-size:20px; color:var(--yellow); margin-bottom:12px; } +.introTile h3{ font-family:var(--serif); font-weight:500; font-size:17px; margin:0 0 8px; color:var(--ink); } +.introTile p{ font-family:var(--sans); font-size:13px; line-height:1.7; color:var(--ink-soft); margin:0 0 14px; } +.introTileLink{ + font-family:var(--sans); font-size:11.5px; font-weight:700; letter-spacing:.03em; text-transform:uppercase; + color:var(--yellow-dark); text-decoration:none; +} +.callout{ + background:var(--black); border:1px solid var(--line); border-radius:var(--radius); + padding:26px 24px; box-shadow:var(--shadow); display:flex; flex-direction:column; justify-content:center; +} +.callout .calloutKicker{ + font-family:var(--sans); font-size:10.5px; font-weight:700; letter-spacing:.14em; text-transform:uppercase; color:var(--yellow); + margin-bottom:12px; display:block; +} +.callout .quoteLine{ + font-family:var(--serif); font-style:italic; font-weight:500; font-size:17px; color:#fff; line-height:1.55; margin:0; +} + +/* ---------- Pathway cards ---------- */ +.grid4{ display:grid; grid-template-columns:repeat(4,1fr); gap:20px; } +@media (max-width:980px){ .grid4{ grid-template-columns:repeat(2,1fr); } } +@media (max-width:560px){ .grid4{ grid-template-columns:1fr; } } +.pathwayCard{ + background:var(--card); border:1px solid var(--line); border-radius:var(--radius); + padding:26px 22px; height:100%; box-shadow:var(--shadow); transition:transform .18s ease, box-shadow .18s ease; +} +.pathwayCard:hover{ transform:translateY(-3px); box-shadow:var(--shadow-hover); } +.pathwayIcon{ + display:inline-flex; align-items:center; justify-content:center; + color:var(--yellow); font-size:24px; margin-bottom:6px; +} +.pathwayTitle{ font-family:var(--serif); font-weight:500; font-size:16px; margin:0 0 8px; color:var(--ink); } +.pathwayBody{ font-family:var(--sans); font-size:13px; line-height:1.8; color:var(--ink-soft); margin:0 0 14px; } +.pathwayTip{ + font-family:var(--sans); font-size:12px; line-height:1.6; background:var(--tip-bg); border:none; border-left:3px solid var(--tip-border); + border-radius:0; padding:8px 12px; color:var(--ink-soft); margin:0; +} +.tipLabel{ font-weight:700; color:var(--yellow); } + +/* ---------- Spotlight cards (clickable, open modal) ---------- */ +.gridCards{ display:grid; grid-template-columns:repeat(4,1fr); gap:18px; } +@media (max-width:980px){ .gridCards{ grid-template-columns:repeat(2,1fr); } } +@media (max-width:560px){ .gridCards{ grid-template-columns:1fr; } } +.spotCard{ + text-align:left; background:var(--card); border:1px solid var(--line); border-radius:var(--radius); + padding:24px 20px; cursor:pointer; box-shadow:var(--shadow); transition:transform .18s ease, box-shadow .18s ease, border-color .18s ease; + display:flex; flex-direction:column; gap:10px; font:inherit; color:inherit; width:100%; +} +.spotCard:hover{ transform:translateY(-3px); box-shadow:var(--shadow-hover); border-color:var(--yellow); } +.spotIcon{ font-size:20px; color:var(--yellow); } +.spotTitle{ font-family:var(--serif); font-weight:500; font-size:17px; margin:0; color:var(--ink); } +.spotStat{ + align-self:flex-start; font-family:var(--sans); font-size:10.5px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; + color:var(--black); background:var(--light-yellow); padding:4px 10px; border-radius:2px; +} +.spotCta{ font-family:var(--sans); font-size:11.5px; font-weight:700; letter-spacing:.03em; text-transform:uppercase; color:var(--ink-soft); margin-top:auto; display:flex; align-items:center; gap:6px; } +.spotCard:hover .spotCta{ color:var(--yellow); } + +/* ---------- Job searching toolkit (accordion) ---------- */ +.toolkitList{ border-top:1px solid var(--line); } +.toolkitItem{ border-bottom:1px solid var(--line); } +.toolkitTrigger{ + width:100%; display:flex; align-items:center; justify-content:space-between; gap:16px; + background:transparent; border:none; padding:22px 4px; cursor:pointer; text-align:left; + font:inherit; color:var(--ink); +} +.toolkitTrigger:hover .toolkitName{ color:var(--yellow-dark); } +.toolkitNum{ font-family:var(--sans); font-size:12px; color:var(--ink-soft); font-variant-numeric:tabular-nums; width:26px; flex-shrink:0; } +.toolkitName{ font-family:var(--serif); font-size:17px; font-weight:500; flex:1; transition:color .15s ease; } +.toolkitIcon{ + width:26px; height:26px; border-radius:50%; border:1.5px solid var(--line); flex-shrink:0; + display:flex; align-items:center; justify-content:center; font-size:14px; color:var(--ink-soft); + transition:transform .2s ease, background .2s ease, color .2s ease; +} +.toolkitItem.open .toolkitIcon{ transform:rotate(45deg); background:var(--yellow); color:#fff; border-color:var(--yellow); } +.toolkitPanel{ max-height:0; overflow:hidden; transition:max-height .3s ease; } +.toolkitPanelInner{ padding:0 4px 28px 42px; max-width:760px; font-family:var(--sans); } +.toolkitPanelInner h4{ font-size:12.5px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; margin:20px 0 8px; color:var(--yellow-dark); } +.toolkitPanelInner h4:first-child{ margin-top:0; } +.toolkitPanelInner p{ font-size:14px; line-height:1.8; color:var(--ink-soft); margin:0 0 12px; } +.toolkitPanelInner ul{ margin:0 0 12px; padding-left:20px; } +.toolkitPanelInner li{ font-size:14px; line-height:1.75; color:var(--ink-soft); margin-bottom:6px; } +.toolkitPanelInner strong{ color:var(--ink); } + +/* ---------- Category filter (resources) ---------- */ +.categoryFilter{ display:flex; flex-wrap:wrap; gap:8px; margin-bottom:32px; } +.categoryBtn{ + font-family:var(--sans); + padding:7px 17px; border-radius:2px; border:1.5px solid rgba(0,0,0,.18); background:transparent; + font-size:10.5px; font-weight:700; letter-spacing:.05em; text-transform:uppercase; color:var(--ink-soft); cursor:pointer; transition:all .15s ease; +} +.categoryBtn:hover{ border-color:var(--yellow); color:var(--yellow-dark); } +.categoryBtnActive{ background:var(--yellow); border-color:var(--yellow); color:#fff; } + +.resourceGrid{ display:grid; grid-template-columns:repeat(3,1fr); gap:18px; } +@media (max-width:900px){ .resourceGrid{ grid-template-columns:repeat(2,1fr); } } +@media (max-width:600px){ .resourceGrid{ grid-template-columns:1fr; } } +.resourceCard{ + display:block; text-decoration:none; background:var(--card); border:1px solid var(--line); + border-radius:var(--radius); padding:22px 20px; box-shadow:var(--shadow); transition:transform .18s ease, box-shadow .18s ease; + position:relative; overflow:hidden; +} +.resourceCard::before{ + content:''; position:absolute; top:0; left:0; right:0; height:3px; background:var(--yellow); + transform:scaleX(0); transform-origin:left; transition:transform .25s ease; +} +.resourceCard:hover{ transform:translateY(-3px); box-shadow:var(--shadow-hover); } +.resourceCard:hover::before{ transform:scaleX(1); } +.resourceTag{ + display:inline-block; font-family:var(--sans); font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:.05em; + color:#fff; background:var(--yellow); padding:3px 9px; border-radius:2px; margin-bottom:12px; +} +.resourceTitle{ font-family:var(--serif); font-weight:500; font-size:16px; margin:0 0 8px; color:var(--ink); } +.resourceDesc{ font-family:var(--sans); font-size:13px; line-height:1.7; color:var(--ink-soft); margin:0 0 14px; } +.resourceCta{ font-family:var(--sans); font-size:11.5px; font-weight:700; letter-spacing:.03em; text-transform:uppercase; color:var(--yellow-dark); } + +/* ---------- Sponsors ---------- */ +.tierBlock{ margin-bottom:44px; } +.tierLabelWrap{ display:flex; align-items:center; gap:14px; margin-bottom:26px; } +.tierDivider{ flex:1; height:1px; background:var(--line); } +.tierLabel{ font-family:var(--sans); font-size:11px; font-weight:700; letter-spacing:.16em; text-transform:uppercase; color:var(--ink-soft); } +.featuredSponsorGrid{ display:grid; grid-template-columns:repeat(2,1fr); gap:18px; align-items:start; } +.featuredSponsorGridFour{ grid-template-columns:repeat(4,1fr); } +@media (max-width:900px){ .featuredSponsorGrid, .featuredSponsorGridFour{ grid-template-columns:repeat(2,1fr); } } +@media (max-width:560px){ .featuredSponsorGrid, .featuredSponsorGridFour{ grid-template-columns:1fr; } } +.featuredSponsorCard{ + background:var(--card); border:1px solid var(--line); border-radius:var(--radius); padding:24px; text-align:center; + box-shadow:var(--shadow); overflow:hidden; +} +.featuredLogoWrap{ + height:70px; display:flex; align-items:center; justify-content:center; margin-bottom:0; + border-radius:var(--radius-sm); color:var(--yellow-dark); font-family:var(--sans); font-weight:700; font-size:12px; +} +/* Name, description and button are collapsed by default — only the logo + shows until the card is hovered, then they drop down underneath it. */ +.featuredSponsorName{ + font-family:var(--serif); font-weight:500; font-size:15px; color:var(--ink); + max-height:0; margin:0; opacity:0; overflow:hidden; + transition:max-height .3s ease, opacity .2s ease, margin .3s ease; +} +.featuredSponsorDesc{ + font-family:var(--sans); font-size:12.5px; color:var(--ink-soft); line-height:1.7; + max-height:0; margin:0; opacity:0; overflow:hidden; + transition:max-height .3s ease .05s, opacity .2s ease .05s, margin .3s ease .05s; +} +.sponsorBtn{ + display:inline-block; font-family:var(--sans); font-size:11px; font-weight:700; letter-spacing:.05em; text-transform:uppercase; + color:var(--black); text-decoration:none; + border:1.5px solid var(--black); border-radius:2px; padding:0 18px; + max-height:0; opacity:0; overflow:hidden; + transition:max-height .3s ease .1s, opacity .2s ease .1s, padding .3s ease .1s, background .18s ease, color .18s ease, border-color .18s ease; +} +.featuredSponsorCard:hover .featuredSponsorName{ max-height:80px; margin:16px 0 8px; opacity:1; } +.featuredSponsorCard:hover .featuredSponsorDesc{ max-height:600px; margin:0 0 16px; opacity:1; } +.featuredSponsorCard:hover .sponsorBtn{ max-height:60px; padding:8px 18px; opacity:1; } +.sponsorBtn:hover{ background:var(--yellow); border-color:var(--yellow); color:#fff; } +.logoWall{ display:flex; flex-wrap:wrap; gap:14px; } +.logoWallCenter{ justify-content:center; } +.logoWallItem{ + flex:0 0 180px; height:82px; display:flex; align-items:center; justify-content:center; + background:var(--card); border:1px solid var(--line); border-radius:var(--radius-sm); color:var(--ink-soft); + font-family:var(--sans); font-size:12px; font-weight:600; text-decoration:none; transition:border-color .2s ease, box-shadow .2s ease; +} +.logoWallItem:hover{ border-color:var(--yellow); box-shadow:0 4px 14px rgba(0,0,0,.07); } + +/* ---------- Sponsor logo marquee (home page teaser) ---------- */ +.sponsorMarquee{ + overflow:hidden; + -webkit-mask-image:linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); + mask-image:linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); +} +.sponsorMarqueeTrack{ + display:flex; align-items:center; gap:56px; width:max-content; + animation:sponsorScroll 100s linear infinite; +} +.sponsorMarquee:hover .sponsorMarqueeTrack{ animation-play-state:paused; } +@keyframes sponsorScroll{ + from{ transform:translateX(0); } + to{ transform:translateX(-50%); } +} +.sponsorMarqueeItem{ + flex:0 0 auto; display:flex; align-items:center; justify-content:center; + height:60px; width:130px; +} +.sponsorMarqueeItem img{ transition:transform .2s ease; } +.sponsorMarqueeItem:hover img{ transform:scale(1.06); } +.sponsorMarqueeCta{ text-align:center; margin-top:32px; } + +/* ---------- Reassurance / closing band ---------- */ +.reassure{ + background:var(--black); color:#fff; border-radius:8px; + padding:56px 48px; position:relative; overflow:hidden; +} +.reassure::after{ + content:""; position:absolute; inset:0; + background:radial-gradient(500px 260px at 85% 0%, rgba(255,255,255,.16), transparent 60%); +} +.reassureInner{ position:relative; max-width:640px; } +.reassure .sectionLabel{ color:var(--yellow); } +.reassure h2{ font-family:var(--serif); font-weight:500; font-size:clamp(24px,3vw,32px); margin:0 0 16px; } +.reassure p{ font-family:var(--sans); font-size:15px; line-height:1.8; color:#D8D4CC; margin:0 0 14px; } +.reassure p.emph{ font-family:var(--serif); font-style:italic; font-size:19px; color:#fff; margin-top:22px; } + +/* ---------- Modal ---------- */ +.modalOverlay{ + position:fixed; inset:0; background:rgba(23,20,15,.55); backdrop-filter:blur(2px); + display:flex; align-items:flex-start; justify-content:center; padding:5vh 20px; + opacity:0; pointer-events:none; transition:opacity .2s ease; z-index:100; overflow-y:auto; +} +.modalOverlay.active{ opacity:1; pointer-events:auto; } +.modal{ + background:var(--card); border-radius:8px; max-width:680px; width:100%; padding:0; + box-shadow:0 30px 60px -20px rgba(0,0,0,.4); transform:translateY(12px); transition:transform .2s ease; + margin-bottom:5vh; +} +.modalOverlay.active .modal{ transform:translateY(0); } +.modalHeader{ + display:flex; align-items:flex-start; justify-content:space-between; gap:16px; + padding:28px 30px 20px; border-bottom:1px solid var(--line); +} +.modalTitleWrap{ display:flex; align-items:center; gap:14px; } +.modalIcon{ + width:44px; height:44px; border-radius:8px; background:var(--light-yellow); color:var(--yellow-dark); + display:flex; align-items:center; justify-content:center; font-size:20px; flex-shrink:0; +} +.modalTitle{ font-family:var(--serif); font-weight:500; font-size:23px; margin:0; color:var(--ink); } +.modalStat{ font-family:var(--sans); font-size:10.5px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; color:var(--black); background:var(--light-yellow); padding:4px 10px; border-radius:2px; display:inline-block; margin-top:6px; } +.modalClose{ + width:34px; height:34px; border-radius:50%; border:1px solid var(--line); background:transparent; + color:var(--ink-soft); font-size:16px; cursor:pointer; flex-shrink:0; display:flex; align-items:center; justify-content:center; +} +.modalClose:hover{ background:var(--accent-soft); color:var(--ink); } +.modalBody{ padding:8px 30px 32px; font-family:var(--sans); } +.modalBody h4{ font-size:11.5px; font-weight:700; letter-spacing:.05em; text-transform:uppercase; margin:26px 0 12px; color:var(--yellow-dark); } +.modalBody h4:first-child{ margin-top:0; } +.modalBody p{ font-size:14.5px; line-height:1.8; color:var(--ink-soft); margin:0 0 13px; } +.modalBody ul{ margin:0 0 13px; padding-left:20px; } +.modalBody li{ font-size:14.5px; line-height:1.75; color:var(--ink-soft); margin-bottom:7px; } +.modalBody strong{ color:var(--ink); } +.modalBody .src{ font-size:12px; color:var(--ink-soft); opacity:.75; word-break:break-all; } + +/* ---- Magazine-style enhancements for spotlight modal content ---- */ +.modalDots{ display:flex; gap:6px; padding:18px 30px 0; } +.modalDots span{ width:7px; height:7px; border-radius:50%; background:var(--yellow); opacity:.35; } +.modalDots span:nth-child(1){ opacity:1; } +.modalDots span:nth-child(2){ opacity:.6; } + +.modalBody h4.mbDivider{ + display:flex; align-items:center; gap:10px; + font-family:var(--sans); font-size:11px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; + color:var(--black); margin:30px 0 14px; +} +.modalBody h4.mbDivider::before{ + content:''; width:8px; height:8px; border-radius:50%; background:var(--yellow); flex-shrink:0; +} +.modalBody h4.mbDivider::after{ + content:''; flex:1; height:1px; background:var(--line); +} + +.modalBody p.mbQuote{ + font-family:var(--serif); font-style:italic; font-weight:500; font-size:16.5px; line-height:1.6; + color:var(--black); background:var(--light-yellow); border:2px solid var(--black); border-radius:16px 16px 16px 4px; + padding:18px 20px; margin:6px 0 24px; +} + +.modalBody p.mbPanel{ + background:var(--light-yellow); border-radius:14px; padding:16px 18px; font-family:var(--sans); + font-style:normal; font-size:13.5px; line-height:1.8; color:var(--black); margin:0 0 18px; +} + +.modalBody ul.mbDashgrid{ + display:grid; grid-template-columns:1fr 1fr; gap:12px; margin:4px 0 20px; padding:0; list-style:none; +} +@media (max-width:520px){ .modalBody ul.mbDashgrid{ grid-template-columns:1fr; } } +.modalBody ul.mbDashgrid li{ + border:1.5px dashed var(--yellow-dark); border-radius:10px; padding:12px 14px; margin:0; + font-size:13px; line-height:1.6; background:transparent; +} +.modalBody ul.mbDashgrid li strong{ + display:block; font-family:var(--sans); font-size:11px; font-weight:700; letter-spacing:.03em; + text-transform:uppercase; color:var(--yellow-dark); margin-bottom:5px; +} + +/* ---------- Reveal ---------- */ +/* Elements with [data-reveal] always carry the .reveal class alongside it in + JSX (see PathwayCard, SpotlightCard, JobCard) — target that class instead + of the bare attribute so this stays a valid (local) CSS Modules selector. */ +.reveal{ opacity:0; transform:translateY(16px); transition:opacity .55s ease, transform .55s ease; } +.reveal.visible{ opacity:1; transform:translateY(0); } + +/* ---------- Section footer note (mockup annotation) ---------- */ +.mockNote{ + margin-top:18px; font-size:12.5px; color:var(--ink-soft); background:var(--accent-soft); + border:1px dashed var(--line); border-radius:10px; padding:10px 14px; display:inline-flex; gap:8px; align-items:flex-start; +} + +/* ---------- Site nav (UNSW-style top bar) ---------- */ +.siteNav{ + position:sticky; top:0; z-index:70; font-family:var(--sans); + background:var(--card); border-bottom:1px solid var(--line); +} +.siteNavInner{ + max-width:1140px; margin:0 auto; padding:0 28px; + height:64px; display:flex; align-items:center; justify-content:space-between; gap:24px; + position:relative; +} +.siteNavBrandGroup{ display:flex; align-items:center; gap:14px; flex-shrink:0; } +.siteNavLogoLink{ display:flex; align-items:center; flex-shrink:0; } +.siteNavBrand{ + display:flex; align-items:center; gap:10px; text-decoration:none; color:var(--ink); flex-shrink:0; +} +.siteNavCrest{ + width:30px; height:30px; border-radius:2px; background:var(--black); color:var(--yellow); + display:flex; align-items:center; justify-content:center; font-family:var(--serif); font-size:15px; font-weight:600; flex-shrink:0; +} +.siteNavBrandText{ line-height:1.15; } +.siteNavBrandText .l1{ font-size:10px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:var(--ink-soft); display:block; } +.siteNavBrandText .l2{ font-size:14.5px; font-weight:700; letter-spacing:.01em; display:block; color:var(--ink); } +.siteNavLinks{ + display:flex; align-items:center; gap:2px; overflow-x:auto; scrollbar-width:none; + position:absolute; left:calc(50% + 40px); top:50%; transform:translate(-50%, -50%); + max-width:calc(100% - 340px); +} +.siteNavLinks::-webkit-scrollbar{ display:none; } +.siteNavLinks a{ + font-size:11px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; color:var(--ink-soft); text-decoration:none; + padding:8px 12px; border-radius:0; white-space:nowrap; transition:color .15s ease, background .15s ease; + border-bottom:2px solid transparent; +} +.siteNavLinks a:hover{ color:var(--black); background:var(--light-yellow); } +.siteNavLinks a.active{ color:var(--yellow-dark); border-bottom-color:var(--yellow); } +.siteNavLinks a.active:hover{ background:transparent; } + +/* offset anchored sections so the sticky nav doesn't cover the heading + (every
in this feature also carries .section) */ +.section[id]{ scroll-margin-top:76px; } + +@media (max-width:760px){ + .siteNavBrandText{ display:none; } + .siteNavInner{ gap:14px; } +} + +/* ---------- Page banner (subpages) ---------- */ +.pageBanner{ + position:relative; min-height:220px; display:flex; align-items:flex-end; + padding:70px 0 40px; overflow:hidden; border-bottom:1px solid var(--line); color:#fff; + background: + linear-gradient(180deg, rgba(23,20,15,.55) 0%, rgba(23,20,15,.8) 100%), + url('/headers/2026-IT-subbies.jpeg') center 30%/cover no-repeat; +} +.pageBannerEyebrow{ + display:inline-flex; align-items:center; gap:8px; font-family:var(--sans); + font-size:10.5px; font-weight:700; letter-spacing:.16em; text-transform:uppercase; + color:var(--black); background:var(--yellow); padding:5px 12px; border-radius:2px; margin-bottom:14px; +} +.pageBanner h1{ + font-family:var(--serif); font-weight:500; font-size:clamp(28px,4vw,42px); margin:0 0 10px; color:#fff; +} +.pageBanner p{ + font-family:var(--sans); font-size:14.5px; line-height:1.7; color:rgba(255,255,255,.85); max-width:620px; margin:0; +} + +/* ---------- Home teaser links (index page, replacing full sections) ---------- */ +.teaserGrid{ display:grid; grid-template-columns:repeat(4,1fr); gap:18px; } +@media (max-width:980px){ .teaserGrid{ grid-template-columns:repeat(2,1fr); } } +@media (max-width:560px){ .teaserGrid{ grid-template-columns:1fr; } } +.teaserCard{ + display:flex; flex-direction:column; gap:10px; text-decoration:none; + background:var(--card); border:1px solid var(--line); border-radius:var(--radius); + padding:26px 22px; box-shadow:var(--shadow); transition:transform .18s ease, box-shadow .18s ease, border-color .18s ease; +} +.teaserCard:hover{ transform:translateY(-3px); box-shadow:var(--shadow-hover); border-color:var(--yellow); } +.teaserIcon{ font-size:22px; color:var(--yellow); } +.teaserCard h3{ font-family:var(--serif); font-weight:500; font-size:17px; margin:0; color:var(--ink); } +.teaserCard p{ font-family:var(--sans); font-size:13px; line-height:1.7; color:var(--ink-soft); margin:0; } +.teaserCta{ font-family:var(--sans); font-size:11.5px; font-weight:700; letter-spacing:.03em; text-transform:uppercase; color:var(--yellow-dark); margin-top:auto; } + +/* ---------- Jobs board ---------- */ +.jobsGrid{ display:grid; grid-template-columns:repeat(2,1fr); gap:18px; } +@media (max-width:860px){ .jobsGrid{ grid-template-columns:1fr; } } +.jobCard{ + background:var(--card); border:1px solid var(--line); border-radius:var(--radius); + padding:22px 22px 20px; box-shadow:var(--shadow); transition:transform .18s ease, box-shadow .18s ease, border-color .18s ease; + display:flex; flex-direction:column; gap:10px; +} +.jobCard:hover{ transform:translateY(-3px); box-shadow:var(--shadow-hover); border-color:var(--yellow); } +.jobCardTop{ display:flex; align-items:flex-start; justify-content:space-between; gap:12px; } +.jobType{ + font-family:var(--sans); font-size:10px; font-weight:700; letter-spacing:.05em; text-transform:uppercase; + color:#fff; background:var(--black); padding:4px 10px; border-radius:2px; white-space:nowrap; +} +.jobType.internship{ background:var(--yellow-dark); } +.jobType.grad{ background:var(--black); } +.jobType.fulltime{ background:var(--grey); } +.jobDeadline{ font-family:var(--sans); font-size:11.5px; color:var(--ink-soft); white-space:nowrap; } +.jobDeadline strong{ color:var(--ink); } +.jobTitle{ font-family:var(--serif); font-weight:500; font-size:18px; margin:0; color:var(--ink); } +.jobCompany{ font-family:var(--sans); font-size:13px; font-weight:600; color:var(--yellow-dark); margin:0; } +.jobMeta{ font-family:var(--sans); font-size:12.5px; color:var(--ink-soft); display:flex; gap:14px; flex-wrap:wrap; margin:0; } +.jobDesc{ font-family:var(--sans); font-size:13.5px; line-height:1.7; color:var(--ink-soft); margin:0; flex:1; } +.jobApply{ + display:inline-flex; align-items:center; gap:6px; align-self:flex-start; margin-top:6px; + font-family:var(--sans); font-size:11.5px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; + color:var(--black); border:1.5px solid var(--black); border-radius:2px; padding:9px 18px; text-decoration:none; + transition:background .18s ease, color .18s ease, border-color .18s ease; +} +.jobApply:hover{ background:var(--yellow); border-color:var(--yellow); color:var(--black); } +.jobsEmpty{ text-align:center; padding:60px 0; font-family:var(--sans); color:var(--ink-soft); font-size:14px; } From 83c772e0da1a2ab16a2735c813597a1148db406d Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 12:17:40 +1000 Subject: [PATCH 05/21] added PWC sponsor info page --- components/JobCard.tsx | 35 ++++ components/NavigationBar.tsx | 6 +- pages/careers-hub/sponsor-pages/pwc.tsx | 224 ++++++++++++++++++++++++ sponsor-styles/pwc.module.css | 109 ++++++++++++ styles/CareersHub.module.css | 57 ++++-- 5 files changed, 410 insertions(+), 21 deletions(-) create mode 100644 components/JobCard.tsx create mode 100644 pages/careers-hub/sponsor-pages/pwc.tsx create mode 100644 sponsor-styles/pwc.module.css diff --git a/components/JobCard.tsx b/components/JobCard.tsx new file mode 100644 index 0000000..a99e3b5 --- /dev/null +++ b/components/JobCard.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import styles from '../styles/CareersHub.module.css'; +import { JobEntry } from '../lib/careersHubData'; + +const TYPE_LABELS: Record = { + internship: 'Internship', + grad: 'Grad Program', + fulltime: 'Full-Time', +}; + +const JobCard = ({ job, stagger = 0 }: { job: JobEntry; stagger?: number }) => ( +
+
+ {TYPE_LABELS[job.type]} + + Closes {job.deadline} + +
+

{job.title}

+

{job.company}

+

+ 📍 {job.location} +

+

{job.description}

+ + Apply now → + +
+); + +export default JobCard; \ No newline at end of file diff --git a/components/NavigationBar.tsx b/components/NavigationBar.tsx index 7cb5c52..854d9d3 100644 --- a/components/NavigationBar.tsx +++ b/components/NavigationBar.tsx @@ -106,10 +106,12 @@ const NavigationBar = () => {
- {/* change WIT logo depending on device theme and scroll position */} + {/* change WIT logo depending on device theme and scroll position; + Careers Hub pages sit on a light background so they use the + black logo instead of the white one used everywhere else */} wit logo ( +
+ + PwC | Sponsors | Careers Hub | UNSW WIT + + + + +
+ {/* ── About ──────────────────────────────────────────── */} +
+
+ {logoUrl && ( + PwC logo + )} +
+
+

About Us

+

+ At PwC Australia, we take a human-led, tech-powered approach, combining diverse + perspectives, expertise and relationships with the right technology to solve + problems and unlock opportunities. In Australia, our team is over 8,000 strong, + with deep expertise in the industries critical to our nation including energy, + utilities and resources, financial services, healthcare, education and consumer + markets. We're bold about our commitment to diversity, inclusion, wellbeing + and social impact. And we empower our people in upskilling, flexible working and + pursuing their passions—our purpose is what drives our community of solvers. +

+
+
+ + {/* ── Recommended Qualifications ─────────────────────── */} +
+

Recommended Qualifications

+

+ Preferred degree types include Accounting, Finance, Commerce, Information Systems, + Computer Science, IT, Engineering (both non-Software, Software Development), and + Mathematics/Statistic +

+
+ + {/* ── Main grid ──────────────────────────────────────── */} +
+
+ {/* Valued Employee Skills */} +
+

Valued Employee Skills

+
+ {SKILLS.map((skill) => ( +
+ {skill.icon} + {skill.label} +
+ ))} +
+
+ + {/* Application Process */} +
+

Application Process

+

+ Our typical application journey consists of the steps: online application, + digital interview and behavioural assessment, assessment centre and final + interview. For more details, visit: +

+ +
+ + {/* Application Tips */} +
+

Application Tips

+

+ Check out our{' '} + + Youtube PwC Careers Australia Channel + {' '} + with videos with tips at every stage. +

+
+
+ +
+ {/* Roles Available — two-tone chevron box */} +
+
+

Roles Available

+

+ As a grad you'll complete rotational programs; you may rotate across all + of the following areas. +

+
+
+
    + {ROLES.map((role) => ( +
  • {role}
  • + ))} +
+
+
+ + {/* Internship and Graduate Opportunities */} +
+

Internship and Graduate Opportunities

+

+ Our applications are currently closed for 2024, but open again in{' '} + 2025 February. +

+ +

Our Graduate Program

+

+ In our Graduate program, you'll launch your career by solving important + problems. The graduate program is full-time and students who are in their{' '} + final year or candidates who have{' '} + graduated within the last 2 years are + eligible. +

+ +

Vacation Program

+

+ With market-leading industry experience and world-class learning, a{' '} + summer (4 to 8 weeks) spent at PwC can + set you up for an exciting future inside or outside our walls! If you're in + your{' '} + second last (penultimate) year of your + graduate or postgraduate studies, we have a range of roles for you to explore. +

+ +

Trainee Program

+

+ As a Trainee, you'll embark on a{' '} + two-year journey of combined work and + study with PwC. You'll join us four days a week (with full-time pay and 1 + day of paid study!) while you study part-time for two years. You'll then + take a break from full-time work to complete your degree! As a trainee, + you'll combine your university studies with work experience to build the + perfect foundation for your career, all while receiving{' '} + professional and financial support in + a full-time paid role. +

+ +

+ For more information, visit{' '} + + jobs-au.pwc.com/au/en/students + +

+
+
+
+
+ + +
+); + +// Pull PwC's logo from the same Contentful sponsor data used on the +// Sponsors listing page, rather than a hardcoded local asset. +export const getStaticProps: GetStaticProps = async () => { + const sponsors = (await loadSponsors()) || []; + const pwc = sponsors.find((s: any) => { + const name = s.fields.name.toLowerCase(); + return name.includes('pwc') || name.includes('pricewaterhousecoopers'); + }); + const logoUrl = pwc?.fields?.lightModeLogo?.fields?.file?.url + ? 'https:' + pwc.fields.lightModeLogo.fields.file.url + : null; + return { props: { logoUrl }, revalidate }; +}; + +export default PwcSponsorPage; diff --git a/sponsor-styles/pwc.module.css b/sponsor-styles/pwc.module.css new file mode 100644 index 0000000..7edbd55 --- /dev/null +++ b/sponsor-styles/pwc.module.css @@ -0,0 +1,109 @@ +/* PwC sponsor info-sheet page — bespoke brand palette, separate from the + main Careers Hub design system since this is sponsor-branded content. */ +.page{ + --pwc-cream:#f3ebe0; + --pwc-orange-dark:#c65a28; + --pwc-orange:#e08c46; + --pwc-orange-light:#f0c9a0; + --pwc-maroon:#54201a; + --pwc-ink:#2b2320; + + /* is reused on this page */ + --black:#17140F; + --white:#FFFFFF; + --yellow:#FEB14B; + --yellow-dark:#E8992E; + --grey:#6E6A63; + --ink:var(--black); + --ink-soft:var(--grey); + --line:rgba(0,0,0,.08); + --card:var(--white); + --sans:'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; + + background:var(--pwc-cream); + font-family:'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; + color:var(--pwc-ink); +} +.wrap{ max-width:1080px; margin:0 auto; padding:48px 28px 80px; } + +/* ---------- About ---------- */ +.about{ display:grid; grid-template-columns:280px 1fr; gap:40px; align-items:center; padding-bottom:40px; } +@media (max-width:640px){ .about{ grid-template-columns:1fr; } } +.logoMark{ display:flex; align-items:flex-start; } +.aboutHeading{ font-size:22px; font-weight:800; margin:0 0 12px; color:var(--pwc-ink); } +.aboutText{ font-size:14.5px; line-height:1.8; color:#4a3f39; margin:0; } + +/* ---------- Banner ---------- */ +.banner{ background:var(--pwc-orange-dark); color:#fff; border-radius:6px; padding:26px 32px; margin-bottom:24px; } +.bannerHeading{ font-size:19px; font-weight:800; margin:0 0 8px; color:#fff; } +.bannerText{ font-size:13.5px; line-height:1.7; margin:0; color:#FBE7D6; } + +/* ---------- Main grid ---------- */ +.mainGrid{ display:grid; grid-template-columns:1fr 1.5fr; gap:20px; align-items:start; } +@media (max-width:780px){ .mainGrid{ grid-template-columns:1fr; } } +.leftCol, +.rightCol{ display:flex; flex-direction:column; gap:20px; } + +.block{ border-radius:6px; padding:26px 26px; } +.blockHeading{ font-size:17px; font-weight:800; margin:0 0 14px; color:#fff; } + +/* Skills — ribbon-tail bottom */ +.skills{ + background:var(--pwc-maroon); color:#fff; + clip-path:polygon(0 0, 100% 0, 100% 84%, 50% 100%, 0 84%); + padding-bottom:56px; +} +.skillsGrid{ display:grid; grid-template-columns:1fr 1fr; gap:22px 16px; } +.skillItem{ display:flex; flex-direction:column; align-items:center; text-align:center; gap:10px; } +.skillItem:last-child{ grid-column:1 / -1; } +.skillIcon{ + width:52px; height:52px; border-radius:50%; border:1.5px solid rgba(255,255,255,.55); + display:flex; align-items:center; justify-content:center; font-size:20px; +} +.skillLabel{ font-size:12.5px; font-weight:600; line-height:1.4; } + +/* Roles Available */ +.roles{ display:flex; border-radius:6px; overflow:hidden; } +.rolesLeft{ + position:relative; z-index:2; flex:0 0 42%; + background:var(--pwc-orange-dark); color:#fff; + padding:24px 30px 24px 26px; + /* arrowhead */ + clip-path:polygon(0 0, 80% 0, 100% 50%, 80% 100%, 0 100%); +} +.rolesRight{ + position:relative; z-index:1; flex:1; + background:var(--pwc-orange); color:#fff; + margin-left:-70px; + padding:24px 26px 24px 100px; +} +@media (max-width:560px){ + .roles{ flex-direction:column; } + .rolesLeft{ clip-path:none; padding:24px 26px; } + .rolesRight{ margin-left:0; padding:20px 26px; } +} +.rolesText{ font-size:13px; line-height:1.7; margin:0; color:#fff6ee; } +.rolesList{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:8px; } +.rolesList li{ font-size:13.5px; font-weight:600; } + +/* Process */ +.process{ background:var(--pwc-orange-dark); color:#fff; } +.processText{ font-size:13px; line-height:1.75; margin:0 0 14px; color:#FBE7D6; } +.processLinks{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:6px; } +.processLinks a{ color:#FCEBD9; font-weight:700; font-size:13px; text-decoration:underline; } +.processLinks a:hover{ color:#fff; } + +/* Tips */ +.tips{ background:var(--pwc-orange-light); color:var(--pwc-ink); } +.tipsText{ font-size:13px; line-height:1.75; margin:0; } +.tipsText a{ color:var(--pwc-orange-dark); font-weight:700; text-decoration:underline; } +.tipsText a:hover{ color:var(--pwc-maroon); } + +/* Opportunities */ +.opportunities{ background:#fff; border:1px solid rgba(0,0,0,.06); } +.opportunities h2{ font-size:19px; font-weight:800; margin:0 0 14px; color:#000; } +.opportunities p{ font-size:13.5px; line-height:1.8; margin:0 0 18px; color:#4a3f39; } +.opportunities h3{ font-size:14.5px; font-weight:800; margin:0 0 8px; color:var(--pwc-orange-dark); } +.highlight{ color:var(--pwc-orange-dark); font-weight:700; } +.opportunities a{ color:var(--pwc-orange-dark); font-weight:700; text-decoration:underline; } +.opportunities a:hover{ color:var(--pwc-maroon); } diff --git a/styles/CareersHub.module.css b/styles/CareersHub.module.css index 5ad2f52..66e777f 100644 --- a/styles/CareersHub.module.css +++ b/styles/CareersHub.module.css @@ -115,6 +115,8 @@ } .introTiles{ display:grid; grid-template-columns:repeat(3,1fr); gap:20px; } @media (max-width:860px){ .introTiles{ grid-template-columns:1fr; } } +.introTilesTwo{ display:grid; grid-template-columns:repeat(2,1fr); gap:24px; } +@media (max-width:760px){ .introTilesTwo{ grid-template-columns:1fr; } } .introTile{ background:var(--card); border:1px solid var(--line); border-radius:var(--radius); padding:26px 24px; box-shadow:var(--shadow); transition:transform .18s ease, box-shadow .18s ease; @@ -165,7 +167,7 @@ @media (max-width:980px){ .gridCards{ grid-template-columns:repeat(2,1fr); } } @media (max-width:560px){ .gridCards{ grid-template-columns:1fr; } } .spotCard{ - text-align:left; background:var(--card); border:1px solid var(--line); border-radius:var(--radius); + text-align:left; text-decoration:none; background:var(--card); border:1px solid var(--line); border-radius:var(--radius); padding:24px 20px; cursor:pointer; box-shadow:var(--shadow); transition:transform .18s ease, box-shadow .18s ease, border-color .18s ease; display:flex; flex-direction:column; gap:10px; font:inherit; color:inherit; width:100%; } @@ -179,6 +181,35 @@ .spotCta{ font-family:var(--sans); font-size:11.5px; font-weight:700; letter-spacing:.03em; text-transform:uppercase; color:var(--ink-soft); margin-top:auto; display:flex; align-items:center; gap:6px; } .spotCard:hover .spotCta{ color:var(--yellow); } +/* ---------- Industry spotlights (editorial alternating rows) ---------- */ +.industryList{ display:flex; flex-direction:column; } +.industryRow{ + display:grid; grid-template-columns:1fr 1fr; gap:48px; align-items:center; + width:100%; text-align:left; text-decoration:none; background:none; border:none; border-bottom:1px solid var(--line); + padding:40px 4px; cursor:pointer; font:inherit; color:inherit; +} +.industryRow:first-child{ border-top:1px solid var(--line); } +.industryRowReverse .industryRowMeta{ order:2; } +.industryRowReverse .industryRowTeaser{ order:1; } +.industryRowMeta{ display:flex; flex-direction:column; align-items:flex-start; gap:10px; } +.industryRowIcon{ font-size:26px; color:var(--yellow); } +.industryRowTitle{ + font-family:var(--serif); font-weight:500; font-size:clamp(22px,2.6vw,28px); margin:0; color:var(--ink); + transition:color .18s ease; +} +.industryRow:hover .industryRowTitle{ color:var(--yellow-dark); } +.industryRowCta{ + font-family:var(--sans); font-size:11.5px; font-weight:700; letter-spacing:.03em; text-transform:uppercase; + color:var(--ink-soft); display:flex; align-items:center; gap:6px; margin-top:6px; transition:color .18s ease; +} +.industryRow:hover .industryRowCta{ color:var(--yellow-dark); } +.industryRowTeaser{ font-family:var(--sans); font-size:14.5px; line-height:1.85; color:var(--ink-soft); margin:0; } +@media (max-width:760px){ + .industryRow{ grid-template-columns:1fr; gap:14px; padding:28px 4px; } + .industryRowReverse .industryRowMeta, + .industryRowReverse .industryRowTeaser{ order:initial; } +} + /* ---------- Job searching toolkit (accordion) ---------- */ .toolkitList{ border-top:1px solid var(--line); } .toolkitItem{ border-bottom:1px solid var(--line); } @@ -324,19 +355,12 @@ .reassure p{ font-family:var(--sans); font-size:15px; line-height:1.8; color:#D8D4CC; margin:0 0 14px; } .reassure p.emph{ font-family:var(--serif); font-style:italic; font-size:19px; color:#fff; margin-top:22px; } -/* ---------- Modal ---------- */ -.modalOverlay{ - position:fixed; inset:0; background:rgba(23,20,15,.55); backdrop-filter:blur(2px); - display:flex; align-items:flex-start; justify-content:center; padding:5vh 20px; - opacity:0; pointer-events:none; transition:opacity .2s ease; z-index:100; overflow-y:auto; -} -.modalOverlay.active{ opacity:1; pointer-events:auto; } -.modal{ - background:var(--card); border-radius:8px; max-width:680px; width:100%; padding:0; - box-shadow:0 30px 60px -20px rgba(0,0,0,.4); transform:translateY(12px); transition:transform .2s ease; - margin-bottom:5vh; -} -.modalOverlay.active .modal{ transform:translateY(0); } +/* ---------- Spotlight article (standalone page reusing the old modal's + content styling — header/dots/body classes below are shared with it) ---------- */ +.spotlightArticle{ + background:var(--card); border:1px solid var(--line); border-radius:12px; + max-width:760px; margin:0 auto; box-shadow:var(--shadow); +} .modalHeader{ display:flex; align-items:flex-start; justify-content:space-between; gap:16px; padding:28px 30px 20px; border-bottom:1px solid var(--line); @@ -348,11 +372,6 @@ } .modalTitle{ font-family:var(--serif); font-weight:500; font-size:23px; margin:0; color:var(--ink); } .modalStat{ font-family:var(--sans); font-size:10.5px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; color:var(--black); background:var(--light-yellow); padding:4px 10px; border-radius:2px; display:inline-block; margin-top:6px; } -.modalClose{ - width:34px; height:34px; border-radius:50%; border:1px solid var(--line); background:transparent; - color:var(--ink-soft); font-size:16px; cursor:pointer; flex-shrink:0; display:flex; align-items:center; justify-content:center; -} -.modalClose:hover{ background:var(--accent-soft); color:var(--ink); } .modalBody{ padding:8px 30px 32px; font-family:var(--sans); } .modalBody h4{ font-size:11.5px; font-weight:700; letter-spacing:.05em; text-transform:uppercase; margin:26px 0 12px; color:var(--yellow-dark); } .modalBody h4:first-child{ margin-top:0; } From cca2b92d98cc8b9413b5e01c19759d7e24b6dd77 Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 12:21:31 +1000 Subject: [PATCH 06/21] updated career's hub home page and added new sponsors page --- components/Layout.tsx | 6 +- components/PageBanner.tsx | 20 ++ components/PathwayCard.tsx | 18 ++ pages/careers-hub.tsx | 407 +++++++++++---------------------- pages/careers-hub/sponsors.tsx | 67 ++++-- 5 files changed, 224 insertions(+), 294 deletions(-) create mode 100644 components/PageBanner.tsx create mode 100644 components/PathwayCard.tsx diff --git a/components/Layout.tsx b/components/Layout.tsx index a53a421..511c82b 100644 --- a/components/Layout.tsx +++ b/components/Layout.tsx @@ -1,11 +1,15 @@ import React from 'react'; +import { useRouter } from 'next/router'; import Footer from './Footer'; import NavigationBar from './NavigationBar'; const Layout = ({ children }: any) => { + const router = useRouter(); + const isCareersHub = router.pathname.startsWith('/careers-hub'); + return (
- + {!isCareersHub && } {children}
diff --git a/components/PageBanner.tsx b/components/PageBanner.tsx new file mode 100644 index 0000000..421e9f0 --- /dev/null +++ b/components/PageBanner.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import styles from '../styles/CareersHub.module.css'; + +interface PageBannerProps { + eyebrow: string; + title: string; + description: string; +} + +const PageBanner = ({ eyebrow, title, description }: PageBannerProps) => ( +
+
+ {eyebrow} +

{title}

+

{description}

+
+
+); + +export default PageBanner; \ No newline at end of file diff --git a/components/PathwayCard.tsx b/components/PathwayCard.tsx new file mode 100644 index 0000000..72ca8ab --- /dev/null +++ b/components/PathwayCard.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import styles from '../styles/CareersHub.module.css'; +import { PathwayEntry } from '../lib/careersHubData'; + +const PathwayCard = ({ pathway, stagger = 0 }: { pathway: PathwayEntry; stagger?: number }) => ( +
+
+ {pathway.icon} +

{pathway.title}

+

{pathway.body}

+

+ Tip — {pathway.tip} +

+
+
+); + +export default PathwayCard; \ No newline at end of file diff --git a/pages/careers-hub.tsx b/pages/careers-hub.tsx index 6133fcb..83b0260 100644 --- a/pages/careers-hub.tsx +++ b/pages/careers-hub.tsx @@ -1,65 +1,23 @@ // @ts-nocheck comment import React, { useEffect, useRef, useState } from 'react'; import styles from '../styles/CareersHub.module.css'; -import PageHeader from '../components/Header'; -import LoadingScreen from '../components/LoadingScreen'; import ScrollUpBtn from '../components/ScrollUpBtn'; -import { loadCareerResources, loadSponsors } from '../lib/api'; +import CareersNav from '../components/CareersNav'; +import CareersHero from '../components/CareersHero'; +import PathwayCard from '../components/PathwayCard'; +import { loadSponsors } from '../lib/api'; import Head from 'next/head'; +import Link from 'next/link'; import { revalidate } from '../lib/helpers/constants'; import Image from 'next/image'; -import useDarkMode from '../components/useDarkMode'; - -// ─── Static career pathway content ────────────────────────────────────────── -const PATHWAYS = [ - { - icon: '✦', - title: 'Resume & Cover Letter', - body: 'Tailor your resume for every role. Quantify your impact, highlight relevant projects, and keep it concise.', - tip: 'Use the STAR method for experience bullet points.', - }, - { - icon: '◈', - title: 'Network & Connect', - body: 'LinkedIn is your best friend. Attend WIT events, reach out to alumni, and build genuine connections early.', - tip: 'Personalise every connection request — generic ones get ignored.', - }, - { - icon: '◇', - title: 'Ace the Interview', - body: 'Research the company deeply, prepare 4–5 STAR stories, and practise out loud — not just in your head.', - tip: 'Ask your interviewer a thoughtful question at the end.', - }, - { - icon: '◉', - title: 'Find Opportunities', - body: 'Check GradConnection, LinkedIn, and our sponsor portals. Set up job alerts and apply early — roles close fast.', - tip: 'Internship applications open as early as March for summer roles.', - }, -]; - -// ─── Sponsor tier config ───────────────────────────────────────────────────── -const TIER_ORDER = ['diamond', 'gold', 'silver', 'bronze', 'affiliations', 'partnerships']; -const TIER_LABELS: Record = { - diamond: 'Diamond', - gold: 'Gold', - silver: 'Silver', - bronze: 'Bronze', - affiliations: 'Affiliations', - partnerships: 'Partnerships', -}; -// Tiers that get a full description card; others get logo-wall treatment -const FEATURED_TIERS = new Set(['diamond', 'gold']); +import { PATHWAYS } from '../lib/careersHubData'; // ─── Component ─────────────────────────────────────────────────────────────── -const CareersHub = ({ careerResources, sponsors }: any) => { - const [headerLoading, setHeaderLoading] = useState(true); - const [sourceLoading] = useState(false); - const [activeCategory, setActiveCategory] = useState('All'); - const isDark = useDarkMode(); +// Careers Hub landing page —> Hero, Pathways and a +// scrolling sponsor logo strip only. +const CareersHub = ({ sponsors }: any) => { const bodyRef = useRef(null); - // Scroll-reveal animation useEffect(() => { if (!bodyRef.current) return; const els = bodyRef.current.querySelectorAll('[data-reveal]'); @@ -76,7 +34,7 @@ const CareersHub = ({ careerResources, sponsors }: any) => { ); els.forEach((el) => obs.observe(el)); return () => obs.disconnect(); - }, [sourceLoading, headerLoading]); + }, []); useEffect(() => { window.scrollTo(0, 0); @@ -85,257 +43,154 @@ const CareersHub = ({ careerResources, sponsors }: any) => { // ── Sponsors: use 2026 data, fall back to any year const sponsors2026 = sponsors.filter((s: any) => s.fields.year === 2026); const sponsorPool = sponsors2026.length ? sponsors2026 : sponsors; - const sponsorsByTier = TIER_ORDER.reduce((acc: Record, tier) => { - const group = sponsorPool.filter((s: any) => s.fields.type === tier); - if (group.length) acc[tier] = group; - return acc; - }, {}); - - // ── Resources - const categories = [ - 'All', - ...(Array.from(new Set(careerResources.map((r: any) => r.fields.category).filter(Boolean))) as string[]), - ]; - const filteredResources = - activeCategory === 'All' - ? careerResources - : careerResources.filter((r: any) => r.fields.category === activeCategory); + const marqueeSponsors = [...sponsorPool, ...sponsorPool]; return ( -
+
Careers Hub | UNSW WIT - {sourceLoading && headerLoading ? ( - - ) : ( - <> - -
- {/* ── Intro band ─────────────────────────────────────────── */} -
-
-

- Your one-stop destination for internships, graduate roles, and - everything in between. We've gathered the resources, - connections, and guidance to help you launch your career in tech. + + + +

+ {/* ── Intro ──────────────────────────────────────────────── */} +
+
+

+ Choosing your unique path in today's rapidly evolving tech sector is + intimidating. It's easy to get lost in the information bombarding you from + social media, parents and peers. +

+
+
+ +

Career Spotlights

+

+ Delve into the potential applications for your degree in various fields. With + the changes to STEM fields in the last decade due to the development of new + tech, the roles and responsibilities of certain careers have changed + completely. This section will provide aspirants with the current outlook of + their chosen field of study.

+ + Explore career spotlights → +
-
- - {/* ── Career Pathways ────────────────────────────────────── */} -
-
-
- WHERE TO START -

Your path to a career in tech

-
-
- {PATHWAYS.map((p, i) => ( -
-
- {p.icon} -

{p.title}

-

{p.body}

-

- Tip — {p.tip} -

-
-
- ))} -
+
+ +

Clueless about what you want to do?

+

+ Have a read of Industry Spotlights, where up and coming industries in tech are + highlighted. This section gives an overview into the industry and its future + growth prediction. For those who are still not sure, potential careers and the + skills required to thrive in the field are also specified. +

+ + Explore industry spotlights → +
-
- - {/* ── Resources ──────────────────────────────────────────── */} -
-
-
- GUIDES & MATERIALS -

Career resources

-
- - {categories.length > 2 && ( -
- {categories.map((cat) => ( - - ))} -
- )} - - {filteredResources.length ? ( -
- {filteredResources.map((resource: any, index: number) => { - const { title, category, description, link } = resource.fields; - return ( - - {category && {category}} -

{title}

- {description &&

{description}

} - View resource → -
- ); - })} -
- ) : ( -

Check back soon for career resources and guides!

- )} +
+
+
+ + {/* ── Reassurance ────────────────────────────────────────── */} +
+
+
+
+ To all students +

+ It's completely normal to feel anxious and unsure about your path in + tech, as is the same in any career. Remember that your path is unique to + yourself so make sure that you never, regardless of what happens, lose the + passion and curiosity that led you to tech in the first place. +

+
+
+
+
+ + {/* ── Pathways ──────────────────────────────────────────── */} +
+
+
+ Where to start +

Your path to a career in tech

+
+
+ {PATHWAYS.map((p, i) => ( + + ))} +
+
+
+ + {/* ── Sponsors (auto-scrolling strip — full breakdown lives on its own page) ── */} + {sponsorPool.length > 0 && ( +
+
+
+ 2026 Partners +

Our sponsors

+

+ We're grateful to our sponsors whose support makes WIT possible. +

-
- - {/* ── Sponsors ───────────────────────────────────────────── */} - {Object.keys(sponsorsByTier).length > 0 && ( -
-
-
- 2026 PARTNERS -

Our sponsors

-

- We're grateful to our sponsors whose support makes WIT possible. Explore - their opportunities and find your next role. -

-
- - {TIER_ORDER.filter((tier) => sponsorsByTier[tier]).map((tier) => { - const group: any[] = sponsorsByTier[tier]; - const isFeatured = FEATURED_TIERS.has(tier); +
+
+ {marqueeSponsors.map((sponsor: any, i: number) => { + const logoUrl = 'https:' + sponsor.fields.lightModeLogo.fields.file.url; + const displayName = sponsor.fields.name.replace(/\s*\(\d{4}\)$/, ''); return ( -
-
- - {TIER_LABELS[tier]} - -
- - {isFeatured ? ( - /* Full cards for diamond + gold */ -
- {group.map((sponsor: any, i: number) => { - const logoUrl = isDark - ? 'https:' + sponsor.fields.darkModeLogo.fields.file.url - : 'https:' + sponsor.fields.lightModeLogo.fields.file.url; - const descText = - sponsor.fields.description?.content?.[0]?.content?.[0]?.value || ''; - const displayName = sponsor.fields.name.replace(/\s*\(\d{4}\)$/, ''); - return ( -
-
- {displayName} -
-

{displayName}

- {descText &&

{descText}

} - - Find out more - -
- ); - })} -
- ) : ( - /* Logo wall for silver, bronze, affiliations, partnerships */ -
- {group.map((sponsor: any, i: number) => { - const logoUrl = isDark - ? 'https:' + sponsor.fields.darkModeLogo.fields.file.url - : 'https:' + sponsor.fields.lightModeLogo.fields.file.url; - const displayName = sponsor.fields.name.replace(/\s*\(\d{4}\)$/, ''); - return ( - - {displayName} - - ); - })} -
- )} -
+ + {displayName} + ); })}
-
- )} -
+
+ +
+ + View all sponsors → + +
+
+
+ )} +
- - - )} + ); }; export async function getStaticProps() { - const careerResources = await loadCareerResources(); const sponsors = await loadSponsors(); return { props: { - careerResources, sponsors: sponsors || [], }, revalidate: revalidate, }; } -export default CareersHub; +export default CareersHub; \ No newline at end of file diff --git a/pages/careers-hub/sponsors.tsx b/pages/careers-hub/sponsors.tsx index 45754a1..db24414 100644 --- a/pages/careers-hub/sponsors.tsx +++ b/pages/careers-hub/sponsors.tsx @@ -1,6 +1,7 @@ // @ts-nocheck comment import React from 'react'; import Head from 'next/head'; +import Link from 'next/link'; import Image from 'next/image'; import styles from '../../styles/CareersHub.module.css'; import ScrollUpBtn from '../../components/ScrollUpBtn'; @@ -9,6 +10,18 @@ import PageBanner from '../../components/PageBanner'; import { loadSponsors } from '../../lib/api'; import { revalidate } from '../../lib/helpers/constants'; +// Sponsors with their own dedicated write-up page +const SPONSOR_PAGES: Record = { + pwc: '/careers-hub/sponsor-pages/pwc', + pricewaterhousecoopers: '/careers-hub/sponsor-pages/pwc', +}; + +function getSponsorPage(displayName: string): string | undefined { + const normalized = displayName.toLowerCase().trim(); + const key = Object.keys(SPONSOR_PAGES).find((k) => normalized.includes(k)); + return key ? SPONSOR_PAGES[key] : undefined; +} + const TIER_ORDER = ['diamond', 'gold', 'silver', 'bronze', 'affiliations', 'partnerships']; const TIER_LABELS: Record = { diamond: 'Diamond', @@ -68,6 +81,7 @@ const SponsorsPage = ({ sponsors }: any) => { const descText = sponsor.fields.description?.content?.[0]?.content?.[0]?.value || ''; const displayName = sponsor.fields.name.replace(/\s*\(\d{4}\)$/, ''); + const internalHref = getSponsorPage(displayName); return (
@@ -81,14 +95,20 @@ const SponsorsPage = ({ sponsors }: any) => {

{displayName}

{descText &&

{descText}

} - - Find out more - + {internalHref ? ( + + Find out more + + ) : ( + + Find out more + + )}
); })} @@ -104,7 +124,27 @@ const SponsorsPage = ({ sponsors }: any) => { {group.map((sponsor: any, i: number) => { const logoUrl = 'https:' + sponsor.fields.lightModeLogo.fields.file.url; const displayName = sponsor.fields.name.replace(/\s*\(\d{4}\)$/, ''); - return ( + const internalHref = getSponsorPage(displayName); + const logoImg = ( + {displayName} + ); + return internalHref ? ( + + {logoImg} + + ) : ( { className={styles.logoWallItem} title={displayName} > - {displayName} + {logoImg} ); })} From 4ab9425bfe80f69d9ddad7f4a3aa3a9a97af30b1 Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 14:02:28 +1000 Subject: [PATCH 07/21] added Domain group sponsor info page --- pages/careers-hub/sponsor-pages/domain.tsx | 217 ++++++++++++++++++ .../domain/domain-employee-group-photo.svg | 9 + .../domain/domain-employee-photo.svg | 9 + sponsor-styles/domain/domain.module.css | 146 ++++++++++++ .../Domain_Logo_RGB_WHITE.svg | 1 + 5 files changed, 382 insertions(+) create mode 100644 pages/careers-hub/sponsor-pages/domain.tsx create mode 100644 sponsor-styles/domain/domain-employee-group-photo.svg create mode 100644 sponsor-styles/domain/domain-employee-photo.svg create mode 100644 sponsor-styles/domain/domain.module.css create mode 100644 sponsor-styles/logos/[DIAMOND] Domain Group/Domain_Logo_RGB_WHITE.svg diff --git a/pages/careers-hub/sponsor-pages/domain.tsx b/pages/careers-hub/sponsor-pages/domain.tsx new file mode 100644 index 0000000..ee1f02d --- /dev/null +++ b/pages/careers-hub/sponsor-pages/domain.tsx @@ -0,0 +1,217 @@ +import React from 'react'; +import Head from 'next/head'; +import styles from '../../../sponsor-styles/domain/domain.module.css'; +import domainLogoWhite from '../../../sponsor-styles/logos/[DIAMOND] Domain Group/Domain_Logo_RGB_WHITE.svg'; +import domainEmployeePhoto from '../../../sponsor-styles/domain/domain-employee-photo.svg'; +import domainGroupPhoto from '../../../sponsor-styles/domain/domain-employee-group-photo.svg'; +import CareersNav from '../../../components/CareersNav'; +import ScrollUpBtn from '../../../components/ScrollUpBtn'; + +const SKILLS = [ + { icon: '🧗', label: 'Ability to drive and adapt to change' }, + { icon: '💡', label: 'Passion for innovation and creativity' }, + { icon: '🧩', label: 'Teamwork and collaboration' }, + { icon: '🔎', label: 'Open minded to possibilities and learning' }, + { icon: '🏅', label: 'A focus on high quality outcomes' }, +]; + +const ROLES = [ + { icon: '💻', label: 'Software Engineer' }, + { icon: '⚙️', label: 'Product Manager' }, + { icon: '🔧', label: 'Technical Consultant' }, + { icon: '📱', label: 'User Interface Designer (UI)' }, + { icon: '🕸️', label: 'Data Analyst/Scientist' }, + { icon: '🎯', label: 'Product Specialist' }, + { icon: '📝', label: 'User Experience Designer (UX)' }, +]; + +const DomainSponsorPage = () => ( +
+ + Domain Group | Sponsors | Careers Hub | UNSW WIT + + + + + + + + {/* ── Hero ───────────────────────────────────────────── */} +
+
+
+ {/* eslint-disable-next-line @next/next/no-img-element */} + Domain Group logo + Group +
+

+ See the possibilities. +
+ Turn them into realities. +

+
+
+
+ {/* eslint-disable-next-line @next/next/no-img-element */} + Domain Group employee +
+
+ + {/* ── Main grid ──────────────────────────────────────── */} +
+ {/* About Us */} +
+

About Us

+
+

+ Domain Group is a leading Australian property marketplace made up of a portfolio + of brands. We are united in our purpose to inspire confidence in + life's property decisions. We are motivated by innovation and leverage our + unique data, products, and technology to deliver solutions and experiences for our + customers. +

+

+ At Domain our people are encouraged to see the possibilities and + turn them into a reality. With us, you'll make your mark, make a difference + and be part of an inclusive team of unique individuals that are + inspired by the opportunities that sit before them. We love helping people find + their dream job, grow in their roles and contribute to the business - growing + personally and professionally. +

+

+ Domain Group is a collective of diverse people who believe the property industry + is ripe for disruption. We're{' '} + inspired to create experiences that inspire confidence for our + customers, and we like to have fun along the way too. Our values unite and guide us + in how our people show up to work, and how they treat each other and approach their + work. At Domain Group, you'll have the chance to roll up your sleeves as part + of a business that's just the right size for you to make a real impact. + Innovation is important to us and we believe that big ideas can come from anywhere + and anyone across our business. +

+

+ Our culture is diverse and supportive and there are lots of{' '} + opportunities to leap, learn and grow. We inspire and encourage + our people to get involved in causes that matter to them, with several employee + committees across the business where our people can channel their passions around + topics such as diversity and inclusion and the environment. We{' '} + offer our people flexibility and a range of work perks, as well as + recognising and rewarding the efforts of our team. +

+
+
+ + {/* Valued Employee Skills */} +
+

Valued Employee Skills

+
+ {SKILLS.map((skill) => ( +
+ {skill.icon} + {skill.label} +
+ ))} +
+
+
+ + {/* ── Opportunities + Qualifications ─────────────────── */} +
+
+

Internship and Graduate Opportunities

+

+ Domain Group supports people at all stages of their career, especially those early + in their careers with many opportunities to amplify and accelerate their + professional and personal development. We encourage applicants from diverse + backgrounds, and encourage applications even if you don't meet all the + requirements of the role (as you still may be the perfect candidate for the role or + future opportunities). Domain Group inspires you to see the possibilities of your + career - with many opportunities to grow your knowledge and experience with diverse + teams across the business working on interesting and challenging solutions for our + customers. +

+ +

+ Available roles at Domain Group +

+
+ {ROLES.map((role) => ( +
+ {role.icon} + {role.label} +
+ ))} +
+
+ +
+

Qualifications

+

+ Students applying for roles at Domain Group will need to demonstrate knowledge, + experience and exposure across multiple programming languages and experience with + cloud tooling. It's a bonus if you have a Technology based degree and any + interest in consumer facing high scale traffic applications and experience dealing + with complex problems at scale. We're drawn to passionate, motivated people + with a high learning agility and ability to adapt, learn and grow. We value + diversity of culture and thought, and look for people who will positively + contribute and add to our culture rather than just fitting in. +

+
+
+ + {/* ── Application Process + photo ────────────────────── */} +
+
+

Application Process

+
+

How to apply

+

Candidates can submit their application via a job ad on our website or LinkedIn page.

+
+
+

Interviews

+

+ Our Talent Acquisition team shortlists candidates with diversity in mind and from + there our interview process begins. This involves 2-3 interview stages to get to + know candidates on a personal level, understand their experience and motivations, + and a technical assessment. +

+
+
+ +
+
+
+ {/* eslint-disable-next-line @next/next/no-img-element */} + Domain Group colleagues +
+
+
+ + {/* ── Application Tips ────────────────────────────────── */} +
+

Application Tips

+

+ We encourage applicants to be genuine and authentic. Talk to your knowledge, skills, + passions and motivations as well as who you are as a person. We encourage you to + showcase your strengths as well as being transparent about your areas for growth and + where you would like to gain more experience. For Technical roles we would expect to + see examples of your work, such as a portfolio or sample projects demonstrating the + problems you've solved with your technical experience. We also encourage you to + check out our products and come prepared to share your opinions on how to improve + them, with our customers in mind. Come prepared and researched, knowing about us and + we commit to getting to know you too. +

+
+ + +
+); + +export default DomainSponsorPage; diff --git a/sponsor-styles/domain/domain-employee-group-photo.svg b/sponsor-styles/domain/domain-employee-group-photo.svg new file mode 100644 index 0000000..9c82ce9 --- /dev/null +++ b/sponsor-styles/domain/domain-employee-group-photo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/sponsor-styles/domain/domain-employee-photo.svg b/sponsor-styles/domain/domain-employee-photo.svg new file mode 100644 index 0000000..2d9531e --- /dev/null +++ b/sponsor-styles/domain/domain-employee-photo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/sponsor-styles/domain/domain.module.css b/sponsor-styles/domain/domain.module.css new file mode 100644 index 0000000..bee99af --- /dev/null +++ b/sponsor-styles/domain/domain.module.css @@ -0,0 +1,146 @@ +/* Domain Group sponsor info-sheet page */ +.page{ + --dm-green:#0EA800; + --dm-green-dark:#005837; + --dm-cream:#f3ece1; + --dm-stripe:#e7ceb4; + --dm-pink:#f6d9cf; + --dm-ink:#232019; + + /* is reused on this page */ + --black:#17140F; + --white:#FFFFFF; + --yellow:#FEB14B; + --yellow-dark:#E8992E; + --grey:#6E6A63; + --ink:var(--black); + --ink-soft:var(--grey); + --line:rgba(0,0,0,.08); + --card:var(--white); + --sans:'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; + + background:var(--dm-cream); + font-family:'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; + color:var(--dm-ink); +} + +/* ---------- Hero ---------- */ +.hero{ + position:relative; display:grid; grid-template-columns:1.4fr 1fr; + background:var(--dm-green); color:#fff; padding:44px 48px 0; gap:24px; overflow:hidden; +} +@media (max-width:640px){ .hero{ grid-template-columns:1fr; } } +.heroText{ position:relative; z-index:2; align-self:center; } +.logoRow{ display:flex; align-items:center; gap:16px; margin-bottom:26px; } +.logo{ display:block; width:320px; height:auto; } +.logoGroupText{ font-family:'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; font-size:100px; font-weight:400; color:#fff; } +.tagline{ font-size:26px; line-height:1.4; margin:0; font-weight:500; } + +.heroPhoto{ + position:relative; z-index:2; align-self:center; justify-self:end; + width:320px; height:360px; transform:translateX(40px); + display:flex; align-items:center; justify-content:center; +} +.heroPhotoStripes{ + position:absolute; inset:0; z-index:0; + background:repeating-linear-gradient(to bottom, var(--dm-stripe) 0 18px, var(--dm-green) 18px 36px); + clip-path:polygon(50% 0%, 100% 26%, 100% 100%, 0% 100%, 0% 26%); +} +.heroPhoto img{ + position:relative; z-index:1; + display:block; width:auto; height:100%; margin-left:38px; +} + +/* ---------- Main grid ---------- */ +.mainGrid{ display:grid; grid-template-columns:1.6fr 1fr; align-items:stretch; } +@media (max-width:760px){ .mainGrid{ grid-template-columns:1fr; } } + +/* About */ +.about{ padding:40px 48px 56px; } +.aboutHeading{ + font-family:'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + font-size:22px; font-weight:800; color:var(--dm-green-dark); margin:0 0 18px; + text-transform:none; +} +.aboutText p{ font-size:13.5px; line-height:1.85; color:#3a352c; margin:0 0 16px; } +.aboutText p:last-child{ margin-bottom:0; } +.aboutText strong{ color:var(--dm-ink); } + +/* Valued Employee Skills */ +.skills{ + position:relative; z-index:2; + background:var(--dm-green-dark); color:#fff; + padding:40px 32px 56px; border-radius:0 0 50% 50% / 0 0 60px 60px; +} +.skillsHeading{ + font-family:'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + font-size:20px; font-weight:800; text-align:center; margin:0 0 28px; color:#fff; + text-transform:none; +} +.skillsList{ display:flex; flex-direction:column; gap:44px; } +.skillItem{ display:flex; flex-direction:column; align-items:center; text-align:center; gap:10px; } +.skillIcon{ font-size:26px; } +.skillLabel{ font-size:13.5px; font-weight:700; line-height:1.4; max-width:190px; letter-spacing:.03em; } + +/* ---------- Opportunities + Qualifications ---------- */ +.grid2{ display:grid; grid-template-columns:1.6fr 1fr; align-items:stretch; } +@media (max-width:760px){ .grid2{ grid-template-columns:1fr; } } + +.opportunities2{ background:#fff; padding:40px 48px 48px; } +.sectionHeading{ + font-family:'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + font-size:22px; font-weight:800; color:var(--dm-green-dark); margin:0 0 18px; + text-transform:none; +} +.opportunities2 p{ font-size:13.5px; line-height:1.85; color:#3a352c; margin:0 0 16px; } + +.rolesHeading{ margin-top:8px; } +.rolesGrid{ display:grid; grid-template-columns:repeat(4,1fr); gap:28px 20px; } +@media (max-width:560px){ .rolesGrid{ grid-template-columns:repeat(2,1fr); } } +.roleItem{ display:flex; flex-direction:column; gap:10px; } +.roleIcon{ font-size:24px; } +.roleLabel{ font-size:12.5px; font-weight:700; line-height:1.4; color:var(--dm-ink); } + +.qualifications{ + position:relative; z-index:1; + background:var(--dm-pink); padding:40px 32px 48px; +} +.qualifications::before{ + content:''; position:absolute; left:0; right:0; top:-60px; height:60px; + background:var(--dm-pink); +} +.qualifications p{ font-size:13.5px; line-height:1.85; color:#3a352c; margin:0; } + +/* ---------- Application Process + photo ---------- */ +.processBox{ background:var(--dm-cream); padding:40px 48px 48px; } +.processSection{ margin-bottom:22px; } +.processSection:last-child{ margin-bottom:0; } +.processSubheading{ + font-family:'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + font-size:13.5px; font-weight:800; color:var(--dm-ink); margin:0 0 6px; +} +.processBox p{ font-size:13.5px; line-height:1.8; color:#3a352c; margin:0; } + +.photoBoxWrap{ + position:relative; z-index:2; margin-top:-120px; + height:calc(100% + 120px); width:100%; + display:flex; flex-direction:column; +} +.photoBoxPeak{ + flex:0 0 120px; width:100%; background:var(--dm-green-dark); + clip-path:polygon(50% 0%, 100% 100%, 0% 100%); +} +.photoBox{ + position:relative; flex:1; width:100%; background:var(--dm-green-dark); + overflow:hidden; display:flex; align-items:flex-end; justify-content:center; + padding-bottom:0; +} +.photoBoxImg{ display:block; width:400px; height:400px; border-radius:6px; object-fit:cover; } + +/* ---------- Application Tips ---------- */ +.tipsBanner{ background:var(--dm-green); color:#fff; padding:40px 48px; } +.tipsBanner h2{ + font-family:'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + font-size:20px; font-weight:800; margin:0 0 14px; text-transform:none; color:#fff; +} +.tipsBanner p{ font-size:13.5px; line-height:1.85; margin:0; color:rgba(255,255,255,.92); } diff --git a/sponsor-styles/logos/[DIAMOND] Domain Group/Domain_Logo_RGB_WHITE.svg b/sponsor-styles/logos/[DIAMOND] Domain Group/Domain_Logo_RGB_WHITE.svg new file mode 100644 index 0000000..a19f7b9 --- /dev/null +++ b/sponsor-styles/logos/[DIAMOND] Domain Group/Domain_Logo_RGB_WHITE.svg @@ -0,0 +1 @@ + \ No newline at end of file From 3a54cef27ccd119e6b6039b77e3ce31507c86830 Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 14:52:19 +1000 Subject: [PATCH 08/21] moved Domain logo into seperate styles folder --- sponsor-styles/domain/Domain_Logo_RGB_WHITE.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 sponsor-styles/domain/Domain_Logo_RGB_WHITE.svg diff --git a/sponsor-styles/domain/Domain_Logo_RGB_WHITE.svg b/sponsor-styles/domain/Domain_Logo_RGB_WHITE.svg new file mode 100644 index 0000000..a19f7b9 --- /dev/null +++ b/sponsor-styles/domain/Domain_Logo_RGB_WHITE.svg @@ -0,0 +1 @@ + \ No newline at end of file From b2c857c7be9cbb0aac30883e593474cbb0bc96db Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 14:56:46 +1000 Subject: [PATCH 09/21] added Jane Street sponsor info page --- .../careers-hub/sponsor-pages/jane-street.tsx | 207 +++++++++++++++++ pages/careers-hub/sponsors.tsx | 39 ++-- .../Jane_Street_Logo_RGB_BLACK.svg | 216 ++++++++++++++++++ .../jane-street/jane-street.module.css | 117 ++++++++++ 4 files changed, 562 insertions(+), 17 deletions(-) create mode 100644 pages/careers-hub/sponsor-pages/jane-street.tsx create mode 100644 sponsor-styles/jane-street/Jane_Street_Logo_RGB_BLACK.svg create mode 100644 sponsor-styles/jane-street/jane-street.module.css diff --git a/pages/careers-hub/sponsor-pages/jane-street.tsx b/pages/careers-hub/sponsor-pages/jane-street.tsx new file mode 100644 index 0000000..10236ee --- /dev/null +++ b/pages/careers-hub/sponsor-pages/jane-street.tsx @@ -0,0 +1,207 @@ +import React from 'react'; +import Head from 'next/head'; +import styles from '../../../sponsor-styles/jane-street/jane-street.module.css'; +import janeStreetLogo from '../../../sponsor-styles/jane-street/Jane_Street_Logo_RGB_BLACK.svg'; +import CareersNav from '../../../components/CareersNav'; +import ScrollUpBtn from '../../../components/ScrollUpBtn'; + +const LOCATIONS = [ + { icon: '🍎', label: 'New York' }, + { icon: '🏰', label: 'London' }, + { icon: '🌺', label: 'Hong Kong' }, + { icon: '🦁', label: 'Singapore' }, + { icon: '🌷', label: 'Amsterdam' }, +]; + +const PROCESS_STEPS = [ + { + icon: '🖱️', + body: ( + <> + All students should apply on our website. Head here to + see a detailed description of what you can expect after applying. + + ), + }, + { + icon: '🔍', + body: ( + <> + After you submit your application to Jane Street for any role, it's reviewed by a + recruiter. We respond to every application we receive, ideally within a week or so. + Depending on your background we might also suggest you consider another position. + We'll always be up front with you about what roles you're being considered + for (or aren't), so please also let us know what you're interested in + throughout the process. + + ), + }, + { + icon: '🤝', + body: ( + <> + If you are selected for an interview, the recruiter will communicate with you clearly + what to expect. The structure for our interviews may vary by discipline and + we've prepared information for a range of roles. All students should apply on{' '} + our website and head here to see a detailed description + of what you can expect after applying. + + ), + }, +]; + +const ROLES = [ + 'Quantitative Trader', + 'Quantitative Researcher', + 'Software Engineer', + 'IT Operations Engineer', + 'Machine Learning Researcher', + 'Strategy and Product', + 'and more!', +]; + +const JaneStreetSponsorPage = () => ( +
+ + Jane Street | Sponsors | Careers Hub | UNSW WIT + + + + + {/* ── Hero ───────────────────────────────────────────── */} +
+
+ {/* eslint-disable-next-line @next/next/no-img-element */} + Jane Street logo +
+
+ +
+ {/* ── About us ───────────────────────────────────────── */} +
+

About us

+

+ Jane Street is a quantitative trading firm with offices worldwide. We hire smart, + humble people who love to solve problems, build systems, and test theories. + You'll learn something new every day in our office—whether it's connecting + with a colleague to share perspectives, or participating in a talk, class, or game + night. Our success is driven by our people and we never stop improving. +

+
+ + {/* ── Culture at Jane Street ─────────────────────────── */} +
+

Culture at Jane Street

+

+ Our bright, beautiful offices in the heart of New York, London, Hong Kong, + Amsterdam, and Singapore are open and buzzing with conversation. We come from many + backgrounds and encourage travel between our larger and smaller offices to share + perspectives. Some of our best ideas come from bumping into a visiting colleague at + the office coffee bar. People grow into long careers at Jane Street because there + are always new and interesting problems to solve, systems to build, and theories to + test. More than twenty years after our founding, it still feels like we're just + getting started. +

+
+ + {/* ── Qualifications + Locations ─────────────────────── */} +
+
+

Recommended Qualifications

+

+ We don't expect you to have a background in finance or any other specific + field — we're looking for smart people who enjoy solving interesting + problems. We're more interested in how you think and learn than what you + currently know. +

+
+ +
+

Our Locations

+
+ {LOCATIONS.map((loc) => ( +
+ {loc.icon} + {loc.label} +
+ ))} +
+
+
+ + {/* ── Internship and Graduate Opportunities ──────────── */} +
+

Internship and Graduate Opportunities

+

+ We offer internship opportunities for roles such as Quantitative + Trader, Software Engineer, Strategy and Product, IT Operations Engineer, and Linux + Engineer. Applications are open now and are reviewed on a rolling basis. All of our + roles are based in-person in our Hong Kong office and run from December + 2024-February 2025. +

+

+ We offer graduate opportunities for roles such as Quantitative + Trader, Quantitative Researcher and Software Engineer. All of our roles are based + in-person in our Hong Kong office. Applications are open now and will be open + year-round or until the positions have been filled. +

+

+ We offer opportunities for students in their 1st or 2nd year in our Hong Kong office + and also opportunities for international students for many of our roles. Head to{' '} + + our website + {' '} + to learn more. +

+
+ + {/* ── Application Process ─────────────────────────────── */} +

Application Process

+
+
+ {PROCESS_STEPS.map((step, i) => ( + + {step.icon} + + ))} +
+
+ {PROCESS_STEPS.map((step, i) => ( +
+

{step.body}

+
+ ))} +
+
+ + {/* ── Roles Available + Application Tips ─────────────── */} +
+
+

Roles Available

+
    + {ROLES.map((role) => ( +
  • {role}
  • + ))} +
+
+ +
+

Application Tips

+

+ To prepare for an interview with us, head to our website and check out the + interview prep materials. There are a few mock interview videos for a couple of + our roles that you can watch. For more information, head to our{' '} + + FAQs + {' '} + about interviewing at Jane Street! +

+
+
+
+ + +
+); + +export default JaneStreetSponsorPage; diff --git a/pages/careers-hub/sponsors.tsx b/pages/careers-hub/sponsors.tsx index db24414..551aed6 100644 --- a/pages/careers-hub/sponsors.tsx +++ b/pages/careers-hub/sponsors.tsx @@ -14,6 +14,9 @@ import { revalidate } from '../../lib/helpers/constants'; const SPONSOR_PAGES: Record = { pwc: '/careers-hub/sponsor-pages/pwc', pricewaterhousecoopers: '/careers-hub/sponsor-pages/pwc', + westpac: '/careers-hub/sponsor-pages/w-group', + domain: '/careers-hub/sponsor-pages/domain', + 'jane street': '/careers-hub/sponsor-pages/jane-street', }; function getSponsorPage(displayName: string): string | undefined { @@ -82,8 +85,8 @@ const SponsorsPage = ({ sponsors }: any) => { sponsor.fields.description?.content?.[0]?.content?.[0]?.value || ''; const displayName = sponsor.fields.name.replace(/\s*\(\d{4}\)$/, ''); const internalHref = getSponsorPage(displayName); - return ( -
+ const cardInner = ( + <>
{

{displayName}

{descText &&

{descText}

} - {internalHref ? ( - - Find out more - - ) : ( - - Find out more - - )} -
+ Find out more + + ); + return internalHref ? ( + + {cardInner} + + ) : ( + + {cardInner} + ); })}
diff --git a/sponsor-styles/jane-street/Jane_Street_Logo_RGB_BLACK.svg b/sponsor-styles/jane-street/Jane_Street_Logo_RGB_BLACK.svg new file mode 100644 index 0000000..b89c2e7 --- /dev/null +++ b/sponsor-styles/jane-street/Jane_Street_Logo_RGB_BLACK.svg @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sponsor-styles/jane-street/jane-street.module.css b/sponsor-styles/jane-street/jane-street.module.css new file mode 100644 index 0000000..a0ddbc7 --- /dev/null +++ b/sponsor-styles/jane-street/jane-street.module.css @@ -0,0 +1,117 @@ +/* Jane Street sponsor info-sheet page */ +.page{ + --js-purple-light:#ece7f8; + --js-purple:#a68fd9; + --js-blue:#0e60d1; + --js-navy:#26339c; + --js-lavender:#e9ecfb; + --js-blue-mid:#6f93e8; + --js-grey:#f2f2f4; + --js-ink:#1c1c24; + + /* is reused on this page */ + --black:#17140F; + --white:#FFFFFF; + --yellow:#FEB14B; + --yellow-dark:#E8992E; + --grey:#6E6A63; + --ink:var(--black); + --ink-soft:var(--grey); + --line:rgba(0,0,0,.08); + --card:var(--white); + --sans:'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; + + position:relative; + background:#fff; + font-family:'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; + color:var(--js-ink); + overflow:hidden; +} + +.wrap{ position:relative; z-index:1; max-width:1080px; margin:0 auto; padding:0 48px 64px; } + +/* ---------- Hero ---------- */ +.hero{ + position:relative; overflow:hidden; + background:linear-gradient(90deg, var(--js-purple-light) 0%, var(--js-purple) 45%, var(--js-blue) 100%); + padding:36px 48px; margin-bottom:36px; + /* flat bottom edge, then a distinct kink/bend rising to meet the top-right corner */ + clip-path:polygon(0 0, 100% 0, 100% 40%, 70% 100%, 0 100%); +} +.logoRow{ display:flex; align-items:center; gap:16px; } +.logoMark{ display:block; width:auto; height:88px; flex-shrink:0; object-fit:contain; } +.wordmark{ font-size:30px; font-weight:800; color:var(--js-ink); margin:0; } + +/* ---------- Body sections ---------- */ +.section{ margin-bottom:36px; } +.sectionHeading{ font-size:20px; font-weight:800; color:var(--js-navy); margin:0 0 12px; text-transform:none; } +.section p{ font-size:14px; line-height:1.85; color:#3a3a44; margin:0; } + +/* ---------- Qualifications + Locations ---------- */ +.grid2{ display:grid; grid-template-columns:1fr 1fr; gap:28px; align-items:start; margin-bottom:36px; } +@media (max-width:700px){ .grid2{ grid-template-columns:1fr; } } + +.qualifications{ background:var(--js-lavender); border-radius:8px; padding:26px 28px; } +.qualifications h2{ font-size:18px; font-weight:800; color:var(--js-navy); margin:0 0 10px; text-transform:none; } +.qualifications p{ font-size:13.5px; line-height:1.8; color:#3a3a44; margin:0; } + +.locations h2{ font-size:18px; font-weight:800; color:var(--js-navy); margin:0 0 18px; text-transform:none; } +.locationsGrid{ display:grid; grid-template-columns:repeat(3,1fr); gap:22px 18px; } +.locationItem{ display:flex; flex-direction:column; align-items:center; gap:8px; text-align:center; } +.locationBadge{ + width:56px; height:56px; border-radius:50%; display:flex; align-items:center; justify-content:center; + font-size:22px; color:#fff; + background:linear-gradient(135deg, var(--js-purple), var(--js-blue)); +} +.locationLabel{ font-size:12.5px; font-weight:700; color:var(--js-ink); } + +/* ---------- Internship and Graduate Opportunities ---------- */ +.opportunities{ background:var(--js-grey); border-radius:8px; padding:32px 36px; } +.opportunities h2{ font-size:19px; font-weight:800; color:var(--js-navy); margin:0 0 16px; text-transform:none; } +.opportunities p{ font-size:14px; line-height:1.85; color:#3a3a44; margin:0 0 16px; } +.opportunities p:last-child{ margin-bottom:0; } +.opportunities strong{ color:var(--js-ink); } +.opportunities a{ color:var(--js-navy); font-weight:700; text-decoration:underline; } +.opportunities a:hover{ color:var(--js-blue); } + +/* ---------- Application Process (timeline) ---------- */ +.processHeading{ font-size:22px; font-weight:800; color:var(--js-navy); margin:0 0 24px; text-transform:none; } +.timeline{ display:grid; grid-template-columns:auto 1fr; gap:0 28px; margin-bottom:40px; } +.timelineIconCol{ + position:relative; display:flex; flex-direction:column; justify-content:space-between; + align-items:center; padding:4px 0; +} +.timelineIconCol::before{ + content:''; position:absolute; top:28px; bottom:28px; left:50%; width:2px; + background:repeating-linear-gradient(to bottom, var(--js-blue-mid) 0 6px, transparent 6px 12px); + z-index:0; +} +.timelineIcon{ + position:relative; z-index:1; width:56px; height:56px; border-radius:50%; + background:var(--js-lavender); display:flex; align-items:center; justify-content:center; + font-size:22px; +} +.timelineTextCol{ display:flex; flex-direction:column; justify-content:space-between; gap:16px; } +.timelineBox{ background:var(--js-lavender); border-radius:8px; padding:18px 22px; } +.timelineBox p{ font-size:13.5px; line-height:1.75; color:#2c2c3a; margin:0; } +.timelineBox a{ color:var(--js-navy); text-decoration:underline; font-weight:700; } +.timelineBox a:hover{ color:var(--js-blue); } +@media (max-width:640px){ + .timeline{ grid-template-columns:1fr; } + .timelineIconCol{ flex-direction:row; justify-content:flex-start; gap:16px; } + .timelineIconCol::before{ display:none; } +} + +/* ---------- Roles Available + Application Tips ---------- */ +.rolesTips{ display:grid; grid-template-columns:1fr 1fr; gap:24px; } +@media (max-width:640px){ .rolesTips{ grid-template-columns:1fr; } } +.rolesBox{ background:var(--js-navy); color:#fff; border-radius:8px; padding:28px 30px; } +.rolesBox h2{ font-size:18px; font-weight:800; text-align:center; margin:0 0 16px; text-transform:none; } +.rolesBox ul{ list-style:disc; margin:0; padding-left:20px; } +.rolesBox li{ font-size:13.5px; line-height:1.9; } + +.tipsBox{ background:var(--js-blue-mid); color:#fff; border-radius:8px; padding:28px 30px; } +.tipsBox h2{ font-size:18px; font-weight:800; text-align:center; margin:0 0 16px; text-transform:none; } +.tipsBox p{ font-size:13.5px; line-height:1.85; margin:0; } +.tipsBox a{ color:#fff; text-decoration:underline; font-weight:700; } +.tipsBox a:hover{ color:var(--js-lavender); } From 71f49937406fbcaa7f998426f88472df138d7b18 Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 14:57:16 +1000 Subject: [PATCH 10/21] redirected footer sponsor link to new career's hub sponsor page --- components/Footer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/Footer.tsx b/components/Footer.tsx index 0332ed9..81ed0e2 100644 --- a/components/Footer.tsx +++ b/components/Footer.tsx @@ -11,7 +11,7 @@ const routes: any = { Events: '/events', 'Join Us': '/join-us', 'Our Story': '/about/our-story', - Sponsors: '/sponsors/current-sponsors', + 'Current Sponsors': '/careers-hub/sponsors', 'Careers Hub': '/careers-hub', 'Our Team': '/about/our-team', 'Contact Us': '/contact-us', From 6e5535cbc2d6a433b2164180753798e7ab4c5c14 Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 14:58:13 +1000 Subject: [PATCH 11/21] moved Domain logo into seperate styles folder --- pages/careers-hub/sponsor-pages/domain.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/careers-hub/sponsor-pages/domain.tsx b/pages/careers-hub/sponsor-pages/domain.tsx index ee1f02d..a055303 100644 --- a/pages/careers-hub/sponsor-pages/domain.tsx +++ b/pages/careers-hub/sponsor-pages/domain.tsx @@ -1,7 +1,7 @@ import React from 'react'; import Head from 'next/head'; import styles from '../../../sponsor-styles/domain/domain.module.css'; -import domainLogoWhite from '../../../sponsor-styles/logos/[DIAMOND] Domain Group/Domain_Logo_RGB_WHITE.svg'; +import domainLogoWhite from '../../../sponsor-styles/domain/Domain_Logo_RGB_WHITE.svg'; import domainEmployeePhoto from '../../../sponsor-styles/domain/domain-employee-photo.svg'; import domainGroupPhoto from '../../../sponsor-styles/domain/domain-employee-group-photo.svg'; import CareersNav from '../../../components/CareersNav'; From 97c6e5d7ff5261cd959606a3294ea260e6a29093 Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 16:13:05 +1000 Subject: [PATCH 12/21] new Willow svg files --- public/willow_business.svg | 9 +++++++++ public/willow_cheerleader.svg | 9 +++++++++ public/willow_data.svg | 9 +++++++++ public/willow_engineering.svg | 9 +++++++++ public/willow_product.svg | 9 +++++++++ 5 files changed, 45 insertions(+) create mode 100644 public/willow_business.svg create mode 100644 public/willow_cheerleader.svg create mode 100644 public/willow_data.svg create mode 100644 public/willow_engineering.svg create mode 100644 public/willow_product.svg diff --git a/public/willow_business.svg b/public/willow_business.svg new file mode 100644 index 0000000..dd112af --- /dev/null +++ b/public/willow_business.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/willow_cheerleader.svg b/public/willow_cheerleader.svg new file mode 100644 index 0000000..0d46d8a --- /dev/null +++ b/public/willow_cheerleader.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/willow_data.svg b/public/willow_data.svg new file mode 100644 index 0000000..a1b5171 --- /dev/null +++ b/public/willow_data.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/willow_engineering.svg b/public/willow_engineering.svg new file mode 100644 index 0000000..c3a3836 --- /dev/null +++ b/public/willow_engineering.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/willow_product.svg b/public/willow_product.svg new file mode 100644 index 0000000..512a84d --- /dev/null +++ b/public/willow_product.svg @@ -0,0 +1,9 @@ + + + + + + + + + From 876492178147ca6bfbfd9ae55b8bc8e46c900901 Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 16:21:59 +1000 Subject: [PATCH 13/21] career spotlight page updated with new pages to specific careers, also added asset files --- .../career-spotlight-pages/business.tsx | 0 .../career-spotlight-pages/data.tsx | 0 .../career-spotlight-pages/engineering.tsx | 0 .../career-spotlight-pages/product.tsx | 0 pages/careers-hub/career-spotlights.tsx | 166 ++++++++++++++++++ public/fonts/LaborUnion-Regular.otf | Bin 0 -> 39136 bytes public/icons/exclamation_mark.png | Bin 0 -> 32737 bytes 7 files changed, 166 insertions(+) create mode 100644 pages/careers-hub/career-spotlight-pages/business.tsx create mode 100644 pages/careers-hub/career-spotlight-pages/data.tsx create mode 100644 pages/careers-hub/career-spotlight-pages/engineering.tsx create mode 100644 pages/careers-hub/career-spotlight-pages/product.tsx create mode 100644 pages/careers-hub/career-spotlights.tsx create mode 100644 public/fonts/LaborUnion-Regular.otf create mode 100644 public/icons/exclamation_mark.png diff --git a/pages/careers-hub/career-spotlight-pages/business.tsx b/pages/careers-hub/career-spotlight-pages/business.tsx new file mode 100644 index 0000000..e69de29 diff --git a/pages/careers-hub/career-spotlight-pages/data.tsx b/pages/careers-hub/career-spotlight-pages/data.tsx new file mode 100644 index 0000000..e69de29 diff --git a/pages/careers-hub/career-spotlight-pages/engineering.tsx b/pages/careers-hub/career-spotlight-pages/engineering.tsx new file mode 100644 index 0000000..e69de29 diff --git a/pages/careers-hub/career-spotlight-pages/product.tsx b/pages/careers-hub/career-spotlight-pages/product.tsx new file mode 100644 index 0000000..e69de29 diff --git a/pages/careers-hub/career-spotlights.tsx b/pages/careers-hub/career-spotlights.tsx new file mode 100644 index 0000000..264d1a4 --- /dev/null +++ b/pages/careers-hub/career-spotlights.tsx @@ -0,0 +1,166 @@ +import React, { useEffect, useRef } from 'react'; +import Head from 'next/head'; +import styles from '../../styles/CareersHub.module.css'; +import ScrollUpBtn from '../../components/ScrollUpBtn'; +import CareersNav from '../../components/CareersNav'; +import PageBanner from '../../components/PageBanner'; +import SpotlightCard from '../../components/SpotlightCard'; +import { CAREER_SPOTLIGHTS } from '../../lib/careersHubData'; + +const CareerSpotlightsPage = () => { + const bodyRef = useRef(null); + const trackRef = useRef(null); + + useEffect(() => { + const track = trackRef.current; + if (!track) return; + let paused = false; + let rafId: number; + const pause = () => { paused = true; }; + const resume = () => { paused = false; }; + track.addEventListener('mouseenter', pause); + track.addEventListener('mouseleave', resume); + track.addEventListener('touchstart', pause, { passive: true }); + + const speed = 0.5; // px per frame — one direction only, loops seamlessly + let position = track.scrollLeft; + const step = () => { + if (!paused) { + const half = track.scrollWidth / 2; + position += speed; + if (position >= half) { + position -= half; + } + track.scrollLeft = position; + } + rafId = requestAnimationFrame(step); + }; + rafId = requestAnimationFrame(step); + + return () => { + cancelAnimationFrame(rafId); + track.removeEventListener('mouseenter', pause); + track.removeEventListener('mouseleave', resume); + track.removeEventListener('touchstart', pause); + }; + }, []); + + useEffect(() => { + if (!bodyRef.current) return; + const els = bodyRef.current.querySelectorAll('[data-reveal]'); + const obs = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + entry.target.classList.add(styles.visible); + obs.unobserve(entry.target); + } + }); + }, + { threshold: 0.07 } + ); + els.forEach((el) => obs.observe(el)); + return () => obs.disconnect(); + }, []); + + const entries = Object.entries(CAREER_SPOTLIGHTS); + const loopEntries = [...entries, ...entries]; + + return ( +
+ + Career Spotlights | Careers Hub | UNSW WIT + + + + + + {/* ── Finding Your Path intro ─────────────────────────── */} +
+
+
+

Finding Your Path

+

+ Over the years, the revolution of emerging technologies and Big Data has + significantly evolved the technological landscape. Subsequently, new job + opportunities have emerged for anyone with a keen interest in pursuing a career + within technology. There are a myriad of multidisciplinary roles available for + everyone to apply, regardless of your prior education backgrounds. +

+ +
+
+ {/* eslint-disable-next-line @next/next/no-img-element */} + Willow the WIT mascot cheering +
+
+

+ Career spotlights aim to build your understanding of how your STEM learning + is applied across various fields such as business,{' '} + data and production management. This will + highlight practical skills and growth opportunities that may be found in the + sectors. These spotlights will bridge the gap between academics and + real-world application to allow students to see career trajectories. +

+

+ Today's tech ecosystem harbours many industries, each collated of + Computer Sciences, Software Engineering, Information Systems and other + disciplines to tackle unique challenges. +

+
+
+ +
+ {/* eslint-disable-next-line @next/next/no-img-element */} + +

+ There is no need to feel pressure or be intimidated about wanting to work in a + technology enterprise, as the tech industry is open and inclusive to people + from all academic backgrounds. +

+
+ +
+
+
+ +
+
+
+
+
+ {loopEntries.map(([key, entry], i) => ( + + ))} +
+
+
+
+
+ + +
+ ); +}; + +export default CareerSpotlightsPage; diff --git a/public/fonts/LaborUnion-Regular.otf b/public/fonts/LaborUnion-Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..f7de17bae6f5db51a66a20777f4132516298730f GIT binary patch literal 39136 zcmeFZ2Y3@l*Dt=SvJxv0U?CUDyK8D731A!3LqapX1_%idz_?(88}3z>C0AK)>Xy3! zV}mihgg`<Pj11mzWakMC!vi7z+VHrr#OA@FMhp{+Apg1O z$gqe$_5F`Q+6VAECK_Hymy6>eKcr)WqT^CB8hZz~U|2CcN+!pJWhCO~plS>s3V(?B zu(-%o&S#&1=PC>nCM6~$r??Me!NBh)kRE{HTviNIeD&75YkEI(7ZVDv!5i!|<4y7J zSNCbRuc%S@Dm)7@0rwVupp5XEdmM&|+9Ca@sL@jspT=i6hhd8_9R6Y=ff1;SF{!{H zcoClG@>hH{7K}g5W%iKbZZLtwbLsxGZ0_;}*l{di@cY65p!F{B_HF=%*|}u=j^HR< z0)QtB^TICvL4Pcl2*2E488){2UVurksonQNjKXGj--|E>7S(+(#-714yYC68^Fa4~ z53C3FPWOFJ==pO%6BqRW3h~&5?t2{b#^-e33otppw)0rSJBq{hZX zMMaJXm=YTs;K`C4kQA95nUoe8F=AfWx`d>FW$`fy@y|!DPmK*r3K|g@7&ws==|oSW zCvA9l;$ztZx?jBznUoBr1Nd@_mIMR_^0(0mDd7q6X8&XNQoK|8?!EW z#OM)YLdK3A{r3dshtG>lNr5W=xET?ifK9^^utbn~5*CB4$D*+m=+Ace4aNeoAZ#4m zt%KA6Y$@c6gX?@O9GilrVzH1v3jRf6BjD{6c#ehZqgs+ZPmx$MM^p@*me8@RwXK zcsNS#rXBDndW*0nz!^vVaW0~P%M@rg$7>p-^JybMI^%$|IB3&GsFTYR1-x^TSqJhP zfsKaWF<1y_z*x9{#N9t{0VmygP*)24NjJBq!A zy^fv0-owsdpJQKOUxU^87T4p)@B(~0v`Y+a?t}SY&w{0S8Dy9N{gsa8VA+@sE5$0X zGR%lMu?DObtHbtS`>=!9ey}k|u(Q}lU{gNCU&oK)4!jOOjOXBouy^qz_$&CU_zC=7 zd^1?G8Td}T4c~^h;`JcWz4&f?7hF5L<(Z4Uf@k3w_zrvzylscyYTSgUK`Mcf*i38| z_9|Y2m*VAk1zw3);m!D)*cB`e--OrVX57Nnf*;4T@iN?q@5e-#A6R-7=8p}4?Qlt`%6pa>55G@p~ z60H%1i&8~qkzG_P+AP{9IwX2kbX;^+^rh%q(GQ}VbRqp~K)(Q0039$OU`RkYk+D1J>aPUvj(gk5IOjLw;QAvlF;Fh`oxvj+3}IPUA!H zC-D*Z7<@cF2VaD*hEWzT@D;o*_(Ft>kT0C|WF9Em|i^5><(8BB!WD z)G0bBI^yB#3(+^CYoZ&pmcAXJ2=EQ?4+!vZHU3Xr^?i)1h;FWcG42QFJcrLcxBteU zuCKUET@U_Q)~!`SgbRd=ge!!rI1ae0aJ6u)aGfv~o??ZG!W8cP zpMQi=kDi6Ax%>a#_5pO0)9o6(9)Arq{9VxPYS7jrphZVPuMdIly^Uvq<_JLhNRKU% zfi>|5d*TP0_;j}>D!{r-^JwEtY%1P_%>ZrWbn<1G1?FJyg3U<*tCItECmYKJyHf#{ zhqF5kV0k#ZQwaKa5NywWusa9vX6zNPJ!d)VgI&UofklwOd@F?6P>N+?a?s?ym>&Gu ze9-42ObJdVg;io|tQ@1UD$Ex%VEr*OHW0I717O4q2G49b)&%oTGxii#gFS&Y!fdq# z8-=yP4Acg5(KeWo+F?H0j!nRJg15B`X0T3d61E!)1sgFPJH**3n01b03$Zt0=6wTO zjJ*Z3;@dEbp2S`RA9y)-3VQ*2A6tuk0`uHw*c$9(m;pb9x$i5O`!2(Ln2244x$Apu z6ZReW4ewwtVW+`bo$R(%r@?NW!fxV9>?gbz-V^VQ_rd#u4Upkp*j>zx6WHIdYuFFi zkJ!)H4eTCmMk3HU_(8GI7{EIt{Zf=|Pz;?wa^uzR!dnV?%s@TK@jd>L57`S?71Ay}QoV0-4` z&*P)<=kOU|m0rMo@a4EK{vviAe;W70U&2-R3b3IoaesUjPT?L_UyJw0 z!@#-@mT&c&m3Tc+2%ORGrRFdZcg#c=AdKl z129|ugC886c&_P+zxV98*8^R>vHM>5eTBf~D|(UD_=~naSSa=%*xB3viTQnZ_=n|q zVfUc|7+!K1Mrs%~Pr=X_3tc}Gx_KE4;C0Y_@z8NOFyIU@{n}x;Hp8IlgaLaPCf-vp zP``vh`W^NY_A7MAZ_okIY0&&3AoOt{=4l|tACs5dQ+dh<}6sgx|*R;H*FZW=$?o3j73&V6b4QV5DG-V47gIV4+}{V3i5`HPXEc~1BhVZVi zOC%JLqP`+u5hEHR8ZHWfDQBu^wrG)PIZQl}qF7O~C`*(tDiKw}1XM5DBHAI^D|!Vc zpm#)PM4yT-z|{Do=ogVoPz*1Vj&_58*@5#9-oSViYlf zm_p1V77{NIFB1_&G?7T;5QRh);UJobHewfXn0TFdpZHMHQ^HJHmlT;6IVCPEJSic5 zO2Ybt_{fdZ!o%QUT3C2$O60VNgp{!G@W}X->7KXKAzxTZsOLWPkF-#}d?;T&H9jUV zC^&egr|Ox1WSTu^*1E8y*?&BHvW*%un=d3)-E++Y?%^Q(k38X?G7%nGM|jdA`M-bUh~&#h^5xh6@!r$? z;8E*6M53XMF(YCV!ef^{KR1Ri5wpRQWz^UhzG$q6RO}-WjG7h;wZ(g0#CsAWe;50h z1ip@h$7Ph{$&>8)oAjuf(PMe(j!*8EdkQd<@+f`GC_a5^D$hqMUv=u^Ri|=NPJblU z^xs9D?xB|Mk#FXs^i0o-EKg$ApF|Q86vUAW2@2#d!TiO;Lr7rvr8~K_RSH^P|$k!RzO^>fSkS`b9O`WfL z49|5Se;LcyGM0ZD&(|`ZCp49B(Re;>3SY|<{%IdwOR zGKv@0C|(jFJlPPQr4YXA5T5#IzCZ}iQV7pW2u~=4=Ou)v7sAsE;R%iIuDYAS?lhj4 z(cLfk%0_p$sG9=M*=W8_Ug<(c^W{Q#UPgEG+1-sipJVyUc%HNIe1WmuqT|!1@CByu zPgD73PVIi;%T49WP3PI2#uo_XvxM?5LuZ7h!fcX|61gcgEOvcTWEiY6dG2E)laoC+ zVTp-J2^pT-nE0re_?VQ;$hgFm%;dC3$gbW{2ReCh?t^; zouU-c32}&ckN6itL>!j{N>)k^NN!2hJpy~YL@p)E$?dX0*}k5oy$1Fg-)mW~)xF~7 zJ>^fz%jMg9Ki|8nkGjv1KA-m$^nI$YqwmLF6TM=+?kX^aRMAJFRun26ifjGC`kn3f zrE-vRm~xDAhH{Q_rLtOCqui?8uH2#5 zOWzB=mwm7L{@{DV_pa{)U$>voueYDl&(Dwc8_2#(WN3{o3>qb=HCW9JYP5oAtBkX& zYfR>C%mqoap*EAwElb>>X4ev#Mb*s=8YZbR>B-L|4VsEPx+|H8i>b_FHtgFnM`i5l z6t7%kOH|2FU!uWY=46^S7VK7`V2RmiGdpM$>k^8$A8$=-S2@$m@@Q5?X=@?9<39PTsdKYpbe8Ys{uuFCs0oEGMD4e)GC0vLIW<21%kf8nb}T zOFy7qXa$4LN?vO#s8!YHm1oc_Mr7ueWilDtYo1rJA4ypJr2y8ORlRr@iD~qaNX zqpDV0o=A$)j63nVp->IaaI1Qfe+RPrKx+ zw`z?#okr85kB^t8q^wSSQqB4eL~=9`4gCe-XyExnx$zxLV`gENt`WW;VY|6vk~*@ia$X`c zA-b&WBem?oP-SXrZhju~uh#w?V;1YCY!A;&zxy5 zNQ-KgT5_H_!$PrSR?UuK*UDO&(%iT(Y?d2)<>FyC_SAn*>`SOc=P0YP*!>iD(aWe&+`6lw zXtTM#91k+KwEJmx4N{EmbW)J_jan@h-=&svneh%W=m>) z5#6Q_%d1Z@=bH^R7OBjvnSYQ~s@cT@rn1Tk#>5_WEkT3X392!Z(?_vGqK{bf>6GUB zx;%@ceh4buyNYe~%=t zbx0(INFkAb#5Y(zJOmtewrs+RKmtrNb|Sh&5#TZu0^aJ3yi-&d=LP z(laF4rV@w4Tm(iWTe3XDlB&ww44sC&5mZ`K35IW`#9=nq(kR?SezuEZqX><@yn(si z{gyO}(G$j>=dzPj?8Fh1*r#cEhl@$WFL|SWM2Fqz*t|}={Q!gdqeV6Krb0)$9}=^( z#2w3{8d6kRYpIh)y$ENU(bkfoi9W`Fs&C7yE49{d_Cq64rg-P!MqQK2nPSw?{fYD( zu!Y;IbJH32+pcxuLS0^It;#hsmWqnErK@tB1_v!e_gxy3)l^?l=a<(mt}Do{$X0hP zC9*Q}vzbYfID^?>ZPM>Js7Ct;heemCXS&2)nFYGSY)iIZ!$z@;uveLCm@g#_WnkBn z>Z4y$%d|hDyqjp{4_>IqjeP+c>;Am|EF^dWk&3IRO{+vfNPG?X{4(p+Toa?XrLQbA zo2sOWYug%kb(~jyFdHe@sVp=1nXC*tB~4eO)f5&~>dXaapZB%t%%vt%U2USRwN+YQ ze{APh>QCQVJ9o*t^>I+q1R_UQki{&QXw2FgT5MD^;Uh7O$KUNbqty;Ib<|$r_p%g@_XyYO}6#4vz6DrJo>%8*qp*d5LpFU zUDSq@l`GJL-jecJ3sHfZgHfQj6XyMiED`2H|LZbVO7DGK0uq_^|yq@o55nWbnf!C+YL^wb@c&Xy*b;U z%a4ij)#>t!bInqPQOm|4Ir}Y(vsYB(nrH1?LM!HI?de6Oy8QT!zIhr$wj)of7>-GvT0@~zs_D@0IjDjmv+g`%Lg{*4QMO(uRhYDFde?NN##Cvou10U8uYGMci_w}R ztxGb$4851ZZk)^x{DPLFg+!~VB+JBn%uW*5uZ^%IsPZf&`{?ULU2R!y>&BwIHfAh( zSuAV&Pv*ckHWs?wGy7%pbKt@Ip)E?Ip{$J7*CbcxG;%YWFF&WHk7N(E3sQm3{s+WvB_RjPylmfhFDjSp9d^nEpuZl9&U2G zw+bq6pfx-@ZujQ1;L&X8d!5q)7(XIKnk%hPS=D4Q)~H?cf#_@^PhVCIW-p#yv!B(o zGPYBtNMrY)GFFPhj?ypRQYt!GRWkeZ*JzmvEk{GYL4L_}b8&?x8~o}8VntexF(-Pbh@$U@1AhGKN|QsaKw>+d*Q0vUar?sAH`vGC0mK&s*xJaDnu&_(M#-8 zFww>ru-?T}7U_%Qa&#@38ja48Zp}F|&DWA^)j2J-7F|QYv3u zhBl17*I&)ncczI}HCglE`oPQzVg6*VMKmiY&}i=?aQ;^b<}}kx@_GBdnDrd5ofM zg(NnnBtw}UZtSD1D;Xr}^#X-% zvZ>{i+{uf^VMrYNGB=$R>}%C7%*tb5YkhhokR;H)^cYp-AOpj1(}tM;@}Q; z2?~4~1(!(CoDwt-f}v6vSIEFlN4?k?<+S3U{vn}cW#w#-D`=7mO-J%?P%oGgWdjD%2dV3Tnox>422DxtLa`p zAqhH)r04{aDsmp24pl0Swp8zJXUrCXrKE?O=?qf<#i0W9-T_kgOwu?Aj#G z$j?utSsmQBh?hse43%43)Ji{~h*K${ooYGSNuaf$c0p(bTE+T+hrEVi+ljQ~@+?Mn zfPxUBh6@t%7GFm_(2t;G*YA6Io9iIVY>qPSSGl%IPVdRtqO#{!hH?HRgnT`xvq2Nz z4BeB&)aZ=*BA5>DjAdUI=f!WVN>pXnmeqmb-e;+>Z;Q~?A7nm8lf-ox13Oi$xRaSvm_f_; z8Gdk8-12I4V;^v?)VJVD5ok4%KuB}#=nUn~^t11&T}kC)Pm?`jdxsZW458N>>llN} zEIz&moWdF~QZ)NE>;@>laFCfhtBlK;N_Ke`JN#L80=QpU`oi)&bp{bttVv@QOOmVB zY^K4#AEV4JGu42j_Ql6&umw#-fhxPX3f$;t30rls2F7uWIHv$&J^AY7w@0a;UG+j- z2BXU@*Kf(#nr zGIE`1ohy86Q)-RP^-}qLt@8ZQcWZ5o#ZgwhadVbKTb`FE)$5aEUWPzP1s!8_Zi&=w z*~g&oUHilxZ?x*R*s0WZV|L=>OAWI7smiwx9XkDH#PPWcUS7Fq_Mz49Glo;jO_}wr zEe(xZw$!GjCT3+OGqNpZKf7+E<1p^fdk}7+`|Lzz4PmiX)>bla)fm3(RHFriX&d;S z4eJYzLm0JPyo6-MRaBQA6rh2~F0|A#t~^Qi%k5%~Br>8ZQ1u<%FiF%E8zq$M+S(3d+Wk z0-6;}rXWPhQ)-GUYa#B65Z6>y!urjm$6R6X9>Mw=(FAc_Wo0Xk_7ca_qFdFDYI`U1 ziKIqXnM!v>5Mdd{bY|0mra+bKeAZo*a0$iU!`o3mR}|_abkUsMn{8z0vVB;CiY-9X z*q$h~1epBYmOZj$h5+Sl!!L8TvPx-IMSgL>@=E1 zG+WYOrLNrJWWJNs6r1zt3`0tanw|DMRoZ10$HbIntI`?`ZM6KD8zcMAN^=XsFCM<( z#Sx^zI4!?2>wcT!oXfjZiH^BG7uTBY<{j!5D-6`5lA1zW8oiiUlbE(HjbWp@o+!%K zmFCy_DK4|?T>j#`EnCfXss?RYGR^iO3NlKw)7y%j2@JaMP$pKKGijR2s_jy_vnkE> z^9^W)n42<$cMFx*PE>#Sg9>#?YOGbzh-$)V(sO1>_t^A`$c?ZLCw?>_yBdh3%;H=o zbFV2<)iqMGpgd|>1f7tsEv`>&j`6KetgC1Tqi~DZ>L>#xqGVfu?vGr@Nzoe(lq*|O zTWx_L-}XDTyvL}ulLpr|@v+^SZK~SLa#+*cP9$ZQ<}xX}jbW-SWD>QJk`Yczg_Eg| zDc++p%DQzqS2Bt;c5M~QE>ERoXoDM*h0RK91|h%Ia5!D2@`PNpj{4t;)?|rLW4?iu z?II17-+EG^9Yx7p_CQMZuu8dsbh~{$VHJH?#x9T~=9Fg9>=}bN!lTH>T-fz*GvWL#~hWrWRAZD-z-I18$C zWQC+whJ?cV!S@#_|MMkVqf9mZRO0Jzb-q?-p=Ge*l*t(ySM5ES@>QbFZg(mLwrYBw~h8_HVj%)eX`PXHqW1_ViEPmtL) zB{j6HIV#_?*v$Ki;KwQ0$tYWvN;b<}XF(=iJBUnuVHPt_5?`fv&<)zwlWL?ih&NZ} zXELQ-M)CS+=oJ~8>c*xt&yqEm&God*8;O@uGF^?)VY13hIlsCZevv5$lXB%SN;Z-5 zI*vrLG}LetW!#k!ak+*pChKs?N*K~Bljp@vO`>E+cX3Vp2Lae_65e-==qHn`Tn}Eb zY(BtzRL;~#tN5~fN+?6_`x+o8Q@%jTZq6rV(c~*gwAZ|gmaX-y#L==HWIHJvv4d(Q zQ8|(eWlKq^?A_e!u5GuVe&^j2GT{%UluW#OU0Iq+V=IM;r4O;CS%zOj5*e#5yXm@~ zE+b+M#zWi!OG!!JPAb)>xM5GC6RJk?ZJIAt6$nZ%*5 z%%f#A+k=q7a*ad=PP*LeusBnz_Uw_ix69JNr}vWOQeHCf>*jSC25_t$crk!4 zcVe9!>=S@iy8%@*5E}%WOa^QZZUnHFlLG<)M0PJ;$pOLuqJMw`jRI_IC~g5zs1+Lq zz}+Wt8vw=*VTW-CKun!@Eg*NE#%r+Q0A_0d@K8N~%SK=$@g_jov;d&&2mmZ!1*q&X z>^0cV+6qvy*8zkUgw+GEXcRz=+5l`60sz(H_;!2;HX851I{}-s6M$iF0Oacg_7*^r z_Tqa0ggO=*had1jfe!6q#6AL;-8&p07JnbWtM6j70S-0?@J1g4 zpzKrp1MD*Zw4R1z3jh_y&tmfdFZ2=qG5!g_ffry4@z3y20YCIPfHW5Y0QgG)ot?+O z!oLI%+ywx@Ee5#o^VkynJpMI)5nGC1z`n*Wn@*cJS5 z`1kmC_%(pEy$EQeAMhXX>i||;0Whtf0akniTZ!MquHv@MiIi=mW6LegXwxoV*1- z0BZFUr~q*5FQ7b7PDU_5&|fe_FigGhF}(8r{)Oe3g!vs3l;#1 zYB9h>pBF3@ECD>#3xXE~FA0_lRti=Cw(4cU8o_G8T0xi~LJ%of2Ux5104R+X#0WM3 z>MBkUD~Jc|RU$wTz2J~WKfsN70~pfR1BVO;P+~8@k@*8$Q2=1T0DwCt0rXJ@;K@FK zD(e9dN)D*}48SGj0FEyO$Yd%2BVzyw2Xx6!dHbqh$zuafP>8ytrY1*?V^(a`+86G ziRfpsRO~IDCSE6w5N89dt3q5Yc8a%(Ulo5WzAnB?loOSNlX!#pinu^rB)TMG$&-@N zlI4<2Nt@)bFhFQMP2e&zit`&IWd_p|of z+3$S6-;_@&hbvbovy?f?Chz6mVcy~1vEJ`_Kk$+H1o}+!iSjA&dDG`BU$yU8-|@aN zzBRrF{bK#>el>n=e&_tYR;g8sRpBa&YM1IW)n(N;s;jCyYG1WV?XP}L9jz`^8`b;N zH~evbFaLi2-u}M+{rv~}5B4AFKi)slKgmDEKh3|y-{5cbukf$(clbN~xBGYaclz)4 z-|N5M|8@WC{tx}#6ix{#F(sjTP%^3)^%S*`T1>5_)=?2u26df6)P1@yt)Q3DYv?dK zoKB|gbPZigzefL!kuowy%|tS>jF!fx9ApkNN0_6`8Ri`G5%UT2 z8FP`j%-mvbGk2JKjEi{?APxu)m=+KkFf(9wz}$fO0Sf~b2P_HL6krXo2ebyX1#AyE z9dI__tAGmucLMJ9m-k=Yzhywr0euGS9Jp@anL)?;Ct(aM$36LnaI< z9`d&*lAcI@BISwHp>abKhPDpfHneSM`_Sz}cMR(Cb0RgHHv25PUlLOz_!|S3~ZE+zq)Gff95IdK0o>dJYl^&rD5OVt`?^`({>N&K15#yk?d;^E1)qfH0I&I*_bacagst$ zj38Or!v>(Up?fXh_ox+Qhxv~_aoO#@;bHN?ebQU;u-Ry?a7IwO2*m@BGq;91^vmwr zPMVDd>A||yzZBr^Q{SHETJqX^ZueKb6uusP;(a$Z%|qe0|&jrr~P zzuB5sFQk9vwUFyy6%2W;+2hN%F>(n$?*DtX84v$GwE7y|j zv-j9xXiPXAyFfgiRNOSzi><^z0Ch;^WmE@}A0*LuBon%Nc>3A?uzV2JUUu7+|0{kK z*1&vFFX0c~6R6?cFHd=5gj^Cm97wW_5SejFtIGD0!mHjc``>S|22eTe6&6~)iiDBB z6?$)#r)h}g$9u~|qw-%DYbC+`6}oUB*9PSNWoG1t(cKE8`(Ne)zg+GGl@`}?U2_lB zJsRL$JvNbwYXOwvUIGa$L&mMtk06{Hs20ZkzpfTEf@|PxP9KCW0VqKG!;1e!nJ+JO zP-yH3ate(0e^vWbas|~)!RnFJH3i{9mv8P%WHYtxJaoJCo$Dy%yJmz#V}5gajiIU^ zmMRq=JwY*w-wG&L|A?UuaWMv0*p1!vEZFzt>rg&H6;MnwyB=2Vo2l(c&gFr1a#%#< zGI)6eQ~e@2j2uUH1=}cCwHL0VIZfdNZS*m-r2r-!BgWO_3>3ZkwuwlE^4fzo2$gNm8QZh75ju_Riu5BD#u}Hp|&Y?S|iRa z&abXhA&um42drH>bIM`KTtuYi73DGMyXqIJSgRykuho{&8};JU!ZJ;kO8yjevwLOx z1xjAaHJabWspNFhjm7>{2#bNP!Mtjo0Vxb1A)7}6+-f+aJq2p`35Wp_rciUKTIwuk z88o; zNy6qNPg6E(6xYfr9BIXaDlp_I#CtH+wV0!xLcM>d0j*Llar`m@SmO`55PWw$c@jLcUnU!?$}6$YaCoBlDXVG4`LCyu`r(a z(s9p2mWRm2x47e>(Mc(OgWM0f+)bn>b9Y4#&~G5-y$`D(OBZB$Fp;dNB>ANazS3H5 z=(({N58a1A*HhEe)Y`6ZL6x5-L&-xZU^nDQ<*CnwHcJ(k&<`H!6%QTCu`n@&kcvxB zQu0vp)huc^3EN6i#YJ>;AX)OTj!VA*=@%h=47oandZhwP+g^_B50EWkF{wz0QedjmO_Y^2bK1IbCz)Cg{lnmK3EA!%cKqnLr20+hom4A&WuJQza0LH@rgv$McNG-_k z5As}PZfyMHL(u&j#|PB?frk-AmuDOX0zaO*ySTc4zSP|o6ayyhnTH)bubew%T7CG2 z>p^-ub^0>eu!&+9{te9HWQ|`~>Y9xU*HHVv+qJoaMg!ZSs_s??dsuocChbKIhFDJvnrE_Dpc-U!-slNVTP}gl(@+1tpFpk)Hf$gKHh=co572 zOGy;Ke(Gz=a#mE;>>+)*$~e(?)5jbjO&JRl7Dpc&mhn92mX?x}p#EHK4dv+#)&jEx zRR5~ByZ&$rx`g9rcX229q}UI2!ytdQD-!175SWV}V`V6{&_=yPS-|L5diSTYsfC`Y zs|^a5@_n`F*d`0tn5$LfTu-<6rxaHqANqI*H4|FUU5I1)_gxGb>|)3^A$b zc+yAz!;mHyLK+tz(vVz8<7R&kX)f>~&GGJ#<^l|<Jdw=*PFU6*$vh47Ngq!n6ZsD! znf{(g<_A8`xE}z!oYCZ=U-s1Qq!kbAji$<)2x>o}_^q1i-r!_4$n|f>GbbRP`IHyI zH=cOr+27-tuOXf}{$Gq|p8RV(BmY#Rr0oXb*%p#f_D8ZH3rTZYj!8 zv16<}{0rb(izEOAu$9xV+r+gM6;?iWF=Us}afRaSk^)n$3Pnhc@8Vz=2>`oDq|%eA zHV!VFCP^wN$SI*yi^Zu$Wx4+ow){T{TUPVF#PaU2%Ujn668JIMsqbB2}rS;cWnJog`Q%?@3Q{vsHdJ}m(uK2$)ZRr;A=aKb@WZ5c5871(-dZS zO=U!DjA*bJNsT8@eXaiS=!^51r{=bWs}vdG62;!-caE_GR4ejh*2mHt6ZQMj@^cC- zDOH-5`MysW@S1Imng1!GkwI>`kyS2+= z)d^|Uju%c7FxLV!JM*5{SiS zTx2CEFx78O%Bt9TYpA^!cDBJWiV5{!p&n??KZ(UYhFI((7mLXjP^SNSEVhe}#jgGl zi_PJ6*AHa%SO5gE*aC2zsedCDE8t?Wr@BKiB_E2_cZXu=r$_z4YWaBV7$1){z0sWS zITDpl4<wikOzpQWuRtnpK1YXMI3H*w~HJw^F}cSCFYS=o|dlA?O-p-(Fm&s?}8{(u0UJU1@Ggi?ekOBmX1( ztK-AJhuz`dV({Pt{wMtVzY_kv2pbqI1&FgBZgYq;*ejUw`!fWk+$%Tsl*ju=r}=T1 z0ON298A;Cm_qGlG&Bc0GPBr=9-p9&6z+*%Ij9`+_45IFo!HG=&VQ#ngx1aB)zJay$ z!C+J}zVnVD6^C_zgU@pqT50*?**H|p`{%tNZ#(CdZuS_VJlF6s6#FrRpNdQ<`U(`y zIZudR}e3c`zyTzK|-Ke@TQZ~tOjmD z)HNIq=_!8uUmw$B6c4zQdNg_ylrWG49lPW`kGpiM8an=Px-yD-nUepT+V+=G_5X7% zswV$|4k@(%H7!a9jTv~;^>RA?3LJ9jL;|7f;$M_%7;Lruu?zUuAsz=qT-QCsVKEg( zKfk;>5PT*K-gE1vt2B3A^*3POM&iP_g9PU_N)-Jyngpj_!iJ#{?2GIoIMW!&u3=YP zWGA5w%v}*nuK^(X6Uh4wK;`#C{;#k;aC&{@^8TzhBkvjyXAK2!hRsTc&1y_|-TMw< zt0|=7iVwqKjoad_v6j?WdNeE3YYjTH-mgB>xo0+Df=7#2M^|(oXOa&oyY6cE0sq{M zrH8|x@9TzvvAE&wngj=pJm-aNWwvZO%a|OdW*dp953U})%%C}U_I>`13iTa&nN>HC zAFuOu6xd4lQJs!g)MsCRIdsPIjZ0z}Hjed93VBZTk|euIS5M1Xc@Q-mq&)GaD>NOy z_$$h~BXo`OMi^n*l1jF0)V`xSDRGpWop8v>Vy&)W-j&o9Rb|sLgto|RhqDNm#g78! z0fZJJ=5~mf4eUj6Zh;QIDY1+@&ftWD3FpPf+eTbHR%S+)9X30}<9P_vq`vnm{d42W^0N90! zqv*U&iDrF){9$|yV6nUGkeOj=d6|sjLViI`agz%5kl4-U8X6rS4rmiw)U_4XMnF7o zE;gmmT`P#}+%h;zzs0^%Rmz5oGs?BKx%68v*5=yETQ>VCj_&N(Q~$2|!h16(1<#y6 zX>jzZ>S8A8;5MVSzQC4QSWpR&}c#(8i5pt|(Nhrbx;zZu?}9i$rZ?Ba<==s`c|zD?KA!Joi> z<5$1^-0fa90nTb}J_(1q(OPf#_J`9}VKXx2tqECGhpG-+-?y|&9hFt(cD3T#Nut4G zYN+DQEjL%^TQk)Q34JlFkubLRKSwKfo|d-Qi)!Q4T~i5-rZ|mxS&~qh<)k;~Htta) z9nomW%`9M&7lgBvW}Q@1tS{84ClDE$!mJ`DZ=E>35Dqb_za{LZ;`~ykBs*_f!OPNu zH5)54REk>#RR!?%0hZAG4b^>vmVFDmn!=fIo@3L!P$X8|Mn^yo;ad`y;X?xCgx7Lx zjN-b!y13k8k(x|LUpcM1HT@zxh#m6mh@jBJkro|o&95lY!r|fDrKL|UW`!y?0QC(- z46V3c?pmmvv$FGpH(uX+>g`veXFvaP^n3>LvA-&V=DmIX-4myNy!Gm$si8~e2QqS2 z2;zM4S9I=YFbSd~Aje8L%=tp%7QnfnSa0~aMGbe9X;aSDR~SU0q7yrjNQIanB!Of1 z3!j6}i1c7pzrYtPLTZd!O#!`dusCgfTors9qo%|`e}RrGpI-9mm7mX^y!iF0#lwPM zoc=T;Pa(UK%V3M+7%UMZ0qp6?yOQB3_mx?jfo8weu#?%<8`9B-kmn|sC&V=uVBKAF zMO;?cR)DNNF_yTcICm8- zQ|>0VR@T%p7S{rCtFge8q+UfN738Ndmac{3oQmvbT5-9FU1p@Zl3jCwLU&P2aU2O; zCzTr$5@TYw#_inIvU&IJ#LXKSMN=BPOqp7eox|v$h7?o&7WxRW#bjzVFgl=7S6s6R zy8bDS6a7zKC<0g!{QT2h@E;Ap&0db1<~Le%Pw!+t+_m?@MHT8j^c&Wvf&6rhuS0J$ z?4vqrz^J{oCUnNirE|2*a^3ohiYW6C-yCCkb~B9XW{z3*DfX$KTzcTQ{q7|s3;5Zy z`Lx6JwsK=)a#U1H@~)j*+qdsbXa$D363Pf-Q*mzUvc#I%F-++Chza9VZ0{Q($miw< zhYxko+jiG!>~$uq)}CKI<&ZCYCBdlI=yIBiA|s`7aT{`9R?mF?(1+(gEnlahv^G^OhadJu6m|*0=NS=k31OFn$QKP#9wDrj${J>i#8FjMN1rAfCO96Q z1_vSvY#=aCT8pF>HeKi@{;bAf­Royab>)G((dwPr|b_yp+kwBVsp)3(o!YaMMWBV6QL<6(1M2NSL$l$R-&e=Fqa7hyhceL zoy@1L;?uSQpODtg=eKCEGN%CMf^*OcQw@Cv&h!-IK}n#POT*Y^f3m?2F$p{E_<{?= zgy<{phKkynB8E-8?=N-~!7`G10in$=$f{;g!b4h|Q)SiGdt}Co?d@CmG1m~`S@gEj zg(Xll+Z9jJoJhM8{;VYIE8Wj-ERh@jyzZbm-oq$4d(d^r^8p0>80`K}+T_NH-h`dR znSM?oI_Em1+*#V%zMni`&DvaG)wNNjQg)s9PDAUq{p3M=X0zU^Z=(!SIos?OJjtmg z%tqZ5TqnyZw2mXumEa-Ke-=j~R97iPVyc6}DV0*}W~UfZ zfodU_j32ut{M6ORJr9txuX7QuCiR3HJGGN;_kf zSd7)1tLVncW{0_IYkif*;jmZ=9R=o?UB0--wFr+YyfWhy6NI)&I?j& zxv8;1-9*4yoLc6H#8F_)p%V#RUR7felX`K+M?tO9^y(t3Mb#>C=9@J1Dk592&wzoQ zttredqDOC<9-2O0npUJK(y8G)puh#QQj%@fH-I|Yt$JMr(>ngt#H)$Y+9F3Gob8ij znDw>vW;9V59Qx6>SI>QP_3|gvgGWu9K8BHp&T(VStA@D+cr<)4pmD+#{1YU)@y++J zK7rn!ql6>mw(2eQmDMek%+GaSpFzD}=<6Ty<^GVAs{y0)-EUs1Yu zQ(j7q)~a{dtaXPz^tIMi)^k0OpS-b7R~5B+nL`?HDzU)llM0|&tBI_ld`)tRKB<^t z#hFv5R|HhD^u?$j)1_?y!h-L2jgzG27i3h^%j(j06qqvW9j$p5tvNHJ``br3nYCJn z&e^g()u!7Q`E{0bXMwRGN0nyItEZQ_bjmPC{I)}?BinZGvC!L1<%Ov#RwYT&6+?|^ z2zx=9pe?a9s^H+4qr%)$K<~@j62C_E(x#{w4J|*FaSuIrzV$q)%uo_K9mM_2w)!>qF#gAm&zd)YO#1F;O*P zw^ul;7{>vzqf&2z3#7>{*cn*_N4WPlW#uQ=>YaM{7D~PO9k8S3dV9>uq2s8`<7NRjoqGVM0+k=9q*Ob#{b z%})|X`AI@?4Lr`ovbqLlmtpUI)rYSfeC^oI%-DLmCMm7JmSNU7jWy=a4*FWF%?>?u zeWo^Ri}cKzW$hvAK?BCXCwrpH*R4^-6_&=+id&v}<3&k+mCmuXs%TRYT@a(&m=i12 zXBTKPREt3?^5MH&@JWerV=ujT$)$SqQHj^OKPsW|d{n|(4wD)8Nr~4?6oeARCir%i z#9CElq3@bV6E&aE7gbxT7&HwX{Exmc!JygfdtzNxNnxIPp_8nq{=eqV1U!l&@BiJC zxtPWvnaq&PIMXN~;^HEQ7b1s|+&ScKaGtfn+jsDD6eD#a|?Au^)_weAqqSMNxx!}enKUYR9eL6=zaf(N)SgldgDNUF8{ zq*~(}Tj^`AM{92VI!r;nui=4wWP}3D4yNk=_5c$747Z<~uiC#q9QK4Q(dbEeJavxaTihbKm?Uc1ef zJ>gNC)ngCZv-iyi+9R$=B>TXDSgg_$v1T8f9I{uIg~QpT<MU-?&FEj2mApulY2gAc?&#d__BD|Bn!;c!47 z3zbzBYUfDvOUeq&?3&_IPl1-7j~jAXXoxt9E$r&Wl0svdYpwR49L2f-e9)RT+kAyr z+89DLODsXVEECs8iF@;-O}3FSd<5%-ho+_B>qzql+r3 zdo~m6u}ZX5MocJDe#q@IsXp1aXZvj`otK7LQD+btSvlLB z&)2VyM7@=^@YDlYrdVm2)s|lvT~O+x7USD4$I>zbGzJSZa4NG7tV!` z&*^uR;~F7*ur!3mT-X+oTdS;bTTt%8nOcL-;dE-;rS1~fa`_6G&+b~_(AZ_Zg%WR> z8%MlzBxPQ&%dhorEvir&{A5+3_RE1zgB1DTVaXL!vR=L#?Df4MPL8re|?{#>G+ch4m$LzIwO)iV2 zV~>?Gmlv_uhJqe%n5}d)RI+?$PNj1B%3bB!K#i+3z`A^)62I2x_Iv$)xyK!edCEO_ zPJhQ9A!}hpnbuTcbr!pEr*f}T^`R+R%u0v*B!LhS>(=W*cC<8yk1m&gF?QLKM;tA z-Q@wyD{}jsUO9j5Hi5h4_M!p)bt30AuE$aOz$;wW*V4FAi5%5?hYz1R_Sl<)hK(OL z{H{Y2K4f1L&t1B8-|lVO_U_ucc+t$|%NMe3S-d6G?8OLBD|Njv{PUGC29nOd++6fA zy^(bJrg1ZFM;n@Mu5cpf$dBIBN)LXze;PNW8$PrL@(YgaZKYNRlrY?yXhs`@NxW<;mpW zH=@H0x)Gl+UpJdj1lQFn(mwuqfHS>iui#ySg85{#3E$|UWqqmP1hxQrak>J{;u9ou4s%856J6bz-@N{GnO_|MORoj%9n2PD7)2Z$B ztymQ46nzdef%}LqrG?Yp!g4w{V}j@j$<30jl2;_>B>$9ZrA0E4OfQ$o2g^T_f70P) zMUCR`OuXahjw?FGFje!+HD9EUP0vX`&}m$!Xs2&Fo$vI+wNo)I^TM@U=MkMB?mVaS zmd=eC_h#ImF$PmG4H+dF&WxQI&nmkrZ&dbHu2dS8yOsNuuPZ;u?2|b>b7bZOfQEB2 zb2AGvjhU{@Xy)6Q?__?Rc`ox(W&)Eh2dM5;-K%;8lQ5U5R;p@MJ5+mB`&9c?2UQ=d zK2x1leXHWsw7Roet=6l1s(Y(%Ro|_?S3OcaPCZdQO+8D!KwYRdtApxI>aFVC>SxrA z>bKO#fhzt;eO7%={ezlUw{{VCk$1VKOGcM2U9RuatIL2ccXb*3pYScNq7mA3e>AgC z_4`PepV2W~NA>TZt*+p&(toB66&%%YZ(mIt3V}8>NoJ}5jqRL-qCuQZ|ppfRt4S>(_Eq2SX~{CvQ2-J#H%eeYti>* zu$0)W?EJ?|N=rSZf$X_EBw?#LSgf5Q%{Lhgppo7ou~s%18??+H>l6HMDidtmj1IQk z4T}V@?Gr1vvCOY&tF=5C(J}mz!~uzM$5ZHW$DpO2?+Lo6!&tD%YhJ|i<6HJgif1hj zuhuZXL(tr<+g=q22lW+xe|b<7vG~@K$vgx^QsQ@3l(FHGs?x=p7KJPqAZ0^!{fyNSYRlD^eX+Y|gUXX^Q z)!vXV+E2k;Mwjhj%q-ZG53)^qqBDxZ&(#8`;x{oX{8Y)DIbd2?8r;APc93pg2iVuT zxz49GiI-$Mc9qp@VuhH!)Kj{s&}CwCcSmMx{xif&3NjYMp@kC;C9AvV2vor-HEUw!60EDW2_F^^_EC=m9^3uwUwG|56;fAmgJcurf6|>b$y<^ zu=dc*ziZR$YCQ4H^NhaN*~EI8_x0`OLY>LG6lFz$)n17H%fb?e$pm^D4||d|p zPRKsmnZJq9x@YT0N*Cti@mKGx9ieI2D4V}Duu5a71!?vydQPJ;_K++Zs)_;9b&)$D zsjaGX-p$$_VtzCvW41FPS^cg*$1C+yPwuF>y{eP z2_{`ZJN8h%&0L#8DGzUUe+N69K-BinY+5$UTsH% zwx;o;tY}RzZi*OUr8x`h<$%$ADuvSV6=2p-mLEyjE#;W9N69{T&bXdn*ylnsYC#dy z338sV0gcx$dtlnSm74tZu3dTz#fVf_!CnB)YD$8$(8V>A%&fZc!FxFBZV<-@Jl#Kp ze&1WKY8}0diCWvva37mhHBwCH+I|MIxb4h;0pwPGd?uC2U1@t}-g(2au~~O1(z#o? zPDi*uvE2TanS2lK4$a4>Yrgq%=SnBu*TrN>@#^V2xO|9xr$h#a4AESiIILQUJ}L|w zKA+6}@j`Dh_j`-bTa&x1(mPW>10Cg7Af7&zt}Y8UAnY@Q@YJBGE^_~jcv3bAkf&)f zv)gH1t1YrQ3~Um%Q&U-D^y%F#vW+@W>DuW}?s!dk%q1uMr>K3c8%#k`GWjrG)Ib2J zq-1ih6H2Dtx;k%Q%XXa}nW7gjRpk_WQh8G~72$e4cSc%U?#yG;{|m)RG*X$wy#%v1 zj#EHokd&txZRIIfkA$O?pEiG<7@+DUUFHmKWw{uV zDwLSY#w9v_yu{%tbvyKqC5v1r!by1>lE$T6P>{vF+#nV+{H`1H4nI_H=3iCaAzfAq zn$Qojt)bwP`p+R=%N`jxrV!%QTbKS<8%GZU`M3}I!Ke%92m9cAeD%s&>Fa*Ph-W#` zm)*Y-u-Y1onzz1)b~+Uye)&5x5&f7Yaji|Ij8mtdU$^A|t1P7ID=Sh)8KU1#n3}HkhQI*Mz?e~4pRV8X5o{@!gc$S@5F1ydQgpQs5{o zh_lKX%bNovINcU0n!tC~rU#1A6Z*=IOdti0_8-tn%^*FaumAAkMe?x9lZou&WN&Cg z)wcEig6dE_~Vw&7L(piy} z6d=LJ1FFzHx!IBC$@WZ*~ z7^;Sr5!7qiwT!N4khKP#g1${_Ycm;ZC8}g!CZw29b(UWUT^i^bU4*XDH_$aYo76Q* z+}qmvEm@^t>9OgptxsUwGl>RNUd*@z1TcWV-1kUu6Qp&CiXSUo?RNOxVL8;Ryzg8o z<;)h3Ra+`;S&>?Y^pPnW$NJ{3&etzoUb45q4EVe$mRGkpYwMKS@~!LSpC@T~i8fkZ zb&_AFG`U+$DFi$2A2kYo=o30_VoK@Qh@$73OWn_N4HqtB0S3f#6rv5XJLbS1cj@YZ zk}Z$uw@JByAAOTVqrb*8>>R1FtUSh6%G%N8#WGu2nGItq{J=rC@I6@NL4GhN9?LQM zXQXj2h@$y2fs3m=Es$}Q2XnYJsy>fAf9CYz!(Xxu(x~5IWcgy5vCL`G0xFhp&#%4~HSb{0{r!XJp zKVndFA~#15tKo0L*uUFcx~S-e4G(OUD_FQ&Wy-ap<|=d1u5Ck7K)Z?Dg*Fz})0?nGaD6Kab)r1@p#VT|`FPrY*~G6_^9XEo6v#C77HBJcN(UaBKIx4!jGox)5sALq)@ zobHe!jfdK#aSN(tM-e+lwlZw4(XTge`pYl)e9M;WFxHbKM=k?7lGDky?|kV(ySimT z;Yx$P*yc9IjJu&cRUCFz2Ic9AByxdh4Rg=K?8kuJdG(KXw6kShge|*ifsT(zEhQL} z_a@Bv~PxJ{Dk2*%65mezuZ2f`<4ct!d@NsT3u zYWBQA(Nkuy+YJ~>SW@I(izdX{h;NtvI3Z0NKses;Bs2*Z>eB0pHZao9p(k&Wv*WnSNk1CVY?*8AdNU4>P~JHyFXoJTQR#ZucW@v zY_>-YLCbTavLZ!Mb7eRdHq<<~Rleofr`I=Wp+P6>%l8hmMP5gVS=(Zgjw>;Z;Pt3B zuICqWl0bAt^1go_PjWkwnEw;0_&%E!kZlF{*nE?i1p78wRPXtCN(6A4q z@GofY0}}SWHl*{Wt4P>Rkgy8`uqPj#qnkXxsttXeFiVr@>qGnS-JIho(lZsNDt~zd z1m6=`ftr9fRLH#64x-IQVya`h#EjI8$K5a6Y_0%=^&V+qamgC?L7CZ;TjkcfYaKfe zYOADG5mzqTk~dPpWk@$-u$tYlsN^{^G`hRS1z@JR9Sn<=8}i94>LzxfseSm$z`08jNx zk_&G2{yNxpOO;^^%%^ zHE4knP;QCMMD&7wx=vzr_>0zQ(?JhrAafeD8$fj|Z*83oB~UW|AL+Qs`xfjGr7W|h zRL787;XmzUVGbG3gId9G5-D?qECuLvvNdVQr%|&q1Y(>A_$+gU15q77(-RB`rtA=S zufNehFuc8gV8am7KQL)w6?)qM-MtD?i};t%1Uy(IWy%!k1|7}J)`1`L>yN_NDq^;n zHeF&Wu@~!^YDFP~0$3oyq%jzpI4lfEkQ!7_nck`s6sDQQx{uZ}+%ci2pTTs7t!p!s zLmBCI9m^Qvdvv||K9c3rh=L;19f&R4MdpMWwAf-ruuuUaF5*_LU>1Qgj8haWBeksd z6f?i*Mlka&Du!b|;uxmqgEMC>(XUu&h?xx~)~GpB%4jajxchkJGkn&}$JQEh_4ZQc z4Fk#Yi--ypgJqO}mVoji-GDz=E$fi3enP>#;RLGphS@si3Y0L?w0|<9*V*ea-s9z=|+q0eF|Z zO9cZ+CM630j*0(#EbZ0SlcGITKha?THGgSN!v7?7D@=0l!TyiTOoZWZEn=FI`?MZZ zzqIQCtGy2UZd5|>02Xis$7XH6Q|CwS%GQ{m;T!WbYZDvL51x5UqR{9{=kTFT=W#KwF3qkI-;Z4x0?fS`>3w}VrEbZQ7OWbebTKEok!R| zGCNwE(kdwGmqv6P*D|#>{fl{&(uh*c@1~Ityt@ z_oXubPtvj)_y504&sTAOlIQxSn9r!p_Pixt4;fpFcSGbF=1P7zLMepzMe-Ao;dgP2 z$T7*cjF5r)XJ1?B{PMZ%IT4r`%y!%l|A|QrL)`RQ_#Z)--f)-WzHh-0nfej?N3loR)6d{IF%>Y$`;a&b z@&4uY{@wp+$+9B(j03NJULjtSa4*RBZ(R?l^Xmar&!)#vaypYzVlP4XOi-OWEY>Jd^GKzaO!Gmy%gM6 zBG?YW_6l}Tuw#O~POvwU)#9lq1$&oZKP%WT2=AMcg#De=Q0f6d-lqUAo;-IWfZxarfW^;j^C9SP za*c&;`}uAAxo!LQGuy*YZ@cpn;oc(3LOBr9B82YH=2rlWISn{DxpD{COJHcUxQM-k zk_c{M&lKEK1baMe5y0~jY61ZAwbW|>;nRpaN%2g$#DMFI=pwSmeuI6Ynrwg(=Uy#*hf~@8W z(nan|q)bQ^VUIKt_DC^dk8~3DNC{z&^c40;V_^^M`_cugbEv_BeV<@IDA?l!dy-&J z7wox${kUM~2sUCNJl}t3lQ$?r?j~=2671PRYCnYfb(%Zlm;sNBYA)Z z{GNqOcBT5jeJd7l5F<|vhIxndxap^1d2}si0{N%Wmv3%#=;8$91UU=5XTYrl%2z~Z(rUQ7&|TopqO++qT0?6Q9w2!5>u5cESek`TSNaC{bfdc= zWOuqd+&$z2I{*-5Y1!LL)7pG5zsN z!@UP`D-xDN5kqzx;XVkd6{kq8I7MnDDN-w@zQRUiw+Z3D#YR)-AhlvaY9)}`1l;YC z%ER4)O_U<9;uLw6Kwj~F=xZRgB1rAEaCfFV<2`0TcGDocneb7e?U+VG;|}h23C@B~ zHsn|gIo6X( zy&LX9kXq5dNUa1?I~qsFKz2ot-EnX~LO+6Qj)w%NL4qg1XCgfj?n#hi@fA6q0-vdn zW-+9B8e;w!q*cQDSu9Ain3T#0Ph^_ZBBY&>Dad28EG2b6@{u4l$x@CMBqdoo tCDV`=QjbQNlZ9B2awb^1K|Jw literal 0 HcmV?d00001 diff --git a/public/icons/exclamation_mark.png b/public/icons/exclamation_mark.png new file mode 100644 index 0000000000000000000000000000000000000000..67538f2e0f1f11d3c06de5ffc72af6443b918a84 GIT binary patch literal 32737 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 QBO!huB`w7odF#mk19?rHmjD0& literal 0 HcmV?d00001 From 4fe296b31ac92c1b168e561ea9ceb575bcfabd49 Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 16:53:51 +1000 Subject: [PATCH 14/21] fixed styling --- components/SpotlightCard.tsx | 41 ++++++++++++++ lib/helpers/sponsorPages.ts | 16 ++++++ pages/careers-hub.tsx | 7 ++- pages/careers-hub/career-spotlights.tsx | 6 +-- pages/careers-hub/sponsors.tsx | 16 +----- styles/CareersHub.module.css | 72 ++++++++++++++++++++----- styles/globals.css | 7 +++ 7 files changed, 134 insertions(+), 31 deletions(-) create mode 100644 components/SpotlightCard.tsx create mode 100644 lib/helpers/sponsorPages.ts diff --git a/components/SpotlightCard.tsx b/components/SpotlightCard.tsx new file mode 100644 index 0000000..73ea5a9 --- /dev/null +++ b/components/SpotlightCard.tsx @@ -0,0 +1,41 @@ +import React from 'react'; +import Link from 'next/link'; +import styles from '../styles/CareersHub.module.css'; + +interface SpotlightCardProps { + icon: string; + title: string; + stat?: string; + stagger?: number; + href: string; + image?: string; +} + +// Clickable card used on both the Career Spotlights and Industry Spotlights +const SpotlightCard = ({ icon, title, stat, stagger = 0, href, image }: SpotlightCardProps) => ( + + {image ? ( + <> +

{title}

+ {/* eslint-disable-next-line @next/next/no-img-element */} + + {stat && {stat}} + Read spotlight → + + ) : ( +
+ {icon} +

{title}

+ {stat && {stat}} + Read spotlight → +
+ )} + +); + +export default SpotlightCard; diff --git a/lib/helpers/sponsorPages.ts b/lib/helpers/sponsorPages.ts new file mode 100644 index 0000000..2fd0fcb --- /dev/null +++ b/lib/helpers/sponsorPages.ts @@ -0,0 +1,16 @@ +// Sponsors with their own page. Shared between the +// Sponsors listing page and the Careers Hub landing page's sponsor marquee +// so both link to the same place. +export const SPONSOR_PAGES: Record = { + pwc: '/careers-hub/sponsor-pages/pwc', + pricewaterhousecoopers: '/careers-hub/sponsor-pages/pwc', + westpac: '/careers-hub/sponsor-pages/w-group', + domain: '/careers-hub/sponsor-pages/domain', + 'jane street': '/careers-hub/sponsor-pages/jane-street', +}; + +export function getSponsorPage(displayName: string): string | undefined { + const normalized = displayName.toLowerCase().trim(); + const key = Object.keys(SPONSOR_PAGES).find((k) => normalized.includes(k)); + return key ? SPONSOR_PAGES[key] : undefined; +} diff --git a/pages/careers-hub.tsx b/pages/careers-hub.tsx index 83b0260..6d249f1 100644 --- a/pages/careers-hub.tsx +++ b/pages/careers-hub.tsx @@ -11,6 +11,7 @@ import Link from 'next/link'; import { revalidate } from '../lib/helpers/constants'; import Image from 'next/image'; import { PATHWAYS } from '../lib/careersHubData'; +import { getSponsorPage } from '../lib/helpers/sponsorPages'; // ─── Component ─────────────────────────────────────────────────────────────── // Careers Hub landing page —> Hero, Pathways and a @@ -144,12 +145,16 @@ const CareersHub = ({ sponsors }: any) => { {marqueeSponsors.map((sponsor: any, i: number) => { const logoUrl = 'https:' + sponsor.fields.lightModeLogo.fields.file.url; const displayName = sponsor.fields.name.replace(/\s*\(\d{4}\)$/, ''); + const dedicatedPage = getSponsorPage(displayName); + const href = dedicatedPage || sponsor.fields.website || '/careers-hub/sponsors'; + const isExternal = !dedicatedPage && !!sponsor.fields.website; return ( { track.addEventListener('mouseleave', resume); track.addEventListener('touchstart', pause, { passive: true }); - const speed = 0.5; // px per frame — one direction only, loops seamlessly + const speed = 0.5; let position = track.scrollLeft; const step = () => { if (!paused) { @@ -76,7 +76,7 @@ const CareerSpotlightsPage = () => { {/* ── Finding Your Path intro ─────────────────────────── */} @@ -105,7 +105,7 @@ const CareerSpotlightsPage = () => {

Career spotlights aim to build your understanding of how your STEM learning is applied across various fields such as business,{' '} - data and production management. This will + data and product management. This will highlight practical skills and growth opportunities that may be found in the sectors. These spotlights will bridge the gap between academics and real-world application to allow students to see career trajectories. diff --git a/pages/careers-hub/sponsors.tsx b/pages/careers-hub/sponsors.tsx index 551aed6..8957371 100644 --- a/pages/careers-hub/sponsors.tsx +++ b/pages/careers-hub/sponsors.tsx @@ -9,21 +9,7 @@ import CareersNav from '../../components/CareersNav'; import PageBanner from '../../components/PageBanner'; import { loadSponsors } from '../../lib/api'; import { revalidate } from '../../lib/helpers/constants'; - -// Sponsors with their own dedicated write-up page -const SPONSOR_PAGES: Record = { - pwc: '/careers-hub/sponsor-pages/pwc', - pricewaterhousecoopers: '/careers-hub/sponsor-pages/pwc', - westpac: '/careers-hub/sponsor-pages/w-group', - domain: '/careers-hub/sponsor-pages/domain', - 'jane street': '/careers-hub/sponsor-pages/jane-street', -}; - -function getSponsorPage(displayName: string): string | undefined { - const normalized = displayName.toLowerCase().trim(); - const key = Object.keys(SPONSOR_PAGES).find((k) => normalized.includes(k)); - return key ? SPONSOR_PAGES[key] : undefined; -} +import { getSponsorPage } from '../../lib/helpers/sponsorPages'; const TIER_ORDER = ['diamond', 'gold', 'silver', 'bronze', 'affiliations', 'partnerships']; const TIER_LABELS: Record = { diff --git a/styles/CareersHub.module.css b/styles/CareersHub.module.css index 66e777f..88a47e2 100644 --- a/styles/CareersHub.module.css +++ b/styles/CareersHub.module.css @@ -1,6 +1,5 @@ /* Palette mapped from CareersHub.module.css design tokens: - --black / --white / --yellow / --light-yellow / --grey / --dark-slate-grey - Update the hex values below if your global stylesheet's tokens differ. */ + --black / --white / --yellow / --light-yellow / --grey / --dark-slate-grey */ .pageRoot{ --black:#17140F; --white:#FFFFFF; @@ -28,8 +27,7 @@ --sans:'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; } /* box-sizing, html/body reset and the `a` colour rule are already handled - site-wide by styles/globals.css — scope the Careers Hub look to this page's - own root instead of touching html, body, the universal selector or a globally. */ + site-wide by styles/globals.css */ .pageRoot{ display:block; min-height:100vh; @@ -168,17 +166,22 @@ @media (max-width:560px){ .gridCards{ grid-template-columns:1fr; } } .spotCard{ text-align:left; text-decoration:none; background:var(--card); border:1px solid var(--line); border-radius:var(--radius); - padding:24px 20px; cursor:pointer; box-shadow:var(--shadow); transition:transform .18s ease, box-shadow .18s ease, border-color .18s ease; - display:flex; flex-direction:column; gap:10px; font:inherit; color:inherit; width:100%; + padding:36px 30px; cursor:pointer; box-shadow:var(--shadow); transition:transform .18s ease, box-shadow .18s ease, border-color .18s ease; + display:flex; flex-direction:column; gap:14px; font:inherit; color:inherit; width:100%; aspect-ratio:1; } .spotCard:hover{ transform:translateY(-3px); box-shadow:var(--shadow-hover); border-color:var(--yellow); } -.spotIcon{ font-size:20px; color:var(--yellow); } -.spotTitle{ font-family:var(--serif); font-weight:500; font-size:17px; margin:0; color:var(--ink); } +.spotCardWithImage{ align-items:center; text-align:center; } +.spotCardWithImage .spotTitle{ width:100%; } +.spotCardWithImage .spotStat{ align-self:center; } +.spotCardBody{ display:flex; flex-direction:column; gap:14px; min-width:0; flex:1; } +.spotIcon{ font-size:30px; color:var(--yellow); } +.spotImage{ display:block; flex:1; min-height:0; width:auto; max-width:100%; margin:0 auto; object-fit:contain; } +.spotTitle{ font-family:var(--serif); font-weight:500; font-size:23px; margin:0; color:var(--ink); } .spotStat{ - align-self:flex-start; font-family:var(--sans); font-size:10.5px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; - color:var(--black); background:var(--light-yellow); padding:4px 10px; border-radius:2px; + align-self:flex-start; font-family:var(--sans); font-size:11.5px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; + color:var(--black); background:var(--light-yellow); padding:5px 12px; border-radius:2px; } -.spotCta{ font-family:var(--sans); font-size:11.5px; font-weight:700; letter-spacing:.03em; text-transform:uppercase; color:var(--ink-soft); margin-top:auto; display:flex; align-items:center; gap:6px; } +.spotCta{ font-family:var(--sans); font-size:12.5px; font-weight:700; letter-spacing:.03em; text-transform:uppercase; color:var(--ink-soft); margin-top:auto; display:flex; align-items:center; gap:6px; } .spotCard:hover .spotCta{ color:var(--yellow); } /* ---------- Industry spotlights (editorial alternating rows) ---------- */ @@ -278,9 +281,11 @@ @media (max-width:900px){ .featuredSponsorGrid, .featuredSponsorGridFour{ grid-template-columns:repeat(2,1fr); } } @media (max-width:560px){ .featuredSponsorGrid, .featuredSponsorGridFour{ grid-template-columns:1fr; } } .featuredSponsorCard{ + display:block; text-decoration:none; color:inherit; cursor:pointer; background:var(--card); border:1px solid var(--line); border-radius:var(--radius); padding:24px; text-align:center; - box-shadow:var(--shadow); overflow:hidden; + box-shadow:var(--shadow); overflow:hidden; transition:transform .18s ease, box-shadow .18s ease; } +.featuredSponsorCard:hover{ transform:translateY(-3px); box-shadow:var(--shadow-hover); } .featuredLogoWrap{ height:70px; display:flex; align-items:center; justify-content:center; margin-bottom:0; border-radius:var(--radius-sm); color:var(--yellow-dark); font-family:var(--sans); font-weight:700; font-size:12px; @@ -548,3 +553,46 @@ } .jobApply:hover{ background:var(--yellow); border-color:var(--yellow); color:var(--black); } .jobsEmpty{ text-align:center; padding:60px 0; font-family:var(--sans); color:var(--ink-soft); font-size:14px; } + +/* ---------- Career Spotlights: "Finding Your Path" intro ---------- */ +.pathIntroSection{ padding:60px 0 12px; } +.pathIntroCard{ + position:relative; overflow:hidden; + background:#fbe4e1; border-radius:20px; padding:48px 56px; max-width:900px; margin:0 auto; +} +.pathIntroHeading{ + font-family:'Labor Union', var(--sans); font-weight:400; font-size:clamp(34px,5vw,46px); letter-spacing:.02em; + text-transform:uppercase; color:var(--black); text-align:center; margin:0 0 28px; +} +.pathIntroLede{ + font-family:var(--sans); font-size:14.5px; line-height:1.9; color:#3a2a28; max-width:680px; + margin:0 auto 40px; text-align:center; +} +.pathIntroFeature{ display:grid; grid-template-columns:1fr 1.2fr; gap:32px; align-items:center; margin-bottom:40px; } +@media (max-width:700px){ .pathIntroFeature{ grid-template-columns:1fr; } } +.pathIntroBlob{ + position:relative; aspect-ratio:1; border-radius:45% 55% 60% 40% / 55% 45% 55% 45%; + background:#eeb3b0; display:flex; align-items:center; justify-content:center; +} +.pathIntroBlobIcon{ display:block; width:90%; height:90%; object-fit:contain; } +.pathIntroFeatureText p{ font-family:var(--sans); font-size:14px; line-height:1.85; color:#3a2a28; margin:0 0 18px; } +.pathIntroFeatureText p:last-child{ margin-bottom:0; } +.pathIntroSubheading{ font-family:var(--sans); font-weight:800; font-size:16px; color:var(--black); margin:0 0 16px; } +.pathIntroCallout{ + display:flex; align-items:flex-start; gap:16px; + background:#e59a9a; border-radius:8px; padding:20px 24px; margin-bottom:1px; +} +.pathIntroCalloutIcon{ + flex-shrink:0; display:block; width:72px; height:72px; object-fit:contain; margin-top:2px; +} +.pathIntroCallout p{ font-family:var(--sans); font-size:17px; line-height:1.8; color:#fff; margin:0; } +.pathIntroClosing{ font-family:var(--sans); font-size:14px; line-height:1.9; color:#3a2a28; margin:0; } + +/* ---------- Career Spotlights carousel ---------- */ +.spotCarousel{ position:relative; } +.spotCarouselTrack{ + display:flex; gap:18px; overflow-x:auto; + padding:4px 4px 12px; scrollbar-width:none; -ms-overflow-style:none; +} +.spotCarouselTrack::-webkit-scrollbar{ display:none; } +.spotCarouselTrack > *{ flex:0 0 clamp(280px,32vw,360px); scroll-snap-align:start; } diff --git a/styles/globals.css b/styles/globals.css index 453d098..ad09046 100644 --- a/styles/globals.css +++ b/styles/globals.css @@ -1,5 +1,12 @@ @import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600&family=Playfair+Display&display=swap'); +@font-face { + font-family: 'Labor Union'; + src: url('/fonts/LaborUnion-Regular.otf') format('opentype'); + font-weight: 400; + font-display: swap; +} + /*Web colours*/ :root { --white: #fff; From df4df1c8f591915aea60a9b00f4d1247bbe77709 Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 17:22:28 +1000 Subject: [PATCH 15/21] fixed linting --- lib/careersHubData.ts | 89 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 lib/careersHubData.ts diff --git a/lib/careersHubData.ts b/lib/careersHubData.ts new file mode 100644 index 0000000..373a86e --- /dev/null +++ b/lib/careersHubData.ts @@ -0,0 +1,89 @@ +// Move to contentful later + +export interface SpotlightEntry { + title: string; + icon?: string; + stat?: string; + body: string; +} + +// Career spotlights link out to their own bespoke page under +// career-spotlight-pages/ instead of rendering a shared body — so unlike +// SpotlightEntry (used by industry spotlights and job searching), there's +// no body field here. +export interface CareerSpotlightEntry { + title: string; + icon?: string; +} + +export interface PathwayEntry { + icon: string; + title: string; + body: string; + tip: string; +} + +export interface JobEntry { + title: string; + company: string; + type: 'internship' | 'grad' | 'fulltime'; + location: string; + deadline: string; + description: string; + applyUrl: string; +} + +export const CAREER_SPOTLIGHTS: Record = { + 'business': { title: 'Business', icon: '\u25c8' }, + 'engineering': { title: 'Engineering', icon: '\u25c7' }, + 'product': { title: 'Product', icon: '\u2726' }, + 'data': { title: 'Data', icon: '\u25c9' }, +}; + +export const INDUSTRY_SPOTLIGHTS: Record = { + 'ai': { title: 'Artificial Intelligence', stat: 'US$244B market in 2025', body: '

Artificial Intelligence

Intro

Artificial Intelligence (AI) is the science of creating machines that can learn, reason, and solve problems - much like humans, but at incredible speed and scale. Whether through recommendation systems, virtual assistants, or generative models, AI is already embedded in daily life. Yet, its implications extend far beyond convenience. As AI transforms industries, it raises critical questions about ethics, automation, and the evolving job market, making it essential for future professionals to understand its impact and opportunities.

Roles in AI

Machine Learning Engineer: Develops and deploys machine learning models and systems that can learn and improve from experience without explicit programming.

Deep Learning Specialist: Focuses on developing and implementing deep neural networks (DNNs) and architectures for tasks requiring complex pattern recognition and data analysis.

Natural Language Processing (NLP) Engineer: Designs algorithms and models that enable machines to understand, interpret, and generate human language, supporting applications like chatbots, translation, and sentiment analysis.

Computer Vision Engineer: Develops algorithms and systems for processing and analyzing visual data from the world, enabling applications such as image recognition, object detection, and augmented reality.

Growth Projection

The market for AI technologies is vast, amounting to around 244 billion U.S. dollars in 2025 and is expected to grow well beyond that to over 800 million U.S. dollars by 2030.

(source: https://www.statista.com/outlook/tmo/artificial-intelligence/worldwide)

Consider a role in AI if you enjoy:

  • Teaching computers to think, learn, talk and take actions
  • Turning big piles of raw data into smart decisions
  • Playing with cool tech like chatbots, facial recognition, or self-driving systems
  • Solving puzzles with code and clever algorithms
  • Creating machines that can see, hear, and understand the world
' }, + 'cloud': { title: 'Cloud Computing', stat: '17.3% CAGR to 2030', body: '

Industry Spotlights: Cloud Computing

Cloud computing is the delivery of computing services such as storage, databases, and networking software over the Internet. In today's technological landscape, many businesses find it more practical to rent access to applications and storage from a cloud service provider rather than investing in databases, software, and hardware. This is the same technology that powers everyday services like Gmail or the cloud backup of photos on your smartphone.

You could work as a Cloud Engineer, Cloud Architect, or Cloud Security Specialist, designing, managing, and securing cloud-based systems for businesses.

There are four main types of cloud computing:

Public cloud: In public cloud computing, services are delivered over the Internet by third-party providers, making them accessible to anyone who wants to use or purchase them.

Private cloud: Private clouds are used exclusively by a single organization, offering the highest level of security and control.

Hybrid cloud: A hybrid cloud combines public and private cloud environments, allowing businesses to host applications on their own servers for added security and control.

Multi-cloud: Multi-cloud differs from hybrid cloud in that it integrates multiple cloud computing and storage providers within a single architecture.

Growth projections:

The cloud computing market is estimated to grow at a CAGR of 17.3% during the forecast period 2023-2030 and is estimated to reach $1,933 billion by 2030.

' }, + 'cyber': { title: 'Cyber Security', stat: 'Critical & fast-growing', body: '

As Australia becomes increasingly reliant on technology, digital systems, and online services, cyber security has become one of the most critical and fast-growing industries worldwide. Cyber security specialists are responsible for designing, implementing, and maintaining secure systems that safeguard sensitive information and digital infrastructure. They monitor networks for vulnerabilities, respond to security incidents, investigate cybercrime, and develop strategies to prevent future attacks.

There are several exciting specialisations within Cyber Security, including:

Ethical Hacking

Ethical hackers use advanced testing techniques, such as penetration testing, to identify weaknesses in computer systems before malicious attackers can exploit them. Their work helps organisations strengthen their digital defences and improve overall system security.

Digital Forensics

Digital forensics focuses on investigating cyber incidents by collecting and analysing electronic evidence. Specialists examine cyber-attacks, malware infections, and unauthorised access to determine how incidents occurred and help organisations respond effectively.

Incident Response

Incident response professionals act quickly when cyber-attacks occur. They investigate breaches, contain threats, minimise damage, and work to restore systems while identifying ways to prevent similar incidents in the future.

Key Skills for Success

Successful cyber security professionals often demonstrate:

  • Strong problem-solving and analytical thinking
  • Attention to detail
  • Technical knowledge of networks and systems
  • Coding and programming skills
  • Communication and teamwork
  • Adaptability in fast-changing environments

Why Choose Cyber Security?

A career in cyber security offers the opportunity to solve complex challenges, work with cutting-edge technology, and make a real-world impact by protecting critical digital systems. It is an ideal pathway for students interested in technology, innovation, and building a safer digital future.

' }, + 'fintech': { title: 'Financial Technology', stat: 'Hundreds of AU fintechs', body: '

Financial Technology, or Fintech, is the use of technology to deliver and improve financial services. It combines finance, software, data, and other aspects of technology to help people and businesses manage money more efficiently. Fintech has transformed everyday activities such as banking, payments, investing, borrowing and insurance by making services faster, more accessible, and more personalized.

Career Opportunities

The Fintech industry offers a diverse range of career pathways. Software Engineers develop digital banking and payment systems, Cyber Security protects financial data and prevents fraud, Data Analysts identify trends from large datasets, and UX Designers create user friendly webs and applications. Other roles include Product Managers, Compliance Specialists, Risk Analysts and AI Engineers.

Industry Trends

Fintech continues to evolve through innovations such as mobile banking, digital wallets, pay later services, and blockchain technology. As financial services become more digital, organisations are placing greater emphasis on cybersecurity, privacy and responsible use of customer data.

Fintech plays an important role in improving financial inclusion and making financial services more efficient. It helps businesses with their operations, enables consumers to access services more conveniently and supports economic development through its innovation. In Australia, the sector includes hundreds of fintech companies operating across payments, lending, wealth management, insurance technology, regulatory technology, and many other sectors.

Future Prospect

As technology continues to advance, demand for skilled professionals in Fintech is expected to remain strong. Emerging technologies such as AI and automation will continue to reshape the industry, inventing new innovation, while also increasing the need for expertise in risk management and cybersecurity.

' }, + 'finrisk': { title: 'Financial Services & Risk', stat: 'Rising demand', body: '

The financial sector comprises a large number of organisations that are involved in financing, borrowing, investments, insurance, auditing, and managing finance and risks. Financial services concentrate on effective financial management, providing correct reporting and decision making related to finances.

Risk strategy has become very significant today considering various issues and challenges faced by organisations like cybersecurity, economic instability, changes in regulations, fraudulent activities, climate risks, and application of artificial intelligence. Proper risk management can help identify, evaluate, and minimize risks.

Roles in Finance and Risk Strategy

Finance, audit and assurance

Assurance is very essential in ensuring that trust prevails in an organisation by assessing the accuracy, reliability and integrity of the financial activities, transactions and records of the business. Assurance helps stakeholders develop confidence in the financial management, reporting and activities of the organisation.

Growth projections

Careers in financial services and risk strategy are also becoming very significant with changes brought about by digital transformation, regulatory requirements and economic uncertainties. In the present day where financial institutions rely heavily on technology, there is an increasing need for people who have knowledge and skills in finance, technology, compliance, and risk management.

Risk management

Risk management focuses on the identification, analysis and prioritisation of various financial and operational risks. Some of the financial and operational risks include credit risk, market risk, fraud, cyber risk, regulatory risks, third party risks, and business interruption risks.

' }, + 'biotech': { title: 'Biotechnology', stat: '$2T \u2192 $8T by 2034', body: '

Industry Spotlight: Biotechnology

Biotechnology integrates biology, chemistry and engineering to manipulate living organisms or their parts to create efficient products and processes. As one of the fastest-growing industries globally, biotechnology is transforming the way we approach healthcare, food production, environmental sustainability and industrial manufacturing. The sector can be broadly divided into 4 main fields, each addressing distinct real-world challenges through the lens of biological science.

Medical

Medical biotechnology encompasses diagnostics and pharmaceuticals to enhance human health, revolutionising disease diagnosis, treatment and prevention. Specialists in this field develop vaccines, gene therapies and monoclonal antibodies, all innovations that have opened new avenues for treating cancers, autoimmune disorders and rare genetic conditions. The rise of personalised medicine, which tailors treatment to an individual's unique genetic profile, represents one of the most exciting frontiers in this space.

Industrial

Industrial biotechnology works with organisms such as enzymes and microbes to produce and process materials, chemicals and energy whilst lowering environmental impact. Biofuels like ethanol and biodiesel (renewable energy sources derived from organic biomass) are being used in electricity generation, automotives and manufacturing. This field plays a key role in transitioning industries away from fossil fuel dependency and toward more sustainable production methods.

Agricultural

Agricultural biotechnology maximises crop yield, nutritional value and resistance to external stressors such as pests and unfavourable growing environments through genetic engineering. By developing pest-resistant and drought-tolerant crop varieties, this field helps secure global food supply chains against the growing pressures of climate change and population growth. Bt cotton, genetically modified to resist pests, now accounts for approximately 75% of global cotton production.

Environmental

Environmental biotechnology applies biological processes to sustain and restore ecosystems through pollution control and waste management. Specialists in this area develop bioremediation solutions, deploying microorganisms like Pseudomonas bacteria to break down oil spills, industrial waste and other environmental contaminants. This field sits at the intersection of ecology and engineering, offering scalable solutions to some of the planet's most pressing environmental crises.

Key Skills for Success

Successful biotechnology professionals often demonstrate:

Interdisciplinary Thinking: Biotechnology draws on medicine, computer science, chemistry and engineering, comfort across scientific domains is essential for solving complex biological problems.

Attention to Detail: Research and development in this field demands precision, whether in laboratory procedures, data analysis or regulatory compliance.

Team-Oriented Collaboration: Biotech projects rely on diverse expertise working toward a shared goal, making strong communication and cooperative skills critical.

Adaptability: The field evolves rapidly with new discoveries and technologies - a willingness to continuously learn keeps professionals at the cutting edge.

Why Choose Biotechnology?

A career in biotechnology offers the opportunity to drive tangible global change, developing answers to real-world challenges in health, food security and environmental sustainability. With the global biotechnology market valued at $2 trillion in 2024 and projected to reach $8 trillion by 2034, driven by breakthroughs in DNA manipulation, synthetic biology and drug discovery, the industry presents outstanding career prospects for students passionate about science, innovation and making a meaningful impact.

' }, + 'consulting': { title: 'Consulting', stat: 'US$78.89B in 2025', body: '

Industry Spotlight: Consulting

Consultants are strategic problem solvers who support businesses in tackling a wide range of challenges. They offer expert insights, data-driven analysis and tailored recommendations to help organisations prevent issues, overcome obstacles and enhance overall performance. As businesses navigate increasingly complex and competitive environments, the demand for skilled consultants continues to grow across every major industry.

What Do Consultants Do?

At its core, consulting is about diagnosing problems and delivering solutions. Consultants work closely with organisations to understand their goals, identify inefficiencies and design strategies that drive measurable improvement. Technology consulting in particular focuses on harnessing the power of technological innovation to streamline operations, improve efficiency and achieve long-term strategic objectives, whether by implementing new systems, optimising digital processes or advising on IT infrastructure.

Roles in Consulting

Strategy Consulting

Strategy consultants leverage quantitative analysis and critical thinking to develop high-level strategies that guide clients toward achieving their long-term goals. They work closely with leadership teams to identify growth opportunities, assess competitive positioning and align business initiatives with strategic objectives. This role demands strong commercial awareness and the ability to translate complex data into clear, actionable direction.

Management Consulting

Management consultants focus on improving organisational efficiency by addressing operational challenges, streamlining processes and implementing best-practice business solutions. Their goal is to enhance productivity, reduce costs and drive sustainable performance across all areas of the business. Management consultants often act as change agents, guiding organisations through restructures, mergers and large-scale transformation programs.

IT Consulting

IT consultants assist clients in designing, implementing and maintaining effective IT infrastructures. This includes supporting decisions on hardware, software, cloud solutions, cyber security and digital transformation strategies to ensure that technology is aligned with the business's needs and goals. As organisations increasingly rely on digital systems, IT consultants play a pivotal role in future-proofing operations and enabling innovation.

Key Skills for Success

Successful consultants often demonstrate:

Analytical Thinking: The ability to break down complex problems, interpret data and develop evidence-based recommendations is fundamental to consulting work.

Communication: Consultants must clearly convey insights and strategies to stakeholders at all levels, from frontline teams to executive leadership.

Adaptability: Every client and engagement is different, the ability to quickly understand new industries, business models and challenges is essential.

Collaboration: Consulting projects are team-driven, requiring strong interpersonal skills and the ability to build trust with clients and colleagues alike.

Why Choose Consulting?

A career in consulting offers exposure to diverse industries, high-impact problem solving and accelerated professional development. The IT consulting and implementation market alone is projected to generate US$78.89 billion in revenue in 2025, with a compound annual growth rate (CAGR) of 4.18% expected to bring the market to US$92.96 billion by 2029. For students who enjoy variety, intellectual challenge and the opportunity to drive real change across organisations, consulting is an outstanding career pathway.

' }, + 'entertainment': { title: 'Entertainment', stat: 'AU video: $9.2B', body: '

What is it?

Entertainment is a form of activity or media that holds the attention of an individual or audience.

As long as living beings continue to exist, entertainment will be created and performed in one form or another. This includes your favorite TV shows, animes, books, plays and video games.

Where does technology come in?

The development of new technologies has significantly changed the entertainment industry in the last three decades. The advancement of technology has especially led to extreme changes in the way people consume entertainment. An example of this is the rapid speed of digital content distribution which saw consumers shifting from physical media such as CD's and vinyl records to streaming platforms such as Spotify and Netflix.

Examples:

Gaming

The global video game industry is massive and is one of the largest entertainment sectors. The rapid improvement of technology has led to better accessibility via mobile, internet and cloud gaming, resulting in a wide variety of users. Integration of virtual reality in games such as "Half Life: Alyx" have changed the player's role entirely and now allow for a fully immersive experience. Growth in artificial intelligence has made it easier for games to adapt to each player. For example "F.E.A.R" has used AI to make the actions of NPC's to be more unpredictable leading to a better experience for the player.

Streaming Services

Streaming services are online providers such as Netflix, Disney + and Crunchyroll that allow users to access entertainment such as movies, TV shows or podcasts. It's essential that these services deliver seamless, uninterrupted media to viewers. To do so they utilise a multitude of tech such as adaptive bitrate streaming and content delivery networks to ensure large distribution of content is done so in an efficient manner.

Digital Platforms

Tiktok, Instagram and facebook are examples of digital platforms which connect users, developers and businesses. Cloud computing allows these platforms to handle varying amounts of traffic from users and prevents the platform from being overwhelmed by visitor volume. AI, matching algorithms and data analytics allow content on these platforms to cater to the interests of each user.

Live Entertainment

Any entertainment performed in person is referred to as live entertainment. This includes musicals, concerts and even more. Augmented Reality (AR), Virtual Reality (VR) and 3D audio technology have been used to improve audience immersion in performances. It is also the current trend to live stream the performance to allow individuals to watch from the comfort of their own home.

Growth Projection

The Australian entertainment industry is set to grow in the coming years,

In particular, it is estimated that the Australian video market will grow to be worth a whopping 9.2 billion dollars. The Australian game dev industry has also generated 608.5 million dollars in revenue in the previous financial year and is predicted to continue growing.

Source: https://www.businesswire.com/news/home/20240418267220/en/Australian-Video-Entertainment-Market-Forecast-Outlook-to-2027-Featuring-Foxtel-Binge-Kayo-Disney-Amazon-Prime-Stan-Fetch-Telstra-TV-Paramount-Apple-TV-Youtube-and-Optus---ResearchAndMarkets.com

Source: https://igea.net/2026/03/agds-2025/

' }, + 'telecom': { title: 'Telecommunications', stat: 'US$1.32T in 3 yrs', body: '

What is it?

Telecommunications deals with the ability to send and receive 'information' over long distances using both wired and wireless technology. Information comes in different forms including photos, videos or messages.

With the fast pace of modern society, the speed and quality of information transmission has become extremely important, hence the growth of this industry.

Where is it used?

Every piece of information you send uses telecommunications technology. This includes every call, text, email, video and even access to the internet. The industry has seen much change since the invention of the telephone.

Current Technology

The telecom industry has to constantly adapt to new and improved technology to ensure quality service to customers such as yourself. This includes the integration of 5G technology to increase network capacity, data transmission speeds and overall reliability. Cloud computing is also integrated into the industry to accelerate the deployment of 5G technology, monitor network activity and ensure quality connections for users.

Careers:

Network Engineering

Telecommunications Network Engineers plan, design and monitor complex telecom networks and associated equipment. The issues of current systems are noted and analysed to prevent any future problems. They configure hardware and software so that it achieves the desired communication outcomes. The capabilities of current systems are also tested thoroughly. Engineers use this result to make long term plans to enhance existing tech which can manage future demands effectively.

RF engineers

Radio Frequency (RF) engineering is vital in the telecom industry. These engineers develop technologies used to monitor and implement systems which use radio frequencies to communicate. They ensure current systems are constantly updated with new technologies to ensure efficient and reliable communications.

Telecom Security Architect

The security of telecommunications networks is extremely important due to the sensitive information that passes through them. This includes bank transactions, personal information and business communications. The role of a security architect is to prevent cyber threats from affecting communications infrastructure, protect data privacy and ensure the network's resilience against threats.

Source: https://www.jobsandskills.gov.au/data/occupation-and-industry-profiles/occupations/263312-telecommunications-network-engineers

Growth Projection

Global telecom services are set to grow to 1.32 trillion US dollars in three years. In Australia the telecommunications industry is aligned to the overall productivity of the country as every business, school and individual will use its products.

Source: https://www.pwc.com/gx/en/industries/tmt/telecom-outlook-perspectives.html

' }, + 'swdev': { title: 'Software Development', stat: 'Strong AU growth', body: '

As technology continues to shape the way we live, work, and communicate, software development has become one of the most essential and innovative industries worldwide. Software developers are responsible for designing, building, testing, and maintaining software applications that solve problems and improve efficiency. They work closely with teams to develop programs, write code, fix technical issues, and ensure systems operate effectively to meet user needs.

There are several exciting specialisations within Software Development, including:

Web Development

Web developers design and build websites and web applications that are functional, responsive, and user-friendly. They work on both the front-end (what users see and interact with) and the back-end (servers, databases, and application logic).

App Development

App developers create mobile applications for smartphones and tablets across platforms such as iOS and Android. They focus on building innovative, intuitive, and efficient applications that enhance user experiences.

Software Engineering

Software engineers design large-scale systems and applications by applying engineering principles to software creation. They focus on building secure, scalable, and reliable systems used by businesses, governments, and organisations worldwide.

Game Development

Game developers combine programming, creativity, and problem-solving to create interactive gaming experiences. They develop game mechanics, graphics systems, and immersive environments across consoles, computers, and mobile devices.

Growth Potential

The software development industry in Australia continues to experience strong growth as digital transformation expands across every sector. Businesses, governments, and organisations increasingly rely on software solutions to improve productivity, deliver services, and remain competitive.

Why Choose Software Development?

A career in software development offers the opportunity to create innovative digital solutions, solve real-world challenges, and shape the future of technology. It is an ideal pathway for students interested in technology, creativity, and building impactful solutions in a rapidly evolving digital world.

' }, +}; + +export const JOB_SEARCHING: Record = { + 'resume': { title: 'Cover Letter & Resume Tips', body: '

Cover Letter Tips:

Your cover letter is your first impression. It often accompanies your resume in job applications and is your chance to distinguish yourself. A well-written cover letter is made to impress and persuade the recruiter to take a closer look at your resume.

Do you research:

Conduct relevant research into the company and position prior to writing your cover letter. Address the cover letter to the hiring manager and include the job title as well as the company name. Also, make sure to use keywords from the job posting throughout your letter to demonstrate your understanding of the company\u2019s values.

Hook The Reader:

Remember, your first line demonstrates your excitement to join the company and must hence be engaging.You should make a good impression by showcasing your understanding of the company\u2019s values, vision and culture as well as how they align with your own. Express your motivation and willingness to stand out from others and learn continuously, emphasising why you are the best fit for the company.

Showcase Standout Features of Your Resume:

Write a compelling case for why you\u2019re suitable for the role by highlighting relevant experiences and achievements that align with the job\u2019s responsibilities. Be specific to the position and avoid mentioning irrelevant experiences or negative traits. Additionally, avoid mentioning lack of experience.

Be Professional But Not Overly Formal:

Use a professional yet personal tone by writing in the first person and keeping the letter engaging. Ensure your letter is concise to hold the reader\u2019s attention (quality over quantity). Let your personality shine through your words and demonstrate your written communication skills.

Finish Strong:

Leave an impact! Reiterate your strengths and interests; make the recruiter eager to see what else you have to offer. Be sure to thank the reader for their time.

How to Structure:

Keep your cover letter clear and easy to look at. Avoid cluttering and include whitespaces. Double-check for any grammatical errors or spelling mistakes.

Resume Tips: Content

Read Job Description:

Be sure to tailor both the content and language of your resume to align with the specific role and company you\u2019re applying to. Additionally, take the time to thoroughly revise and edit your resume before submitting it. You can also use tools like WordCloud to analyse the job posting, identify important keywords, and seamlessly incorporate them into your resume.

Highlight Relevant Professional Experience:

Your experience section can feature professional roles, internships, or academic projects. For each entry, use bullet points to clearly outline your main responsibilities and notable accomplishments. Make sure these are relevant to the position you're applying for, and highlight the most recent experiences first. Additionally, include URLs to relevant online profiles or portfolios, such as LinkedIn and ensure they are simple and full of information that showcases your skills.

Showcase hard and soft skills:

Demonstrating both hard and soft skills on your resume is essential. Hard skills should be listed clearly in a dedicated \u2018Skills\u2019 section, including software you\u2019ve worked with, programming languages you are proficient in, or any languages you speak fluently. Integrate soft skills more subtly throughout your resume under relevant experiences and hobbies.

Add Metrics:

Add metrics to your achievements to show your impact and success. This provides concrete evidence of your accomplishments. Use the structure \u2018Accomplished [X] as measured by [Y] by doing [Z].\u2019

Scan Your Resume:

It is common for companies to use applicant tracking systems (ATS) to screen resumes before they reach a recruiter. Tools like Jobscan.co allow you to upload your resume along with a specific job description. These platforms generate a compatibility score and offer detailed feedback to improve your resume.

Resume Tips: Readability

Design:

Make sure your resume is simple, classy and clutter-free. Align your text to the left and use bold, caps and italics sparingly. Balance text with whitespaces to increase readability. Consider using a professionally designed template. Overall the resume should be no more than 1-2 pages.

Subheadings:

Use simple subheadings that help your recruiter pick out target information.

About Me/Career Profile:

One or two sentences introducing yourself, your motivations and experiences.

Education:

This includes relevant coursework, current/past degrees, and your current WAM.

Work/Professional Experience:

Technical Feature Project Lead (June 2024 - June 2025)

Showcase recent experience first and make sure all experiences are relevant. Include specific responsibilities and metrics under each experience.

Leadership/Volunteering:

WIT Publications Subcommittee (Feb 2025 - Nov 2025)

Extracurricular activities and personal projects are under this section. This is used in particular to highlight soft-skills and show recruiters who you are as a person.

Skills:

A list of hard skills that are relevant to the job. Can be divided into sections, e.g. Programming Languages, Communication Skills, Leadership, Data Visualisation etc.

Be Mindful of Jargon:

Avoid excessive use of jargon. Be mindful of the fact that the person viewing your resume may

come from a non-technical background. Make sure you accommodate a range of people, including your hiring managers.

Resume and Cover Letter Tips: When you Are Finished

Proofread:

Always double check your resume for grammatical errors and spelling mistakes. Use software tools to ensure your message is being delivered in the most effective manner possible. Send your resume to peers and mentors to ensure that your content conveys your professional experience and journey effectively.

Write a Thank You Email:

If you receive an email confirming that your resume has been received, follow up with a thank you email. This demonstrates your enthusiasm and appreciation.

Track Your Resume:

Use software such as MailTrack to know when your email has been opened and by who.

' }, + 'linkedin': { title: 'Personal Branding on LinkedIn', body: '

LinkedIn is more than just a digital resume \u2014 it\u2019s often your first impression in the professional world. Whether you're connecting with recruiters, potential collaborators, or industry peers, your profile tells your story. A strong personal brand helps you stand out, build trust, and open doors to new opportunities.

Below are some practical steps to help you craft a profile that reflects your best professional self.

Know your Personal Brand

Before you dive into profile edits, take a moment to reflect. Ask yourself:

  • What three words describe me professionally?
  • What kinds of roles, industries, or problems do I want to be associated with?
  • How do I want people to feel when they read my profile?

Your profile should tell a story \u2014 consistently and clearly. When your tone feels real and your messaging is aligned, people are more likely to trust you and remember you.

Go Beyond the Basics

LinkedIn isn\u2019t just your online CV; it\u2019s a professional community. Use it to grow your network and skills:

  • Join Groups: Connect with peers by joining LinkedIn groups in your study or career field.
  • Get Recommendations: Ask professors or supervisors for short written testimonials.
  • Give & Get Endorsements: Endorse skills of others to encourage mutual support.
  • Attend Events & Webinars: Join or co-host online sessions to learn and grow your network.

Share Valuable Content

  • Project Highlights: Briefly explain what you worked on, what you learned, or the impact.
  • Insights & Lessons: Share career tips, books you\u2019re reading, or reflections on industry trends.
  • Visual Content: Use Canva to create simple slides or infographics to explain a concept or showcase your work visually.
  • Engage, Don\u2019t Just Broadcast: Like and comment on posts by peers or industry leaders to build relationships. Thoughtful comments get noticed.
  • Consistency Over Frequency: You don\u2019t have to post daily. Even one post or comment a week builds your presence and helps you stay on people\u2019s radars.

Optimise your Profile

Professional Photo:

  • Natural light, a neutral and a high definition background keep it clean and clear.
  • Dress like you\u2019re meeting someone important for the first time \u2014 even if it\u2019s online.

Compelling Headline:

  • Instead of a bland job title, use your headline to tell people what you do and what you care about.
  • Include keywords recruiters use to find candidates. Avoid using cliche words like \u201chard worker,\u201d \u201ccreative person,\u201d or \u201cgo-getter.\u201d

About Section:

  • Keep it clear and focused: What you study, what drives you, what you want next.
  • Mention a recent project or achievement to show proof of your skills.
  • Use short paragraphs or bullet points for easy reading.

Keywords & Custom URL:

  • Using terms relevant to your skills, courses, or career goals, e.g., \u201cmachine learning,\u201d \u201cdigital marketing,\u201d \u201csupply chain management\u201d, help recruiters find you.
  • Customize your LinkedIn URL to include your name or field, e.g., /aliceKoo-design.
  • Use relevant hashtags when you post content to boost discoverability,( #WomenInTech, #CareerTips, etc.)

Quick Checklist to Get You Started

  • Upload a clear, professional photo
  • Write a compelling headline
  • Write a personal and professional summary
  • Add 3\u20135 keywords related to your skills
  • Customize your LinkedIn URL
  • Share or repost 1 useful post this month
  • Leave 1 thoughtful comment
  • Join 1 relevant LinkedIn group
  • Ask 1 lecturer or supervisor for a recommendation
  • Endorse 2 friends for their skills

Final Thought: Keep it Growing, Keep it Real

Your LinkedIn profile will evolve as you do. Don\u2019t stress about having a \u201cperfect\u201d page right away. Focus on being genuine, consistent, and curious. That\u2019s how you build a personal brand that works for you \u2014 not just now, but long into your career.

' }, + 'scouting': { title: 'Job Scouting', body: '

Job Scouting

Job hunting can be stressful, overwhelming, and confusing. But it doesn't have to be. With the right set of tools and advice, applying to jobs can feel like ordering your morning coffee - familiar, fast, and just the way you like it. From sifting through the multitude of job-seeker platforms to advice on how to stand out and leverage your unique skills, here is a curated guide to navigating the job scouting process effortlessly.

Be Consistent

Job hunting is a process that requires steady, daily effort. Set aside dedicated time each day to browse your preferred job boards and save roles that interest you. Make it a habit to submit applications regularly and check your inbox so you don\u2019t miss time-sensitive updates - like virtual assessments or interviews with 48-hour deadlines (trust me, they come fast). Consistency in networking is just as crucial. Attend industry events, information sessions, and professional meetups to expand your network and gain valuable insights directly from industry experts. These conversations can clarify career paths, answer your questions, and even lead to referrals.

Organise Your Applications

One of the most effective ways to reduce job-search stress is to stay organised from the beginning.

A simple spreadsheet can go a long way. Track important information such as company names, role titles, application deadlines, submission dates, application status, interview stages, and follow-up dates. You may also want to include notes about contacts you've spoken with, networking conversations, or key details about each company.

If spreadsheets aren't your style, tools such as Notion or Trello offer more visual ways to manage your applications.

Having a centralised system helps prevent missed deadlines, reduces mental clutter, and allows you to clearly see your progress. Over time, your tracking system can also reveal useful patterns. You may notice you're consistently applying to certain industries, company sizes, or work arrangements, helping you better understand what you're looking for in a future role.

Tailor Every Application

One of the biggest mistakes applicants make is sending the same resume and cover letter to every employer.

Tailoring your application goes beyond changing the company name and job title. Carefully review the job description and identify the key skills, experiences, and qualifications the employer is seeking. Then, highlight the experiences that best demonstrate those requirements.

Many employers use Applicant Tracking Systems (ATS) to screen resumes before they reach a recruiter. These systems often search for specific keywords from the job description. Incorporating relevant terminology naturally throughout your resume can improve your chances of passing these initial screening stages.

Tailoring should also extend to written responses, cover letters, and interview preparation. Research the organisation's mission, values, culture, and recent initiatives. Demonstrating a genuine understanding of the company shows attention to detail and signals a stronger interest in the role.

Remember: submitting five high-quality, tailored applications is often more effective than sending fifty generic ones.

Utilise Every Job Search Resource Available

Don\u2019t limit yourself to online job hunting.

Take advantage of career fairs, university career services, student societies, alumni networks, industry events, and professional associations. Many opportunities are filled through referrals or networking before they are ever publicly advertised.

LinkedIn can be particularly powerful for connecting with recruiters and professionals in your field. Don't be afraid to send polite, professional messages introducing yourself or asking thoughtful questions. Many people are willing to help students who show genuine interest and initiative.

If you're searching online, maximise your reach by creating profiles across multiple platforms and enabling job alerts. This allows opportunities to come directly to you rather than requiring constant manual searching.

Rejection is Redirection

Finally, remember: job hunting can take time, and rejection (or being ghosted) is normal. Keep putting yourself out there, stay professional and positive, and treat each interaction as a chance to grow your network - even if it doesn\u2019t lead to a job immediately. Worst case scenario? You don\u2019t get that job and end up right where you started, which isn't so bad anyway. You\u2019ll just persevere and try again!

Job Sites and Opportunities to Aid your Search

Seek: A globally renowned online employment marketplace, connecting job seekers with recruiters

Prosple: A careers and education technology platform that connects students with internship, graduate, and job opportunities.

LinkedIn: An online professional networking platform designed to connect professionals and employers with each other.

Indeed: Provides people with various resources to search for, apply to, and compare job opportunities.

Work Integrated Learning (WIL): Courses that enable students to work directly with industry and community partners for credit towards their degree.

GradAustralia: A platform focused on graduate programs, internships, vacation programs, and career resources for Australian students.

' }, + 'behavioural': { title: 'Behavioural & Situational Interviews', body: '

Behavioural and Situational Interviews

After passing the initial screening of job applications, the next challenge you typically face is navigating the interviews. Behavioural interviews focus on how you've handled situations in the past, while situational interviews explore how you would handle hypothetical scenarios in the future. Both are designed to assess your soft skills, decision-making and alignment with company values.

Before the interview

Understand the role and company: read the job description carefully and research the company\u2019s values, projects and culture

Identify key competencies: common ones include teamwork, leadership, adaptability, communication and problem-solving

Prepare your STAR stores: think of 4-6 specific examples from work, university, volunteering or extracurricular activities that show relevant skills

Practice common questions:

Behavioural:

  • Tell me about a time you dealt with conflict on a team
  • Describe a time you missed a deadline

How would you respond if a client rejected your proposal?

Situational:

What would you do if a client kept changing their requirements at the last minute?

How would you handle a team member who is not meeting deadlines?

If you were assigned a project with limited instructions, how would you proceed?

Online interview tips

Test your tech early: ensure your camera, microphone and internet connection work well. Close unnecessary tabs and apps

Set up a clean and quiet space: choose a neutral background, good lighting and minimal distractions

Dress professionally

Look at the camera, not the screen

Uses notes sparingly: place bullet points near your screen, not full answers

During the interview

Take a breath before answering: don't rush. Pause briefly to gather your thoughts

Answer with STAR: stay structured and specific. Focus on your role in the outcome

Be honest: if you don't know something, say so. Focus on how you'd find a solution or learn

Ask thoughtful questions at the end, ie what does success look like in this role, how does the team support learning and growth

Common questions

\u201c Tell me about yourself\u201d

This is definitely the most asked question for any interview, and for a good reason too! This is the best question for you to really present yourself and for you to showcase just how amazing you are for the job! However, this does not mean that you just regurgitate your resume, as your interviewer already knows what\u2019s in it! Focus on relaying information that is highly relevant to the position you are applying for and a concise summary of your background (e.g. software engineering student at UNSW).

Mentioning relevant past experiences can also really set you apart from other candidates. candidates. Review the job description to identify required skills you possess, then share stories from your professional or volunteer background that demonstrate these skills. This can not only showcase your qualifications but also highlight your commitment to community involvement.

Showcasing your personality: Briefly mentioning hobbies that demonstrate intellectual growth and community involvement - like reading, music, sports and volunteering- can help break the ice. Sharing personal interests can also conclude your response on a positive note while maintaining professionalism.

The STAR Method

The STAR method is a great way to present your story. Here's how you would set it out:

  • Situation: Set the scene and mention the details of your story
  • Task: Highlight what responsibilities you had in this situation
  • Action: Explain what actions you took to address the situation
  • Result: Outline what outcomes your actions were able to achieve
  • \u201cAn interview is a conversation not a presentation\u201d

These are some small details that can leave a lasting impression and elevate your performance during the interview.

Flaunt your energy and enthusiasm

Listen actively and engage thoughtfully

Maintain your body language and eye contact

After the interview

Finally, make sure to thank the interviewer for giving this opportunity during the interview and even after as well through a follow-up thank you email. This will help maintain your professionalism throughout the interview process.

' }, + 'technical': { title: 'Technical Interviews', body: '

What Are Technical Interviews?

Technical interviews assess your expertise for roles that require hands-on technical skills. You\u2019ll solve programming questions (in code or pseudocode, usually in a language of your choice) while explaining your reasoning. Your solution should be time and space efficient, and the interviewer is watching how you think, not just the final answer.

Core Data Structures You Must Know:

  • Strcutures
  • Arrays
  • Link lists
  • Stacks Queues
  • Hash tables
  • Binary search trees
  • Key Algorithmic Classes
  • Graph Traversals \u2013 Depth First Search, Breadth First Search
  • Searching & Sorting \u2013 Merge sort, Quick sort, Binary search
  • Divide and Conquer \u2013 Binary search, Merge sort
  • Greedy Algorithms \u2013 Huffman coding, Activity selection
  • Dynamic Programming \u2013 Fibonacci sequence, Knapsack
  • Graph Algorithms \u2013 Dijkstra\u2019s shortest path, Bellman-Ford
  • Pattern Searching \u2013 Rabin-Karp, KMP
  • Live Coding Tips!

Repeat the problem back. Ask about edge cases: empty input? case sensitivity? large data? Confirm with examples.

Write clean code with good variable names.

Keep talking. For example \u201cNow I\u2019m initializing the counter\u2026\u201d

Test your code!

Before the interview begins, ensure you are using an IDE you are familiar with and your favourite programming language (obviously C!!!just kidding dont add this in lol)

' }, + 'assessment': { title: 'Assessment Centres', body: '

Assessment Centers: The One-Page Guide

What Is It?

Think of it as a group interview, but with plot twists. You\u2019re put into a room (physical or virtual) with other candidates and asked to solve a work-style problem together. It tests the stuff that\u2019s hard to see on paper: how you think, work in a team, and handle deadlines.

Employers are looking to see:

  • How you communicate and collaborate
  • How you solve problems under pressure
  • Whether you can lead and listen at the same time
  • How well you align with their company values

What Happens?

You\u2019ll be grouped with other candidates and handed a case study or hypothetical business scenario. You will work together to come up with a solution and present it to a panel. There will also be a individual interview later on during the day which you will be asked more behavioural questions.

Do\u2019s

Speak up. Share your ideas clearly, but be a team player and make space for others too.

Bring someone in: \u201cAlex, what do you think?\u201d, especially if someone is quiet in the group!

Move the group forward: \u201cWe have 5 minutes left. Did we want to move on plan the pitch?\u201d

Understand the company\u2019s values and the skills they\u2019re looking for. Use that to ignite the conversation and the way you speak.

Tips for the Whole Day

know the company\u2019s values and the skills they\u2019re looking for. Mirror that in how you act and speak.

Stay engaged. Nod, take notes, make eye contact. Show you\u2019re present, not just waiting for your turn to talk.

Speak in the first 90 seconds. Even one sentence: \u201cI think we should look\u2026..\u201d

HAVE FUN! This is a great opportunity to network and get to know each other and gain insight into what it is like to work for the industry.

Dont be scared to ask question, for example, \u201cWhat is the best way to contact your company after this interview if i have any final questions\u201d

' }, + 'aptitude': { title: 'Aptitude & Psychometric Tests', body: '

Job Searching: Aptitude & Psychometric Tests

Landing your dream role often involves more than a polished resume and a confident interview. Many employers, particularly large graduate programs and tech companies, incorporate aptitude and psychometric tests into their hiring process. Understanding what these assessments involve and how to prepare for them can give you a significant edge.

What is an Aptitude Test & Why are they so Popular?

Aptitude testing is a standardised method used to assess an individual's ability to perform in specific areas. Think of it as a diagnostic tool that companies use to see if you have the skills to excel in your field. Testing is role specific, a data scientist needs strong pattern recognition and statistical reasoning, whilst a mechanical engineer may need spatial visualisation skills. Aptitude tests identify these specific cognitive profiles, and because they minimise the chance of bias, they are an increasingly popular screening tool in early-stage recruitment.

Types of Aptitude Tests

Numerical Reasoning Tests: Determine your ability to work with numbers, interpret data sets and solve mathematical problems. Commonly used for finance, consulting and data-focused roles.

Spatial Reasoning Tests: Specific to engineering, architecture and design roles, anything involving 3D thinking or conceptualising how parts fit together.

Logical Reasoning Tests: Identify how well you can find patterns and finish sequences. A staple across almost every graduate program screening process.

Abstract Reasoning Tests: Measure your ability to deduce underlying rules and relationships in complex visual information, testing fluid intelligence rather than learned knowledge.

What is a Psychometric Test & Why are they so Popular?

Psychometric tests are designed to assess psychological attributes like cognitive abilities and behavioural tendencies. Whilst aptitude tests usually fall under psychometric testing, these go beyond just measuring your intelligence. They are so common in job applications because of their predictive validity, psychometric tests evaluate potential job performance in a standardised and quantifiable method. Most are presented online and in a timed format.

Types of Psychometric Tests

Cognitive Ability Tests: Measure your raw intelligence and processing speed under timed conditions.

Personality Assessments: Evaluate your behavioural tendencies and work style to determine cultural fit and how you might operate within a team.

Situational Judgement Tests: Present realistic workplace scenarios and ask how you would respond, giving employers insight into your values, priorities and professional judgement.

Tips for Success

Practice consistently: Online tests are incredibly useful in familiarising yourself with the type of content and format you will face. Platforms like Testpot, AssessmentDay and Practice Aptitude Tests offer free and paid resources.

Get comfortable with the interface: Familiarise yourself with digital tools beforehand, including calculator functions and any role-specific software that may be used during assessments.

Identify your weak spots: Use practice results to pinpoint where you lose the most time or accuracy, and focus your preparation on those areas.

Simulate real conditions: Practise under timed conditions in a quiet environment to replicate the pressure of the actual test. This builds both speed and composure.

Treat preparation like study: The more exposure you have to the question styles and logic patterns, the more automatic your reasoning becomes, and that is where your score improves most.

' }, + 'marketsizing': { title: 'Market Sizing', body: '

Job Searching: Market Sizing

Market sizing questions are a staple in interviews for consulting, strategy and product management roles. At first glance they can seem daunting, there's often no single "correct" number. But that's the point. These questions are designed to test your structured thinking, business judgment and ability to make logical, data-driven estimates.

Rather than focusing on the final answer, interviewers want to see how you break down the problem. Can you think clearly under pressure? Do you consider all the relevant factors? Can you communicate your assumptions and reasoning effectively?

To excel at market sizing, you'll draw on basic maths, general knowledge and common sense to estimate the size of a market in terms of volume or value.

Why Do Interviewers Ask Market Sizing Questions?

Market sizing questions reveal far more than numerical ability. Interviewers use them to assess your problem-solving approach, evaluate your business acumen and test your ability to think on your feet and communicate clearly. A well-structured, confidently reasoned estimate will always impress more than a lucky correct figure arrived at without explanation.

Key Concepts to Know

Before attempting market sizing questions, it helps to understand the three core market definitions you'll frequently encounter:

TAM (Total Addressable Market): The overall demand for a product or service, essentially the maximum possible market if there were no constraints.

SAM (Serviceable Addressable Market): The portion of TAM you can realistically serve based on constraints like geography, pricing and infrastructure.

SOM (Serviceable Obtainable Market): The realistic share of SAM you can actually capture, factoring in your capabilities, competitors and market saturation.

Common Market Sizing Questions

To give you a sense of what to expect, here are some examples you might encounter in a real interview:

How many t-shirts are sold in Sydney in a year? What is the market size for weddings in Australia? Estimate the annual revenue from coffee sales in Sydney caf\u00e9s.

These questions may feel broad, but they become entirely manageable once broken down into logical steps.

Tips to Tackle Market Sizing Questions

Ask Clarifying Questions: Market sizing prompts are intentionally vague. Don't hesitate to clarify assumptions, definitions or scope before diving in, interviewers expect and appreciate this.

Structure First, Calculate Later: Before touching any numbers, lay out your approach. Walk the interviewer through your thinking step by step. This demonstrates that you are methodical and organised rather than guessing.

Use Round Numbers: Easy-to-work-with figures keep your calculations clean and fast. Precision is less important than a logical, coherent chain of reasoning.

Think Out Loud: Treat the question like a collaborative exercise. Narrate your assumptions, flag where you are uncertain and explain why you are making each choice. Your thought process matters more than your final figure.

Practice With Real Examples: Like aptitude tests, market sizing is a skill that improves significantly with repetition. Run through practice questions using everyday scenarios like \u201chow many cups of coffee are sold in Australia each day?\u201d to build both speed and confidence in your framework.

' }, +}; + +export const JOBS_PLACEHOLDER: JobEntry[] = [ + { title:'Software Engineering Intern', company:'Atlassian', type:'internship', location:'Sydney, NSW', deadline:'15 Sep 2026', description:'Summer internship on a product engineering team, working across the stack with mentorship from senior engineers.', applyUrl:'#' }, + { title:'Graduate Software Engineer', company:'Canva', type:'grad', location:'Sydney, NSW', deadline:'30 Sep 2026', description:'2027 graduate program rotating across product teams, with structured onboarding and a dedicated mentor.', applyUrl:'#' }, + { title:'Data Analyst Intern', company:'Commonwealth Bank', type:'internship', location:'Sydney, NSW', deadline:'1 Oct 2026', description:'Work with the risk analytics team building dashboards and models that inform business decisions.', applyUrl:'#' }, + { title:'UX Design Graduate', company:'REA Group', type:'grad', location:'Melbourne, VIC', deadline:'12 Oct 2026', description:'Join the design team shaping property search experiences for millions of Australians.', applyUrl:'#' }, + { title:'Cyber Security Analyst', company:'Macquarie Group', type:'fulltime', location:'Sydney, NSW', deadline:'Rolling', description:'Monitor, investigate and respond to security incidents across Macquarie\'s global technology estate.', applyUrl:'#' }, + { title:'Product Management Intern', company:'Culture Amp', type:'internship', location:'Remote (AU)', deadline:'20 Sep 2026', description:'Support a product squad through discovery, roadmap planning, and shipping features end-to-end.', applyUrl:'#' }, + { title:'Cloud Engineer Graduate', company:'Telstra', type:'grad', location:'Melbourne, VIC', deadline:'5 Oct 2026', description:'Rotate through cloud infrastructure teams building and securing Telstra\'s next-gen network platforms.', applyUrl:'#' }, + { title:'Machine Learning Engineer', company:'Canva', type:'fulltime', location:'Sydney, NSW', deadline:'Rolling', description:'Build and ship ML-powered features used by hundreds of millions of people worldwide.', applyUrl:'#' }, +]; + +export const PATHWAYS: PathwayEntry[] = [ + { icon:'✦', title:'Resume & Cover Letter', body:'Tailor your resume for every role. Quantify your impact, highlight relevant projects, and keep it concise.', tip:'Use the STAR method for experience bullet points.' }, + { icon:'◈', title:'Network & Connect', body:'LinkedIn is your best friend. Attend WIT events, reach out to alumni, and build genuine connections early.', tip:'Personalise every connection request — generic ones get ignored.' }, + { icon:'◇', title:'Ace the Interview', body:'Research the company deeply, prepare 4–5 STAR stories, and practise out loud — not just in your head.', tip:'Ask your interviewer a thoughtful question at the end.' }, + { icon:'◉', title:'Find Opportunities', body:'Check GradConnection, LinkedIn, and our sponsor portals. Set up job alerts and apply early — roles close fast.', tip:'Internship applications open as early as March for summer roles.' }, +]; + +export const SAMPLE_RESOURCES: { category: string; title: string; description: string }[] = [ + { category:'Resume', title:'2026 Graduate Resume Template', description:'A clean, ATS-friendly template used across WIT resume workshops.' }, + { category:'Internships', title:'Summer Internship Timeline', description:'When to apply for every major internship program, month by month.' }, + { category:'Interviews', title:'Mock Interview Booking', description:'Book a 1:1 mock interview session with a WIT alum.' }, +]; From e7ba759b368a562fa0d5ff319776726b06fcf991 Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 18:43:31 +1000 Subject: [PATCH 16/21] Business Career Spotlight page added --- .../career-spotlight-pages/business.tsx | 269 ++++++++++++++++++ public/careers-hub/business_calloutbox.svg | 11 + public/careers-hub/consultancy.svg | 9 + public/careers-hub/financial_analyst.svg | 9 + public/careers-hub/project_manager.svg | 9 + spotlight-styles/business.module.css | 143 ++++++++++ 6 files changed, 450 insertions(+) create mode 100644 public/careers-hub/business_calloutbox.svg create mode 100644 public/careers-hub/consultancy.svg create mode 100644 public/careers-hub/financial_analyst.svg create mode 100644 public/careers-hub/project_manager.svg create mode 100644 spotlight-styles/business.module.css diff --git a/pages/careers-hub/career-spotlight-pages/business.tsx b/pages/careers-hub/career-spotlight-pages/business.tsx index e69de29..c7b2a3a 100644 --- a/pages/careers-hub/career-spotlight-pages/business.tsx +++ b/pages/careers-hub/career-spotlight-pages/business.tsx @@ -0,0 +1,269 @@ +import React from 'react'; +import Head from 'next/head'; +import styles from '../../../spotlight-styles/business.module.css'; +import CareersNav from '../../../components/CareersNav'; +import ScrollUpBtn from '../../../components/ScrollUpBtn'; + +const BusinessSpotlightPage = () => ( +
+ + Business | Career Spotlights | Careers Hub | UNSW WIT + + + + +
+ {/* ── Hero ───────────────────────────────────────────── */} +
+
+

Career Spotlight:

+

Business

+
+
+ {/* eslint-disable-next-line @next/next/no-img-element */} + +

+ A business is defined as a set of repeated and continuous activities carried out + for the purpose of making a profit. In 2026, profit is increasingly tied to solving + complex problems — from reducing carbon footprints to launching digital products + that change how we live. +

+
+
+ + {/* ── The Business Industry in 2026 ───────────────────── */} +
+
+

+ In 2026, the business industry remains the most diverse and adaptable sector for + career starters. Far from being just about "wearing a suit and crunching + numbers," modern business is a hybrid field combining data science, human + psychology, and strategic creativity. A business is defined as a set of repeated + and continuous activities carried out for the purpose of making a profit. However, + in today's market, profit is increasingly tied to solving complex problems + whether that means reducing carbon footprints, streamlining supply chains with AI, + or launching digital products that change how we live. +

+
+ +
+

The Big Picture in 2026

+
+ +
+
+

AI-Augmented Roles:

+

+ Every business role now requires "prompt literacy." Analysts and + managers use AI to model scenarios, draft reports, and optimise schedules, but + human judgment remains the final checkpoint. +

+
+
+

Agile Everywhere:

+

+ The project management mindset has leaked out of IT and into HR, marketing, and + finance. +

+
+
+

Consulting as a Mindset:

+

+ Employers don't just want problem-solvers; they want employees who can + advise internally—acting as consultants to their own teams. +

+
+
+
+ + {/* ── Financial Analyst ─────────────────────────────── */} +

Financial Analyst

+
+
+

+ You cannot make a business decision without data. The Financial Analyst is the + person who translates raw numbers into narratives. A financial analyst analyses + quantitative data—historical reports, accounting data, stock prices, market + research—to make investment recommendations, assess company performance, and + advise on strategies. You will find them in banking, insurance, real estate, and + tech. Three example roles within this track: +

+
+
+ {/* eslint-disable-next-line @next/next/no-img-element */} + +
+
+ +
+
+
+

Investment Analyst:

+

+ Examining potential stock/bond opportunities and making buy/sell recommendations. +

+
+
+

Corporate Finance Analyst:

+

+ Looking internally to guide budget decisions, M&A targets, or capital raises. +

+
+
+

Financial Planning Analyst (FP&A):

+

+ Iterating and implementing financial plans and budgets to predict future + performance. +

+
+
+
+

+ Financial risk analysts focus on identifying, analysing, and managing financial + risks within an organisation. They develop and propose strategies to mitigate risk + related to investment decisions or market fluctuations, as well as ensuring the + business's continued profitability - they play an important role in the + overall health of a business. +

+
+
+ + {/* ── Project Manager ──────────────────────────────── */} +
+
+ {/* eslint-disable-next-line @next/next/no-img-element */} + +
+
+

+ Project Manager +

+
+
+

+ Project management in business entails organising, planning, and carrying out + actions to accomplish a certain objective within a predetermined budget and + timetable, guaranteeing the delivery of a distinctive good, service, or outcome. +

+
+
+
+
+ + {/* ── Key Responsibilities of a Project Manager ───────── */} +
+
+

Key Responsibilities of a Project Manager

+

+ Lets say a project manager gets assigned with the task to implement a software + tool. The steps taken by the manager to complete the project include: +

+
+
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
+
+ + {/* ── Consultancy ──────────────────────────────────── */} +
+
+ {/* eslint-disable-next-line @next/next/no-img-element */} + +
+
+

Consultancy

+
+
+

+ Consulting involves providing expert guidance and advice to businesses to help + them solve problems, develop strategies, and achieve value proposition goals. + Consultants are hired when a company has a problem it cannot solve internally. +

+
+
+
+
+ +
+
+
+

+ A. Management Consulting +

+ +
+

+ Management consultants work with C-suite executives (CEOs, CFOs) to diagnose + business-wide problems. They improve performance, efficiency, and profitability. If + a retail chain is losing market share, management consultants look at the whole + picture: pricing, staffing, brand perception, and logistics. +

+
+
+
+

+ B. Specialised Consulting +

+ +
+

+ These professionals address specific areas like finance, technology, or operations. + Because they have in-depth knowledge, they offer tailored advice that generalists + can't. For example, they do financial, technical, HR and Legal/Marketing + Consulting. +

+
+
+ + {/* ── Consider a Career in Business if you Enjoy ──────── */} +
+

Consider a Career in Business if you Enjoy

+
+
+
+

Teamwork:

+

+ Working alongside a diverse group of people to develop strategies and solutions. +

+
+
+

Communication and People Skills:

+

+ Business and entrepreneurship give you opportunities to build strong communication + skills through activities like presenting, pitching ideas, negotiating deals, and + networking with professionals. +

+
+
+

Problem Solving and Strategy:

+

+ If you are a problem solver who excels at analysing data and identifying trends, + you will thrive in areas like strategy consultancy and trading - where critical + thinking and data-driven decisions drive business growth and success. +

+
+
+
+ + +
+); + +export default BusinessSpotlightPage; diff --git a/public/careers-hub/business_calloutbox.svg b/public/careers-hub/business_calloutbox.svg new file mode 100644 index 0000000..11fa044 --- /dev/null +++ b/public/careers-hub/business_calloutbox.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/careers-hub/consultancy.svg b/public/careers-hub/consultancy.svg new file mode 100644 index 0000000..612d9ce --- /dev/null +++ b/public/careers-hub/consultancy.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/careers-hub/financial_analyst.svg b/public/careers-hub/financial_analyst.svg new file mode 100644 index 0000000..178ed97 --- /dev/null +++ b/public/careers-hub/financial_analyst.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/careers-hub/project_manager.svg b/public/careers-hub/project_manager.svg new file mode 100644 index 0000000..6489eda --- /dev/null +++ b/public/careers-hub/project_manager.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/spotlight-styles/business.module.css b/spotlight-styles/business.module.css new file mode 100644 index 0000000..2dea596 --- /dev/null +++ b/spotlight-styles/business.module.css @@ -0,0 +1,143 @@ +/* Business career-spotlight page */ +.page{ + --navy:#1b1f3b; + --orange:#f0a03c; + --red:#cf4a4a; + --green:#3f8f52; + --pink:#f3d6e8; + --cream:#fbead2; + --bg:#f8dfb9; + --ink:#3a352c; + + /* is reused on this page */ + --black:#17140F; + --white:#FFFFFF; + --yellow:#FEB14B; + --yellow-dark:#E8992E; + --grey:#6E6A63; + --ink-soft:var(--grey); + --line:rgba(0,0,0,.08); + --card:var(--white); + --sans:'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; + + background:var(--bg); + font-family:var(--sans); + color:var(--ink); +} + +.wrap{ max-width:1080px; margin:0 auto; padding:48px 48px 88px; } + +/* ---------- Hero ---------- */ +.heroRow{ + display:grid; grid-template-columns:1fr 1.6fr; align-items:start; gap:32px; margin-bottom:20px; +} +@media (max-width:700px){ .heroRow{ grid-template-columns:1fr; } } + +.speechWrap{ position:relative; width:100%; } +.speechImg{ display:block; width:100%; height:auto; } +.bubbleText{ + position:absolute; left:27%; right:16%; top:29%; bottom:29%; display:flex; align-items:center; justify-content:center; + text-align:center; + font-family:var(--sans); font-size:15.5px; line-height:1.5; color:var(--navy); font-weight:600; margin:0; +} +@media (max-width:700px){ .bubbleText{ font-size:11px; left:26%; right:14%; } } + +.heroTitle{ text-align:left; align-self:center; } +.heroKicker{ font-family:var(--sans); font-size:21px; color:var(--black); margin:0 0 4px; font-weight:500; } +.heroHeading{ + font-family:'Labor Union', var(--sans); font-weight:400; font-size:clamp(44px,6vw,60px); color:var(--black); + margin:0; text-transform:none; +} + +/* ---------- Section headings ---------- */ +.sectionHeading{ + display:inline-block; font-family:var(--sans); font-weight:800; font-size:23px; + margin:0 0 28px; padding-bottom:10px; border-bottom:2px solid currentColor; text-transform:none; +} +.headingRed{ color:var(--red); position:relative; top:70px; } +.headingGreen{ color:var(--green); } + +/* ---------- The Business Industry in 2026 ---------- */ +.industryIntro{ display:flex; flex-direction:column; gap:20px; margin-bottom:0px; } +.industryIntro h3{ + margin-bottom:0; text-align:center; color:var(--black); +} + +/* ---------- Financial Analyst ---------- */ +.finRow{ display:grid; grid-template-columns:1.3fr 1fr; gap:40px; align-items:center; margin-bottom:32px; } +@media (max-width:760px){ .finRow{ grid-template-columns:1fr; } } +.finText p{ font-size:14px; line-height:1.85; color:var(--ink); margin:0; } +.illustrationBox{ + background:#f3d9b0; border-radius:18px; display:flex; align-items:center; justify-content:center; + aspect-ratio:4/3; font-size:64px; padding:24px; +} +.illustrationImg{ display:block; width:100%; height:100%; object-fit:contain; } + +.rolesRow{ display:grid; grid-template-columns:1.3fr 1fr; gap:32px; align-items:stretch; margin-bottom:64px; } +@media (max-width:760px){ .rolesRow{ grid-template-columns:1fr; } } +.roleBoxes{ display:flex; flex-direction:column; gap:16px; } +.roleBox{ border:2px dashed var(--red); border-radius:10px; padding:16px 20px; } +.roleBoxTitle{ color:var(--red); font-weight:800; font-size:14px; margin:0 0 4px; } +.roleBoxText{ font-size:13px; line-height:1.6; color:var(--ink); margin:0; } +.pinkCallout{ + background:var(--pink); border-radius:18px; padding:28px 26px; display:flex; align-items:center; +} +.pinkCallout p{ font-size:16px; font-weight:700; line-height:1.85; color:#3a2a3a; margin:0; } + +/* ---------- Project Manager ---------- */ +.pmRow{ display:grid; grid-template-columns:1fr 1.3fr; gap:40px; align-items:stretch; } +@media (max-width:760px){ .pmRow{ grid-template-columns:1fr; } } +.pmTextCol{ display:flex; flex-direction:column; height:100%; } +.pmTextBlobWrap{ flex:1; display:flex; align-items:center; } +.pmTextBlob{ background:var(--cream); border-radius:40px; padding:30px 34px; width:100%; } +.pmTextBlob p{ font-size:14px; line-height:1.85; color:var(--ink); margin:0 0 14px; } +.pmTextBlob p:last-child{ margin-bottom:0; } +.pmTextBlob .respHeading{ margin-top:0; } +.pmTextBold{ font-weight:700; font-size:16px; } + +/* ---------- Key Responsibilities of a Project Manager ---------- */ +.responsibilitiesRow{ + position:relative; display:grid; grid-template-columns:1fr 1fr; gap:40px; + margin-top:64px; margin-bottom:56px; +} +@media (max-width:760px){ .responsibilitiesRow{ grid-template-columns:1fr; } } +.responsibilitiesRow::before{ + content:''; position:absolute; left:50%; top:4px; bottom:4px; border-left:2px dashed var(--green); +} +@media (max-width:760px){ .responsibilitiesRow::before{ display:none; } } +.respHeading{ font-family:var(--sans); font-weight:800; font-size:19px; color:var(--green); margin:0 0 14px; text-transform:none; } +.respIntro{ font-size:13.5px; line-height:1.8; color:var(--ink); margin:0; } +.checklist{ display:flex; flex-direction:column; gap:16px; padding-left:8px; } +.checklistItem{ display:flex; align-items:flex-start; gap:10px; font-size:13.5px; line-height:1.7; color:var(--ink); margin:0; } +.checkbox{ flex-shrink:0; width:15px; height:15px; border:2px solid var(--green); border-radius:3px; margin-top:2px; } + +/* ---------- Consultancy ---------- */ +.consultRow{ display:grid; grid-template-columns:1fr 1.3fr; gap:36px; align-items:stretch; margin-bottom:32px; } +@media (max-width:760px){ .consultRow{ grid-template-columns:1fr; } } +.consultTextCol{ display:flex; flex-direction:column; gap:14px; align-items:center; text-align:center; height:100%; } +.consultHeadingLabel{ + display:block; width:100%; font-weight:800; font-size:22px; color:var(--red); margin:0; + padding-bottom:10px; border-bottom:2px solid currentColor; +} +.consultPillWrap{ flex:1; display:flex; align-items:center; justify-content:center; width:100%; } +.consultPill{ background:var(--pink); border-radius:40px; padding:22px 32px; } +.consultPill p{ margin:0; font-size:16px; font-weight:700; line-height:1.8; color:#3a2a3a; text-align:center; } + +.consultBoxesRow{ display:grid; grid-template-columns:1fr 1fr; gap:24px; margin-bottom:64px; } +@media (max-width:640px){ .consultBoxesRow{ grid-template-columns:1fr; } } +.consultBox{ border:2px solid var(--pink); background:#fff; border-radius:14px; padding:20px 22px; } +.consultBoxHead{ + display:flex; align-items:center; justify-content:space-between; gap:10px; + padding-bottom:12px; border-bottom:1px dashed var(--pink); margin-bottom:12px; +} +.consultBoxTitle{ display:flex; align-items:center; gap:8px; font-weight:800; font-size:15px; color:var(--red); margin:0; } +.consultBoxClose{ color:var(--pink); font-weight:700; font-size:16px; } +.consultBoxText{ font-size:13px; line-height:1.75; color:var(--ink); margin:0; } + +/* ---------- Consider a Career in Business ---------- */ +.considerHeadRow{ display:flex; align-items:center; gap:16px; justify-content:center; margin-bottom:20px; } +.considerHeading{ font-family:var(--sans); font-weight:800; font-size:20px; color:var(--black); margin:0; text-transform:none; } +.considerCard{ background:var(--cream); border-radius:24px; padding:40px 48px; display:flex; flex-direction:column; gap:28px; } +.considerItem{ text-align:center; } +.considerItemTitle{ font-weight:800; font-size:14.5px; color:var(--black); margin:0 0 8px; } +.considerItemText{ font-size:13.5px; line-height:1.8; color:var(--ink); margin:0 auto; max-width:640px; } From 456b34c2f888a10328b25c8c05a57da5367d74c5 Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 18:45:07 +1000 Subject: [PATCH 17/21] spotlight body format component --- components/SpotlightBody.tsx | 70 ++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 components/SpotlightBody.tsx diff --git a/components/SpotlightBody.tsx b/components/SpotlightBody.tsx new file mode 100644 index 0000000..a14a912 --- /dev/null +++ b/components/SpotlightBody.tsx @@ -0,0 +1,70 @@ +import React, { useEffect, useRef } from 'react'; +import styles from '../styles/CareersHub.module.css'; +import { SpotlightEntry } from '../lib/careersHubData'; + +interface SpotlightBodyProps { + entry: SpotlightEntry; + icon: string; +} + +// Reformats the flat h4/p/ul spotlight content into a magazine-style layout +function enhanceBody(container: HTMLDivElement) { + const children = Array.from(container.children); + let firstPFound = false; + let longPCount = 0; + children.forEach((el) => { + if (el.tagName === 'H4') { + el.classList.add(styles.mbDivider); + } else if (el.tagName === 'UL') { + el.classList.add(styles.mbDashgrid); + } else if (el.tagName === 'P' && !el.classList.contains(styles.src)) { + if (!firstPFound) { + el.classList.add(styles.mbQuote); + firstPFound = true; + } else if ((el.textContent || '').length > 200) { + longPCount++; + if (longPCount % 2 === 0) el.classList.add(styles.mbPanel); + } + } + }); + if (children.length && children[0].tagName === 'H4') { + children[0].classList.remove(styles.mbDivider); + } +} + +// Standalone-page version of the write-up styling that used to live inside +// +const SpotlightBody = ({ entry, icon }: SpotlightBodyProps) => { + const bodyRef = useRef(null); + + useEffect(() => { + if (bodyRef.current) enhanceBody(bodyRef.current); + }, [entry]); + + return ( +
+
+
+
{icon}
+
+

{entry.title}

+ {entry.stat && {entry.stat}} +
+
+
+
+ + + +
+ {/* Body content is pre-rendered HTML from the Careers Guide source docs */} +
+
+ ); +}; + +export default SpotlightBody; From ebda9b07227358a2efbd3e75192aba842ea467e6 Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 19:02:32 +1000 Subject: [PATCH 18/21] fixed linting --- components/CareerResourceCard.tsx | 10 +-- components/CareersHero.tsx | 2 +- components/CareersNav.tsx | 2 +- components/ContactForm.tsx | 2 +- components/JobCard.tsx | 2 +- components/NavigationBar.tsx | 2 +- components/PageBanner.tsx | 2 +- components/PathwayCard.tsx | 2 +- components/ToolkitAccordion.tsx | 62 +++++++++++++++++++ pages/careers-hub.tsx | 15 ++--- pages/careers-hub/sponsor-pages/domain.tsx | 6 -- .../careers-hub/sponsor-pages/jane-street.tsx | 3 + pages/careers-hub/sponsor-pages/pwc.tsx | 2 +- pages/careers-hub/sponsors.tsx | 9 +-- pages/join-us.tsx | 6 +- .../Domain_Logo_RGB_WHITE.svg | 1 - sponsor-styles/pwc.module.css | 1 + spotlight-styles/business.module.css | 7 +-- styles/BlogPost.module.css | 2 +- styles/CareersHub.module.css | 6 +- 20 files changed, 90 insertions(+), 54 deletions(-) create mode 100644 components/ToolkitAccordion.tsx delete mode 100644 sponsor-styles/logos/[DIAMOND] Domain Group/Domain_Logo_RGB_WHITE.svg diff --git a/components/CareerResourceCard.tsx b/components/CareerResourceCard.tsx index 93ba085..71b48ed 100644 --- a/components/CareerResourceCard.tsx +++ b/components/CareerResourceCard.tsx @@ -19,15 +19,7 @@ export default function CareerResourceCard({ resource, index }: any) { // eslint-disable-next-line @next/next/no-img-element {title} ) : ( -
- No image -
+
No image
)}
diff --git a/components/CareersHero.tsx b/components/CareersHero.tsx index 141ba1d..4281708 100644 --- a/components/CareersHero.tsx +++ b/components/CareersHero.tsx @@ -26,4 +26,4 @@ const CareersHero = () => ( ); -export default CareersHero; \ No newline at end of file +export default CareersHero; diff --git a/components/CareersNav.tsx b/components/CareersNav.tsx index b4eb797..cf512d6 100644 --- a/components/CareersNav.tsx +++ b/components/CareersNav.tsx @@ -51,4 +51,4 @@ const CareersNav = ({ active }: CareersNavProps) => { ); }; -export default CareersNav; \ No newline at end of file +export default CareersNav; diff --git a/components/ContactForm.tsx b/components/ContactForm.tsx index 56e6f5b..6c9c91b 100644 --- a/components/ContactForm.tsx +++ b/components/ContactForm.tsx @@ -28,7 +28,7 @@ const ContactForm = () => { 'Your inquiry was sent successfully. You can expect to hear a response from us within a week.' ); }, - (error) => { + () => { alert('Your inquiry failed to send. Please try again'); } ); diff --git a/components/JobCard.tsx b/components/JobCard.tsx index a99e3b5..2ceb83a 100644 --- a/components/JobCard.tsx +++ b/components/JobCard.tsx @@ -32,4 +32,4 @@ const JobCard = ({ job, stagger = 0 }: { job: JobEntry; stagger?: number }) => (
); -export default JobCard; \ No newline at end of file +export default JobCard; diff --git a/components/NavigationBar.tsx b/components/NavigationBar.tsx index 854d9d3..8559469 100644 --- a/components/NavigationBar.tsx +++ b/components/NavigationBar.tsx @@ -21,7 +21,7 @@ const NavigationBar = () => { const [clearNavBar, setClearNavBar] = useState(false); const [hiddenNavBar, setHiddenNavBar] = useState(false); const [compactNavBar, setCompactNavBar] = useState(false); - const [darkMode, setDarkMode] = useState(false); + const [, setDarkMode] = useState(false); const router = useRouter(); useEffect(() => { diff --git a/components/PageBanner.tsx b/components/PageBanner.tsx index 421e9f0..dde6d25 100644 --- a/components/PageBanner.tsx +++ b/components/PageBanner.tsx @@ -17,4 +17,4 @@ const PageBanner = ({ eyebrow, title, description }: PageBannerProps) => ( ); -export default PageBanner; \ No newline at end of file +export default PageBanner; diff --git a/components/PathwayCard.tsx b/components/PathwayCard.tsx index 72ca8ab..32c3d3f 100644 --- a/components/PathwayCard.tsx +++ b/components/PathwayCard.tsx @@ -15,4 +15,4 @@ const PathwayCard = ({ pathway, stagger = 0 }: { pathway: PathwayEntry; stagger?
); -export default PathwayCard; \ No newline at end of file +export default PathwayCard; diff --git a/components/ToolkitAccordion.tsx b/components/ToolkitAccordion.tsx new file mode 100644 index 0000000..c201b5e --- /dev/null +++ b/components/ToolkitAccordion.tsx @@ -0,0 +1,62 @@ +import React, { useRef, useState } from 'react'; +import styles from '../styles/CareersHub.module.css'; +import { SpotlightEntry } from '../lib/careersHubData'; + +const ToolkitItem = ({ + entry, + index, + isOpen, + onToggle, +}: { + entry: SpotlightEntry; + index: number; + isOpen: boolean; + onToggle: () => void; +}) => { + const panelRef = useRef(null); + const num = String(index + 1).padStart(2, '0'); + + return ( +
+ +
+
+
+
+ ); +}; + +// Accordion listing every Job Searching guide (resume, LinkedIn, interviews, +// aptitude tests, etc.) — only one panel open at a time. +const ToolkitAccordion = ({ entries }: { entries: Record }) => { + const [openKey, setOpenKey] = useState(null); + + return ( +
+ {Object.entries(entries).map(([key, entry], i) => ( + setOpenKey(openKey === key ? null : key)} + /> + ))} +
+ ); +}; + +export default ToolkitAccordion; diff --git a/pages/careers-hub.tsx b/pages/careers-hub.tsx index 6d249f1..35b5112 100644 --- a/pages/careers-hub.tsx +++ b/pages/careers-hub.tsx @@ -1,5 +1,5 @@ // @ts-nocheck comment -import React, { useEffect, useRef, useState } from 'react'; +import React, { useEffect, useRef } from 'react'; import styles from '../styles/CareersHub.module.css'; import ScrollUpBtn from '../components/ScrollUpBtn'; import CareersNav from '../components/CareersNav'; @@ -156,13 +156,7 @@ const CareersHub = ({ sponsors }: any) => { title={displayName} {...(isExternal ? { target: '_blank', rel: 'noopener noreferrer' } : {})} > - {displayName} + {displayName} ); })} @@ -172,8 +166,7 @@ const CareersHub = ({ sponsors }: any) => {
View all sponsors → @@ -198,4 +191,4 @@ export async function getStaticProps() { }; } -export default CareersHub; \ No newline at end of file +export default CareersHub; diff --git a/pages/careers-hub/sponsor-pages/domain.tsx b/pages/careers-hub/sponsor-pages/domain.tsx index a055303..722bf76 100644 --- a/pages/careers-hub/sponsor-pages/domain.tsx +++ b/pages/careers-hub/sponsor-pages/domain.tsx @@ -29,12 +29,6 @@ const DomainSponsorPage = () => (
Domain Group | Sponsors | Careers Hub | UNSW WIT - - - diff --git a/pages/careers-hub/sponsor-pages/jane-street.tsx b/pages/careers-hub/sponsor-pages/jane-street.tsx index 10236ee..b2745d4 100644 --- a/pages/careers-hub/sponsor-pages/jane-street.tsx +++ b/pages/careers-hub/sponsor-pages/jane-street.tsx @@ -1,6 +1,9 @@ import React from 'react'; import Head from 'next/head'; import styles from '../../../sponsor-styles/jane-street/jane-street.module.css'; +// Rendered via a plain rather than next/image — Next's built-in image +// optimizer blocks local SVG sources unless dangerouslyAllowSVG is enabled, +// and an SVG logo doesn't need raster optimization anyway. import janeStreetLogo from '../../../sponsor-styles/jane-street/Jane_Street_Logo_RGB_BLACK.svg'; import CareersNav from '../../../components/CareersNav'; import ScrollUpBtn from '../../../components/ScrollUpBtn'; diff --git a/pages/careers-hub/sponsor-pages/pwc.tsx b/pages/careers-hub/sponsor-pages/pwc.tsx index 9937b60..5f1165c 100644 --- a/pages/careers-hub/sponsor-pages/pwc.tsx +++ b/pages/careers-hub/sponsor-pages/pwc.tsx @@ -44,7 +44,7 @@ const PwcSponsorPage = ({ logoUrl }: { logoUrl: string | null }) => ( alt="PwC logo" width={260} height={110} - style={{ height: 'auto', objectFit: 'contain' }} + className={styles.logoImg} /> )}
diff --git a/pages/careers-hub/sponsors.tsx b/pages/careers-hub/sponsors.tsx index 8957371..c08ca04 100644 --- a/pages/careers-hub/sponsors.tsx +++ b/pages/careers-hub/sponsors.tsx @@ -74,13 +74,7 @@ const SponsorsPage = ({ sponsors }: any) => { const cardInner = ( <>
- {displayName} + {displayName}

{displayName}

{descText &&

{descText}

} @@ -122,7 +116,6 @@ const SponsorsPage = ({ sponsors }: any) => { alt={displayName} width={tier === 'affiliations' ? 165 : 140} height={tier === 'affiliations' ? 74 : 65} - style={{ objectFit: 'contain' }} className={styles.logoWallImg} /> ); diff --git a/pages/join-us.tsx b/pages/join-us.tsx index a1b2187..afeec58 100644 --- a/pages/join-us.tsx +++ b/pages/join-us.tsx @@ -2,18 +2,14 @@ import { useEffect, useState } from 'react'; import PageHeader from '../components/Header'; import styles from '../styles/JoinUs.module.css'; -import CircularProgress from '@material-ui/core/CircularProgress'; import NewsletterSection from '../components/NewsletterSection'; -import { BootstrapTooltip } from '../components/BootstrapTooltip'; import LoadingScreen from '../components/LoadingScreen'; -import { socials } from '../data/join'; import SimpleAccordion from '../components/JoinUsAccordion'; import PortfolioGrid from '../components/JoinUsGrid'; -import Image from 'next/image'; import Head from 'next/head'; const JoinUs = () => { - const [hideSpinner, setHideSpinner] = useState(false); + const [hideSpinner] = useState(false); const [openNewsletter, setOpenNewsletter] = useState(false); const [sourceLoading, setSourceLoading] = useState(true); const [headerLoading, setHeaderLoading] = useState(true); diff --git a/sponsor-styles/logos/[DIAMOND] Domain Group/Domain_Logo_RGB_WHITE.svg b/sponsor-styles/logos/[DIAMOND] Domain Group/Domain_Logo_RGB_WHITE.svg deleted file mode 100644 index a19f7b9..0000000 --- a/sponsor-styles/logos/[DIAMOND] Domain Group/Domain_Logo_RGB_WHITE.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/sponsor-styles/pwc.module.css b/sponsor-styles/pwc.module.css index 7edbd55..9fee36d 100644 --- a/sponsor-styles/pwc.module.css +++ b/sponsor-styles/pwc.module.css @@ -30,6 +30,7 @@ .about{ display:grid; grid-template-columns:280px 1fr; gap:40px; align-items:center; padding-bottom:40px; } @media (max-width:640px){ .about{ grid-template-columns:1fr; } } .logoMark{ display:flex; align-items:flex-start; } +.logoImg{ height:auto; object-fit:contain; } .aboutHeading{ font-size:22px; font-weight:800; margin:0 0 12px; color:var(--pwc-ink); } .aboutText{ font-size:14.5px; line-height:1.8; color:#4a3f39; margin:0; } diff --git a/spotlight-styles/business.module.css b/spotlight-styles/business.module.css index 2dea596..95c3266 100644 --- a/spotlight-styles/business.module.css +++ b/spotlight-styles/business.module.css @@ -33,14 +33,13 @@ } @media (max-width:700px){ .heroRow{ grid-template-columns:1fr; } } -.speechWrap{ position:relative; width:100%; } -.speechImg{ display:block; width:100%; height:auto; } +.speechWrap{ position:relative; width:100%; aspect-ratio:1989/894; container-type:inline-size; } +.speechImg{ position:absolute; inset:0; display:block; width:100%; height:100%; } .bubbleText{ position:absolute; left:27%; right:16%; top:29%; bottom:29%; display:flex; align-items:center; justify-content:center; text-align:center; - font-family:var(--sans); font-size:15.5px; line-height:1.5; color:var(--navy); font-weight:600; margin:0; + font-family:var(--sans); font-size:clamp(9px, 2.6cqw, 17px); line-height:1.4; color:var(--navy); font-weight:600; margin:0; } -@media (max-width:700px){ .bubbleText{ font-size:11px; left:26%; right:14%; } } .heroTitle{ text-align:left; align-self:center; } .heroKicker{ font-family:var(--sans); font-size:21px; color:var(--black); margin:0 0 4px; font-weight:500; } diff --git a/styles/BlogPost.module.css b/styles/BlogPost.module.css index 69245be..58afcf6 100644 --- a/styles/BlogPost.module.css +++ b/styles/BlogPost.module.css @@ -16,7 +16,7 @@ margin: auto; display: block; width: 50%; - height: 50%; + height: auto; } .coverImgContainer { diff --git a/styles/CareersHub.module.css b/styles/CareersHub.module.css index 88a47e2..f1d0414 100644 --- a/styles/CareersHub.module.css +++ b/styles/CareersHub.module.css @@ -90,6 +90,7 @@ .btnPrimary:hover{ background:var(--yellow); color:var(--black); } .btnGhost{ background:transparent; border-color:rgba(255,255,255,.7); color:#fff; } .btnGhost:hover{ border-color:var(--yellow); background:var(--yellow); color:var(--black); } +.btnDark{ background:var(--black); color:#fff; } /* ---------- Sections ---------- */ .section{ padding:76px 0; } @@ -270,6 +271,7 @@ .resourceTitle{ font-family:var(--serif); font-weight:500; font-size:16px; margin:0 0 8px; color:var(--ink); } .resourceDesc{ font-family:var(--sans); font-size:13px; line-height:1.7; color:var(--ink-soft); margin:0 0 14px; } .resourceCta{ font-family:var(--sans); font-size:11.5px; font-weight:700; letter-spacing:.03em; text-transform:uppercase; color:var(--yellow-dark); } +.resourceNoImage{ color:var(--light-grey); font-family:'Montserrat', sans-serif; font-size:10pt; } /* ---------- Sponsors ---------- */ .tierBlock{ margin-bottom:44px; } @@ -286,6 +288,7 @@ box-shadow:var(--shadow); overflow:hidden; transition:transform .18s ease, box-shadow .18s ease; } .featuredSponsorCard:hover{ transform:translateY(-3px); box-shadow:var(--shadow-hover); } +.featuredLogoWrap img{ object-fit:contain; } .featuredLogoWrap{ height:70px; display:flex; align-items:center; justify-content:center; margin-bottom:0; border-radius:var(--radius-sm); color:var(--yellow-dark); font-family:var(--sans); font-weight:700; font-size:12px; @@ -321,6 +324,7 @@ font-family:var(--sans); font-size:12px; font-weight:600; text-decoration:none; transition:border-color .2s ease, box-shadow .2s ease; } .logoWallItem:hover{ border-color:var(--yellow); box-shadow:0 4px 14px rgba(0,0,0,.07); } +.logoWallImg{ object-fit:contain; } /* ---------- Sponsor logo marquee (home page teaser) ---------- */ .sponsorMarquee{ @@ -341,7 +345,7 @@ flex:0 0 auto; display:flex; align-items:center; justify-content:center; height:60px; width:130px; } -.sponsorMarqueeItem img{ transition:transform .2s ease; } +.sponsorMarqueeItem img{ transition:transform .2s ease; object-fit:contain; } .sponsorMarqueeItem:hover img{ transform:scale(1.06); } .sponsorMarqueeCta{ text-align:center; margin-top:32px; } From b0899ce5c5258138a649e072a48290532588346a Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 19:25:41 +1000 Subject: [PATCH 19/21] updated colours --- sponsor-styles/domain/domain.module.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sponsor-styles/domain/domain.module.css b/sponsor-styles/domain/domain.module.css index bee99af..71f9c55 100644 --- a/sponsor-styles/domain/domain.module.css +++ b/sponsor-styles/domain/domain.module.css @@ -3,7 +3,7 @@ --dm-green:#0EA800; --dm-green-dark:#005837; --dm-cream:#f3ece1; - --dm-stripe:#e7ceb4; + --dm-stripe:#ffffff; --dm-pink:#f6d9cf; --dm-ink:#232019; From c19d9f77d7d81dd4b2654a28410785c43297cd1f Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 20:00:01 +1000 Subject: [PATCH 20/21] Pin @types/node to fix build failure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @types/node was unpinned in package.json and floated to whatever a transitive jest dependency resolved (26.2.0), which ships ffi.d.ts using syntax TypeScript 4.9.5 can't parse — breaking the production build. Pinning to 18.19.130 keeps the whole tree deduped to a TS-4.9-compatible version. --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 1336abd..0a04534 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "@testing-library/jest-dom": "^5.16.4", "@testing-library/react": "^13.3.0", "@types/aos": "^3.0.4", + "@types/node": "18.19.130", "@types/gtag.js": "^0.0.12", "@types/react-google-recaptcha": "^2.1.5", "eslint": "8.15.0", From f56a353fc9411f5681a8117dba67b158cd4de452 Mon Sep 17 00:00:00 2001 From: shenanikans Date: Sun, 16 Aug 2026 21:14:56 +1000 Subject: [PATCH 21/21] Railway build error fix --- .../career-spotlight-pages/data.tsx | 25 +++++++++++++++++++ .../career-spotlight-pages/engineering.tsx | 25 +++++++++++++++++++ .../career-spotlight-pages/product.tsx | 25 +++++++++++++++++++ 3 files changed, 75 insertions(+) diff --git a/pages/careers-hub/career-spotlight-pages/data.tsx b/pages/careers-hub/career-spotlight-pages/data.tsx index e69de29..22863d4 100644 --- a/pages/careers-hub/career-spotlight-pages/data.tsx +++ b/pages/careers-hub/career-spotlight-pages/data.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import Head from 'next/head'; +import styles from '../../../styles/CareersHub.module.css'; +import CareersNav from '../../../components/CareersNav'; +import PageBanner from '../../../components/PageBanner'; +import ScrollUpBtn from '../../../components/ScrollUpBtn'; + +const DataSpotlightPage = () => ( +
+ + Data | Career Spotlights | Careers Hub | UNSW WIT + + + + + + +
+); + +export default DataSpotlightPage; diff --git a/pages/careers-hub/career-spotlight-pages/engineering.tsx b/pages/careers-hub/career-spotlight-pages/engineering.tsx index e69de29..0fcaa02 100644 --- a/pages/careers-hub/career-spotlight-pages/engineering.tsx +++ b/pages/careers-hub/career-spotlight-pages/engineering.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import Head from 'next/head'; +import styles from '../../../styles/CareersHub.module.css'; +import CareersNav from '../../../components/CareersNav'; +import PageBanner from '../../../components/PageBanner'; +import ScrollUpBtn from '../../../components/ScrollUpBtn'; + +const EngineeringSpotlightPage = () => ( +
+ + Engineering | Career Spotlights | Careers Hub | UNSW WIT + + + + + + +
+); + +export default EngineeringSpotlightPage; diff --git a/pages/careers-hub/career-spotlight-pages/product.tsx b/pages/careers-hub/career-spotlight-pages/product.tsx index e69de29..1e58419 100644 --- a/pages/careers-hub/career-spotlight-pages/product.tsx +++ b/pages/careers-hub/career-spotlight-pages/product.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import Head from 'next/head'; +import styles from '../../../styles/CareersHub.module.css'; +import CareersNav from '../../../components/CareersNav'; +import PageBanner from '../../../components/PageBanner'; +import ScrollUpBtn from '../../../components/ScrollUpBtn'; + +const ProductSpotlightPage = () => ( +
+ + Product | Career Spotlights | Careers Hub | UNSW WIT + + + + + + +
+); + +export default ProductSpotlightPage;