[chore] landing: 홈 문구 정비 (mobile.mov 제외·ignore)
This commit is contained in:
parent
51d07bb779
commit
5318ff3263
2
.gitignore
vendored
2
.gitignore
vendored
@ -28,3 +28,5 @@ CLAUDE.md
|
||||
# 로컬 리서치 노트(크롤링 라이브러리·안티스크래핑 조사) — 추적 안 함, 로컬 참고용
|
||||
/Temp.md
|
||||
/new.md
|
||||
|
||||
/mobile.mov
|
||||
|
||||
@ -57,8 +57,8 @@ export function HeroNeumorphic() {
|
||||
className="w-full flex justify-center"
|
||||
>
|
||||
<video
|
||||
src="/gifs/negotiation_annotated.mp4"
|
||||
poster="/gifs/negotiation_annotated.jpg"
|
||||
src="/gifs/negotiation_annotated_3d.mp4?v=w3"
|
||||
poster="/gifs/negotiation_annotated_3d.jpg?v=w3"
|
||||
autoPlay
|
||||
muted
|
||||
loop
|
||||
|
||||
@ -241,8 +241,6 @@ const DEMO_TABS: DemoTab[] = [
|
||||
checks: ["1:1 비대면 협상 포털 제공", "불필요한 실랑이를 예방하여 파트너십 보호"],
|
||||
mockup: "phone",
|
||||
gif: "/gifs/negotiation.gif",
|
||||
video: "/gifs/negotiation.mp4",
|
||||
poster: "/gifs/negotiation.jpg",
|
||||
gifAlt: "AI 모바일 자동 협상 시연",
|
||||
fallback: {
|
||||
icon: Smartphone,
|
||||
|
||||
@ -23,11 +23,11 @@ function BrowserFrame({ url, children }: { url: string; children: React.ReactNod
|
||||
function PhoneFrame({ children }: { children: React.ReactNode }) {
|
||||
return (
|
||||
<div className="relative bg-black rounded-[48px] p-3 shadow-[0_20px_50px_rgba(0,0,0,0.15)] border-4 border-line-strong w-full max-w-[290px] aspect-[9/18] overflow-hidden flex flex-col">
|
||||
<div className="absolute top-4 left-1/2 -translate-x-1/2 bg-black h-5 w-28 rounded-full z-20 flex items-center justify-around px-4">
|
||||
<span className="w-1.5 h-1.5 rounded-full bg-[#1F2022]" />
|
||||
<span className="w-10 h-1 bg-[#1F2022] rounded-full" />
|
||||
{/* 노치는 화면 '안쪽'에 작은 아일랜드로 — 베젤과 붙으면 검은 덩어리처럼 보인다 */}
|
||||
<div className="bg-white rounded-[36px] flex-1 overflow-hidden relative flex flex-col justify-center items-center">
|
||||
<div className="absolute top-1 left-1/2 -translate-x-1/2 bg-black/70 h-0.5 w-3.5 rounded-full z-20" />
|
||||
{children}
|
||||
</div>
|
||||
<div className="bg-white rounded-[36px] flex-1 overflow-hidden relative flex flex-col justify-center items-center">{children}</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
import { useState } from "react";
|
||||
|
||||
import { Comparison } from "@/components/sections/comparison";
|
||||
import { Contact } from "@/components/sections/contact";
|
||||
import { CoreValues } from "@/components/sections/core-values";
|
||||
@ -7,8 +5,6 @@ import { Faq } from "@/components/sections/faq";
|
||||
import { FinalCTA } from "@/components/sections/final-cta";
|
||||
import { Footer } from "@/components/sections/footer";
|
||||
import { Header } from "@/components/sections/header";
|
||||
import { HeroConsole } from "@/components/sections/hero-console";
|
||||
import { HeroGlassmorphic } from "@/components/sections/hero-glassmorphic";
|
||||
import { HeroNeumorphic } from "@/components/sections/hero-neumorphic";
|
||||
import { HowItWorksDemo } from "@/components/sections/how-it-works-demo";
|
||||
import { NegotiationConsole } from "@/components/sections/negotiation-console";
|
||||
@ -30,23 +26,11 @@ export function meta() {
|
||||
];
|
||||
}
|
||||
|
||||
type HeroTheme = "neumorphic" | "glassmorphic" | "console";
|
||||
|
||||
export default function Home() {
|
||||
// 히어로 디자인 비교용 — 스위처는 dev 에서만 노출, 배포본은 console(Live Console) 고정
|
||||
const [heroTheme, setHeroTheme] = useState<HeroTheme>("console");
|
||||
|
||||
return (
|
||||
<div className="min-h-screen bg-white text-ink font-sans antialiased selection:bg-primary/10 selection:text-primary">
|
||||
<Header />
|
||||
|
||||
<div className="relative">
|
||||
{import.meta.env.DEV && <HeroThemeSwitcher value={heroTheme} onChange={setHeroTheme} />}
|
||||
{heroTheme === "neumorphic" && <HeroNeumorphic />}
|
||||
{heroTheme === "glassmorphic" && <HeroGlassmorphic />}
|
||||
{heroTheme === "console" && <HeroConsole />}
|
||||
</div>
|
||||
|
||||
<HeroNeumorphic />
|
||||
<NegotiationConsole />
|
||||
<HowItWorksDemo />
|
||||
<Reinforcement />
|
||||
@ -59,28 +43,3 @@ export default function Home() {
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
const HERO_OPTIONS: { value: HeroTheme; label: string }[] = [
|
||||
{ value: "neumorphic", label: "Phone Demo" },
|
||||
{ value: "glassmorphic", label: "Soft Ambient" },
|
||||
{ value: "console", label: "Live Console" },
|
||||
];
|
||||
|
||||
function HeroThemeSwitcher({ value, onChange }: { value: HeroTheme; onChange: (theme: HeroTheme) => void }) {
|
||||
return (
|
||||
<div className="absolute top-24 left-1/2 -translate-x-1/2 z-30 flex items-center gap-1.5 p-1 rounded-full shadow-[0_4px_20px_rgba(0,0,0,0.06)] border border-line-strong bg-white/95 text-ink-soft backdrop-blur-md text-xs font-semibold">
|
||||
<span className="pl-3.5 pr-1.5 text-[10px] uppercase tracking-wider text-ink-muted font-bold">Hero Design:</span>
|
||||
{HERO_OPTIONS.map((option) => (
|
||||
<button
|
||||
key={option.value}
|
||||
onClick={() => onChange(option.value)}
|
||||
className={`px-3.5 py-1.5 rounded-full transition-all cursor-pointer ${
|
||||
value === option.value ? "bg-primary text-white shadow-sm font-bold" : "hover:text-ink"
|
||||
}`}
|
||||
>
|
||||
{option.label}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 85 KiB |
Binary file not shown.
Loading…
Reference in New Issue
Block a user