:root { --primary: #0B4D91; --secondary: #FFFFFF; --accent: #D71920; --gold: #F4B942; --dark: #102033; --muted: #6B7280; --green: #16A34A; --surface: #F6F8FC; --ink: #102033; --blue: #0B4D91; --red: #D71920; --shadow: 0 18px 45px rgba(16, 32, 51, .09); --inset: inset 2px 2px 6px rgba(16, 32, 51, .08), inset -2px -2px 6px #fff; } * { box-sizing: border-box; } html { scroll-behavior: smooth; scroll-padding-top: 90px; } body { margin: 0; min-height: 100vh; background: var(--surface); color: var(--dark); font-family: Inter, system-ui, sans-serif; } a { color: var(--primary); text-decoration: none; } button, input, textarea, select { font: inherit; } img { max-width: 100%; } .page { width: min(1160px, calc(100% - 32px)); margin: 0 auto; padding: 64px 0 100px; } .navbar.is-scrolled { padding-top: 12px !important; padding-bottom: 12px !important; box-shadow: 0 10px 30px rgba(16, 32, 51, .09) !important; } .badge { display: inline-flex; align-items: center; padding: 7px 12px; border-radius: 999px; background: rgba(11, 77, 145, .08); color: var(--primary); font-size: .76rem; font-weight: 800; text-transform: uppercase; letter-spacing: .08em; } .m-button { display: inline-flex; align-items: center; justify-content: center; gap: 8px; border: 0; border-radius: 12px; padding: 12px 18px; cursor: pointer; font-weight: 750; color: var(--dark); background: #fff; box-shadow: 0 7px 18px rgba(16, 32, 51, .08); transition: transform .25s ease, box-shadow .25s ease, background .25s ease; } .m-button:hover { transform: translateY(-3px); box-shadow: 0 12px 28px rgba(16, 32, 51, .13); } .m-button.primary { color: #fff; background: linear-gradient(135deg, var(--primary), var(--dark)); } .m-button.danger { color: #fff; background: var(--accent); } .m-button.full { width: 100%; } .m-card { background: rgba(255, 255, 255, .9); border: 1px solid rgba(11, 77, 145, .08); box-shadow: var(--shadow); } .m-card:hover { box-shadow: 0 22px 50px rgba(16, 32, 51, .12); } .field { display: grid; gap: 7px; color: var(--dark); font-weight: 700; font-size: .85rem; } .field input, .field textarea, .field select { width: 100%; border: 1px solid rgba(11, 77, 145, .16); outline: 0; border-radius: 12px; background: #fff; padding: 13px 14px; color: var(--dark); } .field input:focus, .field textarea:focus, .field select:focus { border-color: var(--primary); box-shadow: 0 0 0 4px rgba(11, 77, 145, .09); } .check { display: flex; gap: 8px; color: var(--muted); } .alert { padding: 12px 14px; border-radius: 12px; } .alert.danger { background: rgba(215, 25, 32, .1); color: var(--accent); } .auth-shell { min-height: 72vh; display: grid; place-items: center; padding: 40px 20px; } .auth-card { width: min(460px, 100%); display: grid; gap: 18px; padding: 32px; border-radius: 24px; } .auth-card h1 { margin: 0; font-size: 2.2rem; letter-spacing: -.04em; } .auth-card p { margin: 0; color: var(--muted); } .dashboard-head { margin-bottom: 30px; } .dashboard-head h1 { margin: 10px 0 6px; font-family: Outfit, sans-serif; font-size: clamp(2rem, 4vw, 3rem); letter-spacing: -.04em; } .dashboard-head p { margin: 0; color: var(--muted); } .table-wrap { overflow-x: auto; } table { width: 100%; border-collapse: collapse; } th, td { padding: 12px; text-align: left; border-bottom: 1px solid rgba(16, 32, 51, .07); } .fade-in { opacity: 0; transform: translateY(24px); transition: opacity .7s ease, transform .7s ease; } .fade-in.is-visible { opacity: 1; transform: translateY(0); } .program-card:hover .program-icon-wrap { background: var(--primary) !important; color: #fff !important; transform: translateY(-4px) rotate(-4deg); } .program-card:hover > div:first-child { opacity: 1 !important; } .repository-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 24px; } .repository-card { position: relative; display: flex; flex-direction: column; justify-content: space-between; min-height: 285px; padding: 26px; overflow: hidden; border: 1px solid rgba(11, 77, 145, .1); border-radius: 20px; background: linear-gradient(155deg, #fff 0%, #f8fbff 100%); box-shadow: 0 10px 30px rgba(16, 32, 51, .06); transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; } .repository-card:hover { transform: translateY(-7px); border-color: rgba(11, 77, 145, .24); box-shadow: 0 22px 46px rgba(16, 32, 51, .13); } .repository-card-accent { position: absolute; inset: 0 0 auto; height: 4px; background: linear-gradient(90deg, var(--primary), var(--gold), var(--accent)); transform: scaleX(.35); transform-origin: left; transition: transform .3s ease; } .repository-card:hover .repository-card-accent { transform: scaleX(1); } .repository-card-content { position: relative; z-index: 1; } .repository-card-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 22px; } .repository-icon-wrap { display: grid; place-items: center; width: 58px; height: 58px; flex: 0 0 auto; border-radius: 16px; color: var(--primary); font-size: 1.55rem; background: linear-gradient(145deg, rgba(11,77,145,.12), rgba(244,185,66,.14)); transition: transform .3s ease, color .3s ease, background .3s ease; } .repository-card:hover .repository-icon-wrap { color: #fff; background: linear-gradient(135deg, var(--primary), var(--dark)); transform: rotate(-5deg) scale(1.05); } .repository-status { display: inline-flex; align-items: center; gap: 6px; padding: 5px 9px; border: 1px solid rgba(22,163,74,.14); border-radius: 999px; color: #15803d; background: rgba(22,163,74,.07); font-size: .65rem; font-weight: 800; text-transform: uppercase; letter-spacing: .05em; } .repository-status i { font-size: .42rem; } .repository-card h3 { margin: 0 0 10px; color: var(--dark); font-family: Outfit, sans-serif; font-size: 1.2rem; line-height: 1.35; } .repository-card p { margin: 0 0 24px; color: var(--muted); font-size: .9rem; line-height: 1.65; } .repository-card-link { position: relative; z-index: 1; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding-top: 16px; border-top: 1px solid rgba(11,77,145,.09); color: var(--primary); font-size: .88rem; font-weight: 800; } .repository-link-icon { display: grid; place-items: center; width: 34px; height: 34px; border-radius: 10px; color: var(--primary); background: rgba(11,77,145,.08); transition: transform .25s ease, background .25s ease, color .25s ease; } .repository-card:hover .repository-link-icon { color: #fff; background: var(--primary); transform: translate(2px, -2px); } .repository-card-link:focus-visible { outline: 3px solid rgba(244,185,66,.75); outline-offset: 5px; border-radius: 4px; } .public-hero-section { background-image: linear-gradient(135deg, rgba(255, 255, 255, 0.48), rgba(255, 255, 255, 0.30)), linear-gradient(180deg, rgba(16, 32, 51, 0.10), rgba(16, 32, 51, 0.04)), url('/assets/images/hero/gambar-gedung%20sate.jpg'); background-size: cover; background-position: center; background-repeat: no-repeat; padding: 70px 24px 60px; text-align: center; border-bottom: 1px solid rgba(11, 77, 145, 0.06); position: relative; overflow: hidden; } .public-hero-section h1, .public-hero-section h2, .public-hero-section p { position: relative; z-index: 1; } .public-hero-section .badge { position: relative; z-index: 1; } .public-hero-section::after { content: ''; position: absolute; inset: 0; background: linear-gradient(180deg, transparent 0%, rgba(255, 255, 255, 0.06) 100%); pointer-events: none; } .schedule-heading .section-title { color: #fff !important; text-shadow: 0 3px 16px rgba(0,0,0,.3); } .schedule-image-section .schedule-heading .section-subtitle { color: #fff !important; text-shadow: 0 2px 12px rgba(0,0,0,.38); } .schedule-image-section .schedule-heading .badge { color: #102033 !important; background: #F4B942 !important; border: 1px solid rgba(255,255,255,.42) !important; box-shadow: 0 6px 18px rgba(0,0,0,.18); } .schedule-image-section .timeline-card:hover { transform: translateY(-5px); background: rgba(255,255,255,.96) !important; box-shadow: 0 18px 40px rgba(0,0,0,.24) !important; } .timeline-image-section { box-shadow: 0 22px 60px rgba(16, 32, 51, 0.10); } .contact-form input:focus, .contact-form textarea:focus { background: #fff !important; } .toast, .install-banner { position: fixed; z-index: 9999; bottom: 22px; right: 22px; padding: 16px; border-radius: 16px; background: var(--dark); color: #fff; box-shadow: var(--shadow); } .toast:empty { display: none; } .install-banner { left: 22px; right: auto; } .install-banner[hidden] { display: none !important; } @media (max-width: 1050px) { .nav-menu-list { gap: 14px !important; font-size: .86rem !important; } .nav-links-wrapper { gap: 16px !important; } .repository-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 800px) { .page { padding-top: 36px; } .admin-sidebar { position: fixed !important; z-index: 1000; width: 76px !important; padding: 24px 10px !important; } .admin-sidebar span, .admin-sidebar nav a:not(.active) { font-size: 0 !important; } .admin-sidebar a, .admin-sidebar button { justify-content: center; } .admin-sidebar + div { margin-left: 76px; min-width: 0; } .admin-sidebar + div main { padding: 24px 16px !important; } .admin-sidebar img { width: 52px !important; height: 36px !important; } .admin-sidebar > div > div:first-child { padding-left: 0 !important; padding-right: 0 !important; justify-content: center; } .timer-grid { gap: 8px !important; } .timer-num { font-size: 1.65rem !important; } .contact-form { padding: 24px !important; } .responsive-grid { grid-template-columns: 1fr !important; } .repository-grid { grid-template-columns: 1fr; } .repository-card { min-height: 0; } .schedule-image-section { margin-left: -12px !important; margin-right: -12px !important; padding: 70px 18px !important; background-attachment: scroll !important; border-radius: 22px !important; } .timeline-image-section { margin-left: -12px !important; margin-right: -12px !important; padding: 54px 14px 72px !important; border-radius: 22px !important; } } @media (max-width: 560px) { .hero-section { min-height: auto !important; } .timer-grid { grid-template-columns: repeat(2, 1fr) !important; } .install-banner { left: 12px; right: 12px; bottom: 12px; } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { scroll-behavior: auto !important; transition-duration: .01ms !important; animation-duration: .01ms !important; } .fade-in { opacity: 1; transform: none; } } 