:root { --bg-color: #f8fafc; --text-color: #0f172a; --text-muted: #64748b; --glass-bg: rgba(255, 255, 255, 0.85); --glass-border: rgba(255, 255, 255, 0.5); --glass-shadow: rgba(0, 0, 0, 0.05); --primary: #4f46e5; --primary-hover: #4338ca; --success: #10b981; --warning: #f59e0b; --danger: #ef4444; } body { margin: 0; font-family: 'Inter', sans-serif; background-color: var(--bg-color); color: var(--text-color); min-height: 100vh; display: flex; flex-direction: column; } .app-background { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; z-index: -1; overflow: hidden; background: radial-gradient(circle at top left, #e0e7ff, #f8fafc); } .blob { position: absolute; filter: blur(80px); opacity: 0.6; border-radius: 50%; animation: float 10s infinite ease-in-out alternate; } .blob-1 { top: -10%; left: -10%; width: 400px; height: 400px; background: #c7d2fe; } .blob-2 { bottom: -10%; right: -10%; width: 500px; height: 500px; background: #fbcfe8; animation-delay: -5s; } @keyframes float { 0% { transform: translate(0, 0) scale(1); } 100% { transform: translate(50px, 50px) scale(1.1); } } /* Glass Panels */ .glass-panel { background: var(--glass-bg); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border: 1px solid var(--glass-border); border-radius: 16px; box-shadow: 0 4px 30px var(--glass-shadow); } .glass-nav { display: flex; justify-content: space-between; align-items: center; padding: 1rem 2rem; background: rgba(255, 255, 255, 0.8); backdrop-filter: blur(12px); border-bottom: 1px solid rgba(0,0,0,0.05); position: sticky; top: 0; z-index: 100; } /* Navigation */ .nav-brand { font-size: 1.25rem; font-weight: 700; display: flex; align-items: center; gap: 0.5rem; color: var(--primary); } .nav-user { display: flex; align-items: center; gap: 1.5rem; } .user-badge { display: flex; align-items: center; gap: 0.5rem; background: rgba(0,0,0,0.04); padding: 0.5rem 1rem; border-radius: 99px; font-size: 0.875rem; font-weight: 500; } .btn-logout { display: flex; align-items: center; gap: 0.5rem; color: var(--danger); text-decoration: none; font-weight: 500; font-size: 0.875rem; transition: all 0.2s; } .btn-logout:hover { color: #b91c1c; } /* Content */ .app-container { flex: 1; padding: 2rem; display: flex; flex-direction: column; } .content-wrapper { max-width: 1200px; margin: 0 auto; width: 100%; } .panel-header { padding: 1.5rem 2rem; border-bottom: 1px solid rgba(0,0,0,0.05); } .panel-title { margin: 0; font-size: 1.5rem; font-weight: 600; color: var(--text-color); } .panel-subtitle { margin: 0.5rem 0 0 0; color: var(--text-muted); font-size: 0.875rem; } /* Table Area */ .table-panel { margin-top: 1rem; } .table-responsive { padding: 1.5rem 2rem; overflow-x: auto; } /* DataTables customization for Light Mode */ .dataTables_wrapper .dataTables_length, .dataTables_wrapper .dataTables_filter, .dataTables_wrapper .dataTables_info, .dataTables_wrapper .dataTables_processing, .dataTables_wrapper .dataTables_paginate { color: var(--text-muted) !important; margin-bottom: 1rem; } .dataTables_wrapper .dataTables_filter input { background: #ffffff; border: 1px solid #cbd5e1; border-radius: 8px; color: var(--text-color); padding: 0.5rem 1rem; outline: none; margin-left: 0.5rem; transition: border-color 0.2s; } .dataTables_wrapper .dataTables_filter input:focus { border-color: var(--primary); } .dataTables_wrapper .dataTables_length select { background: #ffffff; border: 1px solid #cbd5e1; border-radius: 6px; color: var(--text-color); padding: 0.25rem; } table.dataTable { border-collapse: collapse !important; width: 100% !important; color: var(--text-color); border-bottom: none !important; } table.dataTable thead th { border-bottom: 1px solid #e2e8f0 !important; color: var(--text-muted); font-weight: 600; padding: 1rem 0.5rem !important; text-align: left; } table.dataTable tbody tr { background-color: transparent !important; transition: background-color 0.2s; } table.dataTable tbody tr:hover { background-color: rgba(0,0,0,0.02) !important; } table.dataTable tbody td { border-bottom: 1px solid #f1f5f9 !important; padding: 1rem 0.5rem !important; vertical-align: middle; } /* Pagination */ .dataTables_wrapper .dataTables_paginate .paginate_button { color: var(--text-muted) !important; border: 1px solid transparent !important; border-radius: 8px !important; } .dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover { background: var(--primary) !important; color: white !important; border: 1px solid var(--primary) !important; } .dataTables_wrapper .dataTables_paginate .paginate_button:hover { background: rgba(0,0,0,0.04) !important; color: var(--text-color) !important; border: 1px solid transparent !important; } /* Buttons and Badges */ .btn-migrasi { background: linear-gradient(135deg, var(--primary), var(--primary-hover)); color: white; border: none; padding: 0.5rem 1rem; border-radius: 8px; font-weight: 500; cursor: pointer; transition: transform 0.2s, box-shadow 0.2s; font-family: inherit; font-size: 0.875rem; } .btn-migrasi:hover:not(:disabled) { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(79, 70, 229, 0.3); } .btn-migrasi.disabled { background: #e2e8f0; color: #94a3b8; cursor: not-allowed; box-shadow: none; } .badge { padding: 0.25rem 0.75rem; border-radius: 99px; font-size: 0.75rem; font-weight: 600; display: inline-block; } .badge-success { background: #d1fae5; color: #047857; border: 1px solid #a7f3d0; } .badge-warning { background: #fef3c7; color: #b45309; border: 1px solid #fde68a; } /* Login Page */ .login-wrapper { flex: 1; display: flex; justify-content: center; align-items: center; } .login-panel { width: 100%; max-width: 400px; padding: 3rem 2rem; text-align: center; } .brand-logo { color: var(--primary); margin-bottom: 1.5rem; } .login-panel .title { margin: 0 0 0.5rem 0; font-size: 1.75rem; color: var(--text-color); } .login-panel .subtitle { color: var(--text-muted); margin: 0 0 2rem 0; font-size: 0.875rem; } .input-group { text-align: left; margin-bottom: 1.5rem; } .input-group label { display: block; margin-bottom: 0.5rem; font-size: 0.875rem; color: var(--text-color); font-weight: 500; } .input-group input { width: 100%; background: #ffffff; border: 1px solid #cbd5e1; padding: 0.75rem 1rem; border-radius: 8px; color: var(--text-color); font-family: inherit; font-size: 1rem; box-sizing: border-box; transition: border-color 0.2s, box-shadow 0.2s; } .input-group input:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.2); } .btn-primary { width: 100%; background: var(--primary); color: white; border: none; padding: 0.875rem; border-radius: 8px; font-weight: 600; font-size: 1rem; cursor: pointer; font-family: inherit; transition: background-color 0.2s; } .btn-primary:hover { background: var(--primary-hover); } /* Responsive Adjustments for HP/Mobile */ @media (max-width: 768px) { .glass-nav { flex-direction: column; gap: 1rem; padding: 1rem; } .nav-user { width: 100%; justify-content: space-between; } .app-container { padding: 1rem; } .panel-header { padding: 1rem; } .panel-title { font-size: 1.25rem; } .table-responsive { padding: 1rem; } .dataTables_wrapper .dataTables_filter { text-align: left !important; margin-top: 1rem; float: none; } .dataTables_wrapper .dataTables_filter input { width: 100%; margin-left: 0; margin-top: 0.5rem; box-sizing: border-box; } .dataTables_wrapper .dataTables_length { float: none; text-align: left; } .btn-migrasi { padding: 0.4rem 0.5rem; font-size: 0.75rem; white-space: nowrap; } }