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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 105 additions & 13 deletions src/pages/HomePage.css
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ body {
max-width: 1080px;
}

@supports (transform: scale(calc(100dvh / 620px))) {
@supports (transform: scale(calc(100dvh / 660px))) {
.frame-wrap {
--composition-scale: clamp(0.78, calc(100dvh / 620px), 1);
--composition-scale: clamp(0.76, calc(100dvh / 660px), 1);
}
}

Expand Down Expand Up @@ -83,13 +83,54 @@ body {
0 30px 80px rgba(0, 0, 0, 0.5);
}

.trust-badge {
#mlh-trust-badge {
display: block;
position: fixed;
top: 0;
right: 16px;
width: clamp(74px, 9vw, 108px);
height: auto;
z-index: 5;
right: 50px;
width: 10%;
min-width: 60px;
max-width: 100px;
transform-origin: top center;
transition: transform 0.18s ease, filter 0.18s ease;
z-index: 10000;
}
#mlh-trust-badge:hover,
#mlh-trust-badge:focus-visible {
filter: drop-shadow(0 0 8px rgba(76, 214, 230, 0.32));
outline: none;
transform: scale(1.04);
}
#mlh-trust-badge img {
display: block;
width: 100%;
}
#mlh-trust-badge .badge-layer {
pointer-events: none;
}
#mlh-trust-badge .badge-cyan,
#mlh-trust-badge .badge-pink {
position: absolute;
inset: 0;
}
#mlh-trust-badge .badge-cyan {
filter: brightness(0) saturate(100%) invert(79%) sepia(46%) saturate(1059%) hue-rotate(142deg) brightness(95%) contrast(90%);
opacity: 0.95;
transform: translate(-2px, -2px);
z-index: 1;
}
#mlh-trust-badge .badge-pink {
filter: brightness(0) saturate(100%) invert(33%) sepia(99%) saturate(2307%) hue-rotate(314deg) brightness(96%) contrast(92%);
opacity: 0.95;
transform: translate(2px, 2px);
z-index: 2;
}
#mlh-trust-badge .badge-white {
position: relative;
filter:
drop-shadow(0 0 4px rgba(244, 242, 255, 0.75))
drop-shadow(0 0 12px rgba(76, 214, 230, 0.35));
z-index: 3;
}

