# 작업 내역 (2026-04-11)

## 현재 상태
빌드 필요 (마지막 수정 후 아직 테스트 안됨)

---

## 완료된 작업

### 1. 모바일 하단 제스처바 숨김 (app.vue)
- 방법: body에 `position:absolute; top:100vh; height:1px` 인비저블 엘리먼트 추가 → 문서가 1px 더 길어져 window.scrollTo(0,1) 가능
- 첫 터치 시 `window.scrollTo(0, 1)` → 300ms 후 0으로 복귀
- body `overflow:hidden` 유지하면서 window scroll 트리거 가능
- 파일: `frontend/app.vue`

```javascript
// 모바일 브라우저 하단 UI 숨김 (iOS + Android)
const isMobile = /Android|iPhone|iPad|iPod/i.test(navigator.userAgent);
if (isMobile) {
  document.addEventListener('touchstart', () => {
    window.scrollTo(0, 1);
    setTimeout(() => window.scrollTo(0, 0), 300);
  }, { once: true, passive: true });
}
```

```html
<!-- app.vue template에 추가 -->
<div aria-hidden="true" style="position:absolute;top:100vh;height:1px;width:1px;pointer-events:none;opacity:0;"></div>
```

### 2. 배팅카트 모바일 sticky
- 파일: `frontend/assets/scss/pages/main.scss`
- `chart__section--betting`에 모바일 sticky 적용

```scss
&--betting {
  @include media("lg") {
    position: sticky;
    bottom: 2vh;
    z-index: 10;
  }
}
```

### 3. 잭팟 모달 SVG 아이콘 교체
- 파일: `frontend/components/layout/Header.vue`
- `ⓟ` 이모티콘 → 커스텀 SVG (빨간 원 + 흰색 P) 교체
- jackpotBonusData 배열에서 ⓟ 제거 후 템플릿에 SVG 인라인 추가

### 4. 디자인 변경 (0410 폴더 기준)
- **파일**: `frontend/assets/scss/base/_typography.scss`
  - `$fs-h1-m: 2rem → 1.6rem`
  - `$lh-h1-m: 3rem → 2.6rem`
- **파일**: `frontend/assets/scss/base/_variables.scss`
  - `"xxs": 340px` 브레이크포인트 제거
- **파일**: `frontend/assets/scss/layout/_footer.scss`
  - `.footer` 레벨 `[data-theme]` 배경색 선언 제거
  - 모바일 하단 패딩 `16.2rem` 제거 → `padding: 1.2rem 1.2rem`
- **파일**: `frontend/assets/scss/layout/_header.scss`
  - 헤더 flexbox 방식 변경: `flexCenter(space-between)` → `display:flex; align-items:center; justify-content:center`
  - `max-width: 1920px` 제거 (헤더 루트에서)
  - `&__inner` 래퍼 추가: `max-width: 1868px; flexCenter(space-between)`
- **파일**: `frontend/components/layout/Header.vue`
  - 템플릿에 `<div class="header__inner">` 래퍼 추가 (로고~nav 전체 감쌈)

### 5. 페이지 분리 버그 수정
- 원인: body overflow:hidden 제거 + .main height:auto 변경으로 페이지들이 세로로 쌓임
- 해결: body `overflow:hidden` 복구, `.main` 다시 `height:100dvh; overflow-y:auto` 복구
- 파일: `frontend/assets/scss/base/_reset.scss`, `frontend/assets/scss/pages/main.scss`

### 6. 인트로 페이지 매번 표시
- 파일: `frontend/middleware/intro.global.js`, `frontend/pages/intro/index.vue`
- `localStorage` (6시간 유지) → `useState('entered_intro')` (메모리, 새로고침하면 리셋)
- 새로고침/탭 닫기 → 인트로 다시 표시
- 사이트 내 페이지 이동 → 인트로 안 나옴

---

## 미완료 / 테스트 필요

- [ ] 제스처바 숨김 iOS/Android 실기 테스트
- [ ] 인트로 새로고침 시 표시 확인
- [ ] 헤더 __inner 레이아웃 깨짐 여부 확인
- [ ] 배팅카트 sticky 동작 확인

---

## 주요 파일 경로

| 파일 | 설명 |
|------|------|
| `frontend/app.vue` | 제스처바 숨김 JS, 1px div |
| `frontend/middleware/intro.global.js` | 인트로 리다이렉트 로직 |
| `frontend/pages/intro/index.vue` | 인트로 START 버튼 |
| `frontend/assets/scss/pages/main.scss` | .main 레이아웃, 배팅카트 sticky |
| `frontend/assets/scss/base/_reset.scss` | body overflow, html 설정 |
| `frontend/assets/scss/layout/_header.scss` | 헤더 CSS |
| `frontend/assets/scss/layout/_footer.scss` | 푸터 CSS |
| `frontend/assets/scss/base/_typography.scss` | 폰트 크기 |
| `frontend/assets/scss/base/_variables.scss` | 브레이크포인트 |
| `frontend/components/layout/Header.vue` | 헤더 템플릿 |

---

## 서버 구조 (참고)

- btc-price (port 9089): Binance BTC 가격 수신
- btc-server (port 9090): 30초 게임 서버
- btc-one (port 9091): 60초 게임 서버
- socket (port 3001): 프론트 소켓 서버
- PM2로 관리, 58초에 동기화 시작

## 빌드 명령
```bash
cd C:\laragon\www\site_user\frontend && npm run build
```
