이벤트별 편집 상태 분리 + 라우트 분리, Pretendard 자체 호스팅
콘솔 카드를 눌러도 항상 같은 아젠다가 보였다 (FE-1)
StudioState에 편집 필드(title/venue/date/host/cap/engage/presetId/mode/iconSet/density/keyVisual/kvPattern/sessions)가 평평하게 있었다. 어느 이벤트를 눌러도 같은 값을 보여주는 구조였던 것 — 이 필드들을 EventDetail로 묶어서 EventItem이 갖도록 옮기고, editingId + patchEvent로 "현재 편집 중인 이벤트만" 갱신하도록 고쳤다. 이번에 "새 이벤트" 버튼도 처음으로 실제 events 배열에 새 항목을 만들게 됐다. D1 API 연동은 범위 밖으로 남기고 순수 클라이언트 리팩터로 끝냈다.
라우트 분리 (FE-2)
콘솔/에디터/리포트 3개 화면을 App Router 라우트(/console, /events/[id]/edit, /report)로 분리해서 딥링크가 가능해졌다. 뷰어는 백엔드에 slug 조회 API가 아직 없고 "행사 페이지는 관리자 화면 우측 미리보기로만 보여준다"는 결정이 있어서 라우트 없이 오버레이로 남겨뒀다. 상태는 StudioApp에서 StudioProvider(Context)로 끌어올려 레이아웃과 페이지가 공유하게 했고, 내비·헤더 셸은 StudioShell로 분리했다.
Pretendard 폰트는 CDN 대신 next/font/local로 자체 호스팅했다 — npm 패키지 전체가 아니라 가변 폰트 파일 하나(2.1MB)만 public/fonts에 커밋해서 의존성이 늘지 않는다.
같은 날, 프론트엔드 담당 역할과 BE 영역 미접근 원칙을 CLAUDE.local.md에 명시하고 gitignore에 등록했다 — 2인 협업에서 각자 영역을 코드베이스 차원에서도 분명히 해두고 싶었다.