:root { --primary: #0f4c81; --primary-2: #0a3a63; --surface: rgba(255, 255, 255, 0.96); --line: #dbe4ef; --text: #102033; --muted: #64748b; --green: #16a34a; --red: #dc2626; --yellow: #f59e0b; --blue: #2563eb; --purple: #7c3aed; --gray: #6b7280; } * { box-sizing: border-box; margin: 0; padding: 0; font-family: Inter, Arial, Helvetica, sans-serif; } body { overflow: hidden; color: var(--text); background: #eef4fb; } #map { width: 100vw; height: 100vh; z-index: 1; } .app-shell { position: absolute; top: 16px; left: 16px; width: 420px; max-height: calc(100vh - 32px); display: flex; flex-direction: column; z-index: 1000; background: var(--surface); border: 1px solid rgba(219, 228, 239, 0.9); border-radius: 24px; box-shadow: 0 22px 55px rgba(15, 23, 42, 0.22); backdrop-filter: blur(18px); overflow: hidden; } .brand-panel { display: grid; grid-template-columns: 48px 1fr auto; gap: 12px; align-items: center; padding: 16px 16px 12px; background: linear-gradient(135deg, #0f4c81, #0d749b); color: white; } .brand-logo { width: 48px; height: 48px; display: grid; place-items: center; border-radius: 16px; background: rgba(255,255,255,0.18); border: 1px solid rgba(255,255,255,0.26); font-size: 24px; font-weight: 900; } .brand-panel h1 { font-size: 22px; line-height: 1.1; letter-spacing: 0.4px; } .brand-panel p { margin-top: 3px; font-size: 11px; opacity: 0.86; line-height: 1.35; } .logout { align-self: flex-start; text-decoration: none; background: rgba(255,255,255,0.18); color: white; padding: 7px 10px; border-radius: 999px; font-size: 12px; font-weight: 800; white-space: nowrap; } .user-box { margin: 12px 14px 0; padding: 12px; border-radius: 16px; background: #f8fafc; border: 1px solid var(--line); } .user-box b, .user-box span { display: block; } .user-box b { color: #0f172a; font-size: 14px; } .user-box span { color: var(--muted); font-size: 11px; margin-top: 4px; line-height: 1.35; } .tabs { display: flex; gap: 8px; overflow-x: auto; padding: 12px 14px 10px; border-bottom: 1px solid var(--line); } .tab { flex: 0 0 auto; border: 1px solid var(--line); background: white; color: #334155; padding: 9px 12px; border-radius: 999px; cursor: pointer; font-size: 12px; font-weight: 850; white-space: nowrap; transition: 0.18s; } .tab:hover { border-color: var(--primary); } .tab.active { border-color: var(--primary); background: var(--primary); color: white; box-shadow: 0 8px 18px rgba(15, 76, 129, 0.18); } .panel-body { padding: 14px; overflow-y: auto; } .tab-panel { display: none; } .tab-panel.active { display: block; } .hero-card { padding: 16px; border-radius: 18px; color: white; background: linear-gradient(135deg, #0f4c81, #2563eb 55%, #0891b2); box-shadow: 0 16px 36px rgba(37, 99, 235, 0.22); } .hero-card small { font-size: 11px; font-weight: 900; letter-spacing: 0.5px; text-transform: uppercase; opacity: 0.82; } .hero-card h2 { font-size: 20px; margin-top: 4px; line-height: 1.2; } .hero-card p { margin-top: 8px; font-size: 12px; line-height: 1.55; opacity: 0.93; } .section-title { position: relative; font-size: 14px; font-weight: 900; margin: 18px 0 10px; color: #0f172a; padding-left: 10px; } .section-title::before { content: ''; position: absolute; left: 0; top: 2px; width: 4px; height: 16px; border-radius: 999px; background: var(--primary); } .stats { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 12px; } .stat-card { min-height: 78px; padding: 13px; border-radius: 18px; background: white; border: 1px solid var(--line); box-shadow: 0 8px 18px rgba(15, 23, 42, 0.06); } .stat-card span { display: block; font-size: 24px; font-weight: 950; color: var(--primary); } .stat-card small { display: block; margin-top: 4px; color: var(--muted); font-size: 11px; line-height: 1.25; } .green-card span { color: var(--green); } .red-card span { color: var(--red); } .yellow-card span { color: var(--yellow); } .progress-wrap { margin-top: 12px; padding: 12px; background: white; border: 1px solid var(--line); border-radius: 16px; } .progress-label { display: flex; justify-content: space-between; color: #334155; font-size: 12px; font-weight: 800; } .progress { height: 10px; background: #e2e8f0; border-radius: 999px; overflow: hidden; margin-top: 8px; } .progress-bar { height: 100%; width: 0%; background: linear-gradient(90deg, var(--primary), var(--green)); border-radius: 999px; transition: 0.25s; } label { display: block; font-size: 12px; color: #334155; margin: 11px 0 5px; font-weight: 850; } input, select, textarea { width: 100%; border: 1px solid #cbd5e1; border-radius: 12px; padding: 10px 11px; font-size: 13px; background: white; color: #0f172a; outline: none; transition: 0.16s; } input[readonly], textarea[readonly], select:disabled { background: #f1f5f9; color: #64748b; } input:focus, select:focus, textarea:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(15, 76, 129, 0.12); } textarea { min-height: 68px; resize: vertical; } input[type="range"] { padding: 0; border: none; accent-color: var(--primary); } .two-col { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; } .quick-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; } .btn { display: block; width: 100%; border: none; border-radius: 12px; padding: 11px 12px; margin-top: 10px; font-size: 13px; font-weight: 900; cursor: pointer; text-align: center; text-decoration: none; transition: 0.16s; } .btn-primary { background: var(--primary); color: white; } .btn-primary:hover { background: var(--primary-2); } .btn-secondary { background: #e0f2fe; color: #075985; } .btn-secondary:hover { background: #bae6fd; } .btn-danger { background: #fee2e2; color: #991b1b; } .info-box, .alert { padding: 11px; border-radius: 14px; font-size: 12px; line-height: 1.55; margin-top: 10px; } .info-box { background: #fff7ed; border: 1px solid #fed7aa; color: #9a3412; } .alert-danger { background: #fee2e2; border: 1px solid #fecaca; color: #b91c1c; } .list-box { display: flex; flex-direction: column; gap: 9px; } .list-item { background: white; border: 1px solid var(--line); border-radius: 16px; padding: 12px; cursor: pointer; box-shadow: 0 8px 18px rgba(15, 23, 42, 0.045); transition: 0.16s; } .list-item:hover { border-color: var(--primary); transform: translateY(-1px); } .list-title-row { display: flex; justify-content: space-between; align-items: flex-start; gap: 8px; } .list-item b { display: block; font-size: 13px; color: #0f172a; line-height: 1.35; } .list-item span { display: block; font-size: 11px; color: var(--muted); margin-top: 4px; line-height: 1.4; } .item-actions { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; } .mini-btn { border: none; padding: 7px 9px; border-radius: 9px; font-size: 11px; font-weight: 850; cursor: pointer; background: #eff6ff; color: #1d4ed8; } .mini-btn.green { background: #dcfce7; color: #166534; } .mini-btn.red { background: #fee2e2; color: #991b1b; } .mini-btn.purple { background: #ede9fe; color: #5b21b6; } .badge { display: inline-block; padding: 4px 8px; border-radius: 999px; font-size: 10px; font-weight: 900; white-space: nowrap; } .badge-green { background: #dcfce7; color: #166534; } .badge-red { background: #fee2e2; color: #991b1b; } .badge-yellow { background: #fef3c7; color: #92400e; } .badge-gray { background: #e5e7eb; color: #374151; } .badge-blue { background: #dbeafe; color: #1e40af; } .badge-purple { background: #ede9fe; color: #5b21b6; } .report-grid { display: grid; grid-template-columns: 1fr; gap: 10px; } .report-card { display: block; width: 100%; text-align: left; text-decoration: none; border: 1px solid var(--line); background: white; border-radius: 16px; padding: 14px; color: #0f172a; cursor: pointer; } .report-card b, .report-card span { display: block; } .report-card span { color: var(--muted); font-size: 12px; margin-top: 5px; line-height: 1.45; } .map-toolbar { position: absolute; top: 16px; right: 16px; display: flex; gap: 8px; z-index: 1000; } .tool-btn { border: 1px solid var(--line); background: white; color: #334155; padding: 9px 12px; border-radius: 999px; font-size: 12px; font-weight: 900; cursor: pointer; box-shadow: 0 10px 24px rgba(15, 23, 42, 0.12); } .tool-btn.active { background: var(--primary); color: white; border-color: var(--primary); } .legend { position: absolute; right: 16px; bottom: 16px; background: white; z-index: 1000; padding: 13px; border-radius: 16px; border: 1px solid var(--line); box-shadow: 0 14px 35px rgba(15, 23, 42, 0.18); font-size: 13px; line-height: 1.85; } .dot { display: inline-block; width: 12px; height: 12px; border-radius: 50%; margin-right: 7px; vertical-align: middle; } .blue { background: var(--blue); } .green { background: var(--green); } .red { background: var(--red); } .yellow { background: var(--yellow); } .gray { background: var(--gray); } .popup-title { font-weight: 900; color: var(--primary); margin-bottom: 6px; } .popup-btn { border: none; padding: 7px 9px; border-radius: 8px; margin-top: 7px; margin-right: 5px; color: white; background: var(--primary); cursor: pointer; font-weight: 800; font-size: 12px; } .popup-btn.secondary { background: var(--purple); } .popup-btn.danger { background: var(--red); } .popup-btn.green { background: var(--green); } .toast { position: fixed; left: 50%; bottom: 24px; transform: translateX(-50%) translateY(80px); background: #0f172a; color: white; padding: 12px 16px; border-radius: 999px; z-index: 2000; opacity: 0; transition: 0.25s ease; font-size: 13px; box-shadow: 0 14px 35px rgba(15, 23, 42, 0.25); max-width: 90vw; } .toast.show { opacity: 1; transform: translateX(-50%) translateY(0); } .leaflet-routing-container { display: none; } .login-page { min-height: 100vh; overflow: auto; display: grid; place-items: center; padding: 24px; background: radial-gradient(circle at top left, rgba(15, 76, 129, 0.24), transparent 32%), radial-gradient(circle at bottom right, rgba(22, 163, 74, 0.16), transparent 30%), linear-gradient(135deg, #eff6ff, #f8fafc); } .login-card { width: 100%; max-width: 430px; background: white; padding: 26px; border-radius: 26px; box-shadow: 0 24px 60px rgba(15, 23, 42, 0.18); border: 1px solid var(--line); } .brand-badge { display: inline-block; background: var(--primary); color: white; border-radius: 999px; padding: 8px 12px; font-size: 12px; font-weight: 950; margin-bottom: 12px; } .login-card h1 { font-size: 25px; color: #0f172a; margin-bottom: 6px; } .login-card p { color: var(--muted); font-size: 13px; line-height: 1.6; margin-bottom: 14px; } @media (max-width: 860px) { .app-shell { width: calc(100vw - 32px); max-height: 58vh; } .map-toolbar { top: auto; right: 16px; bottom: 104px; flex-wrap: wrap; justify-content: flex-end; } .legend { right: 16px; bottom: 16px; font-size: 12px; } } .auth-switch { margin-top: 16px; text-align: center; color: var(--muted); font-size: 13px; } .auth-switch a { color: var(--primary); font-weight: 900; text-decoration: none; } .info-box.small-note { margin-top: 14px; font-size: 12px; line-height: 1.55; } /* UI polish: lebih lega dan minim teks */ .app-shell { width: 460px; border-radius: 28px; } .brand-panel { grid-template-columns: 46px 1fr auto; padding: 18px 18px 16px; } .brand-panel h1 { font-size: 21px; } .brand-panel p { font-size: 12px; opacity: .78; } .user-box { margin: 16px 18px 0; padding: 14px 15px; border-radius: 18px; } .tabs { padding: 16px 18px 14px; gap: 10px; flex-wrap: wrap; overflow-x: visible; } .tab { flex: 1 1 calc(50% - 10px); padding: 11px 12px; text-align: center; border-radius: 14px; background: #f8fafc; } .panel-body { padding: 20px; } .hero-card { padding: 22px; border-radius: 24px; } .hero-card h2 { font-size: 22px; margin-top: 5px; } .hero-card p { font-size: 13px; line-height: 1.55; max-width: 320px; } .stats { gap: 12px; margin-top: 16px; } .stat-card { min-height: 92px; padding: 16px; border-radius: 22px; } .stat-card span { font-size: 28px; } .section-title { margin: 24px 0 13px; font-size: 15px; } .progress-wrap, .report-card, .list-item, .info-box, .alert { border-radius: 18px; } .info-box, .alert { padding: 13px 14px; } label { margin: 14px 0 6px; } input, select, textarea { padding: 12px 13px; border-radius: 14px; } textarea { min-height: 86px; } .two-col { gap: 12px; } .quick-actions { gap: 10px; } .btn { padding: 13px 14px; border-radius: 14px; margin-top: 12px; } .list-box { gap: 12px; } .list-item { padding: 15px; } .item-actions { margin-top: 12px; gap: 8px; } .mini-btn { padding: 8px 10px; border-radius: 10px; } .map-toolbar { top: 20px; right: 20px; gap: 10px; } .tool-btn { padding: 11px 14px; border-radius: 14px; } .legend { right: 20px; bottom: 20px; padding: 15px; border-radius: 18px; } .login-card { max-width: 420px; padding: 34px; border-radius: 30px; } .brand-badge { margin-bottom: 16px; } .login-card h1 { font-size: 30px; letter-spacing: -0.8px; } .login-card p { font-size: 14px; margin-bottom: 18px; } @media (max-width: 860px) { .app-shell { width: calc(100vw - 28px); left: 14px; top: 14px; max-height: 62vh; } .tabs { flex-wrap: nowrap; overflow-x: auto; } .tab { flex: 0 0 auto; } .panel-body { padding: 16px; } } .alert-success { background: #dcfce7; border: 1px solid #bbf7d0; color: #166534; } .register-card { max-width: 560px; } .role-extra { display: none; } .role-extra .btn { margin-top: 8px; } /* UI/UX refinement: cleaner final app layout */ body { background: #eaf2fb; } .app-shell { width: 456px; border-radius: 28px; transition: transform .24s ease, opacity .18s ease; } body.panel-collapsed .app-shell { transform: translateX(calc(-100% - 28px)); opacity: 0; pointer-events: none; } .brand-panel { grid-template-columns: 48px 1fr auto auto; padding: 16px; } .panel-toggle { width: 34px; height: 34px; border: 1px solid rgba(255,255,255,.28); border-radius: 999px; color: white; background: rgba(255,255,255,.16); cursor: pointer; font-size: 24px; line-height: 1; transition: .18s ease; } .panel-toggle:hover, .logout:hover, .panel-open:hover, .tool-btn:hover { transform: translateY(-1px); } .panel-open { position: absolute; top: 20px; left: 20px; z-index: 1001; display: none; border: 1px solid rgba(219, 228, 239, .96); border-radius: 999px; padding: 12px 16px; color: #0f4c81; background: rgba(255,255,255,.92); box-shadow: 0 14px 38px rgba(15, 23, 42, .16); backdrop-filter: blur(16px); font-size: 13px; font-weight: 950; cursor: pointer; } body.panel-collapsed .panel-open { display: inline-flex; } .user-box { display: grid; grid-template-columns: 1fr auto; gap: 10px 12px; align-items: start; padding: 14px; } .user-box .user-main b { font-size: 15px; } .user-box .user-main span { margin-top: 5px; word-break: break-word; } .user-box p { grid-column: 1 / -1; color: var(--muted); font-size: 12px; line-height: 1.5; } .role-chip { display: inline-flex; align-items: center; justify-content: center; padding: 7px 10px; border-radius: 999px; color: #0f4c81; background: #eff6ff; border: 1px solid #dbeafe; font-size: 11px; font-weight: 950; white-space: nowrap; } .tabs { flex-wrap: wrap; gap: 8px; padding: 14px 14px 12px; } .tab { flex: 1 1 auto; text-align: center; padding: 10px 12px; } .panel-body { padding: 16px; scrollbar-width: thin; } .hero-card, .stat-card, .progress-wrap, .info-box, .list-item, .report-card { box-shadow: 0 10px 26px rgba(15, 23, 42, .06); } .hero-card { padding: 18px; } .hero-card h2 { font-size: 22px; } .stats.stats-wide { grid-template-columns: repeat(2, minmax(0, 1fr)); } .stat-card { min-height: 90px; padding: 15px; } .stat-card span { font-size: 28px; } .section-title { margin-top: 22px; } input, select, textarea { min-height: 44px; } textarea { line-height: 1.5; } .btn { min-height: 46px; } .quick-actions, .report-grid { margin-top: 10px; } .list-box { max-height: 360px; overflow-y: auto; padding-right: 2px; } .list-title-row { gap: 10px; } .item-actions { display: flex; flex-wrap: wrap; } .badge, .mini-btn, .popup-btn { white-space: nowrap; } .map-toolbar { flex-wrap: wrap; max-width: calc(100vw - 520px); } .legend { line-height: 1.9; } .leaflet-popup-content-wrapper { border-radius: 18px; } .leaflet-popup-content { line-height: 1.55; } /* Authentication pages */ .login-page { min-height: 100vh; overflow-y: auto; display: grid; place-items: center; padding: 32px 18px; background: radial-gradient(circle at 18% 12%, rgba(15,76,129,.16), transparent 30%), radial-gradient(circle at 82% 18%, rgba(13,148,136,.15), transparent 30%), linear-gradient(180deg, #f8fbff 0%, #eef7ff 100%); } .login-card { width: min(100%, 430px); background: rgba(255,255,255,.94); backdrop-filter: blur(18px); border: 1px solid rgba(219,228,239,.94); } .login-card.register-card { width: min(100%, 880px); max-width: 880px; display: grid; grid-template-columns: .78fr 1.22fr; gap: 24px; align-items: start; } .login-card.register-card > .brand-badge, .login-card.register-card > h1, .login-card.register-card > p, .login-card.register-card > .login-back, .login-card.register-card > .alert, .login-card.register-card > .auth-switch { grid-column: 1 / -1; } .login-card.register-card form { grid-column: 1 / -1; display: grid; grid-template-columns: 1fr 1fr; gap: 0 16px; } .login-card.register-card form > label, .login-card.register-card form > input, .login-card.register-card form > select, .login-card.register-card form > textarea, .login-card.register-card form > .info-box, .login-card.register-card form > .role-extra, .login-card.register-card form > .btn { grid-column: span 1; } .login-card.register-card form > .info-box, .login-card.register-card form > .role-extra, .login-card.register-card form > .btn { grid-column: 1 / -1; } .small-note { font-size: 12px; padding: 12px 13px; } .auth-switch a, .login-back { color: var(--primary); font-weight: 900; } @media (max-width: 980px) { .app-shell { width: calc(100vw - 28px); left: 14px; top: auto; bottom: 14px; max-height: 68vh; border-radius: 26px; } body.panel-collapsed .app-shell { transform: translateY(calc(100% + 28px)); } .panel-open { top: auto; bottom: 20px; left: 18px; } .map-toolbar { top: 14px; left: 14px; right: auto; max-width: calc(100vw - 28px); } .legend { display: none; } .tabs { flex-wrap: nowrap; } .tab { flex: 0 0 auto; } } @media (max-width: 640px) { .brand-panel { grid-template-columns: 44px 1fr auto; } .brand-logo { width: 44px; height: 44px; } .brand-panel .logout { display: none; } .panel-toggle { display: block; } .stats.stats-wide, .two-col, .quick-actions, .report-grid { grid-template-columns: 1fr; } .login-card.register-card, .login-card.register-card form { display: block; } .login-card { padding: 26px; border-radius: 24px; } .map-toolbar .tool-btn { padding: 9px 11px; } } .role-select-hidden { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; } .role-picker { grid-column: 1 / -1; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin: 8px 0 12px; } .role-card-option { text-align: left; border: 1px solid #dbe4ef; background: #ffffff; border-radius: 18px; padding: 14px; cursor: pointer; transition: .18s ease; min-height: 94px; } .role-card-option b, .role-card-option span { display: block; } .role-card-option b { color: #0f172a; font-size: 14px; margin-bottom: 6px; } .role-card-option span { color: #64748b; font-size: 12px; line-height: 1.4; } .role-card-option:hover, .role-card-option.active { border-color: var(--primary); background: #eff6ff; box-shadow: 0 10px 24px rgba(15, 76, 129, .11); } .role-card-option.active b { color: var(--primary); } @media (max-width: 640px) { .role-picker { grid-template-columns: 1fr; } } /* ========================================================= UI/UX refinement: clearer onboarding, softer spacing, final look ========================================================= */ :root { --surface: rgba(255, 255, 255, 0.94); --surface-solid: #ffffff; --ink: #0f172a; --soft-shadow: 0 18px 50px rgba(15, 23, 42, 0.16); } body { font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; color: var(--ink); } .app-shell { width: min(450px, calc(100vw - 28px)); border-radius: 28px; background: var(--surface); backdrop-filter: blur(18px); box-shadow: var(--soft-shadow); border: 1px solid rgba(226, 232, 240, 0.88); } .brand-panel { align-items: center; gap: 11px; padding: 17px 18px; background: linear-gradient(135deg, #0b3f6d, #0f72a8 58%, #0e7490); } .brand-logo { box-shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 12px 24px rgba(0,0,0,.12); } .panel-toggle, .logout, .help-button { height: 34px; border: 0; border-radius: 999px; font-weight: 800; } .help-button { margin-left: auto; padding: 0 12px; background: rgba(255,255,255,.18); color: #fff; cursor: pointer; } .logout { align-self: center; background: rgba(255,255,255,.13); } .user-box { display: grid; gap: 8px; margin: 14px 16px 0; padding: 14px; border-radius: 20px; background: linear-gradient(180deg, #ffffff, #f8fafc); } .user-box p { margin: 0; font-size: 12px; color: var(--muted); line-height: 1.45; } .role-chip { width: max-content; max-width: 100%; padding: 5px 9px; border-radius: 999px; background: #e0f2fe; color: #075985 !important; font-size: 11px !important; font-weight: 850; } .quick-guide-card { display: flex; align-items: center; gap: 12px; margin: 12px 16px 0; padding: 13px; border: 1px solid #dbeafe; border-radius: 20px; background: #eff6ff; } .quick-guide-card div { min-width: 0; flex: 1; } .quick-guide-card small, .quick-guide-card span, .quick-guide-card b { display: block; } .quick-guide-card small { color: #2563eb; font-weight: 900; font-size: 10px; text-transform: uppercase; letter-spacing: .45px; } .quick-guide-card b { margin-top: 3px; font-size: 13px; color: #172554; } .quick-guide-card span { margin-top: 4px; color: #475569; line-height: 1.38; font-size: 12px; } .quick-guide-card button { width: auto; flex: 0 0 auto; border: 0; border-radius: 14px; padding: 10px 12px; background: #0f4c81; color: white; font-weight: 900; cursor: pointer; } .tabs { padding: 14px 16px 12px; gap: 9px; scrollbar-width: thin; } .tab { padding: 10px 14px; border-color: #e2e8f0; background: #f8fafc; } .panel-body { padding: 16px; } .dashboard-hero { padding: 18px; border-radius: 24px; overflow: hidden; position: relative; } .dashboard-hero::after { content: ''; position: absolute; width: 170px; height: 170px; right: -70px; top: -70px; border-radius: 999px; background: rgba(255,255,255,.15); } .hero-actions { display: flex; gap: 9px; flex-wrap: wrap; margin-top: 15px; position: relative; z-index: 1; } .hero-btn { width: auto; margin: 0; padding: 10px 13px; border-radius: 999px; background: #fff; color: #0f4c81; border: 0; } .hero-btn.ghost { background: rgba(255,255,255,.18); color: white; border: 1px solid rgba(255,255,255,.24); } .guide-stepper { display: grid; gap: 10px; margin: 14px 0 12px; } .guide-step { display: grid; grid-template-columns: 34px 1fr; column-gap: 10px; padding: 12px; border: 1px solid #e2e8f0; border-radius: 18px; background: #fff; } .guide-step i { grid-row: span 2; width: 34px; height: 34px; display: grid; place-items: center; border-radius: 12px; background: #e0f2fe; color: #0369a1; font-style: normal; font-weight: 950; } .guide-step b { color: #0f172a; font-size: 13px; } .guide-step span { margin-top: 3px; color: #64748b; font-size: 12px; line-height: 1.42; } .tab-intro { display: grid; gap: 5px; padding: 15px; border-radius: 20px; background: linear-gradient(180deg, #ffffff, #f8fafc); border: 1px solid #e2e8f0; margin-bottom: 14px; } .tab-intro b { font-size: 16px; color: #0f172a; } .tab-intro span { font-size: 12.5px; line-height: 1.55; color: #64748b; } .mini-step-list { display: grid; gap: 8px; margin-bottom: 14px; } .mini-step-list span { display: flex; align-items: center; gap: 9px; padding: 10px 11px; border-radius: 15px; background: #f8fafc; border: 1px solid #e2e8f0; color: #475569; font-size: 12px; } .mini-step-list b { width: 22px; height: 22px; display: grid; place-items: center; border-radius: 999px; background: #0f4c81; color: white; font-size: 11px; } .stats-wide { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 11px; } .stat-card { border-radius: 20px; padding: 14px; background: #fff; border: 1px solid #e2e8f0; box-shadow: 0 10px 24px rgba(15, 23, 42, .05); } .stat-card span { font-size: 24px; letter-spacing: -.5px; } .progress-wrap, .info-box, .report-card, .list-item, .empty-state { border-radius: 18px; } input, select, textarea { border-radius: 14px; min-height: 42px; border: 1px solid #dbe3ee; background: #fff; } textarea { min-height: 84px; } label { margin-top: 12px; margin-bottom: 6px; font-weight: 850; color: #334155; } .btn { border-radius: 15px; min-height: 43px; } .quick-actions { gap: 9px; } .list-box { display: grid; gap: 10px; } .list-item { padding: 13px; background: #fff; border: 1px solid #e2e8f0; box-shadow: 0 8px 20px rgba(15, 23, 42, .045); } .list-item:hover { transform: translateY(-1px); border-color: #bfdbfe; box-shadow: 0 14px 28px rgba(15, 23, 42, .08); } .list-item span { line-height: 1.45; } .item-actions { gap: 7px; } .mini-btn { border-radius: 999px; padding: 7px 10px; } .empty-state { display: grid; place-items: center; text-align: center; gap: 7px; min-height: 150px; padding: 20px; background: #f8fafc; border: 1px dashed #cbd5e1; color: #64748b; } .empty-state b { color: #334155; font-size: 14px; } .empty-state span { font-size: 12.5px; line-height: 1.45; } .empty-icon { width: 42px; height: 42px; display: grid; place-items: center; border-radius: 16px; background: #e0f2fe; color: #0369a1; font-size: 20px; font-weight: 900; } .map-toolbar { right: 18px; top: 18px; padding: 8px; border-radius: 999px; background: rgba(255,255,255,.94); backdrop-filter: blur(14px); box-shadow: 0 12px 36px rgba(15,23,42,.13); } .tool-btn { border-radius: 999px; padding: 9px 12px; } .legend { right: 18px; bottom: 18px; border-radius: 20px; background: rgba(255,255,255,.94); backdrop-filter: blur(14px); box-shadow: 0 12px 36px rgba(15,23,42,.13); line-height: 1.9; } .map-helper { position: absolute; left: 482px; bottom: 18px; max-width: 360px; z-index: 900; display: grid; gap: 4px; padding: 12px 14px; border-radius: 20px; background: rgba(15, 23, 42, .82); color: white; box-shadow: 0 12px 36px rgba(15,23,42,.18); backdrop-filter: blur(14px); } .map-helper b { font-size: 12px; } .map-helper span { color: rgba(255,255,255,.82); font-size: 12px; line-height: 1.45; } .panel-collapsed .map-helper { left: 18px; } .panel-open { border-radius: 999px; padding: 11px 14px; box-shadow: 0 12px 36px rgba(15,23,42,.16); } .guide-modal { position: fixed; inset: 0; display: none; z-index: 4000; } .guide-modal.show { display: block; } .guide-backdrop { position: absolute; inset: 0; background: rgba(15, 23, 42, .42); backdrop-filter: blur(5px); } .guide-dialog { position: absolute; left: 50%; top: 50%; width: min(520px, calc(100vw - 32px)); transform: translate(-50%, -50%); padding: 24px; border-radius: 30px; background: white; box-shadow: 0 30px 80px rgba(15, 23, 42, .28); } .guide-close { position: absolute; right: 16px; top: 16px; width: 34px; height: 34px; border: 0; border-radius: 999px; background: #f1f5f9; color: #334155; font-size: 22px; line-height: 1; cursor: pointer; } .guide-dialog small { color: #2563eb; font-size: 11px; font-weight: 950; text-transform: uppercase; letter-spacing: .5px; } .guide-dialog h2 { margin-top: 6px; font-size: 24px; line-height: 1.15; } .guide-dialog p { margin-top: 8px; color: #64748b; line-height: 1.55; } .guide-list { display: grid; gap: 10px; margin-top: 16px; } .guide-modal-step { display: grid; grid-template-columns: 38px 1fr; gap: 12px; align-items: flex-start; padding: 12px; border-radius: 18px; border: 1px solid #e2e8f0; background: #f8fafc; } .guide-modal-step i { width: 38px; height: 38px; display: grid; place-items: center; border-radius: 14px; background: #0f4c81; color: white; font-style: normal; font-weight: 950; } .guide-modal-step b, .guide-modal-step span { display: block; } .guide-modal-step b { font-size: 14px; } .guide-modal-step span { margin-top: 4px; font-size: 12.5px; color: #64748b; line-height: 1.45; } .guide-dialog-actions { display: flex; gap: 10px; margin-top: 18px; } .guide-dialog-actions .btn { margin: 0; } /* Landing/auth polishing */ .landing-nav, .login-card { box-shadow: 0 18px 48px rgba(15, 23, 42, .10); } .feature-card, .access-card, .flow-card, .login-card { border-radius: 26px; } .login-page { background: radial-gradient(circle at 15% 10%, rgba(14, 165, 233, .18), transparent 32%), radial-gradient(circle at 88% 12%, rgba(34, 197, 94, .14), transparent 34%), linear-gradient(180deg, #f8fafc, #eff6ff); } .register-card { width: min(620px, calc(100vw - 28px)); } .role-picker { gap: 10px; } .role-card-option { border-radius: 20px; padding: 14px; } @media (max-width: 960px) { .app-shell { width: calc(100vw - 22px); max-height: 62vh; border-radius: 24px; } .map-toolbar { top: auto; right: 12px; bottom: 92px; border-radius: 22px; flex-wrap: wrap; justify-content: flex-end; max-width: calc(100vw - 24px); } .legend { display: none; } .map-helper { left: 12px; right: 12px; bottom: 12px; max-width: none; } .panel-collapsed .map-helper { left: 12px; } .guide-dialog { padding: 20px; border-radius: 26px; } } @media (max-width: 560px) { .brand-panel { padding: 14px; } .brand-panel h1 { font-size: 18px; } .help-button { display: none; } .quick-guide-card { align-items: stretch; flex-direction: column; } .quick-guide-card button { width: 100%; } .stats-wide { grid-template-columns: 1fr; } .two-col { grid-template-columns: 1fr; } .guide-dialog-actions { flex-direction: column; } } /* Penyempurnaan catatan UX: pemilihan lokasi, anggota KK, musibah, dan pemberdayaan */ .register-card-wide { max-width: 760px; } .location-picker-box { margin-top: 14px; padding: 14px; border: 1px solid #dbeafe; background: #f8fbff; border-radius: 18px; } .location-search-row { display: grid; grid-template-columns: 1fr 96px; gap: 8px; align-items: end; } .location-search-row .btn { margin-top: 0; height: 44px; } .register-map { height: 260px; border-radius: 16px; overflow: hidden; margin: 10px 0; border: 1px solid #dbeafe; background: #eff6ff; } .selected-location-text { font-size: 12px; color: #475569; background: #ffffff; border: 1px dashed #93c5fd; border-radius: 12px; padding: 9px 10px; margin-bottom: 8px; } .anggota-container { display: grid; gap: 12px; margin-bottom: 10px; } .anggota-card { padding: 12px; border: 1px solid #e2e8f0; border-radius: 18px; background: #ffffff; box-shadow: 0 10px 28px rgba(15, 23, 42, 0.05); } .anggota-card label { margin-top: 10px; } .anggota-title { margin-bottom: 4px; } .member-details { margin-top: 8px; padding: 8px 10px; border-radius: 12px; background: #f8fafc; border: 1px solid #e2e8f0; } .member-details summary { cursor: pointer; font-weight: 700; color: #0f4c81; font-size: 12px; } .member-row-mini { display: grid; gap: 2px; padding: 8px 0; border-top: 1px solid #e2e8f0; } .member-row-mini:first-of-type { border-top: 0; } .member-row-mini b { font-size: 12px; } .member-row-mini span { font-size: 12px; color: #64748b; } .danger-card span, .hero-btn.danger { color: #b91c1c; } .hero-btn.danger { background: #fee2e2; border-color: #fecaca; } .badge-blue { background: #dbeafe; color: #1d4ed8; } @media (max-width: 720px) { .location-search-row { grid-template-columns: 1fr; } .register-map { height: 220px; } }