/* 夥伴對齊系統 - 樣式表 */ :root { --primary-color: #0d6efd; --secondary-color: #6c757d; --success-color: #198754; --danger-color: #dc3545; --warning-color: #ffc107; --info-color: #0dcaf0; --light-color: #f8f9fa; --dark-color: #212529; --border-radius: 0.375rem; --box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); --transition: all 0.15s ease-in-out; } /* 全局樣式 */ body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #f8f9fa; line-height: 1.6; } /* 導航欄樣式 */ .navbar-brand { font-weight: 600; font-size: 1.25rem; } .navbar-nav .nav-link { font-weight: 500; transition: var(--transition); border-radius: var(--border-radius); margin: 0 0.25rem; } .navbar-nav .nav-link:hover { background-color: rgba(255, 255, 255, 0.1); transform: translateY(-1px); } .navbar-nav .nav-link.active { background-color: rgba(255, 255, 255, 0.2); font-weight: 600; } /* 卡片樣式 */ .card { border: none; border-radius: var(--border-radius); box-shadow: var(--box-shadow); transition: var(--transition); margin-bottom: 1.5rem; } .card:hover { box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); transform: translateY(-2px); } .card-header { background-color: #fff; border-bottom: 1px solid #dee2e6; font-weight: 600; padding: 1rem 1.25rem; } .card-body { padding: 1.25rem; } /* 儀表板卡片樣式 */ .card.bg-primary, .card.bg-success, .card.bg-warning, .card.bg-info { border: none; background: linear-gradient(135deg, var(--primary-color), #0056b3); } .card.bg-success { background: linear-gradient(135deg, var(--success-color), #146c43); } .card.bg-warning { background: linear-gradient(135deg, var(--warning-color), #e0a800); } .card.bg-info { background: linear-gradient(135deg, var(--info-color), #0aa2c0); } /* 按鈕樣式 */ .btn { border-radius: var(--border-radius); font-weight: 500; transition: var(--transition); border: none; padding: 0.5rem 1rem; } .btn:hover { transform: translateY(-1px); box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.15); } .btn-primary { background: linear-gradient(135deg, var(--primary-color), #0056b3); } .btn-success { background: linear-gradient(135deg, var(--success-color), #146c43); } .btn-danger { background: linear-gradient(135deg, var(--danger-color), #b02a37); } .btn-warning { background: linear-gradient(135deg, var(--warning-color), #e0a800); color: #000; } .btn-info { background: linear-gradient(135deg, var(--info-color), #0aa2c0); } /* 表單樣式 */ .form-control, .form-select { border-radius: var(--border-radius); border: 1px solid #ced4da; transition: var(--transition); padding: 0.5rem 0.75rem; } .form-control:focus, .form-select:focus { border-color: var(--primary-color); box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.25); } .form-label { font-weight: 500; color: var(--dark-color); margin-bottom: 0.5rem; } /* 能力評估樣式 */ .capability-card { border-left: 4px solid var(--primary-color); transition: var(--transition); } .capability-card:hover { border-left-color: var(--success-color); background-color: #f8f9fa; } .form-check-input:checked { background-color: var(--primary-color); border-color: var(--primary-color); } .form-check-label { font-size: 0.9rem; line-height: 1.4; } /* 排名表格樣式 */ .table { border-radius: var(--border-radius); overflow: hidden; box-shadow: var(--box-shadow); } .table thead th { background-color: var(--primary-color); color: white; border: none; font-weight: 600; padding: 1rem 0.75rem; } .table tbody tr { transition: var(--transition); } .table tbody tr:hover { background-color: #f8f9fa; transform: scale(1.01); } /* 徽章樣式 */ .badge { font-size: 0.75rem; font-weight: 500; padding: 0.375rem 0.75rem; border-radius: var(--border-radius); } /* 通知樣式 */ .alert { border: none; border-radius: var(--border-radius); border-left: 4px solid; margin-bottom: 1rem; } .alert-primary { border-left-color: var(--primary-color); background-color: rgba(13, 110, 253, 0.1); } .alert-success { border-left-color: var(--success-color); background-color: rgba(25, 135, 84, 0.1); } .alert-warning { border-left-color: var(--warning-color); background-color: rgba(255, 193, 7, 0.1); } .alert-danger { border-left-color: var(--danger-color); background-color: rgba(220, 53, 69, 0.1); } /* 模態框樣式 */ .modal-content { border: none; border-radius: var(--border-radius); box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175); } .modal-header { border-bottom: 1px solid #dee2e6; background-color: #f8f9fa; border-radius: var(--border-radius) var(--border-radius) 0 0; } .modal-footer { border-top: 1px solid #dee2e6; background-color: #f8f9fa; border-radius: 0 0 var(--border-radius) var(--border-radius); } /* 載入動畫 */ .spinner-border { width: 3rem; height: 3rem; } /* Toast 樣式 */ .toast { border: none; border-radius: var(--border-radius); box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); } .toast-header { background-color: #f8f9fa; border-bottom: 1px solid #dee2e6; } /* 標籤頁樣式 */ .nav-tabs .nav-link { border: none; border-radius: var(--border-radius) var(--border-radius) 0 0; color: var(--secondary-color); font-weight: 500; transition: var(--transition); } .nav-tabs .nav-link:hover { border-color: transparent; background-color: #f8f9fa; } .nav-tabs .nav-link.active { background-color: var(--primary-color); color: white; border-color: var(--primary-color); } /* 下拉選單樣式 */ .dropdown-menu { border: none; border-radius: var(--border-radius); box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); padding: 0.5rem 0; } .dropdown-item { padding: 0.5rem 1rem; transition: var(--transition); } .dropdown-item:hover { background-color: #f8f9fa; color: var(--primary-color); } /* 響應式設計 */ @media (max-width: 768px) { .container-fluid { padding: 0.5rem; } .card { margin-bottom: 1rem; } .card-body { padding: 1rem; } .table-responsive { font-size: 0.875rem; } .btn { padding: 0.375rem 0.75rem; font-size: 0.875rem; } } @media (max-width: 576px) { .navbar-brand { font-size: 1rem; } .card-header h5 { font-size: 1rem; } .modal-dialog { margin: 0.5rem; } } /* 動畫效果 */ @keyframes fadeIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .section { animation: fadeIn 0.5s ease-in-out; } /* 自定義滾動條 */ ::-webkit-scrollbar { width: 8px; } ::-webkit-scrollbar-track { background: #f1f1f1; border-radius: 4px; } ::-webkit-scrollbar-thumb { background: var(--primary-color); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: #0056b3; } /* 工具提示樣式 */ .tooltip { font-size: 0.875rem; } .tooltip-inner { background-color: var(--dark-color); border-radius: var(--border-radius); } /* 進度條樣式 */ .progress { height: 0.5rem; border-radius: var(--border-radius); background-color: #e9ecef; } .progress-bar { border-radius: var(--border-radius); transition: width 0.6s ease; } /* 統計卡片特殊樣式 */ .stats-card { position: relative; overflow: hidden; } .stats-card::before { content: ''; position: absolute; top: 0; right: 0; width: 100px; height: 100px; background: rgba(255, 255, 255, 0.1); border-radius: 50%; transform: translate(30px, -30px); } .stats-card .card-body { position: relative; z-index: 1; } /* 排名特殊樣式 */ .ranking-item { transition: var(--transition); border-radius: var(--border-radius); padding: 0.75rem; margin-bottom: 0.5rem; background: white; border-left: 4px solid var(--primary-color); } .ranking-item:hover { transform: translateX(5px); box-shadow: var(--box-shadow); } .ranking-item.top-3 { border-left-color: var(--warning-color); background: linear-gradient(135deg, #fff9e6, #ffffff); } .ranking-item.top-1 { border-left-color: #ffd700; background: linear-gradient(135deg, #fffacd, #ffffff); } /* 能力等級標籤 */ .level-badge { font-size: 0.75rem; font-weight: 600; padding: 0.25rem 0.5rem; border-radius: 0.25rem; text-transform: uppercase; letter-spacing: 0.5px; } .level-l1 { background-color: var(--danger-color); color: white; } .level-l2 { background-color: var(--warning-color); color: #000; } .level-l3 { background-color: var(--info-color); color: white; } .level-l4 { background-color: var(--success-color); color: white; } .level-l5 { background-color: var(--primary-color); color: white; } /* 空狀態樣式 */ .empty-state { text-align: center; padding: 3rem 1rem; color: var(--secondary-color); } .empty-state i { font-size: 3rem; margin-bottom: 1rem; opacity: 0.5; } /* 載入狀態 */ .loading-overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: rgba(255, 255, 255, 0.8); display: flex; align-items: center; justify-content: center; z-index: 1000; border-radius: var(--border-radius); } /* 成功/錯誤狀態 */ .status-success { color: var(--success-color); } .status-error { color: var(--danger-color); } .status-warning { color: var(--warning-color); } .status-info { color: var(--info-color); }