diff --git a/src/app/globals.css b/src/app/globals.css
index a751de94..1dff8366 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -14,16 +14,18 @@
display: none;
}
-html {
- font-size: calc(16vw / 440 * 100);
-}
-
@media (min-width: 440px) {
html {
font-size: 16px;
}
}
+@supports (-webkit-touch-callout: none) {
+ .h-screen {
+ height: -webkit-fill-available;
+ }
+}
+
h1 {
font-weight: 700;
font-size: 3rem;
@@ -88,3 +90,7 @@ caption {
line-height: 1.125rem;
letter-spacing: 0.4px;
}
+
+button {
+ cursor: pointer;
+}
\ No newline at end of file
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index e7514a90..3842255a 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -2,7 +2,6 @@ import './globals.css';
import '../../styles/font.css';
import '../../styles/typography.css';
-import Script from 'next/script';
import { Suspense } from 'react';
import { Analytics } from '@/components/Analytics';
@@ -20,7 +19,7 @@ const DEFAULT_OG_IMAGE = '/images/main_star.png';
export const metadata: Metadata = {
metadataBase: new URL(BASE_SITE_URL),
title: {
- template: `${DEFAULT_OG_TITLE} / %s `,
+ template: DEFAULT_OG_TITLE,
default: DEFAULT_OG_TITLE,
},
description: DEFAULT_OG_DESC,
@@ -40,6 +39,9 @@ export const metadata: Metadata = {
maximumScale: 1,
userScalable: false,
},
+ icons: {
+ icon: './favicon.ico',
+ },
manifest: '/manifest.json',
themeColor: '#ffffff',
};
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 71e8ac95..7792f599 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -2,5 +2,4 @@ import { redirect } from 'next/navigation';
export default function Home() {
redirect('/pick');
- return
;
}
diff --git a/src/components/Button/PrimaryButton.tsx b/src/components/Button/PrimaryButton.tsx
index b63072ed..98435867 100644
--- a/src/components/Button/PrimaryButton.tsx
+++ b/src/components/Button/PrimaryButton.tsx
@@ -5,6 +5,7 @@ interface Button {
text: string;
onClick?: () => void;
type?: keyof Style;
+ className?: string;
}
interface Style {
@@ -18,11 +19,11 @@ const style: Style = {
secondary: `bg-sub-white text-secondary w-fit`,
};
-export default function PrimaryButton({ icon, text, onClick, type = 'fill' }: Button) {
+export default function PrimaryButton({ icon, text, onClick, type = 'fill', className }: Button) {
return (
{icon &&
}
{text}
diff --git a/src/components/Header/CloseButton.tsx b/src/components/Header/CloseButton.tsx
new file mode 100644
index 00000000..baf64718
--- /dev/null
+++ b/src/components/Header/CloseButton.tsx
@@ -0,0 +1,15 @@
+'use client';
+
+import IconButton from '../Button/IconButton';
+import Image from 'next/image';
+import { useRouter } from 'next/navigation';
+
+export default function CloseButton() {
+ const router = useRouter();
+
+ return (
+
router.back()}>
+
+
+ );
+}
diff --git a/src/components/Modal/MenuModal.tsx b/src/components/Modal/MenuModal.tsx
new file mode 100644
index 00000000..d652a4cf
--- /dev/null
+++ b/src/components/Modal/MenuModal.tsx
@@ -0,0 +1,23 @@
+import { PrimaryButton } from '@/components/Button';
+import { Popup } from '@/components/Modal';
+import { Spacing } from '@/components/Spacing';
+import { PropsWithChildren } from 'react';
+
+interface MenuModalProps extends PropsWithChildren {
+ onConfirm?: () => void;
+ onClose: () => void;
+}
+
+export default function MenuModal({ children, onConfirm, onClose }: MenuModalProps) {
+ return (
+
+
+ {children}
+
+
+
+ );
+}
diff --git a/src/components/Modal/Modal.tsx b/src/components/Modal/Modal.tsx
index b993e50d..52a83621 100644
--- a/src/components/Modal/Modal.tsx
+++ b/src/components/Modal/Modal.tsx
@@ -15,7 +15,7 @@ export default function Popup({
return (
{children}
diff --git a/src/constants/image.ts b/src/constants/image.ts
new file mode 100644
index 00000000..73d30357
--- /dev/null
+++ b/src/constants/image.ts
@@ -0,0 +1,3 @@
+export const IMAGE = {
+ profile_default: '/images/profile_default.svg',
+} as const;
diff --git a/src/constants/url.ts b/src/constants/url.ts
new file mode 100644
index 00000000..335b3f38
--- /dev/null
+++ b/src/constants/url.ts
@@ -0,0 +1,4 @@
+export const URL = {
+ inquiry:
+ 'https://docs.google.com/forms/d/e/1FAIpQLSeZuPZTXnO4rZ4k39SzXv96PWAW4gLcTYBrsRUrgRHSVV9Ldg/viewform?usp=sf_link',
+};
diff --git a/src/hooks/useObserver.tsx b/src/hooks/useObserver.tsx
new file mode 100644
index 00000000..e0cd9144
--- /dev/null
+++ b/src/hooks/useObserver.tsx
@@ -0,0 +1,16 @@
+import { useEffect, useRef } from 'react';
+
+const useIntersect = (callback: () => void, options?: IntersectionObserverInit) => {
+ const target = useRef(null);
+
+ useEffect(() => {
+ if (!target.current) return;
+ const observer = new IntersectionObserver(callback, options);
+ observer.observe(target.current);
+ return () => observer.disconnect();
+ }, [callback, options]);
+
+ return target;
+};
+
+export default useIntersect;