Repository: wellcomecollection/wellcomecollection.org
Pull request #11699: A11y footer
Author: login: davidpmccormick
Created: 2025-03-17T12:34:24Z | Merged: 2025-03-19T11:53:18Z

For #11682 

**TODO**
- [x] switch out placeholder icon

## What does this change?

Adds a list of accessibility information into the footer.

To make it easier to toggle, I duplicated the Footer index.tsx and created FooterWithA11y.tsx so might make sense to diff those two files locally to see the changes

<img width="1131" alt="image" src="https://github.com/user-attachments/assets/eac47834-9891-4059-a2c1-6120ce4772bf" />


## How to test

- Turn on the `exhibitionAccessContent` toggle
- Check the access information appears in the footer
- Check that assistive tech only reads out the text (not the icons)

## How can we measure success?
Access information is more readily available

## Have we considered potential risks?
n/a


Diff:
diff --git a/common/views/components/FindUs/FindUs.tsx b/common/views/components/FindUs/FindUs.tsx
index 820691953a..8c43af91c4 100644
--- a/common/views/components/FindUs/FindUs.tsx
+++ b/common/views/components/FindUs/FindUs.tsx
@@ -26,7 +26,11 @@ const PlainLink = styled.a`
   }
 `;
 
-const FindUs: FunctionComponent = () => (
+type Props = {
+  hideAccessibility?: boolean; // In the footer accessibility has its own column
+};
+
+const FindUs: FunctionComponent<Props> = ({ hideAccessibility }) => (
   <>
     <Space $v={{ size: 'm', properties: ['margin-bottom'] }} as="p">
       <PlainLink href={wellcomeCollectionAddress.addressMap}>
@@ -54,12 +58,14 @@ const FindUs: FunctionComponent = () => (
       <Space as="li" $v={{ size: 's', properties: ['padding-bottom'] }}>
         <a href={`/visit-us/${prismicPageIds.gettingHere}`}>Getting here</a>
       </Space>
-      <Space
-        as="li"
-        $v={{ size: 's', properties: ['padding-top', 'padding-bottom'] }}
-      >
-        <a href={`/visit-us/${prismicPageIds.access}`}>Accessibility</a>
-      </Space>
+      {!hideAccessibility && (
+        <Space
+          as="li"
+          $v={{ size: 's', properties: ['padding-top', 'padding-bottom'] }}
+        >
+          <a href={`/visit-us/${prismicPageIds.access}`}>Accessibility</a>
+        </Space>
+      )}
     </PlainList>
   </>
 );
diff --git a/common/views/components/Footer/Footer.A11y.tsx b/common/views/components/Footer/Footer.A11y.tsx
new file mode 100644
index 0000000000..cd850e1e4f
--- /dev/null
+++ b/common/views/components/Footer/Footer.A11y.tsx
@@ -0,0 +1,101 @@
+import { FunctionComponent } from 'react';
+import styled from 'styled-components';
+
+import {
+  accessibleSquare,
+  audioDescribedSquare,
+  bslSquare,
+  closedCaptioningSquare,
+  inductionLoopSquare,
+} from '@weco/common/icons';
+import Icon from '@weco/common/views/components/Icon/Icon';
+import PlainList from '@weco/common/views/components/styled/PlainList';
+import Space from '@weco/common/views/components/styled/Space';
+
+const Li = styled(Space).attrs({
+  as: 'li',
+  $v: { size: 'xs', properties: ['margin-bottom'] },
+})`
+  display: flex;
+  gap: 0.5em;
+  align-items: center;
+`;
+
+const IconWrap = styled(Space).attrs({
+  $h: {
+    size: 'xs',
+    properties: ['padding-left', 'padding-right'],
+  },
+  $v: { size: 'xs', properties: ['padding-top', 'padding-bottom'] },
+})`
+  display: flex;
+  border-radius: 6px;
+
+  .icon {
+    width: 32px;
+    height: 32px;
+    color: ${props => props.theme.color('white')};
+  }
+`;
+
+const FooterA11y: FunctionComponent = () => {
+  return (
+    <div>
+      <Space
+        style={{ font: 'unset' }}
+        $v={{ size: 's', properties: ['margin-bottom'] }}
+        as="h4"
+      >
+        Our building has:
+      </Space>
+      <PlainList>
+        <Li>
+          <IconWrap>
+            <Icon icon={accessibleSquare} />
+          </IconWrap>
+          <span>Step free access</span>
+        </Li>
+        <Li>
+          <IconWrap>
+            <Icon icon={inductionLoopSquare} />
+          </IconWrap>
+          <span>Hearing loops</span>
+        </Li>
+      </PlainList>
+      <Space $v={{ size: 'm', properties: ['margin-top'] }}>
+        <Space
+          style={{ font: 'unset' }}
+          $v={{ size: 's', properties: ['margin-bottom'] }}
+          as="h4"
+        >
+          Our exhibitions and events include:
+        </Space>
+      </Space>
+      <PlainList>
+        <Li>
+          <IconWrap>
+            <Icon icon={bslSquare} />
+          </IconWrap>
+          <span>British Sign Language</span>
+        </Li>
+        <Li>
+          <IconWrap>
+            <Icon icon={audioDescribedSquare} />
+          </IconWrap>
+          <span>Audio description</span>
+        </Li>
+        <Li>
+          <IconWrap>
+            <Icon icon={closedCaptioningSquare} />
+          </IconWrap>
+          <span>Captions</span>
+        </Li>
+      </PlainList>
+      <Space as="p" $v={{ size: 'm', properties: ['margin-top'] }}>
+        <a href="/visit-us/accessibility">Accessibility</a>
+      </Space>
+    </div>
+  );
+};
+
+export default FooterA11y;
diff --git a/common/views/components/Footer/Footer.Nav.tsx b/common/views/components/Footer/Footer.Nav.tsx
index b2469bbde3..cf7e5795e2 100644
--- a/common/views/components/Footer/Footer.Nav.tsx
+++ b/common/views/components/Footer/Footer.Nav.tsx
@@ -7,7 +7,10 @@ import { font } from '@weco/common/utils/classnames';
 import { links, NavLink } from '@weco/common/views/components/Header/Header';
 import Space from '@weco/common/views/components/styled/Space';
 
-const NavList = styled.ul<{ $isInline?: boolean }>`
+const NavList = styled.ul<{
+  $isInline?: boolean;
+  $exhibitionAccessContent?: boolean;
+}>`
   list-style-type: none;
   display: inline-block;
   padding: 0;
@@ -20,16 +23,27 @@ const NavList = styled.ul<{ $isInline?: boolean }>`
   ${props =>
     props.$isInline &&
     `
-      display: flex;
-      flex-direction: column;
 
-      ${props.theme.media('large')(`
-        flex-direction: row;
+    ${
+      props.$exhibitionAccessContent
+        ? `
+      li {
+        display: inline-block;
+      }
+    `
+        : `
+    display: flex;
+    flex-direction: column;
 
-        li:first-child a {
-          padding-top: 8px;
-        }
-      `)}
+    ${props.theme.media('large')(`
+      flex-direction: row;
+
+      li:first-child a {
+        padding-top: 8px;
+      }
+    `)}
+    `
+    }
 
       li {
         margin-right: 1.1rem;
@@ -94,17 +108,23 @@ const FooterNav = ({
   type,
   ariaLabel,
   isInline,
+  exhibitionAccessContent,
 }: {
   type: 'InternalNavigation' | 'PoliciesNavigation';
   ariaLabel: string;
   isInline?: boolean;
+  exhibitionAccessContent?: boolean;
 }): ReactElement => {
   const itemsList =
     type === 'PoliciesNavigation' ? PoliciesNavigation : InternalNavigation;
 
   return (
-    <nav aria-label={ariaLabel}>
-      <NavList aria-label="Footer navigation" $isInline={isInline}>
+    <nav style={{ display: 'flex' }} aria-label={ariaLabel}>
+      <NavList
+        aria-label="Footer navigation"
+        $isInline={isInline}
+        $exhibitionAccessContent={exhibitionAccessContent}
+      >
         {itemsList.map((link, i) => {
           // ID for Javascript-less users who tried to click on the Burger menu and will get redirected here
           const isBurgerMenuLink = type === 'InternalNavigation' && i === 0;
diff --git a/common/views/components/Footer/Footer.Social.tsx b/common/views/components/Footer/Footer.Social.tsx
index 55bc6cdf9e..1ab045f619 100644
--- a/common/views/components/Footer/Footer.Social.tsx
+++ b/common/views/components/Footer/Footer.Social.tsx
@@ -10,12 +10,13 @@ import {
   twitter,
   youtube,
 } from '@weco/common/icons';
+import { useToggles } from '@weco/common/server-data/Context';
 import Icon from '@weco/common/views/components/Icon/Icon';
 import Space from '@weco/common/views/components/styled/Space';
 
 const Cell = styled(Space).attrs({
   $h: { size: 'm', properties: ['margin-right'] },
-})`
+})<{ $exhibitionAccessContent?: boolean }>`
   background-color: ${props => props.theme.color('neutral.200')};
   color: ${props => props.theme.color('black')};
   border-radius: 50%;
@@ -26,6 +27,15 @@ const Cell = styled(Space).attrs({
     color: ${props => props.theme.color('neutral.200')};
     background-color: ${props => props.theme.color('black')};
   }
+
+  ${props =>
+    props.$exhibitionAccessContent &&
+    props.theme.mediaBetween(
+      'small',
+      'large'
+    )(`
+    margin-right: 0;
+  `)}
 `;
 
 const Link = styled(Space).attrs({
@@ -81,17 +91,23 @@ const items: SocialItem[] = [
   },
 ];
 
-const FooterSocial: FunctionComponent = () => (
-  <>
-    {items.map(item => (
-      <Cell key={item.title}>
-        <Link href={item.url}>
-          <Icon icon={item.icon} />
-          <span className="visually-hidden">{item.service}</span>
-        </Link>
-      </Cell>
-    ))}
-  </>
-);
+const FooterSocial: FunctionComponent = () => {
+  const { exhibitionAccessContent } = useToggles();
+  return (
+    <>
+      {items.map(item => (
+        <Cell
+          $exhibitionAccessContent={exhibitionAccessContent}
+          key={item.title}
+        >
+          <Link href={item.url}>
+            <Icon icon={item.icon} />
+            <span className="visually-hidden">{item.service}</span>
+          </Link>
+        </Cell>
+      ))}
+    </>
+  );
+};
 
 export default FooterSocial;
diff --git a/common/views/components/Footer/FooterWithA11y.tsx b/common/views/components/Footer/FooterWithA11y.tsx
new file mode 100644
index 0000000000..dc2bfb104d
--- /dev/null
+++ b/common/views/components/Footer/FooterWithA11y.tsx
@@ -0,0 +1,280 @@
+import { FunctionComponent, useRef } from 'react';
+import styled from 'styled-components';
+
+import { prismicPageIds } from '@weco/common/data/hardcoded-ids';
+import { Venue } from '@weco/common/model/opening-hours';
+import { font } from '@weco/common/utils/classnames';
+import Divider from '@weco/common/views/components/Divider/Divider';
+import FindUs from '@weco/common/views/components/FindUs/FindUs';
+import OpeningTimes from '@weco/common/views/components/OpeningTimes/OpeningTimes';
+import { Container } from '@weco/common/views/components/styled/Container';
+import Space from '@weco/common/views/components/styled/Space';
+
+import FooterA11y from './Footer.A11y';
+import FooterNav from './Footer.Nav';
+import FooterSocial from './Footer.Social';
+import FooterWellcomeLogo from './Footer.WellcomeLogo';
+
+type Props = {
+  venues: Venue[];
+};
+
+// Styles
+const Wrapper = styled(Space).attrs({
+  as: 'footer',
+  className: `${font('intr', 5)} is-hidden-print`,
+  $v: { size: 'xl', properties: ['padding-top'] },
+})`
+  position: relative;
+  background-color: ${props => props.theme.color('black')};
+  color: ${props => props.theme.color('white')};
+`;
+
+const FooterBasicSection = styled(Space).attrs({
+  $v: { size: 'l', properties: ['padding-bottom'] },
+})``;
+
+/** ************************ */
+// START OF FOOTER BODY STYLES
+/** ************************ */
+
+const FooterNavigationContainer = styled(FooterBasicSection)`
+  display: grid;
+  grid-gap: 2rem;
+
+  ${props => props.theme.media('medium')`
+    grid-template-columns: repeat(2, 1fr);
+    grid-gap: 4rem;
+  `}
+
+  ${props => props.theme.media('xlarge')`
+    grid-template-columns: repeat(4, 1fr);
+    grid-gap: 2rem;
+
+  `}
+`;
+
+const PoliciesAndSocials = styled(FooterBasicSection)`
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+
+  ${props =>
+    props.theme.mediaBetween(
+      'medium',
+      'large'
+    )(`
+    display: grid;
+    grid-gap: 4rem;
+    grid-template-columns: 1fr 1fr;
+  `)}
+`;
+
+const FindUsContainer = styled(Space).attrs({
+  $v: { size: 'l', properties: ['padding-bottom'] },
+})`
+  flex: 1 1 100%;
+
+  ${props => props.theme.media('medium')`
+      flex: 1 1 50%;
+      `}
+
+  ${props => props.theme.media('large')`
+      flex: 1 1 20%;
+      margin-right: 2rem;
+    `}
+`;
+
+const OpeningTimesContainer = styled(FooterBasicSection)`
+  flex: 1 1 100%;
+
+  ${props => props.theme.media('medium')`
+    flex: 1 1 50%;
+    `}
+
+  ${props => props.theme.media('large')`
+    flex: 1 1 30%;
+    margin-right: 2rem;
+  `}
+`;
+
+const InternalNavigationContainer = styled(FooterBasicSection)`
+  flex: 1 1 50%;
+
+  ${props => props.theme.media('medium')`
+    flex: 1 1 30%;
+`}
+`;
+
+const FullWidthDivider = styled(Space).attrs({
+  className: 'is-hidden-s is-hidden-m',
+})`
+  flex: 1 1 100%;
+`;
+
+const PoliciesContainer = styled(Space)`
+  flex: 1 1 50%;
+
+  ${props => props.theme.media('medium')`
+    display: flex;
+    justify-content: space-between;
+    flex-wrap: wrap;
+    flex: 1 1 30%;
+  `}
+
+  ${props => props.theme.media('large')`
+    margin-top: 1rem;
+    `}
+`;
+
+const SocialsContainer = styled(Space)`
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+  align-items: center;
+  align-self: flex-start;
+  flex: 1 1 100%;
+  margin: 1rem 0;
+
+  ${props => props.theme.media('medium')`
+    flex: 0 1 auto;
+    margin: 0;
+    `}
+
+  ${props => props.theme.media('large')`
+    flex: 0 1 100%;
+    justify-content: flex-end;
+    margin-top: 1rem;
+    `}
+
+  ${props => props.theme.media('xlarge')`
+    flex: 0 1 auto;
+    justify-content: space-between;
+    `}
+`;
+/** ********************** */
+// END OF FOOTER BODY STYLES
+/** ********************** */
+
+const FooterBottom = styled(Space).attrs({
+  $v: { size: 'xl', properties: ['padding-bottom'] },
+})`
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+`;
+
+const FooterLicense = styled.p.attrs({ className: font('intr', 6) })`
+  display: inline;
+  margin: 0 1rem 1rem 0;
+`;
+
+const BackToTopButton = styled.button.attrs({
+  className: 'is-hidden-s',
+})`
+  text-decoration: underline;
+  color: ${props => props.theme.color('white')};
+  padding: 0;
+  cursor: pointer;
+  margin-bottom: 1rem;
+
+  &:hover {
+    text-decoration: none;
+  }
+`;
+
+// Component
+const Footer: FunctionComponent<Props> = ({ venues }: Props) => {
+  const footer = useRef<HTMLDivElement>(null);
+
+  const hasVenuesInfo = Array.isArray(venues) && venues.length > 0;
+
+  return (
+    <Wrapper ref={footer}>
+      <Container>
+        <FooterBasicSection as="h3">
+          <FooterWellcomeLogo />
+        </FooterBasicSection>
+
+        <FooterNavigationContainer>
+          <FindUsContainer>
+            <FindUs hideAccessibility={true} />
+          </FindUsContainer>
+
+          <OpeningTimesContainer>
+            {/* Error pages do not receive serverData so should only display
+            openingtimes link */}
+            {hasVenuesInfo && (
+              <>
+                <h4 className={font('intb', 5)}>Today&rsquo;s opening times</h4>
+                <OpeningTimes venues={venues} />
+              </>
+            )}
+            <Space
+              as="p"
+              $v={{
+                size: 'm',
+                properties: [hasVenuesInfo ? 'margin-top' : 'margin-bottom'],
+              }}
+            >
+              <a href={`/visit-us/${prismicPageIds.openingTimes}`}>
+                Opening times
+              </a>
+            </Space>
+          </OpeningTimesContainer>
+
+          <FooterA11y />
+
+          <InternalNavigationContainer>
+            <FooterNav
+              type="InternalNavigation"
+              ariaLabel="Useful internal links"
+            />
+          </InternalNavigationContainer>
+        </FooterNavigationContainer>
+
+        <PoliciesAndSocials>
+          <FullWidthDivider>
+            <Divider lineColor="neutral.700" />
+          </FullWidthDivider>
+
+          <PoliciesContainer>
+            <FooterNav
+              isInline
+              exhibitionAccessContent={true}
+              type="PoliciesNavigation"
+              ariaLabel="Policies navigation"
+            />
+          </PoliciesContainer>
+
+          <SocialsContainer>
+            <FooterSocial />
+          </SocialsContainer>
+        </PoliciesAndSocials>
+
+        <FooterBottom>
+          <FooterLicense>
+            Except where otherwise noted, content on this site is licensed under
+            a{' '}
+            <a href="https://creativecommons.org/licenses/by/4.0/">
+              Creative Commons Attribution 4.0 International Licence
+            </a>
+          </FooterLicense>
+
+          <BackToTopButton
+            onClick={() => {
+              window.scrollTo({
+                top: 0,
+                behavior: 'smooth',
+              });
+            }}
+          >
+            Back to top
+          </BackToTopButton>
+        </FooterBottom>
+      </Container>
+    </Wrapper>
+  );
+};
+
+export default Footer;
diff --git a/common/views/components/PageLayout/PageLayout.tsx b/common/views/components/PageLayout/PageLayout.tsx
index f1c311629a..63141ed46e 100644
--- a/common/views/components/PageLayout/PageLayout.tsx
+++ b/common/views/components/PageLayout/PageLayout.tsx
@@ -25,6 +25,7 @@ import ApiToolbar, {
 } from '@weco/common/views/components/ApiToolbar';
 import { AppContext } from '@weco/common/views/components/AppContext/AppContext';
 import Footer from '@weco/common/views/components/Footer';
+import FooterWithA11y from '@weco/common/views/components/Footer/FooterWithA11y';
 import GlobalInfoBarContext, {
   GlobalInfoBarContextProvider,
 } from '@weco/common/views/components/GlobalInfoBarContext/GlobalInfoBarContext';
@@ -84,7 +85,7 @@ const PageLayoutComponent: FunctionComponent<Props> = ({
   apiToolbarLinks = [],
   skipToContentLinks = [],
 }) => {
-  const { apiToolbar, issuesBanner } = useToggles();
+  const { apiToolbar, issuesBanner, exhibitionAccessContent } = useToggles();
   const urlString = convertUrlToString(url);
   const fullTitle =
     title !== ''
@@ -348,7 +349,12 @@ const PageLayoutComponent: FunctionComponent<Props> = ({
         {/* The no javascript version of the burger menu relies on the footer being present on the page,
         as we then use an anchor link to take people to the navigation links in the footer.
         We only completely remove the footer if you've got JS. If we've hidden the header, then we don't need to worry about this because the navigation links aren't there at all */}
-        {(!hideFooter || !isEnhanced) && <Footer venues={venues} />}
+        {(!hideFooter || !isEnhanced) &&
+          (exhibitionAccessContent ? (
+            <FooterWithA11y venues={venues} />
+          ) : (
+            <Footer venues={venues} />
+          ))}
       </div>
     </>
   );
diff --git a/config/tsconfig-base.json b/config/tsconfig-base.json
index 1ca773a814..c981a9c19d 100644
--- a/config/tsconfig-base.json
+++ b/config/tsconfig-base.json
@@ -6,15 +6,15 @@
     "incremental": true,
     "isolatedModules": true,
     "jsx": "preserve",
-    "lib": ["esnext"], 
+    "lib": ["esnext"],
     "noEmit": true,
     "noFallthroughCasesInSwitch": true,
     "resolveJsonModule": true,
     "skipLibCheck": true,
     "strict": false,
     "strictNullChecks": true,
-    "target": "es6",
+    "target": "es6"
   },
   "exclude": ["/**/node_modules"],
-  "include": ["/**/*.ts", "/**/*.tsx"],
-}
\ No newline at end of file
+  "include": ["/**/*.ts", "/**/*.tsx"]
+}


Reviews:
user: login: davidpmccormick
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-19T07:58:15Z
user: login: rcantin-w
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-19T11:17:16Z
user: login: rcantin-w
body: 1280 feels very spacious, what do you think?
<img width="1284" alt="Screenshot 2025-03-19 at 11 15 40" src="https://github.com/user-attachments/assets/fbf468ab-7bc9-4a0a-9c85-04e7eeba836c" />

state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-19T11:18:48Z
user: login: rcantin-w
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-19T11:24:47Z
user: login: rcantin-w
body: Voice over doesn't read the icons out, the toggle works well!
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-03-19T11:24:58Z
user: login: rcantin-w
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-19T11:25:11Z

Review comments:
diff_hunk: @@ -0,0 +1,101 @@
+import { FunctionComponent } from 'react';
+import styled from 'styled-components';
+
+import {
+  accessibleSquare,
+  audioDescribedSquare,
+  bslSquare,
+  closedCaptioningSquare,
+  inductionLoopSquare,
+} from '@weco/common/icons';
+import Icon from '@weco/common/views/components/Icon/Icon';
+import PlainList from '@weco/common/views/components/styled/PlainList';
+import Space from '@weco/common/views/components/styled/Space';
+
+const Li = styled(Space).attrs({
+  as: 'li',
+  $v: { size: 'xs', properties: ['margin-bottom'] },
+})`
+  display: flex;
+  gap: 0.5em;
+  align-items: center;
+`;
+
+const IconWrap = styled(Space).attrs({
+  $h: {
+    size: 'xs',
+    properties: ['padding-left', 'padding-right'],
+  },
+  $v: { size: 'xs', properties: ['padding-top', 'padding-bottom'] },
+})`
+  display: flex;
+  border-radius: 6px;
+
+  .icon {
+    width: 32px;
+    height: 32px;
+    color: ${props => props.theme.color('white')};
+  }
+`;
+
+const FooterA11y: FunctionComponent = () => {
+  return (
+    <div>
+      <Space
+        style={{ font: 'unset' }}
+        $v={{ size: 's', properties: ['margin-bottom'] }}
+        as="h4"
path: common/views/components/Footer/Footer.A11y.tsx
user: login: davidpmccormick
body: I thought these could count as headings. But I'm not sure?
created_at: 2025-03-19T07:58:14Z
author_association: CONTRIBUTOR
diff_hunk: @@ -26,7 +26,11 @@ const PlainLink = styled.a`
   }
 `;
 
-const FindUs: FunctionComponent = () => (
+type Props = {
+  hideAccessibility?: boolean; // In the footer accessibility has its own column
path: common/views/components/FindUs/FindUs.tsx
user: login: rcantin-w
body: Is this something that'll be removed once we move it all over?
created_at: 2025-03-19T11:17:16Z
author_association: CONTRIBUTOR
diff_hunk: @@ -26,7 +26,11 @@ const PlainLink = styled.a`
   }
 `;
 
-const FindUs: FunctionComponent = () => (
+type Props = {
+  hideAccessibility?: boolean; // In the footer accessibility has its own column
path: common/views/components/FindUs/FindUs.tsx
user: login: rcantin-w
body: If so we could maybe use the toggle value for the boolean just so it doesn't get missed?
created_at: 2025-03-19T11:24:47Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,101 @@
+import { FunctionComponent } from 'react';
+import styled from 'styled-components';
+
+import {
+  accessibleSquare,
+  audioDescribedSquare,
+  bslSquare,
+  closedCaptioningSquare,
+  inductionLoopSquare,
+} from '@weco/common/icons';
+import Icon from '@weco/common/views/components/Icon/Icon';
+import PlainList from '@weco/common/views/components/styled/PlainList';
+import Space from '@weco/common/views/components/styled/Space';
+
+const Li = styled(Space).attrs({
+  as: 'li',
+  $v: { size: 'xs', properties: ['margin-bottom'] },
+})`
+  display: flex;
+  gap: 0.5em;
+  align-items: center;
+`;
+
+const IconWrap = styled(Space).attrs({
+  $h: {
+    size: 'xs',
+    properties: ['padding-left', 'padding-right'],
+  },
+  $v: { size: 'xs', properties: ['padding-top', 'padding-bottom'] },
+})`
+  display: flex;
+  border-radius: 6px;
+
+  .icon {
+    width: 32px;
+    height: 32px;
+    color: ${props => props.theme.color('white')};
+  }
+`;
+
+const FooterA11y: FunctionComponent = () => {
+  return (
+    <div>
+      <Space
+        style={{ font: 'unset' }}
+        $v={{ size: 's', properties: ['margin-bottom'] }}
+        as="h4"
path: common/views/components/Footer/Footer.A11y.tsx
user: login: rcantin-w
body: What do you mean?
created_at: 2025-03-19T11:25:11Z
author_association: CONTRIBUTOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-03-17T12:39:14Z
body: **Size Change:** +5.58 kB (+0.54%) 

**Total Size:** 1.04 MB

| Filename | Size | Change |  |
| :--- | :---: | :---: | :---: |
| `content/webapp/.next/static/chunks/1723-0b5929a67df82ffb.js` | 0 B | -6.61 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/4892-03a6a49f147070aa.js` | 0 B | -4.41 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/6042-85d8eb216f758b2b.js` | 0 B | -6.9 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/6472-e89b483a016e5151.js` | 0 B | -22.6 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/7401-a1e00d59f83d86fc.js` | 0 B | -4.38 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/_app-7172ebbd422716aa.js` | 0 B | -109 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/[uid]-28816ee7a4f9244a.js` | 0 B | -1.94 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/about-us-212a04732cb12469.js` | 0 B | -1.94 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/about-us/[uid]-bd997412a6e7f30d.js` | 0 B | -1.94 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/about-us/cookie-policy-8008d9bdc188d00c.js` | 0 B | -6 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/books-8406657ded183dc3.js` | 0 B | -1.08 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/books/[bookId]-6184f8fc4878fd45.js` | 0 B | -4.08 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/collections-e69dbac21951a7b9.js` | 0 B | -2.36 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/collections/[uid]-427eed5c6650477e.js` | 0 B | -2.3 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/event-series/[eventSeriesId]-a50986e2a9dd516c.js` | 0 B | -2.93 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/events-25c81a5666d4b903.js` | 0 B | -1.25 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/events/[eventId]-18af14cf4eb9faf0.js` | 0 B | -9.47 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/exhibitions-5d01d2db0468afef.js` | 0 B | -2.06 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/exhibitions/[exhibitionId]-242909c782009457.js` | 0 B | -10.5 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/get-involved-3e727f6e862ac90e.js` | 0 B | -1.94 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/get-involved/[uid]-312ee532f01ac672.js` | 0 B | -1.95 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/guides/[guideId]-875d124b7918d968.js` | 0 B | -2.25 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/guides/exhibitions-129babcc4deb3bb6.js` | 0 B | -1.15 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/guides/exhibitions/[id]-fbbc60629ff9fce0.js` | 0 B | -2.48 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/guides/exhibitions/[id]/[type]-f276fcf36e975475.js` | 0 B | -7.33 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/guides/exhibitions/[id]/[type]/[stop]-4bfa5e4a7f2bd25a.js` | 0 B | -3.62 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/index-c6f0dd95a8b74345.js` | 0 B | -3.21 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/newsletter-930fb9f580889eee.js` | 0 B | -2.35 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/pages/[pageId]-c40bf0327c4d5b64.js` | 0 B | -1.91 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/projects/[projectId]-cbdebd5c8d20f244.js` | 0 B | -2.24 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/seasons/[seasonId]-5dc0c364f5f22f6b.js` | 0 B | -3.85 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/series/[seriesId]-a6dd24ac642182ff.js` | 0 B | -5.08 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/stories-a1441a304d7070a6.js` | 0 B | -1.73 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/stories/[articleId]-f3f9fe981283fa27.js` | 0 B | -7.69 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/visit-us-ced28ee660c7f3b0.js` | 0 B | -2.27 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/visit-us/[uid]-547ae14fa24f0e44.js` | 0 B | -1.95 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/pages/works/[workId]/download-4c82f2699599d563.js` | 0 B | -2.73 kB (removed) | 🏆 |
| `identity/webapp/.next/static/chunks/pages/_app-fe80f40cd975f319.js` | 0 B | -105 kB (removed) | 🏆 |
| `identity/webapp/.next/static/chunks/pages/delete-requested-88583816494f6717.js` | 0 B | -3.22 kB (removed) | 🏆 |
| `identity/webapp/.next/static/chunks/pages/error-6f8851348e77b63b.js` | 0 B | -1.69 kB (removed) | 🏆 |
| `identity/webapp/.next/static/chunks/pages/index-03ffe59af69cd204.js` | 0 B | -12 kB (removed) | 🏆 |
| `identity/webapp/.next/static/chunks/pages/registration-14349a8cbba227d6.js` | 0 B | -4.12 kB (removed) | 🏆 |
| `identity/webapp/.next/static/chunks/pages/success-d7e7a803b79f5a81.js` | 0 B | -3.3 kB (removed) | 🏆 |
| `identity/webapp/.next/static/chunks/pages/validated-71ea00ec595ce2bd.js` | 0 B | -3.38 kB (removed) | 🏆 |
| `content/webapp/.next/static/chunks/1723-a80a7ac25ec4b63e.js` | 5.38 kB | +5.38 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/4892-55f05c71d97e07f8.js` | 4.42 kB | +4.42 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/6042-413c7f4924de42ca.js` | 6.91 kB | +6.91 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/6472-0724a88310b450a6.js` | 22.6 kB | +22.6 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/7401-3f98e2cec19cefb1.js` | 4.38 kB | +4.38 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/_app-31aee707c9eb8052.js` | 113 kB | +113 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/[uid]-c76f4bd3a52b0c54.js` | 1.94 kB | +1.94 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/about-us-6f73444c71cec327.js` | 1.94 kB | +1.94 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/about-us/[uid]-d906dd8727318340.js` | 1.95 kB | +1.95 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/about-us/cookie-policy-4a4c8547449ae6f7.js` | 6 kB | +6 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/books-d141e3f0006e7b3f.js` | 1.08 kB | +1.08 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/books/[bookId]-a1b3894c6044a2d2.js` | 4.08 kB | +4.08 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/collections-2c2f65720cf4941b.js` | 2.36 kB | +2.36 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/collections/[uid]-b7703c77d8020985.js` | 2.3 kB | +2.3 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/event-series/[eventSeriesId]-1bbdf097a198b564.js` | 2.93 kB | +2.93 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/events-f08f10548c89c75e.js` | 1.25 kB | +1.25 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/events/[eventId]-7d30f1bde2ed673b.js` | 8.9 kB | +8.9 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/exhibitions-90073d13bffe7df4.js` | 2.05 kB | +2.05 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/exhibitions/[exhibitionId]-6f1004c7f9573b29.js` | 9.68 kB | +9.68 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/get-involved-12c1f43ec0a52a85.js` | 1.95 kB | +1.95 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/get-involved/[uid]-4c7b868ab71a3617.js` | 1.95 kB | +1.95 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/guides/[guideId]-46da1be0f1c30d0f.js` | 2.26 kB | +2.26 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/guides/exhibitions-c3b93931ee7840cb.js` | 1.15 kB | +1.15 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/guides/exhibitions/[id]-c48c80f903e93915.js` | 2.48 kB | +2.48 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/guides/exhibitions/[id]/[type]-357d05ade3b2a3b8.js` | 6.05 kB | +6.05 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/guides/exhibitions/[id]/[type]/[stop]-12f55e6c8b492ae4.js` | 3.62 kB | +3.62 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/index-44915d07f827c743.js` | 3.21 kB | +3.21 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/newsletter-c06783f0c89c9428.js` | 2.35 kB | +2.35 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/pages/[pageId]-87b1f5fda3b03ee8.js` | 1.92 kB | +1.92 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/projects/[projectId]-a414292385c4d176.js` | 2.24 kB | +2.24 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/seasons/[seasonId]-1c3551b3fc2bdf06.js` | 3.85 kB | +3.85 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/series/[seriesId]-0bec7c0e837d8a26.js` | 5.09 kB | +5.09 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/stories-9035581d46d054e0.js` | 1.73 kB | +1.73 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/stories/[articleId]-22a15554526df612.js` | 7.69 kB | +7.69 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/visit-us-2f5a2e933c45e00e.js` | 2.27 kB | +2.27 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/visit-us/[uid]-a5728de44afa4f43.js` | 1.96 kB | +1.96 kB (new file) | 🆕 |
| `content/webapp/.next/static/chunks/pages/works/[workId]/download-b0dd90bcef389f1f.js` | 2.73 kB | +2.73 kB (new file) | 🆕 |
| `identity/webapp/.next/static/chunks/pages/_app-c5fd880a73426398.js` | 110 kB | +110 kB (new file) | 🆕 |
| `identity/webapp/.next/static/chunks/pages/delete-requested-91a82a989753bda7.js` | 3.22 kB | +3.22 kB (new file) | 🆕 |
| `identity/webapp/.next/static/chunks/pages/error-78a73ccbbf2dd513.js` | 1.69 kB | +1.69 kB (new file) | 🆕 |
| `identity/webapp/.next/static/chunks/pages/index-1380e7dda8fc2f7f.js` | 12 kB | +12 kB (new file) | 🆕 |
| `identity/webapp/.next/static/chunks/pages/registration-39930f16c28ec183.js` | 4.13 kB | +4.13 kB (new file) | 🆕 |
| `identity/webapp/.next/static/chunks/pages/success-2856fac5162e6ed3.js` | 3.3 kB | +3.3 kB (new file) | 🆕 |
| `identity/webapp/.next/static/chunks/pages/validated-8980f56aab94c135.js` | 3.38 kB | +3.38 kB (new file) | 🆕 |

<details><summary>ℹ️ <strong>View Unchanged</strong></summary>

| Filename | Size |
| :--- | :---: |
| `content/webapp/.next/static/chunks/00a8a139.e66d72e5d4e63786.js` | 58.7 kB |
| `content/webapp/.next/static/chunks/1256.560e445fdb32d1da.js` | 2.99 kB |
| `content/webapp/.next/static/chunks/1271.b026329a095c8df0.js` | 4.6 kB |
| `content/webapp/.next/static/chunks/1570-e694f3d1be86f988.js` | 5.57 kB |
| `content/webapp/.next/static/chunks/1711.d646362e86773288.js` | 1.63 kB |
| `content/webapp/.next/static/chunks/1792.eb4cf2ed01a1a527.js` | 2.66 kB |
| `content/webapp/.next/static/chunks/1801.270957e539fa93f1.js` | 2.91 kB |
| `content/webapp/.next/static/chunks/1895-939985d7aa411a41.js` | 2.27 kB |
| `content/webapp/.next/static/chunks/211-f2920ff3e40813b3.js` | 2.67 kB |
| `content/webapp/.next/static/chunks/2186-40c2c4e8bf68306c.js` | 3.94 kB |
| `content/webapp/.next/static/chunks/2526.4707ec7b16059960.js` | 3.81 kB |
| `content/webapp/.next/static/chunks/2588.182a59157030f15d.js` | 1.65 kB |
| `content/webapp/.next/static/chunks/2782.35e9a3320c165a3f.js` | 3.26 kB |
| `content/webapp/.next/static/chunks/286.e6c4fb42dbebd142.js` | 20.7 kB |
| `content/webapp/.next/static/chunks/2873.76785027718b9ef3.js` | 1.62 kB |
| `content/webapp/.next/static/chunks/3197.b17b6db1e5fef68e.js` | 263 B |
| `content/webapp/.next/static/chunks/3393.1a50235e398e33e1.js` | 358 B |
| `content/webapp/.next/static/chunks/3422-35d87fae4bd6364d.js` | 2.92 kB |
| `content/webapp/.next/static/chunks/3463.9c8d79235b139644.js` | 3.08 kB |
| `content/webapp/.next/static/chunks/3590-496c6f8c1d6ea7f1.js` | 3.42 kB |
| `content/webapp/.next/static/chunks/3818-328d96af9917fc7a.js` | 3.54 kB |
| `content/webapp/.next/static/chunks/3833-ff9572f99f010a81.js` | 2.98 kB |
| `content/webapp/.next/static/chunks/3870-346f34b70d120acb.js` | 2.95 kB |
| `content/webapp/.next/static/chunks/4005.f282aa65f62a9f16.js` | 6.02 kB |
| `content/webapp/.next/static/chunks/4374.b1c852b38e66d6ec.js` | 373 B |
| `content/webapp/.next/static/chunks/4399-3f4150117467e744.js` | 3.7 kB |
| `content/webapp/.next/static/chunks/4494-9ee08e6cd2d95cc0.js` | 4.68 kB |
| `content/webapp/.next/static/chunks/4631.9dd484a988ff132d.js` | 2.19 kB |
| `content/webapp/.next/static/chunks/4660.d3804cb5d35c597f.js` | 277 B |
| `content/webapp/.next/static/chunks/5454-a9fcf6451f832026.js` | 3.75 kB |
| `content/webapp/.next/static/chunks/6061-40d38f41b9299a91.js` | 3.45 kB |
| `content/webapp/.next/static/chunks/6425-194ee5c5c5654052.js` | 6.66 kB |
| `content/webapp/.next/static/chunks/6577-5673df74d42242c4.js` | 3.9 kB |
| `content/webapp/.next/static/chunks/6661.95b5a0c461b73ea3.js` | 2.47 kB |
| `content/webapp/.next/static/chunks/6921-867cfe60d1b6e717.js` | 3.67 kB |
| `content/webapp/.next/static/chunks/7107-7a0c6bd1411921e2.js` | 33.8 kB |
| `content/webapp/.next/static/chunks/7185.1c7c2e9c21bdcac7.js` | 2.46 kB |
| `content/webapp/.next/static/chunks/72-b9bcdfe8ff0bebfc.js` | 4.47 kB |
| `content/webapp/.next/static/chunks/721-ea2d0bb10927ae69.js` | 7.55 kB |
| `content/webapp/.next/static/chunks/7603-c95eb093014d2727.js` | 3.14 kB |
| `content/webapp/.next/static/chunks/7782-cb9a3e4a94f4f0bc.js` | 7.79 kB |
| `content/webapp/.next/static/chunks/8880-afe788da8d279e5e.js` | 4.77 kB |
| `content/webapp/.next/static/chunks/8910.2c6b18de4b850a00.js` | 263 B |
| `content/webapp/.next/static/chunks/8983-f2e6c60b5e949557.js` | 11.5 kB |
| `content/webapp/.next/static/chunks/9133.8bbdf1b0acc4e24c.js` | 2.5 kB |
| `content/webapp/.next/static/chunks/9309.1ba4b4f6fa2e0b42.js` | 2.62 kB |
| `content/webapp/.next/static/chunks/9316-8ef748c3d6897b2b.js` | 3.21 kB |
| `content/webapp/.next/static/chunks/9450.04f7a1ad6fd1fed6.js` | 5.04 kB |
| `content/webapp/.next/static/chunks/9696.f0cfa4c186e11fd0.js` | 3.38 kB |
| `content/webapp/.next/static/chunks/9875.d8f9db27323a2a76.js` | 4.58 kB |
| `content/webapp/.next/static/chunks/9919.273e61cc05ee4990.js` | 3.98 kB |
| `content/webapp/.next/static/chunks/framework-978a6051e6d0c57a.js` | 44.9 kB |
| `content/webapp/.next/static/chunks/main-f8a178edb9b98bff.js` | 36.9 kB |
| `content/webapp/.next/static/chunks/pages/_error-4cf036a2ff1ec507.js` | 331 B |
| `content/webapp/.next/static/chunks/pages/404-791c5651d62f91a3.js` | 258 B |
| `content/webapp/.next/static/chunks/pages/500-2275439797e687d9.js` | 258 B |
| `content/webapp/.next/static/chunks/pages/concepts/[conceptId]-e01d8e0918d5ca20.js` | 3.81 kB |
| `content/webapp/.next/static/chunks/pages/events/[eventId]/visual-stories-f3010850e2cb2ebb.js` | 300 B |
| `content/webapp/.next/static/chunks/pages/exhibitions/[exhibitionId]/visual-stories-43c98dbbee1fc58d.js` | 301 B |
| `content/webapp/.next/static/chunks/pages/search-30b195dad42348e4.js` | 6.31 kB |
| `content/webapp/.next/static/chunks/pages/search/events-edc414ec7d40e3d5.js` | 6.26 kB |
| `content/webapp/.next/static/chunks/pages/search/images-675f13999b29b7cb.js` | 1.58 kB |
| `content/webapp/.next/static/chunks/pages/search/stories-356784ce38190d1e.js` | 3.1 kB |
| `content/webapp/.next/static/chunks/pages/search/works-91cef78fa662dc37.js` | 2.96 kB |
| `content/webapp/.next/static/chunks/pages/slice-simulator-8a2810d4d33f4d42.js` | 968 B |
| `content/webapp/.next/static/chunks/pages/visual-stories/[visualStoryId]-1c1b8a3ab7add349.js` | 236 B |
| `content/webapp/.next/static/chunks/pages/whats-on-c6d950bbb524483c.js` | 210 B |
| `content/webapp/.next/static/chunks/pages/whats-on/[period]-61f2b6497c68e41b.js` | 281 B |
| `content/webapp/.next/static/chunks/pages/works/[workId]-718b5fabfd347dd6.js` | 21.9 kB |
| `content/webapp/.next/static/chunks/pages/works/[workId]/images-465df80c2c73bd2f.js` | 702 B |
| `content/webapp/.next/static/chunks/pages/works/[workId]/items-f8b945eb5d2875f7.js` | 4.04 kB |
| `content/webapp/.next/static/chunks/polyfills-42372ed130431b0a.js` | 39.5 kB |
| `content/webapp/.next/static/chunks/webpack-87f49b936d4c392e.js` | 2.33 kB |
| `identity/webapp/.next/static/chunks/128.a394cb623dd1d2e9.js` | 2.71 kB |
| `identity/webapp/.next/static/chunks/286.30e19e68d137a7fe.js` | 20.7 kB |
| `identity/webapp/.next/static/chunks/418-679e9b03ea7ab087.js` | 20.9 kB |
| `identity/webapp/.next/static/chunks/442-a9d717dc401c077e.js` | 9.13 kB |
| `identity/webapp/.next/static/chunks/911.3961d88c7985befe.js` | 939 B |
| `identity/webapp/.next/static/chunks/framework-e82a91356956e6c8.js` | 44.8 kB |
| `identity/webapp/.next/static/chunks/main-0a79b8ff20fd3839.js` | 39 kB |
| `identity/webapp/.next/static/chunks/pages/_error-cd4c42214e080cf2.js` | 1.45 kB |
| `identity/webapp/.next/static/chunks/polyfills-42372ed130431b0a.js` | 39.5 kB |
| `identity/webapp/.next/static/chunks/webpack-f1b15f41485fda96.js` | 1.82 kB |

</details>



<a href="https://github.com/preactjs/compressed-size-action"><sub>compressed-size-action</sub></a>
author_association: NONE
user: login: davidpmccormick
created_at: 2025-03-19T11:53:02Z
body: > 1280 feels very spacious, what do you think?

I know what you mean, but it felt like the lesser of two evils  ¯\\\_(ツ)\_/¯
author_association: CONTRIBUTOR