릴리스: v1.2.16 메인 화면 사이드와 헤더 단순화

This commit is contained in:
2026-03-30 17:11:10 +09:00
parent adc697eb13
commit 21963af888
6 changed files with 19 additions and 176 deletions

View File

@@ -1,5 +1,9 @@
# 의사결정 이력
## 2026-03-30 v1.2.16
- 홈 화면은 이동 경로가 이미 좌측/우측 사이드에 충분히 있으므로, 중앙 바디 상단에 상태 카드와 중복 버튼을 다시 두기보다 본문은 게임 카드에만 집중시키는 편이 더 낫다고 정리했다.
- 오른쪽 사이드도 정보가 막막하다고 해서 임시 카드를 많이 넣기보다, 우선 핵심 CTA 하나만 남기고 나중에 필요한 항목만 추가하는 편이 시안과 운영 흐름 모두에 더 적합하다고 판단했다.
## 2026-03-30 v1.2.15
- 리디자인 기준 구조는 화면마다 달라지면 안 되므로, 홈에서 보이는 `좌측 레일 / 중앙 / 우측 레일` 3단 셸을 일반 페이지 공통 뼈대로 고정하고 안쪽 콘텐츠만 바꾸는 방식으로 정리하기로 했다.
- 에디터와 관리자의 우측 패널도 예외적인 바디 내부 aside가 아니라 공통 셸의 세 번째 컬럼을 공유해야 전체 제품 구조가 일관된다고 판단했다.

View File

@@ -35,6 +35,7 @@
- 현재 화면 문맥에 맞는 설명, 빠른 액션, 계정 상태 같은 보조 정보를 배치한다.
- 에디터/관리자 세부 옵션은 후속 단계에서 이 패널로 점진 이관한다.
- 공통 토글 버튼으로 패널을 접으면 중앙 워크스페이스가 남는 공간을 확장 사용한다.
- 홈 화면 기준 우측 패널은 임시 정보 카드 여러 개보다 핵심 CTA 하나만 남겨, 시안처럼 단순한 보조 레일 역할을 우선 유지한다.
- 티어표 편집 화면
- 공통 우측 패널 대신 전용 로컬 편집 패널을 사용한다.
- 공통 `workspaceBody` 카드 컨테이너를 벗기고, 중앙 보드 영역은 메인 컬럼에, 우측 `320px` 편집 패널은 공통 셸의 세 번째 컬럼 aside에 배치한다.

View File

@@ -12,6 +12,7 @@
- 에디터 로컬 우측 패널은 공통 토글과 연결됐지만, 아직 완전한 피그마 수준의 패널 애니메이션과 내부 카드 재배치는 더 다듬을 필요가 있다.
- 에디터 우측 패널은 셸의 세 번째 컬럼으로 옮겼지만, 내부 카드 간격과 섹션 구분선은 아직 첨부 시안처럼 더 촘촘하게 정리할 필요가 있다.
- 공통 3단 셸 구조는 고정했지만, 관리자/에디터 우측 패널 내부에 아직 바디에 남아 있는 제어 요소를 더 옮겨야 한다.
- 홈 화면 우측 사이드는 CTA 하나만 남긴 상태이므로, 이후 필요할 때도 임시 정보 카드 다수를 다시 넣기보다 실제 필요한 기능만 선별해 추가해야 한다.
- 관리자 화면은 헤더 요약 통계와 카드 계층까지 정리됐지만, 아직 표준 SVG 아이콘 교체와 더 세밀한 상태 색상/선택 상태 표현은 남아 있다.
- 머티리얼 아이콘 SVG는 아직 임시 문자/배지 스타일로 대체된 부분이 있으므로, 최종 아이콘 에셋을 받아 반영하는 작업이 필요하다.
- 미사용 커스텀 이미지 일괄 삭제는 현재 "참조가 없는 항목" 기준이며, 보관 기간 정책 같은 운영 규칙은 아직 없다.

View File

