fix: match footer to design documents with typography and colors

This commit is contained in:
Christian Andolf
2025-05-27 13:12:01 +02:00
parent 32cc0cbe88
commit ade0279c8d
7 changed files with 100 additions and 138 deletions

View File

@@ -7,16 +7,12 @@
}
.mainNavigationItem {
padding: var(--Spacing-x3) 0;
padding: var(--Space-x3) 0;
border-bottom: 1px solid var(--Base-Border-Normal);
&:first-child {
padding-top: 0;
}
&:last-child {
border-bottom: 0;
}
}
.mainNavigationLink {

View File

@@ -1,9 +1,10 @@
"use client"
import { Typography } from "@scandic-hotels/design-system/Typography"
import Image from "@/components/Image"
import SkeletonShimmer from "@/components/SkeletonShimmer"
import Link from "@/components/TempDesignSystem/Link"
import Caption from "@/components/TempDesignSystem/Text/Caption"
import useLang from "@/hooks/useLang"
import { trackFooterClick, trackSocialMediaClick } from "@/utils/tracking"
@@ -20,58 +21,49 @@ export default function FooterSecondaryNav({
return (
<div className={styles.secondaryNavigation}>
{appDownloads && (
<nav className={styles.secondaryNavigationGroup}>
<Caption
color="textMediumContrast"
textTransform="uppercase"
type="label"
>
{appDownloads.title}
</Caption>
{appDownloads.links.length ? (
<ul className={styles.secondaryNavigationList}>
{appDownloads.links.map(
({ href, type }) =>
href && (
<li key={type} className={styles.appDownloadItem}>
<a
href={href.href}
target="_blank"
aria-label={href.title}
onClick={() => trackSocialMediaClick(href.title)}
>
<Image
src={
AppDownLoadLinks[
`${type}_${lang}` as keyof typeof AppDownLoadLinks
]
}
alt=""
width={125}
height={40}
/>
</a>
</li>
)
)}
</ul>
) : null}
</nav>
)}
<nav className={styles.secondaryNavigationGroup}>
<Typography variant="Title/Overline/sm">
<h3>{appDownloads.title}</h3>
</Typography>
{appDownloads.links.length ? (
<ul className={styles.secondaryNavigationList}>
{appDownloads.links.map(
({ href, type }) =>
href && (
<li key={type}>
<a
href={href.href}
target="_blank"
aria-label={href.title}
onClick={() => trackSocialMediaClick(href.title)}
>
<Image
src={
AppDownLoadLinks[
`${type}_${lang}` as keyof typeof AppDownLoadLinks
]
}
alt={href.title}
width={125}
height={40}
/>
</a>
</li>
)
)}
</ul>
) : null}
</nav>
{secondaryLinks.map((group) => (
<nav className={styles.secondaryNavigationGroup} key={group.title}>
<Caption
color="textMediumContrast"
textTransform="uppercase"
type="label"
>
{group.title}
</Caption>
{group?.links.length ? (
<Typography variant="Title/Overline/sm">
<h3>{group.title}</h3>
</Typography>
{group.links.length ? (
<ul className={styles.secondaryNavigationList}>
{group.links.map((link) => (
<li key={link.title} className={styles.secondaryNavigationItem}>
<li key={link.title}>
<Link
href={link.url}
target={link.openInNewTab ? "_blank" : undefined}
@@ -96,10 +88,10 @@ export function FooterSecondaryNavSkeleton() {
<nav className={styles.secondaryNavigationGroup}>
<SkeletonShimmer width="10ch" />
<ul className={styles.secondaryNavigationList}>
<li className={styles.appDownloadItem}>
<li>
<SkeletonShimmer width="16ch" />
</li>
<li className={styles.appDownloadItem}>
<li>
<SkeletonShimmer width="16ch" />
</li>
</ul>
@@ -107,7 +99,7 @@ export function FooterSecondaryNavSkeleton() {
<nav className={styles.secondaryNavigationGroup}>
<SkeletonShimmer width="20ch" />
<ul className={styles.secondaryNavigationList}>
<li className={styles.secondaryNavigationItem}>
<li>
<SkeletonShimmer width="25ch" />
</li>
</ul>
@@ -115,16 +107,16 @@ export function FooterSecondaryNavSkeleton() {
<nav className={styles.secondaryNavigationGroup}>
<SkeletonShimmer width="15ch" />
<ul className={styles.secondaryNavigationList}>
<li className={styles.secondaryNavigationItem}>
<li>
<SkeletonShimmer width="30ch" />
</li>
<li className={styles.secondaryNavigationItem}>
<li>
<SkeletonShimmer width="36ch" />
</li>
<li className={styles.secondaryNavigationItem}>
<li>
<SkeletonShimmer width="12ch" />
</li>
<li className={styles.secondaryNavigationItem}>
<li>
<SkeletonShimmer width="20ch" />
</li>
</ul>

View File

@@ -1,35 +1,21 @@
.secondaryNavigation {
display: flex;
flex-direction: column-reverse;
gap: var(--Spacing-x6);
gap: var(--Space-x6);
}
.secondaryNavigationList {
display: flex;
flex-direction: column;
list-style: none;
gap: var(--Spacing-x3);
gap: var(--Space-x2);
}
.secondaryNavigationGroup {
display: flex;
flex-direction: column;
gap: var(--Spacing-x3);
}
.secondaryNavigationGroupTitle {
color: var(--Base-Text-Medium-contrast);
font-weight: var(--typography-Body-Bold-fontWeight);
font-family: var(--typography-Body-Bold-fontFamily);
margin: 0;
}
.secondaryNavigationLink {
color: var(--Base-Text-High-contrast);
font-weight: var(--typography-Body-Bold-fontWeight);
font-family: var(--typography-Body-Bold-fontFamily);
margin: 0;
text-decoration: none;
gap: var(--Space-x3);
color: var(--Primary-Dim-On-Surface-Accent);
}
@media screen and (min-width: 768px) {

View File

@@ -12,7 +12,7 @@ export default async function FooterNavigation() {
}
return (
<section className={styles.section}>
<div className={styles.section}>
<div className={styles.maxWidth}>
<FooterMainNav mainLinks={footer.mainLinks} />
<FooterSecondaryNav
@@ -20,17 +20,17 @@ export default async function FooterNavigation() {
appDownloads={footer.appDownloads}
/>
</div>
</section>
</div>
)
}
export function FooterNavigationSkeleton() {
return (
<section className={styles.section}>
<div className={styles.section}>
<div className={styles.maxWidth}>
<FooterMainNavSkeleton />
<FooterSecondaryNavSkeleton />
</div>
</section>
</div>
)
}

View File

@@ -1,28 +1,28 @@
.section {
background: var(--Base-Surface-Subtle-Normal);
padding: var(--Spacing-x7) 0;
padding: var(--Space-x7) 0;
}
.maxWidth {
display: grid;
gap: var(--Spacing-x6);
gap: var(--Space-x6);
margin: 0 auto;
max-width: var(--max-width-page);
}
@media screen and (min-width: 768px) {
.section {
padding: var(--Spacing-x9) 0;
padding: var(--Space-x8) 0;
}
.maxWidth {
gap: var(--Spacing-x4);
gap: var(--Space-x4);
}
}
@media screen and (min-width: 1367px) {
.maxWidth {
gap: var(--Spacing-x2);
gap: var(--Space-x2);
grid-template-columns: 1fr 1fr;
}
}