/* Veola — Sega-blue palette and component overrides for Tailwind play CDN. */ :root { --bg: #16224f; --surface: #243a93; --surface-2: #2c47ad; --accent: #00a4e4; --yellow: #f5c400; --text: #ffffff; --text-2: #a8c0f0; --danger: #e84040; --success: #00e4a4; --border: rgba(255, 255, 255, 0.12); --shadow: 0 4px 16px rgba(0, 0, 80, 0.4); } html, body { background: var(--bg); color: var(--text); font-family: 'Outfit', system-ui, sans-serif; } .font-mono { font-family: 'JetBrains Mono', ui-monospace, monospace; } a { color: var(--accent); } a:hover { text-decoration: underline; } /* Solid surfaces, per the spec's "blue mode": no glassmorphism, no blur. A clear value gap between --bg and --surface is what lifts cards off the page; a 1px top highlight + soft blue shadow gives the cartridge edge. */ .v-card { position: relative; isolation: isolate; background: var(--surface); border: 1px solid var(--border); border-radius: 12px; box-shadow: 0 1px 2px rgba(0, 0, 40, 0.25); transition: box-shadow 180ms ease, border-color 180ms ease; } .v-card:hover { border-color: rgba(255, 255, 255, 0.2); box-shadow: 0 2px 8px rgba(0, 0, 40, 0.3); } .v-card-flat { position: relative; isolation: isolate; background: var(--surface); border: 1px solid var(--border); border-radius: 10px; } .v-divider { border-top: 1px solid var(--border); } /* --- Console readout / page header system ------------------------------- The dashboard's signature: a mono "terminal" kicker over a heavy display title, and the Spend/Saved pair styled as an arcade scoreboard readout. JetBrains Mono is the machine voice here (labels, counts); Outfit carries the title. */ .v-kicker { font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 0.72rem; font-weight: 500; letter-spacing: 0.22em; text-transform: uppercase; color: var(--accent); } .v-kicker .v-kicker-sep { color: var(--text-2); opacity: 0.6; } .v-kicker .v-kicker-dim { color: var(--text-2); } /* --- Refined header + metric system ------------------------------------- Calm and spacious: type and whitespace carry the page. No glow, no uppercase-mono labels, no accent rules. Mono is reserved for the numbers themselves; Outfit carries everything else. */ .v-page-title { font-family: 'Outfit', system-ui, sans-serif; font-size: 1.9rem; font-weight: 600; letter-spacing: -0.015em; line-height: 1.1; text-shadow: none; } .v-page-sub { color: var(--text-2); font-size: 0.95rem; margin-top: 0.3rem; } /* Hero metric: a small quiet label over a large clean number. Presented in open space with a hairline, not a boxed card. */ .v-metric-label { color: var(--text-2); font-size: 0.82rem; letter-spacing: 0.01em; } .v-metric-value { font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: clamp(2rem, 3.8vw, 2.75rem); font-weight: 600; line-height: 1.05; margin-top: 0.45rem; } .v-metric-value.v-price-deal { color: var(--success); } .v-metric-sub { color: var(--text-2); font-size: 0.82rem; margin-top: 0.5rem; } /* Secondary stat: smaller label/number pair for the supporting counts. */ .v-stat-label { color: var(--text-2); font-size: 0.78rem; letter-spacing: 0.01em; } .v-stat-value { font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 1.5rem; font-weight: 600; line-height: 1; margin-top: 0.3rem; } /* Understated section heading for list panels — sized to sit below the page title, sentence case, no glow. */ .v-section-title { font-family: 'Outfit', system-ui, sans-serif; font-size: 0.95rem; font-weight: 600; letter-spacing: 0; color: var(--text); text-shadow: none; } /* Hairline used to separate open sections instead of boxing them. */ .v-rule { border: 0; border-top: 1px solid var(--border); } /* Small uppercase group label inside forms (item form sections). */ .v-form-section-title { font-size: 0.74rem; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-2); } /* Quiet empty-state line. */ .v-empty { color: var(--text-2); font-size: 0.9rem; padding: 0.4rem 0; } /* --- Product feed (thumbnails) ------------------------------------------ Listing thumbnails are what give the data life. A square cropped image, the listing title as the line that earns its space, price on the right. */ .v-thumb { width: 52px; height: 52px; flex: none; border-radius: 8px; object-fit: cover; background: var(--surface-2); border: 1px solid var(--border); display: block; } .v-thumb-empty { display: flex; align-items: center; justify-content: center; color: var(--text-2); font-size: 1.1rem; font-weight: 600; text-transform: uppercase; } /* Compact variant for table rows. */ .v-thumb-sm { width: 40px; height: 40px; border-radius: 7px; } .v-thumb-sm.v-thumb-empty { font-size: 0.9rem; } .v-feed { display: block; } .v-feed-row { display: flex; align-items: center; gap: 0.85rem; padding: 0.7rem 0; border-bottom: 1px solid rgba(255, 255, 255, 0.05); } .v-feed-row:last-child { border-bottom: 0; } .v-feed-name { display: block; font-weight: 500; color: var(--text); } a.v-feed-name:hover { color: var(--accent); text-decoration: none; } .v-feed-meta { color: var(--text-2); font-size: 0.8rem; margin-top: 0.15rem; } .v-feed-price { flex: none; white-space: nowrap; } .v-btn { background: var(--accent); color: white; border-radius: 6px; padding: 0.5rem 1rem; font-weight: 600; transition: filter 0.1s ease; cursor: pointer; display: inline-flex; align-items: center; gap: 0.4rem; } .v-btn:hover { filter: brightness(1.1); } .v-btn[disabled] { opacity: 0.5; cursor: not-allowed; } .v-btn-ghost { background: transparent; color: var(--text); border: 1px solid var(--border); border-radius: 6px; padding: 0.5rem 1rem; cursor: pointer; } .v-btn-ghost:hover { background: rgba(255,255,255,0.05); } .v-btn-danger { background: var(--danger); color: white; border-radius: 6px; padding: 0.5rem 1rem; cursor: pointer; } .v-input, .v-select, .v-textarea { background: rgba(0, 0, 0, 0.25); color: var(--text); border: 1px solid var(--border); border-radius: 6px; padding: 0.5rem 0.75rem; width: 100%; font-family: inherit; } .v-input:focus, .v-select:focus, .v-textarea:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(0, 164, 228, 0.25); } .v-label { display: block; color: var(--text-2); font-size: 0.85rem; margin-bottom: 0.3rem; letter-spacing: 0.01em; } .v-pill { display: inline-block; padding: 0.15rem 0.55rem; border-radius: 999px; font-size: 0.75rem; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; } .v-pill-active { background: var(--accent); color: white; } .v-pill-paused { background: rgba(255,255,255,0.1); color: var(--text-2); } .v-pill-error { background: var(--danger); color: white; } .v-price { font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 1.5rem; } .v-price-target { color: var(--yellow); } .v-price-deal { color: var(--success); } .v-side-nav { background: var(--surface); border-right: 1px solid var(--border); width: 220px; min-height: 100vh; position: sticky; top: 0; } .v-side-nav a { display: flex; align-items: center; gap: 0.6rem; padding: 0.7rem 1rem; color: var(--text-2); text-decoration: none; border-left: 3px solid transparent; } .v-side-nav a.active { background: var(--surface-2); border-left-color: var(--accent); color: white; } .v-side-nav a:hover { color: white; } /* Sign-out button, styled to read like a nav link (it lives in a