Spaces:
Sleeping
Sleeping
| /* ๊ธฐ๋ณธ ์คํ์ผ */ | |
| :root { | |
| --primary-color: #4a6da7; | |
| --primary-dark: #345089; | |
| --secondary-color: #f59e0b; | |
| --text-color: #333; | |
| --light-text: #666; | |
| --bg-color: #f8f9fa; | |
| --card-bg: #fff; | |
| --border-color: #e0e0e0; | |
| --error-color: #ef4444; | |
| --success-color: #10b981; | |
| --hover-color: #f1f5f9; | |
| --transition: all 0.3s ease; | |
| } | |
| * { | |
| box-sizing: border-box; | |
| margin: 0; | |
| padding: 0; | |
| } | |
| body { | |
| font-family: 'Pretendard', 'Apple SD Gothic Neo', 'Noto Sans KR', sans-serif; | |
| line-height: 1.6; | |
| color: var(--text-color); | |
| background-color: var(--bg-color); | |
| margin: 0; | |
| } | |
| .container { | |
| max-width: 1000px; | |
| margin: 0 auto; | |
| padding: 20px; | |
| min-height: 100vh; | |
| display: flex; | |
| flex-direction: column; | |
| } | |
| /* ํค๋ ์คํ์ผ */ | |
| header { | |
| text-align: center; | |
| margin-bottom: 20px; | |
| } | |
| header h1 { | |
| color: var(--primary-color); | |
| margin-bottom: 15px; | |
| } | |
| .llm-selector { | |
| margin-bottom: 15px; | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| gap: 10px; | |
| } | |
| .llm-selector label { | |
| font-weight: 600; | |
| color: var(--primary-color); | |
| } | |
| #llmSelect { | |
| padding: 8px 12px; | |
| border: 1px solid var(--border-color); | |
| border-radius: 4px; | |
| background-color: white; | |
| font-size: 14px; | |
| outline: none; | |
| transition: var(--transition); | |
| } | |
| #llmSelect:focus { | |
| border-color: var(--primary-color); | |
| } | |
| .tabs { | |
| display: flex; | |
| justify-content: center; | |
| margin-bottom: 20px; | |
| } | |
| .tab { | |
| padding: 10px 20px; | |
| background-color: var(--card-bg); | |
| border: 1px solid var(--border-color); | |
| border-radius: 4px; | |
| margin: 0 5px; | |
| cursor: pointer; | |
| transition: var(--transition); | |
| } | |
| .tab:hover { | |
| background-color: var(--hover-color); | |
| } | |
| .tab.active { | |
| background-color: var(--primary-color); | |
| color: white; | |
| border-color: var(--primary-color); | |
| } | |
| /* ๋ฉ์ธ ์ปจํ ์ธ */ | |
| main { | |
| flex-grow: 1; | |
| } | |
| .tab-content { | |
| display: none; | |
| } | |
| .tab-content.active { | |
| display: block; | |
| } | |
| /* ์ฑํ ์น์ */ | |
| .chat-container { | |
| background-color: var(--card-bg); | |
| border-radius: 8px; | |
| box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); | |
| overflow: hidden; | |
| height: 70vh; | |
| display: flex; | |
| flex-direction: column; | |
| } | |
| .chat-messages { | |
| flex-grow: 1; | |
| overflow-y: auto; | |
| padding: 20px; | |
| } | |
| .message { | |
| margin-bottom: 20px; | |
| display: flex; | |
| align-items: flex-start; | |
| } | |
| .message.user { | |
| justify-content: flex-end; | |
| } | |
| .message-content { | |
| padding: 12px 16px; | |
| border-radius: 12px; | |
| max-width: 80%; | |
| } | |
| .message.system .message-content { | |
| background-color: #f0f7ff; | |
| color: var(--primary-dark); | |
| } | |
| .message.user .message-content { | |
| background-color: var(--primary-color); | |
| color: white; | |
| border-top-right-radius: 4px; | |
| } | |
| .message.bot .message-content { | |
| background-color: #f1f5f9; | |
| color: var(--text-color); | |
| border-top-left-radius: 4px; | |
| } | |
| .message p { | |
| margin-bottom: 8px; | |
| } | |
| .message p:last-child { | |
| margin-bottom: 0; | |
| } | |
| .message .sources { | |
| font-size: 0.85em; | |
| color: var(--light-text); | |
| margin-top: 5px; | |
| } | |
| .message .source-item { | |
| margin-right: 10px; | |
| } | |
| .message .transcription { | |
| font-style: italic; | |
| opacity: 0.8; | |
| font-size: 0.9em; | |
| margin-bottom: 8px; | |
| } | |
| .chat-input-container { | |
| display: flex; | |
| padding: 15px; | |
| border-top: 1px solid var(--border-color); | |
| background-color: var(--card-bg); | |
| } | |
| #userInput { | |
| flex-grow: 1; | |
| border: 1px solid var(--border-color); | |
| border-radius: 20px; | |
| padding: 10px 15px; | |
| font-size: 16px; | |
| resize: none; | |
| outline: none; | |
| transition: var(--transition); | |
| } | |
| #userInput:focus { | |
| border-color: var(--primary-color); | |
| } | |
| .mic-button, .send-button, .stop-recording-button { | |
| border: none; | |
| background-color: transparent; | |
| color: var(--primary-color); | |
| font-size: 20px; | |
| margin-left: 10px; | |
| cursor: pointer; | |
| transition: var(--transition); | |
| width: 40px; | |
| height: 40px; | |
| border-radius: 50%; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .mic-button:hover, .send-button:hover, .stop-recording-button:hover { | |
| background-color: var(--hover-color); | |
| } | |
| .stop-recording-button { | |
| background-color: var(--error-color); | |
| color: white; | |
| } | |
| .stop-recording-button:hover { | |
| background-color: #dc2626; /* ๋ ์ด๋์ด ๋นจ๊ฐ์ */ | |
| } | |
| .recording-status { | |
| display: flex; | |
| align-items: center; | |
| padding: 10px 15px; | |
| background-color: rgba(239, 68, 68, 0.1); | |
| border-top: 1px solid var(--border-color); | |
| color: var(--error-color); | |
| } | |
| .recording-indicator { | |
| position: relative; | |
| width: 12px; | |
| height: 12px; | |
| margin-right: 10px; | |
| } | |
| .recording-pulse { | |
| position: absolute; | |
| width: 100%; | |
| height: 100%; | |
| background-color: var(--error-color); | |
| border-radius: 50%; | |
| animation: pulse 1.5s infinite; | |
| } | |
| @keyframes pulse { | |
| 0% { | |
| transform: scale(0.8); | |
| opacity: 1; | |
| } | |
| 70% { | |
| transform: scale(1.5); | |
| opacity: 0; | |
| } | |
| 100% { | |
| transform: scale(0.8); | |
| opacity: 0; | |
| } | |
| } | |
| .hidden { | |
| display: none; | |
| } | |
| /* ๋ฌธ์ ๊ด๋ฆฌ ์น์ */ | |
| .docs-container { | |
| background-color: var(--card-bg); | |
| border-radius: 8px; | |
| box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); | |
| overflow: hidden; | |
| padding: 20px; | |
| } | |
| .upload-section { | |
| margin-bottom: 30px; | |
| padding-bottom: 20px; | |
| border-bottom: 1px solid var(--border-color); | |
| } | |
| .upload-section h2, .docs-list-section h2 { | |
| margin-bottom: 15px; | |
| color: var(--primary-color); | |
| } | |
| .file-upload { | |
| display: flex; | |
| align-items: center; | |
| margin-bottom: 20px; | |
| } | |
| .file-upload input[type="file"] { | |
| display: none; | |
| } | |
| .file-upload label { | |
| padding: 10px 20px; | |
| background-color: var(--primary-color); | |
| color: white; | |
| border-radius: 4px; | |
| cursor: pointer; | |
| transition: var(--transition); | |
| } | |
| .file-upload label:hover { | |
| background-color: var(--primary-dark); | |
| } | |
| #fileName { | |
| margin-left: 15px; | |
| color: var(--light-text); | |
| } | |
| .upload-button { | |
| padding: 10px 20px; | |
| background-color: var(--secondary-color); | |
| color: white; | |
| border: none; | |
| border-radius: 4px; | |
| cursor: pointer; | |
| transition: var(--transition); | |
| display: flex; | |
| align-items: center; | |
| } | |
| .upload-button i { | |
| margin-right: 8px; | |
| } | |
| .upload-button:hover { | |
| background-color: #d97706; /* ๋ ์ด๋์ด ์ฃผํฉ์ */ | |
| } | |
| .upload-status { | |
| margin-top: 15px; | |
| padding: 10px 15px; | |
| border-radius: 4px; | |
| } | |
| .upload-status.success { | |
| background-color: rgba(16, 185, 129, 0.1); | |
| color: var(--success-color); | |
| } | |
| .upload-status.error { | |
| background-color: rgba(239, 68, 68, 0.1); | |
| color: var(--error-color); | |
| } | |
| .docs-list-section { | |
| position: relative; | |
| } | |
| .refresh-button { | |
| position: absolute; | |
| top: 0; | |
| right: 0; | |
| padding: 5px 10px; | |
| background-color: transparent; | |
| color: var(--primary-color); | |
| border: 1px solid var(--primary-color); | |
| border-radius: 4px; | |
| cursor: pointer; | |
| transition: var(--transition); | |
| display: flex; | |
| align-items: center; | |
| } | |
| .refresh-button i { | |
| margin-right: 5px; | |
| } | |
| .refresh-button:hover { | |
| background-color: var(--hover-color); | |
| } | |
| .docs-list { | |
| width: 100%; | |
| border-collapse: collapse; | |
| margin-top: 20px; | |
| } | |
| .docs-list th, .docs-list td { | |
| padding: 12px 15px; | |
| text-align: left; | |
| border-bottom: 1px solid var(--border-color); | |
| } | |
| .docs-list th { | |
| background-color: #f1f5f9; | |
| font-weight: 600; | |
| } | |
| .docs-list tr:hover { | |
| background-color: var(--hover-color); | |
| } | |
| .loading-indicator { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| padding: 30px; | |
| } | |
| .spinner { | |
| width: 40px; | |
| height: 40px; | |
| border: 4px solid #f3f3f3; | |
| border-top: 4px solid var(--primary-color); | |
| border-radius: 50%; | |
| animation: spin 1s linear infinite; | |
| margin-bottom: 15px; | |
| } | |
| @keyframes spin { | |
| 0% { transform: rotate(0deg); } | |
| 100% { transform: rotate(360deg); } | |
| } | |
| .no-docs-message { | |
| text-align: center; | |
| padding: 30px; | |
| color: var(--light-text); | |
| } | |
| /* ํธํฐ */ | |
| footer { | |
| text-align: center; | |
| margin-top: 30px; | |
| padding-top: 20px; | |
| border-top: 1px solid var(--border-color); | |
| color: var(--light-text); | |
| font-size: 0.9em; | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| flex-wrap: wrap; | |
| } | |
| footer p { | |
| margin-bottom: 5px; | |
| } | |
| .current-llm { | |
| color: var(--primary-color); | |
| font-weight: 500; | |
| } | |
| #currentLLMInfo { | |
| font-weight: 600; | |
| } | |
| /* ๋ฐ์ํ ์คํ์ผ */ | |
| @media (max-width: 768px) { | |
| .container { | |
| padding: 10px; | |
| } | |
| .chat-container { | |
| height: 65vh; | |
| } | |
| .message-content { | |
| max-width: 90%; | |
| } | |
| .file-upload { | |
| flex-direction: column; | |
| align-items: flex-start; | |
| } | |
| #fileName { | |
| margin-left: 0; | |
| margin-top: 10px; | |
| } | |
| .refresh-button { | |
| position: static; | |
| margin-top: 10px; | |
| margin-bottom: 10px; | |
| } | |
| footer { | |
| flex-direction: column; | |
| text-align: center; | |
| } | |
| .current-llm { | |
| margin-top: 10px; | |
| } | |
| .llm-selector { | |
| flex-direction: column; | |
| gap: 5px; | |
| } | |
| } | |