diff --git a/docs/todo.md b/docs/todo.md index a8c36c4..11dfac7 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -16,5 +16,6 @@ - 게임/이미지/티어표 삭제 후 복구 또는 수정 이력 관리 기능을 추가한다. - 자동 테스트와 최소한의 배포 체크리스트를 만든다. - 관리자용 커스텀 아이템 승인/복제, 아이템 정렬 UI를 추가한다. +- 홈 화면 게임 카드와 `직접 티어표 만들기` 카드의 노출 순서를 관리자가 직접 조정할 수 있는 정렬 기능을 추가한다. - 회원 검색/필터, 일괄 권한 변경 같은 관리 보조 기능을 추가한다. - 티어 행 프리셋 저장, 색상 관리, 행 복제 같은 고급 편집 기능을 추가한다. diff --git a/docs/update.md b/docs/update.md index 56398a2..b3f9163 100644 --- a/docs/update.md +++ b/docs/update.md @@ -1,5 +1,10 @@ # 업데이트 로그 +## 2026-03-19 v0.1.20 +- **게임 선택 카드 순서 조정**: 홈 화면에서 일반 게임 카드를 먼저 보여주고 `직접 티어표 만들기` 카드는 마지막에 배치 +- **게임 카드 3열 레이아웃**: PC 기준 게임 선택 화면 카드를 3열로 재구성하고, 썸네일을 16:9 비율로 통일 +- **공개 티어표 카드 3열 레이아웃**: 게임 허브의 공개 티어표 목록도 PC 기준 3열 카드형으로 재배치하고 태블릿/모바일에서는 자동 줄바꿈되도록 조정 + ## 2026-03-19 v0.1.19 - **에디터 저장 영역 재정렬**: 공개 기본값을 `ON`으로 바꾸고, 액션 영역을 `이미지 다운로드 / 삭제 / 공개 ON·OFF / 저장` 흐름으로 재배치 - **에디터 삭제 진입점 추가**: 기존 티어표는 편집 화면에서 바로 삭제할 수 있도록 버튼을 추가 diff --git a/frontend/src/views/GameHubView.vue b/frontend/src/views/GameHubView.vue index 00696ef..0393468 100644 --- a/frontend/src/views/GameHubView.vue +++ b/frontend/src/views/GameHubView.vue @@ -148,17 +148,22 @@ function openTierList(id) { } .list { display: grid; - gap: 10px; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 14px; } .row { text-align: left; - padding: 12px; - border-radius: 14px; + padding: 14px; + border-radius: 16px; border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(255, 255, 255, 0.03); + background: rgba(255, 255, 255, 0.04); color: rgba(255, 255, 255, 0.92); cursor: pointer; width: 100%; + display: grid; + gap: 10px; + align-content: start; + min-height: 168px; } .row:hover { background: rgba(255, 255, 255, 0.05); @@ -166,13 +171,13 @@ function openTierList(id) { .row__title { font-weight: 800; min-width: 0; + font-size: 18px; + line-height: 1.35; } .row__head { - display: flex; + display: grid; gap: 12px; - align-items: center; - justify-content: space-between; - flex-wrap: wrap; + align-content: start; } .row__author { display: inline-flex; @@ -198,7 +203,17 @@ function openTierList(id) { } .row__meta { opacity: 0.78; - margin-top: 6px; font-size: 13px; + margin-top: auto; +} +@media (max-width: 1100px) { + .list { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } +} +@media (max-width: 720px) { + .list { + grid-template-columns: 1fr; + } } diff --git a/frontend/src/views/HomeView.vue b/frontend/src/views/HomeView.vue index 1dee0b6..25074c9 100644 --- a/frontend/src/views/HomeView.vue +++ b/frontend/src/views/HomeView.vue @@ -10,7 +10,7 @@ const auth = useAuthStore() const items = ref([]) const error = ref('') -const games = computed(() => items.value) +const games = computed(() => items.value.filter((item) => item.id !== 'freeform')) onMounted(async () => { try { @@ -50,13 +50,6 @@ function thumbUrl(g) {
{{ error }}
- +
@@ -83,7 +83,7 @@ function thumbUrl(g) { } .grid { display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); + grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; margin-top: 14px; } @@ -115,7 +115,7 @@ function thumbUrl(g) { } .thumbWrap { width: 100%; - height: 140px; + aspect-ratio: 16 / 9; border-radius: 14px; border: 1px solid rgba(255, 255, 255, 0.12); background: rgba(0, 0, 0, 0.18); @@ -154,4 +154,9 @@ function thumbUrl(g) { grid-template-columns: 1fr; } } +@media (min-width: 721px) and (max-width: 1100px) { + .grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } +}