diff options
| author | Christian Cleberg <[email protected]> | 2026-04-18 22:32:53 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-04-18 22:32:53 -0500 |
| commit | 580e798e16346eb894eb899edac82d2efdf40adc (patch) | |
| tree | 6dec3b7db678f781138b40d34da37d21ac8fbe7d /src/styles/globals.css | |
| download | brand-bench-580e798e16346eb894eb899edac82d2efdf40adc.tar.gz brand-bench-580e798e16346eb894eb899edac82d2efdf40adc.tar.bz2 brand-bench-580e798e16346eb894eb899edac82d2efdf40adc.zip | |
initial commit
Diffstat (limited to 'src/styles/globals.css')
| -rw-r--r-- | src/styles/globals.css | 1594 |
1 files changed, 1594 insertions, 0 deletions
diff --git a/src/styles/globals.css b/src/styles/globals.css new file mode 100644 index 0000000..8fb1ae3 --- /dev/null +++ b/src/styles/globals.css @@ -0,0 +1,1594 @@ +/* ── Reset ───────────────────────────────────────────────────────────────── */ + +*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } +html { font-size: 14px; } + +/* ── Tokens ──────────────────────────────────────────────────────────────── */ + +:root { + --bg: #0d0d0d; + --bg-1: #111111; + --bg-2: #161616; + --bg-3: #1c1c1c; + --bg-4: #222222; + + --border: #242424; + --border-2: #1a1a1a; + --border-3: #2e2e2e; + + --text: #dedede; + --text-2: #999999; + --text-3: #555555; + --text-4: #333333; + + --accent: #c9a96e; + --accent-dim: #7a6341; + + --success: #4a9470; + --danger: #8a3030; + + --font-sans: ui-sans-serif, -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif; + --font-mono: ui-monospace, 'JetBrains Mono', 'Fira Code', 'Cascadia Code', Menlo, monospace; + + --r: 4px; + --r-lg: 6px; + --header-h: 44px; + --panel-w: 360px; +} + +/* ── Base ────────────────────────────────────────────────────────────────── */ + +body { + background: var(--bg); + color: var(--text); + font-family: var(--font-sans); + font-size: 13px; + line-height: 1.5; + -webkit-font-smoothing: antialiased; + overflow: hidden; + height: 100vh; +} + +#root { height: 100vh; display: flex; flex-direction: column; } + +/* ── App Header ──────────────────────────────────────────────────────────── */ + +.app-header { + height: var(--header-h); + min-height: var(--header-h); + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 16px; + border-bottom: 1px solid var(--border); + background: var(--bg-1); + flex-shrink: 0; + gap: 12px; +} + +.app-header-left { + display: flex; + align-items: center; + gap: 12px; + min-width: 0; +} + +.app-wordmark { + font-size: 12px; + font-weight: 600; + letter-spacing: 0.05em; + color: var(--text); + text-transform: uppercase; + flex-shrink: 0; +} + +.app-wordmark span { + color: var(--text-3); + font-weight: 400; +} + +.app-project-name { + font-size: 12px; + color: var(--text-3); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.app-project-name::before { + content: '/ '; + color: var(--text-4); +} + +.app-header-right { + display: flex; + align-items: center; + gap: 6px; + flex-shrink: 0; +} + +/* ── Package Switcher ────────────────────────────────────────────────────── */ + +.pkg-switcher { + display: flex; + align-items: center; + gap: 2px; + overflow-x: auto; + scrollbar-width: none; + max-width: 480px; +} + +.pkg-switcher::-webkit-scrollbar { display: none; } + +.pkg-tab { + display: flex; + align-items: center; + gap: 4px; + padding: 0 8px; + height: 26px; + border-radius: var(--r); + border: 1px solid transparent; + font-size: 12px; + color: var(--text-3); + cursor: pointer; + white-space: nowrap; + user-select: none; + transition: all 0.1s; + flex-shrink: 0; +} + +.pkg-tab:hover { + background: var(--bg-3); + color: var(--text-2); +} + +.pkg-tab.active { + background: var(--bg-3); + border-color: var(--border); + color: var(--text); +} + +.pkg-tab-name { + max-width: 120px; + overflow: hidden; + text-overflow: ellipsis; +} + +.pkg-tab-input { + width: 100px; + background: transparent; + border: none; + outline: none; + font-size: 12px; + font-family: inherit; + color: var(--text); + padding: 0; +} + +.pkg-tab-actions { + display: flex; + align-items: center; + gap: 2px; + margin-left: 2px; + opacity: 0; + transition: opacity 0.1s; +} + +.pkg-tab:hover .pkg-tab-actions, +.pkg-tab.active .pkg-tab-actions { + opacity: 1; +} + +.pkg-tab-close, .pkg-tab-menu-btn { + background: none; + border: none; + color: var(--text-4); + cursor: pointer; + font-size: 12px; + padding: 0 2px; + line-height: 1; + display: flex; + align-items: center; + border-radius: 2px; + height: 16px; +} + +.pkg-tab-close:hover, .pkg-tab-menu-btn:hover { + background: var(--bg-4); + color: var(--text-2); +} + +.pkg-tab-menu-btn { + letter-spacing: -1px; + font-size: 10px; +} + +.pkg-tab-dropdown { + background: var(--bg-3); + border: 1px solid var(--border-3); + border-radius: var(--r-lg); + padding: 4px; + z-index: 100; + min-width: 120px; + box-shadow: 0 4px 16px rgba(0,0,0,0.4); +} + +.pkg-tab-dropdown button { + display: block; + width: 100%; + text-align: left; + background: none; + border: none; + color: var(--text-2); + font-size: 12px; + font-family: inherit; + padding: 5px 8px; + border-radius: var(--r); + cursor: pointer; +} + +.pkg-tab-dropdown button:hover { + background: var(--bg-4); + color: var(--text); +} + +.pkg-tab-dropdown button.danger { color: #c04040; } +.pkg-tab-dropdown button.danger:hover { background: rgba(192,64,64,0.15); } + +.pkg-new-btn { + width: 26px; + height: 26px; + border-radius: var(--r); + border: 1px dashed var(--border-3); + background: none; + color: var(--text-4); + font-size: 16px; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + transition: all 0.1s; +} + +.pkg-new-btn:hover { + border-color: var(--text-3); + color: var(--text-2); + background: var(--bg-3); +} + +/* ── App Shell ───────────────────────────────────────────────────────────── */ + +.app-shell { + display: flex; + flex: 1; + min-height: 0; + overflow: hidden; +} + +/* ── Input Panel ─────────────────────────────────────────────────────────── */ + +.input-panel { + width: var(--panel-w); + min-width: var(--panel-w); + border-right: 1px solid var(--border); + display: flex; + flex-direction: column; + overflow-y: auto; + background: var(--bg-1); +} + +.input-panel::-webkit-scrollbar { width: 4px; } +.input-panel::-webkit-scrollbar-track { background: transparent; } +.input-panel::-webkit-scrollbar-thumb { background: var(--border-3); border-radius: 2px; } + +.input-section { + padding: 16px; + border-bottom: 1px solid var(--border-2); +} + +.input-section:last-of-type { border-bottom: none; } + +.input-section-label { + font-size: 10px; + font-weight: 600; + letter-spacing: 0.1em; + text-transform: uppercase; + color: var(--text-3); + margin-bottom: 12px; +} + +/* ── Form Fields ─────────────────────────────────────────────────────────── */ + +.field { + display: flex; + flex-direction: column; + gap: 5px; + margin-bottom: 10px; +} + +.field:last-child { margin-bottom: 0; } + +.field-label { + font-size: 11px; + color: var(--text-2); + font-weight: 500; +} + +.field-input, +.field-textarea { + background: var(--bg); + border: 1px solid var(--border); + border-radius: var(--r); + color: var(--text); + font-family: var(--font-sans); + font-size: 13px; + padding: 7px 10px; + width: 100%; + transition: border-color 0.1s; + outline: none; +} + +.field-input::placeholder, +.field-textarea::placeholder { + color: var(--text-4); +} + +.field-input:focus, +.field-textarea:focus { + border-color: var(--border-3); +} + +.field-textarea { + resize: vertical; + min-height: 72px; + line-height: 1.5; +} + +/* ── Token Input ─────────────────────────────────────────────────────────── */ + +.token-field { + display: flex; + flex-direction: column; + gap: 5px; +} + +.token-container { + display: flex; + flex-wrap: wrap; + gap: 5px; + background: var(--bg); + border: 1px solid var(--border); + border-radius: var(--r); + padding: 6px; + min-height: 36px; + cursor: text; + transition: border-color 0.1s; +} + +.token-container:focus-within { + border-color: var(--border-3); +} + +.token { + display: flex; + align-items: center; + gap: 4px; + background: var(--bg-3); + border: 1px solid var(--border); + border-radius: 3px; + padding: 2px 7px 2px 8px; + font-size: 12px; + color: var(--text-2); + line-height: 1; + height: 22px; +} + +.token-remove { + background: none; + border: none; + color: var(--text-3); + cursor: pointer; + font-size: 14px; + line-height: 1; + padding: 0; + display: flex; + align-items: center; + margin-left: 1px; + opacity: 0.7; +} + +.token-remove:hover { color: var(--text); opacity: 1; } + +.token-input { + background: none; + border: none; + color: var(--text); + font-family: var(--font-sans); + font-size: 12px; + outline: none; + min-width: 80px; + flex: 1; + padding: 2px 2px; +} + +.token-input::placeholder { color: var(--text-4); } + +.token-suggestions { + display: flex; + flex-wrap: wrap; + gap: 4px; + margin-top: 6px; +} + +.token-suggestion { + background: none; + border: 1px solid var(--border); + border-radius: 3px; + color: var(--text-3); + cursor: pointer; + font-family: var(--font-sans); + font-size: 11px; + padding: 2px 7px; + transition: all 0.1s; +} + +.token-suggestion:hover { + border-color: var(--border-3); + color: var(--text-2); +} + +.token-suggestion.active { + background: var(--bg-3); + border-color: var(--border-3); + color: var(--text); +} + +/* ── Generate Button ─────────────────────────────────────────────────────── */ + +.generate-area { + padding: 12px 16px 16px; +} + +.btn-generate { + width: 100%; + background: var(--text); + border: none; + border-radius: var(--r); + color: var(--bg); + cursor: pointer; + font-family: var(--font-sans); + font-size: 13px; + font-weight: 600; + height: 36px; + letter-spacing: 0.01em; + transition: opacity 0.1s, background 0.1s; +} + +.btn-generate:hover:not(:disabled) { + opacity: 0.9; +} + +.btn-generate:disabled { + opacity: 0.4; + cursor: not-allowed; +} + +.btn-generate.generating { + background: var(--bg-3); + color: var(--text-2); +} + +/* ── Shared Buttons ──────────────────────────────────────────────────────── */ + +.btn { + align-items: center; + background: var(--bg-3); + border: 1px solid var(--border); + border-radius: var(--r); + color: var(--text-2); + cursor: pointer; + display: inline-flex; + font-family: var(--font-sans); + font-size: 12px; + gap: 5px; + height: 28px; + padding: 0 10px; + transition: all 0.1s; + white-space: nowrap; +} + +.btn:hover { + border-color: var(--border-3); + color: var(--text); +} + +.btn-ghost { + background: none; + border-color: transparent; + color: var(--text-3); +} + +.btn-ghost:hover { + background: var(--bg-3); + border-color: var(--border); + color: var(--text-2); +} + +.btn-icon { + padding: 0; + width: 28px; + justify-content: center; +} + +/* ── Preview Panel ───────────────────────────────────────────────────────── */ + +.preview-panel { + flex: 1; + min-width: 0; + display: flex; + flex-direction: column; + overflow: hidden; + background: var(--bg); +} + +.preview-toolbar { + height: 40px; + min-height: 40px; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 20px; + border-bottom: 1px solid var(--border-2); + background: var(--bg); + flex-shrink: 0; + gap: 12px; +} + +.preview-toolbar-left { + display: flex; + align-items: center; + gap: 10px; +} + +.preview-toolbar-right { + display: flex; + align-items: center; + gap: 6px; +} + +.preview-doc-label { + font-size: 11px; + color: var(--text-3); + font-weight: 500; +} + +.preview-scroll { + flex: 1; + overflow-y: auto; + padding: 40px 48px 80px; +} + +.preview-scroll::-webkit-scrollbar { width: 6px; } +.preview-scroll::-webkit-scrollbar-track { background: transparent; } +.preview-scroll::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; } + +/* ── Empty State ─────────────────────────────────────────────────────────── */ + +.empty-state { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; + gap: 8px; + color: var(--text-4); +} + +.empty-state-title { + font-size: 14px; + color: var(--text-3); + font-weight: 500; +} + +.empty-state-sub { + font-size: 12px; + color: var(--text-4); +} + +/* ── Brand Document ──────────────────────────────────────────────────────── */ + +.brand-doc { + max-width: 720px; +} + +.brand-doc-header { + margin-bottom: 40px; + padding-bottom: 24px; + border-bottom: 1px solid var(--border-2); +} + +.brand-doc-title { + font-size: 28px; + font-weight: 600; + letter-spacing: -0.02em; + color: var(--text); + line-height: 1.2; + margin-bottom: 6px; +} + +.brand-doc-meta { + font-size: 11px; + color: var(--text-3); + display: flex; + gap: 12px; +} + +.brand-doc-meta-item { + display: flex; + gap: 5px; +} + +.brand-doc-meta-label { + color: var(--text-4); +} + +/* ── Doc Section ─────────────────────────────────────────────────────────── */ + +.doc-section { + margin-bottom: 36px; + border-radius: var(--r); + padding: 2px; + margin: -2px -2px 36px; +} + +.doc-section.is-locked { + background: rgba(201, 169, 110, 0.025); +} + +.doc-section-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 14px; + gap: 8px; +} + +.doc-section-title { + font-size: 10px; + font-weight: 600; + letter-spacing: 0.12em; + text-transform: uppercase; + color: var(--text-3); + display: flex; + align-items: center; + gap: 7px; +} + +.section-lock { + background: none; + border: 1px solid transparent; + border-radius: 3px; + color: var(--text-4); + cursor: pointer; + font-family: var(--font-sans); + font-size: 10px; + letter-spacing: 0.04em; + padding: 2px 6px; + height: 20px; + display: inline-flex; + align-items: center; + transition: all 0.1s; + line-height: 1; + white-space: nowrap; +} + +.section-lock:hover { + border-color: var(--border); + color: var(--text-3); + background: var(--bg-3); +} + +.section-lock.locked { + color: var(--accent); + border-color: var(--accent-dim); + background: rgba(201, 169, 110, 0.06); +} + +.doc-section-actions { + display: flex; + align-items: center; + gap: 4px; + opacity: 0; + transition: opacity 0.15s; +} + +.doc-section:hover .doc-section-actions { opacity: 1; } +.doc-section .doc-section-actions:has(.section-lock.locked) { opacity: 1; } + +.doc-section-body { + border-left: 1px solid var(--border); + padding-left: 16px; +} + +.doc-section.is-locked .doc-section-body { + border-left-color: var(--accent-dim); + border-left-width: 2px; +} + +/* ── Editable Text ───────────────────────────────────────────────────────── */ + +.editable-text { + cursor: text; + border-radius: 3px; + transition: background 0.1s, outline 0.1s; + line-height: 1.65; + font-size: 14px; + color: var(--text); + min-height: 1em; + outline: 1px solid transparent; +} + +.editable-text:hover { + background: var(--bg-2); + outline-color: var(--border-2); +} + +.editable-text.editing { + background: var(--bg-2); + outline: 1px solid var(--border-3); + border-radius: 3px; +} + +/* ── Numbered List ───────────────────────────────────────────────────────── */ + +.numbered-list { + display: flex; + flex-direction: column; + gap: 8px; +} + +.numbered-item { + display: flex; + gap: 10px; + align-items: flex-start; +} + +.numbered-item-num { + font-size: 11px; + color: var(--text-4); + font-family: var(--font-mono); + min-width: 16px; + margin-top: 2px; + flex-shrink: 0; +} + +.numbered-item-text { + flex: 1; + font-size: 14px; + color: var(--text); + line-height: 1.5; + cursor: text; + border-radius: 3px; + padding: 1px 4px; + margin: -1px -4px; + transition: background 0.1s; +} + +.numbered-item-text:hover { background: var(--bg-2); } +.numbered-item-text:focus { background: var(--bg-2); outline: 1px solid var(--border-3); } + +/* ── Bullet List ─────────────────────────────────────────────────────────── */ + +.bullet-list { + display: flex; + flex-direction: column; + gap: 6px; +} + +.bullet-item { + display: flex; + gap: 8px; + align-items: flex-start; + font-size: 13px; + color: var(--text-2); + line-height: 1.5; +} + +.bullet-item::before { + content: '–'; + color: var(--text-4); + flex-shrink: 0; + margin-top: 0; +} + +/* ── Tone Section ────────────────────────────────────────────────────────── */ + +.tone-grid { + display: flex; + flex-direction: column; + gap: 12px; +} + +.tone-row { + display: flex; + flex-direction: column; + gap: 4px; +} + +.tone-row-label { + font-size: 11px; + color: var(--text-3); + font-weight: 500; +} + +.tone-row-value { + font-size: 13px; + color: var(--text-2); + line-height: 1.55; +} + +.tone-tags { + display: flex; + flex-wrap: wrap; + gap: 5px; +} + +.tone-tag { + background: var(--bg-3); + border: 1px solid var(--border); + border-radius: 3px; + color: var(--text-2); + font-size: 11px; + padding: 2px 8px; +} + +.tone-phrases { + display: flex; + flex-direction: column; + gap: 5px; +} + +.tone-phrase { + font-family: var(--font-mono); + font-size: 12px; + color: var(--text-2); + padding: 5px 8px; + background: var(--bg-2); + border-radius: 3px; + border-left: 2px solid var(--border-3); +} + +/* ── Visual Directions ───────────────────────────────────────────────────── */ + +.directions-grid { + display: flex; + flex-direction: column; + gap: 20px; +} + +.direction-card { + border: 1px solid var(--border); + border-radius: var(--r-lg); + padding: 16px; + background: var(--bg-1); +} + +.direction-name { + font-size: 13px; + font-weight: 600; + color: var(--text); + margin-bottom: 8px; +} + +.direction-desc { + font-size: 13px; + color: var(--text-2); + line-height: 1.6; + margin-bottom: 12px; +} + +.direction-attrs { + display: flex; + flex-direction: column; + gap: 6px; +} + +.direction-attr { + display: flex; + gap: 8px; + font-size: 12px; + line-height: 1.5; +} + +.direction-attr-label { + color: var(--text-4); + font-weight: 500; + min-width: 88px; + flex-shrink: 0; +} + +.direction-attr-value { + color: var(--text-2); +} + +/* ── Logo Concepts ───────────────────────────────────────────────────────── */ + +.logo-grid { + display: flex; + flex-direction: column; + gap: 20px; +} + +.logo-card { + border: 1px solid var(--border); + border-radius: var(--r-lg); + padding: 16px; + background: var(--bg-1); +} + +.logo-card-title { + font-size: 13px; + font-weight: 600; + color: var(--text); + margin-bottom: 8px; +} + +.logo-card-concept { + font-size: 13px; + color: var(--text-2); + line-height: 1.6; + margin-bottom: 12px; +} + +.logo-card-attrs { + display: flex; + flex-direction: column; + gap: 6px; +} + +.logo-card-attr { + display: flex; + gap: 8px; + font-size: 12px; + line-height: 1.5; +} + +.logo-card-attr-label { + color: var(--text-4); + font-weight: 500; + min-width: 72px; + flex-shrink: 0; +} + +.logo-card-attr-value { + color: var(--text-2); +} + +/* ── Usage Examples ──────────────────────────────────────────────────────── */ + +.usage-grid { + display: flex; + flex-direction: column; + gap: 16px; +} + +.usage-item { + display: flex; + flex-direction: column; + gap: 6px; +} + +.usage-context { + font-size: 10px; + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + color: var(--text-4); +} + +.usage-text { + font-family: var(--font-mono); + font-size: 12px; + color: var(--text-2); + background: var(--bg-2); + border: 1px solid var(--border-2); + border-radius: var(--r); + padding: 10px 12px; + white-space: pre-wrap; + line-height: 1.6; + position: relative; +} + +.usage-copy { + position: absolute; + top: 6px; + right: 6px; + opacity: 0; + transition: opacity 0.1s; +} + +.usage-item:hover .usage-copy { opacity: 1; } + +/* ── Typography Section ──────────────────────────────────────────────────── */ + +.type-section { + display: flex; + flex-direction: column; + gap: 20px; +} + +.type-fonts { + display: flex; + flex-direction: column; + gap: 6px; +} + +.type-font-row { + display: flex; + align-items: baseline; + gap: 10px; + font-size: 13px; +} + +.type-font-role { + font-size: 11px; + color: var(--text-4); + font-weight: 500; + min-width: 80px; + flex-shrink: 0; +} + +.type-font-name { + color: var(--text); + font-weight: 500; +} + +.type-pair-note { + font-size: 12px; + color: var(--text-3); + margin-top: 4px; +} + +.type-scale { + display: flex; + flex-direction: column; +} + +.type-scale-header { + display: grid; + grid-template-columns: 90px 52px 56px 1fr; + gap: 0 12px; + font-size: 10px; + font-weight: 600; + color: var(--text-4); + letter-spacing: 0.06em; + text-transform: uppercase; + padding: 0 0 6px; + border-bottom: 1px solid var(--border-2); +} + +.type-scale-row { + display: grid; + grid-template-columns: 90px 52px 56px 1fr; + gap: 0 12px; + font-size: 12px; + padding: 7px 0; + border-bottom: 1px solid var(--border-2); + align-items: center; +} + +.type-scale-row:last-child { border-bottom: none; } + +.type-scale-label { color: var(--text-2); font-weight: 500; } +.type-scale-size { color: var(--text-3); font-family: var(--font-mono); } +.type-scale-weight{ color: var(--text-3); font-family: var(--font-mono); } +.type-scale-usage { color: var(--text-4); } + +/* ── Color Palette ───────────────────────────────────────────────────────── */ + +.color-palette { + display: flex; + flex-wrap: wrap; + gap: 10px; + align-items: flex-start; +} + +.color-swatch-card { + display: flex; + flex-direction: column; + width: 88px; + gap: 6px; +} + +.color-swatch-preview { + position: relative; + width: 88px; + height: 60px; + border-radius: var(--r); + border: 1px solid rgba(0,0,0,0.15); + overflow: hidden; + cursor: pointer; +} + +.color-swatch-picker { + position: absolute; + inset: 0; + width: 100%; + height: 100%; + opacity: 0; + cursor: pointer; + border: none; + padding: 0; +} + +.color-swatch-remove { + position: absolute; + top: 4px; + right: 4px; + width: 16px; + height: 16px; + border-radius: 50%; + background: rgba(0,0,0,0.5); + border: none; + color: #fff; + font-size: 12px; + line-height: 1; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + opacity: 0; + transition: opacity 0.1s; + padding: 0; + z-index: 1; +} + +.color-swatch-card:hover .color-swatch-remove { opacity: 1; } + +.color-swatch-info { + display: flex; + flex-direction: column; + gap: 2px; +} + +.color-swatch-name { + font-size: 11px; + font-weight: 500; + color: var(--text-2); + cursor: text; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.color-swatch-name:hover { color: var(--text); } + +.color-swatch-hex { + font-family: var(--font-mono); + font-size: 10px; + color: var(--text-3); + cursor: text; +} + +.color-swatch-hex:hover { color: var(--text-2); } + +.color-swatch-field-input { + width: 100%; + background: var(--bg-2); + border: 1px solid var(--border-3); + border-radius: 3px; + color: var(--text); + font-family: inherit; + font-size: 11px; + padding: 1px 4px; + outline: none; +} + +.color-swatch-hex-input { + font-family: var(--font-mono); + font-size: 10px; +} + +.color-swatch-add { + width: 88px; + height: 60px; + border-radius: var(--r); + border: 1px dashed var(--border-3); + background: none; + color: var(--text-4); + font-size: 20px; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.1s; + align-self: flex-start; +} + +.color-swatch-add:hover { + border-color: var(--text-3); + color: var(--text-2); + background: var(--bg-2); +} + +/* ── Constraints ─────────────────────────────────────────────────────────── */ + +.constraints-list { + display: flex; + flex-direction: column; + gap: 5px; +} + +.constraint-item { + font-size: 13px; + color: var(--text-2); + line-height: 1.5; + display: flex; + gap: 8px; +} + +.constraint-item::before { + content: '·'; + color: var(--text-4); + flex-shrink: 0; +} + +/* ── Copy feedback ───────────────────────────────────────────────────────── */ + +.copy-btn { + background: var(--bg-3); + border: 1px solid var(--border); + border-radius: 3px; + color: var(--text-3); + cursor: pointer; + font-family: var(--font-sans); + font-size: 10px; + padding: 2px 7px; + height: 20px; + display: inline-flex; + align-items: center; + gap: 4px; + transition: all 0.1s; + white-space: nowrap; +} + +.copy-btn:hover { + border-color: var(--border-3); + color: var(--text-2); +} + +.copy-btn.copied { + color: var(--success); + border-color: var(--success); +} + +/* ── Export Bar ──────────────────────────────────────────────────────────── */ + +.export-bar { + height: 44px; + min-height: 44px; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 20px; + border-top: 1px solid var(--border); + background: var(--bg-1); + flex-shrink: 0; +} + +.export-bar-left { + font-size: 11px; + color: var(--text-4); +} + +.export-bar-right { + display: flex; + gap: 6px; +} + +/* ── AI badge ────────────────────────────────────────────────────────────── */ + +.settings-open-btn { font-size: 16px; } + +.ai-badge { + font-size: 9px; + font-weight: 700; + letter-spacing: 0.08em; + color: var(--accent); + border: 1px solid var(--accent-dim); + border-radius: 3px; + padding: 1px 5px; + cursor: default; + flex-shrink: 0; +} + +/* ── Generate error banner ───────────────────────────────────────────────── */ + +.generate-error { + display: flex; + align-items: center; + gap: 8px; + padding: 8px 20px; + background: rgba(138, 48, 48, 0.15); + border-bottom: 1px solid rgba(138, 48, 48, 0.3); + font-size: 12px; + flex-shrink: 0; +} + +.generate-error-icon { color: #c04040; flex-shrink: 0; } +.generate-error-msg { color: var(--text-2); flex: 1; line-height: 1.4; } +.generate-error-retry { margin-left: auto; font-size: 11px; flex-shrink: 0; } + +/* ── Settings overlay + panel ────────────────────────────────────────────── */ + +.settings-overlay { + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.6); + z-index: 200; + display: flex; + align-items: flex-start; + justify-content: flex-end; + padding: var(--header-h) 0 0; +} + +.settings-panel { + width: 400px; + height: calc(100vh - var(--header-h)); + background: var(--bg-2); + border-left: 1px solid var(--border-3); + display: flex; + flex-direction: column; + overflow: hidden; +} + +.settings-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 20px; + height: 44px; + border-bottom: 1px solid var(--border); + flex-shrink: 0; +} + +.settings-title { + font-size: 12px; + font-weight: 600; + color: var(--text); + letter-spacing: 0.04em; + text-transform: uppercase; +} + +.settings-close { + background: none; + border: none; + color: var(--text-3); + font-size: 18px; + cursor: pointer; + padding: 0; + line-height: 1; + width: 24px; + height: 24px; + display: flex; + align-items: center; + justify-content: center; + border-radius: var(--r); +} + +.settings-close:hover { background: var(--bg-3); color: var(--text); } + +.settings-body { + flex: 1; + overflow-y: auto; + padding: 20px; + display: flex; + flex-direction: column; + gap: 28px; +} + +.settings-section { + display: flex; + flex-direction: column; + gap: 12px; +} + +.settings-section-label { + font-size: 10px; + font-weight: 700; + letter-spacing: 0.1em; + text-transform: uppercase; + color: var(--text-4); +} + +.settings-toggle-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + cursor: pointer; +} + +.settings-toggle-info { + display: flex; + flex-direction: column; + gap: 2px; +} + +.settings-toggle-name { + font-size: 13px; + color: var(--text); + font-weight: 500; +} + +.settings-toggle-desc { + font-size: 11px; + color: var(--text-3); + line-height: 1.4; +} + +/* Toggle switch */ +.toggle { + width: 36px; + height: 20px; + background: var(--bg-4); + border: 1px solid var(--border-3); + border-radius: 10px; + cursor: pointer; + position: relative; + flex-shrink: 0; + transition: background 0.15s, border-color 0.15s; +} + +.toggle.on { + background: var(--accent-dim); + border-color: var(--accent); +} + +.toggle-thumb { + position: absolute; + top: 2px; + left: 2px; + width: 14px; + height: 14px; + border-radius: 50%; + background: var(--text-3); + transition: transform 0.15s, background 0.15s; +} + +.toggle.on .toggle-thumb { + transform: translateX(16px); + background: var(--accent); +} + +/* Settings fields */ +.settings-field { + display: flex; + flex-direction: column; + gap: 6px; +} + +.settings-field-label { + font-size: 11px; + font-weight: 500; + color: var(--text-3); +} + +.settings-field-row { + display: flex; + gap: 6px; +} + +.settings-input { + flex: 1; + background: var(--bg-1); + border: 1px solid var(--border-3); + border-radius: var(--r); + color: var(--text); + font-family: var(--font-mono); + font-size: 12px; + padding: 6px 10px; + outline: none; + width: 100%; + transition: border-color 0.1s; +} + +.settings-input:focus { border-color: var(--accent-dim); } + +.settings-test-btn { flex-shrink: 0; } +.settings-test-btn.testing { opacity: 0.6; } + +.settings-status { + font-size: 11px; + padding: 4px 8px; + border-radius: var(--r); + line-height: 1.4; +} + +.settings-status.ok { background: rgba(74, 148, 112, 0.15); color: #4a9470; } +.settings-status.error { background: rgba(138, 48, 48, 0.15); color: #c04040; } + +.settings-model-list { + display: flex; + flex-direction: column; + gap: 2px; + max-height: 180px; + overflow-y: auto; + border: 1px solid var(--border); + border-radius: var(--r); + padding: 4px; + background: var(--bg-1); +} + +.settings-model-item { + text-align: left; + background: none; + border: none; + color: var(--text-2); + font-family: var(--font-mono); + font-size: 12px; + padding: 5px 8px; + border-radius: 3px; + cursor: pointer; +} + +.settings-model-item:hover { background: var(--bg-3); color: var(--text); } +.settings-model-item.active { background: var(--bg-3); color: var(--accent); } + +.settings-field-hint { + font-size: 11px; + color: var(--text-4); + line-height: 1.5; +} + +.settings-field-hint code { + font-family: var(--font-mono); + color: var(--text-3); + background: var(--bg-1); + padding: 1px 4px; + border-radius: 3px; +} + +.settings-help p { + font-size: 12px; + color: var(--text-3); + line-height: 1.6; + margin-bottom: 8px; +} + +.settings-help p:last-child { margin-bottom: 0; } + +.settings-help strong { color: var(--text-2); font-weight: 500; } + +.settings-help code { + font-family: var(--font-mono); + font-size: 11px; + color: var(--text-3); + background: var(--bg-1); + padding: 2px 5px; + border-radius: 3px; + display: inline-block; + margin-top: 4px; +} + +/* ── Scrollbar global ────────────────────────────────────────────────────── */ + +::-webkit-scrollbar { width: 6px; height: 6px; } +::-webkit-scrollbar-track { background: transparent; } +::-webkit-scrollbar-thumb { background: var(--border-3); border-radius: 3px; } +::-webkit-scrollbar-thumb:hover { background: var(--border-3); } + +/* ── Utilities ───────────────────────────────────────────────────────────── */ + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} |
