/* Bootstrap 5 호환 커스텀 CSS */ /* 커스텀 색상 변수 정의 (Bootstrap과 호환) */ :root { /* Primary 색상 */ --bs-primary: #6366f1; --bs-primary-rgb: 99, 102, 241; /* 기본 테마 색상 */ --cf-primary: #6366f1; --cf-secondary: #64748b; --cf-success: #10b981; --cf-danger: #ef4444; --cf-warning: #f59e0b; --cf-info: #3b82f6; --cf-light: #f8fafc; --cf-dark: #1e293b; /* 폰트 설정 */ --cf-font-family: 'Inter', 'Open Sans', -apple-system, BlinkMacSystemFont, sans-serif; } /* 다크 테마 색상 (Bootstrap 다크 모드용) */ [data-bs-theme="dark"] { --bs-body-bg: #0f172a; --bs-body-color: #f1f5f9; --bs-border-color: #334155; --bs-card-bg: #1e293b; } /* 기본 폰트 설정 */ body { font-family: var(--cf-font-family); font-size: 0.875rem; line-height: 1.5; } /* 커스텀 버튼 스타일 */ .btn-cf-primary { background-color: var(--cf-primary); border-color: var(--cf-primary); color: white; } .btn-cf-primary:hover { background-color: #5856eb; border-color: #5856eb; color: white; } /* 커스텀 카드 스타일 */ .card-cf { box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); border: 1px solid rgba(0, 0, 0, 0.05); } [data-bs-theme="dark"] .card-cf { box-shadow: 0 1px 3px 0 rgba(255, 255, 255, 0.1), 0 1px 2px 0 rgba(255, 255, 255, 0.06); border: 1px solid rgba(255, 255, 255, 0.1); } /* 네비게이션 바 스타일 */ .navbar-cf { backdrop-filter: blur(8px); background-color: rgba(248, 250, 252, 0.8); } [data-bs-theme="dark"] .navbar-cf { background-color: rgba(15, 23, 42, 0.8); } /* 폼 요소 스타일링 */ .form-control:focus { border-color: var(--cf-primary); box-shadow: 0 0 0 0.2rem rgba(99, 102, 241, 0.25); } /* 드롭다운 메뉴 스타일링 */ .dropdown-menu { border: 1px solid rgba(0, 0, 0, 0.05); box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); } [data-bs-theme="dark"] .dropdown-menu { border: 1px solid rgba(255, 255, 255, 0.1); box-shadow: 0 4px 6px -1px rgba(255, 255, 255, 0.1), 0 2px 4px -1px rgba(255, 255, 255, 0.06); } /* 테이블 스타일링 */ .table-cf { --bs-table-striped-bg: rgba(248, 250, 252, 0.5); } [data-bs-theme="dark"] .table-cf { --bs-table-striped-bg: rgba(30, 41, 59, 0.5); } /* 배지 스타일링 */ .badge-cf-primary { background-color: var(--cf-primary); } .badge-cf-secondary { background-color: var(--cf-secondary); } .badge-cf-success { background-color: var(--cf-success); } .badge-cf-danger { background-color: var(--cf-danger); } .badge-cf-warning { background-color: var(--cf-warning); } /* 스케줄 관련 커스텀 스타일 */ .schedule-priority-high { border-left: 4px solid var(--cf-danger); } .schedule-priority-medium { border-left: 4px solid var(--cf-warning); } .schedule-priority-low { border-left: 4px solid var(--cf-info); } .schedule-priority-urgent { border-left: 4px solid #dc2626; } /* 상태별 배지 색상 */ .status-pending { background-color: var(--cf-warning); color: white; } .status-in-progress { background-color: var(--cf-info); color: white; } .status-completed { background-color: var(--cf-success); color: white; } .status-cancelled { background-color: var(--cf-secondary); color: white; } /* 애니메이션 */ .fade-in { animation: fadeIn 0.3s ease-in-out; } @keyframes fadeIn { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } /* 반응형 유틸리티 */ @media (max-width: 576px) { .mobile-stack > * { width: 100% !important; margin-bottom: 0.5rem; } } /* 접근성 개선 */ .sr-only-focusable:focus { position: static !important; width: auto !important; height: auto !important; padding: inherit !important; margin: inherit !important; overflow: visible !important; clip: auto !important; white-space: inherit !important; } /* 커스텀 스크롤바 */ .custom-scrollbar { scrollbar-width: thin; scrollbar-color: rgba(156, 163, 175, 0.5) transparent; } .custom-scrollbar::-webkit-scrollbar { width: 6px; } .custom-scrollbar::-webkit-scrollbar-track { background: transparent; } .custom-scrollbar::-webkit-scrollbar-thumb { background-color: rgba(156, 163, 175, 0.5); border-radius: 3px; } .custom-scrollbar::-webkit-scrollbar-thumb:hover { background-color: rgba(156, 163, 175, 0.8); }