style(fe): align Page Header strictly with KBX UX Standard (Breadcrumb/Title on left, Help/AI on right)

This commit is contained in:
2026-08-15 22:32:58 +09:00
parent ea2f251fb8
commit 7ad5b96bf8
2 changed files with 21 additions and 17 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 78 KiB

+21 -17
View File
@@ -6,18 +6,22 @@ const showHelp = ref(false)
<template>
<section class="ks-page" :style="{ '--ks-aside-width': asideWidth ?? '22rem' }">
<header class="ks-page__header">
<div class="ks-page__title-box">
<div class="ks-page__breadcrumb">K-ArtSell &gt; Shadow Run Jobs</div>
<div class="ks-page__title-row">
<h1>{{ title }}</h1>
<button v-if="subtitle" class="ks-help-btn" :class="{ active: showHelp }" title="화면 설명 보기/닫기" aria-label="화면 설명 보기" @click="showHelp = !showHelp">
도움말
</button>
</div>
<p v-if="subtitle && showHelp" class="ks-page__subtitle">{{ subtitle }}</p>
<div class="ks-page__meta"><span v-if="status">상태: {{ status }}</span><span v-if="asOf">As-of: {{ asOf }}</span><span v-if="version">Version: {{ version }}</span></div>
<div class="ks-page__title-group">
<nav class="ks-page__breadcrumb" aria-label="Breadcrumb">K-ArtSell &gt; Shadow Run Jobs</nav>
<h1 class="ks-page__title">{{ title }}</h1>
</div>
<div class="ks-page__header-utilities">
<button v-if="subtitle" class="ks-help-btn" :class="{ active: showHelp }" title="도움말 보기/닫기" aria-label="도움말 보기" @click="showHelp = !showHelp">
도움말
</button>
<button type="button" class="ks-ai-btn" title="AI 업무 제안" aria-label="AI 제안">
🤖 AI 제안
</button>
</div>
</header>
<div v-if="subtitle && showHelp" class="ks-page__subtitle-box">
<p class="ks-page__subtitle">{{ subtitle }}</p>
</div>
<!-- Dedicated KBX Command Bar Row (§3, §5) -->
<div v-if="$slots.commandBar || $slots.actions" class="ks-page__command-bar" role="toolbar" aria-label="화면 주요 명령어">
<div class="ks-page__command-bar-group">
@@ -37,12 +41,13 @@ const showHelp = ref(false)
<style scoped>
.ks-page { width: 100%; max-width: var(--ks-content-max); margin: 0 auto; height: 100%; flex: 1; display: flex; flex-direction: column; gap: var(--ks-space-2); }
.ks-page__header { display: flex; align-items: center; justify-content: space-between; gap: var(--ks-space-4); flex-shrink: 0; min-height: 32px; border-bottom: 1px solid var(--ks-color-neutral-200); padding-bottom: var(--ks-space-2); }
.ks-page__title-box { display: flex; flex-direction: column; gap: 2px; }
.ks-page__title-group { display: flex; flex-direction: column; gap: 2px; }
.ks-page__breadcrumb { font-size: 11px; color: var(--ks-color-neutral-500); line-height: 14px; }
.ks-page__title-row { display: flex; align-items: center; gap: var(--ks-space-2); }
h1 { margin: 0; font-size: var(--ks-font-page); line-height: var(--ks-line-page); font-weight: 700; color: var(--ks-color-neutral-900); }
.ks-page__subtitle { margin: var(--ks-space-1) 0 0; color: var(--ks-color-neutral-600); font-size: var(--ks-font-body); padding: var(--ks-space-2); background: var(--ks-color-neutral-100); border-radius: var(--ks-radius-sm); border: 1px solid var(--ks-color-neutral-200); }
.ks-help-btn {
.ks-page__title { margin: 0; font-size: var(--ks-font-page); line-height: var(--ks-line-page); font-weight: 700; color: var(--ks-color-neutral-900); }
.ks-page__header-utilities { display: flex; align-items: center; gap: var(--ks-space-2); flex-shrink: 0; }
.ks-page__subtitle-box { margin: 0; }
.ks-page__subtitle { margin: 0; color: var(--ks-color-neutral-600); font-size: var(--ks-font-body); padding: var(--ks-space-2); background: var(--ks-color-neutral-100); border-radius: var(--ks-radius-sm); border: 1px solid var(--ks-color-neutral-200); }
.ks-help-btn, .ks-ai-btn {
border: 1px solid var(--ks-color-action);
background: #eff6ff;
border-radius: var(--ks-radius-sm);
@@ -56,13 +61,12 @@ h1 { margin: 0; font-size: var(--ks-font-page); line-height: var(--ks-line-page)
gap: 4px;
transition: all 0.15s ease;
}
.ks-help-btn:hover, .ks-help-btn.active {
.ks-help-btn:hover, .ks-help-btn.active, .ks-ai-btn:hover {
background: var(--ks-color-action);
color: #ffffff;
border-color: var(--ks-color-action);
box-shadow: 0 1px 3px rgba(37, 99, 235, 0.25);
}
.ks-page__meta { display: flex; gap: var(--ks-space-3); flex-wrap: wrap; margin-top: 2px; color: var(--ks-color-neutral-600); font-size: var(--ks-font-caption); }
.ks-page__command-bar {
display: flex;
align-items: center;