From acdf2dac8e379eac1cd080c5b0128beb14b6bdfd Mon Sep 17 00:00:00 2001 From: terfno Date: Mon, 6 Jan 2025 18:41:41 +0900 Subject: [PATCH 01/16] :zap: refine date style --- src/components/talks/TabToggle.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/talks/TabToggle.tsx b/src/components/talks/TabToggle.tsx index 26abbb0..1eebc45 100644 --- a/src/components/talks/TabToggle.tsx +++ b/src/components/talks/TabToggle.tsx @@ -21,14 +21,14 @@ export default function Tabs() { onClick={() => handleClick('fri')} className={isSelected('fri') ? 'selected' : 'default'} > - 前夜祭 2025/1/17 + 前夜祭 2025.1.17 From 91d93fdf23e691e330b4a2332be7b8563f49ba76 Mon Sep 17 00:00:00 2001 From: terfno Date: Mon, 6 Jan 2025 18:53:27 +0900 Subject: [PATCH 02/16] :zap: add schedules base --- src/components/schedule/Schedule.css | 0 src/components/schedule/Schedule.tsx | 15 +++ src/components/schedule/TabToggle.css | 36 +++++++ src/components/schedule/TabToggle.tsx | 36 +++++++ src/components/schedule/Talk.css | 102 +++++++++++++++++++ src/components/schedule/Talk.tsx | 60 +++++++++++ src/components/schedule/ZenyasaiSchedule.tsx | 15 +++ src/components/schedule/main.astro | 14 +++ src/components/schedule/tabStore.ts | 16 +++ src/pages/schedule.astro | 4 +- 10 files changed, 296 insertions(+), 2 deletions(-) create mode 100644 src/components/schedule/Schedule.css create mode 100644 src/components/schedule/Schedule.tsx create mode 100644 src/components/schedule/TabToggle.css create mode 100644 src/components/schedule/TabToggle.tsx create mode 100644 src/components/schedule/Talk.css create mode 100644 src/components/schedule/Talk.tsx create mode 100644 src/components/schedule/ZenyasaiSchedule.tsx create mode 100644 src/components/schedule/main.astro create mode 100644 src/components/schedule/tabStore.ts diff --git a/src/components/schedule/Schedule.css b/src/components/schedule/Schedule.css new file mode 100644 index 0000000..e69de29 diff --git a/src/components/schedule/Schedule.tsx b/src/components/schedule/Schedule.tsx new file mode 100644 index 0000000..f576f30 --- /dev/null +++ b/src/components/schedule/Schedule.tsx @@ -0,0 +1,15 @@ +import {useStore} from '@nanostores/preact'; +import { selectedTabStore } from './tabStore'; + +import Talk from "./Talk"; + +import './Schedule.css'; + +export default function Schedule() { + const $tab = useStore(selectedTabStore); + return $tab === 'sat' ? ( +
+ fuga! +
+ ) : <>; +} diff --git a/src/components/schedule/TabToggle.css b/src/components/schedule/TabToggle.css new file mode 100644 index 0000000..7f2b741 --- /dev/null +++ b/src/components/schedule/TabToggle.css @@ -0,0 +1,36 @@ +.tabs { + width: 100%; + display: flex; + justify-content: center; + gap: 24px; + + button { + text-align: center; + + font-family: "Futura", "Jost", sans-serif; + font-weight: 500; + font-size: 20px; + line-height: 27px; + + border-radius: 4px; + border: none; + padding: 16px 32px; + } + + .default { + background-color: #aeaeb2; + color: #fff; + } + + .selected { + background-color: #000; + color: #fff; + } +} +@media screen and (width <= 720px) { + .tabs { + button { + font-size: 15px; + } + } +} diff --git a/src/components/schedule/TabToggle.tsx b/src/components/schedule/TabToggle.tsx new file mode 100644 index 0000000..1eebc45 --- /dev/null +++ b/src/components/schedule/TabToggle.tsx @@ -0,0 +1,36 @@ +import {useStore} from '@nanostores/preact'; +import {selectedTabStore, type Tab} from './tabStore'; +import './TabToggle.css'; + +export default function Tabs() { + const $tab = useStore(selectedTabStore); + + const isSelected = (tabName: Tab) => { + return $tab === tabName; + } + + const handleClick = (tabName: Tab) => { + selectedTabStore.set(tabName); + } + + return ( + <> +
+ + +
+ + ); +} diff --git a/src/components/schedule/Talk.css b/src/components/schedule/Talk.css new file mode 100644 index 0000000..d6eae6f --- /dev/null +++ b/src/components/schedule/Talk.css @@ -0,0 +1,102 @@ +.talk { + display: flex; + flex-direction: row; + gap: 32px; + + padding: 24px; + border-radius: 24px; + background-color: #f5f5f5; + + .speaker-icon { + img { + border-radius: 12px; + height: auto; + width: 240px; + } + } + @media screen and (width <= 720px) { + .speaker-icon { + img { + width: 160px; + } + } + } + + .description { + width: 100%; + + .session-title { + font-size: 20px; + line-height: 30px; + font-weight: 600; + margin-bottom: 8px; + } + + .speaker-name { + font-family: "Futura", "Jost", sans-serif; + font-size: 16px; + font-weight: 500; + + margin-bottom: 16px; + } + + .speaker-socials { + display: flex; + flex-wrap: wrap; + gap: 8px 24px; + + a { + font-size: 16px; + font-weight: 500; + line-height: 21px; + text-decoration: none; + vertical-align: top; + } + @media screen and (width <= 480px) { + a { + font-size: 16px; + } + } + + .social-x, + .social-github { + display: flex; + align-items: center; + } + + .social-x { + img { + width: 24px; + height: 24px; + margin: 0 8px 0 0; + } + @media screen and (width <= 480px) { + img { + width: 16px; + height: 16px; + } + } + } + + .social-github { + img { + width: 30px; + height: 30px; + margin: 0 8px 0 0; + } + @media screen and (width <= 480px) { + img { + width: 18px; + height: 18px; + } + } + } + } + } +} +@media screen and (width <= 960px) { + .talk { + flex-direction: column; + align-items: center; + } +} diff --git a/src/components/schedule/Talk.tsx b/src/components/schedule/Talk.tsx new file mode 100644 index 0000000..ded2396 --- /dev/null +++ b/src/components/schedule/Talk.tsx @@ -0,0 +1,60 @@ +import type { ComponentChildren } from 'preact'; + +import './Talk.css'; + +import GitHubMarkImage from "../../imgs/github-mark.png"; +import XLogoBlackImage from '../../imgs/x-logo-black.png'; + +type Speaker = { + name: string; + ImageSrc: string; + XId?: string; + GitHubId?: string; +} + +type Session = { + id: number; + title: string; +} + +type Props = { + speaker: Speaker; + session: Session +} + +export default function Talk({speaker, session}: Props) { + return ( + <> +
+
+ Speaker +
+
+

+ {/* */} + {session.title} +

+

{speaker.name}

+
+ {speaker.GitHubId && ( + + )} + {speaker.XId && ( + + )} +
+
+
+ + ) +} diff --git a/src/components/schedule/ZenyasaiSchedule.tsx b/src/components/schedule/ZenyasaiSchedule.tsx new file mode 100644 index 0000000..e6695a8 --- /dev/null +++ b/src/components/schedule/ZenyasaiSchedule.tsx @@ -0,0 +1,15 @@ +import {useStore} from '@nanostores/preact'; +import { selectedTabStore } from './tabStore'; + +import Talk from "./Talk"; + +import './Schedule.css'; + +export default function ZenyasaiSchedule() { + const $tab = useStore(selectedTabStore); + return $tab === 'fri' ? ( +
+ hoge! +
+ ) : <>; +} \ No newline at end of file diff --git a/src/components/schedule/main.astro b/src/components/schedule/main.astro new file mode 100644 index 0000000..cd3ef30 --- /dev/null +++ b/src/components/schedule/main.astro @@ -0,0 +1,14 @@ +--- +import Panel from "../Layouts/Panel.astro"; + +// tsx +import TabToggle from "./TabToggle"; +import ZenyasaiSchedule from "./ZenyasaiSchedule"; +import Schedule from "./Schedule"; +--- + + + + + + diff --git a/src/components/schedule/tabStore.ts b/src/components/schedule/tabStore.ts new file mode 100644 index 0000000..8a9b6d2 --- /dev/null +++ b/src/components/schedule/tabStore.ts @@ -0,0 +1,16 @@ +import { atom } from "nanostores"; + +export type Tab = "fri" | "sat"; + +const urlParams = new URLSearchParams(window.location.search); + +function getDefaultValue(): Tab { + const value = urlParams.get("tab"); + if (value !== null && (value === "fri" || value === "sat")) { + return value; + } + + return "sat"; +} + +export const selectedTabStore = atom(getDefaultValue()); diff --git a/src/pages/schedule.astro b/src/pages/schedule.astro index a02e0e1..3080f8d 100644 --- a/src/pages/schedule.astro +++ b/src/pages/schedule.astro @@ -1,12 +1,12 @@ --- import Layout from "../components/Layouts/Layout.astro"; -import Preparing from "../components/Preparing.astro"; +import ScheduleComponent from "../components/schedule/main.astro"; const title = "スケジュール | 東京Ruby会議12"; const twitter_card = "summary_large_image"; --- - + From 5d55dbd66d4e9e3f22f2a7cfc6d84c7b02b60ad0 Mon Sep 17 00:00:00 2001 From: terfno Date: Mon, 6 Jan 2025 21:37:31 +0900 Subject: [PATCH 03/16] :zap: add zenyasai tt styles --- src/components/schedule/MiniPanel.css | 6 ++ src/components/schedule/MiniPanel.tsx | 12 +++ src/components/schedule/Schedule.css | 103 +++++++++++++++++++ src/components/schedule/Talk.css | 28 +++-- src/components/schedule/Talk.tsx | 62 +++++------ src/components/schedule/ZenyasaiSchedule.tsx | 60 ++++++++++- src/components/schedule/tabStore.ts | 2 +- 7 files changed, 232 insertions(+), 41 deletions(-) create mode 100644 src/components/schedule/MiniPanel.css create mode 100644 src/components/schedule/MiniPanel.tsx diff --git a/src/components/schedule/MiniPanel.css b/src/components/schedule/MiniPanel.css new file mode 100644 index 0000000..3e35c1c --- /dev/null +++ b/src/components/schedule/MiniPanel.css @@ -0,0 +1,6 @@ +.minipanel { + border-radius: 24px; + padding: 24px; + background-color: #f5f5f5; + height: 100%; +} diff --git a/src/components/schedule/MiniPanel.tsx b/src/components/schedule/MiniPanel.tsx new file mode 100644 index 0000000..3a216f2 --- /dev/null +++ b/src/components/schedule/MiniPanel.tsx @@ -0,0 +1,12 @@ +import type {FunctionComponent} from 'preact'; +import './MiniPanel.css'; + +const MiniPanel: FunctionComponent = (props) => { + return ( +
+ {props.children} +
+ ) +} + +export default MiniPanel; diff --git a/src/components/schedule/Schedule.css b/src/components/schedule/Schedule.css index e69de29..420d33a 100644 --- a/src/components/schedule/Schedule.css +++ b/src/components/schedule/Schedule.css @@ -0,0 +1,103 @@ +.schedule { + padding: 24px 0; + display: flex; + flex-direction: column; + gap: 24px; + + .ann { + .ann-title { + h3{ + font-size: 20px; + font-weight: 600; + line-height: 30px; + text-align: left; + } + + padding-bottom: 16px; + border-bottom: 1px solid #aeaeb2; + + margin-bottom: 16px; + } + + .ann-body { + p { + font-size: 14px; + font-weight: 300; + line-height: 32px; + text-align: left; + text-decoration: none; + } + + .ann-detail{ + display: flex; + justify-content: center; + margin-top: 16px; + + .ann-button { + a { + font-size: 16px; + font-weight: 600; + line-height: 24px; + text-align: left; + text-decoration: none; + } + + border: 2px solid #AEAEB2; + padding: 16px 24px; + border-radius: 4px; + background: #FFFFFF; + + display: flex; + gap: 8px; + } + } + } + } + + .timetable{ + table { + width: 100%; + + border-spacing: 0; + border-radius: 24px; + border: 1px solid #AEAEB2; + tbody tr:first-child td:first-child { + border-top-left-radius: 24px; + } + tbody tr:first-child td:last-child { + border-top-right-radius: 24px; + } + tbody tr:last-child td:first-child { + border-bottom-left-radius: 24px; + } + tbody tr:last-child td:last-child { + border-bottom-right-radius: 24px; + } + tbody tr td:first-child { + border-right: 1px solid #AEAEB2;background-color: #F5F5F5; + } + tbody tr:not(:last-child) td { + border-bottom: 1px solid #AEAEB2; + } + + td { + padding: 24px; + } + } + + .tt-time, .tt-timerange { + font-family: "Futura", "Jost", sans-serif; + font-size: 16px; + font-weight: 500; + line-height: 21.25px; + text-align: center; + } + + .tt-event { + font-size: 20px; + font-weight: 600px; + line-height: 32px; + text-align: left; + } + } +} diff --git a/src/components/schedule/Talk.css b/src/components/schedule/Talk.css index d6eae6f..1f2ed46 100644 --- a/src/components/schedule/Talk.css +++ b/src/components/schedule/Talk.css @@ -3,21 +3,17 @@ flex-direction: row; gap: 32px; - padding: 24px; - border-radius: 24px; - background-color: #f5f5f5; - .speaker-icon { img { border-radius: 12px; height: auto; - width: 240px; + width: 160px; } } @media screen and (width <= 720px) { .speaker-icon { img { - width: 160px; + width: 80px; } } } @@ -25,11 +21,27 @@ .description { width: 100%; + .keynote { + span { + background: #FCECE8; + padding: 2px 8px; + border-radius: 2px; + + font-family: "Futura", "Jost", sans-serif; + font-size: 12px; + font-weight: 400; + line-height: 18px; + } + + margin-bottom: 10px; + } + .session-title { font-size: 20px; line-height: 30px; font-weight: 600; - margin-bottom: 8px; + + margin-bottom: 16px; } .speaker-name { @@ -94,7 +106,7 @@ } } } -@media screen and (width <= 960px) { +@media screen and (width <= 520px) { .talk { flex-direction: column; align-items: center; diff --git a/src/components/schedule/Talk.tsx b/src/components/schedule/Talk.tsx index ded2396..9e613c0 100644 --- a/src/components/schedule/Talk.tsx +++ b/src/components/schedule/Talk.tsx @@ -13,6 +13,7 @@ type Speaker = { } type Session = { + keynote?: boolean; id: number; title: string; } @@ -24,37 +25,38 @@ type Props = { export default function Talk({speaker, session}: Props) { return ( - <> -
-
- Speaker -
-
-

- {/* */} - {session.title} -

-

{speaker.name}

-
- {speaker.GitHubId && ( - - )} - {speaker.XId && ( - - )} -
+
+
+ Speaker +
+
+ {session.keynote &&
+ Keynote +
} +

+ {/* */} + {session.title} +

+

{speaker.name}

+
+ {speaker.GitHubId && ( + + )} + {speaker.XId && ( + + )}
- +
) } diff --git a/src/components/schedule/ZenyasaiSchedule.tsx b/src/components/schedule/ZenyasaiSchedule.tsx index e6695a8..3e127e8 100644 --- a/src/components/schedule/ZenyasaiSchedule.tsx +++ b/src/components/schedule/ZenyasaiSchedule.tsx @@ -1,15 +1,71 @@ import {useStore} from '@nanostores/preact'; import { selectedTabStore } from './tabStore'; +import MiniPanel from './MiniPanel'; import Talk from "./Talk"; +import ArrowUpRightFromSquare from '../icons/arrow-up-right-from-square.svg'; +import OkuramasafumiImage from "../staff/pics/okuramasafumi.jpg"; + import './Schedule.css'; export default function ZenyasaiSchedule() { const $tab = useStore(selectedTabStore); return $tab === 'fri' ? (
- hoge! +
+ +
+
+

東京Ruby会議12 前夜祭

+
+
+

+ 前夜祭には当日チケットを購入した方のみご参加いただけます。詳細は connpass をご確認ください。 +

+ +
+
+
+
+
+ + + + + + + + + + + +
10:30Door Open / 受付開始
+

11:10

+

-

+

11:45

+
+ +
+
) : <>; -} \ No newline at end of file +} diff --git a/src/components/schedule/tabStore.ts b/src/components/schedule/tabStore.ts index 8a9b6d2..433ba7c 100644 --- a/src/components/schedule/tabStore.ts +++ b/src/components/schedule/tabStore.ts @@ -10,7 +10,7 @@ function getDefaultValue(): Tab { return value; } - return "sat"; + return "fri"; // for temporary } export const selectedTabStore = atom(getDefaultValue()); From 2be15950b3b46479b6ede6ba61a634c12fe2e68d Mon Sep 17 00:00:00 2001 From: terfno Date: Mon, 6 Jan 2025 22:43:25 +0900 Subject: [PATCH 04/16] :shirt: write table styles --- src/components/schedule/Schedule.css | 86 +++++++++++++++++++++++++--- src/components/schedule/Schedule.tsx | 49 +++++++++++++++- src/components/schedule/Talk.css | 2 +- src/components/schedule/tabStore.ts | 2 +- 4 files changed, 127 insertions(+), 12 deletions(-) diff --git a/src/components/schedule/Schedule.css b/src/components/schedule/Schedule.css index 420d33a..a5a1a30 100644 --- a/src/components/schedule/Schedule.css +++ b/src/components/schedule/Schedule.css @@ -55,34 +55,95 @@ } .timetable{ + overflow-x: auto; + -webkit-overflow-scrolling: touch; + + table thead:first-child tr:first-child th:first-child { + border-top-left-radius: 24px; + border-right: 1px solid #AEAEB2; + } + table thead:first-child tr:first-child th:last-child { + border-top-right-radius: 24px; + border-left: 1px solid #AEAEB2; + } + + table tbody:first-child tr:first-child td:first-child { + border-top-left-radius: 24px; + border-top: none !important; + border-right: 1px solid #AEAEB2; + } + table tbody:first-child tr:first-child td:last-child { + border-top-right-radius: 24px; + border-top: none !important; + } + table { width: 100%; + min-width: 1028px; border-spacing: 0; border-radius: 24px; border: 1px solid #AEAEB2; - tbody tr:first-child td:first-child { - border-top-left-radius: 24px; - } - tbody tr:first-child td:last-child { - border-top-right-radius: 24px; + + .tt-no-left-line { + border-left: none !important; } + tbody tr:last-child td:first-child { border-bottom-left-radius: 24px; } tbody tr:last-child td:last-child { border-bottom-right-radius: 24px; } + tbody tr td:first-child { - border-right: 1px solid #AEAEB2;background-color: #F5F5F5; + border-right: 1px solid #AEAEB2; + background-color: #F5F5F5; } - tbody tr:not(:last-child) td { - border-bottom: 1px solid #AEAEB2; + + tbody tr td:nth-child(3) { + border-left: 1px solid #AEAEB2; } td { + border-top: 1px solid #AEAEB2; padding: 24px; } + + th { + font-family: "Futura", "Jost", sans-serif; + font-size: 20px; + font-weight: 500; + line-height: 27px; + text-align: center; + + padding: 24px 16px; + } + } + @media screen and (width <= 720px) { + table { + min-width: 688px; + } + } + @media screen and (width <= 520px) { + table { + min-width: 488px; + } + } + @media screen and (width <= 320px) { + table { + min-width: 320px; + } + } + + .tt-4 { + color: #fff; + background: #DD451D; + } + + .tt-3 { + color: #fff; + background: #000; } .tt-time, .tt-timerange { @@ -91,13 +152,20 @@ font-weight: 500; line-height: 21.25px; text-align: center; + + white-space: nowrap; + width: 1%; } .tt-event { font-size: 20px; - font-weight: 600px; + font-weight: 600; line-height: 32px; text-align: left; } + + .tt-4, .tt-3, .tt-event, .tt-talk { + width: 50%; + } } } diff --git a/src/components/schedule/Schedule.tsx b/src/components/schedule/Schedule.tsx index f576f30..dae10cc 100644 --- a/src/components/schedule/Schedule.tsx +++ b/src/components/schedule/Schedule.tsx @@ -9,7 +9,54 @@ export default function Schedule() { const $tab = useStore(selectedTabStore); return $tab === 'sat' ? (
- fuga! +
+ + + + + + + + + + + + + + + + + + +
+ 4F Hall3F Gallery
10:30Door Open / 受付開始 +
+

