:root { --bg: #111827; --text: #e5e7eb; --panel: #0b1220; --border: #1f2937; --muted: #94a3b8; --accent: #93c5fd; --input: #0f172a; --input-border: #334155; --btn: #334155; --btn-border: #475569; } :root.light { --bg: #f9fafb; --text: #0f172a; --panel: #ffffff; --border: #e5e7eb; --muted: #475569; --accent: #2563eb; --input: #ffffff; --input-border: #cbd5e1; --btn: #e5e7eb; --btn-border: #cbd5e1; } body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif; margin: 0; padding: 24px; background: var(--bg); color: var(--text); } h1 { font-size: 20px; margin: 0 0 12px } .container { max-width: 1200px; margin: 0 auto } a { color: var(--accent) } .toolbar { display: flex; gap: 8px; align-items: center; margin-bottom: 12px } .toolbar .spacer { flex: 1 } .toolbar input { background: var(--input); border: 1px solid var(--input-border); color: var(--text); padding: 6px 8px; border-radius: 6px } .toolbar button { background: var(--btn); border: 1px solid var(--btn-border); color: var(--text); padding: 6px 10px; border-radius: 6px; cursor: pointer } .layout { display: grid; grid-template-columns: minmax(300px, 380px) 1fr; gap: 16px; min-height: 70vh } .sidebar { background: var(--panel); border: 1px solid var(--border); padding: 8px; border-radius: 8px } .sidebar-header { display: flex; gap: 8px; row-gap: 6px; align-items: center; justify-content: space-between; margin-bottom: 8px; flex-wrap: wrap } .sidebar-header .spacer { display: none } .sidebar-header select { min-width: 140px; max-width: 100% } @media (min-width: 900px) { .sidebar-header { flex-wrap: nowrap } .sidebar-header .spacer { display: block; flex: 1 } } .ws-info { font-size: 12px; color: var(--muted); margin-left: auto } .sidebar-header label { font-size: 12px; color: var(--muted) } .sidebar-header select { background: var(--input); border: 1px solid var(--input-border); color: var(--text); padding: 6px 8px; border-radius: 6px } .sidebar-header button { background: var(--btn); border: 1px solid var(--btn-border); color: var(--text); padding: 6px 10px; border-radius: 6px; cursor: pointer; white-space: nowrap; flex: 0 0 auto } .sidebar-body { .sidebar-header #wsCreateBtn { width: 32px; height: 32px; padding: 0; line-height: 30px; text-align: center; font-weight: bold } .hint { color: var(--muted); font-size: 12px } .prompt .actions { margin-top: 8px } .prompt .actions button { background: var(--btn); border: 1px solid var(--btn-border); color: var(--text); padding: 6px 10px; border-radius: 6px; cursor: pointer } display: flex; flex-direction: column; gap: 8px } .searchbar { display: flex; gap: 8px } .searchbar input { background: var(--input); border: 1px solid var(--input-border); color: var(--text); padding: 6px 8px; border-radius: 6px } .searchbar button { background: var(--btn); border: 1px solid var(--btn-border); color: var(--text); padding: 6px 10px; border-radius: 6px; cursor: pointer } .sidebar-header button { background: var(--btn); border: 1px solid var(--btn-border); color: var(--text); padding: 6px 10px; border-radius: 6px; cursor: pointer } .main { display: flex; flex-direction: column; .prompt { background: var(--panel); border: 1px solid var(--border); padding: 12px; border-radius: 8px } .prompt textarea { width: 100%; min-height: 120px; background: var(--input); color: var(--text); border: 1px solid var(--input-border); border-radius: 6px; padding: 8px; resize: vertical } gap: 16px } /* Tabs */ .tabs { display: flex; justify-content: center; gap: 8px; margin-bottom: 8px } .tab { background: var(--btn); border: 1px solid var(--btn-border); color: var(--text); padding: 6px 10px; border-radius: 6px; cursor: pointer } .tab.active { background: transparent; border-color: var(--accent); color: var(--accent) } .tab-pane { display: none; } .tab-pane.active { display: block; } .subbar { display: flex; gap: 8px; align-items: center; margin: 8px 0 } .subbar input { background: var(--input); border: 1px solid var(--input-border); color: var(--text); padding: 6px 8px; border-radius: 6px } .subbar button { background: var(--btn); border: 1px solid var(--btn-border); color: var(--text); padding: 6px 10px; border-radius: 6px; cursor: pointer } .subbar input { background: var(--input); border: 1px solid var(--input-border); color: var(--text); padding: 6px 8px; border-radius: 6px } .subbar button { background: var(--btn); border: 1px solid var(--btn-border); color: var(--text); padding: 6px 10px; border-radius: 6px; cursor: pointer } /* Chat */ .chat { background: var(--panel); border: 1px solid var(--border); border-radius: 8px; display: flex; flex-direction: column; height: 60vh } .messages { flex: 1; padding: 12px; overflow: auto; display: flex; flex-direction: column; gap: 10px } .message { display: flex; gap: 8px; } .message .bubble { max-width: 70%; padding: 10px 12px; border-radius: 12px; border: 1px solid var(--border) } .message.user .bubble { background: rgba(99, 102, 241, 0.15); } .message.ai .bubble { background: rgba(16, 185, 129, 0.15); } .chat-input { border-top: 1px solid var(--border); padding: 10px; display: flex; gap: 8px } .chat-input textarea { flex: 1; background: var(--input); border: 1px solid var(--input-border); color: var(--text); border-radius: 8px; padding: 8px; min-height: 60px } .chat-input button { background: var(--btn); border: 1px solid var(--btn-border); color: var(--text); border-radius: 8px; padding: 8px 12px; cursor: pointer } .preview { background: var(--panel); border: 1px solid var(--border); padding: 8px; border-radius: 6px; min-height: 300px } .prompt, .selection { background: var(--panel); border: 1px solid var(--border); padding: 12px; border-radius: 6px } .prompt textarea { width: 100%; min-height: 120px; background: var(--input); color: var(--text); border: 1px solid var(--input-border); border-radius: 6px; padding: 8px; resize: vertical; } .prompt .actions { margin-top: 8px; } .prompt-output { margin-top: 10px; } .prompt-output pre { white-space: pre-wrap; background: var(--panel); border: 1px solid var(--border); padding: 8px; border-radius: 6px; } /* Collapsible tree styles */ #tree ul { list-style: none; margin: 0; padding-left: 12px; } #tree li { margin: 2px 0; } #tree .dir { color: var(--text); } #tree .dir .dir-label .name { color: var(--text); } #tree .file a { color: var(--text); text-decoration: none; } #tree .file a:hover { text-decoration: underline; } /* Modal */ .modal[aria-hidden="true"] { display: none } .modal { position: fixed; inset: 0; z-index: 1000; } .modal-backdrop { position: absolute; inset: 0; background: rgba(0, 0, 0, 0.5) } .modal .row { display: flex; gap: 12px } .modal .col { flex: 1; display: flex; flex-direction: column; gap: 8px } .modal .list { list-style: none; margin: 0; padding: 0; max-height: 40vh; overflow: auto } .modal .list li { display: flex; justify-content: space-between; align-items: center; gap: 8px; padding: 6px 0; border-bottom: 1px dashed var(--border) } .modal .list .use { background: var(--btn); border: 1px solid var(--btn-border); color: var(--text); border-radius: 6px; padding: 4px 8px; cursor: pointer } .modal-dialog { position: relative; margin: 8vh auto; max-width: 520px; background: var(--panel); color: var(--text); border: 1px solid var(--border); border-radius: 10px; padding: 12px; z-index: 1 } .modal-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px } .modal-header .icon { background: transparent; border: none; color: var(--text); cursor: pointer; font-size: 18px } .modal-body { display: flex; flex-direction: column; gap: 8px } .modal-body input { background: var(--input); color: var(--text); border: 1px solid var(--input-border); border-radius: 6px; padding: 8px } .modal-footer { display: flex; justify-content: flex-end; gap: 8px; margin-top: 12px } .modal-footer button { background: var(--btn); border: 1px solid var(--btn-border); color: var(--text); border-radius: 6px; padding: 6px 10px; cursor: pointer } .error { color: #ef4444; font-size: 12px; min-height: 16px } #tree .toggle { appearance: none; -webkit-appearance: none; width: 0; height: 0; position: absolute; } #tree .dir-label { display: inline-flex; align-items: center; gap: 6px; cursor: pointer; user-select: none; } #tree .dir .chev { display: inline-block; transform: rotate(-90deg); transition: transform 0.15s ease; width: 10px; height: 10px; border-right: 2px solid #93c5fd; border-bottom: 2px solid #93c5fd; margin-left: 2px; } #tree .dir .toggle:checked+.dir-label .chev { transform: rotate(0deg); } #tree .children { display: none; margin-left: 16px; } #tree .dir .toggle:checked~.children { display: block; } #tree button { margin-left: 6px; background: var(--btn); border: 1px solid var(--btn-border); color: var(--text); padding: 2px 6px; border-radius: 4px; cursor: pointer; font-size: 12px; } #selected li { display: flex; justify-content: space-between; gap: 8px }