/* * components.css * Zyquo Cloud Web * * Author: Simon-Pierre Boucher * Mail: contact@spboucher.ai * * Component styles — every value comes from tokens.css. Layout mirrors the * native app (sidebar 260 + centered 760 transcript column), responsive: * the sidebar becomes a drawer under 768px. */ /* ---------- Shell ---------- */ .shell { display: flex; height: 100%; background: var(--z-background); } .chat-area { flex: 1; display: flex; flex-direction: column; min-width: 0; height: 100%; } /* ---------- Sidebar ---------- */ .sidebar { width: var(--z-sidebar-width); min-width: var(--z-sidebar-width); display: flex; flex-direction: column; border-right: var(--z-hairline) solid var(--z-border); background: var(--z-background); height: 100%; } .sidebar-wordmark { display: flex; align-items: center; gap: var(--z-space-xs); padding: 12px var(--z-space-md) var(--z-space-xs); font-size: 14px; font-weight: 500; user-select: none; } .sidebar-search { display: flex; align-items: center; gap: 6px; margin: 0 var(--z-space-sm) var(--z-space-xs); padding: 5px var(--z-space-xs); border-radius: var(--z-radius-small); background: color-mix(in srgb, var(--z-surface-secondary) 70%, transparent); color: var(--z-text-tertiary); } .sidebar-search input { flex: 1; border: none; outline: none; background: transparent; font-size: 12.5px; color: var(--z-text-primary); min-width: 0; } .new-chat-button { display: flex; align-items: center; justify-content: center; gap: 6px; margin: 0 var(--z-space-sm) var(--z-space-xs); padding: 7px var(--z-space-sm); border-radius: var(--z-radius-small); background: var(--z-accent); color: var(--z-on-accent); font-size: 13px; font-weight: 500; transition: transform var(--z-motion-hover); } .new-chat-button:active { transform: scale(var(--z-motion-pressed-scale)); } .conversation-list { flex: 1; overflow-y: auto; padding: 0 var(--z-space-xs); } .conversation-group-header { font-size: var(--z-font-size-caption); color: var(--z-text-tertiary); padding: 12px var(--z-space-xs) 2px; user-select: none; } .conversation-row { display: flex; align-items: center; gap: 6px; width: 100%; text-align: left; padding: 5px var(--z-space-xs); border-radius: var(--z-radius-small); margin-bottom: 2px; transition: background var(--z-motion-hover); position: relative; } .conversation-row:hover { background: color-mix(in srgb, var(--z-surface-secondary) 60%, transparent); } .conversation-row.selected { background: var(--z-accent-subtle); } .conversation-row-main { flex: 1; min-width: 0; } .conversation-row-title { font-size: 13px; color: var(--z-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .conversation-row-sub { font-size: var(--z-font-size-caption); color: var(--z-text-tertiary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-top: 1px; } .conversation-row-actions { display: none; gap: 4px; color: var(--z-text-tertiary); } .conversation-row:hover .conversation-row-actions { display: flex; } .conversation-row .pin-indicator { color: var(--z-text-tertiary); font-size: 9px; } .conversation-row:hover .pin-indicator { display: none; } .sidebar-footer { display: flex; align-items: center; justify-content: space-between; padding: var(--z-space-xs) var(--z-space-md); border-top: var(--z-hairline) solid var(--z-border); color: var(--z-text-tertiary); font-size: var(--z-font-size-caption); } .icon-button { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: var(--z-radius-small); color: var(--z-text-secondary); transition: background var(--z-motion-hover); } .icon-button:hover { background: var(--z-surface-secondary); } .icon-button.danger:hover { color: var(--z-danger); } /* ---------- Chat header ---------- */ .chat-header { height: var(--z-chat-header-height); min-height: var(--z-chat-header-height); display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; padding: 0 var(--z-space-md); border-bottom: var(--z-hairline) solid var(--z-border); gap: var(--z-space-xs); } .chat-header-left { display: flex; align-items: center; gap: var(--z-space-xs); min-width: 0; } .chat-header-right { display: flex; align-items: center; gap: 2px; justify-content: flex-end; } .chat-title { font-size: 13px; font-weight: 500; max-width: 220px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: default; } .chat-title-input { font-size: 13px; font-weight: 500; border: none; outline: none; background: var(--z-surface-secondary); border-radius: var(--z-radius-small); padding: 2px 6px; max-width: 220px; } /* ---------- Model chip ---------- */ .model-chip { display: inline-flex; align-items: center; gap: 6px; padding: 4px var(--z-space-xs); border-radius: var(--z-radius-small); background: var(--z-surface-secondary); font-size: 12.5px; font-weight: 500; color: var(--z-text-primary); transition: transform var(--z-motion-hover); white-space: nowrap; max-width: 60vw; overflow: hidden; text-overflow: ellipsis; } .model-chip:active { transform: scale(var(--z-motion-pressed-scale)); } .model-chip .glyph { color: var(--z-accent); display: inline-flex; } .model-chip .chevron { color: var(--z-text-tertiary); font-size: 8px; } /* ---------- Model menu (command-palette style) ---------- */ .overlay { position: fixed; inset: 0; background: rgba(10, 12, 20, 0.25); display: flex; align-items: flex-start; justify-content: center; padding: 8vh var(--z-space-md) var(--z-space-md); z-index: 100; animation: overlay-in 120ms ease-out; } @keyframes overlay-in { from { opacity: 0; } to { opacity: 1; } } .panel { background: var(--z-surface); border: var(--z-hairline) solid var(--z-border); border-radius: var(--z-radius-large); box-shadow: var(--z-shadow-panel); width: 620px; max-width: 100%; max-height: 72vh; display: flex; flex-direction: column; overflow: hidden; animation: panel-in 150ms ease-out; } @keyframes panel-in { from { opacity: 0; transform: translateY(6px) scale(0.99); } to { opacity: 1; transform: none; } } .panel-search { display: flex; align-items: center; gap: var(--z-space-xs); padding: var(--z-space-sm) var(--z-space-md); border-bottom: var(--z-hairline) solid var(--z-border); color: var(--z-text-tertiary); flex-shrink: 0; } .panel-search input { flex: 1; border: none; outline: none; background: transparent; font-size: 15px; color: var(--z-text-primary); } .panel-filters { display: flex; gap: 6px; padding: var(--z-space-xs) var(--z-space-md); border-bottom: var(--z-hairline) solid var(--z-border); overflow-x: auto; flex-wrap: nowrap; flex-shrink: 0; } .panel-footer { flex-shrink: 0; } .filter-chip { font-size: var(--z-font-size-caption); padding: 3px 10px; border-radius: 999px; background: var(--z-surface-secondary); color: var(--z-text-secondary); white-space: nowrap; transition: background var(--z-motion-hover); } .filter-chip.active { background: var(--z-accent); color: var(--z-on-accent); } .panel-list { flex: 1; overflow-y: auto; padding: var(--z-space-xs); } .panel-section-header { font-size: var(--z-font-size-caption); color: var(--z-text-tertiary); padding: 10px var(--z-space-xs) 2px; display: flex; align-items: center; gap: 6px; user-select: none; } .model-row { display: flex; align-items: center; gap: var(--z-space-xs); width: 100%; text-align: left; padding: 5px var(--z-space-xs); border-radius: var(--z-radius-small); transition: background var(--z-motion-hover); } .model-row:hover, .model-row.highlighted { background: var(--z-surface-secondary); } .model-row.current { background: var(--z-accent-subtle); } .model-row .glyph { color: var(--z-accent); width: 16px; display: inline-flex; justify-content: center; } .model-row-name { font-size: 12.5px; color: var(--z-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .model-row-provider { font-size: var(--z-font-size-caption); color: var(--z-text-tertiary); } .model-row-badges { display: flex; align-items: center; gap: 6px; margin-left: auto; color: var(--z-text-tertiary); font-size: var(--z-font-size-caption); flex-shrink: 0; } .capability-badge { font-size: 10px; } .model-row .star { color: var(--z-text-tertiary); font-size: 11px; } .model-row .star.active { color: var(--z-warning); } .badge { font-size: 10px; padding: 1px 6px; border-radius: 999px; background: var(--z-surface-secondary); color: var(--z-text-secondary); white-space: nowrap; } .badge.accent { background: var(--z-accent-subtle); color: var(--z-accent); } .badge.warn { background: color-mix(in srgb, var(--z-warning) 12%, transparent); color: var(--z-warning); } .panel-empty { padding: var(--z-space-xl); text-align: center; color: var(--z-text-tertiary); font-size: 12.5px; } .panel-footer { display: flex; gap: var(--z-space-md); padding: var(--z-space-xs) var(--z-space-md); border-top: var(--z-hairline) solid var(--z-border); color: var(--z-text-tertiary); font-size: var(--z-font-size-caption); } .panel-footer kbd { background: var(--z-surface-secondary); border-radius: 4px; padding: 0 5px; font-size: 10px; } /* ---------- Transcript ---------- */ .transcript { flex: 1; overflow-y: auto; overflow-x: hidden; position: relative; } .transcript-column { max-width: var(--z-max-message-column); margin: 0 auto; padding: var(--z-space-md); display: flex; flex-direction: column; gap: var(--z-turn-rhythm); } .density-compact .transcript-column { gap: 10px; } .turn { display: flex; gap: var(--z-space-xs); animation: message-in var(--z-motion-send); } @keyframes message-in { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } } .turn.user { justify-content: flex-end; padding-left: 60px; } .turn.assistant { padding-right: 60px; } .avatar { width: 26px; height: 26px; min-width: 26px; border-radius: 50%; background: var(--z-accent-subtle); color: var(--z-accent); display: flex; align-items: center; justify-content: center; margin-top: 2px; } .turn-body { display: flex; flex-direction: column; gap: 4px; min-width: 0; max-width: 100%; } .bubble { padding: 10px var(--z-space-sm); border-radius: var(--z-radius-medium); font-size: var(--z-chat-font-size); line-height: var(--z-line-height-body); overflow-wrap: break-word; min-width: 0; } .turn.user .bubble { background: var(--z-accent-subtle); white-space: pre-wrap; } .turn.assistant .bubble { background: var(--z-surface); border: var(--z-hairline) solid var(--z-border); } .bubble .error-note { display: flex; gap: 6px; align-items: flex-start; color: var(--z-danger); background: color-mix(in srgb, var(--z-danger) 8%, transparent); border-radius: var(--z-radius-small); padding: var(--z-space-xs); font-size: calc(var(--z-chat-font-size) - 1px); margin-top: 6px; } .meta-row { display: flex; align-items: center; gap: var(--z-space-xs); font-size: var(--z-font-size-caption); color: var(--z-text-tertiary); opacity: 0; transition: opacity var(--z-motion-hover); min-height: 18px; flex-wrap: wrap; } .turn:hover .meta-row, .meta-row.always { opacity: 1; } .turn.user .meta-row { justify-content: flex-end; } .meta-action { display: inline-flex; align-items: center; gap: 3px; color: var(--z-text-tertiary); border-radius: 4px; padding: 1px 4px; transition: background var(--z-motion-hover); font-size: var(--z-font-size-caption); } .meta-action:hover { background: var(--z-surface-secondary); color: var(--z-text-secondary); } .reasoning-section { margin-bottom: 6px; } .reasoning-toggle { display: inline-flex; align-items: center; gap: 5px; font-size: var(--z-font-size-caption); color: var(--z-text-secondary); } .reasoning-toggle .chev { display: inline-block; transition: transform 120ms ease; font-size: 8px; } .reasoning-toggle .chev.open { transform: rotate(90deg); } .reasoning-body { margin-top: 6px; padding: var(--z-space-xs); background: var(--z-surface-secondary); border-radius: var(--z-radius-small); font-family: var(--z-font-mono); font-size: calc(var(--z-chat-font-size) - 2px); color: var(--z-text-secondary); white-space: pre-wrap; max-height: 320px; overflow-y: auto; } .citations { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 8px; } .citation-chip { display: inline-flex; align-items: center; gap: 5px; padding: 3px 8px; border-radius: 999px; background: var(--z-surface-secondary); font-size: var(--z-font-size-caption); color: var(--z-text-secondary); max-width: 220px; } .citation-chip:hover { text-decoration: none; background: var(--z-accent-subtle); } .citation-chip .num { width: 13px; height: 13px; min-width: 13px; border-radius: 50%; background: var(--z-accent); color: var(--z-on-accent); font-size: 9px; font-weight: 600; display: inline-flex; align-items: center; justify-content: center; } .citation-chip .title { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .streaming-caret { display: inline-block; width: 7px; height: 15px; border-radius: 3px; background: var(--z-accent); vertical-align: text-bottom; margin-left: 2px; animation: caret-blink 1.1s ease-in-out infinite; } @keyframes caret-blink { 0%, 100% { opacity: 1; } 50% { opacity: 0.15; } } .jump-pill { position: absolute; bottom: var(--z-space-xs); left: 50%; transform: translateX(-50%); display: flex; align-items: center; gap: 5px; padding: 5px var(--z-space-sm); border-radius: 999px; background: var(--z-surface); border: var(--z-hairline) solid var(--z-border); box-shadow: var(--z-shadow-soft); font-size: var(--z-font-size-caption); color: var(--z-text-secondary); z-index: 5; } .variant-switch { display: inline-flex; align-items: center; gap: 4px; font-size: var(--z-font-size-caption); color: var(--z-text-tertiary); } /* ---------- Markdown ---------- */ .markdown > *:first-child { margin-top: 0; } .markdown > *:last-child { margin-bottom: 0; } .markdown p, .markdown ul, .markdown ol, .markdown blockquote, .markdown table, .markdown pre { margin: 0 0 12px; } .markdown h1, .markdown h2, .markdown h3, .markdown h4, .markdown h5, .markdown h6 { font-weight: 600; margin: 16px 0 8px; line-height: 1.3; } .markdown h1 { font-size: calc(var(--z-chat-font-size) * 1.55); } .markdown h2 { font-size: calc(var(--z-chat-font-size) * 1.35); } .markdown h3 { font-size: calc(var(--z-chat-font-size) * 1.2); } .markdown h4, .markdown h5, .markdown h6 { font-size: calc(var(--z-chat-font-size) * 1.05); } .markdown blockquote { border-left: 3px solid var(--z-accent); border-radius: 2px; padding-left: 12px; color: var(--z-text-secondary); } .markdown ul, .markdown ol { padding-left: 24px; } .markdown li { margin-bottom: 3px; } .markdown code:not(pre code) { font-size: calc(var(--z-chat-font-size) - 1px); background: var(--z-surface-secondary); border-radius: 4px; padding: 1px 5px; } .markdown hr { border: none; border-top: var(--z-hairline) solid var(--z-border); margin: 12px 0; } .markdown table { border-collapse: collapse; border: var(--z-hairline) solid var(--z-border); border-radius: var(--z-radius-small); overflow: hidden; display: block; max-width: 100%; overflow-x: auto; width: fit-content; } .markdown th, .markdown td { padding: 8px 12px; border: var(--z-hairline) solid var(--z-border); font-size: calc(var(--z-chat-font-size) - 0.5px); text-align: left; } .markdown thead th { background: var(--z-surface-secondary); font-weight: 600; } .markdown tbody tr:nth-child(odd) { background: color-mix(in srgb, var(--z-surface-secondary) 40%, transparent); } .markdown img { max-width: 100%; border-radius: var(--z-radius-small); } .markdown input[type='checkbox'] { accent-color: var(--z-accent); margin-right: 4px; } /* Code blocks */ .code-block { background: var(--z-surface-secondary); border-radius: var(--z-radius-medium); overflow: hidden; } .code-block-header { display: flex; align-items: center; justify-content: space-between; padding: 8px 12px 0; font-size: var(--z-font-size-caption); color: var(--z-text-secondary); text-transform: uppercase; letter-spacing: 0.04em; } .code-block-actions { display: flex; gap: 4px; opacity: 0; transition: opacity var(--z-motion-hover); } .code-block:hover .code-block-actions, .code-block-actions.confirming { opacity: 1; } .code-block-copy { font-size: var(--z-font-size-caption); color: var(--z-text-secondary); text-transform: none; letter-spacing: normal; padding: 1px 6px; border-radius: 4px; } .code-block-copy:hover { background: color-mix(in srgb, var(--z-border) 50%, transparent); } .code-block-copy.ok { color: var(--z-success); } .code-block pre { margin: 0; padding: 4px 12px 8px; overflow-x: auto; font-size: calc(var(--z-chat-font-size) - 1px); line-height: 1.5; } .code-block pre.wrap { white-space: pre-wrap; overflow-wrap: break-word; } .code-block code { background: none; padding: 0; font-size: inherit; } /* highlight.js theme mapped to Zyquo syntax tokens */ .hljs-keyword, .hljs-selector-tag, .hljs-built_in, .hljs-tag { color: var(--z-code-keyword); } .hljs-string, .hljs-regexp, .hljs-addition { color: var(--z-code-string); } .hljs-comment, .hljs-quote, .hljs-deletion, .hljs-meta { color: var(--z-code-comment); } .hljs-number, .hljs-literal, .hljs-symbol { color: var(--z-code-number); } .hljs-type, .hljs-class .hljs-title, .hljs-title.class_ { color: var(--z-code-type); } .hljs-function .hljs-title, .hljs-title.function_ { color: var(--z-code-function); } .hljs-attr, .hljs-property, .hljs-variable { color: var(--z-code-property); } .hljs-attribute, .hljs-name { color: var(--z-code-attribute); } /* ---------- Input bar ---------- */ .input-dock { padding: 0 var(--z-space-sm) var(--z-space-sm); } .input-bar { max-width: var(--z-max-message-column); margin: 0 auto; background: var(--z-surface); border: var(--z-hairline) solid var(--z-border); border-radius: var(--z-radius-large); box-shadow: var(--z-shadow-soft); padding: var(--z-space-sm); display: flex; flex-direction: column; gap: var(--z-space-xs); } .input-bar.drag-target { border: 1.5px dashed var(--z-accent); } .attachment-strip { display: flex; gap: var(--z-space-xs); overflow-x: auto; } .attachment-thumb { position: relative; width: var(--z-attachment-thumb); height: var(--z-attachment-thumb); min-width: var(--z-attachment-thumb); border-radius: var(--z-radius-small); overflow: hidden; background: var(--z-surface-secondary); display: flex; align-items: center; justify-content: center; font-size: 9px; color: var(--z-text-secondary); text-align: center; padding: 2px; } .attachment-thumb img { width: 100%; height: 100%; object-fit: cover; } .attachment-remove { position: absolute; top: 2px; right: 2px; width: 16px; height: 16px; border-radius: 50%; background: var(--z-text-primary); color: var(--z-background); font-size: 10px; line-height: 1; display: flex; align-items: center; justify-content: center; } .input-row { display: flex; align-items: flex-end; gap: var(--z-space-xs); } .input-editor { flex: 1; border: none; outline: none; background: transparent; resize: none; font-size: var(--z-chat-font-size); line-height: var(--z-line-height-body); max-height: 200px; min-height: 22px; padding: 2px 0; color: var(--z-text-primary); } .send-button { width: 28px; height: 28px; min-width: 28px; border-radius: 50%; background: var(--z-accent); color: var(--z-on-accent); display: flex; align-items: center; justify-content: center; transition: transform var(--z-motion-hover), background var(--z-motion-hover); } .send-button:disabled { background: var(--z-surface-secondary); color: var(--z-text-tertiary); cursor: default; } .send-button.stop { background: var(--z-danger); } .send-button:active:not(:disabled) { transform: scale(var(--z-motion-pressed-scale)); } .input-hud { display: flex; align-items: center; gap: var(--z-space-xs); font-size: var(--z-font-size-caption); color: var(--z-text-tertiary); flex-wrap: wrap; } .context-bar { flex: 1; min-width: 60px; max-width: 160px; height: 3px; border-radius: 2px; background: var(--z-surface-secondary); overflow: hidden; } .context-bar-fill { height: 100%; background: var(--z-accent); border-radius: 2px; transition: width 300ms ease; } .context-bar-fill.warn { background: var(--z-warning); } /* ---------- Empty state ---------- */ .empty-state { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--z-space-lg); padding: var(--z-space-xl); overflow-y: auto; } .empty-title { font-size: var(--z-font-size-title); font-weight: 600; margin: 0; } .empty-subtitle { color: var(--z-text-secondary); margin: 0; } .suggestion-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--z-space-sm); max-width: 460px; width: 100%; } .suggestion-card { display: flex; align-items: center; gap: var(--z-space-xs); text-align: left; padding: var(--z-space-sm); background: var(--z-surface); border: var(--z-hairline) solid var(--z-border); border-radius: var(--z-radius-medium); font-size: 13px; transition: transform var(--z-motion-hover), background var(--z-motion-hover); } .suggestion-card:hover { background: var(--z-surface-secondary); } .suggestion-card:active { transform: scale(var(--z-motion-pressed-scale)); } .suggestion-card .glyph { color: var(--z-accent); width: 20px; display: inline-flex; justify-content: center; } /* ---------- First run ---------- */ .first-run-note { max-width: 560px; margin: 0 auto; background: var(--z-surface); border: var(--z-hairline) solid var(--z-border); border-radius: var(--z-radius-medium); padding: var(--z-space-md); font-size: 12.5px; color: var(--z-text-secondary); display: flex; flex-direction: column; gap: var(--z-space-xs); } .first-run-note strong { color: var(--z-text-primary); } .first-run-actions { display: flex; gap: var(--z-space-xs); justify-content: flex-end; } .button { padding: 6px 14px; border-radius: var(--z-radius-small); font-size: 12.5px; font-weight: 500; background: var(--z-surface-secondary); color: var(--z-text-primary); transition: transform var(--z-motion-hover); } .button.primary { background: var(--z-accent); color: var(--z-on-accent); } .button.danger { background: color-mix(in srgb, var(--z-danger) 10%, transparent); color: var(--z-danger); } .button:active { transform: scale(var(--z-motion-pressed-scale)); } .button:disabled { opacity: 0.5; cursor: default; } /* ---------- Settings ---------- */ .settings-panel { width: 760px; max-width: 100%; height: 560px; max-height: 85vh; } .settings-body { display: flex; flex: 1; min-height: 0; } .settings-tabs { width: 168px; min-width: 168px; border-right: var(--z-hairline) solid var(--z-border); padding: var(--z-space-xs); display: flex; flex-direction: column; gap: 2px; } .settings-tab { text-align: left; padding: 6px 10px; border-radius: var(--z-radius-small); font-size: 13px; color: var(--z-text-secondary); transition: background var(--z-motion-hover); } .settings-tab:hover { background: var(--z-surface-secondary); } .settings-tab.active { background: var(--z-accent-subtle); color: var(--z-text-primary); } .settings-content { flex: 1; overflow-y: auto; padding: var(--z-space-md); min-width: 0; } .settings-content h3 { margin: 0 0 var(--z-space-sm); font-size: 14px; } .settings-row { display: flex; align-items: center; gap: var(--z-space-xs); padding: var(--z-space-xs) 0; border-bottom: var(--z-hairline) solid var(--z-border); flex-wrap: wrap; } .settings-row:last-child { border-bottom: none; } .provider-name { display: flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 500; width: 140px; min-width: 140px; } .status-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--z-border); } .status-dot.ok { background: var(--z-success); } .status-dot.fail { background: var(--z-danger); } .status-dot.saved { background: var(--z-text-tertiary); } .key-input { flex: 1; min-width: 160px; font-family: var(--z-font-mono); font-size: 11px; padding: 5px 8px; border: var(--z-hairline) solid var(--z-border); border-radius: var(--z-radius-small); background: var(--z-background); outline: none; } .key-input:focus { border-color: var(--z-accent); } .settings-sub { font-size: var(--z-font-size-caption); color: var(--z-text-tertiary); width: 100%; } .settings-sub.ok { color: var(--z-success); } .settings-sub.fail { color: var(--z-danger); } .select, .number-input, .text-input { padding: 5px 8px; border: var(--z-hairline) solid var(--z-border); border-radius: var(--z-radius-small); background: var(--z-background); font-size: 12.5px; outline: none; } .text-input:focus, .number-input:focus { border-color: var(--z-accent); } .settings-section { margin-bottom: var(--z-space-lg); } .settings-note { font-size: var(--z-font-size-caption); color: var(--z-text-tertiary); line-height: 1.5; } textarea.text-input { width: 100%; resize: vertical; font-family: inherit; } /* ---------- Toasts ---------- */ .toasts { position: fixed; bottom: var(--z-space-md); right: var(--z-space-md); display: flex; flex-direction: column; gap: var(--z-space-xs); z-index: 200; max-width: min(380px, calc(100vw - 32px)); } .toast { display: flex; align-items: center; gap: var(--z-space-xs); background: var(--z-surface); border: var(--z-hairline) solid var(--z-border); border-left: 3px solid var(--z-accent); border-radius: var(--z-radius-medium); box-shadow: var(--z-shadow-soft); padding: var(--z-space-xs) var(--z-space-sm); font-size: 12.5px; animation: message-in var(--z-motion-send); } .toast.error { border-left-color: var(--z-danger); } .toast.success { border-left-color: var(--z-success); } .toast .undo { color: var(--z-accent); font-weight: 500; } /* ---------- Drawer / responsive ---------- */ .drawer-scrim { display: none; } .menu-button { display: none; } @media (max-width: 768px) { .sidebar { position: fixed; left: 0; top: 0; bottom: 0; z-index: 60; transform: translateX(-100%); transition: transform 200ms ease; box-shadow: none; width: min(300px, 85vw); min-width: 0; } .sidebar.open { transform: none; box-shadow: var(--z-shadow-panel); } .drawer-scrim { display: block; position: fixed; inset: 0; background: rgba(10, 12, 20, 0.3); z-index: 50; } .menu-button { display: inline-flex; } .turn.user { padding-left: 24px; } .turn.assistant { padding-right: 12px; } .avatar { display: none; } .overlay { padding: 4vh var(--z-space-xs) var(--z-space-xs); } .settings-body { flex-direction: column; } .settings-tabs { width: 100%; min-width: 0; flex-direction: row; overflow-x: auto; border-right: none; border-bottom: var(--z-hairline) solid var(--z-border); } .settings-panel { height: 90vh; } .icon-button, .meta-action, .conversation-row { min-height: 32px; } .chat-title { max-width: 120px; } } /* Focus mode hides the sidebar on desktop */ .focus-mode .sidebar { display: none; } @media (max-width: 768px) { .focus-mode .sidebar { display: flex; } }