diff --git a/frontend/src/assets/editor-shared.css b/frontend/src/assets/editor-shared.css index 50cd8dc..9637035 100644 --- a/frontend/src/assets/editor-shared.css +++ b/frontend/src/assets/editor-shared.css @@ -15,18 +15,6 @@ padding: 1rem 1.5rem 0.5rem; border-bottom: 1px solid var(--fs-border-color); } -.editor-body { - flex: 1; - min-height: 0; - display: flex; - overflow: hidden; -} -.editor-main { - flex: 1; - min-width: 0; - overflow-y: auto; - padding: 0.75rem 1.5rem 1.5rem; -} /* ── Toolbar & inputs ── */ .toolbar { @@ -106,95 +94,6 @@ .tag-check { font-size: 0.7rem; } - -/* ── Assist panel ── */ -.assist-panel { - width: 320px; - flex-shrink: 0; - border-left: 1px solid var(--fs-border-color); - background: var(--fs-surface-raised); - display: flex; - flex-direction: column; - overflow: hidden; -} -.assist-panel-header { - flex-shrink: 0; - display: flex; - align-items: center; - gap: 0.5rem; - padding: 0.65rem 0.9rem; - border-bottom: 1px solid var(--fs-border-color); -} -.assist-panel-title { - flex: 1; - font-size: 0.8rem; - font-weight: 500; - color: var(--fs-text-secondary); - text-transform: uppercase; - letter-spacing: 0.05em; -} -.assist-panel-body { - flex: 1; - min-height: 0; - overflow-y: auto; - padding: 0.75rem 0.9rem 1rem; - display: flex; - flex-direction: column; - gap: 0.6rem; -} - -/* Section list */ -.assist-sections-label { - font-size: 0.72rem; - font-weight: 500; - text-transform: uppercase; - letter-spacing: 0.04em; - color: var(--fs-text-tertiary); - margin-bottom: 0.2rem; -} -.assist-sections { - border: 1px solid var(--fs-border-color); - border-radius: var(--fs-radius-sm); - background: var(--fs-surface-page); - max-height: 200px; - overflow-y: auto; - flex-shrink: 0; -} -.assist-section-item { - padding: 0.35rem 0.7rem; - cursor: pointer; - font-size: 0.82rem; - border-left: 3px solid transparent; - color: var(--fs-text-primary); - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} -.assist-section-item:hover { - background: var(--fs-surface-raised); -} -.assist-section-item.selected { - border-left-color: var(--fs-accent); - background: var(--fs-surface-raised); - font-weight: 500; -} -.assist-empty, -.assist-hint { - padding: 0.6rem 0.7rem; - font-size: 0.82rem; - color: var(--fs-text-tertiary); -} -.assist-target-preview { - font-size: 0.8rem; - color: var(--fs-text-secondary); - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.assist-target-preview em { - font-style: normal; - color: var(--fs-text-primary); -} .assist-instruction { width: 100%; padding: 0.5rem 0.65rem; @@ -213,33 +112,6 @@ gap: 0.5rem; } -/* Streaming */ -.assist-streaming-label { - font-size: 0.8rem; - color: var(--fs-text-secondary); - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.assist-preview-box { - padding: 0.65rem; - border: 1px solid var(--fs-border-color); - border-radius: var(--fs-radius-sm); - background: var(--fs-surface-page); - font-size: 0.9rem; - max-height: 300px; - overflow-y: auto; -} -.typing-indicator { - color: var(--fs-text-tertiary); - font-size: 0.75rem; - letter-spacing: 0.15em; - animation: blink 1s step-end infinite; -} -@keyframes blink { - 50% { opacity: 0; } -} - /* Active hint shown in the panel while output is inline */ .assist-active-hint { padding: 0.5rem 0.75rem; @@ -257,16 +129,6 @@ font-size: 0.85rem; color: var(--fs-error); } - -/* Review / diff */ -.assist-review-header { - display: flex; - align-items: center; - justify-content: space-between; - font-size: 0.8rem; - font-weight: 500; - color: var(--fs-text-secondary); -} .diff-view { border: 1px solid var(--fs-border-color); border-radius: var(--fs-radius-sm); @@ -398,22 +260,9 @@ /* ── Mobile ── */ @media (max-width: 768px) { - .editor-body { - flex-direction: column; - } - .assist-panel { - width: auto; - flex: 0 0 45%; - border-left: none; - border-top: 1px solid var(--fs-border-color); - border-radius: var(--fs-radius-lg) var(--fs-radius-lg) 0 0; - } .editor-header { padding: 0.75rem 1rem 0.5rem; } - .editor-main { - padding: 0.5rem 1rem 1rem; - } } /* --------------------------------------------------------------------------- diff --git a/frontend/src/assets/theme.css b/frontend/src/assets/theme.css index 38467d2..3a000e9 100644 --- a/frontend/src/assets/theme.css +++ b/frontend/src/assets/theme.css @@ -272,17 +272,10 @@ button:not(:disabled):active, display: none !important; } button, - [role="button"], - .btn-new-conv, - .btn-send { + [role="button"] { min-height: 44px; } } -@media (min-width: 769px) { - .hide-desktop { - display: none !important; - } -} /* Neutral hairline scrollbars — chrome is structural, not branded */ ::-webkit-scrollbar { diff --git a/frontend/src/components/ShareDialog.vue b/frontend/src/components/ShareDialog.vue index e008264..594b35c 100644 --- a/frontend/src/components/ShareDialog.vue +++ b/frontend/src/components/ShareDialog.vue @@ -231,7 +231,6 @@ onMounted(async () => { color: var(--fs-text-primary); } - .share-tabs { display: flex; gap: 0.25rem; @@ -307,7 +306,6 @@ onMounted(async () => { .user-result-item:hover { background: var(--fs-surface-raised); } .user-result-name { font-weight: 600; font-size: 0.88rem; } -.user-result-email { color: var(--fs-text-tertiary); font-size: 0.8rem; } .perm-select { padding: 0.45rem 0.5rem; diff --git a/frontend/src/views/KnowledgeView.vue b/frontend/src/views/KnowledgeView.vue index 73a09d1..e555efd 100644 --- a/frontend/src/views/KnowledgeView.vue +++ b/frontend/src/views/KnowledgeView.vue @@ -607,14 +607,6 @@ onUnmounted(() => { text-decoration: none; font-size: 0.78rem; } -.today-link { - color: var(--fs-accent); - text-decoration: none; - font-weight: 500; - opacity: 0.85; - transition: opacity 0.15s; -} -.today-link:hover { opacity: 1; } /* ── Main layout ─────────────────────────────────────────── */ .knowledge-layout { @@ -1042,7 +1034,6 @@ onUnmounted(() => { height: 100%; } - /* A set someone already ruled on — quiet, not celebratory: it means "skip". */ .dup-claimed { font-size: 0.72rem; diff --git a/frontend/src/views/ProjectView.vue b/frontend/src/views/ProjectView.vue index ad68a17..5402a25 100644 --- a/frontend/src/views/ProjectView.vue +++ b/frontend/src/views/ProjectView.vue @@ -1444,7 +1444,8 @@ async function confirmDelete() { } /* The input itself is the .fs-input canon (components.css); only the layout remainder lives here. */ -.edit-input, .edit-textarea, .edit-select { box-sizing: border-box; width: 100%; } +.edit-textarea, +.edit-select { box-sizing: border-box; width: 100%; } .edit-textarea { resize: vertical; } /* Save panel: Moss action-primary per Hybrid rule */ diff --git a/frontend/src/views/SettingsView.vue b/frontend/src/views/SettingsView.vue index 57e08ca..c46761d 100644 --- a/frontend/src/views/SettingsView.vue +++ b/frontend/src/views/SettingsView.vue @@ -2645,70 +2645,6 @@ async function deleteUser(userId: number) { line-height: 1.5; } -/* ── Model Management ───────────────────────────────────────── */ -.model-mgmt-header { - display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; margin-bottom: 0.75rem; -} -.model-mgmt-header h2 { margin: 0; } -.model-mgmt-header .section-desc { margin: 0.25rem 0 0; } -.model-list { display: flex; flex-direction: column; gap: 0.25rem; margin-bottom: 0.75rem; } -.model-row { - display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; - padding: 0.45rem 0.6rem; - background: var(--fs-surface-raised); - border: 1px solid var(--fs-border-color); - border-radius: 6px; -} -.model-row-info { display: flex; align-items: center; gap: 0.4rem; min-width: 0; flex: 1; } -.model-name { font-size: 0.88rem; font-weight: 500; font-family: monospace; } -.model-badge { - font-size: 0.68rem; padding: 0.1rem 0.4rem; border-radius: 3px; font-weight: 500; white-space: nowrap; -} -.model-badge--loaded { background: color-mix(in srgb, #22c55e 18%, transparent); color: #22c55e; } -.model-badge--default { background: color-mix(in srgb, var(--fs-accent) 18%, transparent); color: var(--fs-accent); } -.model-row-right { display: flex; align-items: center; gap: 0.5rem; flex-shrink: 0; } -.model-size { font-size: 0.78rem; color: var(--fs-text-tertiary); } -.model-delete-btn { - background: none; border: none; cursor: pointer; color: var(--fs-text-tertiary); - font-size: 0.8rem; padding: 0.2rem 0.35rem; border-radius: 3px; line-height: 1; - transition: color 0.15s, background 0.15s; -} -.model-delete-btn:hover:not(:disabled) { color: var(--fs-action-destructive); background: color-mix(in srgb, var(--fs-action-destructive) 10%, transparent); } -.model-delete-btn:disabled { opacity: 0.4; cursor: default; } -.model-pull-form { display: flex; gap: 0.5rem; margin-top: 0.5rem; } -.model-pull-form .input { flex: 1; } -.model-suggestions { display: flex; align-items: center; gap: 0.35rem; flex-wrap: wrap; margin-top: 0.4rem; } -.suggestions-label { font-size: 0.75rem; color: var(--fs-text-tertiary); white-space: nowrap; } -.suggestion-chip { - font-size: 0.72rem; padding: 0.15rem 0.5rem; border-radius: 4px; - border: 1px solid var(--fs-border-color); background: var(--fs-surface-raised); - cursor: pointer; font-family: monospace; color: var(--fs-text-primary); - transition: border-color 0.12s, background 0.12s; -} -.suggestion-chip:hover:not(:disabled) { border-color: var(--fs-accent); background: color-mix(in srgb, var(--fs-accent) 8%, var(--fs-surface-raised)); } -.suggestion-chip:disabled { opacity: 0.4; cursor: default; } -.model-pull-progress { margin-top: 0.6rem; } -.pull-status { font-size: 0.8rem; color: var(--fs-text-tertiary); margin-bottom: 0.25rem; } -.pull-bar-track { - height: 4px; background: var(--fs-border-color); border-radius: 2px; overflow: hidden; -} -.pull-bar-fill { - height: 100%; background: var(--fs-accent); border-radius: 2px; - transition: width 0.3s ease; -} -.pull-bar-indeterminate { - height: 4px; background: var(--fs-border-color); border-radius: 2px; - position: relative; overflow: hidden; -} -.pull-bar-indeterminate::after { - content: ""; position: absolute; top: 0; left: -40%; - width: 40%; height: 100%; background: var(--fs-accent); border-radius: 2px; - animation: indeterminate 1.2s ease-in-out infinite; -} -@keyframes indeterminate { - 0% { left: -40%; } 100% { left: 100%; } -} - /* Assistant — 2-col internal grid */ .assistant-grid { display: grid; @@ -2736,11 +2672,6 @@ async function deleteUser(userId: number) { width: 100%; box-sizing: border-box; } -.field-hint-warn { - display: block; - margin-top: 0.3rem; - color: #f59e0b; -} .actions { display: flex; align-items: center; @@ -2809,16 +2740,6 @@ async function deleteUser(userId: number) { color: var(--fs-error); } -.retention-row { - display: flex; - align-items: center; - gap: 0.5rem; - margin-top: 0.4rem; -} -.retention-input { - width: 6rem; -} - /* Data buttons */ .data-actions { display: flex; @@ -2944,42 +2865,8 @@ async function deleteUser(userId: number) { align-items: center; max-width: 480px; } - -/* Push notifications */ -.push-unsupported { - font-size: 0.875rem; - color: var(--fs-text-tertiary); -} -.push-status-row { - display: flex; - align-items: center; - gap: 0.5rem; - margin-bottom: 0.4rem; - font-size: 0.875rem; -} -.push-status-label { - color: var(--fs-text-secondary); - font-weight: 500; -} -.push-permission-badge, -.push-sub-badge { - font-size: 0.72rem; - font-weight: 500; - text-transform: uppercase; - letter-spacing: 0.04em; - padding: 0.1rem 0.4rem; - border-radius: 999px; - background: color-mix(in srgb, var(--fs-text-tertiary) 15%, transparent); - color: var(--fs-text-tertiary); -} .perm-granted { background: color-mix(in srgb, var(--fs-success) 15%, transparent); color: var(--fs-success); } .perm-denied { background: color-mix(in srgb, var(--fs-error) 15%, transparent); color: var(--fs-error); } -.sub-active { background: color-mix(in srgb, var(--fs-success) 15%, transparent); color: var(--fs-success); } -.push-error { - font-size: 0.82rem; - color: var(--fs-error); - margin: 0.25rem 0 0; -} @media (max-width: 768px) { .settings-root { @@ -3175,25 +3062,6 @@ async function deleteUser(userId: number) { margin-right: 0.25rem; } -/* ── About / version ─────────────────────────────────────────── */ -.version-line { - margin: 0; - font-size: 0.9rem; - color: var(--fs-text-primary); - display: flex; - align-items: center; - gap: 0.6rem; -} -.version-badge { - font-family: ui-monospace, monospace; - font-size: 0.8rem; - padding: 0.15rem 0.5rem; - background: var(--fs-surface-raised); - border: 1px solid var(--fs-accent); - border-radius: 4px; - color: var(--fs-accent); -} - /* ── Groups tab ──────────────────────────────────────────────── */ /* Moss action-primary per Hybrid */ @@ -3278,7 +3146,6 @@ async function deleteUser(userId: number) { flex-shrink: 0; } - .member-search-wrap { flex: 1; position: relative; @@ -3311,7 +3178,6 @@ async function deleteUser(userId: number) { } .member-result-item:hover { background: var(--fs-surface-hover); } .member-result-name { font-weight: 500; font-size: 0.85rem; } -.member-result-email { color: var(--fs-text-tertiary); font-size: 0.78rem; } .role-select { padding: 0.4rem 0.5rem; @@ -3367,69 +3233,6 @@ async function deleteUser(userId: number) { gap: 0.5rem; margin-top: 0.25rem; } -.geo-msg { - font-size: 0.78rem; - margin: 0.2rem 0 0; -} -.geo-ok { color: var(--fs-success); } -.geo-error { color: var(--fs-error); } -.geo-pending { color: var(--fs-text-tertiary); } - -.unit-toggle { - display: flex; - gap: 0; - border: 1px solid var(--fs-border-color); - border-radius: var(--fs-radius-sm); - overflow: hidden; - width: fit-content; - margin-top: 0.25rem; -} -.unit-btn { - padding: 0.4rem 1rem; - background: var(--fs-surface-raised); - color: var(--fs-text-tertiary); - font-size: 0.85rem; - cursor: pointer; - border: none; - font-family: inherit; - transition: background 0.15s, color 0.15s; -} -.unit-btn:not(:last-child) { - border-right: 1px solid var(--fs-border-color); -} -.unit-btn.active { - background: var(--fs-action-primary); - color: var(--fs-text-on-action); -} -.unit-btn:hover:not(.active) { - color: var(--fs-text-primary); -} - -.checkbox-label { - display: flex; - align-items: center; - gap: 0.5rem; - cursor: pointer; - font-size: 0.9rem; -} -.checkbox-label input[type="checkbox"] { - cursor: pointer; -} - -.time-row { - display: flex; - align-items: center; - gap: 0.4rem; -} -.time-input { - width: 4rem; - text-align: center; -} -.time-sep { - font-size: 1.1rem; - color: var(--fs-text-tertiary); -} -.time-sep--quiet { font-size: 0.9rem; } /* API Keys tab */ .api-key-create-form { @@ -3493,24 +3296,6 @@ async function deleteUser(userId: number) { .scope-badge.write { background: color-mix(in srgb, #10b981 15%, transparent); color: #10b981; } .settings-empty { opacity: 0.5; margin-top: 1rem; } .settings-description { opacity: 0.7; margin-bottom: 1rem; line-height: 1.5; } - -/* Scribe MCP section */ -.mcp-status { opacity: 0.6; font-size: 0.9rem; } -.mcp-unavailable p { opacity: 0.7; } -.mcp-available { display: flex; flex-direction: column; gap: 1.25rem; } -.mcp-pkg-row { - display: flex; - align-items: center; - gap: 1rem; - padding: 0.65rem 0.9rem; - background: color-mix(in srgb, var(--fs-accent) 8%, transparent); - border: 1px solid color-mix(in srgb, var(--fs-accent) 25%, transparent); - border-radius: 8px; -} -.mcp-pkg-name { font-family: monospace; font-size: 0.9rem; flex: 1; } -.mcp-install-steps h3 { font-size: 0.95rem; font-weight: 500; margin-bottom: 0.75rem; } -.mcp-install-steps ol { padding-left: 1.25rem; display: flex; flex-direction: column; gap: 0.75rem; } -.mcp-install-steps li { line-height: 1.6; font-size: 0.9rem; } .mcp-code { margin-top: 0.4rem; padding: 0.55rem 0.75rem; @@ -3599,97 +3384,6 @@ async function deleteUser(userId: number) { opacity: 0.7; line-height: 1.5; } -.mcp-other p { font-size: 0.9rem; line-height: 1.6; } -.mcp-plain-list { - list-style: disc; - padding-left: 1.25rem; - display: flex; - flex-direction: column; - gap: 0.5rem; - font-size: 0.9rem; - line-height: 1.6; -} - -/* Voice tab */ -.voice-status-row { - display: flex; - align-items: center; - gap: 0.5rem; - flex-wrap: wrap; - margin-top: 0.5rem; -} - -/* Voice Library (admin) */ -.voice-library-header { - display: flex; - align-items: center; - justify-content: space-between; - gap: 1rem; -} -.voice-library-toolbar { - display: flex; - gap: 0.5rem; - align-items: center; - margin: 1rem 0; -} -.voice-library-toolbar .input { - flex: 1; -} -.voice-library-list { - list-style: none; - margin: 0; - padding: 0; - border-top: 1px solid var(--fs-border-color); - max-height: 480px; - overflow-y: auto; -} -.voice-library-row { - display: flex; - align-items: center; - justify-content: space-between; - gap: 1rem; - padding: 0.65rem 0.25rem; - border-bottom: 1px solid var(--fs-border-color); -} -.voice-library-meta { - min-width: 0; - flex: 1; -} -.voice-library-id { - font-family: var(--fs-font-mono); - font-size: 0.9rem; - font-weight: 500; -} -.voice-library-sub { - color: var(--fs-text-tertiary); - font-size: 0.8rem; - margin-top: 0.15rem; -} -.voice-library-actions { - display: flex; - align-items: center; - gap: 0.5rem; - flex-shrink: 0; -} -.voice-library-empty { - padding: 1rem 0; - color: var(--fs-text-tertiary); - text-align: center; - font-style: italic; -} -.voice-badge { - font-size: 0.7rem; - font-weight: 500; - padding: 0.15rem 0.5rem; - border-radius: 999px; - text-transform: uppercase; - letter-spacing: 0.04em; -} -.voice-badge--bundled { - background: color-mix(in srgb, var(--fs-text-tertiary) 10%, transparent); - color: var(--fs-text-tertiary); - border: 1px solid var(--fs-border-color); -} .status-badge { font-size: 0.75rem; font-weight: 500; @@ -3706,100 +3400,6 @@ async function deleteUser(userId: number) { color: var(--fs-text-tertiary); border: 1px solid var(--fs-border-color); } -.radio-group { - display: flex; - flex-direction: column; - gap: 0.65rem; - margin-top: 0.35rem; -} -.radio-option { - display: flex; - align-items: flex-start; - gap: 0.55rem; - cursor: pointer; -} -.radio-option input[type="radio"] { margin-top: 0.2rem; flex-shrink: 0; } -.radio-option span { display: flex; flex-direction: column; gap: 0.15rem; } -.radio-option strong { font-size: 0.875rem; } -.range-input { - width: 100%; - max-width: 360px; - accent-color: var(--fs-accent); - margin: 0.35rem 0 0.2rem; -} -.range-labels { - display: flex; - justify-content: space-between; - max-width: 360px; - font-size: 0.75rem; - color: var(--fs-text-tertiary); -} -.form-actions { - margin-top: 1rem; -} - -.voice-admin-spinner { - display: inline-flex; - gap: 3px; - align-items: center; - margin-left: 0.4rem; - vertical-align: middle; -} -.voice-admin-spinner span { - display: inline-block; - width: 4px; - height: 4px; - border-radius: 50%; - background: var(--fs-text-tertiary); - animation: va-dot-bounce 1.2s ease-in-out infinite; -} -.voice-admin-spinner span:nth-child(2) { animation-delay: 0.2s; } -.voice-admin-spinner span:nth-child(3) { animation-delay: 0.4s; } - -/* ── Voice blend ────────────────────────────────────────────────────────── */ -.blend-slots { - display: flex; - flex-direction: column; - gap: 0.75rem; - margin-bottom: 0.5rem; -} -.blend-slot { - background: color-mix(in srgb, var(--fs-surface-hover) 60%, transparent); - border: 1px solid var(--fs-border-color); - border-radius: var(--fs-radius-lg); - padding: 0.75rem 1rem; - display: flex; - flex-direction: column; - gap: 0.5rem; -} -.blend-voice-select { - width: 100%; -} -.blend-weight-row { - display: flex; - align-items: center; - gap: 0.75rem; -} -.blend-weight-slider { - flex: 1; -} -.blend-weight-label { - font-size: 0.85rem; - font-variant-numeric: tabular-nums; - min-width: 2.5rem; - text-align: right; - color: var(--fs-text-secondary); -} -.blend-actions { - margin-top: 0.25rem; -} -.toggle-label { - display: flex; - align-items: center; - gap: 0.5rem; - cursor: pointer; - font-size: 0.9rem; -} /* ── Profile tab ─────────────────────────────────────────────────────────── */ .day-picker { @@ -3826,21 +3426,4 @@ async function deleteUser(userId: number) { color: var(--fs-accent); font-weight: 500; } -.learned-summary { - background: var(--fs-surface-raised); - border: 1px solid var(--fs-border-color); - border-left: 3px solid var(--fs-accent); - border-radius: 8px; - padding: 0.85rem 1rem; - font-size: 0.9rem; - line-height: 1.55; - color: var(--fs-text-primary); - white-space: pre-wrap; - margin-bottom: 0.75rem; -} -.learned-empty { - font-size: 0.85rem; - color: var(--fs-text-tertiary); - margin-bottom: 0.75rem; -}