11:10

+

-

+

11:45

+
+ + + +
+
) : <>; } diff --git a/src/components/schedule/Talk.css b/src/components/schedule/Talk.css index 1f2ed46..c9b0d53 100644 --- a/src/components/schedule/Talk.css +++ b/src/components/schedule/Talk.css @@ -106,7 +106,7 @@ } } } -@media screen and (width <= 520px) { +@media screen and (width <= 720px) { .talk { flex-direction: column; align-items: center; diff --git a/src/components/schedule/tabStore.ts b/src/components/schedule/tabStore.ts index 433ba7c..8a9b6d2 100644 --- a/src/components/schedule/tabStore.ts +++ b/src/components/schedule/tabStore.ts @@ -10,7 +10,7 @@ function getDefaultValue(): Tab { return value; } - return "fri"; // for temporary + return "sat"; } export const selectedTabStore = atom(getDefaultValue()); From 5b9e7634f13d9bcce9ae824df8720ee84c72bce9 Mon Sep 17 00:00:00 2001 From: terfno Date: Mon, 6 Jan 2025 22:43:33 +0900 Subject: [PATCH 05/16] :zap: update default screen width --- src/components/Layouts/Panel.astro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Layouts/Panel.astro b/src/components/Layouts/Panel.astro index 8cc8df9..1b761f4 100644 --- a/src/components/Layouts/Panel.astro +++ b/src/components/Layouts/Panel.astro @@ -20,7 +20,7 @@ const { title } = Astro.props; .inner { width: 100%; - max-width: 960px; + max-width: 1128px; margin: 0 auto; } From a273d8b838df47e377a7a3bd39051e2931ce7d75 Mon Sep 17 00:00:00 2001 From: terfno Date: Mon, 6 Jan 2025 22:44:25 +0900 Subject: [PATCH 06/16] :shower: remove extra import --- src/components/schedule/Talk.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/components/schedule/Talk.tsx b/src/components/schedule/Talk.tsx index 9e613c0..d499958 100644 --- a/src/components/schedule/Talk.tsx +++ b/src/components/schedule/Talk.tsx @@ -1,5 +1,3 @@ -import type { ComponentChildren } from 'preact'; - import './Talk.css'; import GitHubMarkImage from "../../imgs/github-mark.png"; From b20ee643351f21768b080c37e556167b2b1dc438 Mon Sep 17 00:00:00 2001 From: terfno Date: Mon, 6 Jan 2025 22:45:11 +0900 Subject: [PATCH 07/16] :zap: restore schedule page --- src/components/Layouts/Header/Hamburger.astro | 2 +- src/components/Layouts/Header/Nav.astro | 2 +- src/components/Layouts/Header/NavItems.astro | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/Layouts/Header/Hamburger.astro b/src/components/Layouts/Header/Hamburger.astro index 6307383..3128776 100644 --- a/src/components/Layouts/Header/Hamburger.astro +++ b/src/components/Layouts/Header/Hamburger.astro @@ -8,7 +8,7 @@ import CloseIcon from "../../icons/close.svg" .hamburger { height: 48px; } - @media screen and (width > 700px) { + @media screen and (width > 720px) { .hamburger { display: none; } diff --git a/src/components/Layouts/Header/Nav.astro b/src/components/Layouts/Header/Nav.astro index 00a5944..e9834c6 100644 --- a/src/components/Layouts/Header/Nav.astro +++ b/src/components/Layouts/Header/Nav.astro @@ -6,7 +6,7 @@ import NavItems from './NavItems.astro' nav { height: 24px; } - @media screen and (width <= 700px) { + @media screen and (width <= 720px) { nav { display: none; } diff --git a/src/components/Layouts/Header/NavItems.astro b/src/components/Layouts/Header/NavItems.astro index 92cca2d..d535d9a 100644 --- a/src/components/Layouts/Header/NavItems.astro +++ b/src/components/Layouts/Header/NavItems.astro @@ -23,7 +23,7 @@ const { mobile } = Astro.props; list-style-type: none; font-size: 16px; } - @media screen and (width <= 700px) { + @media screen and (width <= 720px) { nav ul { gap: 12px; } @@ -40,12 +40,12 @@ const { mobile } = Astro.props;