diff --git a/docs/history.md b/docs/history.md index 6962a91..846813c 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,7 +1,7 @@ # 의사결정 이력 ## 2026-04-02 v1.3.79 -- 관리자 우측 카피라이트처럼 “오른쪽 레일 전체의 바닥”에 붙어야 하는 정보는 관리자 사이드바 패널 내부에 두면 안 되고, 사이드바 본체와 형제로 분리한 뒤 레일 컨테이너 높이를 기준으로 배치하는 편이 맞다고 정리했다. +- 카피라이트처럼 앱 전체 브랜딩 성격의 footer는 관리자 텔레포트 안에 두기보다, `App.vue`의 공통 오른쪽 레일 footer로 두는 편이 위치도 안정적이고 화면 간 일관성도 높다고 정리했다. ## 2026-04-02 v1.3.78 - 축소 상태에서는 텍스트가 사라지므로 같은 `티어표 만들기` 계열 액션이라도 커스텀 제작과 템플릿 기반 제작을 아이콘으로 구분해 주는 편이 맞다고 정리했다. diff --git a/docs/todo.md b/docs/todo.md index ab3c4d8..22911a2 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -1,7 +1,7 @@ # 할 일 및 이슈 ## 단기 확인 -- 관리자 우측 카피라이트는 이제 오른쪽 레일 전체 기준 최하단에 붙도록 다시 정리했으므로, 관리자 각 탭에서 패널 내용 길이가 달라도 footer 위치가 흔들리지 않는지 한 번 더 QA한다. +- 우측 카피라이트는 이제 공통 오른쪽 레일 footer이므로, 관리자 화면뿐 아니라 홈/프로필 등 오른쪽 사이드가 보이는 화면에서도 같은 최하단 위치에 유지되는지 한 번 더 QA한다. - 왼쪽 레일 축소 상태의 하단 액션 아이콘은 홈과 게임 허브에서 서로 다른 아이콘을 쓰도록 나눴으므로, 실제로 두 문맥이 한눈에 구분되는지 한 번 더 QA한다. - 왼쪽 레일 축소 상태 최하단의 `티어표 만들기` 아이콘 버튼은 새로 추가했으므로, 홈/게임 허브에서 실제로 같은 위치 감각으로 동작하는지 한 번 더 QA한다. - 관리자 우측 카피라이트 문구는 사이드바 내부 최하단으로 다시 옮겼으므로, 실제 관리자 화면에서 스크롤/창 크기 변화에도 계속 보이는지 한 번 더 QA한다. diff --git a/docs/update.md b/docs/update.md index 2359381..18e9b06 100644 --- a/docs/update.md +++ b/docs/update.md @@ -1,8 +1,8 @@ # 업데이트 로그 ## 2026-04-02 v1.3.79 -- 관리자 우측 카피라이트는 관리자 사이드바 박스 안쪽 하단이 아니라, 오른쪽 레일 전체 기준 최하단에 고정되도록 구조를 다시 정리함. -- 이를 위해 관리자 텔레포트 출력은 `사이드바 박스`와 `카피라이트 footer`를 형제로 분리하고, 오른쪽 레일 로컬 루트는 전체 높이를 채우는 세로 플렉스 컨테이너로 바꿔 페이지마다 footer 위치가 흔들리지 않게 맞춤. +- 우측 카피라이트는 관리자 전용 레이아웃에서 분리해 앱 공통 `rightRail` footer로 올렸고, 이제 관리자 페이지뿐 아니라 오른쪽 사이드가 보이는 모든 화면에서 같은 최하단 위치에 표시됨. +- 따라서 관리자 패널 길이나 페이지별 로컬 사이드바 내용과 무관하게, 카피라이트는 항상 오른쪽 레일 전체 기준 바닥에 고정되는 공통 footer 역할로 정리됨. ## 2026-04-02 v1.3.78 - 왼쪽 레일 축소 상태의 하단 액션 아이콘은 문맥에 따라 구분되도록 바꿔, 홈의 `커스텀 티어표 만들기`는 `dashboard_customize` 아이콘을 쓰고 게임 허브의 일반 `티어표 만들기`만 `add_notes` 아이콘을 유지하도록 정리함. diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 1fcb290..50eb4e8 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -21,6 +21,7 @@ const route = useRoute() const router = useRouter() const auth = useAuthStore() const { toasts, dismissToast } = useToast() +const RIGHT_RAIL_COPYRIGHT_URL = 'https://zenn.town/@murabito' const leftRailCollapsed = ref(false) const rightRailOpen = ref(true) @@ -628,6 +629,11 @@ function submitGlobalSearch() { +
@@ -1200,13 +1206,31 @@ function submitGlobalSearch() { } .rightRail__bottom { - display: flex; - align-items: flex-end; - justify-content: flex-end; + margin-top: auto; + display: grid; gap: 10px; padding-top: 12px; } +.rightRail__footer { + padding: 0 4px 2px; + font-size: 9px; + line-height: 1.4; + text-align: center; + color: var(--theme-text-faint); + opacity: 0.72; +} + +.rightRail__footer a { + color: #00ffff; + text-decoration: none; +} + +.rightRail__footer a:hover { + color: #00ffff; + text-decoration: underline; +} + .settingsThemePanel { display: grid; gap: 10px; diff --git a/frontend/src/views/AdminView.vue b/frontend/src/views/AdminView.vue index 52364c2..cf8eb50 100644 --- a/frontend/src/views/AdminView.vue +++ b/frontend/src/views/AdminView.vue @@ -26,7 +26,6 @@ const router = useRouter() const globalRightRailOpen = inject('rightRailOpen', ref(true)) const localRightRailTarget = inject('localRightRailTarget', '#local-right-rail-root') const isAdmin = computed(() => !!auth.user?.isAdmin) -const ADMIN_COPYRIGHT_URL = 'https://zenn.town/@murabito' const activeTab = ref('featured') const tierlistsMode = ref('requests') @@ -2197,8 +2196,7 @@ function userAvatarFallback(user) {