@@ -1,5 +1,9 @@
# 업데이트 로그
## 2026-03-30 v1.2.16
- **메인 오른쪽 사이드 단순화**: 홈 화면 기준 오른쪽 컬럼의 컨텍스트/계정/점프 카드 3종을 제거하고, 시안에 맞춰 핵심 CTA 버튼만 남기는 구조로 단순화
- **홈 상단 중복 도구 제거**: 중앙 바디 상단에 추가돼 있던 `Visible Games`, `Account`, `즐겨찾기 보기`, `내 리스트 보기`, `커스텀 티어표 만들기` 도구 막대를 제거해, 왼쪽/오른쪽 사이드와 중복되는 이동 요소를 정리
## 2026-03-30 v1.2.15
- **3단 셸 구조 고정**: 홈 화면처럼 `왼쪽 사이드 | 중앙 컨텐츠 | 오른쪽 사이드` 3단 레이아웃을 모든 일반 페이지의 공통 구조로 고정하고, 페이지 이동 시 오른쪽 컬럼이 사라졌다 나타나는 구조를 제거
- **에디터/관리자 우측 패널 공통 컬럼 통합**: 티어표 편집과 관리자 화면의 로컬 우측 패널을 Teleport로 공통 오른쪽 컬럼에 배치해, 바디 내부 2단 레이아웃 대신 셸의 세 번째 컬럼을 공유하도록 재정리

View File

@@ -294,41 +294,11 @@ async function logout() {
<aside class="rightRail" :class="{ 'rightRail--closed': !rightRailOpen }" :aria-hidden="!rightRailOpen">
<template v-if="!usesLocalRightRail">
<div class="rightRail__top">
<button class="ghostIcon ghostIcon--iconOnly" type="button" aria-label="상태">
<img :src="iconGridView" alt="" />
</button>
</div>
<section class="contextCard">
<div class="contextCard__label">Context</div>
<h2 class="contextCard__title">{{ routeMeta.contextTitle }}</h2>
<p class="contextCard__text">{{ routeMeta.contextText }}</p>
<button class="contextCard__action" type="button" @click="routeMeta.action">
<section class="rightRailAction">
<button class="rightRailAction__button" type="button" @click="routeMeta.action">
{{ routeMeta.actionLabel }}
</button>
</section>
<section class="contextCard">
<div class="contextCard__label">Account</div>
<div class="contextStat">
<span class="contextStat__name">현재 사용자</span>
<span class="contextStat__value">{{ accountName }}</span>
</div>
<div class="contextStat">
<span class="contextStat__name">권한</span>
<span class="contextStat__value">{{ isAdmin ? 'Admin' : auth.user ? 'Member' : 'Guest' }}</span>
</div>
</section>
<section class="contextCard contextCard--links">
<div class="contextCard__label">Jump</div>
<button class="contextLink" type="button" @click="$router.push('/')">
<svg viewBox="0 0 24 24" aria-hidden="true"><path :d="railGlyph('link')" /></svg>
<span>게임 목록으로</span>
</button>
<button v-if="auth.user" class="contextLink" type="button" @click="$router.push('/me')">
<svg viewBox="0 0 24 24" aria-hidden="true"><path :d="railGlyph('link')" /></svg>
<span> 티어표 열기</span>
</button>
</section>
</template>
<div id="local-right-rail-root" class="localRightRailRoot"></div>
</aside>
@@ -733,83 +703,23 @@ async function logout() {
gap: 18px;
}
.localRightRailRoot {
min-height: calc(100vh - 40px);
}
.contextCard {
.rightRailAction {
display: grid;
gap: 12px;
padding: 16px;
border-radius: 18px;
border: 1px solid rgba(255, 255, 255, 0.08);
background: rgba(255, 255, 255, 0.03);
}
.contextCard__label {
font-size: 12px;
color: rgba(255, 255, 255, 0.42);
text-transform: uppercase;
letter-spacing: 0.08em;
}
.contextCard__title {
margin: 0;
font-size: 22px;
line-height: 1.2;
}
.contextCard__text {
margin: 0;
font-size: 14px;
line-height: 1.6;
color: rgba(255, 255, 255, 0.66);
}
.contextCard__action {
.rightRailAction__button {
width: 100%;
padding: 12px 14px;
border-radius: 12px;
border: 0;
background: #4b7fe9;
border-radius: 14px;
border: 1px solid rgba(77, 127, 233, 0.96);
background: rgba(77, 127, 233, 0.88);
color: #fff;
font-weight: 800;
cursor: pointer;
}
.contextCard--links {
gap: 10px;
}
.contextLink {
width: 100%;
display: inline-flex;
align-items: center;
justify-content: space-between;
gap: 10px;
padding: 11px 12px;
border-radius: 12px;
border: 1px solid rgba(255, 255, 255, 0.08);
background: rgba(255, 255, 255, 0.03);
color: rgba(255, 255, 255, 0.86);
cursor: pointer;
}
.contextStat {
display: flex;
justify-content: space-between;
gap: 12px;
align-items: center;
}
.contextStat__name {
color: rgba(255, 255, 255, 0.56);
font-size: 13px;
}
.contextStat__value {
font-size: 14px;
font-weight: 700;
.localRightRailRoot {
min-height: calc(100vh - 40px);
}
.toastStack {

View File

@@ -33,22 +33,6 @@ function goFreeform() {
router.push('/editor/freeform/new')
}
function goFavorites() {
if (!auth.user) {
router.push('/login?redirect=/favorites')
return
}
router.push('/favorites')
}
function goMyLists() {
if (!auth.user) {
router.push('/login?redirect=/me')
return
}
router.push('/me')
}
function thumbUrl(g) {
if (!g.thumbnailSrc) return ''
return toApiUrl(g.thumbnailSrc)
@@ -63,19 +47,6 @@ function thumbUrl(g) {
<h1 class="dashboardHero__title">Game Library</h1>
<p class="dashboardHero__desc">자주 쓰는 게임 템플릿을 빠르게 고르고, 필요하면 바로 커스텀 티어표를 시작할 있어요.</p>
</div>
<div class="dashboardToolbar">
<div class="dashboardToolbar__stat">
<span class="dashboardToolbar__label">Visible Games</span>
<strong class="dashboardToolbar__value">{{ games.length }}</strong>
</div>
<div class="dashboardToolbar__stat">
<span class="dashboardToolbar__label">Account</span>
<strong class="dashboardToolbar__value">{{ auth.user ? 'Ready' : 'Guest' }}</strong>
</div>
<button class="dashboardToolbar__ghost" @click="goFavorites">{{ auth.user ? '즐겨찾기 보기' : '로그인 즐겨찾기' }}</button>
<button class="dashboardToolbar__ghost" @click="goMyLists">{{ auth.user ? ' 리스트 보기' : '로그인 리스트' }}</button>
<button class="customTierBtn" @click="goFreeform">{{ auth.user ? '+ 커스텀 티어표 만들기' : '+ 로그인 커스텀 티어표 만들기' }}</button>
</div>
</section>
<div v-if="error" class="error">{{ error }}</div>
@@ -130,54 +101,6 @@ function thumbUrl(g) {
line-height: 1.5;
max-width: 720px;
}
.dashboardToolbar {
display: flex;
gap: 10px;
align-items: center;
flex-wrap: wrap;
}
.dashboardToolbar__stat {
display: grid;
gap: 2px;
min-width: 112px;
padding: 12px 14px;
border-radius: 14px;
border: 1px solid rgba(255, 255, 255, 0.08);
background: rgba(255, 255, 255, 0.045);
}
.dashboardToolbar__label {
font-size: 11px;
color: rgba(255, 255, 255, 0.48);
text-transform: uppercase;
letter-spacing: 0.08em;
}
.dashboardToolbar__value {
font-size: 18px;
font-weight: 900;
}
.dashboardToolbar__ghost,
.customTierBtn {
padding: 12px 14px;
border-radius: 14px;
border: 1px solid rgba(255, 255, 255, 0.08);
background: rgba(255, 255, 255, 0.06);
color: rgba(255, 255, 255, 0.84);
font-weight: 700;
cursor: pointer;
transition:
transform 0.16s ease,
border-color 0.16s ease,
background 0.16s ease;
}
.dashboardToolbar__ghost:hover,
.customTierBtn:hover {
transform: translateY(-1px);
}
.customTierBtn {
background: rgba(77, 127, 233, 0.88);
border-color: rgba(77, 127, 233, 0.96);
color: #fff;
}
.libraryGrid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));