/** * Semble Quick Capture - Styles * Matches Semble's design system using Mantine-inspired styling * * @format */ /* ========== CSS Variables ========== */ :root { /* Semble Colors - Light Mode */ --tangerine-6: #ff6400; --tangerine-7: #e45800; --tangerine-8: #cb4d00; --stone-0: #fafaf9; --stone-1: #f5f5f4; --stone-2: #e7e5e4; --stone-3: #d6d3d1; --stone-4: #a8a29e; --stone-5: #78716c; --stone-6: #57534e; --stone-7: #44403c; --stone-8: #292524; --stone-9: #0c0a09; /* Semantic Colors - Light Mode */ --bg-default: #ffffff; --bg-subtle: var(--stone-0); --bg-filled: var(--stone-1); --text-primary: var(--stone-9); --text-secondary: var(--stone-6); --text-dimmed: var(--stone-5); --border-default: var(--stone-2); --border-subtle: var(--stone-1); --primary-color: var(--tangerine-6); --primary-hover: var(--tangerine-7); --primary-active: var(--tangerine-8); /* Filled button (dark) */ --filled-bg: var(--stone-8); --filled-hover: var(--stone-7); --filled-active: var(--stone-9); /* Error colors */ --error-bg: #fef2f2; --error-border: #fca5a5; --error-text: #991b1b; /* Success colors */ --success-bg: #f0fdf4; --success-border: #86efac; --success-text: #166534; /* Spacing */ --spacing-xs: 0.625rem; --spacing-sm: 0.75rem; --spacing-md: 1rem; --spacing-lg: 1.25rem; --spacing-xl: 1.5rem; /* Radius */ --radius-sm: 0.25rem; --radius-md: 0.5rem; --radius-lg: 0.75rem; --radius-xl: 1rem; /* Font sizes */ --font-size-xs: 0.75rem; --font-size-sm: 0.875rem; --font-size-md: 1rem; --font-size-lg: 1.125rem; --font-size-xl: 1.25rem; } /* Dark Mode */ @media (prefers-color-scheme: dark) { :root { /* Background colors */ --bg-default: var(--stone-9); --bg-subtle: var(--stone-8); --bg-filled: var(--stone-7); /* Text colors */ --text-primary: var(--stone-0); --text-secondary: var(--stone-3); --text-dimmed: var(--stone-4); /* Border colors */ --border-default: var(--stone-7); --border-subtle: var(--stone-8); /* Filled button stays dark in dark mode */ --filled-bg: var(--stone-1); --filled-hover: var(--stone-2); --filled-active: var(--stone-0); /* Error colors - dark mode */ --error-bg: #450a0a; --error-border: #7f1d1d; --error-text: #fca5a5; /* Success colors - dark mode */ --success-bg: #052e16; --success-border: #166534; --success-text: #86efac; } } /* ========== Base Styles ========== */ * { box-sizing: border-box; } body { width: 360px; min-height: 300px; max-height: 600px; margin: 0; padding: 0; font-family: 'Hanken Grotesk', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; font-size: var(--font-size-md); color: var(--text-primary); background-color: var(--bg-default); overflow-y: auto; } :focus { outline: 2px solid var(--primary-color); } /* ========== Layout Components ========== */ .screen { min-height: 300px; } .container { padding: var(--spacing-xl); } .header { display: flex; justify-content: space-between; align-items: center; padding: var(--spacing-md) var(--spacing-lg); background-color: var(--bg-default); border-bottom: 1px solid var(--border-default); } .header-title { font-size: var(--font-size-lg); font-weight: 700; margin: 0; color: var(--text-primary); } /* ========== Typography ========== */ .title { font-size: var(--font-size-xl); font-weight: 700; margin: 0 0 var(--spacing-sm) 0; color: var(--text-primary); } .subtitle { font-size: var(--font-size-sm); color: var(--text-secondary); margin: 0 0 var(--spacing-lg) 0; } .loading-text { font-size: var(--font-size-sm); color: var(--text-secondary); margin-top: var(--spacing-md); } /* ========== Form Components ========== */ .form-stack { display: flex; flex-direction: column; gap: var(--spacing-lg); } .form-group { display: flex; flex-direction: column; gap: var(--spacing-xs); } .form-label { font-size: var(--font-size-sm); font-weight: 600; color: var(--text-primary); } .form-hint { font-size: var(--font-size-sm); color: var(--text-dimmed); margin: 0; line-height: 1.4; } .form-link { color: var(--primary-color); text-decoration: none; font-weight: 500; transition: color 150ms ease; } .form-link:hover { color: var(--primary-hover); text-decoration: underline; } /* Filled Input Variant (Mantine style) */ .input-filled { width: 100%; padding: calc(var(--spacing-md) - 2px) var(--spacing-md); font-size: var(--font-size-md); font-family: inherit; color: var(--text-primary); background-color: var(--bg-filled); border: 2px solid transparent; border-radius: var(--radius-md); transition: all 150ms ease; } .input-filled::placeholder { color: var(--text-dimmed); } .input-filled:hover { background-color: var(--bg-subtle); } /* .input-filled:focus { outline: 1px solid; out- background-color: var(--bg-default); border-color: var(--primary-color); } */ .input-filled:disabled { opacity: 0.6; cursor: not-allowed; } /* Textarea specific */ textarea.input-filled { resize: vertical; min-height: 80px; font-family: inherit; } /* Select specific */ select.input-filled { cursor: pointer; appearance: none; background-image: url('data:image/svg+xml,'); background-repeat: no-repeat; background-position: right var(--spacing-md) center; padding-right: calc(var(--spacing-md) * 2.5); } @media (prefers-color-scheme: dark) { select.input-filled { background-image: url('data:image/svg+xml,'); } } /* ========== Buttons ========== */ .btn { width: 100%; padding: var(--spacing-md) var(--spacing-lg); font-size: var(--font-size-md); font-weight: 600; font-family: inherit; border: none; border-radius: var(--radius-xl); cursor: pointer; transition: all 150ms ease; display: flex; align-items: center; justify-content: center; gap: var(--spacing-sm); } .btn-primary { background-color: var(--primary-color); color: white; } .btn-primary:hover:not(:disabled) { background-color: var(--primary-hover); } .btn-primary:active:not(:disabled) { background-color: var(--primary-active); transform: translateY(1px); } .btn-primary:disabled { opacity: 0.4; cursor: not-allowed; } .btn-link { background: none; border: none; padding: var(--spacing-xs) var(--spacing-sm); font-size: var(--font-size-sm); font-weight: 500; font-family: inherit; color: var(--text-secondary); cursor: pointer; border-radius: var(--radius-md); transition: all 150ms ease; } .btn-link:hover { color: var(--text-primary); background-color: var(--bg-subtle); } /* ========== URL Display ========== */ .url-display { padding: var(--spacing-md); font-size: var(--font-size-sm); color: var(--text-secondary); background-color: var(--bg-filled); border: 1px solid var(--border-default); border-radius: var(--radius-md); word-break: break-all; max-height: 100px; overflow-y: auto; } /* ========== Alerts ========== */ .alert { padding: var(--spacing-md); border-radius: var(--radius-md); font-size: var(--font-size-sm); border: 1px solid; } .alert-error { background-color: var(--error-bg); border-color: var(--error-border); color: var(--error-text); } .alert-success { background-color: var(--success-bg); border-color: var(--success-border); color: var(--success-text); } .alert-loading { background-color: var(--bg-filled); border-color: var(--border-default); color: var(--text-secondary); } /* ========== Loading Spinner ========== */ .loading-container { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 300px; } .spinner { width: 32px; height: 32px; border: 3px solid var(--border-default); border-top-color: var(--primary-color); border-radius: 50%; animation: spin 0.8s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } /* ========== Utility Classes ========== */ .hidden { display: none !important; }