diff --git a/frontend/components/pop/PopProductionPanel.tsx b/frontend/components/pop/PopProductionPanel.tsx index 6d61bd9b..ceb1d902 100644 --- a/frontend/components/pop/PopProductionPanel.tsx +++ b/frontend/components/pop/PopProductionPanel.tsx @@ -124,17 +124,17 @@ export function PopProductionPanel({ return (

점검 항목

-
-
-
- {formatDate(currentDateTime)} - - {formatTime(currentDateTime)} - +
+ {formatDate(currentDateTime)} + {formatTime(currentDateTime)}
diff --git a/frontend/components/pop/styles.css b/frontend/components/pop/styles.css index a12b80fa..c2913c8e 100644 --- a/frontend/components/pop/styles.css +++ b/frontend/components/pop/styles.css @@ -142,9 +142,10 @@ line-height: 1.5; color: rgb(var(--text-primary)); background: rgb(var(--bg-deepest)); - min-height: 100vh; - min-height: 100dvh; + height: 100vh; + height: 100dvh; overflow-x: hidden; + overflow-y: auto; -webkit-font-smoothing: antialiased; position: relative; } @@ -197,8 +198,7 @@ .pop-app { display: flex; flex-direction: column; - min-height: 100vh; - min-height: 100dvh; + min-height: 100%; padding: var(--spacing-sm); padding-bottom: calc(60px + var(--spacing-sm) + env(safe-area-inset-bottom, 0px)); } @@ -209,7 +209,9 @@ border: 1px solid rgb(var(--border)); border-radius: var(--radius-lg); margin-bottom: var(--spacing-sm); - position: relative; + position: sticky; + top: 0; + z-index: 100; overflow: hidden; } @@ -227,8 +229,8 @@ .pop-top-bar { display: flex; align-items: center; - padding: var(--spacing-sm) var(--spacing-md); - gap: var(--spacing-md); + padding: var(--spacing-xs) var(--spacing-sm); + gap: var(--spacing-sm); } .pop-top-bar.row-1 { @@ -243,8 +245,8 @@ .pop-datetime { display: flex; align-items: center; - gap: var(--spacing-sm); - font-size: var(--text-xs); + gap: var(--spacing-xs); + font-size: var(--text-2xs); } .pop-date { @@ -254,7 +256,7 @@ .pop-time { color: rgb(var(--neon-cyan)); font-weight: 700; - font-size: var(--text-sm); + font-size: var(--text-xs); } /* 생산유형 버튼 */ @@ -264,12 +266,12 @@ } .pop-type-btn { - padding: var(--spacing-xs) var(--spacing-md); + padding: 4px var(--spacing-sm); background: rgba(255, 255, 255, 0.03); border: 1px solid rgb(var(--border)); border-radius: var(--radius-md); color: rgb(var(--text-muted)); - font-size: var(--text-xs); + font-size: var(--text-2xs); font-weight: 500; cursor: pointer; transition: all var(--transition-fast); @@ -291,12 +293,13 @@ .pop-filter-btn { display: flex; align-items: center; - gap: var(--spacing-xs); - padding: var(--spacing-sm) var(--spacing-md); + gap: 2px; + padding: 4px var(--spacing-sm); background: rgba(255, 255, 255, 0.03); border: 1px solid rgb(var(--border)); border-radius: var(--radius-md); color: rgb(var(--text-secondary)); + font-size: var(--text-2xs); font-size: var(--text-xs); font-weight: 500; cursor: pointer; @@ -343,6 +346,9 @@ border-radius: var(--radius-lg); overflow: hidden; margin-bottom: var(--spacing-sm); + position: sticky; + top: 90px; + z-index: 99; } .pop-status-tab { @@ -395,7 +401,7 @@ /* ==================== 메인 콘텐츠 ==================== */ .pop-main-content { flex: 1; - overflow-y: auto; + min-height: 0; } .pop-work-list { @@ -675,6 +681,7 @@ align-items: center; gap: 4px; padding: 4px 8px; + font-size: var(--text-2xs); background: rgba(255, 255, 255, 0.03); border: 1px solid rgb(var(--border)); border-radius: var(--radius-sm); @@ -851,10 +858,10 @@ align-items: center; justify-content: center; gap: var(--spacing-sm); - padding: var(--spacing-sm) var(--spacing-lg); + padding: var(--spacing-md) var(--spacing-lg); border: 1px solid transparent; border-radius: var(--radius-md); - font-size: var(--text-xs); + font-size: var(--text-sm); font-weight: 600; cursor: pointer; transition: all var(--transition-fast); @@ -1105,8 +1112,9 @@ top: 0; right: 0; bottom: 0; + left: 0; width: 100%; - max-width: 600px; + max-width: none; background: rgb(var(--bg-primary)); display: flex; flex-direction: column; @@ -1133,11 +1141,29 @@ } .pop-slide-panel-title { - font-size: var(--text-lg); + font-size: var(--text-xl); font-weight: 700; color: rgb(var(--text-primary)); } +/* 슬라이드 패널 날짜/시간 */ +.pop-panel-datetime { + display: flex; + align-items: center; + gap: var(--spacing-sm); +} + +.pop-panel-date { + font-size: var(--text-sm); + color: rgb(var(--text-muted)); +} + +.pop-panel-time { + font-size: var(--text-base); + font-weight: 700; + color: rgb(var(--neon-cyan)); +} + .pop-badge { padding: 2px 8px; border-radius: var(--radius-full); @@ -1174,7 +1200,7 @@ .pop-work-steps-header { padding: var(--spacing-md); - font-size: var(--text-xs); + font-size: var(--text-sm); font-weight: 600; color: rgb(var(--text-muted)); border-bottom: 1px solid rgb(var(--border)); @@ -1239,7 +1265,7 @@ } .pop-work-step-name { - font-size: var(--text-xs); + font-size: var(--text-sm); font-weight: 500; color: rgb(var(--text-primary)); white-space: nowrap; @@ -1248,13 +1274,13 @@ } .pop-work-step-time { - font-size: var(--text-2xs); + font-size: var(--text-xs); color: rgb(var(--text-muted)); } .pop-work-step-status { - font-size: var(--text-2xs); - padding: 2px 6px; + font-size: var(--text-xs); + padding: 3px 8px; border-radius: var(--radius-sm); } @@ -1288,14 +1314,14 @@ } .pop-step-title { - font-size: var(--text-lg); + font-size: var(--text-xl); font-weight: 700; color: rgb(var(--text-primary)); margin-bottom: var(--spacing-xs); } .pop-step-description { - font-size: var(--text-sm); + font-size: var(--text-base); color: rgb(var(--text-muted)); } @@ -1311,20 +1337,20 @@ align-items: center; justify-content: center; gap: var(--spacing-sm); - padding: var(--spacing-md); + padding: var(--spacing-md) var(--spacing-lg); background: rgba(255, 255, 255, 0.03); border: 1px solid rgb(var(--border)); border-radius: var(--radius-md); color: rgb(var(--text-secondary)); - font-size: var(--text-sm); + font-size: var(--text-base); font-weight: 500; cursor: pointer; transition: all var(--transition-fast); } .pop-time-control-btn svg { - width: 16px; - height: 16px; + width: 20px; + height: 20px; } .pop-time-control-btn:hover:not(:disabled) { @@ -1358,7 +1384,7 @@ } .pop-step-form-title { - font-size: var(--text-sm); + font-size: var(--text-base); font-weight: 600; color: rgb(var(--text-primary)); margin-bottom: var(--spacing-md); @@ -1374,20 +1400,53 @@ .pop-form-label { display: block; - font-size: var(--text-xs); + font-size: var(--text-sm); font-weight: 500; color: rgb(var(--text-secondary)); margin-bottom: var(--spacing-xs); } +/* 체크박스 리스트 */ +.pop-checkbox-list { + display: flex; + flex-direction: column; + gap: var(--spacing-md); +} + +.pop-checkbox-label { + display: flex; + align-items: center; + gap: var(--spacing-sm); + font-size: var(--text-base); + color: rgb(var(--text-primary)); + cursor: pointer; +} + +.pop-checkbox { + width: 20px; + height: 20px; + accent-color: rgb(var(--neon-cyan)); + cursor: pointer; +} + +.pop-checkbox:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.pop-checkbox-label:has(.pop-checkbox:disabled) { + opacity: 0.6; + cursor: not-allowed; +} + .pop-input { width: 100%; - padding: var(--spacing-sm) var(--spacing-md); + padding: var(--spacing-md); background: rgba(var(--bg-tertiary), 0.5); border: 1px solid rgb(var(--border)); border-radius: var(--radius-md); color: rgb(var(--text-primary)); - font-size: var(--text-sm); + font-size: var(--text-base); transition: all var(--transition-fast); } @@ -1441,12 +1500,12 @@ } .pop-work-order-info-item .label { - font-size: var(--text-2xs); + font-size: var(--text-xs); color: rgb(var(--text-muted)); } .pop-work-order-info-item .value { - font-size: var(--text-sm); + font-size: var(--text-base); font-weight: 500; color: rgb(var(--text-primary)); } @@ -1634,9 +1693,9 @@ /* 헤더 인라인 테마 토글 버튼 */ .pop-theme-toggle-inline { - width: 32px; - height: 32px; - margin-left: var(--spacing-sm); + width: 26px; + height: 26px; + margin-left: var(--spacing-xs); border-radius: var(--radius-md); background: rgba(255, 255, 255, 0.05); border: 1px solid rgb(var(--border)); @@ -1656,8 +1715,8 @@ } .pop-theme-toggle-inline svg { - width: 18px; - height: 18px; + width: 14px; + height: 14px; } /* ==================== 아이콘 버튼 ==================== */ @@ -1722,7 +1781,144 @@ } .pop-slide-panel-content { - max-width: 100%; + max-width: none; + left: 0; + } +} + +/* 태블릿 이상 (768px+) - 폰트 크기 증가 */ +@media (min-width: 768px) { + /* 상태 탭 sticky 위치 조정 */ + .pop-status-tabs { + top: 100px; + } + + /* 헤더 */ + .pop-top-bar { + font-size: var(--text-sm); + padding: var(--spacing-sm) var(--spacing-md); + gap: var(--spacing-md); + } + + .pop-datetime { + font-size: var(--text-xs); + } + + .pop-time { + font-size: var(--text-sm); + } + + .pop-type-btn { + font-size: var(--text-xs); + padding: var(--spacing-xs) var(--spacing-md); + } + + .pop-filter-btn { + font-size: var(--text-xs); + padding: var(--spacing-xs) var(--spacing-md); + } + + .pop-theme-toggle-inline { + width: 32px; + height: 32px; + } + + .pop-theme-toggle-inline svg { + width: 16px; + height: 16px; + } + + .pop-equipment-name, + .pop-process-name { + font-size: var(--text-sm); + } + + /* 상태 탭 */ + .pop-status-tab-label { + font-size: var(--text-base); + } + + .pop-status-tab-count { + font-size: var(--text-xl); + } + + .pop-status-tab-detail { + font-size: var(--text-sm); + } + + /* 작업 카드 */ + .pop-work-card-id { + font-size: var(--text-base); + } + + .pop-work-card-item { + font-size: var(--text-lg); + } + + .pop-work-card-spec { + font-size: var(--text-base); + } + + .pop-work-card-info-item .label { + font-size: var(--text-sm); + } + + .pop-work-card-info-item .value { + font-size: var(--text-base); + } + + /* 작업 카드 내부 - 태블릿 */ + .pop-work-number { + font-size: var(--text-base); + } + + .pop-work-status { + font-size: var(--text-xs); + padding: 3px 10px; + } + + .pop-work-info-label { + font-size: var(--text-xs); + } + + .pop-work-info-value { + font-size: var(--text-sm); + } + + .pop-process-bar-label, + .pop-process-bar-count { + font-size: var(--text-xs); + } + + .pop-process-chip { + font-size: var(--text-xs); + padding: 5px 10px; + } + + .pop-progress-text, + .pop-progress-percent { + font-size: var(--text-sm); + } + + .pop-btn-sm { + font-size: var(--text-xs); + padding: var(--spacing-xs) var(--spacing-md); + } + + /* 공정 타임라인 */ + .pop-process-step-label { + font-size: var(--text-sm); + } + + /* 하단 네비게이션 */ + .pop-nav-btn { + font-size: var(--text-base); + } + + /* 배지 */ + .pop-badge { + font-size: var(--text-sm); + padding: 4px 10px; } } @@ -1734,6 +1930,11 @@ padding-bottom: calc(64px + var(--spacing-lg) + env(safe-area-inset-bottom, 0px)); } + /* 상태 탭 sticky 위치 조정 - 데스크톱 */ + .pop-status-tabs { + top: 110px; + } + .pop-work-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(400px, 1fr)); @@ -1741,11 +1942,217 @@ } .pop-slide-panel-content { - max-width: 700px; + max-width: none; + left: 0; } .pop-work-steps-sidebar { - width: 240px; + width: 280px; + } + + /* 데스크톱 (1024px+) - 폰트 크기 더 증가 */ + + /* 헤더 */ + .pop-top-bar { + font-size: var(--text-base); + padding: var(--spacing-sm) var(--spacing-lg); + } + + .pop-datetime { + font-size: var(--text-sm); + } + + .pop-time { + font-size: var(--text-base); + } + + .pop-type-btn { + font-size: var(--text-sm); + padding: var(--spacing-sm) var(--spacing-md); + } + + .pop-filter-btn { + font-size: var(--text-sm); + padding: var(--spacing-sm) var(--spacing-md); + } + + .pop-theme-toggle-inline { + width: 36px; + height: 36px; + } + + .pop-theme-toggle-inline svg { + width: 18px; + height: 18px; + } + + .pop-equipment-name, + .pop-process-name { + font-size: var(--text-base); + } + + /* 상태 탭 */ + .pop-status-tab-label { + font-size: var(--text-lg); + } + + .pop-status-tab-count { + font-size: var(--text-2xl); + } + + .pop-status-tab-detail { + font-size: var(--text-base); + } + + /* 작업 카드 */ + .pop-work-card-id { + font-size: var(--text-lg); + } + + .pop-work-card-item { + font-size: var(--text-xl); + } + + .pop-work-card-spec { + font-size: var(--text-lg); + } + + .pop-work-card-info-item .label { + font-size: var(--text-base); + } + + .pop-work-card-info-item .value { + font-size: var(--text-lg); + } + + /* 작업 카드 내부 - 데스크톱 */ + .pop-work-number { + font-size: var(--text-lg); + } + + .pop-work-status { + font-size: var(--text-sm); + padding: 4px 12px; + } + + .pop-work-info-label { + font-size: var(--text-sm); + } + + .pop-work-info-value { + font-size: var(--text-base); + } + + .pop-process-bar-label, + .pop-process-bar-count { + font-size: var(--text-sm); + } + + .pop-process-chip { + font-size: var(--text-sm); + padding: 6px 12px; + } + + .pop-progress-text, + .pop-progress-percent { + font-size: var(--text-base); + } + + .pop-btn-sm { + font-size: var(--text-sm); + padding: var(--spacing-sm) var(--spacing-md); + } + + /* 공정 타임라인 */ + .pop-process-step-label { + font-size: var(--text-base); + } + + /* 하단 네비게이션 */ + .pop-nav-btn { + font-size: var(--text-lg); + } + + /* 배지 */ + .pop-badge { + font-size: var(--text-base); + padding: 5px 12px; + } + + /* 슬라이드 패널 - 데스크톱 */ + .pop-slide-panel-title { + font-size: var(--text-2xl); + } + + .pop-panel-date { + font-size: var(--text-base); + } + + .pop-panel-time { + font-size: var(--text-lg); + } + + .pop-work-steps-header { + font-size: var(--text-base); + } + + .pop-work-step-name { + font-size: var(--text-base); + } + + .pop-work-step-time { + font-size: var(--text-sm); + } + + .pop-work-step-status { + font-size: var(--text-sm); + } + + .pop-step-title { + font-size: var(--text-2xl); + } + + .pop-step-description { + font-size: var(--text-lg); + } + + .pop-step-form-title { + font-size: var(--text-lg); + } + + .pop-form-label { + font-size: var(--text-base); + } + + .pop-checkbox-label { + font-size: var(--text-lg); + } + + .pop-checkbox { + width: 24px; + height: 24px; + } + + .pop-input { + font-size: var(--text-lg); + padding: var(--spacing-md) var(--spacing-lg); + } + + .pop-work-order-info-item .label { + font-size: var(--text-sm); + } + + .pop-work-order-info-item .value { + font-size: var(--text-lg); + } + + .pop-btn { + font-size: var(--text-base); + padding: var(--spacing-md) var(--spacing-xl); + } + + .pop-time-control-btn { + font-size: var(--text-lg); } }