@tailwind base; @tailwind components; @tailwind utilities; /* Fonts Setup */ @font-face { font-family: 'Geist'; src: url('/assets/fonts/Geist-Regular.woff2') format('woff2'); font-weight: 400; font-style: normal; } @font-face { font-family: 'Geist'; src: url('/assets/fonts/Geist-Bold.woff2') format('woff2'); font-weight: 700; font-style: normal; } @font-face { font-family: 'Geist Mono'; src: url('/assets/fonts/GeistMono-Regular.woff2') format('woff2'); font-weight: 400; font-style: normal; } :root { /* Fonts */ --vp-font-family-base: "Geist", sans-serif; --vp-font-family-mono: "Geist Mono", monospace; /* Colors Override to match MIVO */ --vp-c-bg: #ffffff; --vp-c-bg-alt: #fafafa; --vp-c-bg-elv: #ffffff; --vp-c-text-1: #000000; --vp-c-text-2: #666666; --vp-c-brand-1: #000000; --vp-c-brand-2: #333333; --vp-c-brand-3: #666666; /* Icon Colors - Light */ --mivo-icon-base: var(--vp-c-text-1); --mivo-icon-muted: var(--vp-c-text-2); --mivo-icon-primary: var(--vp-c-brand-1); --mivo-icon-info: #3b82f6; --mivo-icon-success: #22c55e; --mivo-icon-warning: #eab308; --mivo-icon-danger: #ef4444; } .dark { --vp-c-bg: #000000; --vp-c-bg-alt: #111111; --vp-c-bg-elv: #111111; --vp-c-text-1: #ffffff; --vp-c-text-2: #888888; --vp-c-brand-1: #ffffff; --vp-c-brand-2: #eaeaea; --vp-c-brand-3: #999999; /* Icon Colors - Dark */ --mivo-icon-base: var(--vp-c-text-1); --mivo-icon-muted: var(--vp-c-text-2); --mivo-icon-primary: var(--vp-c-brand-1); --mivo-icon-info: #60a5fa; --mivo-icon-success: #4ade80; --mivo-icon-warning: #facc15; --mivo-icon-danger: #f87171; } /* Glassmorphism Overrides */ /* Navbar Glass */ .VPNav { background-color: rgba(255, 255, 255, 0.6) !important; backdrop-filter: blur(12px); border-bottom: 1px solid rgba(0,0,0,0.05); } .dark .VPNav { background-color: rgba(0, 0, 0, 0.6) !important; border-bottom: 1px solid rgba(255,255,255,0.1); } /* Sidebar Glass */ .VPSidebar { background-color: rgba(255, 255, 255, 0.3) !important; backdrop-filter: blur(12px); border-right: 1px solid rgba(0,0,0,0.05); } .dark .VPSidebar { background-color: rgba(0, 0, 0, 0.3) !important; border-right: 1px solid rgba(255,255,255,0.1); } /* Content Container - Transparent to show particles */ .VPContent { background: transparent !important; } /* Footer Glass */ .VPFooter { background-color: transparent !important; border-top: 1px solid rgba(0,0,0,0.05); } .dark .VPFooter { border-top: 1px solid rgba(255,255,255,0.1); } /* Local Search Box Glass */ .VPLocalSearchBox { background-color: rgba(255, 255, 255, 0.8) !important; backdrop-filter: blur(12px); } .dark .VPLocalSearchBox { background-color: rgba(0, 0, 0, 0.8) !important; } /* Glassmorphism Cards (Feature Cards) */ .VPFeature { background-color: rgba(255, 255, 255, 0.25) !important; backdrop-filter: blur(40px); border: 2px solid rgba(255, 255, 255, 0.2) !important; border-radius: 1rem !important; /* rounded-2xl */ transition: all 0.3s ease; } .dark .VPFeature { background-color: rgba(0, 0, 0, 0.4) !important; border-color: rgba(255, 255, 255, 0.1) !important; } .VPFeature:hover { border-color: rgba(255, 255, 255, 0.4) !important; background-color: rgba(255, 255, 255, 0.4) !important; transform: translateY(-4px); box-shadow: 0 10px 30px -10px rgba(0,0,0,0.1); } .dark .VPFeature:hover { border-color: rgba(255, 255, 255, 0.2) !important; background-color: rgba(0, 0, 0, 0.6) !important; } /* Fix text colors inside cards if needed */ /* Global Button Styling (MIVO Style) */ .VPButton { border-radius: 0.375rem !important; /* rounded-md */ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1) !important; font-weight: 500 !important; text-transform: none !important; letter-spacing: normal !important; } .VPButton:hover { transform: translateY(-2px); box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); } .VPButton:active { transform: scale(0.95); } /* Primary Button (Brand) */ .VPButton.brand { background-color: var(--vp-c-brand-1) !important; border-color: var(--vp-c-brand-1) !important; color: var(--vp-c-bg) !important; } .dark .VPButton.brand { color: #000 !important; /* Ensure black text on white button in dark mode */ } /* Secondary Button (Alt) */ .VPButton.alt { background-color: transparent !important; border: 1px solid var(--vp-c-brand-2) !important; color: var(--vp-c-text-1) !important; } /* Mobile Navigation (Glass Overlay) */ .VPNavScreen { background-color: rgba(255, 255, 255, 0.95) !important; backdrop-filter: blur(20px); position: fixed !important; top: var(--vp-nav-height, 64px) !important; bottom: 0 !important; left: 0 !important; right: 0 !important; width: 100% !important; height: calc(100vh - var(--vp-nav-height, 64px)) !important; /* Force Height */ z-index: 90 !important; overflow-y: auto !important; opacity: 1 !important; /* Always opacity 1 if visible */ pointer-events: auto !important; /* Remove transition that might delay visibility */ transition: background-color 0.25s !important; } /* Rely on VitePress/Vue to toggle 'display' property */ /* We just ensure that IF it is displayed, it looks right */ .dark .VPNavScreen { background-color: rgba(0, 0, 0, 0.95) !important; } /* Mobile Sidebar (Slide-out) */ @media (max-width: 960px) { .VPSidebar { background-color: rgba(255, 255, 255, 0.9) !important; /* Less transparent on mobile for readability */ backdrop-filter: blur(20px); border-right: none !important; box-shadow: 10px 0 30px rgba(0,0,0,0.1); } .dark .VPSidebar { background-color: rgba(20, 20, 20, 0.9) !important; } } /* Fix Hamburger Menu Icon Color & Interaction */ .VPNavBarHamburger { cursor: pointer !important; pointer-events: auto !important; z-index: 100 !important; } .VPNavBarHamburger .container .top, .VPNavBarHamburger .container .middle, .VPNavBarHamburger .container .bottom { background-color: var(--vp-c-text-1) !important; } /* Ensure Logo Text is Visible on Mobile */ /* High Contrast Sidebar & TOC */ /* High Contrast Sidebar & TOC */ .VPSidebarItem .text { color: var(--vp-c-text-2) !important; opacity: 1 !important; font-weight: 400 !important; } /* Level 0 Parent Headers (Collapsible) */ .VPSidebarItem.level-0 > .item > .text, .VPSidebarItem.level-0 > .item > .VPLink > .text { color: var(--vp-c-text-1) !important; font-weight: 700 !important; /* Bold for headers */ } /* Level 1+ Sub-items explicitly regular */ .VPSidebarItem.level-1 .text, .VPSidebarItem.level-2 .text { font-weight: 400 !important; } /* Sidebar Lines (GitBook Style) */ .VPSidebarItem.level-0 > .items { border-left: 1px solid rgba(0, 0, 0, 0.05); /* Light vertical line */ margin-left: 1.15rem; padding-left: 0.5rem; } .dark .VPSidebarItem.level-0 > .items { border-left: 1px solid rgba(255, 255, 255, 0.1); } /* Active Sidebar Item Differentiation */ .VPSidebarItem.is-active > .item { border-left: 2px solid var(--vp-c-brand-1); /* Bold indicator line */ margin-left: calc(-0.5rem - 1px); /* Overlap the group line */ padding-left: calc(0.5rem - 1px); } .VPSidebarItem.is-active > .item > .text, .VPSidebarItem.is-active > .item > .VPLink > .text { color: var(--vp-c-brand-1) !important; font-weight: 400 !important; /* Keep active sub-item thinner than collapsible header */ background-color: transparent !important; /* Clean style */ } /* Navbar Active Underline */ .VPNavBarMenuLink.active { color: var(--vp-c-brand-1) !important; position: relative; } .VPNavBarMenuLink.active::after { content: ""; position: absolute; bottom: -4px; left: 0; width: 100%; height: 2px; background-color: var(--vp-c-brand-1); } .VPDocOutlineItem .text { color: var(--vp-c-text-2) !important; font-size: 0.85rem; font-weight: 400 !important; } .VPDocOutlineItem.active .text { color: var(--vp-c-brand-1) !important; font-weight: 600 !important; } /* Dark Mode Specific Contrast Boost */ .dark .VPSidebarItem .text, .dark .VPDocOutlineItem .text { color: #b0b0b0 !important; /* Brighter than default gray */ } .dark .VPSidebarItem.is-active > .item > .text, .dark .VPSidebarItem.is-active > .item > .VPLink > .text, .dark .VPDocOutlineItem.active .text, .dark .VPSidebarItem.level-0 > .item > .text, .dark .VPSidebarItem.level-0 > .item > .VPLink > .text { color: #ffffff !important; /* Font weights are already inherited or set above */ } /* Fix Code Block Background to be Glassy too */ .vp-code-group .tabs { background-color: rgba(255,255,255,0.5) !important; } .dark .vp-code-group .tabs { background-color: rgba(0,0,0,0.5) !important; } /* Markdown Divider Contrast */ .vp-doc hr { border: none; border-top: 1px solid rgba(0, 0, 0, 0.15); /* Stronger in light mode */ margin: 3rem 0; } .dark .vp-doc hr { border-top: 1px solid rgba(255, 255, 255, 0.2); /* Stronger in dark mode */ } /* Pagination Cards */ .pager-link { background-color: rgba(255, 255, 255, 0.4) !important; backdrop-filter: blur(8px); border: 1px solid rgba(0, 0, 0, 0.05) !important; border-radius: 0.75rem !important; /* rounded-xl */ padding: 1.5rem !important; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05); text-decoration: none !important; display: flex !important; flex-direction: column !important; } .dark .pager-link { background-color: rgba(255, 255, 255, 0.03) !important; border-color: rgba(255, 255, 255, 0.1) !important; } .pager-link:hover { border-color: var(--vp-c-brand-1) !important; transform: translateY(-4px); box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); background-color: rgba(255, 255, 255, 0.6) !important; } .dark .pager-link:hover { background-color: rgba(255, 255, 255, 0.08) !important; } .pager-link .desc { color: var(--vp-c-text-2) !important; font-size: 0.8rem !important; font-weight: 500 !important; margin-bottom: 4px !important; display: block !important; } .pager-link .title { color: var(--vp-c-brand-1) !important; font-size: 1.1rem !important; font-weight: 700 !important; } .pager-link.next { text-align: right !important; align-items: flex-end !important; } /* Language Switcher Flags Integration */ .VPNavBarTranslations .items .title::before, .VPNavBarTranslations .items .VPMenuLink .VPLink.link span::before { content: ""; display: inline-block; width: 1.33333333em; height: 1em; margin-right: 0.6rem; vertical-align: middle; background-size: contain; background-repeat: no-repeat; background-position: center; } /* --- English Flag (US) --- */ /* 1. Target the link to English (Any link NOT starting with /id/) */ .VPNavBarTranslations a:not([href^="/id/"])::before, .VPNavBarTranslations a:not([href^="/id/"]) span::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 480'%3E%3Cpath fill='%23bd3d44' d='M0 0h640v480H0z'/%3E%3Cpath stroke='%23fff' stroke-width='37' d='M0 74h640M0 148h640M0 222h640M0 296h640M0 370h640M0 444h640'/%3E%3Cpath fill='%23192f5d' d='M0 0h364v258.5H0z'/%3E%3Cg fill='%23fff'%3E%3Cg id='a'%3E%3Cg id='b'%3E%3Cpath id='c' d='M31 23l5 15.5-13.1-9.5H44l-13.1 9.5'/%3E%3Cuse href='%23c' x='62'/%3E%3Cuse href='%23c' x='124'/%3E%3Cuse href='%23c' x='186'/%3E%3Cuse href='%23c' x='248'/%3E%3C/g%3E%3Cuse href='%23b' x='31' y='21'/%3E%3C/g%3E%3Cuse href='%23a' y='42'/%3E%3Cuse href='%23a' y='84'/%3E%3Cuse href='%23a' y='126'/%3E%3Cuse href='%23a' y='168'/%3E%3C/g%3E%3C/svg%3E"); } /* 2. Target the active English title (when on /) */ html[lang="en"] .VPNavBarTranslations .items .title::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 480'%3E%3Cpath fill='%23bd3d44' d='M0 0h640v480H0z'/%3E%3Cpath stroke='%23fff' stroke-width='37' d='M0 74h640M0 148h640M0 222h640M0 296h640M0 370h640M0 444h640'/%3E%3Cpath fill='%23192f5d' d='M0 0h364v258.5H0z'/%3E%3Cg fill='%23fff'%3E%3Cg id='a'%3E%3Cg id='b'%3E%3Cpath id='c' d='M31 23l5 15.5-13.1-9.5H44l-13.1 9.5'/%3E%3Cuse href='%23c' x='62'/%3E%3Cuse href='%23c' x='124'/%3E%3Cuse href='%23c' x='186'/%3E%3Cuse href='%23c' x='248'/%3E%3C/g%3E%3Cuse href='%23b' x='31' y='21'/%3E%3C/g%3E%3Cuse href='%23a' y='42'/%3E%3Cuse href='%23a' y='84'/%3E%3Cuse href='%23a' y='126'/%3E%3Cuse href='%23a' y='168'/%3E%3C/g%3E%3C/svg%3E"); } /* --- Indonesia Flag (ID) --- */ /* 1. Target the link to Indonesia (Any link starting with /id/) */ .VPNavBarTranslations a[href^="/id/"]::before, .VPNavBarTranslations a[href^="/id/"] span::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 480'%3E%3Cpath fill='%23e12127' d='M0 0h640v240H0z'/%3E%3Cpath fill='%23fff' d='M0 240h640v240H0z'/%3E%3C/svg%3E"); } /* 2. Target the active Indonesia title (when on /id/) */ html[lang="id"] .VPNavBarTranslations .items .title::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 480'%3E%3Cpath fill='%23e12127' d='M0 0h640v240H0z'/%3E%3Cpath fill='%23fff' d='M0 240h640v240H0z'/%3E%3C/svg%3E"); }