:root { --overlay-bg: rgba(255, 255, 255, 0.14); --text-color: #f7f7f7; --dock-bg: rgba(18, 18, 24, 0.78); --dock-hover: rgba(34, 34, 46, 0.92); --input-bg: rgba(245, 245, 245, 0.82); --input-text: #1f2933; --border: rgba(255, 255, 255, 0.22); --glass-bg: rgba(255,255,255,0.12); --glass-bg-strong: rgba(255,255,255,0.18); --glass-border: rgba(255,255,255,0.3); --glass-shadow: 0 20px 50px rgba(0,0,0,0.35); } * { box-sizing: border-box; } body, html, #app { margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden; background: #0b0c10; color: var(--text-color); font-family: "Inter", "SF Pro Display", "Segoe UI", system-ui, -apple-system, sans-serif; } button, input, select, #status, #thumb-dock, #settings-panel, #delete-confirm-card, #progress-text { text-shadow: 0 1px 3px rgba(0,0,0,0.72), 0 0 12px rgba(0,0,0,0.34); } input::placeholder { text-shadow: 0 1px 3px rgba(0,0,0,0.5); } #canvas-container { width: 100%; height: 100%; position: fixed; inset: 0; overflow: hidden; } #prompt-bar { position: fixed; bottom: 30px; left: 50%; transform: translateX(-50%); display: flex; gap: 10px; align-items: center; padding: 12px 14px; background: rgba(255,255,255,0.12); border: 1px solid var(--border); border-radius: 12px; backdrop-filter: blur(10px); box-shadow: 0 20px 50px rgba(0,0,0,0.35); } #prompt-input { width: min(48vw, 720px); min-width: 220px; border: 1px solid rgba(255,255,255,0.3); padding: 12px 14px; border-radius: 12px; background: rgba(255,255,255,0.16); color: #fdfefe; font-size: 16px; outline: none; box-shadow: inset 0 1px 0 rgba(255,255,255,0.35), 0 4px 14px rgba(0,0,0,0.18); backdrop-filter: blur(6px); } #prompt-input:focus { border-color: rgba(255,255,255,0.5); box-shadow: inset 0 1px 0 rgba(255,255,255,0.45), 0 6px 18px rgba(0,0,0,0.18); } #generate-btn { border: none; padding: 12px 18px; border-radius: 10px; background: rgba(255,255,255,0.18); color: #f5f6fb; font-weight: 700; font-size: 15px; cursor: pointer; transition: transform 0.12s ease, box-shadow 0.12s ease, opacity 0.2s ease; box-shadow: 0 8px 18px rgba(0,0,0,0.14), inset 0 1px 0 rgba(255,255,255,0.35); backdrop-filter: blur(6px); } #generate-btn:disabled { opacity: 0.5; cursor: not-allowed; box-shadow: none; } #generate-btn:not(:disabled):hover { transform: translateY(-1px); } #generate-btn:not(:disabled):active { transform: translateY(0); } #settings-btn { border: 1px solid rgba(255,255,255,0.32); padding: 12px 14px; border-radius: 10px; background: rgba(255,255,255,0.08); color: #f5f6fb; font-weight: 600; font-size: 14px; cursor: pointer; transition: transform 0.12s ease, box-shadow 0.12s ease, opacity 0.2s ease; box-shadow: 0 6px 14px rgba(0,0,0,0.16), inset 0 1px 0 rgba(255,255,255,0.2); backdrop-filter: blur(6px); } #settings-btn:hover { transform: translateY(-1px); } #settings-btn:active { transform: translateY(0); } #settings-panel { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); min-width: 420px; max-width: 680px; background: var(--glass-bg); border: 1px solid var(--border); border-radius: 12px; box-shadow: var(--glass-shadow); padding: 18px 18px 14px; backdrop-filter: blur(18px); z-index: 6; } #settings-panel.hidden { display: none; } .settings-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; } .settings-title { font-weight: 700; font-size: 16px; letter-spacing: 0.1px; } .settings-sub { font-size: 12px; color: rgba(255,255,255,0.7); } #settings-close { border: 1px solid var(--glass-border); background: rgba(255,255,255,0.1); color: #fff; width: 32px; height: 32px; border-radius: 10px; cursor: pointer; font-size: 18px; line-height: 1; box-shadow: 0 6px 14px rgba(0,0,0,0.16), inset 0 1px 0 rgba(255,255,255,0.22); backdrop-filter: blur(6px); } .settings-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 10px 12px; } .settings-grid label { display: flex; flex-direction: column; gap: 6px; font-size: 13px; color: rgba(255,255,255,0.9); } .settings-grid input, .settings-grid select { width: 100%; border-radius: 10px; border: 1px solid var(--glass-border); background: rgba(255,255,255,0.14); color: #f9fafc; padding: 10px 12px; font-size: 14px; outline: none; box-shadow: inset 0 1px 0 rgba(255,255,255,0.22); backdrop-filter: blur(6px); } .settings-grid .settings-check { flex-direction: row; align-items: center; justify-content: space-between; min-height: 43px; padding: 10px 12px; border-radius: 10px; border: 1px solid var(--glass-border); background: rgba(255,255,255,0.1); box-shadow: inset 0 1px 0 rgba(255,255,255,0.18); backdrop-filter: blur(6px); } .settings-grid .settings-check input { width: 18px; height: 18px; padding: 0; margin: 0; accent-color: rgba(255,255,255,0.9); cursor: pointer; } .settings-grid input:focus, .settings-grid select:focus { border-color: rgba(255,255,255,0.52); box-shadow: inset 0 1px 0 rgba(255,255,255,0.32), 0 0 0 3px rgba(255,255,255,0.12); } .settings-footer { margin-top: 12px; display: flex; justify-content: flex-end; } #settings-reset { border: 1px solid var(--glass-border); padding: 10px 14px; border-radius: 10px; background: rgba(255,255,255,0.1); color: #fff; cursor: pointer; box-shadow: 0 6px 14px rgba(0,0,0,0.16), inset 0 1px 0 rgba(255,255,255,0.2); backdrop-filter: blur(6px); } #status { position: fixed; top: 18px; right: 18px; padding: 10px 14px; background: rgba(0,0,0,0.5); border-radius: 10px; border: 1px solid var(--border); font-size: 13px; min-width: 200px; text-align: center; opacity: 0; transition: opacity 0.25s ease; } #delete-confirm { position: fixed; inset: 0; z-index: 20; display: flex; align-items: center; justify-content: center; background: rgba(255,255,255,0.04); backdrop-filter: blur(10px); pointer-events: auto; } #delete-confirm.hidden { display: none; } #delete-confirm-card { width: min(360px, calc(100vw - 36px)); border-radius: 12px; border: 1px solid var(--border); background: var(--glass-bg); box-shadow: var(--glass-shadow); padding: 18px; color: #fff; backdrop-filter: blur(18px); } #delete-confirm-title { font-size: 17px; font-weight: 700; margin-bottom: 8px; } #delete-confirm-body { color: rgba(255,255,255,0.76); font-size: 13px; line-height: 1.4; overflow-wrap: anywhere; } #delete-confirm-filename { color: #fff; } #delete-confirm-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 18px; } #delete-confirm-actions button { border-radius: 10px; border: 1px solid var(--glass-border); padding: 9px 13px; color: #fff; cursor: pointer; font-weight: 600; box-shadow: 0 6px 14px rgba(0,0,0,0.16), inset 0 1px 0 rgba(255,255,255,0.2); backdrop-filter: blur(6px); } #delete-confirm-cancel { background: rgba(255,255,255,0.08); } #delete-confirm-delete { background: var(--glass-bg-strong); } #delete-confirm-actions button:focus-visible { outline: 2px solid rgba(255,255,255,0.86); outline-offset: 2px; } /* Progress overlay */ #progress-overlay { position: fixed; inset: 0; display: none; justify-content: center; align-items: center; pointer-events: none; z-index: 5; } #progress-ring { width: 90vmin; height: 90vmin; border-radius: 50%; position: relative; display: flex; align-items: center; justify-content: center; background: transparent; } #progress-fill { position: absolute; inset: 0; border-radius: 50%; background: conic-gradient(#ffffff 0%, rgba(255,255,255,0.08) 0%); /* Ring thickness is outer - inner. Make it very thin (about 1% of radius). */ mask: radial-gradient(farthest-side, transparent 99%, black 50%); } #progress-text { position: relative; color: #f5f6fb; font-size: 24px; letter-spacing: 0.5px; text-shadow: 0 1px 8px rgba(0,0,0,0.5); } #thumb-dock { display: block; position: fixed; top: 50%; transform: translate(0, -50%); left: 0; width: 120px; max-height: 80vh; background: rgba(255,255,255,0.1); border-right: 1px solid rgba(255,255,255,0.22); border-radius: 0 12px 12px 0; box-shadow: 0 12px 40px rgba(0,0,0,0.45); overflow: hidden; pointer-events: auto; backdrop-filter: blur(10px); } #thumb-dock:hover { background: rgba(255,255,255,0.14); } #thumb-header { padding: 10px 12px; font-size: 12px; letter-spacing: 0.2px; text-transform: uppercase; color: #d5d6e0; border-bottom: 1px solid var(--border); } #thumb-list { overflow-y: auto; max-height: calc(80vh - 44px); padding: 8px 10px; display: grid; gap: 10px; } /* Custom scrollbar for dock */ #thumb-list::-webkit-scrollbar { width: 10px; } #thumb-list::-webkit-scrollbar-track { background: rgba(255,255,255,0.08); border-radius: 999px; } #thumb-list::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.22); border-radius: 999px; border: 2px solid rgba(255,255,255,0.08); } #thumb-list::-webkit-scrollbar-thumb:hover { background: rgba(255,255,255,0.3); } .thumb-item { position: relative; width: 100%; max-width: 150px; height: 150px; border-radius: 10px; overflow: visible; border: 1px solid rgba(255,255,255,0.18); box-shadow: 0 6px 20px rgba(0,0,0,0.2); cursor: pointer; transition: transform 0.12s ease, box-shadow 0.15s ease, border-color 0.12s ease; background: #15171f; } .thumb-delete { position: absolute; top: -6px; right: -6px; width: 24px; height: 24px; border: 1px solid var(--glass-border); border-radius: 50%; background: rgba(255,255,255,0.16); color: #fff; display: grid; place-items: center; font-size: 18px; line-height: 1; cursor: pointer; box-shadow: 0 6px 14px rgba(0,0,0,0.16), inset 0 1px 0 rgba(255,255,255,0.25); backdrop-filter: blur(6px); } .thumb-delete:focus-visible { outline: 1px solid rgba(255,255,255,0.9); outline-offset: -2px; } .thumb-item img { width: 100%; height: 100%; object-fit: cover; display: block; border-radius: 10px; } .thumb-item:hover { transform: translateY(-1px) scale(1.01); box-shadow: 0 10px 26px rgba(0,0,0,0.26); border-color: rgba(255,255,255,0.34); } @media (max-width: 800px) { #thumb-dock { display: none; } #prompt-bar { flex-direction: column; bottom: 18px; align-items: stretch; } #prompt-input { width: 78vw; } #generate-btn { width: 100%; } #settings-btn { width: 100%; } #status { bottom: 120px; } }