/* POP 생산실적관리 - 사이버펑크 스타일 */ /* ==================== 다크 테마 (기본) ==================== */ .pop-container { --bg-deepest: 8 12 21; --bg-deep: 10 15 28; --bg-primary: 13 19 35; --bg-secondary: 18 26 47; --bg-tertiary: 25 35 60; --bg-elevated: 32 45 75; --neon-cyan: 0 212 255; --neon-cyan-bright: 0 240 255; --neon-cyan-dim: 0 150 190; --neon-pink: 255 0 102; --neon-purple: 138 43 226; --neon-blue: 65 105 225; --success: 0 255 136; --success-dim: 0 180 100; --warning: 255 170 0; --warning-dim: 200 130 0; --danger: 255 51 51; --danger-dim: 200 40 40; --info: 100 149 237; --text-primary: 255 255 255; --text-secondary: 180 195 220; --text-muted: 100 120 150; --text-disabled: 60 75 95; --border: 40 55 85; --border-light: 55 75 110; --border-glow: 0 212 255; --glow-cyan: 0 0 20px rgba(0, 212, 255, 0.5), 0 0 40px rgba(0, 212, 255, 0.3); --glow-cyan-strong: 0 0 10px rgba(0, 212, 255, 0.8), 0 0 30px rgba(0, 212, 255, 0.5), 0 0 50px rgba(0, 212, 255, 0.3); --glow-pink: 0 0 20px rgba(255, 0, 102, 0.5), 0 0 40px rgba(255, 0, 102, 0.3); --glow-success: 0 0 15px rgba(0, 255, 136, 0.5); --glow-warning: 0 0 15px rgba(255, 170, 0, 0.5); --glow-danger: 0 0 15px rgba(255, 51, 51, 0.5); --gradient-card: linear-gradient(145deg, rgba(25, 35, 60, 0.9) 0%, rgba(18, 26, 47, 0.95) 100%); --gradient-glass: linear-gradient(135deg, rgba(255, 255, 255, 0.05) 0%, rgba(255, 255, 255, 0.02) 100%); --gradient-neon: linear-gradient(90deg, rgb(var(--neon-cyan)) 0%, rgb(var(--neon-pink)) 100%); --gradient-header: linear-gradient(180deg, rgba(13, 19, 35, 0.98) 0%, rgba(13, 19, 35, 0.85) 100%); --spacing-xs: 0.25rem; --spacing-sm: 0.5rem; --spacing-md: 0.75rem; --spacing-lg: 1rem; --spacing-xl: 1.5rem; --spacing-2xl: 2rem; --radius-sm: 4px; --radius-md: 8px; --radius-lg: 12px; --radius-xl: 16px; --radius-full: 9999px; --transition-fast: 0.15s ease; --transition-normal: 0.25s ease; --transition-slow: 0.4s ease; --text-2xs: 0.625rem; --text-xs: 0.75rem; --text-sm: 0.875rem; --text-base: 1rem; --text-lg: 1.125rem; --text-xl: 1.25rem; --text-2xl: 1.5rem; --text-3xl: 2rem; --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.3); --shadow-md: 0 4px 16px rgba(0, 0, 0, 0.4); --shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.5); --shadow-glow: 0 0 30px rgba(0, 212, 255, 0.2); --z-dropdown: 100; --z-sticky: 200; --z-fixed: 300; --z-modal-backdrop: 400; --z-modal: 500; --z-popover: 600; --z-tooltip: 700; --z-header: 100; } /* ==================== 라이트 테마 ==================== */ .pop-container.light { --bg-deepest: 245 247 250; --bg-deep: 240 243 248; --bg-primary: 250 251 253; --bg-secondary: 255 255 255; --bg-tertiary: 245 247 250; --bg-elevated: 235 238 245; --neon-cyan: 0 122 204; --neon-cyan-bright: 0 140 230; --neon-cyan-dim: 0 100 170; --neon-pink: 220 38 127; --neon-purple: 118 38 200; --neon-blue: 37 99 235; --success: 22 163 74; --success-dim: 21 128 61; --warning: 245 158 11; --warning-dim: 217 119 6; --danger: 220 38 38; --danger-dim: 185 28 28; --info: 59 130 246; --text-primary: 15 23 42; --text-secondary: 71 85 105; --text-muted: 148 163 184; --text-disabled: 203 213 225; --border: 226 232 240; --border-light: 203 213 225; --border-glow: 0 122 204; --glow-cyan: 0 0 15px rgba(0, 122, 204, 0.3), 0 0 30px rgba(0, 122, 204, 0.15); --glow-cyan-strong: 0 0 8px rgba(0, 122, 204, 0.5), 0 0 20px rgba(0, 122, 204, 0.3); --glow-success: 0 0 10px rgba(22, 163, 74, 0.3); --glow-warning: 0 0 10px rgba(245, 158, 11, 0.3); --glow-danger: 0 0 10px rgba(220, 38, 38, 0.3); --gradient-card: linear-gradient(145deg, rgba(255, 255, 255, 0.95) 0%, rgba(250, 251, 253, 0.98) 100%); --gradient-glass: linear-gradient(135deg, rgba(255, 255, 255, 0.8) 0%, rgba(255, 255, 255, 0.6) 100%); --gradient-header: linear-gradient(180deg, rgba(250, 251, 253, 0.98) 0%, rgba(250, 251, 253, 0.9) 100%); --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.06); --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07), 0 2px 4px rgba(0, 0, 0, 0.06); --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1), 0 4px 6px rgba(0, 0, 0, 0.05); --shadow-glow: 0 0 20px rgba(0, 122, 204, 0.1); } /* ==================== 기본 스타일 ==================== */ .pop-container { font-family: 'Pretendard', -apple-system, BlinkMacSystemFont, system-ui, Roboto, sans-serif; font-size: var(--text-sm); line-height: 1.5; color: rgb(var(--text-primary)); background: rgb(var(--bg-deepest)); min-height: 100vh; min-height: 100dvh; overflow-x: hidden; -webkit-font-smoothing: antialiased; position: relative; } /* 배경 그리드 패턴 */ .pop-container::before { content: ''; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: repeating-linear-gradient(90deg, rgba(0, 212, 255, 0.03) 0px, transparent 1px, transparent 60px), repeating-linear-gradient(0deg, rgba(0, 212, 255, 0.03) 0px, transparent 1px, transparent 60px), radial-gradient(ellipse 80% 50% at 50% 0%, rgba(0, 212, 255, 0.08) 0%, transparent 60%), linear-gradient(180deg, rgb(var(--bg-deepest)) 0%, rgb(var(--bg-deep)) 50%, rgb(var(--bg-primary)) 100%); pointer-events: none; z-index: -1; } .pop-container.light::before { background: repeating-linear-gradient(90deg, rgba(0, 122, 204, 0.02) 0px, transparent 1px, transparent 60px), repeating-linear-gradient(0deg, rgba(0, 122, 204, 0.02) 0px, transparent 1px, transparent 60px), radial-gradient(ellipse 80% 50% at 50% 0%, rgba(0, 122, 204, 0.05) 0%, transparent 60%), linear-gradient(180deg, rgb(var(--bg-deepest)) 0%, rgb(var(--bg-deep)) 50%, rgb(var(--bg-primary)) 100%); } /* 스크롤바 */ .pop-container ::-webkit-scrollbar { width: 6px; height: 6px; } .pop-container ::-webkit-scrollbar-track { background: rgb(var(--bg-secondary)); } .pop-container ::-webkit-scrollbar-thumb { background: rgb(var(--border-light)); border-radius: var(--radius-full); } .pop-container ::-webkit-scrollbar-thumb:hover { background: rgb(var(--neon-cyan-dim)); } /* ==================== 앱 레이아웃 ==================== */ .pop-app { display: flex; flex-direction: column; min-height: 100vh; min-height: 100dvh; padding: var(--spacing-sm); padding-bottom: calc(60px + var(--spacing-sm) + env(safe-area-inset-bottom, 0px)); } /* ==================== 헤더 컨테이너 ==================== */ .pop-header-container { background: var(--gradient-card); border: 1px solid rgb(var(--border)); border-radius: var(--radius-lg); margin-bottom: var(--spacing-sm); position: relative; overflow: hidden; } .pop-header-container::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient(90deg, transparent 0%, rgba(0, 212, 255, 0.5) 50%, transparent 100%); } /* 상단 바 */ .pop-top-bar { display: flex; align-items: center; padding: var(--spacing-sm) var(--spacing-md); gap: var(--spacing-md); } .pop-top-bar.row-1 { border-bottom: 1px solid rgba(var(--border), 0.5); } .pop-spacer { flex: 1; } /* 날짜/시간 */ .pop-datetime { display: flex; align-items: center; gap: var(--spacing-sm); font-size: var(--text-xs); } .pop-date { color: rgb(var(--text-secondary)); } .pop-time { color: rgb(var(--neon-cyan)); font-weight: 700; font-size: var(--text-sm); } /* 생산유형 버튼 */ .pop-type-buttons { display: flex; gap: var(--spacing-xs); } .pop-type-btn { padding: var(--spacing-xs) var(--spacing-md); 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-weight: 500; cursor: pointer; transition: all var(--transition-fast); } .pop-type-btn:hover { background: rgba(0, 212, 255, 0.08); color: rgb(var(--text-primary)); } .pop-type-btn.active { background: linear-gradient(135deg, rgba(0, 212, 255, 0.15) 0%, rgba(0, 180, 220, 0.2) 100%); border-color: rgba(0, 212, 255, 0.5); color: rgb(var(--neon-cyan)); box-shadow: 0 0 15px rgba(0, 212, 255, 0.15); } /* 필터 버튼 */ .pop-filter-btn { display: flex; align-items: center; gap: var(--spacing-xs); padding: var(--spacing-sm) var(--spacing-md); 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-xs); font-weight: 500; cursor: pointer; transition: all var(--transition-fast); white-space: nowrap; } .pop-filter-btn:hover:not(:disabled) { background: rgba(0, 212, 255, 0.08); border-color: rgba(0, 212, 255, 0.3); color: rgb(var(--text-primary)); } .pop-filter-btn:disabled { opacity: 0.4; cursor: not-allowed; } .pop-filter-btn.active { background: linear-gradient(135deg, rgba(0, 212, 255, 0.15) 0%, rgba(0, 180, 220, 0.2) 100%); border-color: rgba(0, 212, 255, 0.5); color: rgb(var(--neon-cyan)); } .pop-filter-btn.primary { background: linear-gradient(135deg, rgba(0, 212, 255, 0.2) 0%, rgba(0, 180, 220, 0.3) 100%); border: 1px solid rgba(0, 212, 255, 0.5); color: rgb(var(--neon-cyan-bright)); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 0 15px rgba(0, 212, 255, 0.2); } .pop-filter-btn.primary:hover:not(:disabled) { background: linear-gradient(135deg, rgba(0, 212, 255, 0.3) 0%, rgba(0, 180, 220, 0.4) 100%); border-color: rgb(var(--neon-cyan)); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), var(--glow-cyan); } /* ==================== 상태 탭 ==================== */ .pop-status-tabs { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1px; background: rgb(var(--border)); border-radius: var(--radius-lg); overflow: hidden; margin-bottom: var(--spacing-sm); } .pop-status-tab { display: flex; flex-direction: column; align-items: center; padding: var(--spacing-sm) var(--spacing-xs); background: rgb(var(--bg-secondary)); cursor: pointer; transition: all var(--transition-fast); position: relative; } .pop-status-tab:hover { background: rgb(var(--bg-tertiary)); } .pop-status-tab.active { background: linear-gradient(180deg, rgba(0, 212, 255, 0.15) 0%, rgba(0, 212, 255, 0.05) 100%); } /* 밑줄 제거됨 */ .pop-status-tab-label { font-size: var(--text-2xs); color: rgb(var(--text-muted)); margin-bottom: 2px; } .pop-status-tab.active .pop-status-tab-label { color: rgb(var(--neon-cyan)); } .pop-status-tab-count { font-size: var(--text-lg); font-weight: 700; color: rgb(var(--text-primary)); } .pop-status-tab.active .pop-status-tab-count { color: rgb(var(--neon-cyan)); text-shadow: var(--glow-cyan); } .pop-status-tab-detail { font-size: var(--text-2xs); color: rgb(var(--text-muted)); } /* ==================== 메인 콘텐츠 ==================== */ .pop-main-content { flex: 1; overflow-y: auto; } .pop-work-list { display: flex; flex-direction: column; gap: var(--spacing-sm); } /* ==================== 작업 카드 ==================== */ .pop-work-card { background: var(--gradient-card); border: 1px solid rgb(var(--border)); border-radius: var(--radius-lg); padding: var(--spacing-md); cursor: pointer; transition: all var(--transition-fast); position: relative; overflow: hidden; } .pop-work-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient(90deg, transparent 0%, rgba(0, 212, 255, 0.5) 50%, transparent 100%); } .pop-work-card:hover { border-color: rgba(0, 212, 255, 0.3); box-shadow: 0 0 30px rgba(0, 212, 255, 0.1), inset 0 0 30px rgba(0, 212, 255, 0.02); } .pop-work-card.return-card { border-color: rgba(255, 170, 0, 0.4); } .pop-work-card.return-card::before { background: linear-gradient(90deg, transparent 0%, rgba(255, 170, 0, 0.5) 50%, transparent 100%); } /* 카드 헤더 */ .pop-work-card-header { display: flex; align-items: center; gap: var(--spacing-sm); margin-bottom: var(--spacing-sm); flex-wrap: wrap; } .pop-work-number { font-size: var(--text-sm); font-weight: 700; color: rgb(var(--neon-cyan)); } .pop-work-status { padding: 2px 8px; border-radius: var(--radius-full); font-size: var(--text-2xs); font-weight: 600; } .pop-work-status.waiting { background: rgba(0, 212, 255, 0.15); color: rgb(var(--neon-cyan)); } .pop-work-status.in-progress { background: rgba(255, 170, 0, 0.15); color: rgb(var(--warning)); } .pop-work-status.completed { background: rgba(0, 255, 136, 0.15); color: rgb(var(--success)); } .pop-work-status.return { background: rgba(255, 170, 0, 0.2); color: rgb(var(--warning)); } /* 리턴 배지 */ .pop-return-badge { padding: 2px 6px; background: rgba(255, 170, 0, 0.2); border: 1px solid rgba(255, 170, 0, 0.4); border-radius: var(--radius-sm); font-size: var(--text-2xs); font-weight: 600; color: rgb(var(--warning)); } /* 분할접수 배지 */ .pop-partial-badge { padding: 2px 6px; background: rgba(0, 212, 255, 0.1); border: 1px solid rgba(0, 212, 255, 0.3); border-radius: var(--radius-sm); font-size: var(--text-2xs); color: rgb(var(--neon-cyan)); } /* 리턴 정보 배너 */ .pop-return-banner { display: flex; align-items: flex-start; gap: var(--spacing-sm); padding: var(--spacing-sm); background: rgba(255, 170, 0, 0.1); border: 1px solid rgba(255, 170, 0, 0.3); border-radius: var(--radius-md); margin-bottom: var(--spacing-sm); } .pop-return-banner-icon { font-size: var(--text-base); } .pop-return-banner-title { font-size: var(--text-xs); font-weight: 600; color: rgb(var(--warning)); } .pop-return-banner-reason { font-size: var(--text-2xs); color: rgb(var(--text-muted)); } /* 카드 바디 */ .pop-work-card-body { margin-bottom: var(--spacing-sm); } .pop-work-info-line { display: flex; flex-wrap: wrap; gap: var(--spacing-md); } .pop-work-info-item { display: flex; align-items: center; gap: var(--spacing-xs); } .pop-work-info-label { font-size: var(--text-2xs); color: rgb(var(--text-muted)); } .pop-work-info-value { font-size: var(--text-xs); color: rgb(var(--text-primary)); font-weight: 500; } /* 카드 액션 */ .pop-work-card-actions { display: flex; gap: var(--spacing-xs); margin-left: auto; } /* ==================== 공정 타임라인 ==================== */ .pop-process-timeline { margin-top: var(--spacing-sm); } .pop-process-bar { margin-bottom: var(--spacing-sm); } .pop-process-bar-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--spacing-xs); } .pop-process-bar-label { font-size: var(--text-2xs); color: rgb(var(--text-muted)); } .pop-process-bar-count { font-size: var(--text-2xs); color: rgb(var(--text-muted)); } .pop-process-bar-count span { color: rgb(var(--neon-cyan)); font-weight: 600; } .pop-process-segments { display: flex; gap: 2px; height: 4px; } .pop-process-segment { flex: 1; background: rgb(var(--border)); border-radius: 2px; transition: all var(--transition-fast); } .pop-process-segment.done { background: rgb(var(--success)); box-shadow: var(--glow-success); } .pop-process-segment.current { background: rgb(var(--warning)); box-shadow: var(--glow-warning); animation: pulse-glow 2s ease-in-out infinite; } .pop-process-segment.my-work { border: 1px solid rgb(var(--neon-cyan)); } /* 공정 칩 */ .pop-process-chips-container { display: flex; align-items: center; gap: var(--spacing-xs); position: relative; } .pop-process-scroll-btn { width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; background: rgb(var(--bg-tertiary)); border: 1px solid rgb(var(--border)); border-radius: var(--radius-sm); color: rgb(var(--text-muted)); cursor: pointer; flex-shrink: 0; transition: all var(--transition-fast); } .pop-process-scroll-btn:hover { background: rgba(0, 212, 255, 0.1); border-color: rgba(0, 212, 255, 0.3); color: rgb(var(--neon-cyan)); } .pop-process-scroll-btn.hidden { visibility: hidden; } .pop-process-chips { display: flex; gap: var(--spacing-xs); overflow-x: auto; scrollbar-width: none; -ms-overflow-style: none; scroll-behavior: smooth; flex: 1; } .pop-process-chips::-webkit-scrollbar { display: none; } .pop-process-chip { display: flex; align-items: center; gap: 4px; padding: 4px 8px; background: rgba(255, 255, 255, 0.03); border: 1px solid rgb(var(--border)); border-radius: var(--radius-sm); font-size: var(--text-2xs); color: rgb(var(--text-muted)); white-space: nowrap; flex-shrink: 0; transition: all var(--transition-fast); } .pop-chip-num { width: 16px; height: 16px; display: flex; align-items: center; justify-content: center; background: rgb(var(--border)); border-radius: 50%; font-size: 9px; font-weight: 600; } .pop-process-chip.done { background: rgba(0, 255, 136, 0.1); border-color: rgba(0, 255, 136, 0.3); color: rgb(var(--success)); } .pop-process-chip.done .pop-chip-num { background: rgb(var(--success)); color: white; } .pop-process-chip.current { background: rgba(255, 170, 0, 0.1); border-color: rgba(255, 170, 0, 0.4); color: rgb(var(--warning)); } .pop-process-chip.current .pop-chip-num { background: rgb(var(--warning)); color: white; } .pop-process-chip.my-work { border-color: rgb(var(--neon-cyan)); box-shadow: 0 0 10px rgba(0, 212, 255, 0.2); } /* ==================== 진행률 바 ==================== */ .pop-work-progress { margin-top: var(--spacing-sm); padding-top: var(--spacing-sm); border-top: 1px solid rgba(var(--border), 0.5); } .pop-progress-info { display: flex; justify-content: space-between; margin-bottom: var(--spacing-xs); } .pop-progress-text { font-size: var(--text-2xs); color: rgb(var(--text-muted)); } .pop-progress-percent { font-size: var(--text-xs); font-weight: 600; color: rgb(var(--neon-cyan)); } .pop-progress-bar { height: 4px; background: rgb(var(--border)); border-radius: 2px; overflow: hidden; } .pop-progress-fill { height: 100%; background: linear-gradient(90deg, rgb(var(--neon-cyan)) 0%, rgb(var(--neon-cyan-bright)) 100%); border-radius: 2px; transition: width var(--transition-normal); } /* ==================== 빈 상태 ==================== */ .pop-empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: var(--spacing-2xl); text-align: center; } .pop-empty-state-text { font-size: var(--text-base); font-weight: 600; color: rgb(var(--text-primary)); margin-bottom: var(--spacing-xs); } .pop-empty-state-desc { font-size: var(--text-sm); color: rgb(var(--text-muted)); } /* ==================== 하단 네비게이션 ==================== */ .pop-bottom-nav { position: fixed; bottom: 0; left: 0; right: 0; display: flex; gap: var(--spacing-sm); padding: var(--spacing-sm) var(--spacing-md); padding-bottom: calc(var(--spacing-sm) + env(safe-area-inset-bottom, 0px)); background: rgba(13, 19, 35, 0.95); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); border-top: 1px solid rgb(var(--border)); z-index: var(--z-fixed); } .pop-nav-btn { flex: 1; display: flex; align-items: center; justify-content: center; gap: var(--spacing-sm); padding: var(--spacing-md); border-radius: var(--radius-md); font-size: var(--text-sm); font-weight: 600; cursor: pointer; transition: all var(--transition-fast); } .pop-nav-btn svg { width: 18px; height: 18px; } .pop-nav-btn.secondary { background: rgba(255, 255, 255, 0.03); border: 1px solid rgb(var(--border)); color: rgb(var(--text-secondary)); } .pop-nav-btn.secondary:hover { background: rgba(0, 212, 255, 0.08); border-color: rgba(0, 212, 255, 0.3); color: rgb(var(--text-primary)); } .pop-nav-btn.primary { background: linear-gradient(135deg, rgba(0, 212, 255, 0.2) 0%, rgba(0, 180, 220, 0.3) 100%); border: 1px solid rgba(0, 212, 255, 0.5); color: rgb(var(--neon-cyan-bright)); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 0 15px rgba(0, 212, 255, 0.2); } .pop-nav-btn.primary:hover { background: linear-gradient(135deg, rgba(0, 212, 255, 0.3) 0%, rgba(0, 180, 220, 0.4) 100%); border-color: rgb(var(--neon-cyan)); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), var(--glow-cyan); } /* ==================== 버튼 ==================== */ .pop-btn { display: inline-flex; align-items: center; justify-content: center; gap: var(--spacing-sm); padding: var(--spacing-sm) var(--spacing-lg); border: 1px solid transparent; border-radius: var(--radius-md); font-size: var(--text-xs); font-weight: 600; cursor: pointer; transition: all var(--transition-fast); white-space: nowrap; } .pop-btn:disabled { opacity: 0.4; cursor: not-allowed; } .pop-btn-sm { padding: var(--spacing-xs) var(--spacing-sm); font-size: var(--text-2xs); } .pop-btn-primary { background: linear-gradient(135deg, rgba(0, 212, 255, 0.2) 0%, rgba(0, 180, 220, 0.3) 100%); border: 1px solid rgba(0, 212, 255, 0.5); color: rgb(var(--neon-cyan-bright)); } .pop-btn-primary:hover:not(:disabled) { background: linear-gradient(135deg, rgba(0, 212, 255, 0.3) 0%, rgba(0, 180, 220, 0.4) 100%); border-color: rgb(var(--neon-cyan)); box-shadow: var(--glow-cyan); } .pop-btn-success { background: linear-gradient(135deg, rgba(0, 255, 136, 0.15) 0%, rgba(0, 200, 100, 0.25) 100%); border: 1px solid rgba(0, 255, 136, 0.4); color: rgb(var(--success)); } .pop-btn-success:hover:not(:disabled) { background: linear-gradient(135deg, rgba(0, 255, 136, 0.25) 0%, rgba(0, 200, 100, 0.35) 100%); box-shadow: var(--glow-success); } .pop-btn-ghost { background: transparent; border: none; color: rgb(var(--text-muted)); } .pop-btn-ghost:hover:not(:disabled) { background: rgba(0, 212, 255, 0.1); color: rgb(var(--neon-cyan)); } .pop-btn-outline { background: rgba(255, 255, 255, 0.03); border: 1px solid rgb(var(--border)); color: rgb(var(--text-secondary)); } .pop-btn-outline:hover:not(:disabled) { background: rgba(0, 212, 255, 0.08); border-color: rgba(0, 212, 255, 0.4); color: rgb(var(--neon-cyan)); } /* ==================== 모달 ==================== */ .pop-modal-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(8, 12, 21, 0.85); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); z-index: var(--z-modal-backdrop); display: none; align-items: center; justify-content: center; padding: var(--spacing-lg); } .pop-modal-overlay.active { display: flex; } .pop-modal { background: var(--gradient-card); border: 1px solid rgb(var(--border)); border-radius: var(--radius-xl); width: 100%; max-width: 500px; max-height: 85vh; display: flex; flex-direction: column; box-shadow: var(--shadow-lg), 0 0 60px rgba(0, 212, 255, 0.1); position: relative; overflow: hidden; } .pop-modal::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 2px; background: linear-gradient(90deg, transparent 0%, rgb(var(--neon-cyan)) 30%, rgb(var(--neon-pink)) 70%, transparent 100%); } .pop-modal-header { display: flex; align-items: center; justify-content: space-between; padding: var(--spacing-lg) var(--spacing-xl); border-bottom: 1px solid rgb(var(--border)); } .pop-modal-title { font-size: var(--text-lg); font-weight: 700; color: rgb(var(--text-primary)); } .pop-modal-close { width: 28px; height: 28px; display: flex; align-items: center; justify-content: center; background: rgba(255, 255, 255, 0.05); border: 1px solid rgb(var(--border)); border-radius: var(--radius-md); color: rgb(var(--text-muted)); cursor: pointer; transition: all var(--transition-fast); } .pop-modal-close:hover { background: rgba(255, 51, 51, 0.15); border-color: rgba(255, 51, 51, 0.4); color: rgb(var(--danger)); } .pop-modal-body { flex: 1; overflow-y: auto; padding: var(--spacing-xl); } .pop-modal-footer { display: flex; gap: var(--spacing-md); padding: var(--spacing-lg) var(--spacing-xl); border-top: 1px solid rgb(var(--border)); } /* 선택 그리드 */ .pop-selection-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: var(--spacing-md); } .pop-selection-card { padding: var(--spacing-lg); background: rgba(255, 255, 255, 0.02); border: 2px solid rgb(var(--border)); border-radius: var(--radius-lg); cursor: pointer; transition: all var(--transition-fast); text-align: center; position: relative; } .pop-selection-card:hover { background: rgba(0, 212, 255, 0.05); border-color: rgba(0, 212, 255, 0.3); } .pop-selection-card.selected { background: linear-gradient(135deg, rgba(0, 212, 255, 0.1) 0%, rgba(0, 180, 220, 0.15) 100%); border-color: rgb(var(--neon-cyan)); box-shadow: var(--glow-cyan); } .pop-selection-card-check { position: absolute; top: var(--spacing-sm); right: var(--spacing-sm); width: 20px; height: 20px; background: rgb(var(--neon-cyan)); border-radius: 50%; display: none; align-items: center; justify-content: center; color: white; font-size: var(--text-2xs); box-shadow: var(--glow-cyan); } .pop-selection-card.selected .pop-selection-card-check { display: flex; } .pop-selection-card-icon { font-size: 2rem; margin-bottom: var(--spacing-sm); } .pop-selection-card-name { font-size: var(--text-sm); font-weight: 600; color: rgb(var(--text-primary)); margin-bottom: var(--spacing-xs); } .pop-selection-card-info { font-size: var(--text-2xs); color: rgb(var(--text-muted)); } /* ==================== 슬라이드 패널 ==================== */ .pop-slide-panel { position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: var(--z-modal); display: none; } .pop-slide-panel.active { display: block; } .pop-slide-panel-overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: rgba(8, 12, 21, 0.7); backdrop-filter: blur(4px); } .pop-slide-panel-content { position: absolute; top: 0; right: 0; bottom: 0; width: 100%; max-width: 600px; background: rgb(var(--bg-primary)); display: flex; flex-direction: column; box-shadow: -10px 0 50px rgba(0, 0, 0, 0.5); animation: slideIn 0.3s ease; } @keyframes slideIn { from { transform: translateX(100%); } to { transform: translateX(0); } } .pop-slide-panel-header { display: flex; align-items: center; justify-content: space-between; padding: var(--spacing-md) var(--spacing-lg); background: var(--gradient-card); border-bottom: 1px solid rgb(var(--border)); } .pop-slide-panel-title { font-size: var(--text-lg); font-weight: 700; color: rgb(var(--text-primary)); } .pop-badge { padding: 2px 8px; border-radius: var(--radius-full); font-size: var(--text-2xs); font-weight: 600; } .pop-badge-primary { background: rgba(0, 212, 255, 0.15); color: rgb(var(--neon-cyan)); } .pop-slide-panel-body { flex: 1; display: flex; overflow: hidden; } .pop-panel-body-content { display: flex; flex: 1; overflow: hidden; } /* 작업순서 사이드바 */ .pop-work-steps-sidebar { width: 180px; min-width: 180px; background: rgb(var(--bg-secondary)); border-right: 1px solid rgb(var(--border)); display: flex; flex-direction: column; } .pop-work-steps-header { padding: var(--spacing-md); font-size: var(--text-xs); font-weight: 600; color: rgb(var(--text-muted)); border-bottom: 1px solid rgb(var(--border)); } .pop-work-steps-list { flex: 1; overflow-y: auto; padding: var(--spacing-sm); } .pop-work-step-item { display: flex; align-items: center; gap: var(--spacing-sm); padding: var(--spacing-sm); border-radius: var(--radius-md); cursor: pointer; transition: all var(--transition-fast); margin-bottom: var(--spacing-xs); } .pop-work-step-item:hover { background: rgba(0, 212, 255, 0.05); } .pop-work-step-item.active { background: rgba(0, 212, 255, 0.1); border: 1px solid rgba(0, 212, 255, 0.3); } .pop-work-step-item.completed { opacity: 0.7; } .pop-work-step-number { width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; background: rgb(var(--border)); border-radius: 50%; font-size: var(--text-2xs); font-weight: 600; color: rgb(var(--text-muted)); } .pop-work-step-item.active .pop-work-step-number { background: rgb(var(--neon-cyan)); color: white; } .pop-work-step-item.completed .pop-work-step-number { background: rgb(var(--success)); color: white; } .pop-work-step-info { flex: 1; min-width: 0; } .pop-work-step-name { font-size: var(--text-xs); font-weight: 500; color: rgb(var(--text-primary)); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .pop-work-step-time { font-size: var(--text-2xs); color: rgb(var(--text-muted)); } .pop-work-step-status { font-size: var(--text-2xs); padding: 2px 6px; border-radius: var(--radius-sm); } .pop-work-step-status.pending { background: rgb(var(--border)); color: rgb(var(--text-muted)); } .pop-work-step-status.in-progress { background: rgba(255, 170, 0, 0.15); color: rgb(var(--warning)); } .pop-work-step-status.completed { background: rgba(0, 255, 136, 0.15); color: rgb(var(--success)); } /* 작업 콘텐츠 영역 */ .pop-work-content-area { flex: 1; padding: var(--spacing-lg); overflow-y: auto; display: flex; flex-direction: column; gap: var(--spacing-md); } .pop-step-header { margin-bottom: var(--spacing-md); } .pop-step-title { font-size: var(--text-lg); font-weight: 700; color: rgb(var(--text-primary)); margin-bottom: var(--spacing-xs); } .pop-step-description { font-size: var(--text-sm); color: rgb(var(--text-muted)); } /* 시간 컨트롤 */ .pop-step-time-controls { display: flex; gap: var(--spacing-sm); } .pop-time-control-btn { flex: 1; display: flex; align-items: center; justify-content: center; gap: var(--spacing-sm); padding: var(--spacing-md); 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-weight: 500; cursor: pointer; transition: all var(--transition-fast); } .pop-time-control-btn svg { width: 16px; height: 16px; } .pop-time-control-btn:hover:not(:disabled) { background: rgba(0, 212, 255, 0.08); border-color: rgba(0, 212, 255, 0.3); } .pop-time-control-btn:disabled { opacity: 0.4; cursor: not-allowed; } .pop-time-control-btn.start:not(:disabled) { background: rgba(0, 255, 136, 0.1); border-color: rgba(0, 255, 136, 0.3); color: rgb(var(--success)); } .pop-time-control-btn.end:not(:disabled) { background: rgba(255, 51, 51, 0.1); border-color: rgba(255, 51, 51, 0.3); color: rgb(var(--danger)); } /* 폼 섹션 */ .pop-step-form-section { background: rgba(255, 255, 255, 0.02); border: 1px solid rgb(var(--border)); border-radius: var(--radius-md); padding: var(--spacing-md); } .pop-step-form-title { font-size: var(--text-sm); font-weight: 600; color: rgb(var(--text-primary)); margin-bottom: var(--spacing-md); } .pop-form-group { margin-bottom: var(--spacing-md); } .pop-form-group:last-child { margin-bottom: 0; } .pop-form-label { display: block; font-size: var(--text-xs); font-weight: 500; color: rgb(var(--text-secondary)); margin-bottom: var(--spacing-xs); } .pop-input { width: 100%; padding: var(--spacing-sm) 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); transition: all var(--transition-fast); } .pop-input::placeholder { color: rgb(var(--text-muted)); } .pop-input:focus { border-color: rgba(0, 212, 255, 0.5); box-shadow: 0 0 0 3px rgba(0, 212, 255, 0.1), 0 0 15px rgba(0, 212, 255, 0.1); outline: none; } .pop-input:disabled { opacity: 0.5; cursor: not-allowed; } .pop-form-row { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--spacing-md); } /* 슬라이드 패널 푸터 */ .pop-slide-panel-footer { display: flex; gap: var(--spacing-md); padding: var(--spacing-md) var(--spacing-lg); background: var(--gradient-card); border-top: 1px solid rgb(var(--border)); } /* 작업지시 정보 섹션 */ .pop-work-order-info-section { padding: var(--spacing-md) var(--spacing-lg); background: rgba(0, 0, 0, 0.2); border-bottom: 1px solid rgb(var(--border)); } .pop-work-order-info-card { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: var(--spacing-sm); } .pop-work-order-info-item { display: flex; flex-direction: column; gap: 2px; } .pop-work-order-info-item .label { font-size: var(--text-2xs); color: rgb(var(--text-muted)); } .pop-work-order-info-item .value { font-size: var(--text-sm); font-weight: 500; color: rgb(var(--text-primary)); } .pop-work-order-info-item .value.primary { color: rgb(var(--neon-cyan)); } /* ==================== 분할접수 모달 ==================== */ .pop-accept-modal-content { display: flex; flex-direction: column; gap: var(--spacing-lg); } .pop-accept-work-info { padding: var(--spacing-md); background: rgba(0, 0, 0, 0.3); border: 1px solid rgb(var(--border)); border-radius: var(--radius-md); } .pop-accept-work-info .work-id { font-size: var(--text-sm); font-weight: 700; color: rgb(var(--text-primary)); margin-bottom: var(--spacing-xs); } .pop-accept-work-info .work-name { font-size: var(--text-xs); color: rgb(var(--text-secondary)); } .pop-quantity-input-wrapper { display: flex; align-items: center; gap: var(--spacing-xs); background: rgba(0, 0, 0, 0.3); border: 1px solid rgb(var(--border)); border-radius: var(--radius-md); padding: var(--spacing-xs); } .pop-qty-btn { padding: var(--spacing-sm) var(--spacing-md); background: rgba(0, 212, 255, 0.1); border: 1px solid rgba(0, 212, 255, 0.3); border-radius: var(--radius-sm); color: rgb(var(--neon-cyan)); font-size: var(--text-sm); font-weight: 600; cursor: pointer; transition: all var(--transition-fast); } .pop-qty-btn:hover { background: rgba(0, 212, 255, 0.2); } .pop-qty-btn.minus { background: rgba(255, 51, 51, 0.1); border-color: rgba(255, 51, 51, 0.3); color: rgb(var(--danger)); } .pop-qty-btn.minus:hover { background: rgba(255, 51, 51, 0.2); } .pop-qty-input { flex: 1; padding: var(--spacing-sm); background: transparent; border: none; color: rgb(var(--text-primary)); font-size: var(--text-lg); font-weight: 700; text-align: center; } .pop-qty-input:focus { outline: none; } .pop-qty-hint { font-size: var(--text-xs); color: rgb(var(--text-muted)); text-align: center; margin-top: var(--spacing-xs); } .pop-accept-info-box { display: flex; gap: var(--spacing-sm); padding: var(--spacing-md); background: rgba(0, 212, 255, 0.05); border: 1px solid rgba(0, 212, 255, 0.2); border-radius: var(--radius-md); } .pop-accept-info-box .info-icon { font-size: var(--text-lg); } .pop-accept-info-box .info-title { font-size: var(--text-sm); font-weight: 600; color: rgb(var(--neon-cyan)); margin-bottom: 2px; } .pop-accept-info-box .info-desc { font-size: var(--text-xs); color: rgb(var(--text-muted)); } /* ==================== 설정 모달 ==================== */ .pop-settings-section { margin-bottom: var(--spacing-lg); } .pop-settings-title { font-size: var(--text-sm); font-weight: 600; color: rgb(var(--text-primary)); margin-bottom: var(--spacing-md); } .pop-mode-options { display: flex; flex-direction: column; gap: var(--spacing-sm); } .pop-mode-option { display: flex; align-items: flex-start; gap: var(--spacing-md); padding: var(--spacing-md); background: rgba(255, 255, 255, 0.02); border: 1px solid rgb(var(--border)); border-radius: var(--radius-md); cursor: pointer; transition: all var(--transition-fast); } .pop-mode-option:hover { background: rgba(0, 212, 255, 0.05); border-color: rgba(0, 212, 255, 0.3); } .pop-mode-option input[type="radio"] { margin-top: 2px; accent-color: rgb(var(--neon-cyan)); } .pop-mode-info { flex: 1; } .pop-mode-name { font-size: var(--text-sm); font-weight: 600; color: rgb(var(--text-primary)); margin-bottom: 2px; } .pop-mode-desc { font-size: var(--text-xs); color: rgb(var(--text-muted)); } .pop-settings-divider { height: 1px; background: rgb(var(--border)); margin: var(--spacing-lg) 0; } /* ==================== 테마 토글 ==================== */ /* 기존 플로팅 테마 토글 (더 이상 사용 안함) */ .pop-theme-toggle { display: none; } /* 헤더 인라인 테마 토글 버튼 */ .pop-theme-toggle-inline { width: 32px; height: 32px; margin-left: var(--spacing-sm); border-radius: var(--radius-md); background: rgba(255, 255, 255, 0.05); border: 1px solid rgb(var(--border)); color: rgb(var(--text-secondary)); cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all var(--transition-fast); flex-shrink: 0; } .pop-theme-toggle-inline:hover { border-color: rgb(var(--neon-cyan)); color: rgb(var(--neon-cyan)); box-shadow: var(--glow-cyan); } .pop-theme-toggle-inline svg { width: 18px; height: 18px; } /* ==================== 아이콘 버튼 ==================== */ .pop-icon-btn { width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; border-radius: var(--radius-md); background: rgba(255, 255, 255, 0.03); border: 1px solid rgb(var(--border)); color: rgb(var(--text-muted)); cursor: pointer; transition: all var(--transition-fast); } .pop-icon-btn svg { width: 16px; height: 16px; } .pop-icon-btn:hover { background: rgba(0, 212, 255, 0.1); border-color: rgba(0, 212, 255, 0.4); color: rgb(var(--neon-cyan)); } /* ==================== 애니메이션 ==================== */ @keyframes pulse-glow { 0%, 100% { box-shadow: 0 0 5px rgba(0, 212, 255, 0.5); } 50% { box-shadow: 0 0 20px rgba(0, 212, 255, 0.8), 0 0 30px rgba(0, 212, 255, 0.4); } } /* ==================== 반응형 ==================== */ @media (max-width: 768px) { .pop-work-steps-sidebar { width: 100%; max-height: 150px; border-right: none; border-bottom: 1px solid rgb(var(--border)); } .pop-work-steps-list { display: flex; overflow-x: auto; padding: var(--spacing-xs); gap: var(--spacing-xs); } .pop-work-step-item { flex: 0 0 auto; min-width: 100px; } .pop-panel-body-content { flex-direction: column; } .pop-slide-panel-content { max-width: 100%; } } @media (min-width: 1024px) { .pop-app { max-width: 1200px; margin: 0 auto; padding: var(--spacing-lg); padding-bottom: calc(64px + var(--spacing-lg) + env(safe-area-inset-bottom, 0px)); } .pop-work-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(400px, 1fr)); gap: var(--spacing-md); } .pop-slide-panel-content { max-width: 700px; } .pop-work-steps-sidebar { width: 240px; } } /* ==================== 라이트 모드 컴포넌트 스타일 ==================== */ /* 하단 네비게이션 - 라이트 모드 */ .pop-container.light .pop-bottom-nav { background: rgba(255, 255, 255, 0.95); border-top: 1px solid rgb(var(--border)); } .pop-container.light .pop-nav-btn.secondary { background: rgb(var(--bg-tertiary)); border: 1px solid rgb(var(--border)); color: rgb(var(--text-secondary)); } .pop-container.light .pop-nav-btn.secondary:hover { background: rgba(0, 122, 204, 0.08); border-color: rgba(0, 122, 204, 0.3); color: rgb(var(--text-primary)); } .pop-container.light .pop-nav-btn.primary { background: linear-gradient(135deg, rgba(0, 122, 204, 0.15) 0%, rgba(0, 100, 180, 0.25) 100%); border: 1px solid rgba(0, 122, 204, 0.4); color: rgb(var(--neon-cyan)); box-shadow: 0 2px 8px rgba(0, 122, 204, 0.15); } .pop-container.light .pop-nav-btn.primary:hover { background: linear-gradient(135deg, rgba(0, 122, 204, 0.25) 0%, rgba(0, 100, 180, 0.35) 100%); border-color: rgb(var(--neon-cyan)); box-shadow: 0 4px 12px rgba(0, 122, 204, 0.25); }