이 문서는 MOBA Esports Manager Lite의 UI 작업 기준을 모아둔 디자인 규약이다.
새 화면을 만들거나 기존 화면을 고칠 때는 이 문서를 먼저 확인한다. docs/ui-design-decisions.md가 지금까지의 UI 결정 기록이라면, 이 문서는 앞으로의 작업에서 지켜야 할 기본 원칙이다.
MOBA Esports Manager Lite는 League of Legends e스포츠 팀을 운영하는 매니지먼트 게임이다. UI는 화려한 랜딩 페이지가 아니라, 플레이어가 시즌과 선수단을 빠르게 판단하는 운영 대시보드에 가깝다.
핵심 방향:
- Football Manager식 정보 밀도
- e스포츠 팀 운영실 같은 어두운 대시보드 톤
- 시즌 흐름, 다음 경기, 로스터 상태가 빠르게 읽히는 구조
- 장식보다 판단에 필요한 정보 우선
- 16:9 PC/노트북 화면 우선
- 모바일 세로 화면은 정식 지원 대상이 아님
화면은 “멋있지만 비어 있는 UI”보다 “조금 단단하고 읽기 쉬운 UI”를 우선한다.
UI를 수정할 때의 기본 원칙:
- 첫 화면에는 해당 메뉴에서 가장 중요한 정보가 보여야 한다.
- 전체 페이지 스크롤은 최소화하고, 필요한 목록만 패널 내부에서 스크롤한다.
- 텍스트는 카드 밖으로 밀리거나 잘리지 않아야 한다.
- 같은 종류의 버튼, 탭, 카드, 배지는 같은 톤과 위치 규칙을 따른다.
- 기능 설명 문구를 과하게 늘어놓지 않는다.
- 큰 화면을 무조건 카드로 감싸지 않는다.
- 카드 안에 또 카드가 들어가는 중첩 카드 구조는 피한다.
- 사용자가 클릭해야 하는 주요 행동은 명확한 버튼으로 둔다.
- 단순 이동성 영역은 카드 전체 클릭을 허용해도 된다.
- 신규 색상은 즉흥적으로 추가하지 않고 기존 색상 체계 안에서 고른다.
AI 에이전트가 UI 작업을 할 때:
- 먼저 이 문서와
docs/ui-design-decisions.md를 확인한다. - 화면을 실제 브라우저에서 열어 16:9 기준으로 확인한다.
- 가능하면 스크린샷을 남기고, 텍스트 겹침/잘림/과도한 빈 공간을 확인한다.
- CSS 색상 하드코딩을 추가하기보다 기존 변수화 후보를 고려한다.
기본 앱 프레임:
- 좌측 사이드바
- 상단 헤더
- 우측 상단 진행 버튼
- 중앙 콘텐츠
- 메뉴별 하위 탭 또는 하위 네비게이션
레이아웃 기준:
- 기본 목표 해상도는 1280x720 이상 16:9 화면이다.
- 1440x900 화면에서도 과도하게 늘어지는 카드가 없어야 한다.
- 중앙 콘텐츠는 메뉴별로 넓게 쓰되, 가로로 긴 단일 박스가 반복되는 구조는 피한다.
- 화면이 길어질 때는 정보 우선순위를 정해서 접거나, 탭을 분리하거나, 카드 밀도를 조정한다.
- 반복 아이템은 grid 또는 list로 배치하고, 아이템 하나만 있을 때 지나치게 길게 늘어나지 않게 한다.
- 대시보드 화면은 한눈에 들어오는 압축성을 우선한다.
- 데이터가 많은 화면은 스크롤이 생겨도 괜찮지만, 스크롤 영역이 어디인지 명확해야 한다.
공식 화면군:
| 화면군 | 기준 | 정책 |
|---|---|---|
| 모바일 세로/소형 화면 | 폭 900px 미만 또는 세로 태블릿 | 정식 지원 대상이 아니며 작은 화면 안내 오버레이를 표시한다. |
| 태블릿 가로/소형 노트북 | 1024px 이상 가로 화면 | 핵심 정보가 잘리지 않는 최소 호환 영역으로 본다. |
| PC 기본 검증 | 1280x720 | 모든 주요 UI 이슈의 1차 완료 기준이다. |
| PC 확장 검증 | 1440x900 | 16:9 stage와 상하 레터박스 안에서 카드가 의미 없이 늘어나지 않는지 확인하는 2차 기준이다. |
| 더 넓은 PC 화면 | 1440px 초과 | 16:9 stage를 유지하고 남는 좌우 또는 상하 공간은 레터박스로 둔다. |
PC 화면 정책:
- 모든 PC 화면비를 개별 대응하지 않는다.
- 게임 화면은 전역 16:9 stage 안에서 렌더링한다.
- 기준 화면비와 다른 화면에서는 상하 또는 좌우 레터박스를 남긴다.
- 기준보다 넓은 stage 안에서는 카드 하나를 무작정 늘리지 않고, 요약 패널/목록/상세 패널로 폭을 나눈다.
- 기준보다 좁지만 작은 화면 안내 대상이 아닌 경우에는 1열 fallback으로 정보 잘림을 막는다.
- 게임 내부 모달과 진행 오버레이는 stage 안에서 뜨고, 작은 화면 안내 오버레이만 브라우저 전체를 덮는다.
권장 패턴:
- 요약 정보: 2~5개 작은 패널
- 목록: 일정/메시지/선수/팀 단위의 반복 카드
- 세부 정보: 선택된 항목의 오른쪽 또는 아래쪽 상세 패널
- 대회/브래킷: 넓은 패널 1개 안에 흐름을 표시
피해야 할 패턴:
- 의미 없는 16:9 와이드 박스
- 내부 정보는 적은데 카드 높이만 큰 패널
- 한 줄 버튼 하나 때문에 하단이 길어지는 카드
- 같은 정보가 홈, 대회, 상세 화면에 중복 표시되는 구조
현재 기본 테마는 다크 테마이다.
현재 톤:
- 배경: 어두운 네이비/블랙 계열
- 패널: 배경보다 조금 밝은 네이비 계열
- 테두리: 낮은 대비의 블루그레이
- 주요 강조: 보라/분홍 계열
- 성공: 초록 계열
- 경고: 노랑/주황 계열
- 위험/패배: 빨강 계열
색상 사용 규칙:
- 승리/성공은 초록 계열
- 패배/위험은 빨강 계열
- 중요 알림은 보라/분홍 또는 노랑 계열
- 비활성/대기 상태는 블루그레이 계열
- 사용자 팀 하이라이트는 강하지 않게, 테두리나 얇은 accent로 표시한다.
- 배경색을 화면마다 새로 만들지 않는다.
향후 테마화를 위해 신규 CSS는 가능한 한 아래 의미를 가진 토큰으로 옮길 수 있게 작성한다.
--color-bg;
--color-surface;
--color-surface-raised;
--color-border;
--color-text;
--color-muted;
--color-accent;
--color-accent-strong;
--color-success;
--color-warning;
--color-danger;아직 모든 CSS가 토큰화되어 있지는 않다. 새 작업에서는 색상 하드코딩을 늘리기보다 기존 색상과 의미를 맞추고, 큰 리팩터링 시점에 토큰으로 옮긴다.
텍스트 규칙:
- 제목은 짧고 명확하게 쓴다.
- 화면 첫 H1/H2는 메뉴명이나 실제 대상명을 우선한다.
- 설명 문구는 한두 문장 안에서 끝낸다.
- 같은 카드 안에서 숫자, 날짜, 상태값은 짧은 라벨과 함께 표시한다.
- 작은 보조 문구는 흐린 색으로 표시하되, 핵심 값보다 먼저 눈에 띄지 않게 한다.
피해야 할 표현:
- 게임 규칙과 무관한 장식 문구
- 선수 커리어/팀 역사에서 평가성 문장을 길게 덧붙이는 방식
- 카드마다 반복되는 긴 설명
- 영어 UI 버튼이 섞이는 상태
버튼, 탭, 주요 상태값은 가능하면 한국어로 표시한다. 실제 대회명, 팀명, 선수명은 프로젝트의 데이터 정책을 따른다.
- 주요 행동은 명확한 텍스트 버튼으로 둔다.
- 같은 화면에서 primary 버튼은 1~2개 이하로 유지한다.
- 위험 행동은 빨강 계열과 확인 단계를 사용한다.
- 아이콘만 있는 버튼은 의미가 분명할 때만 사용한다.
- 하위 메뉴 전환은 탭을 사용한다.
- 탭 이름은 짧게 쓴다.
- 현재 선택된 탭은 테두리, 배경, 색상으로 명확히 구분한다.
- 한 화면에 탭이 너무 많아지면 기능을 다시 묶는다.
- 카드는 반복 아이템, 모달, 선택 가능한 항목에 주로 사용한다.
- 큰 섹션 전체를 카드로 겹겹이 감싸지 않는다.
- 카드 radius는 작게 유지한다.
- 카드 내부 여백은 정보 밀도에 맞게 조정한다.
- 하나의 카드가 화면 너비 전체로 과도하게 늘어지면 grid 폭 제한을 둔다.
- 순위표와 일정은 표/리스트의 읽기 흐름을 우선한다.
- 내 팀은 과하지 않게 하이라이트한다.
- 승/패/대기 상태는 색상과 텍스트를 함께 사용한다.
- 필터와 탭은 목록 위에 가깝게 배치한다.
- 최초 안내, 확인, 세부 설정처럼 집중이 필요한 경우에만 사용한다.
- 모달은 닫기 버튼이 명확해야 한다.
- 안내 모달은 한 화면에 너무 많은 규칙을 넣지 않는다.
- 반복 노출되는 모달은 설정에서 제어 가능해야 한다.
홈은 현재 상황을 빠르게 판단하는 화면이다.
보여줄 것:
- 현재 날짜
- 다음 경기 또는 최근 경기
- 중요한 메시지 1개
- 선발 로스터 또는 로스터 바로가기
- 경기 준비 상태
피할 것:
- 특정 대회 화면에서만 의미 있는 세부 지표
- 홈에서 바로 판단하기 어려운 긴 순위표
- 카드 하단 정보가 첫 화면 아래로 밀리는 배치
메시지함은 너무 많은 알림을 쌓는 공간이 아니다. 플레이어가 확인할 가치가 있는 요약과 중요한 이벤트를 우선한다.
원칙:
- 주간 리포트와 요약 메시지를 활용한다.
- 무관한 선수 이적 소식은 노출하지 않는다.
- 메시지에는 필요한 경우 관련 메뉴로 이동하는 버튼을 둔다.
- 긴 본문은 리포트형 구조로 나눈다.
- 같은 문구가 반복되지 않게 변주한다.
로스터는 선수 상태를 빠르게 비교하는 화면이다.
원칙:
- 1군 선발, 1군 후보, 아카데미의 역할이 명확해야 한다.
- 카드가 하나만 있어도 지나치게 길게 늘어나지 않게 한다.
- 사진, 이름, 포지션, 평가, 상태값이 잘리지 않아야 한다.
- 드래그 조작과 클릭 조작이 충돌하지 않아야 한다.
전략/훈련은 경기 전 준비 공간이다.
하위 메뉴:
- 상대 리포트
- 주간 계획
- 전략
- 스크림
원칙:
- 상대 리포트는 상대 리포트 메뉴에만 둔다.
- 전략 화면은 실제 전략 선택과 비교에 집중한다.
- 스크림은 일정 요청/진행/결과 확인이 분리되어야 한다.
- 결과 숫자를 과도하게 노출하기보다 판단 가능한 등급과 설명을 우선한다.
대회 화면은 시즌 흐름을 읽는 화면이다.
원칙:
- 대회명, 현재 단계, 일정, 순위표, 토너먼트 흐름을 분리한다.
- 탭 이름은 한국어로 통일한다.
- 토너먼트는 경기 흐름이 왼쪽에서 오른쪽으로 읽혀야 한다.
- 비어 있는 슬롯도 왜 비어 있는지 설명한다.
- 브래킷은 지나친 빈 공간 없이 압축하되, 대진 관계가 흐트러지면 안 된다.
스토브리그는 계약 판단 화면이다.
원칙:
- 1군 5인 구성 우선이라는 게임 규칙을 명확히 안내한다.
- 2군은 선택 영입이며 부족 인원은 자동 보충된다는 사실을 알려준다.
- 예산, 요구액, 역할, 확정 대기 상태가 한눈에 보여야 한다.
- 이적 로그는 읽기 쉽고, 불필요한 내부 표현을 노출하지 않는다.
구단 정보는 다른 팀을 이해하는 화면이다.
원칙:
- 팀 목록은 10개 팀의 상대적 위치와 전력 비교가 읽혀야 한다.
- 팀 상세는 로스터, 역사, 우승 기록을 분리한다.
- 팀 역사에는 잡다한 하위 분류보다 간결한 기록 설명을 우선한다.
- 과거 팀명/삼성 시절 기록처럼 필요한 맥락은 우승 기록 옆에 짧게 표시한다.
이미지가 필요한 화면:
- 선수 카드
- 선수 프로필
- 팀 상세
- 구단 정보
원칙:
- 선수 사진은 가능한 최신 시즌 기준으로 맞춘다.
- 실제 이미지 URL은 데이터로 관리한다.
- 공개 저장소에 저작권 리스크가 있는 이미지 파일을 직접 포함하지 않는다.
- 로고는 흰 박스 안에서 중앙 정렬되어야 한다.
- 로고 크기는 팀마다 크게 차이나지 않도록 보정한다.
커스텀 테마와 에셋 전략은 docs/custom-theme.md를 따른다.
상태는 색상만으로 전달하지 않는다.
권장:
- 승리: 색상 +
승리 - 패배: 색상 +
패배 - 대기: 색상 +
대기 - 중요: 색상 +
중요 - 비활성: 흐린 색 + 비활성 설명
버튼과 클릭 가능한 카드:
- 클릭 가능한 요소는 hover/focus 상태가 있어야 한다.
- 비활성 상태는 클릭되지 않아야 하고, 이유가 짧게 보여야 한다.
- 날짜 선택처럼 선택 가능한 옵션은 가능/불가능 상태가 명확해야 한다.
나중에 화이트/블랙/다크 모드 또는 전면 디자인 변경을 하려면 아래 순서로 진행한다.
- 전역 CSS 색상을 의미 기반 토큰으로 정리한다.
AppShell, 버튼, 카드, 탭, 모달부터 토큰을 적용한다.- 홈, 로스터, 대회, 스토브리그 같은 대형 화면의 하드코딩 색상을 줄인다.
- 앱 루트에
data-theme속성을 붙인다. - 설정 메뉴에서
다크 / 라이트 / 시스템 기본값을 선택할 수 있게 한다. - 16:9 스크린샷으로 주요 화면을 비교 검증한다.
테마화 작업은 기능 구현과 섞기보다 별도 이슈 또는 epic으로 다룬다.
UI 변경 후 확인할 것:
- 1280x720에서 첫 화면 핵심 정보가 보이는가
- 1440x900에서 카드가 의미 없이 늘어나지 않는가
- 태블릿 가로/소형 노트북 영역에서 텍스트와 버튼이 잘리지 않는가
- 모바일 세로/소형 화면에서는 작은 화면 안내 오버레이가 정상 표시되는가
- 텍스트가 잘리거나 겹치지 않는가
- 전체 페이지 스크롤이 과하게 생기지 않는가
- 내부 스크롤 영역이 명확한가
- 버튼과 탭의 선택 상태가 분명한가
- 내 팀 하이라이트가 과하지 않은가
- 승리/패배/대기/중요 상태가 색상과 텍스트로 함께 전달되는가
- 신규 UI가 기존 화면의 톤과 어울리는가
- 필요하면
docs/qa-screenshots/아래에 스크린샷을 저장했는가
docs/ui-design-decisions.md: 지금까지의 UI 결정 기록docs/custom-theme.md: 커스텀 테마와 에셋 전략docs/architecture.md: 컴포넌트와 도메인 구조docs/risks-and-ai-workflow.md: AI 협업과 UI 검증 리스크