/* * ============================================================================= * VibeQuant (vquant) — AI-Powered Financial Intelligence Platform * ----------------------------------------------------------------------------- * File: desktop/setup.css * * Author: Simon-Pierre Boucher * Contact: contact@spboucher.ai * Website: https://www.spboucher.ai * Demo: https://www.vquant.ai * License: MIT (see LICENSE) * * Copyright © 2026 Simon-Pierre Boucher. All rights reserved. * ============================================================================= */ * { margin: 0; padding: 0; box-sizing: border-box; } :root { --bg: #ffffff; --bg-secondary: #f5f5f7; --bg-tertiary: #e8e8ed; --text: #1d1d1f; --text-secondary: #6e6e73; --text-tertiary: #86868b; --border: #d2d2d7; --accent: #0071e3; --accent-hover: #0077ED; --error: #ff3b30; --error-bg: #fff2f0; --badge-required: #ff3b30; --badge-optional: #86868b; --input-bg: #ffffff; --input-border: #d2d2d7; --input-focus: #0071e3; } [data-theme="dark"] { --bg: #1a1a1a; --bg-secondary: #2a2a2a; --bg-tertiary: #3a3a3a; --text: #f5f5f7; --text-secondary: #a1a1a6; --text-tertiary: #86868b; --border: #424245; --accent: #2997ff; --accent-hover: #4db1ff; --error: #ff453a; --error-bg: #3a1a18; --badge-required: #ff453a; --badge-optional: #6e6e73; --input-bg: #2a2a2a; --input-border: #424245; --input-focus: #2997ff; } body { font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Helvetica Neue', sans-serif; background: var(--bg); color: var(--text); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; overflow: hidden; height: 100vh; } .drag-region { position: fixed; top: 0; left: 0; right: 0; height: 52px; -webkit-app-region: drag; z-index: 100; } .container { max-width: 560px; margin: 0 auto; padding: 64px 32px 24px; height: 100vh; overflow-y: auto; } .header { text-align: center; margin-bottom: 24px; } .logo { display: inline-flex; align-items: center; justify-content: center; width: 56px; height: 56px; border-radius: 14px; background: linear-gradient(135deg, var(--accent), #5856d6); color: white; margin-bottom: 16px; } h1 { font-size: 28px; font-weight: 700; letter-spacing: -0.5px; color: var(--text); } .subtitle { font-size: 14px; color: var(--text-secondary); margin-top: 4px; } .description { text-align: center; margin-bottom: 28px; } .description p { font-size: 13px; color: var(--text-secondary); line-height: 1.5; } .section { margin-bottom: 20px; } .section h2 { font-size: 13px; font-weight: 600; color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 14px; display: flex; align-items: center; gap: 8px; } .badge { display: inline-block; font-size: 10px; font-weight: 600; padding: 2px 8px; border-radius: 4px; text-transform: uppercase; letter-spacing: 0.5px; } .badge.required { background: var(--badge-required); color: white; } .badge.optional { background: var(--bg-tertiary); color: var(--text-secondary); } .field { margin-bottom: 14px; } .field label { display: block; font-size: 13px; font-weight: 500; color: var(--text); margin-bottom: 6px; } .field input { width: 100%; height: 38px; padding: 0 12px; font-size: 13px; font-family: 'SF Mono', 'Fira Code', monospace; background: var(--input-bg); border: 1px solid var(--input-border); border-radius: 8px; color: var(--text); outline: none; transition: border-color 0.2s, box-shadow 0.2s; } .field input:focus { border-color: var(--input-focus); box-shadow: 0 0 0 3px color-mix(in srgb, var(--input-focus) 20%, transparent); } .field input::placeholder { color: var(--text-tertiary); font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', sans-serif; } .hint { display: block; font-size: 11px; color: var(--text-tertiary); margin-top: 4px; } .hint a { color: var(--accent); text-decoration: none; cursor: pointer; } .hint a:hover { text-decoration: underline; } .collapsible-btn { display: flex; align-items: center; justify-content: space-between; width: 100%; padding: 10px 14px; font-size: 13px; font-weight: 500; color: var(--text-secondary); background: var(--bg-secondary); border: 1px solid var(--border); border-radius: 8px; cursor: pointer; transition: background 0.2s; } .collapsible-btn:hover { background: var(--bg-tertiary); } .chevron { transition: transform 0.2s; } .optional-fields { margin-top: 14px; } .error { padding: 10px 14px; background: var(--error-bg); border: 1px solid var(--error); border-radius: 8px; color: var(--error); font-size: 13px; margin-bottom: 16px; } .loading { display: flex; align-items: center; justify-content: center; gap: 10px; padding: 14px; margin-bottom: 16px; font-size: 13px; color: var(--text-secondary); } .spinner { width: 18px; height: 18px; border: 2px solid var(--border); border-top-color: var(--accent); border-radius: 50%; animation: spin 0.8s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } .submit-btn { width: 100%; height: 44px; font-size: 15px; font-weight: 600; color: white; background: var(--accent); border: none; border-radius: 10px; cursor: pointer; transition: background 0.2s, transform 0.1s; } .submit-btn:hover:not(:disabled) { background: var(--accent-hover); } .submit-btn:active:not(:disabled) { transform: scale(0.98); } .submit-btn:disabled { opacity: 0.5; cursor: not-allowed; } .footer { display: flex; justify-content: center; gap: 8px; margin-top: 24px; font-size: 11px; color: var(--text-tertiary); } ::-webkit-scrollbar { width: 6px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: var(--text-tertiary); }