diff --git a/source/components/app-nav/app-nav.css b/source/components/app-nav/app-nav.css new file mode 100644 index 0000000..bcb4c1f --- /dev/null +++ b/source/components/app-nav/app-nav.css @@ -0,0 +1,70 @@ +app-nav { + display: block; +} + +app-nav nav { + display: flex; + align-items: center; + gap: 1rem; + padding: 0.75rem 1.5rem; + background: #222; + color: #fff; +} + +app-nav .nav-brand { + font-weight: bold; + font-size: 1.1rem; + margin-right: auto; +} + +app-nav .nav-links { + display: flex; + gap: 1rem; +} + +app-nav .nav-links a { + color: #ccc; + text-decoration: none; + font-size: 0.9rem; +} + +app-nav .nav-links a:hover { + color: #fff; +} + +app-nav .nav-user { + display: flex; + align-items: center; + gap: 0.75rem; + margin-left: 1rem; + font-size: 0.85rem; +} + +app-nav .nav-user span { + color: #aaa; +} + +app-nav button { + padding: 0.3rem 0.75rem; + border: 1px solid #555; + background: transparent; + color: #ccc; + border-radius: 4px; + cursor: pointer; + font-size: 0.8rem; +} + +app-nav button:hover { + background: #333; + color: #fff; +} + +app-nav .btn-delete { + border-color: #733; + color: #f99; +} + +app-nav .btn-delete:hover { + background: #500; + color: #fcc; +} diff --git a/source/components/code-panel/code-panel.css b/source/components/code-panel/code-panel.css new file mode 100644 index 0000000..0a8aaf3 --- /dev/null +++ b/source/components/code-panel/code-panel.css @@ -0,0 +1,77 @@ +code-panel { + display: flex; + flex-direction: column; + height: 100%; + background: #0f1117; +} + +.cp-toolbar { + display: flex; + align-items: center; + gap: 4px; + padding: 6px 8px; + background: #13151f; + border-bottom: 1px solid #2a2d3a; + flex-shrink: 0; +} + +.cp-toolbar button { + padding: 2px 8px; + background: transparent; + border: 1px solid #2a2d3a; + border-radius: 3px; + color: #666; + cursor: pointer; + font-size: 0.75rem; + font-family: inherit; +} + +.cp-toolbar button:hover:not(:disabled) { color: #aaa; background: #1a1d27; border-color: #444; } +.cp-toolbar button:disabled { opacity: 0.35; cursor: default; } +.cp-toolbar button.pinned { color: #7c8cff; border-color: #7c8cff; } + +.cp-empty { + padding: 20px; + color: #555; + font-style: italic; + font-size: 0.85rem; +} + +.cp-editor { + flex: 1; + overflow: hidden; + position: relative; +} + +.cp-editor .CodeMirror { + height: 100%; + font-family: "Cascadia Code", "Fira Code", "Consolas", monospace; + font-size: 0.875rem; + line-height: 1.55; +} + +/* cp-dark theme */ +.cm-s-cp-dark.CodeMirror { background: #0f1117; color: #c8cbde; } +.cm-s-cp-dark .CodeMirror-gutters { background: #13151f; border-right: 1px solid #2a2d3a; } +.cm-s-cp-dark .CodeMirror-linenumber { color: #3d4166; } +.cm-s-cp-dark .CodeMirror-cursor { border-left: 2px solid #7c8cff; } +.cm-s-cp-dark .CodeMirror-selected { background: #1e2235; } +.cm-s-cp-dark .CodeMirror-focused .CodeMirror-selected { background: #252a47; } +.cm-s-cp-dark .CodeMirror-activeline-background { background: #14161f; } + +.cm-s-cp-dark .cm-keyword { color: #c792ea; } +.cm-s-cp-dark .cm-def { color: #82aaff; } +.cm-s-cp-dark .cm-variable { color: #c8cbde; } +.cm-s-cp-dark .cm-variable-2{ color: #c8cbde; } +.cm-s-cp-dark .cm-property { color: #80cbc4; } +.cm-s-cp-dark .cm-operator { color: #89ddff; } +.cm-s-cp-dark .cm-string { color: #c3e88d; } +.cm-s-cp-dark .cm-string-2 { color: #c3e88d; } +.cm-s-cp-dark .cm-number { color: #f78c6c; } +.cm-s-cp-dark .cm-atom { color: #f78c6c; } +.cm-s-cp-dark .cm-comment { color: #546e7a; font-style: italic; } +.cm-s-cp-dark .cm-tag { color: #f07178; } +.cm-s-cp-dark .cm-attribute { color: #ffcb6b; } +.cm-s-cp-dark .cm-builtin { color: #82aaff; } +.cm-s-cp-dark .cm-bracket { color: #89ddff; } +.cm-s-cp-dark .cm-error { color: #f07178; } diff --git a/source/components/confirm-dialog/confirm-dialog.css b/source/components/confirm-dialog/confirm-dialog.css new file mode 100644 index 0000000..cae091b --- /dev/null +++ b/source/components/confirm-dialog/confirm-dialog.css @@ -0,0 +1,120 @@ +confirm-dialog { + display: flex; + position: fixed; + inset: 0; + align-items: center; + justify-content: center; + z-index: 1000; +} + +.cd-backdrop { + position: absolute; + inset: 0; + background: rgba(0, 0, 0, 0.55); +} + +.cd-box { + position: relative; + background: #1a1d27; + border: 1px solid #2a2d3a; + border-radius: 8px; + width: min(420px, 90vw); + box-shadow: 0 12px 40px rgba(0, 0, 0, 0.6); + overflow: hidden; +} + +.cd-titlebar { + display: flex; + align-items: center; + gap: 8px; + padding: 12px 16px; + background: #13151f; + border-bottom: 1px solid #2a2d3a; +} + +.cd-icon { + font-size: 1rem; + flex-shrink: 0; +} + +.cd-title { + flex: 1; + font-size: 0.95rem; + font-weight: 600; + color: #e2e4ed; +} + +.cd-close { + background: none; + border: none; + color: #555; + cursor: pointer; + font-size: 0.85rem; + padding: 3px 7px; + border-radius: 4px; + line-height: 1; +} + +.cd-close:hover { + color: #e2e4ed; + background: #2a2d3a; +} + +.cd-body { + padding: 20px 20px 16px; +} + +.cd-message { + color: #c8cbde; + font-size: 0.9rem; + line-height: 1.6; +} + +.cd-footer { + display: flex; + justify-content: flex-end; + gap: 8px; + padding: 12px 16px; + border-top: 1px solid #2a2d3a; +} + +.cd-btn { + padding: 6px 18px; + border-radius: 4px; + font-size: 0.85rem; + cursor: pointer; + border: 1px solid transparent; + font-family: inherit; +} + +.cd-btn-cancel { + background: transparent; + border-color: #2a2d3a; + color: #9ba4c7; +} + +.cd-btn-cancel:hover { + background: #2a2d3a; + color: #e2e4ed; +} + +.cd-btn-confirm { + background: #7c8cff; + border-color: #7c8cff; + color: #fff; +} + +.cd-btn-confirm:hover { + background: #6070ee; + border-color: #6070ee; +} + +.cd-btn-confirm.cd-btn-danger { + background: #c0392b; + border-color: #c0392b; +} + +.cd-btn-confirm.cd-btn-danger:hover { + background: #e74c3c; + border-color: #e74c3c; +} diff --git a/source/components/context-menu/context-menu.css b/source/components/context-menu/context-menu.css new file mode 100644 index 0000000..fe9b59b --- /dev/null +++ b/source/components/context-menu/context-menu.css @@ -0,0 +1,57 @@ +.ctx-menu { + display: block; + position: fixed; + background: #1e1e1e; + border: 1px solid #3a3a3a; + border-radius: 4px; + padding: 4px 0; + min-width: 160px; + box-shadow: 0 4px 16px rgba(0,0,0,0.5); + z-index: 9999; + font-size: 13px; + font-family: inherit; + color: #d4d4d4; + user-select: none; +} + +.ctx-entry { + display: flex; + align-items: center; + padding: 5px 12px; + cursor: pointer; + gap: 8px; + white-space: nowrap; +} + +.ctx-entry:hover { + background: #2a4a7f; +} + +.ctx-entry-dir { + justify-content: space-between; +} + +.ctx-label { + flex: 1; +} + +.ctx-arrow { + font-size: 9px; + opacity: 0.6; +} + +.ctx-readonly { + display: block; + padding: 5px 12px; + color: #888; + font-style: italic; + white-space: nowrap; + cursor: default; +} + +.ctx-separator { + display: block; + height: 1px; + background: #3a3a3a; + margin: 4px 0; +} diff --git a/source/components/editor-shell/editor-shell.css b/source/components/editor-shell/editor-shell.css new file mode 100644 index 0000000..52e8cf6 --- /dev/null +++ b/source/components/editor-shell/editor-shell.css @@ -0,0 +1,145 @@ +editor-shell { + display: flex; + flex-direction: column; + height: 100vh; + overflow: hidden; + background: #0f1117; + color: #e2e4ed; + font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif; +} + +.es-header { + display: flex; + align-items: center; + gap: 12px; + padding: 0 16px; + height: 40px; + background: #13151f; + border-bottom: 1px solid #2a2d3a; + flex-shrink: 0; +} + +.es-back { + color: #7b7f96; + text-decoration: none; + font-size: 0.8rem; +} +.es-back:hover { color: #e2e4ed; } + +.es-title { + flex: 1; + font-size: 0.9rem; + font-weight: 600; + color: #c8cbde; +} + +.es-portrait-btns { + display: none; + gap: 2px; +} + +editor-shell.portrait .es-portrait-btns { + display: flex; +} + +.es-pb-btn { + padding: 4px 10px; + background: transparent; + border: 1px solid #2a2d3a; + border-radius: 4px; + color: #7b7f96; + cursor: pointer; + font-size: 0.9rem; + font-family: inherit; +} +.es-pb-btn:hover { background: #1a1d27; color: #c8cbde; } +.es-pb-btn.active { color: #7c8cff; border-color: #7c8cff; } + +/* Workspace */ +.es-workspace { + display: flex; + flex: 1; + min-height: 0; + overflow: hidden; +} + +/* Panels */ +.es-panel { + display: flex; + flex-direction: column; + flex: 1; + min-width: 0; + overflow: hidden; +} + +.es-panel[data-panel="left"] { flex: 0 0 240px; } +.es-panel[data-panel="center"] { flex: 1; } +.es-panel[data-panel="right"] { flex: 0 0 280px; } + +.es-panel-empty { + flex: 1; + display: flex; + align-items: center; + justify-content: center; + color: #333; + font-size: 0.85rem; + border: 2px dashed #222; + margin: 8px; + border-radius: 6px; +} + +.es-panel.es-panel-drop .es-panel-empty { + border-color: #7c8cff; + color: #7c8cff; +} + +/* Sections within a panel — arranged horizontally */ +.es-sections { + display: flex; + flex-direction: row; + flex: 1; + min-height: 0; + overflow: hidden; +} + +.es-section { + display: flex; + flex-direction: column; + flex: 1; + min-width: 0; + min-height: 0; + overflow: hidden; +} + +/* Resize handles */ +.es-v-handle { + width: 4px; + background: #2a2d3a; + cursor: col-resize; + flex-shrink: 0; + transition: background 0.15s; +} +.es-v-handle:hover { background: #7c8cff; } + +.es-h-handle { + height: 4px; + background: #2a2d3a; + cursor: row-resize; + flex-shrink: 0; + transition: background 0.15s; +} +.es-h-handle:hover { background: #7c8cff; } + +/* Portrait overrides */ +editor-shell.portrait .es-workspace { + flex-direction: column; +} + +editor-shell.portrait .es-panel { + flex: 1 !important; + width: 100% !important; +} + +editor-shell.portrait .es-v-handle { + display: none; +} diff --git a/source/components/file-tree-panel/file-tree-panel.css b/source/components/file-tree-panel/file-tree-panel.css new file mode 100644 index 0000000..5e4ae5a --- /dev/null +++ b/source/components/file-tree-panel/file-tree-panel.css @@ -0,0 +1,130 @@ +file-tree-panel { + display: flex; + flex-direction: column; + height: 100%; + background: #0f1117; + color: #c8cbde; + font-size: 0.85rem; +} + +.ftp-header { + display: flex; + align-items: center; + gap: 4px; + padding: 4px 8px; + border-bottom: 1px solid #2a2d3a; + flex-shrink: 0; +} + +.ftp-btn { + padding: 2px 6px; + background: transparent; + border: 1px solid #2a2d3a; + border-radius: 3px; + color: #666; + cursor: pointer; + font-size: 0.7rem; + font-family: inherit; +} + +.ftp-btn:hover { color: #aaa; background: #1a1d27; border-color: #444; } + +.ftp-inline-create { + display: flex; + flex-direction: column; + gap: 4px; + padding: 8px; + background: #13151f; + border-bottom: 1px solid #2a2d3a; +} + +.ftp-inline-label { + font-size: 0.75rem; + color: #666; + font-style: italic; +} + +.ftp-rename-input { + width: 100%; + padding: 4px 6px; + background: #0f1117; + border: 1px solid #7c8cff; + border-radius: 3px; + color: #e2e4ed; + font-size: 0.85rem; + font-family: inherit; + outline: none; +} + +.ftp-inline-create .ftp-btn { + align-self: flex-start; + display: inline-block; + margin-right: 4px; +} + +.ftp-tree { + flex: 1; + overflow-y: auto; + padding: 4px 0; +} + +.ftp-list { + list-style: none; + padding: 0; + margin: 0; +} + +.ftp-list .ftp-list { + display: none; +} + +.ftp-dir.open > .ftp-list { + display: block; +} + +.ftp-dir-label { + display: block; + padding: 3px 8px 3px calc(8px + var(--depth, 0) * 12px); + cursor: pointer; + color: #7b7f96; +} + +.ftp-dir-label:hover { color: #c8cbde; } + +.ftp-dir.open > .ftp-dir-label { color: #c8cbde; } + +.ftp-file { + padding: 3px 8px 3px calc(20px + var(--depth, 0) * 12px); + cursor: pointer; + color: #9ba4c7; +} + +.ftp-file:hover { background: #1a1d27; color: #e2e4ed; } +.ftp-file.active { background: #1e2235; color: #7c8cff; } +.ftp-dir-label.active { background: #1e2235; color: #c8cbde; } + +.ftp-type-error { + padding: 6px 10px; + color: #e07070; + font-size: 0.8rem; + background: #1e1520; + border-bottom: 1px solid #3a2a2a; +} + +.ftp-empty { + display: block; + padding: 12px; + color: #555; + font-style: italic; +} + +.ftp-up { + padding: 4px 8px; + cursor: pointer; + color: #666; + font-size: 0.8rem; + font-style: italic; + border-bottom: 1px solid #1e2030; +} + +.ftp-up:hover { color: #c8cbde; background: #1a1d27; } diff --git a/source/components/group-editor/group-editor.css b/source/components/group-editor/group-editor.css new file mode 100644 index 0000000..a833b12 --- /dev/null +++ b/source/components/group-editor/group-editor.css @@ -0,0 +1,109 @@ +group-editor { + display: block; + max-width: 700px; + margin: 2rem auto; + padding: 0 1rem; +} + +group-editor h2 { + margin-bottom: 1rem; +} + +group-editor .create-form { + display: flex; + gap: 0.5rem; + margin-bottom: 1.5rem; +} + +group-editor .create-form input { + flex: 1; + padding: 0.5rem; + border: 1px solid #ccc; + border-radius: 4px; + font-size: 1rem; +} + +group-editor .group-list { + list-style: none; + padding: 0; + margin: 0; + display: flex; + flex-direction: column; + gap: 0.75rem; +} + +group-editor .group-list li { + border: 1px solid #ddd; + border-radius: 6px; + overflow: hidden; +} + +group-editor .group-header { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.75rem 1rem; + background: #f8f8f8; +} + +group-editor .group-header strong { + flex: 1; +} + +group-editor .members-panel { + padding: 1rem; + border-top: 1px solid #eee; +} + +group-editor .member-list { + list-style: none; + padding: 0; + margin: 0 0 1rem; +} + +group-editor .member-list li { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.4rem 0; + border-bottom: 1px solid #f0f0f0; +} + +group-editor .empty { + color: #999; + font-size: 0.9rem; +} + +group-editor .add-member-form { + display: flex; + gap: 0.5rem; +} + +group-editor .add-member-form input { + width: 80px; + padding: 0.4rem; + border: 1px solid #ccc; + border-radius: 4px; +} + +group-editor button { + padding: 0.4rem 0.8rem; + border: 1px solid #999; + background: #fff; + border-radius: 4px; + cursor: pointer; + font-size: 0.85rem; +} + +group-editor button:hover { + background: #f0f0f0; +} + +group-editor .btn-delete { + border-color: #c00; + color: #c00; +} + +group-editor .btn-delete:hover { + background: #fee; +} diff --git a/source/components/html-editor-panel/html-editor-panel.css b/source/components/html-editor-panel/html-editor-panel.css new file mode 100644 index 0000000..132545d --- /dev/null +++ b/source/components/html-editor-panel/html-editor-panel.css @@ -0,0 +1,52 @@ +html-editor-panel { + display: flex; + flex-direction: column; + height: 100%; + background: #0f1117; +} + +.hep-toolbar { + display: flex; + align-items: center; + gap: 4px; + padding: 4px 8px; + background: #13151f; + border-bottom: 1px solid #2a2d3a; + flex-shrink: 0; +} + +.hep-toolbar button { + padding: 3px 10px; + background: transparent; + border: 1px solid #2a2d3a; + border-radius: 4px; + color: #9ba4c7; + cursor: pointer; + font-size: 0.8rem; + font-family: inherit; +} + +.hep-toolbar button:hover:not(:disabled) { background: #1a1d27; color: #e2e4ed; } +.hep-toolbar button:disabled { opacity: 0.3; cursor: default; } + +.hep-save:not(:disabled) { border-color: #7c8cff; color: #7c8cff; } +.hep-save:not(:disabled):hover { background: #1e2235; } + +.hep-pin.pinned { border-color: #f0a050; color: #f0a050; } +.hep-pin.pinned:hover { background: #1e1a10; } + +.hep-empty { + flex: 1; + display: flex; + align-items: center; + justify-content: center; + color: #555; + font-size: 0.9rem; +} + +.hep-frame { + flex: 1; + border: none; + background: #fff; + width: 100%; +} diff --git a/source/components/login-form/login-form.css b/source/components/login-form/login-form.css new file mode 100644 index 0000000..ba387aa --- /dev/null +++ b/source/components/login-form/login-form.css @@ -0,0 +1,58 @@ +login-form { + display: block; + max-width: 360px; + margin: 80px auto; + padding: 2rem; + border: 1px solid #ddd; + border-radius: 6px; +} + +login-form form { + display: flex; + flex-direction: column; + gap: 1rem; +} + +login-form h2 { + margin: 0; +} + +login-form label { + display: flex; + flex-direction: column; + gap: 4px; + font-size: 0.9rem; +} + +login-form input { + padding: 0.5rem; + border: 1px solid #ccc; + border-radius: 4px; + font-size: 1rem; +} + +login-form button { + padding: 0.6rem; + background: #222; + color: #fff; + border: none; + border-radius: 4px; + cursor: pointer; + font-size: 1rem; +} + +login-form button:hover { + background: #444; +} + +login-form .error { + color: #c00; + font-size: 0.85rem; + min-height: 1em; +} + +login-form a { + text-align: center; + font-size: 0.9rem; + color: #555; +} diff --git a/source/components/project-editor/project-editor.css b/source/components/project-editor/project-editor.css new file mode 100644 index 0000000..e56db2d --- /dev/null +++ b/source/components/project-editor/project-editor.css @@ -0,0 +1,130 @@ +project-editor { + display: block; + max-width: 700px; + margin: 2rem auto; + padding: 0 1rem; +} + +project-editor h2 { + margin-bottom: 1rem; +} + +project-editor .create-form { + display: flex; + gap: 0.5rem; + margin-bottom: 1.5rem; +} + +project-editor .create-form input { + flex: 1; + padding: 0.5rem; + border: 1px solid #ccc; + border-radius: 4px; + font-size: 1rem; +} + +project-editor .project-list { + list-style: none; + padding: 0; + margin: 0; + display: flex; + flex-direction: column; + gap: 0.75rem; +} + +project-editor .project-list li { + border: 1px solid #ddd; + border-radius: 6px; + overflow: hidden; +} + +project-editor .project-header { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.75rem 1rem; + background: #f8f8f8; +} + +project-editor .project-header strong { + flex: 1; +} + +project-editor .members-panel { + padding: 1rem; + border-top: 1px solid #eee; +} + +project-editor .member-list { + list-style: none; + padding: 0; + margin: 0 0 1rem; +} + +project-editor .member-list li { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.4rem 0; + border-bottom: 1px solid #f0f0f0; +} + +project-editor .empty { + color: #999; + font-size: 0.9rem; +} + +project-editor .add-member-form { + display: flex; + gap: 0.5rem; + flex-wrap: wrap; +} + +project-editor .add-member-form input { + width: 80px; + padding: 0.4rem; + border: 1px solid #ccc; + border-radius: 4px; +} + +project-editor select { + padding: 0.4rem; + border: 1px solid #ccc; + border-radius: 4px; + font-size: 0.85rem; +} + +project-editor button { + padding: 0.4rem 0.8rem; + border: 1px solid #999; + background: #fff; + border-radius: 4px; + cursor: pointer; + font-size: 0.85rem; +} + +project-editor button:hover { + background: #f0f0f0; +} + +project-editor .btn-edit { + padding: 0.4rem 0.8rem; + border: 1px solid #7c8cff; + border-radius: 4px; + font-size: 0.85rem; + color: #7c8cff; + text-decoration: none; + display: inline-flex; + align-items: center; +} + +project-editor .btn-edit:hover { background: #f0f0ff; } + +project-editor .btn-delete { + border-color: #c00; + color: #c00; +} + +project-editor .btn-delete:hover { + background: #fee; +} diff --git a/source/components/register-form/register-form.css b/source/components/register-form/register-form.css new file mode 100644 index 0000000..b18346b --- /dev/null +++ b/source/components/register-form/register-form.css @@ -0,0 +1,58 @@ +register-form { + display: block; + max-width: 360px; + margin: 80px auto; + padding: 2rem; + border: 1px solid #ddd; + border-radius: 6px; +} + +register-form form { + display: flex; + flex-direction: column; + gap: 1rem; +} + +register-form h2 { + margin: 0; +} + +register-form label { + display: flex; + flex-direction: column; + gap: 4px; + font-size: 0.9rem; +} + +register-form input { + padding: 0.5rem; + border: 1px solid #ccc; + border-radius: 4px; + font-size: 1rem; +} + +register-form button { + padding: 0.6rem; + background: #222; + color: #fff; + border: none; + border-radius: 4px; + cursor: pointer; + font-size: 1rem; +} + +register-form button:hover { + background: #444; +} + +register-form .error { + color: #c00; + font-size: 0.85rem; + min-height: 1em; +} + +register-form a { + text-align: center; + font-size: 0.9rem; + color: #555; +} diff --git a/source/components/rojo-chat-panel/rojo-chat-panel.css b/source/components/rojo-chat-panel/rojo-chat-panel.css new file mode 100644 index 0000000..794f86c --- /dev/null +++ b/source/components/rojo-chat-panel/rojo-chat-panel.css @@ -0,0 +1,170 @@ +rojo-chat-panel { + display: flex; + flex-direction: column; + height: 100%; + background: #0f1117; +} + +/* ── Toolbar ─────────────────────────────────────────────── */ + +.rcp-toolbar { + display: flex; + align-items: center; + gap: 8px; + padding: 6px 8px; + background: #13151f; + border-bottom: 1px solid #2a2d3a; + flex-shrink: 0; +} + +.rcp-toolbar-icon { + width: 32px; + height: 32px; + background: #1a5fd4; + border-radius: 6px; + display: flex; + align-items: center; + justify-content: center; + font-size: 1.1rem; + flex-shrink: 0; +} + +.rcp-toolbar-name { + flex: 1; + color: #e2e4ed; + font-size: 0.95rem; +} + +.rcp-toolbar-btn { + width: 32px; + height: 32px; + background: #1a5fd4; + border: none; + border-radius: 6px; + color: #fff; + cursor: pointer; + font-size: 1rem; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; +} + +.rcp-toolbar-btn:hover { background: #1450b0; } + +/* ── Chat history ────────────────────────────────────────── */ + +.rcp-history { + flex: 1; + overflow-y: auto; + padding: 14px 12px; + display: flex; + flex-direction: column; + gap: 14px; + background: #08090e; +} + +.rcp-user-bubble { + align-self: flex-end; + background: #1e2235; + color: #dde0f0; + padding: 10px 14px; + border-radius: 10px; + max-width: 80%; + white-space: pre-wrap; + word-break: break-word; + font-size: 0.9rem; + line-height: 1.5; +} + +.rcp-assistant-bubble { + align-self: flex-start; + background: #13151f; + color: #c8ccde; + padding: 10px 14px; + border-radius: 10px; + max-width: 85%; + font-size: 0.9rem; + line-height: 1.6; + word-break: break-word; +} + +.rcp-assistant-bubble p { margin: 0 0 0.5em; } +.rcp-assistant-bubble p:last-child { margin-bottom: 0; } +.rcp-assistant-bubble ul, +.rcp-assistant-bubble ol { padding-left: 1.4em; margin: 0 0 0.5em; } +.rcp-assistant-bubble li { margin: 0.15em 0; } +.rcp-assistant-bubble strong { color: #e2e4ed; } +.rcp-assistant-bubble code { + background: #1a1d27; + padding: 0.1em 0.35em; + border-radius: 3px; + font-size: 0.85em; + font-family: ui-monospace, "Cascadia Code", monospace; +} +.rcp-assistant-bubble pre { + background: #1a1d27; + padding: 10px 12px; + border-radius: 6px; + overflow-x: auto; + margin: 0.5em 0; +} +.rcp-assistant-bubble pre code { background: none; padding: 0; } + +/* ── Input area ──────────────────────────────────────────── */ + +.rcp-input-area { + display: flex; + gap: 8px; + align-items: flex-end; + padding: 10px; + background: #3a1010; + border-top: 1px solid #2a2d3a; + flex-shrink: 0; +} + +.rcp-input-text { + flex: 1; + min-height: 4.5em; + max-height: 4.5em; + overflow-y: auto; + background: #1a1520; + color: #dde0f0; + padding: 8px 10px; + border-radius: 8px; + font-size: 0.9rem; + font-family: inherit; + line-height: 1.5; + outline: none; + word-break: break-word; +} + +.rcp-input-text:empty::before { + content: 'Type message…'; + color: #555; + pointer-events: none; +} + +.rcp-input-buttons { + display: flex; + flex-direction: column; + gap: 6px; +} + +.rcp-input-btn { + width: 36px; + height: 36px; + background: #555; + border: none; + border-radius: 50%; + color: #fff; + cursor: pointer; + font-size: 1rem; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; +} + +.rcp-input-btn:hover:not(:disabled) { background: #6a6a6a; } +.rcp-input-btn:disabled { opacity: 0.35; cursor: default; } diff --git a/source/components/tab-container/tab-container.css b/source/components/tab-container/tab-container.css new file mode 100644 index 0000000..7269bf4 --- /dev/null +++ b/source/components/tab-container/tab-container.css @@ -0,0 +1,78 @@ +tab-container { + display: flex; + flex-direction: column; + flex: 1; + min-height: 0; + overflow: hidden; + background: #0f1117; +} + +tab-container.tc-drop-target { + outline: 2px solid #7c8cff; + outline-offset: -2px; +} + +.tc-bar { + display: flex; + align-items: stretch; + background: #13151f; + border-bottom: 1px solid #2a2d3a; + flex-shrink: 0; + min-height: 32px; +} + +.tc-tabs { + display: flex; + align-items: stretch; + flex: 1; + overflow-x: auto; + scrollbar-width: none; +} + +.tc-tabs::-webkit-scrollbar { display: none; } + +.tc-tab { + display: flex; + align-items: center; + gap: 4px; + padding: 0 12px; + font-size: 0.8rem; + color: #7b7f96; + cursor: pointer; + white-space: nowrap; + border-right: 1px solid #2a2d3a; + user-select: none; +} + +.tc-tab:hover { color: #c8cbde; background: #1a1d27; } +.tc-tab.active { color: #e2e4ed; background: #0f1117; border-bottom: 2px solid #7c8cff; } +.tc-tab[draggable="true"] { cursor: grab; } +.tc-tab[draggable="true"]:active { cursor: grabbing; } + +.dirty-dot { color: #f59e0b; font-size: 0.6rem; } + +.tc-menu { + padding: 0 10px; + background: transparent; + border: none; + border-left: 1px solid #2a2d3a; + color: #555; + cursor: pointer; + font-size: 1rem; + letter-spacing: 0; +} + +.tc-menu:hover { color: #aaa; background: #1a1d27; } + +.tc-content { + flex: 1; + min-height: 0; + overflow: hidden; + position: relative; +} + +.tc-content > * { + position: absolute; + inset: 0; + overflow: auto; +}