| |
| |
| |
| |
|
|
| |
| :root { |
| |
| --primary-50: #E8F2FF; |
| --primary-100: #D1E7FF; |
| --primary-200: #A3D1FF; |
| --primary-300: #75B8FF; |
| --primary-400: #479EFF; |
| --primary-500: #006EFF; |
| --primary-600: #0058CC; |
| --primary-700: #004299; |
|
|
| |
| --gray-50: #F9FAFB; |
| --gray-100: #F3F4F6; |
| --gray-200: #E5E7EB; |
| --gray-300: #D1D5DB; |
| --gray-400: #9CA3AF; |
| --gray-500: #6B7280; |
| --gray-600: #4B5563; |
| --gray-700: #374151; |
| --gray-800: #1F2937; |
| --gray-900: #111827; |
|
|
| |
| --success: #10B981; |
| --success-bg: #D1FAE5; |
| --warning: #F59E0B; |
| --warning-bg: #FEF3C7; |
| --error: #EF4444; |
| --error-bg: #FEE2E2; |
| --info: #3B82F6; |
| --info-bg: #DBEAFE; |
|
|
| |
| --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); |
| --shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); |
| --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); |
| --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); |
| --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); |
|
|
| |
| --spacing-1: 4px; |
| --spacing-2: 8px; |
| --spacing-3: 12px; |
| --spacing-4: 16px; |
| --spacing-5: 20px; |
| --spacing-6: 24px; |
| --spacing-8: 32px; |
| --spacing-12: 48px; |
|
|
| |
| --radius-sm: 4px; |
| --radius: 8px; |
| --radius-md: 12px; |
| --radius-lg: 16px; |
| --radius-xl: 24px; |
| --radius-full: 9999px; |
|
|
| |
| --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1); |
| --transition: 200ms cubic-bezier(0.4, 0, 0.2, 1); |
| --transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1); |
|
|
| |
| --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Noto Sans SC', sans-serif; |
| } |
|
|
| |
| * { |
| margin: 0; |
| padding: 0; |
| box-sizing: border-box; |
| } |
|
|
| html { |
| font-size: 16px; |
| -webkit-font-smoothing: antialiased; |
| -moz-osx-font-smoothing: grayscale; |
| } |
|
|
| body { |
| font-family: var(--font-sans); |
| background: var(--gray-50); |
| color: var(--gray-800); |
| line-height: 1.5; |
| min-height: 100vh; |
| } |
|
|
| |
| .navbar { |
| width: 100%; |
| height: 64px; |
| background: white; |
| border-bottom: 1px solid var(--gray-200); |
| position: fixed; |
| top: 0; |
| left: 0; |
| z-index: 1000; |
| box-shadow: var(--shadow-sm); |
| } |
|
|
| .nav-container { |
| width: 100%; |
| max-width: 1440px; |
| height: 100%; |
| margin: 0 auto; |
| padding: 0 var(--spacing-6); |
| display: flex; |
| justify-content: space-between; |
| align-items: center; |
| } |
|
|
| .nav-title { |
| font-size: 18px; |
| font-weight: 600; |
| color: var(--gray-900); |
| letter-spacing: -0.02em; |
| display: flex; |
| align-items: center; |
| gap: var(--spacing-2); |
| } |
|
|
| .nav-menu { |
| display: flex; |
| gap: var(--spacing-1); |
| list-style: none; |
| } |
|
|
| .nav-menu a { |
| padding: var(--spacing-2) var(--spacing-3); |
| border-radius: var(--radius); |
| color: var(--gray-600); |
| font-size: 14px; |
| font-weight: 500; |
| text-decoration: none; |
| transition: all var(--transition); |
| } |
|
|
| .nav-menu a:hover { |
| background: var(--gray-100); |
| color: var(--gray-900); |
| } |
|
|
| .nav-menu a.active { |
| background: var(--primary-50); |
| color: var(--primary-600); |
| font-weight: 600; |
| } |
|
|
| |
| .main-content { |
| flex: 1; |
| margin-left: 260px; |
| margin-top: 64px; |
| min-height: calc(100vh - 64px); |
| padding: var(--spacing-8); |
| background: var(--gray-50); |
| overflow: auto; |
| } |
|
|
| |
| body.sidebar-collapsed .main-content { |
| margin-left: 72px; |
| } |
|
|
| body:not(.sidebar-collapsed) .main-content { |
| margin-left: 260px; |
| } |
|
|
| |
| body:has(.tool-container) .main-content { |
| padding: 0; |
| background: white; |
| min-height: auto; |
| height: calc(100vh - 64px); |
| overflow: hidden; |
| } |
|
|
| body:has(.tool-container) .main-content-inner { |
| padding: 0; |
| background: white; |
| height: 100%; |
| } |
|
|
| |
| .main-content-inner { |
| flex: 1; |
| padding: var(--spacing-8); |
| background: var(--gray-50); |
| min-height: 100%; |
| } |
|
|
| |
| body.sidebar-collapsed .main-content { |
| margin-left: 72px; |
| } |
|
|
| body:not(.sidebar-collapsed) .main-content { |
| margin-left: 260px; |
| } |
|
|
| |
| body:has(.tool-container) .main-content { |
| padding: 0; |
| background: white; |
| } |
|
|
| body:has(.tool-container) .main-content-inner { |
| padding: 0; |
| background: white; |
| } |
|
|
| |
| body.sidebar-collapsed .main-content { |
| margin-left: 72px; |
| } |
|
|
| body:not(.sidebar-collapsed) .main-content { |
| margin-left: 260px; |
| } |
|
|
| |
| body:has(.tool-container) .main-content { |
| padding: 0; |
| background: white; |
| } |
|
|
| body:has(.tool-container) .main-content-inner { |
| padding: 0; |
| background: white; |
| } |
|
|
| |
| body:has(.tool-container) .main-content { |
| background: white; |
| } |
|
|
| body:has(.tool-container) .main-content-inner { |
| padding: 0; |
| background: white; |
| } |
|
|
| |
| .sidebar-layout { |
| position: relative; |
| min-height: calc(100vh - 64px); |
| } |
|
|
| .sidebar { |
| width: 260px; |
| background: white; |
| border-right: 1px solid var(--gray-200); |
| position: fixed; |
| top: 64px; |
| left: 0; |
| height: calc(100vh - 64px); |
| overflow-y: auto; |
| transition: width var(--transition-slow); |
| z-index: 900; |
| } |
|
|
| .sidebar-header { |
| padding: var(--spacing-4) var(--spacing-5); |
| display: flex; |
| justify-content: space-between; |
| align-items: center; |
| border-bottom: 1px solid var(--gray-200); |
| height: 60px; |
| box-sizing: border-box; |
| } |
|
|
| .sidebar-title { |
| font-size: 14px; |
| font-weight: 600; |
| margin: 0; |
| color: var(--gray-900); |
| text-transform: uppercase; |
| letter-spacing: 0.05em; |
| } |
|
|
| .sidebar-toggle { |
| background: var(--gray-100); |
| border: none; |
| width: 32px; |
| height: 32px; |
| cursor: pointer; |
| padding: var(--spacing-2); |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| color: var(--gray-600); |
| border-radius: var(--radius); |
| transition: all var(--transition); |
| } |
|
|
| .sidebar-toggle:hover { |
| background: var(--gray-200); |
| color: var(--gray-800); |
| } |
|
|
| .sidebar-toggle i { |
| width: 18px; |
| height: 18px; |
| } |
|
|
| .sidebar-nav { |
| padding: var(--spacing-4); |
| } |
|
|
| .nav-item { |
| display: flex; |
| align-items: center; |
| gap: var(--spacing-3); |
| padding: var(--spacing-3); |
| color: var(--gray-600); |
| text-decoration: none; |
| transition: all var(--transition); |
| cursor: pointer; |
| border-radius: var(--radius); |
| margin-bottom: var(--spacing-1); |
| font-size: 14px; |
| font-weight: 500; |
| } |
|
|
| .nav-item:hover { |
| background: var(--gray-100); |
| color: var(--gray-900); |
| } |
|
|
| .nav-item.active { |
| background: var(--primary-50); |
| color: var(--primary-600); |
| font-weight: 600; |
| } |
|
|
| .nav-item.disabled { |
| opacity: 0.5; |
| cursor: not-allowed; |
| } |
|
|
| .nav-item.disabled:hover { |
| background: none; |
| color: var(--gray-600); |
| } |
|
|
| .nav-icon { |
| flex-shrink: 0; |
| width: 18px; |
| height: 18px; |
| } |
|
|
| .nav-text { |
| flex: 1; |
| white-space: nowrap; |
| overflow: hidden; |
| text-overflow: ellipsis; |
| } |
|
|
| |
| .sidebar.collapsed { |
| width: 72px; |
| } |
|
|
| .sidebar.collapsed .sidebar-title, |
| .sidebar.collapsed .nav-text { |
| display: none; |
| } |
|
|
| .sidebar.collapsed .nav-item { |
| justify-content: center; |
| padding: var(--spacing-3); |
| } |
|
|
| .sidebar.collapsed .sidebar-toggle { |
| margin: 0 auto; |
| } |
|
|
| |
| body.sidebar-collapsed .main-content { |
| margin-left: 72px; |
| } |
|
|
| body:not(.sidebar-collapsed) .main-content { |
| margin-left: 260px; |
| } |
|
|
| .main-content-inner { |
| flex: 1; |
| padding: var(--spacing-8); |
| background: var(--gray-50); |
| } |
|
|
| |
| body:has(.tool-container) .main-content-inner { |
| padding: 0; |
| background: white; |
| } |
|
|
| body:has(.tool-container) .main-content { |
| background: white; |
| } |
|
|
| |
| .card { |
| background: white; |
| border-radius: var(--radius-md); |
| box-shadow: var(--shadow-sm); |
| border: 1px solid var(--gray-200); |
| transition: all var(--transition); |
| } |
|
|
| .card:hover { |
| box-shadow: var(--shadow-md); |
| } |
|
|
| .card-header { |
| padding: var(--spacing-5) var(--spacing-6); |
| border-bottom: 1px solid var(--gray-200); |
| } |
|
|
| .card-title { |
| font-size: 16px; |
| font-weight: 600; |
| color: var(--gray-900); |
| letter-spacing: -0.01em; |
| } |
|
|
| .card-body { |
| padding: var(--spacing-6); |
| } |
|
|
| |
| .btn { |
| display: inline-flex; |
| align-items: center; |
| justify-content: center; |
| gap: var(--spacing-2); |
| padding: var(--spacing-2) var(--spacing-4); |
| border: none; |
| border-radius: var(--radius); |
| cursor: pointer; |
| font-size: 14px; |
| font-weight: 500; |
| text-decoration: none; |
| transition: all var(--transition); |
| } |
|
|
| .btn:disabled { |
| opacity: 0.5; |
| cursor: not-allowed; |
| } |
|
|
| .btn-primary { |
| background: var(--primary-600); |
| color: white; |
| } |
|
|
| .btn-primary:hover:not(:disabled) { |
| background: var(--primary-700); |
| box-shadow: var(--shadow-md); |
| } |
|
|
| .btn-secondary { |
| background: white; |
| color: var(--gray-700); |
| border: 1px solid var(--gray-300); |
| } |
|
|
| .btn-secondary:hover:not(:disabled) { |
| background: var(--gray-50); |
| border-color: var(--gray-400); |
| } |
|
|
| .btn-success { |
| background: var(--success); |
| color: white; |
| } |
|
|
| .btn-success:hover:not(:disabled) { |
| background: #059669; |
| } |
|
|
| .btn-warning { |
| background: var(--warning); |
| color: white; |
| } |
|
|
| .btn-warning:hover:not(:disabled) { |
| background: #D97706; |
| } |
|
|
| .btn-danger { |
| background: var(--error); |
| color: white; |
| } |
|
|
| .btn-danger:hover:not(:disabled) { |
| background: #DC2626; |
| } |
|
|
| .btn-sm { |
| padding: var(--spacing-1) var(--spacing-3); |
| font-size: 13px; |
| } |
|
|
| .btn-lg { |
| padding: var(--spacing-3) var(--spacing-5); |
| font-size: 15px; |
| } |
|
|
| |
| .form-group { |
| margin-bottom: var(--spacing-4); |
| } |
|
|
| .form-label { |
| display: block; |
| font-size: 14px; |
| font-weight: 500; |
| color: var(--gray-700); |
| margin-bottom: var(--spacing-2); |
| } |
|
|
| .form-input, |
| .form-textarea, |
| .form-select { |
| width: 100%; |
| padding: var(--spacing-3); |
| border: 1px solid var(--gray-300); |
| border-radius: var(--radius); |
| font-size: 14px; |
| font-family: inherit; |
| color: var(--gray-900); |
| background: white; |
| transition: all var(--transition); |
| } |
|
|
| .form-input:focus, |
| .form-textarea:focus, |
| .form-select:focus { |
| outline: none; |
| border-color: var(--primary-500); |
| box-shadow: 0 0 0 3px var(--primary-100); |
| } |
|
|
| .form-textarea { |
| min-height: 100px; |
| resize: vertical; |
| } |
|
|
| |
| .message { |
| padding: var(--spacing-4); |
| border-radius: var(--radius); |
| font-size: 14px; |
| margin: var(--spacing-4) 0; |
| display: flex; |
| align-items: flex-start; |
| gap: var(--spacing-3); |
| } |
|
|
| .message.success { |
| background: var(--success-bg); |
| color: #065F46; |
| border: 1px solid #A7F3D0; |
| } |
|
|
| .message.error { |
| background: var(--error-bg); |
| color: #991B1B; |
| border: 1px solid #FECACA; |
| } |
|
|
| .message.warning { |
| background: var(--warning-bg); |
| color: #92400E; |
| border: 1px solid #FDE68A; |
| } |
|
|
| .message.info { |
| background: var(--info-bg); |
| color: #1E40AF; |
| border: 1px solid #BFDBFE; |
| } |
|
|
| |
| .stats-grid { |
| display: grid; |
| grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); |
| gap: var(--spacing-4); |
| margin-bottom: var(--spacing-6); |
| } |
|
|
| .stat-card { |
| background: white; |
| padding: var(--spacing-5); |
| border-radius: var(--radius-md); |
| box-shadow: var(--shadow-sm); |
| border: 1px solid var(--gray-200); |
| } |
|
|
| .stat-number { |
| font-size: 32px; |
| font-weight: 700; |
| color: var(--gray-900); |
| line-height: 1; |
| margin-bottom: var(--spacing-2); |
| } |
|
|
| .stat-label { |
| font-size: 14px; |
| color: var(--gray-500); |
| font-weight: 500; |
| } |
|
|
| |
| .plugin-grid { |
| display: grid; |
| grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); |
| gap: var(--spacing-4); |
| } |
|
|
| .plugin-card { |
| background: white; |
| padding: var(--spacing-5); |
| border-radius: var(--radius-md); |
| box-shadow: var(--shadow-sm); |
| border: 1px solid var(--gray-200); |
| cursor: pointer; |
| transition: all var(--transition); |
| } |
|
|
| .plugin-card:hover { |
| box-shadow: var(--shadow-md); |
| transform: translateY(-2px); |
| border-color: var(--primary-300); |
| } |
|
|
| .plugin-name { |
| font-size: 16px; |
| font-weight: 600; |
| color: var(--gray-900); |
| margin-bottom: var(--spacing-2); |
| letter-spacing: -0.01em; |
| } |
|
|
| .plugin-description { |
| font-size: 14px; |
| color: var(--gray-600); |
| line-height: 1.5; |
| margin-bottom: var(--spacing-3); |
| } |
|
|
| .plugin-status { |
| display: inline-flex; |
| align-items: center; |
| gap: var(--spacing-2); |
| padding: var(--spacing-1) var(--spacing-2); |
| background: var(--success-bg); |
| color: #065F46; |
| border-radius: var(--radius-full); |
| font-size: 12px; |
| font-weight: 600; |
| } |
|
|
| |
| .empty-state { |
| text-align: center; |
| padding: var(--spacing-12) var(--spacing-6); |
| color: var(--gray-400); |
| } |
|
|
| .empty-icon-svg { |
| width: 64px; |
| height: 64px; |
| margin-bottom: var(--spacing-4); |
| opacity: 0.5; |
| } |
|
|
| .empty-text { |
| font-size: 14px; |
| color: var(--gray-500); |
| } |
|
|
| |
| @media (max-width: 1024px) { |
| .sidebar { |
| transform: translateX(-100%); |
| width: 260px; |
| } |
|
|
| .sidebar.mobile-open { |
| transform: translateX(0); |
| } |
|
|
| .main-content { |
| margin-left: 0 !important; |
| } |
|
|
| .main-content-inner { |
| padding: var(--spacing-6); |
| } |
|
|
| .nav-menu { |
| display: none; |
| } |
| } |
|
|
| @media (max-width: 768px) { |
| .sidebar-header, |
| .sidebar-nav { |
| padding: var(--spacing-4); |
| } |
|
|
| .card-header, |
| .card-body { |
| padding: var(--spacing-4); |
| } |
|
|
| .plugin-grid { |
| grid-template-columns: 1fr; |
| } |
|
|
| .stats-grid { |
| grid-template-columns: 1fr; |
| } |
| } |
|
|
| |
| .mobile-menu-btn { |
| display: none; |
| background: none; |
| border: none; |
| padding: var(--spacing-2); |
| cursor: pointer; |
| color: var(--gray-600); |
| } |
|
|
| .mobile-menu-btn i { |
| width: 24px; |
| height: 24px; |
| } |
|
|
| @media (max-width: 1024px) { |
| .mobile-menu-btn { |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| } |
| } |
|
|
| |
| .tool-container { |
| flex: 1; |
| display: flex; |
| flex-direction: column; |
| background: white; |
| } |
|
|
| |
| code { |
| background: var(--gray-100); |
| padding: 2px 6px; |
| border-radius: var(--radius-sm); |
| font-size: 13px; |
| font-family: 'Monaco', 'Courier New', monospace; |
| color: var(--gray-800); |
| } |
|
|
| pre { |
| background: var(--gray-900); |
| color: var(--gray-100); |
| padding: var(--spacing-4); |
| border-radius: var(--radius); |
| overflow-x: auto; |
| font-size: 13px; |
| line-height: 1.6; |
| } |
|
|
| pre code { |
| background: none; |
| padding: 0; |
| color: inherit; |
| } |
|
|
| |
| .nav-actions { |
| display: flex; |
| align-items: center; |
| gap: var(--spacing-2); |
| } |
|
|
| .lang-btn { |
| display: flex; |
| align-items: center; |
| gap: var(--spacing-1); |
| padding: var(--spacing-2) var(--spacing-3); |
| background: var(--gray-100); |
| border: 1px solid var(--gray-200); |
| border-radius: var(--radius); |
| color: var(--gray-700); |
| font-size: 14px; |
| font-weight: 500; |
| cursor: pointer; |
| transition: all var(--transition); |
| } |
|
|
| .lang-btn:hover { |
| background: var(--gray-200); |
| border-color: var(--gray-300); |
| } |
|
|
| .lang-btn i { |
| width: 16px; |
| height: 16px; |
| color: var(--gray-600); |
| } |
|
|
| .lang-btn span { |
| min-width: 45px; |
| } |
|
|