/* ---------- Top-right CTA ---------- */
Expand Down Expand Up @@ -158,6 +199,18 @@ body {
.terminal .key { color: var(--ink); }
.terminal .arrow { color: var(--cyan); }
.terminal .val { color: var(--ink); letter-spacing: 1px; }
.terminal .val a {
transition: color 0.18s ease, text-shadow 0.18s ease;
}
.terminal .val a:hover,
.terminal .val a:focus-visible {
color: var(--cyan);
text-shadow:
0 0 3px rgba(76, 214, 230, 0.72),
0 0 9px rgba(76, 214, 230, 0.45),
0 0 18px rgba(76, 214, 230, 0.28);
outline: none;
}

/* ---------- Title ---------- */
.title-wrap {
Expand Down Expand Up @@ -300,6 +353,47 @@ body {
opacity: 0.95;
}

/* ---------- Policy links ---------- */
.policy-links {
position: relative;
z-index: 6;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
gap: 0 12px;
font-family: 'VT323', 'Courier New', monospace;
font-size: var(--cta-font-size);
letter-spacing: 0.5px;
line-height: 1;
text-align: center;
color: #fff;
-webkit-text-fill-color: #fff;
text-shadow:
0 0 4px rgba(255, 255, 255, 0.95),
0 0 10px rgba(255, 255, 255, 0.65),
0 0 20px rgba(76, 214, 230, 0.45);
}
.policy-links a {
color: #fff;
-webkit-text-fill-color: #fff;
transition: color 0.18s ease, text-shadow 0.18s ease;
}
.policy-links a:hover,
.policy-links a:focus-visible {
color: var(--cyan);
-webkit-text-fill-color: var(--cyan);
text-shadow:
0 0 4px rgba(76, 214, 230, 1),
0 0 12px rgba(76, 214, 230, 0.85),
0 0 26px rgba(76, 214, 230, 0.55);
outline: none;
}
.policy-separator {
color: #fff;
-webkit-text-fill-color: #fff;
}

/* ---------- Footer chrome ---------- */
.corners::before,
.corners::after,
Expand All @@ -318,9 +412,9 @@ body {

@media (max-width: 720px) {
body { padding: clamp(8px, 2.5dvh, 16px) 16px; }
@supports (transform: scale(calc(100dvh / 600px))) {
@supports (transform: scale(calc(100dvh / 640px))) {
.frame-wrap {
--composition-scale: clamp(0.84, calc(100dvh / 600px), 1);
--composition-scale: clamp(0.82, calc(100dvh / 640px), 1);
}
}
.frame-stage {
Expand All @@ -336,16 +430,15 @@ body {
--twentyseven-offset: 72%;
}
.frame { padding: var(--frame-pad-top) 22px var(--frame-pad-bottom); }
.trust-badge { top: 0; right: 12px; width: clamp(58px, 12vw, 82px); }
.title-wrap { margin-left: -10px; }
.loader-bar { width: 72%; }
}

@media (max-width: 480px) {
body { padding: clamp(6px, 2dvh, 10px) 10px; }
@supports (transform: scale(calc(100dvh / 520px))) {
@supports (transform: scale(calc(100dvh / 560px))) {
.frame-wrap {
--composition-scale: clamp(0.88, calc(100dvh / 520px), 1);
--composition-scale: clamp(0.86, calc(100dvh / 560px), 1);
}
}
.frame-stage {
Expand All @@ -366,7 +459,6 @@ body {
--twentyseven-offset: 68%;
}
.frame { padding: var(--frame-pad-top) 16px var(--frame-pad-bottom); }
.trust-badge { top: 0; right: 8px; width: clamp(48px, 15vw, 64px); }
.title-wrap { margin-left: -4px; }
.loader-bar { width: 78%; }
}
56 changes: 50 additions & 6 deletions src/pages/HomePage.tsx
Original file line number Diff line number Diff line change
@@ -1,17 +1,41 @@
import './HomePage.css';

const mlhBadgeSrc =
'https://logged-assets.s3.amazonaws.com/trust-badge/2027/mlh-trust-badge-2027-white.svg';

const HomePage = () => {
return (
<div className="frame-wrap">
<img
className="trust-badge"
src="/trust-badge-blue.svg"
alt="MLH official member badge for the 2027 season"
/>
<a
id="mlh-trust-badge"
href="https://www.mlh.com"
target="_blank"
rel="noreferrer"
>
<img
className="badge-layer badge-cyan"
src={mlhBadgeSrc}
alt=""
aria-hidden="true"
/>
<img
className="badge-layer badge-pink"
src={mlhBadgeSrc}
alt=""
aria-hidden="true"
/>
<img
className="badge-layer badge-white"
src={mlhBadgeSrc}
alt="Major League Hacking 2026 Hackathon Season"
/>
</a>
<div className="frame-stage">
<a
className="cta"
href="https://docs.google.com/forms/d/e/1FAIpQLSeuOLkWGfGKpmq8u2F3OFrzJ9-8Bt_IRYMV-E9Hs8y1pIrK5w/viewform?usp=preview"
target="_blank"
rel="noreferrer"
>
Want to participate? Fill out the interest form.
</a>
Expand All @@ -25,7 +49,13 @@ const HomePage = () => {
<span className="key">location</span>{' '}
<span className="arrow">-&gt;</span>{' '}
<span className="val">
<a href="https://www.clemson.edu/">clemson university</a>
<a
href="https://www.clemson.edu/"
target="_blank"
rel="noreferrer"
>
clemson university
</a>
</span>
</div>
<div className="row">
Expand Down Expand Up @@ -77,6 +107,20 @@ const HomePage = () => {
<div className="loader-sub">see you soon</div>
</section>
</main>

<nav className="policy-links" aria-label="event policy and contact links">
<a
href="https://github.com/MLH/mlh-policies/blob/main/code-of-conduct.md"
target="_blank"
rel="noreferrer"
>
MLH Code of Conduct
</a>
<span className="policy-separator" aria-hidden="true">|</span>
<a href="mailto:cuhackers@clemson.edu" target="_blank" rel="noreferrer">
cuhackers@clemson.edu
</a>
</nav>
</div>
</div>
);
Expand Down
Loading