/* DevonThink 스타일 CSS - 회색, 하늘색 위주 */ :root { /* DevonThink 컬러 팔레트 */ --dt-primary: #4A90E2; /* 하늘색 */ --dt-primary-light: #7BB3F0; /* 연한 하늘색 */ --dt-primary-dark: #357ABD; /* 진한 하늘색 */ --dt-gray-50: #F8F9FA; /* 매우 연한 회색 */ --dt-gray-100: #F1F3F4; /* 연한 회색 */ --dt-gray-200: #E8EAED; /* 회색 */ --dt-gray-300: #DADCE0; /* 중간 회색 */ --dt-gray-400: #BDC1C6; /* 진한 회색 */ --dt-gray-500: #9AA0A6; /* 더 진한 회색 */ --dt-gray-600: #80868B; /* 텍스트 회색 */ --dt-gray-700: #5F6368; /* 진한 텍스트 회색 */ --dt-gray-800: #3C4043; /* 매우 진한 회색 */ --dt-gray-900: #202124; /* 거의 검은색 */ --dt-success: #34A853; /* 성공 (초록) */ --dt-warning: #FBBC04; /* 경고 (노랑) */ --dt-danger: #EA4335; /* 위험 (빨강) */ /* 그림자 */ --dt-shadow-sm: 0 1px 2px 0 rgba(60, 64, 67, 0.1); --dt-shadow: 0 1px 3px 0 rgba(60, 64, 67, 0.15); --dt-shadow-lg: 0 4px 6px -1px rgba(60, 64, 67, 0.15); /* 폰트 */ --dt-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: var(--dt-font-family); background-color: var(--dt-gray-50); color: var(--dt-gray-800); line-height: 1.5; display: flex; height: 100vh; overflow: hidden; } /* 워크플로우 상세 페이지용 스타일 */ .workflow-detail-page { width: 100%; min-height: 100vh; overflow-y: auto; padding: 20px; display: block; } /* 워크플로우 페이지일 때 body 스타일 재정의 */ body.workflow-page { height: auto !important; overflow: visible !important; display: block !important; } /* 캘린더 스타일 */ .calendar-container { background: white; border-radius: 12px; padding: 30px; box-shadow: var(--dt-shadow); margin: 20px 0; max-width: 800px; } .calendar-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .calendar-nav-btn { background: var(--dt-gray-200); border: none; border-radius: 6px; padding: 8px 12px; cursor: pointer; font-size: 16px; color: var(--dt-gray-700); transition: background-color 0.2s; } .calendar-nav-btn:hover { background: var(--dt-gray-300); } .calendar-title { font-size: 1.2em; font-weight: 600; color: var(--dt-gray-800); margin: 0; } .calendar-month { width: 100%; } .calendar-table { width: 100% !important; border-collapse: collapse !important; background: white; border-radius: 8px; overflow: hidden; box-shadow: var(--dt-shadow-sm); display: table !important; } .calendar-table th { background: var(--dt-gray-100); color: var(--dt-gray-700); font-weight: 600; padding: 12px 8px; text-align: center; font-size: 14px; border-bottom: 2px solid var(--dt-gray-200); } .calendar-table td { width: 14.28%; height: 50px; text-align: center; vertical-align: middle; border: 1px solid var(--dt-gray-200); cursor: pointer; transition: all 0.2s; position: relative; font-size: 14px; color: var(--dt-gray-800); background: var(--dt-gray-50); } .calendar-table td:hover { background: var(--dt-gray-100); } .calendar-table td.other-month { color: var(--dt-gray-400); background: var(--dt-gray-100); } .calendar-table td.has-event { background: var(--dt-gray-500) !important; color: white; font-weight: 600; border: 2px solid var(--dt-gray-600); } .calendar-table td.has-event:hover { background: var(--dt-gray-600) !important; transform: scale(1.05); } .calendar-table td.has-event::before { content: "●"; position: absolute; top: 3px; right: 5px; color: var(--dt-warning); font-size: 10px; } .calendar-table td.has-event::after { content: attr(data-event); position: absolute; bottom: -35px; left: 50%; transform: translateX(-50%); background: var(--dt-gray-800); color: white; padding: 6px 10px; border-radius: 6px; font-size: 11px; white-space: nowrap; opacity: 0; pointer-events: none; transition: opacity 0.3s; z-index: 100; box-shadow: var(--dt-shadow-lg); } .calendar-table td.has-event:hover::after { opacity: 1; } .calendar-legend { display: flex; justify-content: center; margin-top: 20px; gap: 20px; } .legend-item { display: flex; align-items: center; gap: 8px; font-size: 14px; color: var(--dt-gray-600); } .legend-color { width: 16px; height: 16px; border-radius: 4px; } .legend-color.has-event { background: var(--dt-gray-500); border: 2px solid var(--dt-gray-600); } /* 사이드바 */ .sidebar { width: 280px; background-color: var(--dt-gray-100); border-right: 1px solid var(--dt-gray-200); display: flex; flex-direction: column; overflow-y: auto; } .sidebar-header { padding: 20px; border-bottom: 1px solid var(--dt-gray-200); background-color: white; } .sidebar-header h1 { font-size: 24px; font-weight: 600; color: var(--dt-primary); margin-bottom: 4px; } .sidebar-header .version { font-size: 12px; color: var(--dt-gray-500); font-weight: 500; } .sidebar-nav { flex: 1; padding: 16px 0; } .nav-section { margin-bottom: 24px; } .nav-section h3 { font-size: 12px; font-weight: 600; color: var(--dt-gray-600); text-transform: uppercase; letter-spacing: 0.5px; margin: 0 20px 8px 20px; } .nav-section ul { list-style: none; } .nav-item { display: flex; align-items: center; padding: 8px 20px; color: var(--dt-gray-700); text-decoration: none; font-size: 14px; font-weight: 500; transition: all 0.2s ease; } .nav-item:hover { background-color: var(--dt-gray-200); color: var(--dt-gray-800); } .nav-item.active { background-color: var(--dt-primary); color: white; } .nav-icon { margin-right: 12px; font-size: 16px; } .sidebar-footer { padding: 16px 20px; border-top: 1px solid var(--dt-gray-200); background-color: white; } .user-info { display: flex; align-items: center; } .user-avatar { width: 32px; height: 32px; border-radius: 50%; background-color: var(--dt-primary); color: white; display: flex; align-items: center; justify-content: center; font-weight: 600; font-size: 14px; margin-right: 12px; } .user-name { font-size: 14px; font-weight: 600; color: var(--dt-gray-800); } .user-role { font-size: 12px; color: var(--dt-gray-500); } /* 메인 컨텐츠 */ .main-content { flex: 1; overflow-y: auto; background-color: var(--dt-gray-50); } .page { display: none; padding: 24px; max-width: 1400px; margin: 0 auto; } .page.active { display: block; } .page-header { margin-bottom: 32px; padding-bottom: 16px; border-bottom: 1px solid var(--dt-gray-200); } .page-header h2 { font-size: 28px; font-weight: 600; color: var(--dt-gray-800); margin-bottom: 8px; } .page-description { font-size: 16px; color: var(--dt-gray-600); } /* 카드 */ .card { background-color: white; border-radius: 8px; box-shadow: var(--dt-shadow); border: 1px solid var(--dt-gray-200); margin-bottom: 24px; } .card-header { padding: 20px 24px 16px 24px; border-bottom: 1px solid var(--dt-gray-200); display: flex; align-items: center; justify-content: space-between; } .card-header h3 { font-size: 18px; font-weight: 600; color: var(--dt-gray-800); } .card-content { padding: 24px; } /* 상태 배지 */ .status-badge { padding: 4px 12px; border-radius: 16px; font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; } .status-active { background-color: var(--dt-primary); color: white; } .status-optional { background-color: var(--dt-gray-300); color: var(--dt-gray-700); } .status-completed { background-color: var(--dt-success); color: white; } .status-pending { background-color: var(--dt-warning); color: var(--dt-gray-800); } .status-inspecting { background-color: var(--dt-primary-light); color: white; } .status-available { background-color: var(--dt-success); color: white; } .status-ordered { background-color: var(--dt-warning); color: var(--dt-gray-800); } .status-not-requested { background-color: var(--dt-gray-400); color: white; } .status-ready { background-color: var(--dt-primary-light); color: white; } .status-partial { background-color: var(--dt-warning); color: var(--dt-gray-800); } /* 폼 요소 */ .form-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 20px; } .form-group { display: flex; flex-direction: column; } .form-group label { font-size: 14px; font-weight: 600; color: var(--dt-gray-700); margin-bottom: 6px; } .form-input, .form-select { padding: 10px 12px; border: 1px solid var(--dt-gray-300); border-radius: 6px; font-size: 14px; background-color: white; transition: border-color 0.2s ease; } .form-input:focus, .form-select:focus { outline: none; border-color: var(--dt-primary); box-shadow: 0 0 0 3px rgba(74, 144, 226, 0.1); } /* 버튼 */ .btn { padding: 10px 20px; border: none; border-radius: 6px; font-size: 14px; font-weight: 600; cursor: pointer; transition: all 0.2s ease; display: inline-flex; align-items: center; justify-content: center; text-decoration: none; } .btn-primary { background-color: var(--dt-primary); color: white; } .btn-primary:hover { background-color: var(--dt-primary-dark); } .btn-secondary { background-color: var(--dt-gray-200); color: var(--dt-gray-700); } .btn-secondary:hover { background-color: var(--dt-gray-300); } .btn-success { background-color: var(--dt-success); color: white; } .btn-warning { background-color: var(--dt-warning); color: var(--dt-gray-800); } .btn-danger { background-color: var(--dt-danger); color: white; } .btn-sm { padding: 6px 12px; font-size: 12px; } /* 그리드 레이아웃 */ .content-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; } @media (max-width: 1200px) { .content-grid { grid-template-columns: 1fr; } } /* 프로젝트 등록 컨테이너 */ .project-registration-container { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; max-width: 1200px; } @media (max-width: 1000px) { .project-registration-container { grid-template-columns: 1fr; } } /* 프로젝트 폼 */ .project-form { display: flex; flex-direction: column; gap: 24px; } .customer-section, .delivery-section { padding: 20px; background-color: var(--dt-gray-50); border-radius: 8px; border: 1px solid var(--dt-gray-200); } .customer-section h4, .delivery-section h4 { font-size: 16px; font-weight: 600; color: var(--dt-gray-800); margin-bottom: 16px; } .customer-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } @media (max-width: 600px) { .customer-grid { grid-template-columns: 1fr; } } .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } @media (max-width: 600px) { .form-row { grid-template-columns: 1fr; } } /* 자동 생성 미리보기 */ .generated-preview { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; } .generated-preview .label { font-size: 14px; color: var(--dt-gray-600); font-weight: 500; } .generated-preview .value { font-size: 16px; font-weight: 700; color: var(--dt-gray-500); font-family: 'Monaco', 'Menlo', monospace; } .generation-rule { font-size: 12px; color: var(--dt-gray-500); font-style: italic; } /* 폼 액션 */ .form-actions { display: flex; gap: 12px; justify-content: flex-end; padding-top: 20px; border-top: 1px solid var(--dt-gray-200); } @media (max-width: 600px) { .form-actions { flex-direction: column; } } /* 요청 리스트 */ .request-list { display: flex; flex-direction: column; gap: 12px; } .request-item { display: flex; justify-content: space-between; align-items: center; padding: 16px; border: 1px solid var(--dt-gray-200); border-radius: 8px; background-color: var(--dt-gray-50); transition: all 0.2s ease; } .request-item:hover { background-color: white; box-shadow: var(--dt-shadow); } .request-item.status-approved { border-left: 4px solid var(--dt-success); } .request-item.status-pending { border-left: 4px solid var(--dt-warning); } .request-item.status-review { border-left: 4px solid var(--dt-danger); } .request-title { font-size: 16px; font-weight: 600; color: var(--dt-gray-800); margin-bottom: 6px; } .request-details { display: flex; gap: 12px; flex-wrap: wrap; font-size: 12px; color: var(--dt-gray-600); } .request-details span { padding: 2px 8px; background-color: white; border-radius: 12px; border: 1px solid var(--dt-gray-200); } .request-status { display: flex; flex-direction: column; align-items: flex-end; gap: 6px; } .job-no { font-size: 12px; font-weight: 700; color: var(--dt-primary); font-family: 'Monaco', 'Menlo', monospace; } /* 상태별 스타일 */ .status-warning { background-color: var(--dt-danger); color: white; } .status-planning { background-color: var(--dt-gray-400); color: white; } .status-production { background-color: var(--dt-primary); color: white; } .status-in-progress { background-color: var(--dt-warning); color: var(--dt-gray-800); } @media (max-width: 600px) { .request-item { flex-direction: column; align-items: flex-start; gap: 12px; } .request-status { align-items: flex-start; flex-direction: row; justify-content: space-between; width: 100%; } } /* 간단한 프로젝트 선택기 */ .simple-project-selector { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 70vh; text-align: center; padding: 40px 20px; } .simple-project-selector h1 { font-size: 48px; font-weight: 300; color: var(--dt-gray-800); margin-bottom: 16px; } .simple-project-selector p { font-size: 18px; color: var(--dt-gray-600); margin-bottom: 40px; } .project-select-box { margin-bottom: 32px; } .project-select-box select { padding: 16px 24px; font-size: 16px; border: 2px solid var(--dt-gray-200); border-radius: 8px; background-color: white; color: var(--dt-gray-700); min-width: 400px; cursor: pointer; } .project-select-box select:focus { outline: none; border-color: var(--dt-primary); } .project-actions { display: flex; gap: 16px; flex-wrap: wrap; justify-content: center; } .project-actions .btn { padding: 12px 24px; font-size: 16px; } @media (max-width: 768px) { .simple-project-selector h1 { font-size: 36px; } .project-select-box select { min-width: 300px; font-size: 14px; } .project-actions { flex-direction: column; align-items: center; } .project-actions .btn { width: 100%; max-width: 300px; } } /* 자동 생성 정보 */ .auto-generated { margin: 20px 0; padding: 16px; background-color: var(--dt-gray-50); border-radius: 6px; border: 1px solid var(--dt-gray-200); } .generated-item { display: flex; justify-content: space-between; align-items: center; } .generated-item .label { font-size: 14px; color: var(--dt-gray-600); font-weight: 500; } .generated-item .value { font-size: 16px; font-weight: 700; color: var(--dt-primary); font-family: 'Monaco', 'Menlo', monospace; } /* 정보 섹션 */ .info-section { margin-bottom: 24px; } .info-section h4, .info-section h5 { font-size: 16px; font-weight: 600; color: var(--dt-gray-800); margin-bottom: 12px; } .info-section h5 { font-size: 14px; margin-top: 16px; margin-bottom: 8px; } .info-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin-bottom: 16px; } .info-item { display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid var(--dt-gray-200); } .info-label { font-size: 14px; color: var(--dt-gray-600); font-weight: 500; } .info-value { font-size: 14px; color: var(--dt-gray-800); font-weight: 600; } .decisions ul { list-style: none; margin-left: 0; } .decisions li { padding: 4px 0; color: var(--dt-gray-700); font-size: 14px; } .decisions li:before { content: "•"; color: var(--dt-primary); font-weight: bold; margin-right: 8px; } /* 사양 그리드 */ .spec-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 16px; } .spec-item { padding: 12px; background-color: var(--dt-gray-50); border-radius: 6px; border: 1px solid var(--dt-gray-200); } .spec-label { display: block; font-size: 12px; color: var(--dt-gray-600); font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px; } .spec-value { font-size: 14px; color: var(--dt-gray-800); font-weight: 600; } /* 공정표 */ .process-chart { background-color: white; border-radius: 8px; box-shadow: var(--dt-shadow); border: 1px solid var(--dt-gray-200); margin-bottom: 24px; padding: 24px; } .process-chart h3 { font-size: 18px; font-weight: 600; color: var(--dt-gray-800); margin-bottom: 20px; } .gantt-container { display: flex; flex-direction: column; gap: 12px; } .process-item { display: grid; grid-template-columns: 200px 1fr 120px; align-items: center; gap: 16px; padding: 12px; border-radius: 6px; border: 1px solid var(--dt-gray-200); } .process-item.completed { background-color: rgba(52, 168, 83, 0.05); border-color: var(--dt-success); } .process-item.in-progress { background-color: rgba(74, 144, 226, 0.05); border-color: var(--dt-primary); } .process-item.pending { background-color: var(--dt-gray-50); border-color: var(--dt-gray-300); } .process-name { font-size: 14px; font-weight: 600; color: var(--dt-gray-800); } .process-responsible { font-size: 12px; color: var(--dt-gray-600); } .process-bar { position: relative; height: 24px; background-color: var(--dt-gray-200); border-radius: 12px; overflow: hidden; } .progress-fill { height: 100%; background-color: var(--dt-primary); border-radius: 12px; transition: width 0.3s ease; } .process-item.completed .progress-fill { background-color: var(--dt-success); } .progress-text { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 12px; font-weight: 600; color: white; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); } .process-date { font-size: 12px; color: var(--dt-gray-600); font-weight: 500; text-align: right; } /* 회의 레이아웃 */ .meeting-layout { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; margin-bottom: 24px; } @media (max-width: 1000px) { .meeting-layout { grid-template-columns: 1fr; } } .schedule-section, .delivery-section { background-color: white; border-radius: 8px; box-shadow: var(--dt-shadow); border: 1px solid var(--dt-gray-200); padding: 24px; } .schedule-section h3, .delivery-section h3 { font-size: 18px; font-weight: 600; color: var(--dt-gray-800); margin-bottom: 20px; } .schedule-list, .delivery-list { display: flex; flex-direction: column; gap: 12px; } .schedule-item { display: flex; gap: 16px; padding: 16px; border-radius: 6px; border: 1px solid var(--dt-gray-200); } .schedule-item.urgent { background-color: rgba(234, 67, 53, 0.05); border-color: var(--dt-danger); } .schedule-item.normal { background-color: var(--dt-gray-50); } .schedule-date { font-size: 14px; font-weight: 700; color: var(--dt-primary); min-width: 40px; } .schedule-title { font-size: 14px; font-weight: 600; color: var(--dt-gray-800); margin-bottom: 4px; } .schedule-type { font-size: 12px; color: var(--dt-gray-600); margin-bottom: 8px; } .schedule-memo { font-size: 12px; color: var(--dt-gray-700); line-height: 1.4; } .delivery-item { display: flex; align-items: center; gap: 12px; padding: 12px; border-radius: 6px; border: 1px solid var(--dt-gray-200); } .delivery-item.completed { background-color: rgba(52, 168, 83, 0.05); border-color: var(--dt-success); } .delivery-item.warning { background-color: rgba(251, 188, 4, 0.05); border-color: var(--dt-warning); } .delivery-item.delayed { background-color: rgba(234, 67, 53, 0.05); border-color: var(--dt-danger); } .delivery-status { font-size: 16px; } .delivery-name { font-size: 14px; font-weight: 600; color: var(--dt-gray-800); margin-bottom: 2px; } .delivery-date { font-size: 12px; color: var(--dt-gray-600); } /* Follow-up 섹션 */ .followup-section { background-color: white; border-radius: 8px; box-shadow: var(--dt-shadow); border: 1px solid var(--dt-gray-200); padding: 24px; } .followup-section h3 { font-size: 18px; font-weight: 600; color: var(--dt-gray-800); margin-bottom: 20px; } .followup-list { display: flex; flex-direction: column; gap: 16px; } .followup-item { display: grid; grid-template-columns: 80px 1fr 100px; gap: 16px; padding: 16px; border-radius: 6px; border: 1px solid var(--dt-gray-200); align-items: start; } .followup-item.priority-high { background-color: rgba(234, 67, 53, 0.05); border-color: var(--dt-danger); } .followup-item.priority-medium { background-color: rgba(251, 188, 4, 0.05); border-color: var(--dt-warning); } .followup-priority { font-size: 12px; font-weight: 600; text-align: center; } .followup-title { font-size: 14px; font-weight: 600; color: var(--dt-gray-800); margin-bottom: 6px; } .followup-description { font-size: 13px; color: var(--dt-gray-700); line-height: 1.4; margin-bottom: 8px; } .followup-meta { font-size: 11px; color: var(--dt-gray-600); } .followup-responsible { font-weight: 600; margin-right: 8px; } .followup-status { font-size: 12px; font-weight: 600; color: var(--dt-primary); text-align: center; } /* 구매 대시보드 */ .purchase-dashboard { background-color: white; border-radius: 8px; box-shadow: var(--dt-shadow); border: 1px solid var(--dt-gray-200); padding: 24px; margin-bottom: 24px; } .purchase-dashboard h3 { font-size: 18px; font-weight: 600; color: var(--dt-gray-800); margin-bottom: 20px; } .purchase-list { display: flex; flex-direction: column; gap: 16px; } .purchase-item { display: flex; justify-content: space-between; align-items: center; padding: 20px; border-radius: 8px; border: 1px solid var(--dt-gray-200); } .purchase-item.status-pending { background-color: rgba(251, 188, 4, 0.05); border-color: var(--dt-warning); } .purchase-item.status-inspecting { background-color: rgba(74, 144, 226, 0.05); border-color: var(--dt-primary); } .purchase-header { display: flex; align-items: center; gap: 12px; margin-bottom: 8px; } .po-number { font-size: 14px; font-weight: 700; color: var(--dt-primary); font-family: 'Monaco', 'Menlo', monospace; } .purchase-status { padding: 2px 8px; border-radius: 12px; font-size: 11px; font-weight: 600; } .item-name { font-size: 16px; font-weight: 600; color: var(--dt-gray-800); margin-bottom: 4px; } .item-meta, .item-dates { font-size: 12px; color: var(--dt-gray-600); margin-bottom: 2px; } /* 검수 레이아웃 */ .inspection-layout { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; margin-bottom: 24px; } @media (max-width: 1000px) { .inspection-layout { grid-template-columns: 1fr; } } .inspection-process, .storage-management { background-color: white; border-radius: 8px; box-shadow: var(--dt-shadow); border: 1px solid var(--dt-gray-200); padding: 24px; } .inspection-process h3, .storage-management h3 { font-size: 18px; font-weight: 600; color: var(--dt-gray-800); margin-bottom: 20px; } .process-steps { display: flex; flex-direction: column; gap: 20px; } .step { display: flex; gap: 16px; padding: 16px; border-radius: 8px; border: 1px solid var(--dt-gray-200); } .step.completed { background-color: rgba(52, 168, 83, 0.05); border-color: var(--dt-success); } .step.active { background-color: rgba(74, 144, 226, 0.05); border-color: var(--dt-primary); } .step.pending { background-color: var(--dt-gray-50); } .step-number { width: 32px; height: 32px; border-radius: 50%; background-color: var(--dt-gray-300); color: var(--dt-gray-700); display: flex; align-items: center; justify-content: center; font-weight: 600; font-size: 14px; flex-shrink: 0; } .step.completed .step-number { background-color: var(--dt-success); color: white; } .step.active .step-number { background-color: var(--dt-primary); color: white; } .step-content h4 { font-size: 16px; font-weight: 600; color: var(--dt-gray-800); margin-bottom: 12px; } .checklist { list-style: none; } .checklist li { padding: 4px 0; font-size: 14px; } .checklist li.checked { color: var(--dt-success); } .checklist li.active { color: var(--dt-primary); font-weight: 600; } .result-options { display: flex; gap: 8px; flex-wrap: wrap; } /* 창고 구역 */ .warehouse-zones { display: flex; flex-direction: column; gap: 16px; margin-bottom: 24px; } .zone-item { padding: 16px; border: 1px solid var(--dt-gray-200); border-radius: 8px; background-color: var(--dt-gray-50); } .zone-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; } .zone-name { font-size: 14px; font-weight: 600; color: var(--dt-gray-800); } .zone-capacity { font-size: 12px; color: var(--dt-gray-600); font-family: 'Monaco', 'Menlo', monospace; } .zone-shelves { display: flex; gap: 8px; flex-wrap: wrap; } .shelf { padding: 6px 12px; border-radius: 4px; font-size: 12px; font-weight: 600; cursor: pointer; transition: all 0.2s ease; } .shelf.available { background-color: var(--dt-success); color: white; } .shelf.occupied { background-color: var(--dt-gray-400); color: white; } .shelf.available:hover { background-color: var(--dt-primary); } /* 보관 액션 */ .storage-actions { padding: 16px; background-color: var(--dt-gray-50); border-radius: 6px; border: 1px solid var(--dt-gray-200); } .selected-location { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; } .selected-location .label { font-size: 14px; color: var(--dt-gray-600); font-weight: 500; } .selected-location .location { font-size: 14px; font-weight: 700; color: var(--dt-primary); font-family: 'Monaco', 'Menlo', monospace; } .storage-actions .btn { margin-right: 8px; margin-bottom: 8px; } /* 인수인계 현황 */ .handover-status { background-color: white; border-radius: 8px; box-shadow: var(--dt-shadow); border: 1px solid var(--dt-gray-200); padding: 24px; } .handover-status h3 { font-size: 18px; font-weight: 600; color: var(--dt-gray-800); margin-bottom: 20px; } .handover-list { display: flex; flex-direction: column; gap: 12px; } .handover-item { display: grid; grid-template-columns: 200px 1fr 120px; align-items: center; gap: 16px; padding: 16px; border: 1px solid var(--dt-gray-200); border-radius: 6px; background-color: var(--dt-gray-50); } .item-name { font-size: 14px; font-weight: 600; color: var(--dt-gray-800); } .item-location { font-size: 12px; color: var(--dt-gray-600); font-family: 'Monaco', 'Menlo', monospace; } .quantity-info { display: flex; gap: 12px; font-size: 12px; } .quantity-info span { padding: 2px 6px; border-radius: 4px; font-weight: 600; } .total { background-color: var(--dt-gray-200); color: var(--dt-gray-700); } .handed { background-color: var(--dt-success); color: white; } .remaining { background-color: var(--dt-warning); color: var(--dt-gray-800); } .handover-status-badge { text-align: center; font-size: 12px; font-weight: 600; } /* 작업 레이아웃 */ .work-layout { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; } @media (max-width: 1200px) { .work-layout { grid-template-columns: 1fr; } } .daily-work, .material-check { background-color: white; border-radius: 8px; box-shadow: var(--dt-shadow); border: 1px solid var(--dt-gray-200); padding: 24px; } .daily-work h3, .material-check h3 { font-size: 18px; font-weight: 600; color: var(--dt-gray-800); margin-bottom: 20px; } /* 작업 폼 */ .work-form { display: flex; flex-direction: column; gap: 24px; } .form-section h4 { font-size: 16px; font-weight: 600; color: var(--dt-gray-800); margin-bottom: 16px; } .progress-input { display: flex; align-items: center; gap: 12px; } .progress-slider { flex: 1; height: 6px; border-radius: 3px; background-color: var(--dt-gray-200); outline: none; -webkit-appearance: none; } .progress-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 20px; height: 20px; border-radius: 50%; background-color: var(--dt-primary); cursor: pointer; } .progress-value { font-size: 14px; font-weight: 600; color: var(--dt-primary); min-width: 40px; text-align: right; } /* 이슈 리스트 */ .issue-list { display: flex; flex-direction: column; gap: 12px; margin-bottom: 16px; } .issue-item { padding: 16px; border: 1px solid var(--dt-gray-200); border-radius: 6px; background-color: var(--dt-gray-50); } .issue-header { display: flex; align-items: center; gap: 12px; margin-bottom: 8px; } .issue-time { font-size: 12px; font-weight: 600; color: var(--dt-gray-600); font-family: 'Monaco', 'Menlo', monospace; } .issue-type { padding: 2px 8px; border-radius: 12px; font-size: 11px; font-weight: 600; } .type-material { background-color: var(--dt-warning); color: var(--dt-gray-800); } .type-quality { background-color: var(--dt-danger); color: white; } .issue-urgency { padding: 2px 8px; border-radius: 12px; font-size: 11px; font-weight: 600; } .urgency-high { background-color: var(--dt-danger); color: white; } .urgency-medium { background-color: var(--dt-warning); color: var(--dt-gray-800); } .issue-description { font-size: 14px; color: var(--dt-gray-800); margin-bottom: 4px; } .issue-solution { font-size: 12px; color: var(--dt-gray-600); font-style: italic; } /* 자재 검색 */ .material-search { margin-bottom: 20px; } .search-input { display: flex; gap: 12px; } .search-input .form-input { flex: 1; } /* 자재 리스트 */ .material-list { display: flex; flex-direction: column; gap: 12px; margin-bottom: 20px; } .material-item { display: flex; justify-content: space-between; align-items: center; padding: 16px; border: 1px solid var(--dt-gray-200); border-radius: 6px; } .material-item.status-available { background-color: rgba(52, 168, 83, 0.05); border-color: var(--dt-success); } .material-item.status-ordered { background-color: rgba(251, 188, 4, 0.05); border-color: var(--dt-warning); } .material-item.status-not-requested { background-color: var(--dt-gray-50); border-color: var(--dt-gray-300); } .material-item.status-ready { background-color: rgba(74, 144, 226, 0.05); border-color: var(--dt-primary); } .material-name { font-size: 14px; font-weight: 600; color: var(--dt-gray-800); margin-bottom: 4px; } .material-details { font-size: 12px; color: var(--dt-gray-600); } .material-status { display: flex; align-items: center; gap: 8px; } .material-qty, .material-date, .material-note { font-size: 12px; color: var(--dt-gray-600); font-weight: 600; } /* 자재 액션 */ .material-actions { padding: 16px; background-color: var(--dt-gray-50); border-radius: 6px; border: 1px solid var(--dt-gray-200); } .action-note { margin-bottom: 12px; } .action-note p { font-size: 13px; color: var(--dt-gray-700); margin-bottom: 4px; } .action-note strong { color: var(--dt-danger); } /* 반응형 디자인 */ @media (max-width: 768px) { body { flex-direction: column; } .sidebar { width: 100%; height: auto; order: 2; } .main-content { order: 1; } .page { padding: 16px; } .content-grid, .meeting-layout, .inspection-layout, .work-layout { grid-template-columns: 1fr; } .process-item { grid-template-columns: 1fr; gap: 8px; } .followup-item { grid-template-columns: 1fr; gap: 12px; } .handover-item { grid-template-columns: 1fr; gap: 8px; } } /* 워크플로우 개요 페이지 스타일 */ .workflow-overview-container { max-width: 1400px; margin: 0 auto; padding: 2rem; } /* 플로우차트 스타일 */ .workflow-flowchart { position: relative; margin-bottom: 3rem; } .workflow-row { display: flex; justify-content: space-between; align-items: center; margin-bottom: 2rem; gap: 1rem; } .workflow-box { flex: 1; max-width: 300px; background: white; border: 2px solid var(--dt-gray-200); border-radius: 12px; padding: 1.5rem; cursor: pointer; transition: all 0.3s ease; box-shadow: var(--dt-shadow); position: relative; text-align: center; min-height: 180px; display: flex; flex-direction: column; justify-content: center; } .workflow-box:hover { border-color: var(--dt-primary); box-shadow: var(--dt-shadow-lg); transform: translateY(-3px); } .workflow-box.special { border-color: #ed8936; background: linear-gradient(135deg, #fff5f0, #fef5e7); } .workflow-box.special:hover { border-color: #dd6b20; box-shadow: 0 8px 25px rgba(237, 137, 54, 0.25); } .box-number { width: 40px; height: 40px; border-radius: 50%; background: linear-gradient(135deg, var(--dt-primary), var(--dt-primary-light)); color: white; display: flex; align-items: center; justify-content: center; font-size: 1.2rem; font-weight: 600; margin: 0 auto 1rem auto; pointer-events: none; } .workflow-box.special .box-number { background: linear-gradient(135deg, #ed8936, #f6ad55); font-size: 1rem; } .box-icon { font-size: 2rem; margin-bottom: 0.5rem; pointer-events: none; } .box-title { font-size: 1.1rem; font-weight: 600; color: var(--dt-gray-800); margin-bottom: 0.75rem; pointer-events: none; } .box-subtitle { font-size: 0.85rem; color: var(--dt-gray-600); line-height: 1.4; pointer-events: none; } .flow-arrow { color: var(--dt-primary); font-size: 2rem; font-weight: 600; display: flex; align-items: center; justify-content: center; min-width: 40px; pointer-events: none; } .flow-arrow.horizontal { margin: 0 0.5rem; } .flow-connections { position: absolute; top: 0; left: 0; right: 0; bottom: 0; pointer-events: none; z-index: 0; } .vertical-line { position: absolute; width: 2px; background: var(--dt-primary); opacity: 0.6; } /* 반응형 디자인 */ @media (max-width: 1200px) { .workflow-row { flex-direction: column; gap: 2rem; } .workflow-box { max-width: 100%; width: 100%; } .flow-arrow.horizontal { transform: rotate(90deg); margin: 1rem 0; } .flow-connections { display: none; } } @media (max-width: 768px) { .workflow-overview-container { padding: 1rem; } .workflow-box { min-height: 150px; padding: 1rem; } .box-title { font-size: 1rem; } .box-subtitle { font-size: 0.8rem; } } .workflow-summary { background: var(--dt-gray-50); border: 1px solid var(--dt-gray-200); border-radius: 12px; padding: 2rem; } .workflow-summary h3 { color: var(--dt-gray-800); margin: 0 0 1rem 0; font-size: 1.3rem; font-weight: 600; } .workflow-summary ul { list-style: none; padding: 0; margin: 0; } .workflow-summary li { padding: 0.75rem 0; border-bottom: 1px solid var(--dt-gray-200); color: var(--dt-gray-700); line-height: 1.6; } .workflow-summary li:last-child { border-bottom: none; } .workflow-summary strong { color: var(--dt-gray-800); } /* 워크플로우 상세 페이지 스타일 */ .workflow-detail-container { max-width: 1000px; margin: 0 auto; padding: 2rem; } .detail-section { background: white; border: 1px solid var(--dt-gray-200); border-radius: 12px; padding: 2rem; margin-bottom: 2rem; box-shadow: var(--dt-shadow); } .detail-section h3 { color: var(--dt-gray-800); margin: 0 0 1.5rem 0; font-size: 1.3rem; font-weight: 600; padding-bottom: 0.75rem; border-bottom: 2px solid var(--dt-gray-100); } .feature-list { list-style: none; padding: 0; margin: 0; } .feature-list li { padding: 0.75rem 0; border-bottom: 1px solid var(--dt-gray-50); color: var(--dt-gray-700); line-height: 1.6; position: relative; padding-left: 1.5rem; } .feature-list li:before { content: "✓"; position: absolute; left: 0; color: var(--dt-primary); font-weight: 600; } .feature-list li:last-child { border-bottom: none; } .workflow-connection { display: flex; align-items: center; gap: 1rem; margin-bottom: 1.5rem; flex-wrap: wrap; } .connection-item { background: var(--dt-gray-100); color: var(--dt-gray-700); padding: 0.75rem 1rem; border-radius: 8px; font-weight: 500; white-space: nowrap; } .arrow { color: var(--dt-gray-400); font-size: 1.2rem; font-weight: 600; } .module-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 0.75rem; } .module-item { background: var(--dt-gray-50); color: var(--dt-gray-700); padding: 1rem; border-radius: 8px; text-align: center; font-weight: 500; border: 1px solid var(--dt-gray-200); } .consideration-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1.5rem; } .consideration-item { background: var(--dt-gray-50); padding: 1.5rem; border-radius: 8px; border: 1px solid var(--dt-gray-200); } .consideration-item h4 { color: var(--dt-gray-800); margin: 0 0 0.75rem 0; font-size: 1.1rem; font-weight: 600; } .consideration-item p { color: var(--dt-gray-600); margin: 0; line-height: 1.5; } .process-flow { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; margin-bottom: 1.5rem; } .process-step { background: var(--dt-gray-100); color: var(--dt-gray-700); padding: 1rem 1.5rem; border-radius: 8px; font-weight: 500; text-align: center; flex: 1; min-width: 150px; } .process-step h4 { color: var(--dt-gray-800); margin: 0 0 0.5rem 0; font-size: 1rem; font-weight: 600; } .process-step p { margin: 0; font-size: 0.9rem; color: var(--dt-gray-600); } .process-step ul { text-align: left; margin: 0.5rem 0 0 0; padding-left: 1rem; } .process-step li { color: var(--dt-gray-700); font-size: 0.9rem; margin-bottom: 0.25rem; } .process-flow-vertical { display: flex; flex-direction: column; align-items: center; gap: 0.5rem; } .process-flow-vertical .process-step { width: 100%; max-width: 300px; } .arrow-down { color: var(--dt-gray-400); font-size: 1.5rem; font-weight: 600; } .department-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1.5rem; margin-top: 1.5rem; } .department-card { background: var(--dt-gray-50); border: 1px solid var(--dt-gray-200); border-radius: 8px; padding: 1.5rem; } .department-card h4 { color: var(--dt-gray-800); margin: 0 0 1rem 0; font-size: 1.1rem; font-weight: 600; } .department-card ul { list-style: none; padding: 0; margin: 0; } .department-card li { color: var(--dt-gray-700); padding: 0.5rem 0; border-bottom: 1px solid var(--dt-gray-200); position: relative; padding-left: 1.5rem; } .department-card li:before { content: "•"; position: absolute; left: 0; color: var(--dt-primary); font-weight: 600; } .department-card li:last-child { border-bottom: none; } .important-notes { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1.5rem; } .note-item { background: #fff5f5; border: 1px solid #fed7d7; border-radius: 8px; padding: 1.5rem; } .note-item h4 { color: #c53030; margin: 0 0 0.75rem 0; font-size: 1rem; font-weight: 600; } .note-item p { color: #742a2a; margin: 0; line-height: 1.5; } .responsibility-card { background: var(--dt-gray-50); border: 1px solid var(--dt-gray-200); border-radius: 8px; padding: 1.5rem; margin-bottom: 1.5rem; } .responsibility-card h4 { color: var(--dt-gray-800); margin: 0 0 1rem 0; font-size: 1.1rem; font-weight: 600; } .ncr-process { margin-top: 2rem; } .ncr-process h4 { color: var(--dt-gray-800); margin: 0 0 1rem 0; font-size: 1.1rem; font-weight: 600; } .department-responsibilities { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 1.5rem; } .problem-handling h4 { color: var(--dt-gray-800); margin: 1.5rem 0 0.75rem 0; font-size: 1rem; font-weight: 600; } .problem-handling h4:first-child { margin-top: 0; } .problem-handling p { color: var(--dt-gray-700); margin: 0 0 1rem 0; line-height: 1.6; } .meeting-features { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1.5rem; } .meeting-features .feature-card { background: var(--dt-gray-50); border: 1px solid var(--dt-gray-200); border-radius: 8px; padding: 1.5rem; } .meeting-features .feature-card h4 { color: var(--dt-gray-800); margin: 0 0 0.75rem 0; font-size: 1.1rem; font-weight: 600; } .meeting-features .feature-card p { color: var(--dt-gray-600); margin: 0; line-height: 1.5; } .purpose-list { list-style: none; padding: 0; margin: 0; } .purpose-list li { padding: 0.75rem 0; border-bottom: 1px solid var(--dt-gray-50); color: var(--dt-gray-700); line-height: 1.6; position: relative; padding-left: 1.5rem; } .purpose-list li:before { content: "→"; position: absolute; left: 0; color: var(--dt-primary); font-weight: 600; } .purpose-list li:last-child { border-bottom: none; } .meeting-components { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1.5rem; } .component-item { background: var(--dt-gray-50); border: 1px solid var(--dt-gray-200); border-radius: 8px; padding: 1.5rem; text-align: center; } .component-item h4 { color: var(--dt-gray-800); margin: 0 0 0.75rem 0; font-size: 1rem; font-weight: 600; } .component-item p { color: var(--dt-gray-600); margin: 0; font-size: 0.9rem; line-height: 1.5; } .checklist-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1.5rem; } .checklist-item { background: #f0fff4; border: 1px solid #c6f6d5; border-radius: 8px; padding: 1.5rem; } .checklist-item h4 { color: #22543d; margin: 0 0 1rem 0; font-size: 1rem; font-weight: 600; } .checklist-item ul { list-style: none; padding: 0; margin: 0; } .checklist-item li { color: #276749; padding: 0.5rem 0; position: relative; padding-left: 1.5rem; } .checklist-item li:before { content: "✓"; position: absolute; left: 0; color: #38a169; font-weight: 600; } .approval-flow { display: flex; flex-direction: column; align-items: center; gap: 1rem; } .approval-step { background: var(--dt-gray-100); border: 1px solid var(--dt-gray-300); border-radius: 8px; padding: 1.5rem; width: 100%; max-width: 400px; text-align: center; } .approval-step h4 { color: var(--dt-gray-800); margin: 0 0 0.75rem 0; font-size: 1rem; font-weight: 600; } .approval-step p { color: var(--dt-gray-700); margin: 0; line-height: 1.5; } .report-components { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1.5rem; } .report-item { background: var(--dt-gray-50); border: 1px solid var(--dt-gray-200); border-radius: 8px; padding: 1.5rem; text-align: center; } .report-item h4 { color: var(--dt-gray-800); margin: 0 0 0.75rem 0; font-size: 1rem; font-weight: 600; } .report-item p { color: var(--dt-gray-600); margin: 0; font-size: 0.9rem; line-height: 1.5; } .btn-back { background: var(--dt-gray-100); color: var(--dt-gray-700); border: 1px solid var(--dt-gray-300); padding: 0.5rem 1rem; border-radius: 6px; font-size: 0.9rem; cursor: pointer; transition: all 0.2s ease; margin-bottom: 1rem; text-decoration: none; display: inline-block; } .btn-back:hover { background: var(--dt-gray-200); color: var(--dt-gray-800); }