랜딩 페이지: D3RO 브랜드 프로모션 사이트 + GitHub Pages 배포
- Vite + React 19 + Tailwind CSS - 4가지 디자인 레퍼런스 통합 (CRT 스크린, 크로스헤어, 노이즈, 인스트루먼트) - 섹션 9개: Hero, Features, HowItWorks, Privacy, Pricing, FAQ, CTA, Header, Footer - 재사용 컴포넌트 8개 (Badge, Container, InstrumentCard, GlowButton 등) - i18n 10개 국어 (en/ko/ja/zh/es/fr/de/pt/ru/vi) - GitHub Pages 자동 배포 워크플로우
This commit is contained in:
parent
eb83682269
commit
5892125740
45 changed files with 6225 additions and 0 deletions
207
site/src/index.css
Normal file
207
site/src/index.css
Normal file
|
|
@ -0,0 +1,207 @@
|
|||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
/* ── Base Reset & Globals ──────────────────────────────── */
|
||||
@layer base {
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
::selection {
|
||||
background-color: rgba(242, 91, 41, 0.3);
|
||||
color: #fafafa;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
}
|
||||
::-webkit-scrollbar-track {
|
||||
background: #0d0d0f;
|
||||
}
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: #333338;
|
||||
border-radius: 3px;
|
||||
}
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background: #4a4b50;
|
||||
}
|
||||
|
||||
body {
|
||||
overflow-x: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
/* ── Grid Background Pattern ──────────────────────────── */
|
||||
.bg-grid {
|
||||
background-image:
|
||||
linear-gradient(rgba(242, 91, 41, 0.03) 1px, transparent 1px),
|
||||
linear-gradient(90deg, rgba(242, 91, 41, 0.03) 1px, transparent 1px);
|
||||
background-size: 60px 60px;
|
||||
}
|
||||
|
||||
.bg-grid-dense {
|
||||
background-image:
|
||||
linear-gradient(rgba(255, 255, 255, 0.02) 1px, transparent 1px),
|
||||
linear-gradient(90deg, rgba(255, 255, 255, 0.02) 1px, transparent 1px);
|
||||
background-size: 20px 20px;
|
||||
}
|
||||
|
||||
/* ── CRT Screen Effect (CSS only) ─────────────────────── */
|
||||
.crt-screen {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
background: linear-gradient(180deg, #050605 0%, #0a0b0a 100%);
|
||||
border: 1px solid rgba(242, 91, 41, 0.1);
|
||||
box-shadow:
|
||||
inset 0 2px 8px rgba(0, 0, 0, 0.8),
|
||||
0 0 30px rgba(242, 91, 41, 0.05);
|
||||
}
|
||||
|
||||
.crt-screen::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background: repeating-linear-gradient(
|
||||
0deg,
|
||||
transparent,
|
||||
transparent 2px,
|
||||
rgba(0, 0, 0, 0.15) 2px,
|
||||
rgba(0, 0, 0, 0.15) 4px
|
||||
);
|
||||
pointer-events: none;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.crt-screen::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background: linear-gradient(
|
||||
180deg,
|
||||
rgba(242, 91, 41, 0.02) 0%,
|
||||
transparent 50%,
|
||||
rgba(242, 91, 41, 0.01) 100%
|
||||
);
|
||||
animation: scan 8s linear infinite;
|
||||
pointer-events: none;
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
@keyframes scan {
|
||||
0% { transform: translateY(-100%); }
|
||||
100% { transform: translateY(100%); }
|
||||
}
|
||||
|
||||
/* ── Crosshair Decorations ─────────────────────────────── */
|
||||
.crosshair-box {
|
||||
--ch-size: 16px;
|
||||
--ch-color: rgba(242, 91, 41, 0.35);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.crosshair-box::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -1px;
|
||||
left: -1px;
|
||||
width: var(--ch-size);
|
||||
height: var(--ch-size);
|
||||
border-top: 1px solid var(--ch-color);
|
||||
border-left: 1px solid var(--ch-color);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.crosshair-box::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: -1px;
|
||||
right: -1px;
|
||||
width: var(--ch-size);
|
||||
height: var(--ch-size);
|
||||
border-bottom: 1px solid var(--ch-color);
|
||||
border-right: 1px solid var(--ch-color);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* ── Instrument Noise Texture ──────────────────────────── */
|
||||
.noise-texture {
|
||||
position: relative;
|
||||
}
|
||||
.noise-texture::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
opacity: 0.025;
|
||||
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
|
||||
background-repeat: repeat;
|
||||
background-size: 256px 256px;
|
||||
pointer-events: none;
|
||||
border-radius: inherit;
|
||||
}
|
||||
|
||||
/* ── Glow Button ───────────────────────────────────────── */
|
||||
.glow-btn {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
transition: all 250ms cubic-bezier(0.16, 1, 0.3, 1);
|
||||
}
|
||||
.glow-btn::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
inset: -2px;
|
||||
background: linear-gradient(135deg, rgba(242, 91, 41, 0.4), rgba(242, 91, 41, 0) 60%);
|
||||
border-radius: inherit;
|
||||
opacity: 0;
|
||||
transition: opacity 250ms;
|
||||
z-index: 0;
|
||||
}
|
||||
.glow-btn:hover::before {
|
||||
opacity: 1;
|
||||
}
|
||||
.glow-btn:hover {
|
||||
box-shadow: 0 0 20px rgba(242, 91, 41, 0.3), 0 0 40px rgba(242, 91, 41, 0.1);
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
.glow-btn:active {
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
/* ── Accordion ─────────────────────────────────────────── */
|
||||
.accordion-content {
|
||||
display: grid;
|
||||
grid-template-rows: 0fr;
|
||||
transition: grid-template-rows 300ms ease;
|
||||
}
|
||||
.accordion-content.open {
|
||||
grid-template-rows: 1fr;
|
||||
}
|
||||
.accordion-content > div {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* ── Reveal Animation ──────────────────────────────────── */
|
||||
.reveal {
|
||||
opacity: 0;
|
||||
transform: translateY(20px);
|
||||
}
|
||||
.reveal.visible {
|
||||
animation: fade-in-up 0.6s ease-out forwards;
|
||||
}
|
||||
|
||||
@keyframes fade-in-up {
|
||||
0% { opacity: 0; transform: translateY(20px); }
|
||||
100% { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
|
||||
/* ── Utilities ─────────────────────────────────────────── */
|
||||
@layer utilities {
|
||||
.text-balance {
|
||||
text-wrap: balance;
|
||||
}
|
||||
.border-hairline {
|
||||
border-color: rgba(255, 255, 255, 0.06);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue