: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; --bg-gray-200: #e5e7eb; --border-color: #d1d5db; --icon-color-list: #4b5563; --btn-primary-bg: #000000; --btn-primary-text: #ffffff; --btn-primary-hover: #374151; --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: #2563eb; --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; --downloader-process-hover: #218838; --downloader-link-bg: var(--accent-color-light); --downloader-link-hover: var(--accent-color-dark); --qris-button-bg-color: var(--downloader-process-bg); --qris-button-hover-bg-color: var(--downloader-process-hover); --qris-action-button-bg-color: var(--accent-color-light); --qris-action-button-hover-bg-color: var(--accent-color-dark); --file-button-bg: var(--accent-color-light); --file-button-text: white; --file-button-hover-bg: var(--accent-color-dark); --yt-button-bg: #007bff; --yt-button-hover: #0056b3; --error-text-color: #c62828; --success-text-color: #15803d; --header-height: 60px; } 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; --bg-gray-200: #374151; --bg-gray-600: #4b5563; --border-color: #4a5568; --icon-color-list: #93c5fd; --btn-primary-bg: #ffffff; --btn-primary-text: #000000; --btn-primary-hover: #e5e7eb; --shadow-color: rgba(0, 0, 0, 0.3); --shadow-hover-color: rgba(0, 0, 0, 0.4); --accent-color-light: #60a5fa; --accent-color-dark: #3b82f6; --downloader-type-active-bg: var(--accent-color-dark); --downloader-type-hover-bg: var(--bg-gray-600); --downloader-process-bg: #16a34a; --downloader-process-hover: #15803d; --downloader-link-bg: var(--accent-color-dark); --downloader-link-hover: var(--accent-color-light); --qris-button-bg-color: var(--downloader-process-bg); --qris-button-hover-bg-color: var(--downloader-process-hover); --qris-action-button-bg-color: var(--accent-color-dark); --qris-action-button-hover-bg-color: var(--accent-color-light); --file-button-bg: var(--accent-color-dark); --file-button-hover-bg: var(--accent-color-light); --yt-button-bg: #3b82f6; --yt-button-hover: #2563eb; --error-text-color: #ff8a80; --success-text-color: #34d399; } *, *::before, *::after { box-sizing: border-box; transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease, box-shadow 0.15s ease, opacity 0.3s ease, transform 0.2s ease; } html { scroll-behavior: smooth; } body { font-family: 'Poppins', sans-serif; background-color: var(--bg-color); color: var(--text-color); margin: 0; padding: 0; display: flex; flex-direction: column; align-items: center; min-height: 100vh; line-height: 1.6; } body.body-preloading { overflow: hidden; } #preloader { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: var(--bg-color); z-index: 99999; display: flex; justify-content: center; align-items: center; opacity: 1; visibility: visible; transition: opacity 0.6s ease-out 0.3s, visibility 0.6s ease-out 0.3s, background-color 0.3s ease; } #preloader.preloader-hidden { opacity: 0; visibility: hidden; pointer-events: none; } #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; } #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; } } #app-header { position: fixed; top: 0; left: 0; width: 100%; height: var(--header-height); background-color: var(--bg-color); display: flex; align-items: center; justify-content: space-between; padding: 0 15px; box-shadow: 0 1px 3px var(--shadow-color); z-index: 1000; } #app-header #back-button, #app-header #mode-toggle { /* Digabungkan untuk style yang sama */ padding: 0; width: 38px; height: 38px; background-color: transparent; color: var(--text-color); border: none; border-radius: 50%; cursor: pointer; display: flex; justify-content: center; align-items: center; font-size: 1.1rem; text-decoration: none; flex-shrink: 0; transition: background-color 0.2s ease, transform 0.2s ease; /* Ditambahkan transisi transform */ } #app-header #back-button:hover, #app-header #mode-toggle:hover { background-color: var(--bg-gray-100); transform: scale(1.1); /* Ditambahkan efek scale */ } .header-title-container { display: flex; align-items: center; justify-content: center; flex-grow: 1; overflow: hidden; min-width: 0; } #header-logo-icon { width: 24px; height: 24px; margin-right: 8px; flex-shrink: 0; } #app-header .page-title { font-weight: 600; font-size: 1.2rem; letter-spacing: 0.3px; margin: 0; background-image: linear-gradient(90deg, var(--accent-color-dark), var(--accent-color-light), var(--text-color-medium), var(--accent-color-dark)); background-size: 300% auto; -webkit-background-clip: text; background-clip: text; color: transparent; animation: gradientShimmer 8s linear infinite; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-height: 1.5em; } @media (min-width: 640px) { #app-header .page-title { font-size: 1.5rem; } } @keyframes gradientShimmer { 0% { background-position: 0% center } 50% { background-position: 100% center } 100% { background-position: 0% center } } #main-content { padding-top: calc(var(--header-height) + 20px); padding-bottom: 20px; width: 100%; display: flex; flex-direction: column; align-items: center; } .content-section { background-color: var(--bg-gray-50); color: var(--text-color); padding: 20px; border-radius: 0.5rem; box-shadow: 0 4px 8px 0 var(--shadow-color), 0 2px 4px 0 var(--shadow-color); width: 100%; max-width: 600px; margin-top: 0; margin-bottom: 30px; border: 1px solid var(--border-color); opacity: 0; position: relative; transform: translateY(30px); transition: opacity 0.6s ease-out, transform 0.6s ease-out; } #downloader-tools-section { transition-delay: 0.2s; } #qris-creator-section { transition-delay: 0.4s; } .content-section:last-child { margin-bottom: 0; } #qris-creator-section { border-color: var(--text-color-light); } html.dark #qris-creator-section { border-color: var(--text-color-medium); } .content-section h3 { text-align: center; font-size: 1.1rem; font-weight: 600; margin-top: 0; margin-bottom: 20px; padding-bottom: 10px; /*border-bottom: 1px solid var(--border-color);*/ border-bottom: none; /* Hapus border-bottom yang lama */ color: var(--text-color); position: relative; /* Diperlukan untuk positioning ::after */ } .content-section h3::after { content: ''; position: absolute; left: 50%; /* Mulai dari tengah */ transform: translateX(-50%); /* Pusatkan */ bottom: 0; /* Posisikan di bagian bawah (sesuaikan dengan padding-bottom h3) */ width: 0; /* Lebar awal 0 */ height: 1px; /* Ketebalan garis */ background-color: var(--border-color); /* Warna garis, bisa juga var(--accent-color-light) */ transition: width 0.5s ease-in-out; } .content-section.is-visible h3::after { width: 80%; /* Atau 100% jika ingin penuh, atau sesuaikan dengan desain */ } @media (min-width: 640px) { .content-section h3 { font-size: 1.25rem; } } .content-section h3 i { color: var(--accent-color-light); margin-right: 8px; } html.dark .content-section h3 i { color: var(--accent-color-light); } .form-group { margin-bottom: 15px; } .form-group label { display: block; font-size: 0.875rem; font-weight: 500; margin-bottom: 5px; color: var(--text-color-medium); } input[type="number"].app-input, input[type="text"].app-input { width: 100%; padding: 10px; border: 1px solid var(--border-color); border-radius: 6px; font-size: 0.875rem; background-color: var(--bg-gray-100); color: var(--text-color); transition: border-color 0.2s ease, box-shadow 0.2s ease; /* Transisi untuk fokus */ } html.dark input[type="number"].app-input, html.dark input[type="text"].app-input { background-color: var(--bg-gray-100); } input[type="number"].app-input:focus, input[type="text"].app-input:focus { outline: none; border-color: var(--accent-color-light); box-shadow: 0 0 0 2px var(--ai-chat-input-focus-shadow, rgba(59, 130, 246, 0.25)); } html.dark input[type="number"].app-input:focus, html.dark input[type="text"].app-input:focus { border-color: var(--accent-color-light); box-shadow: 0 0 0 2px var(--ai-chat-input-focus-shadow, rgba(96, 165, 250, 0.25)); } input[type="file"].app-file-input { width: 100%; padding: 5px; font-size: 0.875rem; color: var(--text-color-medium); border: 1px solid var(--border-color); border-radius: 6px; background-color: var(--bg-gray-100); } html.dark input[type="file"].app-file-input { background-color: var(--bg-gray-100); } input[type="file"].app-file-input::file-selector-button { margin-right: 10px; padding: 8px 12px; border-radius: 4px; border: 0; font-size: 0.8rem; font-weight: 500; cursor: pointer; background-color: var(--file-button-bg); color: var(--file-button-text); transition: background-color 0.2s ease; } input[type="file"].app-file-input::file-selector-button:hover { background-color: var(--file-button-hover-bg); } .field-note { font-size: 0.75rem; color: var(--text-color-light); margin-top: 5px; } .app-button { width: 100%; padding: 10px 12px; font-size: 0.85rem; font-weight: 600; color: var(--btn-primary-text); background-color: var(--btn-primary-bg); border: none; border-radius: 6px; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; gap: 8px; transition: background-color 0.2s ease, transform 0.15s ease, opacity 0.2s ease; /* Menambahkan transisi opacity */ } @media (min-width: 640px) { .app-button { padding: 12px; font-size: 0.9rem; } } .app-button:hover:not(:disabled) { transform: translateY(-1px); background-color: var(--btn-primary-hover); } .app-button:active:not(:disabled) { transform: translateY(0); } .app-button:disabled { opacity: 0.6; cursor: not-allowed; } #downloader-fetch-button, #qris-create-button, #cr-submit-button, #ghibli-generate-button, #text-to-image-button, #phw-generate-button { background-color: var(--downloader-process-bg); color: white; } #downloader-fetch-button:hover:not(:disabled), #qris-create-button:hover:not(:disabled) { background-color: var(--downloader-process-hover); } html.dark #downloader-fetch-button, html.dark #qris-create-button, html.dark #cr-submit-button, html.dark #ghibli-generate-button, html.dark #phw-generate-button, html.dark #text-to-image-button, html.dark #qris-create-button { background-color: var(--downloader-process-bg); } html.dark #downloader-fetch-button:hover:not(:disabled), #qris-create-button:hover:not(:disabled), #cr-submit-button:hover:not(:disabled), #ghibli-generate-button:hover:not(:disabled), #text-to-image-button:hover:not(:disabled), #phw-generate-button:hover:not(:disabled) { background-color: var(--downloader-process-hover); } @keyframes processingButtonShimmer { 0% { background-position: -300% center; } 100% { background-position: 300% center; } } .app-button.is-processing { background-size: 300% auto; animation: processingButtonShimmer 2.5s linear infinite; } .app-button.is-processing:not(#downloader-fetch-button):not(#qris-create-button) { background-image: linear-gradient(to right, var(--btn-primary-bg) 0%, var(--btn-primary-hover) 25%, #ffffff33 50%, var(--btn-primary-hover) 75%, var(--btn-primary-bg) 100%); color: var(--btn-primary-text); } #downloader-fetch-button.is-processing, #qris-create-button.is-processing, #cr-submit-button.is-processing, #ghibli-generate-button.is-processing, #text-to-image-button.is-processing, #phw-generate-button.is-processing { background-image: linear-gradient(to right, var(--downloader-process-bg) 0%, var(--downloader-process-hover) 25%, #ffffff40 50%, var(--downloader-process-hover) 75%, var(--downloader-process-bg) 100%); color: white; } html.dark .app-button.is-processing:not(#downloader-fetch-button):not(#qris-create-button) { background-image: linear-gradient(to right, var(--btn-primary-bg) 0%, var(--btn-primary-hover) 25%, #00000026 50%, var(--btn-primary-hover) 75%, var(--btn-primary-bg) 100%); color: var(--btn-primary-text); } html.dark #downloader-fetch-button.is-processing, html.dark #qris-create-button.is-processing, html.dark #cr-submit-button.is-processing, html.dark #ghibli-generate-button.is-processing, html.dark #text-to-image-button.is-processing, html.dark #phw-generate-button.is-processing { background-image: linear-gradient(to right, var(--downloader-process-bg) 0%, var(--downloader-process-hover) 25%, #ffffff40 50%, var(--downloader-process-hover) 75%, var(--downloader-process-bg) 100%); color: white; } #downloader-type-selector { display: grid; grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); gap: 6px; margin-bottom: 20px; } .dl-type-button { padding: 0.4rem 0.6rem; border: 1px solid var(--border-color); border-radius: 6px; cursor: pointer; font-size: 0.75rem; background-color: var(--bg-color); color: var(--text-color-medium); display: inline-flex; align-items: center; justify-content: center; gap: 0.3rem; transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease, transform 0.15s ease; /* Ditambahkan transisi transform */ } @media (min-width: 640px) { .dl-type-button { padding: 0.5rem 0.8rem; font-size: 0.8rem; gap: 0.5rem; } } html.dark .dl-type-button { background-color: var(--bg-gray-100); color: var(--text-color-light); } .dl-type-button:hover:not(.active) { background-color: var(--downloader-type-hover-bg); transform: translateY(-1px); /* Efek hover ringan */ } .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; transform: scale(1.05); /* Ditambahkan efek scale untuk state aktif */ } #downloader-results-area { margin-top: 20px; text-align: center; } #downloader-results-area .download-item { background-color: var(--bg-gray-100); border: 1px solid var(--border-color); padding: 0.75rem; margin-top: 1rem; border-radius: 6px; text-align: left; } html.dark #downloader-results-area .download-item { background-color: var(--bg-gray-100); } #downloader-results-area .download-item p { margin-bottom: 0.25rem; font-size: 0.8rem; word-wrap: break-word; } #downloader-results-area .download-item strong { color: var(--text-color); font-weight: 600; } #downloader-results-area img.result-thumbnail { max-width: 280px; width: 100%; height: auto; border-radius: 6px; margin: 0 auto 1rem auto; display: block; border: 1px solid var(--border-color); background-color: var(--bg-gray-200); } #downloader-results-area a.download-link { display: inline-block; margin-top: 0.5rem; padding: 0.4rem 0.8rem; background-color: var(--downloader-link-bg); color: white; border-radius: 6px; text-decoration: none; font-size: 0.8rem; transition: background-color 0.2s ease, transform 0.15s ease; } #downloader-results-area a.download-link:hover { background-color: var(--downloader-link-hover); transform: translateY(-1px); } #downloader-results-area .error-message { color: var(--error-text-color); font-weight: 500; } #downloader-results-area .success-title { font-weight: 600; font-size: 1rem; margin-bottom: 0.75rem; color: var(--text-color); } .item-fade-in { opacity: 0; animation: fadeInItemAnimation 0.5s ease-out forwards; } @keyframes fadeInItemAnimation { to { opacity: 1; transform: translateY(0); } /* Bisa ditambahkan transform untuk slide-up kecil */ } /* Jika ingin ada sedikit efek slide-up saat item muncul */ .item-fade-in.slide-up { opacity: 0; transform: translateY(10px); /* Mulai sedikit dari bawah */ animation: fadeInSlideUpItemAnimation 0.5s ease-out forwards; } @keyframes fadeInSlideUpItemAnimation { to { opacity: 1; transform: translateY(0); } } #qris-result-area { margin-top: 20px; text-align: center; min-height: 50px; } #qris-result-area p { font-size: 0.8rem; color: var(--text-color-light); word-wrap: break-word; } #qris-result-area .error-message { color: var(--error-text-color); font-weight: 500; } #qris-result-area .success-title { font-weight: 600; font-size: 1rem; margin-bottom: 10px; color: var(--text-color); } #qris-display-image { max-width: 200px; margin: 10px auto; border: 1px solid var(--border-color); padding: 5px; border-radius: 6px; background-color: white; display: block; } @media (min-width: 640px) { #qris-display-image { max-width: 250px; } } #qris-actions-container { margin-top: 15px; display: none; /* JS akan mengubah jadi flex */ gap: 8px; justify-content: center; flex-wrap: wrap; } .qris-action-button { padding: 6px 12px; font-size: 0.8rem; font-weight: 500; color: white; background-color: var(--qris-action-button-bg-color); border: none; border-radius: 6px; cursor: pointer; text-decoration: none; display: inline-flex; align-items: center; gap: 4px; transition: background-color 0.2s ease, transform 0.15s ease; } .qris-action-button:hover { background-color: var(--qris-action-button-hover-bg-color); transform: translateY(-1px); } .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); justify-content: center; align-items: center; opacity: 0; transform: scale(0.95); transition: opacity 0.3s ease, transform 0.3s ease, visibility 0s linear 0.3s; visibility: hidden; } .qris-modal-overlay.active { opacity: 1; transform: scale(1); visibility: visible; transition-delay: 0s; } .qris-modal-content-wrapper { padding: 15px; max-width: 95%; max-height: 95vh; text-align: center; transform: scale(0.9); transition: transform 0.3s ease 0.1s; /* delay agar wrapper muncul setelah overlay */ } .qris-modal-overlay.active .qris-modal-content-wrapper { transform: scale(1); } .qris-modal-image { display: block; max-width: 100%; max-height: calc(95vh - 70px); margin: auto; border: 3px solid white; border-radius: 5px; } .qris-modal-close-button { position: absolute; top: 10px; right: 20px; color: #f1f1f1; font-size: 30px; font-weight: bold; cursor: pointer; line-height: 1; transition: color 0.2s ease, transform 0.2s ease; } .qris-modal-close-button:hover, .qris-modal-close-button:focus { color: #bbb; text-decoration: none; transform: scale(1.1); } #app-footer { width: 100%; max-width: 600px; margin: 30px auto 20px auto; padding: 20px; text-align: center; color: var(--text-color-light); font-size: 0.85rem; border-top: 1px solid var(--border-color); opacity: 0; transform: translateY(20px); animation: footerAppear 0.7s ease-out forwards; animation-delay: 1.2s; } @keyframes footerAppear { to { opacity: 1; transform: translateY(0); } } #app-footer .footer-links div { margin-bottom: 0.75rem; } #app-footer .footer-links a { margin-left: 0.5rem; margin-right: 0.5rem; color: var(--accent-color-light); text-decoration: none; transition: color 0.2s ease, text-decoration 0.2s ease, transform 0.2s ease; /* Memastikan transisi hover halus */ } #app-footer .footer-links a:hover, #app-footer .back-to-top:hover { text-decoration: underline; color: var(--accent-color-dark); transform: translateY(-2px); } #app-footer .footer-links span.separator { color: var(--text-color-light); margin-left: 0.25rem; margin-right: 0.25rem; } #app-footer .copyright { font-size: 0.8rem; margin-bottom: 0.5rem; } #app-footer .back-to-top { font-size: 0.75rem; margin-top: 0.5rem; display: inline-block; color: var(--accent-color-light); text-decoration: none; transition: color 0.2s ease, transform 0.2s ease; /* Memastikan transisi hover halus */ } #app-footer .back-to-top i { margin-left: 4px; font-size: 0.7rem; display: inline-block; transition: transform 0.2s ease; } #app-footer .back-to-top:hover i { transform: translateY(-3px) scale(1.1); } @media (max-width: 480px) { #app-footer { font-size: 0.75rem; padding-top: 15px; padding-bottom: 0px; padding-left: 10px; padding-right: 10px; } #app-footer .footer-links>div { display: flex; flex-direction: row; justify-content: center; align-items: center; flex-wrap: wrap; gap: 0.2rem; } #app-footer .footer-links a { display: inline; margin: 0 0.1rem; padding: 2px 0; border: none; background-color: transparent; border-radius: 0; } #app-footer .footer-links a:last-child { margin-bottom: 0; } #app-footer .footer-links a:hover { transform: none; /* Menghilangkan transform Y di mobile untuk link footer */ text-decoration: underline; /* Tetap ada underline */ } #app-footer .footer-links span.separator { display: inline; margin: 0 0.1rem; } #app-footer .copyright { font-size: 0.75rem; margin-top: 0.5rem; } #app-footer .back-to-top { font-size: 0.7rem; } #app-footer .back-to-top:hover { transform: none; /* Menghilangkan transform Y di mobile untuk back to top */ } #app-footer .back-to-top:hover i { transform: translateY(-2px) scale(1.05); /* Sedikit disesuaikan untuk mobile */ } } select.app-select { width: 100%; padding: 10px; border: 1px solid var(--border-color); border-radius: 6px; font-size: 0.875rem; background-color: var(--bg-gray-100); color: var(--text-color); -webkit-appearance: none; /* Hapus tampilan default di WebKit */ -moz-appearance: none; /* Hapus tampilan default di Mozilla */ appearance: none; /* Hapus tampilan default */ background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20256%20512%22%20fill%3D%22%232c3e50%22%3E%3Cpath%20d%3D%22M224.3%20273l-136%20136c-9.4%209.4-24.6%209.4-33.9%200l-22.6-22.6c-9.4-9.4-9.4-24.6%200-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6%200-33.9L54.3%20103c9.4-9.4%2024.6-9.4%2033.9%200l136%20136c9.5%209.4%209.5%2024.6%2E1%2034z%22%20transform%3D%22rotate(90%20128%20128)%22%2F%3E%3C%2Fsvg%3E'); background-repeat: no-repeat; background-position: right 10px center; background-size: 10px 10px; padding-right: 30px; /* Ruang untuk panah */ } html.dark select.app-select { background-color: var(--bg-gray-200); /* Sesuaikan jika perlu untuk dark mode */ color: var(--text-color); border-color: var(--border-color); background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20256%20512%22%20fill%3D%22%23e5e7eb%22%3E%3Cpath%20d%3D%22M224.3%20273l-136%20136c-9.4%209.4-24.6%209.4-33.9%200l-22.6-22.6c-9.4-9.4-9.4-24.6%200-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6%200-33.9L54.3%20103c9.4-9.4%2024.6-9.4%2033.9%200l136%20136c9.5%209.4%209.5%2024.6%2E1%2034z%22%20transform%3D%22rotate(90%20128%20128)%22%2F%3E%3C%2Fsvg%3E'); } select.app-select:focus { outline: none; border-color: var(--accent-color-light); box-shadow: 0 0 0 2px var(--ai-chat-input-focus-shadow, rgba(59, 130, 246, 0.25)); } html.dark select.app-select:focus { border-color: var(--accent-color-light); box-shadow: 0 0 0 2px var(--ai-chat-input-focus-shadow, rgba(96, 165, 250, 0.25)); } /* Styling untuk area hasil Cek Rekening */ #cr-results-area .cr-result-item { background-color: var(--bg-gray-100); border: 1px solid var(--border-color); padding: 0.75rem; margin-top: 1rem; border-radius: 6px; text-align: left; } html.dark #cr-results-area .cr-result-item { background-color: var(--bg-gray-200); /* Di dark mode, input pakai --bg-gray-100, jadi ini beda sedikit */ } #cr-results-area .cr-result-item p { margin-bottom: 0.25rem; font-size: 0.85rem; /* Sedikit lebih besar dari downloader */ word-wrap: break-word; color: var(--text-color-medium); } #cr-results-area .cr-result-item strong { color: var(--text-color); font-weight: 600; } #cr-results-area .success-title { /* Jika Anda ingin judul sukses */ font-weight: 600; font-size: 1rem; margin-bottom: 0.75rem; color: var(--text-color); } #cr-results-area .error-message { /* Sudah ada, pastikan konsisten */ color: var(--error-text-color); font-weight: 500; } /* Penyesuaian delay animasi untuk section baru */ #cek-rekening-section { transition-delay: 0.6s; } #ghibli-creator-section { transition-delay: 0.8s; } /* sanka.css */ #text-to-image-section { transition-delay: 1.0s; /* Sesuaikan delay-nya agar muncul berurutan */ } .custom-select-container { position: relative; width: 100%; font-size: 0.875rem; } .custom-select-selected-text { width: 100%; padding: 10px; padding-right: 35px; /* Ruang lebih untuk panah */ border: 1px solid var(--border-color); border-radius: 6px; background-color: var(--bg-gray-100); color: var(--text-color-medium); /* Warna placeholder awal */ cursor: pointer; user-select: none; /* Mencegah teks terseleksi */ line-height: 1.5; /* Sesuaikan dengan padding */ white-space: nowrap; overflow: hidden; text-overflow: ellipsis; /* Panah dropdown menggunakan pseudo-element */ position: relative; } .custom-select-selected-text.has-value { color: var(--text-color); /* Warna teks setelah dipilih */ } .custom-select-selected-text::after { content: ''; position: absolute; right: 12px; top: 50%; transform: translateY(-50%) rotate(0deg); width: 0; height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-top: 6px solid var(--text-color-medium); /* Warna panah */ transition: transform 0.2s ease; } .custom-select-container.open .custom-select-selected-text::after { transform: translateY(-50%) rotate(180deg); /* Panah ke atas saat terbuka */ } html.dark .custom-select-selected-text { background-color: var(--bg-gray-200); /* Dark mode input */ color: var(--text-color-medium); border-color: var(--border-color); } html.dark .custom-select-selected-text.has-value { color: var(--text-color); } html.dark .custom-select-selected-text::after { border-top-color: var(--text-color-light); } .custom-select-container.open .custom-select-selected-text, .custom-select-selected-text:focus { outline: none; border-color: var(--accent-color-light); box-shadow: 0 0 0 2px var(--ai-chat-input-focus-shadow, rgba(59, 130, 246, 0.25)); } html.dark .custom-select-container.open .custom-select-selected-text, html.dark .custom-select-selected-text:focus { border-color: var(--accent-color-light); box-shadow: 0 0 0 2px var(--ai-chat-input-focus-shadow, rgba(96, 165, 250, 0.25)); } .custom-select-options-wrapper { display: none; position: absolute; top: calc(100% + 4px); left: 0; right: 0; background-color: var(--bg-color); border: 1px solid var(--border-color); border-radius: 6px; z-index: 1001; /* Pastikan di atas elemen lain */ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); opacity: 0; transform: translateY(-10px); transition: opacity 0.2s ease, transform 0.2s ease; visibility: hidden; } html.dark .custom-select-options-wrapper { background-color: var(--bg-gray-50); border-color: var(--border-color); } .custom-select-container.open .custom-select-options-wrapper { display: block; opacity: 1; transform: translateY(0); visibility: visible; } .custom-select-search { width: calc(100% - 16px); margin: 8px; padding: 8px 10px; border-radius: 4px; /* Menggunakan style dari .app-input, pastikan konsisten */ } .custom-select-options { max-height: 200px; overflow-y: auto; padding: 0; margin: 0 0 5px 0; /* Margin bawah untuk spasi dari border wrapper */ } .custom-select-options .option-group-label { padding: 8px 12px; font-weight: 600; /* Lebih tebal */ color: var(--text-color-medium); font-size: 0.8rem; background-color: var(--bg-gray-100); border-bottom: 1px solid var(--border-color); border-top: 1px solid var(--border-color); margin-top: -1px; /* Mencegah double border */ } .custom-select-options .option-group-label:first-of-type { /* Menggunakan first-of-type untuk group pertama */ border-top: none; margin-top: 0; } html.dark .custom-select-options .option-group-label { background-color: var(--bg-gray-600); /* Warna group label di dark mode */ color: var(--text-color-light); border-color: var(--border-color); } .custom-select-options .option { padding: 10px 12px; cursor: pointer; user-select: none; color: var(--text-color); font-size: 0.85rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .custom-select-options .option:hover, .custom-select-options .option.highlighted { background-color: var(--accent-color-light); color: white; } html.dark .custom-select-options .option:hover, html.dark .custom-select-options .option.highlighted { background-color: var(--accent-color-dark); color: white; } .custom-select-options .option.disabled { color: var(--text-color-light); cursor: not-allowed; background-color: transparent !important; } /* Pastikan ini ada atau sesuaikan dengan styling QRIS Anda */ #ghibli-image-upload::file-selector-button { margin-right: 10px; padding: 0.6rem 0.9rem; border-radius: 0.375rem; /* rounded-md */ border: 0; font-size: 0.875rem; /* text-sm */ font-weight: 600; /* font-semibold */ background-color: var(--accent-color-light); color: white; cursor: pointer; transition: background-color 0.2s ease; } #ghibli-image-upload::file-selector-button:hover { background-color: var(--accent-color-dark); } html.dark #ghibli-image-upload::file-selector-button { background-color: var(--accent-color-dark); } html.dark #ghibli-image-upload::file-selector-button:hover { background-color: var(--accent-color-light); } /* Styling untuk gambar hasil Ghibli */ #ghibli-display-image { max-width: 100%; max-height: 400px; margin: 1rem auto; /* my-4 */ border: 2px solid var(--border-color); padding: 0.25rem; /* p-1 */ border-radius: 0.375rem; /* rounded-md */ background-color: white; display: block; box-shadow: var(--shadow-md); } /* Styling untuk tombol download hasil Ghibli (bisa pakai kelas .qris-action-button jika sudah ada) */ #ghibli-download-link { /* display: none; Tampil via JS */ margin-top: 1rem; /* mt-4 */ padding: 0.6rem 1.2rem; background-color: #15803d; color: rgb(255, 255, 255); border-radius: 0.375rem; text-decoration: none; font-size: 0.875rem; font-weight: 500; transition: background-color 0.2s ease; display: inline-flex; align-items: center; gap: 0.5rem; } #ghibli-download-link:hover { background-color: var(--yt-download-hover); } /* Pesan Error di Result Area */ #ghibli-result-area .error-message { color: var(--error-text-color, #ef4444); /* Warna merah untuk error, fallback ke Tailwind red-500 */ font-weight: 500; } /* Tambahkan atau sesuaikan di sanka.css */ select.app-input { width: 100%; padding: 0.75rem 1rem; border: 1px solid var(--input-border-color, var(--border-color)); border-radius: 0.375rem; font-size: 0.9rem; font-family: inherit; 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; -webkit-appearance: none; /* Untuk menghilangkan tampilan default browser */ -moz-appearance: none; appearance: none; /* Tambahkan ikon panah dropdown kustom jika mau */ background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20256%20512%22%20fill%3D%22%232c3e50%22%3E%3Cpath%20d%3D%22M224.3%20273l-136%20136c-9.4%209.4-24.6%209.4-33.9%200l-22.6-22.6c-9.4-9.4-9.4-24.6%200-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6%200-33.9L54.3%20103c9.4-9.4%2024.6-9.4%2033.9%200l136%20136c9.5%209.4%209.5%2024.6%2E1%2034z%22%20transform%3D%22rotate(90%20128%20128)%22%2F%3E%3C%2Fsvg%3E'); background-repeat: no-repeat; background-position: right 0.75rem center; background-size: 0.65em auto; padding-right: 2.5rem; /* Pastikan ada ruang untuk panah */ } html.dark select.app-input { background-color: var(--input-bg-color, var(--bg-gray-100)); border-color: var(--input-border-color, var(--border-color)); color: var(--text-color); background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20256%20512%22%20fill%3D%22%23e5e7eb%22%3E%3Cpath%20d%3D%22M224.3%20273l-136%20136c-9.4%209.4-24.6%209.4-33.9%200l-22.6-22.6c-9.4-9.4-9.4-24.6%200-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6%200-33.9L54.3%20103c9.4-9.4%2024.6-9.4%2033.9%200l136%20136c9.5%209.4%209.5%2024.6%2E1%2034z%22%20transform%3D%22rotate(90%20128%20128)%22%2F%3E%3C%2Fsvg%3E'); } select.app-input:focus { outline: none; border-color: var(--accent-color-light) !important; box-shadow: 0 0 0 3px var(--input-focus-shadow, rgba(59, 130, 246, 0.25)); } html.dark select.app-input:focus { border-color: var(--accent-color-light) !important; box-shadow: 0 0 0 3px var(--input-focus-shadow, rgba(96, 165, 250, 0.3)); } /* Styling untuk gambar hasil dan tombol unduh (bisa pakai yang sudah ada dari Ghibli/QRIS) */ #phw-result-area img { /* Atau kelas spesifik .phw-display-image */ max-width: 100%; max-height: 350px; margin: 1rem auto; border: 1px solid var(--border-color); padding: 0.25rem; border-radius: 0.375rem; background-color: white; display: block; box-shadow: var(--shadow-md); } html.dark #phw-result-area img { background-color: var(--input-bg-color); /* Latar gelap agar transparan terlihat */ } #phw-result-area a.app-button { /* Tombol unduh */ /* Gunakan styling .app-button dan .qris-action-button dari CSS Anda */ margin-top: 0.75rem; } .app-button:hover:not(:disabled) i, .app-button:focus:not(:disabled) i { /* Tambahkan juga untuk state focus demi aksesibilitas */ transform: rotate(10deg) scale(1.15); transition: transform 0.3s cubic-bezier(0.68, -0.55, 0.27, 1.55); /* Transisi dengan sedikit efek 'bounce' */ } .app-button i { transition: transform 0.3s ease-out; /* Transisi kembali ke state normal */ } /* === Style untuk Tombol Unduh agar Konsisten Hijau === */ #qris-download-button, #ghibli-download-link, #phw-download-link { background-color: var(--downloader-process-bg); /* Variabel warna hijau utama */ color: white; } #qris-download-button:hover, #ghibli-download-link:hover, #phw-download-link:hover { background-color: var(--downloader-process-hover); /* Variabel warna hijau saat hover */ color: white; /* Pastikan teks tetap putih saat hover */ } html.dark #qris-download-button, html.dark #ghibli-download-link, html.dark #phw-download-link { background-color: var(--downloader-process-bg); color: white; } html.dark #qris-download-button:hover, html.dark #ghibli-download-link:hover, html.dark #phw-download-link:hover { background-color: var(--downloader-process-hover); color: white; }