/* ── Admin Panel CSS ────────────────────────────────────────── */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } :root { --primary: #1565C0; --primary-dk: #0D47A1; --danger: #C62828; --success: #2E7D32; --nav-h: 56px; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; font-size: 14px; background: #F5F7FA; color: #222; } #admin-app { display: flex; flex-direction: column; min-height: 100vh; } /* ── Nav ────────────────────────────────────────────────────── */ .admin-nav { display: flex; align-items: center; gap: 8px; background: var(--primary); color: #fff; padding: 0 20px; height: var(--nav-h); position: sticky; top: 0; z-index: 100; box-shadow: 0 2px 6px rgba(0,0,0,.2); flex-wrap: wrap; } .admin-nav-brand { display: flex; align-items: center; gap: 8px; font-weight: 700; font-size: 15px; margin-right: 12px; } .admin-nav-brand .nav-logo { width: 32px; height: 32px; border-radius: 50%; object-fit: cover; background: #fff; } .admin-nav-links { display: flex; gap: 4px; flex: 1; } .admin-nav-links a { color: rgba(255,255,255,.85); text-decoration: none; padding: 6px 12px; border-radius: 6px; font-size: 13px; display: flex; align-items: center; gap: 5px; transition: background .15s; } .admin-nav-links a:hover, .admin-nav-links a.active { background: rgba(255,255,255,.18); color: #fff; } .admin-nav-user { font-size: 13px; opacity: .85; margin-left: auto; white-space: nowrap; } .admin-nav-user a { color: #fff; } /* ── Main ───────────────────────────────────────────────────── */ .admin-main { flex: 1; padding: 24px 20px; max-width: 1200px; width: 100%; margin: 0 auto; } /* ── Flash ──────────────────────────────────────────────────── */ .flash { padding: 10px 16px; border-radius: 8px; margin-bottom: 16px; font-size: 13px; } .flash.ok { background: #E8F5E9; color: #1B5E20; border: 1px solid #A5D6A7; } .flash.err { background: #FFEBEE; color: #B71C1C; border: 1px solid #EF9A9A; } /* ── Cards ──────────────────────────────────────────────────── */ .cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 16px; margin-bottom: 24px; } .card { background: #fff; border-radius: 12px; padding: 18px 16px; box-shadow: 0 1px 4px rgba(0,0,0,.08); } .card-num { font-size: 32px; font-weight: 800; color: var(--primary); } .card-label { font-size: 12px; color: #777; margin-top: 4px; } /* ── Section title ──────────────────────────────────────────── */ .section-title { font-size: 18px; font-weight: 700; color: #222; margin-bottom: 16px; } /* ── Table ──────────────────────────────────────────────────── */ .table-wrap { background: #fff; border-radius: 12px; box-shadow: 0 1px 4px rgba(0,0,0,.08); overflow: hidden; margin-bottom: 24px; } .table-title { padding: 14px 16px; font-weight: 700; font-size: 15px; border-bottom: 1px solid #eee; display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 8px; } table { width: 100%; border-collapse: collapse; } th { background: #F8F9FA; font-size: 12px; text-transform: uppercase; letter-spacing: .5px; color: #555; padding: 10px 14px; text-align: left; } td { padding: 11px 14px; border-top: 1px solid #F0F0F0; font-size: 13px; vertical-align: middle; } tr:hover td { background: #FAFBFF; } /* ── Badge ──────────────────────────────────────────────────── */ .badge { display: inline-block; padding: 3px 9px; border-radius: 10px; font-size: 11px; font-weight: 700; } .badge-open { background: #FFF9C4; color: #F57F17; } .badge-progress { background: #E3F2FD; color: #1565C0; } .badge-waiting { background: #FFF3E0; color: #E65100; } .badge-resolved { background: #E8F5E9; color: #1B5E20; } .badge-closed { background: #ECEFF1; color: #546E7A; } .badge-active { background: #E8F5E9; color: #1B5E20; } .badge-inactive { background: #FFEBEE; color: #B71C1C; } .badge-success { background: #E8F5E9; color: #1B5E20; } .badge-danger { background: #FFEBEE; color: #B71C1C; } .badge-warning { background: #FFF3E0; color: #E65100; } .badge-secondary { background: #ECEFF1; color: #546E7A; } /* ── Inline input ──────────────────────────────────────────── */ .input { padding: 6px 10px; border: 1px solid #ddd; border-radius: 6px; font-size: 13px; outline: none; font-family: inherit; } .input:focus { border-color: var(--primary); } /* ── Buttons ────────────────────────────────────────────────── */ .btn { display: inline-block; padding: 7px 14px; border-radius: 8px; font-size: 13px; font-weight: 600; cursor: pointer; border: none; text-decoration: none; transition: background .15s; } .btn-primary { background: var(--primary); color: #fff; } .btn-primary:hover { background: var(--primary-dk); } .btn-sm { padding: 4px 10px; font-size: 12px; border-radius: 6px; background: var(--primary); color: #fff; border: none; cursor: pointer; text-decoration: none; display: inline-block; } .btn-sm:hover { background: var(--primary-dk); } .btn-danger { background: var(--danger); color: #fff; } .btn-danger:hover { background: #B71C1C; } .btn-outline { background: #fff; border: 1.5px solid var(--primary); color: var(--primary); } .btn-outline:hover { background: var(--primary); color: #fff; } .btn-success { background: var(--success); color: #fff; } .btn-success:hover { background: #1B5E20; } .btn-block { width: 100%; padding: 11px; border-radius: 8px; } /* ── Search / Filter bar ────────────────────────────────────── */ .filter-bar { display: flex; gap: 8px; margin-bottom: 16px; flex-wrap: wrap; } .filter-bar input, .filter-bar select { padding: 8px 12px; border: 1px solid #ddd; border-radius: 8px; font-size: 13px; outline: none; background: #fff; } .filter-bar input:focus, .filter-bar select:focus { border-color: var(--primary); } /* ── Forms ──────────────────────────────────────────────────── */ .form-card { background: #fff; border-radius: 12px; padding: 24px; box-shadow: 0 1px 4px rgba(0,0,0,.08); margin-bottom: 24px; } .form-group { margin-bottom: 16px; } .form-group label { display: block; font-size: 13px; font-weight: 600; color: #444; margin-bottom: 5px; } .form-group input[type=text], .form-group input[type=email], .form-group input[type=password], .form-group input[type=number], .form-group select, .form-group textarea { width: 100%; padding: 10px 14px; border: 1px solid #ddd; border-radius: 8px; font-size: 14px; outline: none; transition: border .15s; font-family: inherit; } .form-group input:focus, .form-group select:focus, .form-group textarea:focus { border-color: var(--primary); } .form-group textarea { resize: vertical; min-height: 80px; } .form-hint { font-size: 12px; color: #999; margin-top: 4px; } .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } /* ── Login ──────────────────────────────────────────────────── */ body.login-page { display: flex; align-items: center; justify-content: center; min-height: 100vh; background: linear-gradient(135deg, #1565C0, #0D47A1); } .login-card { background: #fff; border-radius: 16px; padding: 40px 32px; width: 100%; max-width: 360px; box-shadow: 0 8px 40px rgba(0,0,0,.2); } .login-logo { text-align: center; margin-bottom: 24px; } .login-logo img { width: 72px; height: 72px; border-radius: 50%; object-fit: cover; } .login-title { text-align: center; font-size: 20px; font-weight: 800; color: var(--primary); margin-bottom: 4px; } .login-sub { text-align: center; font-size: 13px; color: #888; margin-bottom: 24px; } /* ── Stats row ──────────────────────────────────────────────── */ .stat-row { display: flex; gap: 8px; flex-wrap: wrap; } .stat-chip { background: #F0F4FF; color: var(--primary); border-radius: 20px; padding: 4px 12px; font-size: 12px; font-weight: 600; } /* ── Ticket detail readonly ─────────────────────────────────── */ .ticket-header { background: #fff; border-radius: 12px; padding: 20px; box-shadow: 0 1px 4px rgba(0,0,0,.08); margin-bottom: 20px; } .ticket-number { font-size: 20px; font-weight: 800; color: var(--primary); } .detail-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; margin-top: 14px; } .detail-item { background: #F8F9FA; border-radius: 8px; padding: 10px 14px; } .detail-item .label { font-size: 11px; color: #888; text-transform: uppercase; margin-bottom: 4px; } .detail-item .value { font-size: 14px; font-weight: 600; color: #222; word-break: break-word; } .ticket-chat { background: #ECE5DD; border-radius: 12px; padding: 16px; max-height: 440px; overflow-y: auto; display: flex; flex-direction: column; gap: 6px; } /* ── Chat bubbles (read-only) ───────────────────────────────── */ .msg-row { display: flex; gap: 8px; } .msg-row.user { flex-direction: row-reverse; } .bubble { max-width: 75%; padding: 9px 13px; border-radius: 12px; font-size: 14px; line-height: 1.45; position: relative; } .msg-row.bot .bubble, .msg-row.cs .bubble { background: #fff; border-radius: 0 12px 12px 12px; } .msg-row.user .bubble { background: #DCF8C6; border-radius: 12px 0 12px 12px; } .msg-time { display: block; font-size: 10px; color: #aaa; text-align: right; margin-top: 4px; } .cs-name { font-size: 11px; color: var(--primary); font-weight: 700; margin-bottom: 4px; } .bot-avatar { width: 30px; height: 30px; border-radius: 50%; object-fit: cover; flex-shrink: 0; align-self: flex-end; } /* ── Logo preview ───────────────────────────────────────────── */ .logo-preview { width: 80px; height: 80px; border-radius: 50%; object-fit: cover; border: 2px solid #ddd; margin-bottom: 12px; display: block; } /* ── Pagination ─────────────────────────────────────────────── */ .pagination { display: flex; gap: 4px; flex-wrap: wrap; margin-top: 16px; justify-content: center; } .pagination a, .pagination span { padding: 5px 10px; border-radius: 6px; font-size: 13px; text-decoration: none; border: 1px solid #ddd; color: #444; } .pagination a:hover { background: var(--primary); color: #fff; border-color: var(--primary); } .pagination .current { background: var(--primary); color: #fff; border-color: var(--primary); font-weight: 700; } /* ── Empty state ────────────────────────────────────────────── */ .empty-state { text-align: center; padding: 40px; color: #aaa; font-size: 14px; } @media (max-width: 768px) { .admin-nav { height: auto; padding: 10px; } .admin-nav-links { overflow-x: auto; padding-bottom: 4px; } .admin-main { padding: 16px 12px; } .cards { grid-template-columns: repeat(2, 1fr); } .form-row { grid-template-columns: 1fr; } }
Halaman Customer Service Mitra Pulsaku hanya bisa dibuka melalui aplikasi Mitra Pulsaku Indonesia.