/* ════════════════════════════════════════ LUMINA GIS DESIGN SYSTEM — v3.0 Pixel-perfect match to reference screenshot ════════════════════════════════════════ */ :root { --lumina-primary: #625ff4; --lumina-primary-weak: #eef0ff; --lumina-surface: #ffffff; --lumina-bg: #f4f6fb; --lumina-text: #151c32; --lumina-text-muted: #727b90; --lumina-text-faint: #9aa3b5; --lumina-secondary: #8fdad2; --lumina-error: #ef4444; --lumina-outline: #e7eaf1; --lumina-blue: #2563eb; --lumina-blue-weak: #eaf2ff; --lumina-amber: #d97706; --lumina-amber-weak: #fff7df; --lumina-green: #16a34a; --lumina-green-weak: #eafaf0; --lumina-red-weak: #fff0f0; --blue: #2563eb; --blue-mid: #93c5fd; --blue-light: #eaf2ff; --border: #e7eaf1; --navbar-h: 56px; --sidebar-left-w: 240px; --sidebar-right-w: 380px; --lumina-radius: 8px; --lumina-shadow: 0 4px 20px rgba(28,36,62,0.08); --lumina-shadow-sm: 0 2px 10px rgba(28,36,62,0.06); --lumina-shadow-xs: 0 1px 4px rgba(28,36,62,0.05); } /* ════ RESET ════ */ *, *::before, *::after { box-sizing: border-box; } html, body { height: 100%; margin: 0; font-family: 'Hanken Grotesk', system-ui, sans-serif; overflow: hidden; color: var(--lumina-text); background: #e2e8f0; } /* ════ MAP ════ */ #map { position: absolute !important; top: 0; left: 0; width: 100vw; height: 100vh; z-index: 1; } #map.edit-mode, #map.edit-mode .leaflet-interactive { cursor: crosshair !important; } .leaflet-container { font-family: 'Hanken Grotesk', system-ui, sans-serif !important; } .leaflet-pane.leaflet-tile-pane { filter: saturate(0.88) brightness(1.04); } .leaflet-top.leaflet-left { top: calc(var(--navbar-h) + 24px); left: calc(var(--sidebar-left-w) + 24px); } .leaflet-bottom.leaflet-right { right: calc(var(--sidebar-right-w) + 10px); bottom: 10px; } .leaflet-control-zoom { border: none !important; box-shadow: var(--lumina-shadow-sm) !important; border-radius: 8px !important; overflow: hidden; } /* ════════════════════════════════ NAVBAR ════════════════════════════════ */ .lumina-navbar { position: fixed; top: 8px; left: 12px; right: 12px; /* Floating look */ height: var(--navbar-h); z-index: 2000; display: flex; align-items: center; padding: 0 16px; gap: 10px; background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(8px); /* Glassmorphism */ border: 1px solid var(--lumina-outline); border-radius: 12px; /* Rounded corners */ box-shadow: 0 2px 12px rgba(0,0,0,0.06); } .lumina-brand { font-weight: 700; font-size: 15px; color: var(--lumina-primary); display: flex; align-items: center; gap: 8px; text-decoration: none; flex-shrink: 0; } .lumina-brand-icon { width: 28px; height: 28px; border-radius: 7px; border: 2px solid var(--lumina-primary); display: inline-flex; align-items: center; justify-content: center; font-size: 13px; flex-shrink: 0; } .lumina-nav-right { display: flex; align-items: center; gap: 8px; margin-left: auto; flex-shrink: 0; } /* Nav pills */ .nav-btn { height: 32px; border-radius: 16px; font-family: inherit; font-size: 13px; font-weight: 600; padding: 0 14px; border: 1px solid var(--border); cursor: pointer; display: inline-flex; align-items: center; gap: 6px; background: #fff; color: var(--lumina-text); transition: all 0.15s; white-space: nowrap; } .nav-btn:hover { background: #f4f6fb; } .nav-btn.active, .nav-btn.nav-btn-data { background: var(--lumina-primary-weak); border-color: var(--lumina-primary); color: var(--lumina-primary); } .nav-btn.msg-btn { background: #f0fdf4; border-color: #bbf7d0; color: #16a34a; } .nav-btn.mgr-btn { background: #fff7ed; border-color: #fed7aa; color: #d97706; } /* Primary button (navbar right) */ .lumina-btn-primary { display: inline-flex; align-items: center; gap: 7px; background: var(--lumina-primary); color: white; border: none; border-radius: 7px; padding: 0 14px; height: 34px; font-family: inherit; font-weight: 600; font-size: 13px; cursor: pointer; transition: all 0.15s; white-space: nowrap; flex-shrink: 0; } .lumina-btn-primary:hover { opacity: 0.88; } .lumina-btn-primary.danger { background: var(--lumina-error); } /* Navbar "Masuk" / role chip area */ .auth-name { font-weight: 600; font-size: 13px; color: var(--lumina-text); white-space: nowrap; } .role-chip { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; font-weight: 700; padding: 4px 10px; border-radius: 20px; } .role-chip.pimpinan { background: #fef9c3; color: #a16207; } .role-chip.pengurus { background: var(--lumina-primary-weak); color: var(--lumina-primary); } .lumina-icon-btn { width: 32px; height: 32px; border-radius: 6px; display: flex; align-items: center; justify-content: center; cursor: pointer; color: var(--lumina-text-muted); border: none; background: transparent; transition: all 0.15s; } .lumina-icon-btn:hover { background: #f1f5f9; color: var(--lumina-text); } .lumina-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 4px; border-radius: 9px; font-size: 10px; font-weight: 700; color: white; margin-left: 3px; } /* Logout nav btn */ .logout-btn { background: #fff0f0 !important; border-color: #fecaca !important; color: var(--lumina-error) !important; } /* ════════════════════════════════ LEFT SIDEBAR ════════════════════════════════ */ .lumina-sidebar { position: fixed; top: calc(var(--navbar-h) + 16px); bottom: 12px; left: 12px; width: var(--sidebar-left-w); background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(8px); z-index: 1000; display: flex; flex-direction: column; border-radius: 16px; border: 1px solid var(--lumina-outline); box-shadow: 0 4px 16px rgba(0,0,0,0.06); } .lumina-sidebar-top { padding: 16px 16px; border-bottom: 1px solid var(--lumina-outline); display: flex; gap: 10px; } .lumina-sidebar-top .lumina-btn-primary { flex: 1; justify-content: center; height: 40px; border-radius: 10px; font-size: 14px; padding: 0 12px; } .lumina-sidebar-top .lumina-btn-primary.secondary { background: #14b8a6; color: white; } .lumina-sidebar-top .lumina-btn-primary.secondary:hover { background: #0d9488; } .lumina-menu { flex: 1; overflow-y: auto; padding: 6px 0 16px; scrollbar-width: thin; scrollbar-color: #e7eaf1 transparent; } .lumina-menu::-webkit-scrollbar { width: 3px; } .lumina-menu::-webkit-scrollbar-thumb { background: #e7eaf1; border-radius: 2px; } .lumina-menu-section-label { font-size: 11px; font-weight: 800; color: var(--lumina-text-muted); margin: 22px 18px 8px; text-transform: uppercase; letter-spacing: 0.8px; } .lumina-menu-item { display: flex; align-items: center; gap: 12px; padding: 10px 14px; margin: 4px 14px; border-radius: 10px; color: var(--lumina-text-muted); font-weight: 600; font-size: 13px; cursor: pointer; transition: all 0.15s; border: none; background: transparent; width: auto; text-align: left; line-height: 1.4; } .lumina-menu-item i { width: 16px; text-align: center; font-size: 14px; flex-shrink: 0; } .lumina-menu-item:hover { background: #f1f5f9; color: var(--lumina-text); } .lumina-menu-item.active { background: var(--lumina-primary-weak); color: var(--lumina-primary); font-weight: 700; } /* Legend */ .lumina-legend { padding: 0 18px 8px; display: flex; flex-direction: column; gap: 8px; } .lumina-legend-item { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--lumina-text-muted); } .lumina-legend-dot { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; } /* ════════════════════════════════ STATS PANEL — floating on map ════════════════════════════════ */ .lumina-stats { position: fixed; bottom: 20px; left: calc(var(--sidebar-left-w) + 24px); z-index: 800; background: #ffffff; border-radius: 14px; border: 1px solid var(--lumina-outline); box-shadow: 0 8px 30px rgba(0,0,0,0.08); padding: 18px 24px; width: 360px; } .stat-title { font-size: 10px; font-weight: 800; color: var(--lumina-text-muted); text-transform: uppercase; letter-spacing: 0.6px; display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; } .stat-title > div { display: flex; align-items: center; gap: 8px; } .stat-title button { background: none; border: none; cursor: pointer; color: var(--lumina-text-muted); padding: 0; font-size: 12px; } .stat-sub-label { font-size: 11px; color: var(--lumina-text-muted); margin-bottom: 6px; display: flex; justify-content: space-between; align-items: center; } .stat-sub-label span { font-weight: 700; color: var(--lumina-primary); font-size: 11px; } .stat-progress-bar { height: 4px; background: #eef1f6; border-radius: 2px; margin-bottom: 20px; position: relative; overflow: hidden; } .stat-progress-fill { position: absolute; top: 0; left: 0; height: 100%; background: var(--lumina-primary); border-radius: 2px; transition: width 0.5s ease-in-out; } .stat-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px 8px; text-align: center; margin-bottom: 16px; } .stat-item-val { font-size: 24px; font-weight: 700; color: var(--lumina-primary); margin-bottom: 4px; line-height: 1; } .stat-item-val.error { color: var(--lumina-error); } .stat-item-val.success { color: var(--lumina-green); } .stat-item-lbl { font-size: 9px; font-weight: 800; color: var(--lumina-text-muted); text-transform: uppercase; letter-spacing: 0.6px; } .stat-divider { border: none; border-top: 1px dashed var(--lumina-outline); margin: 16px 0; } .stat-ibadah-label { font-size: 9px; font-weight: 800; color: var(--lumina-text-muted); text-transform: uppercase; letter-spacing: 0.6px; margin-bottom: 12px; } .stat-ibadah-row { display: flex; justify-content: space-between; text-align: center; padding: 0 10px; } .stat-ibadah-row > div { display: flex; flex-direction: column; align-items: center; gap: 4px; font-size: 11px; color: var(--lumina-text-muted); } .stat-ibadah-row b { font-size: 16px; color: var(--lumina-text); line-height: 1; margin-top: 2px; } /* ════════════════════════════════ RIGHT SIDEBAR (#sidebar) ════════════════════════════════ */ #sidebar, .lumina-panel-right { position: fixed; top: calc(var(--navbar-h) + 16px); bottom: 8px; right: 12px; width: 380px; background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(8px); z-index: 1000; display: flex; flex-direction: column; border-radius: 12px; border: 1px solid var(--lumina-outline); box-shadow: 0 4px 16px rgba(0,0,0,0.06); /* Hidden default unless open */ transform: translateX(120%); transition: transform 0.25s ease; } #sidebar[style*="display: block"], #sidebar[style*="display: flex"], .lumina-panel-right[style*="display: block"], .lumina-panel-right[style*="display: flex"] { transform: translateX(0) !important; display: flex !important; } .sidebar-head { padding: 16px 20px 12px; border-bottom: none; display: flex; justify-content: space-between; align-items: center; flex-shrink: 0; } .sidebar-head-title { font-size: 16px; font-weight: 800; color: var(--lumina-primary); display: flex; align-items: center; gap: 8px; } /* Filter row */ .sidebar-filter { display: flex; gap: 8px; padding: 0 20px 16px; border-bottom: 1px solid var(--lumina-outline); flex-shrink: 0; } .lumina-btn-filter { flex: 1; background: #ffffff; border: 1px solid var(--lumina-outline); color: var(--lumina-text-muted); height: 38px; padding: 0 10px; border-radius: 8px; font-family: inherit; font-size: 11px; font-weight: 600; cursor: pointer; transition: all 0.15s; } .lumina-btn-filter:hover { background: #f8fafc; } .lumina-btn-filter.active { background: var(--lumina-primary); color: white; border-color: var(--lumina-primary); } /* Sub text */ .sidebar-head-sub { padding: 5px 14px 6px; font-size: 11px; color: var(--lumina-text-muted); flex-shrink: 0; } /* Scroll area */ .sidebar-scroll { flex: 1; overflow-y: auto; padding: 0 10px 16px; scrollbar-width: thin; scrollbar-color: #e7eaf1 transparent; } .sidebar-scroll::-webkit-scrollbar { width: 3px; } .sidebar-scroll::-webkit-scrollbar-thumb { background: #e7eaf1; border-radius: 2px; } /* ════════════════════════════════ SECTION HEADER inside sidebar ════════════════════════════════ */ .sec-hd { display: flex; align-items: center; justify-content: space-between; padding: 10px 0 6px; font-size: 10px; font-weight: 800; color: var(--lumina-text-muted); text-transform: uppercase; letter-spacing: 0.5px; border-bottom: 1px solid var(--lumina-outline); margin-bottom: 8px; } .sec-hd-label { flex: 1; } .sec-count { background: #f1f5f9; color: var(--lumina-text-muted); font-size: 10px; font-weight: 700; padding: 2px 7px; border-radius: 10px; } .sec-divider { display: none; } /* ════════════════════════════════ CARDS ════════════════════════════════ */ .card { border-radius: 10px; border: 1px solid var(--lumina-outline); padding: 14px 16px 12px; margin-bottom: 12px; background: #ffffff; cursor: pointer; transition: box-shadow 0.15s, border-color 0.15s; } .card:hover { border-color: #d0d5e4; box-shadow: var(--lumina-shadow-xs); } .card.selected { border: 2px solid var(--lumina-primary); } .card-name { font-size: 15px; font-weight: 800; color: var(--lumina-text); margin-bottom: 4px; } .card-sub { font-size: 12px; color: var(--lumina-blue); font-weight: 700; margin-bottom: 4px; } .card-addr { font-size: 11px; color: var(--lumina-text-muted); line-height: 1.5; margin-bottom: 12px; } .card-ts { font-size: 10px; color: var(--lumina-text-faint); display: flex; align-items: center; gap: 4px; margin-bottom: 6px; } .card-foot { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 12px; } .card-btns { display: flex; gap: 6px; align-items: center; } /* ════ STATUS CHIPS ════ */ .chip { display: inline-flex; align-items: center; gap: 4px; padding: 3px 8px; border-radius: 5px; font-size: 10px; font-weight: 700; } .chip-green { background: var(--lumina-green-weak); color: var(--lumina-green); } .chip-red { background: var(--lumina-red-weak); color: var(--lumina-error); } .chip-blue { background: var(--lumina-blue-weak); color: var(--lumina-blue); } .chip-amber { background: var(--lumina-amber-weak); color: var(--lumina-amber); } .chip-gray { background: #f1f5f9; color: var(--lumina-text-muted); } /* ════ BUTTONS in cards ════ */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: 4px; border: 1px solid #e7eaf1; border-radius: 6px; height: 28px; padding: 0 8px; font: inherit; font-size: 11px; font-weight: 700; cursor: pointer; background: #fff; color: #727b90; transition: all 0.13s; white-space: nowrap; } .btn:hover { background: #f4f6fb; } .btn-primary { background: #625ff4; border-color: #625ff4; color: #fff; } .btn-primary:hover { opacity: 0.88; } .btn-send { background: #16a34a; border-color: #16a34a; color: #fff; } .btn-add { width: 100%; border-style: dashed; background: #eef0ff; color: #625ff4; } /* Icon-only buttons */ .btn-focus, .btn-lapor, .btn-edit, .btn-delete { border-radius: 8px; border: none; padding: 0 12px; height: 32px; } .card-btns .btn-focus, .card-btns .btn-edit, .card-btns .btn-delete { width: 32px; padding: 0; flex-shrink: 0; } .btn-focus { background: var(--lumina-green-weak); color: var(--lumina-green); } .btn-focus:hover { background: #dcfce7; } .btn-edit { background: var(--lumina-primary-weak); color: var(--lumina-primary); } .btn-edit:hover { background: #e0e7ff; } .btn-delete { background: var(--lumina-red-weak); color: var(--lumina-error); } .btn-delete:hover { background: #fee2e2; } .btn-lapor { background: var(--lumina-amber-weak); color: var(--lumina-amber); } .btn-lapor:hover { background: #fef3c7; } .btn-detail { background: var(--lumina-blue-weak); border-color: #bcd2f7; color: var(--lumina-blue); padding: 0 8px; } .btn-detail:hover { background: #d6e8ff; } /* Radius row (ibadah cards) */ .radius-row { display: flex; align-items: center; gap: 8px; background: #f8fafc; border: 1px solid var(--lumina-outline); border-radius: 8px; padding: 6px 10px; margin: 12px 0; font-size: 12px; font-weight: 600; color: var(--lumina-text-muted); } .radius-row input[type=number] { width: 64px; height: 28px; border: 1px solid var(--border); border-radius: 4px; padding: 0 6px; font: inherit; font-size: 12px; background: #fff; } .radius-unit { font-size: 12px; color: var(--lumina-text-muted); } .btn-update { height: 28px; padding: 0 12px; border-radius: 6px; font-size: 11px; font-weight: 700; background: var(--lumina-blue-weak); color: var(--lumina-blue); border: none; cursor: pointer; margin-left: auto; } .btn-update:hover { background: #dbeafe; } /* ════════════════════════════════ MODALS ════════════════════════════════ */ .modal-bg { position: fixed; inset: 0; z-index: 5000; background: rgba(17, 24, 39, 0.45); backdrop-filter: blur(4px); display: flex; align-items: center; justify-content: center; } .modal-card { width: 480px; max-width: 94vw; max-height: 90vh; overflow: auto; background: #fff; border-radius: 14px; box-shadow: 0 20px 60px rgba(0,0,0,0.16); } .modal-top { display: flex; align-items: flex-start; gap: 14px; padding: 20px 22px 14px; border-bottom: 1px solid #eef1f6; position: sticky; top: 0; background: #fff; z-index: 1; } .modal-icon-wrap { width: 40px; height: 40px; border-radius: 9px; display: grid; place-items: center; flex: 0 0 auto; } .modal-icon-blue { background: #eaf2ff; color: #2563eb; } .modal-icon-green { background: #eafaf0; color: #16a34a; } .modal-icon-red { background: #fff0f0; color: #ef4444; } .modal-icon-amber { background: #fff7df; color: #d97706; } .modal-icon-purple { background: #eef0ff; color: #625ff4; } .modal-title { font-size: 15px; font-weight: 800; color: #151c32; } .modal-subtitle { font-size: 11px; color: #727b90; margin-top: 2px; } .modal-close { margin-left: auto; border: 0; background: #f4f6fb; color: #727b90; width: 28px; height: 28px; border-radius: 7px; cursor: pointer; } .modal-body { padding: 16px 22px 20px; display: flex; flex-direction: column; gap: 12px; } .modal-footer { display: flex; justify-content: flex-end; gap: 8px; } .field, .field-row .field { display: flex; flex-direction: column; gap: 5px; flex: 1; } .field-row { display: flex; gap: 10px; } .field-label { font-size: 12px; font-weight: 700; color: #151c32; } .req { color: #ef4444; } .field input, .field select, .field textarea, #pesan-jenis, #pesan-judul, #pesan-isi { border: 1px solid #e7eaf1; border-radius: 7px; padding: 8px 10px; font: inherit; background: #f8fafc; color: #151c32; font-size: 13px; } .field-hint { font-size: 11px; color: #9aa3b5; } /* ════════════════════════════════ DETAIL PANEL (right slide-in) ════════════════════════════════ */ #detail-panel { position: fixed; top: var(--navbar-h); right: 0; bottom: 0; width: 340px; max-width: 94vw; transform: translateX(calc(100% + 20px)); transition: 0.25s ease; z-index: 2100; background: #fff; border-left: 1px solid #e7eaf1; box-shadow: -4px 0 16px rgba(0,0,0,0.06); display: flex; flex-direction: column; overflow: hidden; } #detail-panel.open { transform: translateX(0); } .dp-head, .dp-foot { padding: 14px 16px; border-bottom: 1px solid #e7eaf1; } .dp-foot { border-top: 1px solid #e7eaf1; border-bottom: 0; display: flex; gap: 7px; flex-wrap: wrap; } .dp-head-row { display: flex; justify-content: space-between; gap: 12px; } .dp-title { font-weight: 800; font-size: 16px; } .dp-addr { color: #727b90; font-size: 12px; margin-top: 4px; } .dp-close, .pdf-close, .ldf-close { border: 0; width: 28px; height: 28px; border-radius: 7px; background: #f4f6fb; cursor: pointer; } .dp-status { margin-top: 10px; padding: 7px 10px; border-radius: 7px; background: #eafaf0; color: #16a34a; font-weight: 800; font-size: 12px; } .dp-tabs { display: grid; grid-template-columns: repeat(3, 1fr); padding: 8px; gap: 6px; border-bottom: 1px solid #e7eaf1; } .dp-tab { border: 1px solid #e7eaf1; background: #fff; border-radius: 7px; height: 32px; font-weight: 800; font-size: 12px; color: #727b90; cursor: pointer; font-family: inherit; } .dp-tab.active { background: #625ff4; border-color: #625ff4; color: #fff; } .dp-content { padding: 12px 16px; overflow: auto; flex: 1; } .hidden { display: none !important; } /* l-card / b-card / p-card */ .l-card, .b-card, .p-card { border: 1px solid var(--lumina-outline); border-radius: 10px; padding: 14px 16px; margin-bottom: 12px; background: #fff; } .b-head, .l-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; } .b-jenis, .l-cat { font-size: 15px; font-weight: 800; color: var(--lumina-text); } .b-desc, .l-desc { font-size: 14px; color: var(--lumina-text); margin-bottom: 8px; } .b-meta, .l-meta { font-size: 13px; color: var(--lumina-text-muted); margin-bottom: 4px; display: flex; align-items: center; gap: 6px; } .b-acts, .l-acts { margin-top: 14px; display: flex; gap: 8px; flex-wrap: wrap; } .b-acts .btn, .l-acts .btn { height: 32px; font-size: 12px; border-radius: 8px; } .b-acts .btn-delete, .l-acts .btn-delete { width: 32px; padding: 0; justify-content: center; flex-shrink: 0; } .btn-proses { background: var(--lumina-blue-weak); color: var(--lumina-blue); } .btn-proses:hover { background: #dbeafe; } .btn-selesai { background: var(--lumina-green-weak); color: var(--lumina-green); } .btn-selesai:hover { background: #dcfce7; } .btn-tolak { background: var(--lumina-gray-weak); color: var(--lumina-text); } .btn-tolak:hover { background: #e2e8f0; } .l-kk { font-size: 13px; font-weight: 700; color: var(--lumina-primary); margin-bottom: 6px; display: flex; align-items: center; gap: 6px; } /* ════ ANGGOTA CARDS ════ */ .anggota-card { border: 1px solid var(--lumina-outline); border-radius: 10px; padding: 14px 16px; margin-bottom: 12px; background: #fff; } .ang-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; } .ang-name { font-size: 15px; font-weight: 800; color: var(--lumina-text); } .ang-row { font-size: 12px; color: var(--lumina-text); margin-bottom: 6px; display: flex; } .ang-lbl { display: inline-block; width: 90px; font-weight: 700; color: var(--lumina-text-muted); flex-shrink: 0; } .ang-warn { font-size: 11px; color: var(--lumina-amber); background: var(--lumina-amber-weak); padding: 8px 12px; border-radius: 8px; margin: 8px 0; } .umur-em { color: var(--lumina-text-faint); font-style: italic; margin-left: 4px; } .ang-acts { display: flex; gap: 8px; margin-top: 14px; padding-top: 12px; border-top: 1px dashed var(--lumina-outline); } /* ════════════════════════════════ TOAST ════════════════════════════════ */ #toast-wrap { position: fixed; right: 18px; bottom: 18px; display: flex; flex-direction: column; gap: 7px; z-index: 999999; } .toast { padding: 10px 14px; border-radius: 9px; color: #fff; font-weight: 700; font-size: 13px; box-shadow: 0 8px 24px rgba(0,0,0,0.14); display: flex; align-items: center; gap: 8px; } .toast.success { background: #16a34a; } .toast.error { background: #ef4444; } .toast.info { background: #2563eb; } .toast.removing { opacity: 0; transform: translateX(20px); transition: 0.25s; } /* ════════════════════════════════ FLOATING PANELS (pesan / laporan detail) ════════════════════════════════ */ #pesan-detail-float, #laporan-detail-float { display: none; position: fixed; right: calc(var(--sidebar-right-w) + 12px); top: calc(var(--navbar-h) + 12px); z-index: 9999; width: 340px; max-width: 90vw; background: #fff; border-radius: 16px; box-shadow: 0 24px 60px rgba(0,0,0,0.2); overflow: hidden; flex-direction: column; } .pdf-accent-bar { height: 4px; background: var(--lumina-primary); } #ldf-status-bar { height: 4px; background: var(--lumina-primary); } #ldf-status-bar.selesai { background: var(--lumina-green); } #ldf-status-bar.diproses { background: var(--lumina-blue); } #ldf-status-bar.menunggu { background: var(--lumina-amber); } #ldf-status-bar.ditolak { background: var(--lumina-gray); } .pdf-head, .ldf-head { padding: 16px 20px; display: flex; gap: 12px; border-bottom: 1px solid var(--lumina-outline); align-items: flex-start; } #pdf-icon, #ldf-icon { font-size: 24px; background: #f8fafc; width: 44px; height: 44px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; border-radius: 12px; } .pdf-close, .ldf-close { border: none; background: transparent; cursor: pointer; font-size: 16px; color: var(--lumina-text-muted); padding: 0; margin-left: auto; } .pdf-body, .ldf-body { padding: 20px; font-size: 14px; color: var(--lumina-text); line-height: 1.6; } #pdf-isi, #ldf-deskripsi { font-size: 15px; color: var(--lumina-text); margin-bottom: 16px; } #pdf-pengirim, #ldf-pelapor { font-weight: 700; } #pdf-role, #pdf-jenis-label, #pdf-waktu, #ldf-wa, #ldf-waktu, #ldf-ditangani { font-size: 13px; color: var(--lumina-text-muted); margin-bottom: 4px; } .pdf-broadcast-badge, .pdf-badge-baru, #ldf-kk-badge { display: inline-block; padding: 6px 10px; border-radius: 8px; font-size: 11px; font-weight: 800; margin-top: 8px; } .pdf-broadcast-badge { background: var(--lumina-purple-weak); color: var(--lumina-purple); } .pdf-badge-baru { background: var(--lumina-amber-weak); color: var(--lumina-amber); } #ldf-kk-badge { background: var(--lumina-blue-weak); color: var(--lumina-blue); margin-bottom: 12px; margin-top: 0; } .ldf-footer { padding: 14px 20px; border-top: 1px solid var(--lumina-outline); background: #f8fafc; } /* Notif panel */ #notif-panel { background: #fff; border-radius: 10px; border: 1px solid var(--lumina-outline); box-shadow: var(--lumina-shadow); } /* Routing instruction */ #routing-instruction-panel { background: #fff; border-radius: 10px; border: 1px solid var(--lumina-outline); border-left: 4px solid var(--lumina-primary); box-shadow: var(--lumina-shadow); } /* Panel compose */ .panel-compose { border-top: 1px solid var(--lumina-outline); padding: 16px 20px; background: #f8fafc; flex-shrink: 0; } .panel-compose-title { font-size: 11px; font-weight: 800; color: var(--lumina-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 12px; } .panel-compose select, .panel-compose input, .panel-compose textarea { width: 100%; margin-bottom: 10px; border: 1px solid var(--lumina-outline); border-radius: 8px; padding: 10px 12px; font: inherit; font-size: 13px; background: #fff; } .panel-compose .btn-primary { height: 40px; border-radius: 8px; font-size: 13px; } /* Pesan Cards */ .p-head { display: flex; align-items: center; gap: 6px; margin-bottom: 8px; } .p-judul { font-size: 15px; font-weight: 800; color: var(--lumina-text); margin-bottom: 4px; } .p-isi { font-size: 14px; color: var(--lumina-text); margin-bottom: 8px; line-height: 1.5; } .p-meta { font-size: 13px; color: var(--lumina-text-muted); display: flex; align-items: center; gap: 6px; } .lumina-panel-right { overflow: hidden; } /* ════════════════════════════════ HIDE OLD ELEMENTS ════════════════════════════════ */ .mode-group { display: none !important; } #toolbar-input-section { display: none !important; } .status-bar { display: none !important; } /* ════════════════════════════════ SWAL2 OVERRIDES ════════════════════════════════ */ .swal2-popup { font-family: 'Hanken Grotesk', system-ui, sans-serif !important; border-radius: 12px !important; box-shadow: 0 20px 60px rgba(0,0,0,0.15) !important; } .swal2-confirm { background: var(--lumina-primary) !important; border-radius: 7px !important; box-shadow: none !important; font-family: inherit !important; } .swal2-cancel { background: #f1f5f9 !important; color: var(--lumina-text) !important; border-radius: 7px !important; font-family: inherit !important; } .swal2-success-circular-line-left, .swal2-success-circular-line-right, .swal2-success-fix { background-color: transparent !important; } /* ════════════════════════════════ EMPTY / LOADING ════════════════════════════════ */ .empty { color: var(--lumina-text-faint); font-size: 12px; text-align: center; padding: 20px 12px; line-height: 1.5; } .loading { color: var(--lumina-text-faint); font-size: 12px; text-align: center; padding: 16px 12px; } /* ════════════════════════════════ RESPONSIVE ════════════════════════════════ */ @media (max-width: 900px) { :root { --sidebar-left-w: 100%; --sidebar-right-w: 100%; } .lumina-sidebar { top: auto; bottom: 0; left: 0; right: 0; width: 100%; max-height: 38vh; border-right: none; border-top: 1px solid var(--lumina-outline); } #sidebar, .lumina-panel-right { top: auto; bottom: 38vh; left: 0; right: 0; width: 100% !important; max-height: 45vh; border-left: none; border-top: 1px solid var(--lumina-outline); } .lumina-stats { display: none; } .leaflet-top.leaflet-left { top: calc(var(--navbar-h) + 12px); left: 12px; } .leaflet-bottom.leaflet-right { right: 14px; bottom: 46vh; } }