:root { --primary: #4f46e5; --success: #10b981; --secondary: #64748b; --bg: #f8fafc; --text: #1e293b; --panel-bg: #ffffff; --border: #e2e8f0; } [data-theme="dark"] { --primary: #818cf8; --success: #34d399; --secondary: #94a3b8; --bg: #0f172a; --text: #e2e8f0; --panel-bg: #1e293b; --border: #334155; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: system-ui, -apple-system, sans-serif; } body { background: var(--bg); min-height: 100vh; padding: 2rem; color: var(--text); transition: background-color 0.3s, color 0.3s; } .theme-toggle { position: fixed; top: 2rem; right: 2rem; background: var(--panel-bg); border: 1px solid var(--border); width: 3rem; height: 3rem; border-radius: 50%; cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); transition: transform 0.3s ease; z-index: 100; } .theme-toggle:hover { transform: scale(1.1); } .container { max-width: 1400px; margin: 0 auto; display: grid; grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); gap: 2rem; } .panel { background: var(--panel-bg); padding: 2rem; border-radius: 1rem; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); transition: background-color 0.3s; } h2 { color: var(--text); margin-bottom: 1.5rem; font-size: 1.5rem; } .form-group { margin-bottom: 1.25rem; } label { display: block; margin-bottom: 0.5rem; font-weight: 500; color: var(--text); } input, textarea, select { width: 100%; padding: 0.75rem; border: 1px solid var(--border); border-radius: 0.5rem; font-size: 0.95rem; background: var(--panel-bg); color: var(--text); transition: all 0.15s; } input:focus, textarea:focus, select:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1); } textarea { height: 120px; resize: vertical; line-height: 1.5; } /* Font section styling */ .font-section { border: 1px solid var(--border); border-radius: 0.75rem; padding: 1.5rem; margin-bottom: 1.5rem; background: var(--bg); } .font-controls { margin-bottom: 1.25rem; } .font-controls:last-child { margin-bottom: 0; } .font-selectors { display: grid; grid-template-columns: 2fr 1fr; gap: 0.75rem; } .font-select { -webkit-appearance: none; -moz-appearance: none; appearance: none; background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e"); background-repeat: no-repeat; background-position: right 0.75rem center; background-size: 1em; padding-right: 2.5rem; } .font-select::-ms-expand { display: none; } /* Color picker styling */ .color-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1rem; margin-bottom: 1.5rem; } .color-picker { position: relative; } .color-input-wrapper { display: flex; align-items: center; gap: 0.75rem; } input[type="color"] { -webkit-appearance: none; -moz-appearance: none; appearance: none; width: 48px; height: 48px; padding: 0; border: none; border-radius: 0.5rem; cursor: pointer; } input[type="color"]::-webkit-color-swatch-wrapper { padding: 0; } input[type="color"]::-webkit-color-swatch { border: none; border-radius: 0.5rem; box-shadow: inset 0 0 0 1px var(--border); } input[type="color"]::-moz-color-swatch { border: none; border-radius: 0.5rem; box-shadow: inset 0 0 0 1px var(--border); } .color-text { flex: 1; padding: 0.75rem; border: 1px solid var(--border); border-radius: 0.5rem; font-family: monospace; font-size: 0.95rem; text-transform: uppercase; } /* Slider styling */ .slider { -webkit-appearance: none; -moz-appearance: none; appearance: none; width: 100%; height: 6px; border-radius: 3px; background: var(--border); outline: none; margin-top: 0.5rem; } .slider::-webkit-slider-thumb { -webkit-appearance: none; -moz-appearance: none; appearance: none; width: 18px; height: 18px; border-radius: 50%; background: var(--primary); cursor: pointer; transition: transform 0.2s; } .slider::-webkit-slider-thumb:hover { transform: scale(1.1); } .slider::-moz-range-thumb { width: 18px; height: 18px; border-radius: 50%; background: var(--primary); cursor: pointer; border: none; transition: transform 0.2s; } .slider::-moz-range-thumb:hover { transform: scale(1.1); } /* Button styling */ .btn-group { display: flex; gap: 0.75rem; flex-wrap: wrap; } .btn { padding: 0.75rem 1.5rem; border: none; border-radius: 0.5rem; font-weight: 500; cursor: pointer; transition: all 0.2s; display: inline-flex; align-items: center; gap: 0.5rem; min-width: 120px; justify-content: center; } .btn:hover { transform: translateY(-2px); } .btn:disabled { opacity: 0.7; cursor: not-allowed; transform: none; } .btn-primary { background: var(--primary); color: white; } .btn-success { background: var(--success); color: white; } .btn-secondary { background: var(--secondary); color: white; } /* Preview container */ #preview-container { width: 100%; aspect-ratio: 16/9; border-radius: 0.75rem; overflow: hidden; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); background: var(--panel-bg); position: relative; } #quoteImage { width: 100%; height: 100%; object-fit: contain; transition: opacity 0.3s ease; } /* Loading states */ .loading { position: absolute; inset: 0; display: none; align-items: center; justify-content: center; background: rgba(0, 0, 0, 0.5); backdrop-filter: blur(4px); border-radius: 0.75rem; } .loading-content { display: flex; flex-direction: column; align-items: center; gap: 1rem; color: white; } .loading-spinner { width: 40px; height: 40px; border: 3px solid rgba(255, 255, 255, 0.3); border-radius: 50%; border-top-color: white; animation: spin 1s linear infinite; } .btn-loader { display: none; width: 20px; height: 20px; border: 2px solid #ffffff; border-radius: 50%; border-top-color: transparent; animation: spin 1s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } /* Modal styling */ .modal { display: none; position: fixed; inset: 0; background: rgba(0, 0, 0, 0.5); backdrop-filter: blur(4px); z-index: 1000; } .modal-content { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: var(--panel-bg); padding: 2rem; border-radius: 1rem; max-width: 600px; width: 90%; max-height: 80vh; overflow-y: auto; } .close-btn { position: absolute; right: 1.5rem; top: 1.5rem; font-size: 1.5rem; cursor: pointer; opacity: 0.7; transition: opacity 0.2s; color: var(--text); } .close-btn:hover { opacity: 1; } /* Request history styling */ .requests-list { margin-top: 1rem; } .request-item { background: var(--bg); border: 1px solid var(--border); border-radius: 0.5rem; padding: 1rem; margin-bottom: 1rem; } .request-time { font-size: 0.875rem; color: var(--secondary); margin-bottom: 0.5rem; } .request-data { font-family: monospace; font-size: 0.875rem; white-space: pre-wrap; overflow-x: auto; color: var(--text); } /* Status message */ #status { position: fixed; bottom: 2rem; right: 2rem; padding: 1rem 1.5rem; border-radius: 0.5rem; background: var(--panel-bg); box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); display: none; animation: slideIn 0.3s ease-out; z-index: 100; } @keyframes slideIn { from { transform: translateY(100%); opacity: 0; } to { transform: translateY(0); opacity: 1; } } /* Responsive design */ @media (max-width: 768px) { body { padding: 1rem; } .container { grid-template-columns: 1fr; } .color-grid { grid-template-columns: 1fr; } .font-selectors { grid-template-columns: 1fr; } .btn-group { flex-direction: column; } .btn { width: 100%; } .theme-toggle { top: 1rem; right: 1rem; } .modal-content { width: calc(100% - 2rem); margin: 1rem; } }