:root { --bg-color: #ffffff; --text-color: #2c3e50; --text-color-light: #6b7280; --text-color-medium: #4b5563; --text-color-dark: #374151; --bg-gray-50: #f9fafb; --bg-gray-100: #f3f4f6; --border-color: #d1d5db; --icon-color-list: #4b5563; --btn-primary-bg: #000000; --btn-primary-text: #ffffff; --btn-primary-hover: #374151; --btn-secondary-border: #000000; --btn-secondary-text: #000000; --btn-secondary-hover-bg: #000000; --btn-secondary-hover-text: #ffffff; --thank-you-bg: #f8fafc; --thank-you-border: #e2e8f0; --thank-you-text: #475569; --thank-you-hover-bg: #f0f9ff; --thank-you-hover-text: #0369a1; --shadow-color: rgba(0, 0, 0, 0.1); --shadow-hover-color: rgba(0, 0, 0, 0.15); --shadow-sm: 0 1px 2px 0 var(--shadow-color); --accent-color-light: #3b82f6; --accent-color-dark: #60a5fa; --music-yellow: #facc15; --theme-shadow-light: rgba(100, 116, 139, 0.4); --theme-shadow-dark: rgba(148, 163, 184, 0.4); --sidebar-bg: #f9fafb; /* Warna sidebar mode terang (tetap) */ --sidebar-text: #374151; --sidebar-hover-bg: #e5e7eb; --sidebar-pages-text: #6b7280; --sidebar-border-color: #e5e7eb; --yt-player-bg: #ffffff; --yt-player-border: #e5e7eb; --yt-input-bg: #f9fafb; --yt-input-border: #d1d5db; --yt-button-bg: #007bff; /* Primary Blue */ --yt-button-hover: #0056b3; --yt-download-bg: #28a745; /* Green */ --yt-download-hover: #218838; --yt-text: #374151; --yt-text-light: #6b7280; --yt-skip-active-bg: #ffc107; /* Warna kuning (Bootstrap warning) sebagai contoh */ --yt-skip-active-text: #212529; /* Teks gelap agar kontras dengan kuning */ --yt-skip-active-hover-bg: #e0a800; --ai-chat-section-bg: var(--bg-gray-50); /* Latar belakang section AI Chat */ --ai-chat-header-bg: var(--accent-color-light); --ai-chat-header-text: #ffffff; --ai-chat-output-bg: var(--bg-color); --ai-chat-output-border: var(--border-color); --ai-chat-user-msg-bg: var(--accent-color-light); --ai-chat-user-msg-text: #ffffff; --ai-chat-ai-msg-bg: var(--bg-gray-100); --ai-chat-ai-msg-text: var(--text-color); --ai-chat-error-msg-bg: #ffebee; /* Light red for errors */ --ai-chat-error-msg-text: #c62828; --ai-chat-info-msg-bg: var(--bg-gray-200, #e0e0e0); /* Fallback jika --bg-gray-200 tidak ada */ --ai-chat-info-msg-text: var(--text-color-medium, #555); --ai-chat-input-area-bg: var(--bg-gray-100); --ai-chat-input-bg: var(--bg-color); --ai-chat-input-border: var(--border-color); --ai-chat-input-focus-border: var(--accent-color-light); --ai-chat-input-focus-shadow: rgba(59, 130, 246, 0.25); /* Sesuai --accent-color-light */ --ai-chat-send-button-bg: var(--btn-primary-bg); --ai-chat-send-button-text: var(--btn-primary-text); --ai-chat-send-button-hover-bg: var(--btn-primary-hover); --ai-chat-typing-dot-color: var(--text-color-light); --downloader-type-active-bg: var(--accent-color-light); --downloader-type-active-text: white; --downloader-type-hover-bg: var(--bg-gray-200); --downloader-process-bg: #28a745; /* Hijau untuk tombol Proses */ --downloader-process-hover: #218838; --downloader-link-bg: var(--accent-color-light); /* Warna link download */ --downloader-link-hover: var(--accent-color-dark); } html.dark { --bg-color: #111827; --text-color: #e5e7eb; --text-color-light: #9ca3af; --text-color-medium: #d1d5db; --text-color-dark: #e5e7eb; --bg-gray-50: #1f2937; --bg-gray-100: #374151; --border-color: #4a5568; --icon-color-list: #93c5fd; --btn-primary-bg: #ffffff; --btn-primary-text: #000000; --btn-primary-hover: #e5e7eb; --btn-secondary-border: #ffffff; --btn-secondary-text: #ffffff; --btn-secondary-hover-bg: #ffffff; --btn-secondary-hover-text: #000000; --thank-you-bg: #1e293b; --thank-you-border: #334155; --thank-you-text: #94a3b8; --thank-you-hover-bg: #0c4a6e; --thank-you-hover-text: #7dd3fc; --shadow-color: rgba(255, 255, 255, 0.05); --shadow-hover-color: rgba(255, 255, 255, 0.1); --shadow-sm: 0 1px 2px 0 var(--shadow-color); --sidebar-bg: #181c27; /* <<< WARNA SIDEBAR GELAP DIUBAH DI SINI */ --sidebar-text: #e5e7eb; --sidebar-hover-bg: #374151; --sidebar-pages-text: #9ca3af; --sidebar-border-color: #374151; --yt-player-bg: #1f2937; --yt-player-border: #374151; --yt-input-bg: #374151; --yt-input-border: #4a5568; --yt-button-bg: #3b82f6; /* Lighter Blue for Dark */ --yt-button-hover: #2563eb; --yt-download-bg: #16a34a; /* Lighter Green for Dark */ --yt-download-hover: #15803d; --yt-text: #e5e7eb; --yt-text-light: #9ca3af; --yt-direct-autoplay-bg: #6f42c1; /* Contoh warna ungu */ --yt-skip-active-bg: #ffca2c; /* Kuning sedikit lebih terang untuk dark mode */ --yt-skip-active-text: #212529; --yt-skip-active-hover-bg: #ffda6a; --yt-direct-autoplay-hover: #5a349b; --ai-chat-section-bg: var(--bg-gray-800, #1f2937); /* Fallback jika --bg-gray-800 tidak ada */ --ai-chat-header-bg: var(--accent-color-dark); --ai-chat-header-text: #ffffff; --ai-chat-output-bg: var(--bg-color); --ai-chat-output-border: var(--border-color); --ai-chat-user-msg-bg: var(--accent-color-dark); --ai-chat-user-msg-text: #ffffff; --ai-chat-ai-msg-bg: var(--bg-gray-700, #374151); /* Fallback jika --bg-gray-700 tidak ada */ --ai-chat-ai-msg-text: var(--text-color); --ai-chat-error-msg-bg: #4c1f24; /* Darker red for errors */ --ai-chat-error-msg-text: #ff8a80; --ai-chat-info-msg-bg: var(--bg-gray-600, #4b5563); --ai-chat-info-msg-text: var(--text-color-light, #9ca3af); --ai-chat-input-area-bg: var(--bg-gray-700, #374151); --ai-chat-input-bg: var(--bg-color); --ai-chat-input-border: var(--border-color); --ai-chat-input-focus-border: var(--accent-color-dark); --ai-chat-input-focus-shadow: rgba(96, 165, 250, 0.25); /* Sesuai --accent-color-dark */ --ai-chat-send-button-bg: var(--btn-primary-bg); --ai-chat-send-button-text: var(--btn-primary-text); --ai-chat-send-button-hover-bg: var(--btn-primary-hover); --ai-chat-typing-dot-color: var(--text-color-light); --downloader-type-active-bg: var(--accent-color-dark); --downloader-type-active-text: white; --downloader-type-hover-bg: var(--bg-gray-600, #4b5563); --downloader-process-bg: #16a34a; --downloader-process-hover: #15803d; --downloader-link-bg: var(--accent-color-dark); --downloader-link-hover: var(--accent-color-light); } *, *::before, *::after { transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease, box-shadow 0.15s ease; } body { font-family: 'Poppins', sans-serif; background-color: var(--bg-color); color: var(--text-color); margin: 0; line-height: 1.6; transition: background-color 0.3s ease, color 0.3s ease; overflow-x: hidden; } .dashboard-container { display: flex; min-height: 100vh; } main { flex-grow: 1; } h1, h2, h3, h4, h5, h6, p, span, li, a, button { font-family: 'Poppins', sans-serif; transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease, opacity 0.3s ease, transform 0.3s ease, box-shadow 0.3s ease; } .footer-title-color { color: var(--accent-color-light); transition: color 0.3s ease; /* Tambahkan transisi agar halus saat ganti tema */ } html.dark .footer-title-color { color: var(--accent-color-dark); } h1 { color: var(--text-color); } #typewriter-heading { min-height: 5.5rem; text-align: center; display: block; } .text-gray-500 { color: var(--text-color-light); } .text-gray-600 { color: var(--text-color-medium); } .text-gray-700 { color: var(--text-color-dark); } .shadow-md { box-shadow: 0 4px 6px -1px var(--shadow-color), 0 2px 4px -1px var(--shadow-color); } .shadow-lg { box-shadow: 0 10px 15px -3px var(--shadow-color), 0 4px 6px -2px var(--shadow-color); } .hover\:shadow-md:hover { box-shadow: 0 4px 6px -1px var(--shadow-hover-color), 0 2px 4px -1px var(--shadow-hover-color); } .hover\:shadow-lg:hover { box-shadow: 0 10px 15px -3px var(--shadow-hover-color), 0 4px 6px -2px var(--shadow-hover-color); } .btn-primary { background-color: var(--btn-primary-bg); color: var(--btn-primary-text); } .btn-primary:hover { background-color: var(--btn-primary-hover); } .btn-primary:disabled { opacity: 0.6; cursor: not-allowed; } .btn-secondary { border-color: var(--btn-secondary-border); color: var(--btn-secondary-text); } .btn-secondary:hover { background-color: var(--btn-secondary-hover-bg); color: var(--btn-secondary-hover-text); } .btn-portfolio { background-color: var(--btn-primary-bg); color: var(--btn-primary-text); } .btn-portfolio:hover { background-color: var(--btn-primary-hover); } .status-box { background-color: var(--bg-gray-100); color: var(--text-color-medium); padding: 1.25rem; border-radius: 0.5rem; transition: transform 0.3s ease-in-out, box-shadow 0.3s ease-in-out, background-color 0.3s ease, color 0.3s ease; } .status-box i { color: var(--text-color-medium); transition: color 0.3s ease, transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); font-size: 1.5rem; margin-bottom: 0.75rem; } html.dark .status-box i { color: #9ca3af; } .info-box { background-color: var(--bg-gray-50); color: var(--text-color-dark); border-left-width: 4px; border-left-color: var(--accent-color-light); transition: transform 0.3s ease-in-out, box-shadow 0.3s ease-in-out, border-left-width 0.3s ease-in-out, border-left-color 0.3s ease-out, background-color 0.3s ease, color 0.3s ease; } html.dark .info-box { border-left-color: var(--accent-color-dark); } .info-box h3 { color: var(--text-color); padding-bottom: 0.4rem; border-bottom: 1px solid var(--border-color); margin-bottom: 0.8rem; font-weight: 600; } .info-box h3 i { color: var(--accent-color-light); } html.dark .info-box h3 i { color: var(--accent-color-dark); } .info-box p, .info-box li { color: var(--text-color-medium); } .info-box ul i { color: var(--icon-color-list); } .info-box strong { color: var(--text-color); } .thank-you-box { background-color: var(--thank-you-bg); border-color: var(--thank-you-border); transition: background-color 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease, transform 0.3s ease; cursor: pointer; } .thank-you-box span { color: var(--thank-you-text); transition: color 0.3s ease; } .thank-you-box:hover { background-color: var(--thank-you-hover-bg); transform: scale(1.05); } .thank-you-box:hover span { color: var(--thank-you-hover-text); } html.dark .thank-you-box:hover span { color: #ffffff; } html.dark .thank-you-box i.text-gray-800 { color: var(--text-color); } html.dark .thank-you-box:hover i.text-gray-800 { color: #ffffff; } .thank-you-box i { transition: transform 0.3s ease, filter 0.3s ease, color 0.3s ease; } .thank-you-box:hover i { filter: brightness(1.1); transform: scale(1.1); } @keyframes click-bounce { 0% { transform: scale(1); } 50% { transform: scale(0.9) rotate(-2deg); } 100% { transform: scale(1); } } .thank-you-box.clicked { animation: click-bounce 0.3s ease-out; } .typing-cursor { display: inline-block; width: 2px; background-color: var(--text-color); animation: blink 0.7s infinite; margin-left: 3px; vertical-align: -0.15em; height: 1em; transition: background-color 0.3s ease; } @keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0; } } .animate-on-scroll, .fade-in-down { opacity: 0; transition: opacity 0.6s ease-out, transform 0.6s ease-out, background-color 0.3s ease, color 0.3s ease; will-change: opacity, transform; } .animate-on-scroll { transform: translateY(40px); } .fade-in-down { transform: translateY(-40px); } .animate-on-scroll.is-visible, .fade-in-down.is-visible { opacity: 1; transform: translateY(0); } .thank-you-section h3.thank-you { transform: translateY(40px) scale(0.85); color: var(--text-color-dark); } html.dark .thank-you-section h3.thank-you { color: var(--text-color-dark); } .thank-you-section h3.thank-you.is-visible { opacity: 1; transform: translateY(0) scale(1); transition: opacity 0.7s ease-out, transform 0.7s cubic-bezier(0.215, 0.610, 0.355, 1), color 0.3s ease; } .delay-1 { transition-delay: 0.1s; } .delay-2 { transition-delay: 0.2s; } .delay-3 { transition-delay: 0.3s; } .delay-4 { transition-delay: 0.4s; } footer { border-top: 1px solid var(--border-color); color: var(--text-color-light); transition: border-color 0.3s ease, color 0.3s ease, background-color 0.3s ease; padding: 1.5rem; margin-top: 4rem; text-align: center; } footer a { color: var(--accent-color-light); transition: color 0.3s ease; } html.dark footer a { color: var(--accent-color-dark); } footer a:hover { text-decoration: underline; } #theme-toggle { position: fixed; top: 1rem; right: 1.5rem; z-index: 1001; background-color: var(--bg-gray-100); color: var(--text-color); border: 1px solid var(--border-color); width: 2.5rem; height: 2.5rem; border-radius: 9999px; display: grid; place-items: center; overflow: hidden; cursor: pointer; transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease, transform 0.3s ease, box-shadow 0.3s ease; box-shadow: 0 0 0px transparent; } #theme-toggle:hover { background-color: var(--border-color); transform: scale(1.1); box-shadow: 0 0 10px var(--theme-shadow-light); } html.dark #theme-toggle:hover { box-shadow: 0 0 10px var(--theme-shadow-dark); } #theme-toggle:active { transform: scale(0.95); transition-duration: 0.1s; } .theme-icon { grid-column: 1 / -1; grid-row: 1 / -1; transition: opacity 0.3s ease, transform 0.4s ease-in-out, color 0.3s ease; font-size: 1.1rem; } #theme-toggle-light-icon { opacity: 0; transform: translateY(100%) rotate(90deg); } #theme-toggle-dark-icon { opacity: 1; transform: translateY(0) rotate(0); } html.dark #theme-toggle-dark-icon { opacity: 0; transform: translateY(-100%) rotate(-90deg); } html.dark #theme-toggle-light-icon { opacity: 1; transform: translateY(0) rotate(0); } #music-widget { position: fixed; top: 4.5rem; right: 1.5rem; z-index: 1000; display: flex; flex-direction: column; align-items: center; } #main-music-toggle { width: 2.5rem; height: 2.5rem; border-radius: 50%; display: grid; place-items: center; cursor: pointer; background-color: transparent; border: 1.5px solid var(--music-yellow); color: var(--text-color); transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease, transform 0.3s ease, box-shadow 0.3s ease; box-shadow: 0 0 0px transparent; position: relative; } html.dark #main-music-toggle { color: #ffffff; } #main-music-toggle:hover { transform: scale(1.1); box-shadow: 0 0 12px var(--music-yellow); } #main-music-toggle:active { transform: scale(0.95); transition-duration: 0.1s; } #main-music-toggle i { font-size: 1rem; color: var(--text-color); transition: color 0.3s ease, transform 0.2s ease; } html.dark #main-music-toggle i { color: #ffffff; } .status-dot { position: absolute; top: 2px; right: 2px; width: 8px; height: 8px; background-color: var(--music-yellow); border-radius: 50%; display: none; box-shadow: 0 0 6px var(--music-yellow); animation: pulse-dot 1.5s ease-in-out infinite; transition: background-color 0.3s ease, box-shadow 0.3s ease; } #main-music-toggle.playing .status-dot { display: block; } @keyframes pulse-dot { 0%, 100% { transform: scale(1); opacity: 0.9; } 50% { transform: scale(1.3); opacity: 1; } 100% { transform: scale(1); opacity: 0.9; } } #music-controls { display: flex; flex-direction: column; align-items: center; gap: 0.5rem; margin-top: 0.5rem; transition: opacity 0.3s ease-out, transform 0.3s ease-out, visibility 0.3s ease-out, background-color 0.3s ease; opacity: 1; transform: translateY(0); visibility: visible; } #music-controls.hide-controls { opacity: 0; visibility: hidden; transform: translateY(-10px); pointer-events: none; } .music-control-btn { background-color: var(--bg-gray-100); color: var(--text-color); border: 1px solid var(--border-color); width: 2.2rem; height: 2.2rem; border-radius: 50%; display: grid; place-items: center; cursor: pointer; transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease; font-size: 0.8rem; box-shadow: 0 1px 3px var(--shadow-color); } .music-control-btn:hover { background-color: var(--border-color); transform: scale(1.1); } .music-control-btn.active { background-color: var(--music-yellow); color: #000000; border-color: var(--music-yellow); box-shadow: 0 0 8px var(--music-yellow); } html.dark .music-control-btn { background-color: var(--bg-gray-100); color: var(--text-color); border: 1px solid var(--border-color); } html.dark .music-control-btn:hover { background-color: var(--border-color); } html.dark .music-control-btn.active { background-color: var(--music-yellow); color: #000000; } #quotes-section { background-color: var(--bg-gray-50); transition: background-color 0.3s ease; } #quote-text, #quote-author { transition: opacity 0.3s ease-in-out, transform 0.3s ease-in-out, color 0.3s ease, border-color 0.3s ease; } #quote-text { min-height: 6em; } #quote-author { min-height: 1em; } .loading-spinner { animation: spin 1s linear infinite; } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } #preloader { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: var(--bg-color); z-index: 9999; display: flex; justify-content: center; align-items: center; transition: opacity 0.8s ease-out 0.3s, visibility 0.8s ease-out 0.3s, background-color 0.3s ease; visibility: visible; opacity: 1; } #preloader .dots-container { display: flex; } #preloader .dot { width: 12px; height: 12px; margin: 0 6px; background-color: var(--accent-color-light); border-radius: 50%; animation: dot-pulse 1.4s infinite ease-in-out; animation-fill-mode: both; transition: background-color 0.3s ease; } #preloader .dot:nth-child(2) { animation-delay: 0.2s; } #preloader .dot:nth-child(3) { animation-delay: 0.4s; } @keyframes dot-pulse { 0%, 80%, 100% { transform: scale(0.6); opacity: 0.7; } 40% { transform: scale(1.0); opacity: 1; } } #preloader.preloader-hidden { opacity: 0; visibility: hidden; } .info-box h3, .info-box p, .info-box ul li { opacity: 0; transform: translateY(20px) scale(0.98); transition: opacity 0.5s cubic-bezier(0.25, 0.8, 0.25, 1), transform 0.5s cubic-bezier(0.25, 0.8, 0.25, 1), color 0.3s ease; } .info-box.is-visible h3 { opacity: 1; transform: translateY(0) scale(1); transition-delay: 0.3s; } .info-box.is-visible p { opacity: 1; transform: translateY(0) scale(1); transition-delay: 0.4s; } .info-box.is-visible ul li:nth-child(1) { opacity: 1; transform: translateY(0) scale(1); transition-delay: 0.5s; } .info-box.is-visible ul li:nth-child(2) { opacity: 1; transform: translateY(0) scale(1); transition-delay: 0.6s; } .info-box.is-visible ul li:nth-child(3) { opacity: 1; transform: translateY(0) scale(1); transition-delay: 0.7s; } .info-box.is-visible ul li:nth-child(4) { opacity: 1; transform: translateY(0) scale(1); transition-delay: 0.8s; } .info-box.is-visible ul li:nth-child(5) { opacity: 1; transform: translateY(0) scale(1); transition-delay: 0.9s; } .info-box:hover { border-left-width: 6px; box-shadow: 0 12px 20px -4px var(--shadow-hover-color), 0 6px 8px -4px var(--shadow-hover-color); } .info-box h3 i { transition: transform 0.35s cubic-bezier(0.175, 0.885, 0.32, 1.275), color 0.3s ease; } .info-box h3:hover i { transform: scale(1.15) rotate(18deg); } .info-box ul li { transition: transform 0.25s cubic-bezier(0.175, 0.885, 0.32, 1.275), color 0.25s ease; } .info-box ul li:hover { transform: translateX(8px); color: var(--accent-color-light); } html.dark .info-box ul li:hover { color: var(--accent-color-dark); } .info-box ul li i { transition: transform 0.25s cubic-bezier(0.175, 0.885, 0.32, 1.275), color 0.25s ease; } .info-box ul li:hover i { color: var(--accent-color-light); transform: scale(1.25) rotate(8deg); } html.dark .info-box ul li:hover i { color: var(--accent-color-dark); } .subtitle-text { letter-spacing: 0.5px; line-height: 1.7; color: var(--text-color-medium); font-size: 1.05rem; } .subtitle-text .highlight { color: var(--text-color); font-weight: 500; text-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); transition: color 0.3s ease; } .subtitle-text .highlight:hover { color: var(--accent-color-light); } html.dark .subtitle-text .highlight { color: #ffffff; text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); } html.dark .subtitle-text .highlight:hover { color: var(--accent-color-dark); } #quotes-title { background: linear-gradient(-70deg, var(--accent-color-light), var(--text-color), var(--accent-color-dark), var(--text-color)); background-size: 400% 100%; -webkit-background-clip: text; background-clip: text; color: transparent; animation: gradient-flow 10s ease-in-out infinite; transition: background 0.5s ease; } html.dark #quotes-title { background: linear-gradient(-70deg, var(--accent-color-dark), var(--text-color-dark), #a78bfa, var(--text-color-dark)); background-size: 400% 100%; -webkit-background-clip: text; background-clip: text; color: transparent; animation: gradient-flow 10s ease-in-out infinite; } @keyframes gradient-flow { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } .thank-you-section h3.thank-you { position: relative; overflow: hidden; } .thank-you-section h3.thank-you::after { content: ''; position: absolute; top: -50%; left: -50%; width: 20%; height: 200%; background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.6) 50%, rgba(255, 255, 255, 0) 100%); transform: rotate(25deg); animation: shine 6s ease-in-out infinite 1.5s; opacity: 0; transition: opacity 0.5s ease; } .thank-you-section h3.thank-you.is-visible::after { opacity: 1; } @keyframes shine { 0% { left: -50%; opacity: 0.5; } 40% { left: 130%; opacity: 1; } 100% { left: 130%; opacity: 0; } } html.dark .thank-you-section h3.thank-you::after { background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 100%); } .thank-you-box.bounce-in { transform: translateY(50px) scale(0.6); opacity: 0; transition-property: opacity, transform, background-color, color, border-color; transition-duration: 0.7s; transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275); } .thank-you-box.bounce-in.is-visible { opacity: 1; transform: translateY(0) scale(1); } .status-box.animate-on-scroll { opacity: 0; transform: translateY(30px) scale(0.95); transition-property: opacity, transform, background-color, color, border-color; transition-duration: 0.7s; transition-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1); } .status-box.animate-on-scroll.is-visible { opacity: 1; transform: translateY(0) scale(1); } .status-box:hover { transform: translateY(-5px) scale(1.07); box-shadow: 0 10px 20px -5px var(--shadow-hover-color), 0 6px 10px -6px var(--shadow-hover-color); } .status-box:hover i { transform: scale(1.25) rotate(7deg); color: var(--accent-color-light); } html.dark .status-box:hover i { color: var(--accent-color-dark); } body.preloading { overflow: hidden; } /* --- Added Style for Location Box --- */ #city-location { background-color: transparent; /* Latar belakang tetap transparan */ color: var(--text-color-medium); /* <<< MENGGUNAKAN WARNA INI */ padding: 0.2rem 0.6rem; border-radius: 0.3rem; font-size: 0.75rem; margin-top: 4px; display: inline-block; font-weight: 500; transition: color 0.3s ease; } #clock-date-small { background-color: transparent; /* Latar belakang tetap transparan */ color: var(--text-color-medium); /* <<< MENGGUNAKAN WARNA INI */ padding: 0.2rem 0.6rem; border-radius: 0.3rem; font-size: 0.75rem; margin-top: 4px; display: inline-block; font-weight: 500; transition: color 0.3s ease; } /* --- Penyesuaian Khusus untuk Kartu Statistik (#stats) --- */ #stats .block { font-size: 0.9rem; /* <<< Perbesar ukuran font (dari 0.8rem) */ font-weight: 500; /* <<< Buat sedikit lebih tebal (medium) */ line-height: 1.2; /* <<< Beri sedikit jarak antar baris */ } /* Atau jika Anda ingin jarak yang lebih eksplisit: */ #endpoint-line, #runtime-line, #request-line { font-size: 0.5rem; /* Ukuran font 14px (sesuaikan jika perlu) */ font-weight: 500; } #runtime-line { margin-bottom: 2px; } #endpoint-line { margin-bottom: 2px; /* <<< TAMBAH JARAK 5px di bawah baris Endpoint >>> */ } #ip-line, #os-line, #browser-line { font-size: 0.8rem; /* Ukuran font 14px (sesuaikan jika perlu) */ font-weight: 500; } #ip-line { margin-bottom: 2px; } #os-line { margin-bottom: 2px; /* <<< TAMBAH JARAK 5px di bawah baris Endpoint >>> */ } /* Pastikan ikon punya jarak yang pas */ #stats i { margin-bottom: 0.75rem; /* Perbesar sedikit jarak ikon ke teks (dari 0.75rem) */ } /* Penyesuaian untuk HP jika diperlukan */ @media (max-width: 640px) { #stats .block, #endpoint-line, #runtime-line, #request-line { font-size: 0.8rem; } #runtime-line { margin-bottom: 3px; } #endpoint-line { margin-bottom: 3px; } #stats .block, #ip-line, #os-line, #browser-line { font-size: 0.8rem; } #ip-line { margin-bottom: 3px; } #os-line { margin-bottom: 3px; } #stats i { margin-bottom: 0.6rem; } } #youtube-player-section { background-color: var(--bg-gray-50); /* Menggunakan bg-gray-50 agar konsisten */ border: 1px solid var(--border-color); /* Anda bisa menambahkan transition jika mau: transition: background-color 0.3s ease, border-color 0.3s ease; */ } #youtube-player-section h3 { color: var(--text-color); border-bottom: 1px solid var(--border-color); } #Youtube-input { background-color: var(--bg-color); /* Sesuaikan dengan latar belakang input umum Anda */ border-color: var(--border-color); color: var(--text-color); } #Youtube-input::placeholder { color: var(--text-color-light); } .yt-button { padding: 0.75rem 1rem; /* Padding standar untuk tombol */ border-radius: 0.375rem; /* rounded-md */ color: white; font-weight: 600; /* semibold */ transition: background-color 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem; /* Jarak ikon dan teks */ text-decoration: none; /* Untuk link unduhan */ line-height: 1.5; /* Menyamakan tinggi dengan input */ } html.dark .yt-button { color: var(--btn-primary-text); /* Jika tombol utama mode gelap Anda pakai teks terang */ } html.dark #Youtube-button { color: black; /* Khusus search button dark mode agar kontras dgn bg putih tombol */ } .yt-button:hover:not(:disabled) { transform: translateY(-1px); /* Efek hover sedikit naik */ box-shadow: var(--shadow-md); } .yt-button:active:not(:disabled) { transform: translateY(0px); /* Efek tekan */ } .yt-button:disabled { opacity: 0.6; cursor: not-allowed; } #Youtube-button { background-color: var(--yt-button-bg); /* Jika tombol utama Anda di mode gelap pakai teks gelap, tambahkan: */ /* html.dark & { color: var(--btn-primary-text-dark); } */ } html.dark #Youtube-button { /* Khusus untuk dark mode search button */ background-color: var(--btn-primary-bg); /* Samakan dengan btn-primary di dark mode */ color: var(--btn-primary-text); } html.dark #Youtube-button:hover:not(:disabled) { background-color: var(--btn-primary-hover); } #youtube-download-button { background-color: var(--yt-download-bg); display: none; /* Awalnya disembunyikan */ } #youtube-download-button:hover:not(:disabled) { background-color: var(--yt-download-hover); } html.dark #youtube-download-button { color: white; /* Pastikan teks putih di dark mode */ } #youtube-download-button.visible { display: inline-flex; /* Kelas untuk menampilkan */ } #youtube-now-playing { color: var(--text-color); font-weight: 500; /* Medium weight */ min-height: 1.5em; /* Beri ruang agar tidak loncat saat teks berubah */ } #youtube-status-message { color: var(--text-color-light); min-height: 1.2em; /* Beri ruang */ } /* Penyesuaian untuk kontrol audio di mode gelap */ #youtube-audio-player { filter: none; /* Default untuk light mode */ border-radius: 50px; /* Agar lebih modern */ transition: filter 0.3s ease; } html.dark #youtube-audio-player { filter: invert(0.9) hue-rotate(180deg) contrast(0.9) saturate(0.8); } /* Tata letak tombol untuk PC dan Mobile */ #yt-button-container { display: flex; gap: 0.75rem; /* Jarak antar tombol */ } @media (max-width: 640px) { /* sm breakpoint Tailwind */ #yt-button-container { flex-direction: column; /* Tombol menumpuk di mobile */ gap: 0.5rem; } .yt-button { width: 100%; /* Tombol full width di mobile */ } } #ai-chat-section { background-color: var(--ai-chat-section-bg); /* border: 1px solid var(--ai-chat-output-border); (Dihapus karena p-0 di section) */ /* box-shadow sudah dari kelas Tailwind */ } .ai-chat-header { background-color: var(--ai-chat-header-bg); color: var(--ai-chat-header-text); padding: 0.75rem 1.25rem; /* py-3 px-5 */ font-size: 1.125rem; /* text-lg */ font-weight: 600; /* font-semibold */ } #ai-chat-output { background-color: var(--ai-chat-output-bg); height: 300px; /* sm:h-96 atau sesuaikan */ overflow-y: auto; padding: 1rem; /* p-4 */ border-bottom: 1px solid var(--ai-chat-output-border); border-top: 1px solid var(--ai-chat-output-border); } /* Styling pesan chat individu */ .ai-chat-message { margin-bottom: 0.75rem; /* mb-3 */ padding: 0.625rem 1rem; /* py-2.5 px-4 */ border-radius: 0.75rem; /* rounded-xl */ line-height: 1.6; max-width: 85%; /* Pesan tidak terlalu lebar */ word-wrap: break-word; } .ai-chat-message.user { background-color: var(--ai-chat-user-msg-bg); color: var(--ai-chat-user-msg-text); margin-left: auto; border-bottom-right-radius: 0.25rem; /* rounded-br-sm */ } .ai-chat-message.ai { background-color: var(--ai-chat-ai-msg-bg); color: var(--ai-chat-ai-msg-text); margin-right: auto; border-bottom-left-radius: 0.25rem; /* rounded-bl-sm */ } .ai-chat-message.error { background-color: var(--ai-chat-error-msg-bg); color: var(--ai-chat-error-msg-text); font-style: italic; } .ai-chat-message.info { background-color: var(--ai-chat-info-msg-bg); color: var(--ai-chat-info-msg-text); font-style: italic; text-align: center; max-width: 100%; font-size: 0.875rem; /* text-sm */ } .ai-chat-input-area { background-color: var(--ai-chat-input-area-bg); padding: 1rem; /* p-4 */ } #ai-chat-input { background-color: var(--ai-chat-input-bg); border: 1px solid var(--ai-chat-input-border); color: var(--text-color); /* Warna teks input utama */ border-radius: 0.375rem; /* rounded-md */ padding: 0.75rem 1rem; /* py-3 px-4 */ } #ai-chat-input::placeholder { color: var(--text-color-light); } #ai-chat-input:focus { border-color: var(--ai-chat-input-focus-border); box-shadow: 0 0 0 0.2rem var(--ai-chat-input-focus-shadow); } #ai-chat-send-button { background-color: var(--ai-chat-send-button-bg); color: var(--ai-chat-send-button-text); padding: 0.75rem 1.25rem; /* py-3 px-5 */ border-radius: 0.375rem; /* rounded-md */ font-weight: 500; /* font-medium */ } #ai-chat-send-button:hover:not(:disabled) { background-color: var(--ai-chat-send-button-hover-bg); } #ai-chat-send-button:disabled { opacity: 0.6; cursor: not-allowed; } .ai-typing-indicator span { height: 7px; width: 7px; background-color: var(--ai-chat-typing-dot-color); border-radius: 50%; display: inline-block; animation: aiBlinkAnimation 1.4s infinite both; margin: 0 1.5px; } .ai-typing-indicator span:nth-child(2) { animation-delay: .2s; } .ai-typing-indicator span:nth-child(3) { animation-delay: .4s; } #youtube-skip-button.yt-skip-active { background-color: var(--yt-skip-active-bg) !important; /* Gunakan !important jika ada override dari .yt-button */ color: var(--yt-skip-active-text) !important; /* Anda bisa menambahkan border atau efek lain juga */ /* border-color: var(--yt-skip-active-hover-bg); */ } #youtube-skip-button.yt-skip-active:hover:not(:disabled) { background-color: var(--yt-skip-active-hover-bg) !important; } /* Gaya default untuk tombol skip saat disabled (mungkin sudah diatur oleh .yt-button:disabled) */ /* Jika belum, Anda bisa tambahkan: */ #youtube-skip-button:disabled { background-color: var(--bg-gray-200, #e0e0e0); /* Warna abu-abu saat disable */ color: var(--text-color-light, #6b7280); opacity: 0.6; cursor: not-allowed; } html.dark #youtube-skip-button:disabled { background-color: var(--bg-gray-600, #4b5563); color: var(--text-color-light, #9ca3af); } @keyframes aiBlinkAnimation { /* Nama animasi unik */ 0% { opacity: .2; } 20% { opacity: 1; } 100% { opacity: .2; } } /* === Aturan CSS Baru untuk Downloader Tools === */ #downloader-tools-section { /* Jika Anda ingin gaya khusus untuk section ini */ /* background-color: var(--bg-gray-50); Sudah diatur oleh kelas .content-section di HTML */ /* border: 1px solid var(--border-color); Sudah diatur oleh kelas .content-section di HTML */ } .dl-type-button { /* Bisa menggunakan .yt-button jika gayanya cocok, atau definisikan terpisah */ /* Jika tidak pakai .yt-button sebagai basis: */ padding: 0.5rem 0.8rem; border: 1px solid var(--border-color); border-radius: 0.375rem; /* rounded-md */ cursor: pointer; transition: background-color 0.2s, color 0.2s, border-color 0.2s; background-color: var(--bg-color); color: var(--text-color-medium); font-size: 0.8rem; display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem; } html.dark .dl-type-button { background-color: var(--bg-gray-700, #374151); color: var(--text-color-light); border-color: var(--border-color); } .dl-type-button:hover:not(.active) { background-color: var(--downloader-type-hover-bg); } .dl-type-button.active { background-color: var(--downloader-type-active-bg) !important; color: var(--downloader-type-active-text) !important; border-color: var(--downloader-type-active-bg) !important; font-weight: 600; } #downloader-fetch-button { /* Ini bisa menggunakan kelas .yt-button jika sudah ada & sesuai */ background-color: var(--downloader-process-bg); color: white; /* padding: 0.75rem 1.5rem; /* Sudah ada di .yt-button atau bisa ditambahkan di sini */ } #downloader-fetch-button:hover:not(:disabled) { background-color: var(--downloader-process-hover); } html.dark #downloader-fetch-button { color: white; /* Pastikan kontras */ } #downloader-results-area .download-item { background-color: var(--bg-gray-100); border: 1px solid var(--border-color); padding: 0.75rem; margin-top: 0.75rem; border-radius: 0.375rem; text-align: left; } html.dark #downloader-results-area .download-item { background-color: var(--bg-gray-700, #282d36); border-color: var(--border-color); } #downloader-results-area .download-item p { margin-bottom: 0.25rem; font-size: 0.875rem; } #downloader-results-area .download-item strong { color: var(--text-color); font-weight: 600; } html.dark #downloader-results-area .download-item strong { color: var(--text-color-dark); } #downloader-results-area .download-item img.result-thumbnail { max-width: 150px; max-height: 120px; border-radius: 0.25rem; margin-bottom: 0.5rem; border: 1px solid var(--border-color); } #downloader-results-area .download-item a.download-link { display: inline-block; margin-top: 0.5rem; padding: 0.5rem 1rem; background-color: var(--downloader-link-bg); color: white; border-radius: 0.375rem; text-decoration: none; font-size: 0.875rem; transition: background-color 0.2s; } #downloader-results-area .download-item a.download-link:hover { background-color: var(--downloader-link-hover); } html.dark #downloader-results-area .download-item a.download-link { /* Sesuaikan warna teks jika background link di dark mode terang */ /* color: var(--text-color-dark); */ } /* Mobile Adjustments */ @media (max-width: 640px) { #theme-toggle { width: 2.1rem; height: 2.1rem; top: 0.8rem; right: 1rem; } .theme-icon { font-size: 0.95rem; } #music-widget { right: 3.6rem; top: 0.8rem; z-index: 1000; display: flex; flex-direction: column; align-items: center; position: fixed; } #main-music-toggle { width: 2.1rem; height: 2.1rem; } #main-music-toggle i { font-size: 0.85rem; } #music-controls { flex-direction: column; gap: 0.4rem; margin-top: 0.4rem; padding: 0; background-color: transparent; border-radius: 0; box-shadow: none; } .music-control-btn { width: 2rem; height: 2rem; font-size: 0.75rem; } body { padding: 0; } main { padding: 0.8rem 1rem; } main>header { margin-top: 1rem; } main>header.text-center { margin-top: 0.75rem; margin-bottom: 1.2rem; } #typewriter-heading { font-size: 2rem; line-height: 1.4; min-height: 5.6rem; display: flex; align-items: center; justify-content: center; padding-top: 0; } #typewriter-heading>span { display: inline-block; text-align: center; } main>p.text-lg { font-size: 0.9rem; margin-bottom: 2.5rem; } section.flex.flex-wrap.justify-center.gap-4 { gap: 0.75rem; margin-bottom: 2.5rem; } section.flex.flex-wrap.justify-center.gap-4>button, section.flex.flex-wrap.justify-center.gap-4>a { padding: 0.6rem 1rem; font-size: 0.95rem; } section.flex.flex-wrap.justify-center.gap-4>a svg { height: 1.1rem; width: 1.1rem; margin-right: 0.4rem; } #status-boxes { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.75rem; } .status-box { padding: 0.8rem; } .status-box i { font-size: 1.3rem; margin-bottom: 0.5rem; } .status-box span { font-size: 0.8rem; } #clock .clock-date { font-size: 0.9rem; display: block; margin-top: 3px; } .info-box h3 { font-size: 1.1rem; } .info-box p.text-sm, .info-box ul.text-sm li { font-size: 0.85rem; } .thank-you-section h3.thank-you { font-size: 1.3rem; margin-bottom: 0.8rem; } .thank-you-grid { gap: 0.3rem; } .thank-you-box { padding: 0.3rem; } .thank-you-box i { font-size: 1.15rem; margin-bottom: 0.1rem; } .thank-you-box span { font-size: 0.7rem; line-height: 1.2; } #quotes-section h3 { font-size: 1.4rem; margin-bottom: 1rem; } #quotes-title { font-size: 1.5rem !important; line-height: 2rem !important; } .thank-you-section h3.thank-you { font-size: 1.5rem; line-height: 2rem; } #quote-text { font-size: 1rem; min-height: 5em; padding: 0.8rem; margin-bottom: 0.75rem; } #quote-author { font-size: 0.85rem; } #new-quote-btn { padding: 0.5rem 1rem; font-size: 0.9rem; } #new-quote-btn i { margin-right: 0.3rem; } footer { padding: 0.8rem; margin-top: 2rem; } footer .mb-3 a { font-size: 0.7rem; margin-left: 0.2rem; margin-right: 0.2rem; } footer .mb-3 span { margin-left: 0.2rem; margin-right: 0.2rem; } footer p.text-sm { font-size: 0.7rem; } #mobile-header { display: flex; } #city-location { font-size: 0.8rem; padding: 0.15rem 0.5rem; } /* Smaller location box on mobile */ } /* --- Sidebar Styles (MODIFIED & ADDED) --- */ #sidebar { background-color: var(--sidebar-bg); color: var(--sidebar-text); width: 16rem; /* <<< UBAH TRANSISI INI >>> */ transition: width 0.35s cubic-bezier(0.4, 0, 0.2, 1), transform 0.35s cubic-bezier(0.4, 0, 0.2, 1), background-color 0.3s ease; overflow: hidden; height: 100vh; position: fixed; top: 0; left: 0; z-index: 60; display: flex; flex-direction: column; transform: translateX(0); box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1); } html.dark #sidebar { box-shadow: 2px 0 5px rgba(0, 0, 0, 0.3); } #sidebar .p-4 { /* Header */ border-bottom: 1px solid var(--sidebar-border-color); transition: border-color 0.3s ease; flex-shrink: 0; display: flex; justify-content: space-between; align-items: center; height: 4rem; /* Standard height */ } #sidebar a { color: var(--sidebar-text); } #sidebar .sidebar-menu { flex-grow: 1; overflow-y: auto; padding-bottom: 1rem; } #sidebar .sidebar-menu li a { /* <<< TAMBAH TRANSISI PADDING >>> */ transition: background-color 0.2s ease, transform 0.2s ease, color 0.2s ease, padding 0.35s cubic-bezier(0.4, 0, 0.2, 1); display: flex; align-items: center; padding: 0.75rem 1rem; margin: 0.25rem 0.5rem; border-radius: 6px; } #sidebar .sidebar-menu li a:hover, #sidebar .sidebar-menu li a.active { background-color: var(--sidebar-hover-bg); transform: translateX(5px); color: var(--accent-color-light); } html.dark #sidebar .sidebar-menu li a:hover { color: var(--accent-color-dark); } #sidebar .sidebar-menu li a i { width: 1.5rem; text-align: center; flex-shrink: 0; /* Prevent icon shrink */ margin-right: 0.75rem; /* Default margin for expanded */ /* <<< UBAH TRANSISI INI >>> */ font-size: 1.1rem; transition: transform 0.3s ease, margin-right 0.35s cubic-bezier(0.4, 0, 0.2, 1), font-size 0.35s cubic-bezier(0.4, 0, 0.2, 1); } #sidebar .sidebar-menu li a:hover i { transform: scale(1.1) rotate(5deg); } #sidebar .pages-section { color: var(--sidebar-pages-text); padding: 0.5rem 1.5rem; font-size: 0.65rem; /* <<< TAMBAH TRANSISI >>> */ transition: opacity 0.3s ease-in-out 0.05s; } .sidebar-text, #sidebar-title { white-space: nowrap; /* <<< UBAH TRANSISI INI >>> */ transition: opacity 0.3s ease-in-out 0.05s, width 0.3s ease; } #sidebar-toggle-desktop { color: var(--sidebar-text); transition: color 0.3s ease, transform 0.3s ease; padding: 0.5rem; border-radius: 4px; } #sidebar-toggle-desktop:hover { background-color: var(--sidebar-hover-bg); } #sidebar-toggle-desktop i { /* <<< UBAH TRANSISI INI >>> */ transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1); } #sidebar-footer { padding: 1rem 0.5rem; border-top: 1px solid var(--sidebar-border-color); text-align: center; flex-shrink: 0; /* <<< UBAH TRANSISI INI >>> */ transition: padding 0.35s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.3s ease; background-color: var(--sidebar-bg); } #sidebar-footer .sidebar-text { white-space: nowrap; /* <<< UBAH TRANSISI INI >>> */ transition: opacity 0.3s ease-in-out 0.05s; font-size: 0.7rem; color: var(--text-color-light); } #main-content { /* <<< UBAH TRANSISI INI >>> */ transition: margin-left 0.35s cubic-bezier(0.4, 0, 0.2, 1); background-color: var(--bg-color); flex-grow: 1; display: flex; flex-direction: column; min-height: 100vh; margin-left: 16rem; } #main-content>main { flex-grow: 1; } /* Collapsed State (Desktop ONLY - IMPROVED) */ @media (min-width: 768px) { #sidebar.collapsed { width: 4rem; } #sidebar.collapsed .p-4 { justify-content: center; } /* Center header content */ #sidebar.collapsed .sidebar-text, #sidebar.collapsed .pages-section, #sidebar.collapsed #sidebar-title, #sidebar.collapsed #sidebar-footer .sidebar-text { opacity: 0; pointer-events: none; width: 0; overflow: hidden; } #sidebar.collapsed #sidebar-toggle-desktop i { transform: rotate(180deg); } #sidebar.collapsed .sidebar-menu li a { justify-content: center; /* Center icon */ padding: 0.85rem 0; /* Vertical padding only */ } #sidebar.collapsed .sidebar-menu li a:hover { transform: translateX(0); } /* No X-translate */ #sidebar.collapsed .sidebar-menu li a i { margin-right: 0; /* Remove margin */ font-size: 1.25rem; /* Make icon a bit bigger */ } #sidebar.collapsed .sidebar-menu li a:hover i { transform: scale(1.15); } /* Hover scale only */ #sidebar.collapsed #sidebar-footer { padding: 0.75rem 0.5rem; } #main-content.collapsed { margin-left: 4rem; } #mobile-header { display: none; } } /* Mobile State */ @media (max-width: 767px) { #sidebar { width: 14rem; transform: translateX(-100%); } #sidebar.open { width: 14rem; transform: translateX(0); } #sidebar .sidebar-text, #sidebar .pages-section, #sidebar #sidebar-title, #sidebar-footer .sidebar-text { opacity: 0; } #sidebar.open .sidebar-text, #sidebar.open .pages-section, #sidebar.open #sidebar-title, #sidebar.open #sidebar-footer .sidebar-text { opacity: 1; } #sidebar #sidebar-footer { opacity: 0; transform: translateY(100%); transition: opacity 0.3s ease-in-out, transform 0.3s ease-in-out; } #sidebar.open #sidebar-footer { opacity: 1; transform: translateY(0); } #main-content { margin-left: 0 !important; } #sidebar-toggle-desktop { display: none; } #mobile-header { display: flex; } #mobile-header>span { position: relative; left: -10px; /* Geser ke kiri, sesuaikan nilainya */ } #page-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); z-index: 55; opacity: 0; visibility: hidden; transition: opacity 0.35s cubic-bezier(0.4, 0, 0.2, 1), visibility 0.35s cubic-bezier(0.4, 0, 0.2, 1); } #page-overlay.active { opacity: 1; visibility: visible; } } .qris-button-main { padding: 0.75rem 1.5rem; /* Sesuaikan dengan tombol utama Anda yg lain */ font-size: 0.9rem; font-weight: 600; color: white; background-color: var(--button-bg-color, #28a745); /* Fallback jika var tidak ada */ border: none; border-radius: 0.375rem; /* rounded-md */ cursor: pointer; transition: background-color 0.2s ease, transform 0.1s ease; display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem; } .qris-button-main:hover:not(:disabled) { background-color: var(--button-hover-bg-color, #218838); transform: translateY(-1px); } .qris-button-main:active:not(:disabled) { transform: translateY(0); } .qris-button-main:disabled { opacity: 0.6; cursor: not-allowed; } html.dark .qris-button-main { /* Warna spesifik dark mode jika berbeda dari variabel general */ background-color: var(--button-bg-color, #16a34a); } html.dark .qris-button-main:hover:not(:disabled) { background-color: var(--button-hover-bg-color, #15803d); } /* Styling untuk area hasil QRIS */ #qris-result-area { margin-top: 1.5rem; /* mt-6 */ text-align: center; min-height: 50px; } #qris-result-area p { font-size: 0.875rem; /* text-sm */ color: var(--text-color-light); word-wrap: break-word; } #qris-result-area .error-message { color: var(--error-text-color, #c62828); /* Fallback */ font-weight: 500; } #qris-result-area .success-title { font-weight: 600; font-size: 1.125rem; /* text-lg */ margin-bottom: 0.75rem; /* mb-3 */ color: var(--text-color); } #qris-display-image { max-width: 250px; margin: 10px auto; border: 1px solid var(--border-color); padding: 5px; border-radius: 6px; background-color: white; display: block; } /* Styling untuk tombol aksi (Download & Zoom) */ #qris-actions-container { margin-top: 15px; display: none; /* Awalnya disembunyikan */ gap: 10px; justify-content: center; flex-wrap: wrap; } .qris-action-button { padding: 0.5rem 1rem; /* py-2 px-4 */ font-size: 0.85rem; font-weight: 500; color: white; background-color: var(--action-button-bg-color, #007bff); /* Fallback */ border: none; border-radius: 0.375rem; /* rounded-md */ cursor: pointer; transition: background-color 0.2s ease; text-decoration: none; display: inline-flex; align-items: center; gap: 0.375rem; /* gap-1.5 */ } .qris-action-button:hover { background-color: var(--action-button-hover-bg-color, #0056b3); /* Fallback */ } html.dark .qris-action-button { /* Warna spesifik dark mode jika berbeda */ background-color: var(--action-button-bg-color, #3b82f6); } html.dark .qris-action-button:hover { background-color: var(--action-button-hover-bg-color, #2563eb); } /* Styling untuk input file agar tombolnya sesuai tema */ #qris-image-upload::file-selector-button { margin-right: 10px; padding: 0.5rem 0.75rem; /* py-2 px-3 */ border-radius: 0.25rem; /* rounded-sm */ border: 0; font-size: 0.8rem; font-weight: 500; background-color: var(--file-button-bg, var(--accent-color-light)); /* Fallback */ color: var(--file-button-text, white); /* Fallback */ cursor: pointer; transition: background-color 0.2s ease; } #qris-image-upload::file-selector-button:hover { background-color: var(--file-button-hover-bg, var(--accent-color-dark)); /* Fallback */ } /* Modal Styles */ .qris-modal-overlay { display: none; position: fixed; z-index: 999; left: 0; top: 0; width: 100%; height: 100%; overflow: auto; background-color: rgba(0, 0, 0, 0.85); /* Menggunakan flex untuk centering */ justify-content: center; align-items: center; } .qris-modal-content-wrapper { padding: 20px; max-width: 90%; max-height: 90vh; /* Maksimum tinggi viewport */ text-align: center; } .qris-modal-image { display: block; max-width: 100%; max-height: calc(90vh - 80px); /* Sesuaikan agar ada ruang untuk tombol tutup */ margin: auto; border: 3px solid white; border-radius: 5px; } .qris-modal-close-button { position: absolute; top: 20px; right: 35px; color: #f1f1f1; font-size: 40px; font-weight: bold; transition: 0.3s; cursor: pointer; line-height: 1; /* Pastikan tidak terlalu tinggi */ } .qris-modal-close-button:hover, .qris-modal-close-button:focus { color: #bbb; text-decoration: none; } /* Tambahkan atau sesuaikan ini di sanka.css */ /* Pastikan .content-section memiliki definisi yang cukup jelas */ /* Anda mungkin sudah memiliki ini, sesuaikan jika perlu */ .content-section { padding: 1.5rem; /* p-6 */ border-radius: 0.5rem; /* rounded-lg */ background-color: var(--bg-gray-50); border: 1px solid var(--border-color); /* Mari kita buat shadow sedikit lebih terlihat, terutama di dark mode */ box-shadow: 0 4px 8px 0 var(--shadow-color), 0 2px 4px 0 var(--shadow-color); margin-bottom: 2rem; /* my-8 */ } /* Anda bisa memberikan override khusus untuk #qris-creator-section jika ingin lebih menonjol */ #qris-creator-section { /* Jika ingin border lebih tegas dari default .content-section */ border-width: 1px; /* atau 2px jika ingin lebih tebal */ /* Anda bisa menggunakan variabel warna yang kontrasnya lebih tinggi untuk border jika var(--border-color) terlalu samar */ /* Misalnya, menggunakan var(--text-color-light) sebagai border bisa lebih terlihat */ border-color: var(--text-color-light); } /* Khusus untuk dark mode agar #qris-creator-section lebih menonjol */ html.dark #qris-creator-section { /* Pilih warna border yang kontras dengan --bg-gray-50 di dark mode */ /* --bg-gray-50 di dark mode adalah #1f2937. Anda bisa pakai --text-color-medium atau warna abu-abu lain yang lebih terang */ border-color: var(--text-color-medium); /* Contoh: #4a5568 atau #6b7280 */ /* Shadow di dark mode juga bisa dibuat lebih jelas jika defaultnya terlalu samar */ /* Variabel --shadow-color Anda di dark mode adalah rgba(255, 255, 255, 0.05) yang sangat halus. */ /* Mari kita coba shadow yang sedikit lebih gelap (menggunakan hitam dengan opacity) */ box-shadow: 0 4px 10px -2px rgba(0, 0, 0, 0.3), 0 2px 6px -2px rgba(0, 0, 0, 0.25); } /* Pastikan warna teks dan border di dalam section juga kontras */ #qris-creator-section h3 { color: var(--text-color); border-bottom: 1px solid var(--border-color); /* Padding dan margin sudah diatur di HTML atau kelas Tailwind Anda */ } #qris-creator-section .form-group label { color: var(--text-color-medium); } #qris-creator-section input[type="number"], #qris-creator-section input[type="text"], #qris-creator-section input[type="file"] { background-color: var(--input-bg-color); /* Lebih terang dari section background */ color: var(--text-color); border: 1px solid var(--border-color); } /* Footer Animation Styles */ .footer-animate-item, .footer-bottom-animate { opacity: 0; transform: translateY(40px); /* Start slightly lower */ transition: opacity 0.6s ease-out, transform 0.6s ease-out, background-color 0.3s ease, color 0.3s ease; will-change: opacity, transform; } .footer-animate-item.is-visible, .footer-bottom-animate.is-visible { opacity: 1; transform: translateY(0); } /* Staggered delay for footer items */ .footer-animate-item.is-visible:nth-child(1) { transition-delay: 0.1s; } .footer-animate-item.is-visible:nth-child(2) { transition-delay: 0.2s; } .footer-animate-item.is-visible:nth-child(3) { transition-delay: 0.3s; } .footer-animate-item.is-visible:nth-child(4) { transition-delay: 0.4s; } .footer-bottom-animate.is-visible { transition-delay: 0.5s; /* The bottom part animates after the columns */ } /* Adjust footer margin if needed to ensure it's not too close to previous animated section */ footer.footer-animate-container { margin-top: 4rem; /* or your existing margin-top */ /* You might want to ensure there's enough space above for animation to be seen if previous content is also animated */ } /* Untuk logo di Sidebar */ .sidebar-logo { height: 40px; width: auto; object-fit: contain; transition: opacity 0.3s ease-in-out 0.05s, width 0.3s ease-in-out, transform 0.3s ease-in-out; /* Jika Anda tidak menggunakan Tailwind, tambahkan margin di sini: */ /* margin-right: 0.5rem; */ } /* Untuk teks judul di sidebar */ /* Aturan ini kemungkinan sudah ada di CSS Anda dari awal untuk #sidebar-title */ #sidebar-title.sidebar-text { white-space: nowrap; transition: opacity 0.3s ease-in-out 0.05s, width 0.3s ease; } /* Penyesuaian untuk sidebar ketika di-collapse di desktop */ @media (min-width: 768px) { #sidebar.collapsed .p-4 { justify-content: center; /* Memusatkan tombol toggle saat logo & judul hilang */ } #sidebar.collapsed .sidebar-logo { opacity: 0; pointer-events: none; width: 0; overflow: hidden; } /* Aturan untuk menyembunyikan teks judul dan teks sidebar lainnya saat collapse */ /* Pastikan #sidebar-title tercakup di sini atau oleh .sidebar-text */ #sidebar.collapsed .sidebar-text, #sidebar.collapsed #sidebar-title, /* Secara eksplisit menargetkan ID judul */ #sidebar.collapsed .pages-section, #sidebar.collapsed #sidebar-footer .sidebar-text { opacity: 0; pointer-events: none; width: 0; overflow: hidden; } } #ai-name-prompt-modal .content-section { max-width: 400px; /* Lebar modal */ /* Anda bisa override background-color di sini jika ingin berbeda dari .content-section standar */ /* background-color: var(--bg-color); */ box-shadow: var(--shadow-lg); /* Pastikan shadow terlihat bagus */ } /* Di dalam sanka.css */ .app-input { /* Untuk input type text & number */ width: 100%; padding: 0.75rem 1rem; /* p-3 px-4 */ border: 1px solid var(--input-border-color, var(--border-color)); border-radius: 0.375rem; /* rounded-md */ font-size: 0.9rem; font-family: inherit; /* <<< TAMBAHKAN INI agar font konsisten */ background-color: var(--input-bg-color, var(--bg-gray-100)); color: var(--text-color); transition: border-color 0.2s ease, box-shadow 0.2s ease; } .app-input:focus { outline: none; border-color: var(--accent-color-light) !important; /* Warna aksen untuk border fokus */ box-shadow: 0 0 0 3px var(--input-focus-shadow, rgba(59, 130, 246, 0.25)); /* Shadow fokus biru */ } /* Untuk dark mode, pastikan variabelnya juga sesuai */ html.dark .app-input:focus { border-color: var(--accent-color-light) !important; /* Di dark mode, --accent-color-light jadi biru terang */ box-shadow: 0 0 0 3px var(--input-focus-shadow, rgba(96, 165, 250, 0.3)); } /* Tambahkan ini di sanka.css */ .app-button-secondary { background-color: transparent; color: var(--text-color-medium); border: 1px solid var(--border-color); } .app-button-secondary:hover:not(:disabled) { background-color: var(--bg-gray-100); /* Latar sedikit berubah saat hover */ color: var(--text-color); border-color: var(--text-color-light); transform: translateY(-1px); /* Efek naik sedikit saat hover jika diinginkan */ } /* Styling untuk dark mode tombol Batal */ html.dark .app-button-secondary { color: var(--text-color-light); border-color: var(--border-color); /* Variabel --border-color sudah diatur untuk dark mode */ } html.dark .app-button-secondary:hover:not(:disabled) { background-color: var(--bg-gray-100); /* --bg-gray-100 di dark mode adalah #374151 */ color: var(--text-color); border-color: var(--text-color-medium); }