/** * annual-vacation-overview.css * 연간 연차 현황 페이지 스타일 */ .page-container { min-height: 100vh; background: var(--color-bg-primary); } .main-content { padding: 2rem 0; } .content-wrapper { max-width: 1400px; margin: 0 auto; padding: 0 2rem; } /* 페이지 헤더 */ .page-header { margin-bottom: 2rem; } .page-title { font-size: 2rem; font-weight: 700; color: var(--color-text-primary); margin-bottom: 0.5rem; } .page-description { font-size: 1rem; color: var(--color-text-secondary); margin: 0; } /* 필터 섹션 */ .filter-section { margin-bottom: 2rem; } .filter-controls { display: flex; gap: 1rem; align-items: flex-end; flex-wrap: wrap; } .form-group { display: flex; flex-direction: column; gap: 0.5rem; min-width: 200px; } .form-group label { font-size: 0.875rem; font-weight: 600; color: var(--color-text-primary); } .form-select { padding: 0.625rem 1rem; border: 1px solid var(--color-border); border-radius: 8px; background: white; font-size: 0.875rem; color: var(--color-text-primary); transition: all 0.2s; } .form-select:focus { outline: none; border-color: var(--color-primary); box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); } /* 탭 네비게이션 */ .tabs-section { margin-bottom: 2rem; } .tabs-nav { display: flex; gap: 0.5rem; border-bottom: 2px solid var(--color-border); padding: 0; margin: 0; } .tab-btn { padding: 1rem 2rem; border: none; background: none; color: var(--color-text-secondary); font-size: 1rem; font-weight: 600; cursor: pointer; position: relative; transition: all 0.2s; border-radius: 8px 8px 0 0; } .tab-btn:hover { color: var(--color-primary); background: rgba(59, 130, 246, 0.05); } .tab-btn.active { color: var(--color-primary); background: white; } .tab-btn.active::after { content: ''; position: absolute; bottom: -2px; left: 0; right: 0; height: 2px; background: var(--color-primary); } /* 탭 컨텐츠 */ .tab-content { display: none; } .tab-content.active { display: block; } /* 월 선택 컨트롤 */ .month-controls { display: flex; gap: 1rem; align-items: center; } .month-controls .form-select { min-width: 120px; } /* 차트 섹션 */ .chart-section { margin-bottom: 2rem; } .card-header { display: flex; justify-content: space-between; align-items: center; padding: 1.5rem; border-bottom: 1px solid var(--color-border); } .card-title { font-size: 1.25rem; font-weight: 600; color: var(--color-text-primary); margin: 0; } .chart-controls { display: flex; gap: 0.5rem; } .btn-outline { background: white; border: 1px solid var(--color-border); color: var(--color-text-secondary); } .btn-outline:hover { background: var(--color-bg-secondary); border-color: var(--color-primary); color: var(--color-primary); } .btn-outline.active { background: var(--color-primary); border-color: var(--color-primary); color: white; } .chart-container { position: relative; height: 500px; padding: 1.5rem; } /* 테이블 섹션 */ .table-section { margin-bottom: 2rem; } .table-responsive { overflow-x: auto; } .data-table { width: 100%; border-collapse: collapse; font-size: 0.875rem; } .data-table thead { background: var(--color-bg-secondary); } .data-table th { padding: 1rem; text-align: left; font-weight: 600; color: var(--color-text-primary); border-bottom: 2px solid var(--color-border); white-space: nowrap; } .data-table tbody tr { border-bottom: 1px solid var(--color-border); transition: background 0.2s; } .data-table tbody tr:hover { background: var(--color-bg-secondary); } .data-table td { padding: 1rem; color: var(--color-text-primary); } .loading-state { padding: 3rem 1rem !important; text-align: center; } .loading-state .spinner { margin: 0 auto 1rem; width: 40px; height: 40px; border: 4px solid var(--color-border); border-top-color: var(--color-primary); border-radius: 50%; animation: spin 1s linear infinite; } .loading-state p { margin: 0; color: var(--color-text-secondary); } @keyframes spin { to { transform: rotate(360deg); } } /* 사용률 프로그레스 바 */ .usage-rate-cell { display: flex; align-items: center; gap: 0.5rem; } .progress-bar { flex: 1; height: 8px; background: var(--color-bg-secondary); border-radius: 4px; overflow: hidden; } .progress-fill { height: 100%; border-radius: 4px; transition: width 0.3s ease; } .progress-fill.low { background: linear-gradient(90deg, #10b981 0%, #059669 100%); } .progress-fill.medium { background: linear-gradient(90deg, #f59e0b 0%, #d97706 100%); } .progress-fill.high { background: linear-gradient(90deg, #ef4444 0%, #dc2626 100%); } .usage-rate-text { font-weight: 600; min-width: 45px; text-align: right; } /* 반응형 */ @media (max-width: 768px) { .content-wrapper { padding: 0 1rem; } .page-title { font-size: 1.5rem; } .tabs-nav { flex-direction: column; gap: 0; } .tab-btn { border-radius: 0; } .filter-controls { flex-direction: column; align-items: stretch; } .form-group { width: 100%; min-width: auto; } .chart-container { height: 400px; } .card-header { flex-direction: column; gap: 1rem; align-items: flex-start; } .chart-controls { width: 100%; } .chart-controls button { flex: 1; } }