hugging2021/local-gemma4-rag
1
1:root {2 --glass: rgba(255, 255, 255, 0.08);3 --glass-border: rgba(255, 255, 255, 0.12);4 --accent: #bb8bff;5 --accent-hover: #a370f7;6 --bg: #0f1115;7 --text: #e2e8f0;8 --text-muted: #94a3b8;9 --card-bg: rgba(30, 41, 59, 0.5);10}11 12* {13 box-sizing: border-box;14 margin: 0;15 padding: 0;16}17 18body {19 background: var(--bg);20 background-image: radial-gradient(circle at 50% 0%, #1e1b4b 0%, #0f1115 100%);21 color: var(--text);22 font-family: 'Inter', -apple-system, sans-serif;23 line-height: 1.6;24 min-height: 100vh;25 padding: 2rem;26}27 28.container {29 max-width: 1200px;30 margin: 0 auto;31}32 33header {34 display: flex;35 justify-content: space-between;36 align-items: center;37 margin-bottom: 3rem;38}39 40h1 {41 font-size: 2.5rem;42 font-weight: 800;43 letter-spacing: -0.025em;44 background: linear-gradient(to right, #fff, var(--accent));45 -webkit-background-clip: text;46 background-clip: text;47 -webkit-text-fill-color: transparent;48}49 50.subtitle {51 color: var(--text-muted);52 font-size: 1.1rem;53}54 55#sync-indicator {56 padding: 0.5rem;57 border-radius: 50%;58 background: var(--glass);59 color: var(--accent);60 box-shadow: 0 0 20px rgba(187, 139, 255, 0.2);61}62 63.card {64 background: var(--card-bg);65 border-radius: 20px;66 padding: 2rem;67 border: 1px solid var(--glass-border);68 backdrop-filter: blur(12px);69 margin-bottom: 1.5rem;70}71 72.card.glass {73 box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.37);74}75 76/* Setup Container */77#setup-container {78 max-width: 600px;79 margin: 4rem auto;80 text-align: center;81}82 83.status-box h2 {84 margin-bottom: 0.5rem;85}86 87.status-grid {88 display: grid;89 grid-template-columns: 1fr 1fr;90 gap: 1.5rem;91 margin: 2rem 0;92}93 94.status-item {95 text-align: left;96}97 98.status-label {99 font-size: 0.85rem;100 color: var(--text-muted);101 margin-bottom: 0.5rem;102}103 104.progress-bar-container {105 height: 6px;106 background: rgba(255, 255, 255, 0.05);107 border-radius: 10px;108 overflow: hidden;109}110 111.progress-fill {112 height: 100%;113 width: 0%;114 background: linear-gradient(to right, #7c3aed, var(--accent));115 transition: width 0.3s ease;116 box-shadow: 0 0 10px rgba(187, 139, 255, 0.5);117}118 119.model-selector-container {120 margin-bottom: 2rem;121 text-align: left;122}123 124.glass-select {125 width: 100%;126 padding: 0.75rem 1rem;127 background: rgba(255, 255, 255, 0.05);128 border: 1px solid var(--glass-border);129 border-radius: 12px;130 color: var(--text);131 font-size: 0.95rem;132 appearance: none;133 cursor: pointer;134 outline: none;135 transition: all 0.2s;136 background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23bb8bff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");137 background-repeat: no-repeat;138 background-position: right 1rem center;139 background-size: 1.2rem;140}141 142.glass-select:focus {143 border-color: var(--accent);144 background-color: rgba(255, 255, 255, 0.08);145}146 147.glass-select option {148 background: #1e293b;149 color: #fff;150}151 152.primary-btn {153 background: var(--accent);154 color: #fff;155 border: none;156 padding: 1rem 2rem;157 border-radius: 12px;158 font-weight: 600;159 cursor: pointer;160 transition: all 0.2s ease;161 width: 100%;162 font-size: 1rem;163}164 165.primary-btn:hover:not(:disabled) {166 background: var(--accent-hover);167 transform: translateY(-2px);168 box-shadow: 0 10px 20px rgba(187, 139, 255, 0.3);169}170 171.primary-btn:disabled {172 opacity: 0.5;173 cursor: not-allowed;174}175 176/* Main Layout */177#chat-container {178 display: grid;179 grid-template-columns: 300px 1fr;180 gap: 1.5rem;181}182 183.hidden {184 display: none !important;185}186 187/* Sidebar */188#sidebar {189 height: fit-content;190 padding: 1.5rem;191}192 193#sidebar h3 {194 margin-bottom: 1.2rem;195 font-size: 1.2rem;196 color: var(--accent);197}198 199#docs-list {200 list-style: none;201}202 203.doc-item {204 display: flex;205 align-items: center;206 gap: 0.75rem;207 padding: 0.75rem;208 background: rgba(255, 255, 255, 0.03);209 border-radius: 10px;210 margin-bottom: 0.5rem;211 font-size: 0.9rem;212 border: 1px solid transparent;213 transition: all 0.2s;214}215 216.doc-item:hover {217 background: rgba(255, 255, 255, 0.05);218 border-color: var(--glass-border);219}220 221.doc-item .remove-btn {222 margin-left: auto;223 background: transparent;224 border: none;225 color: var(--text-muted);226 cursor: pointer;227 padding: 4px;228 border-radius: 4px;229 opacity: 0;230 transition: all 0.2s;231 display: flex;232 align-items: center;233 justify-content: center;234}235 236.doc-item:hover .remove-btn {237 opacity: 1;238}239 240.doc-item .remove-btn:hover {241 background: rgba(239, 68, 68, 0.2);242 color: #ef4444;243}244 245.doc-icon {246 color: var(--accent);247}248 249/* Chat Main */250.chat-main {251 display: flex;252 flex-direction: column;253 gap: 1.5rem;254}255 256/* Upload Card */257#upload-card {258 padding: 1.5rem;259}260 261.upload-btn-wrapper {262 position: relative;263 overflow: hidden;264 cursor: pointer;265}266 267.upload-btn-placeholder {268 display: flex;269 flex-direction: column;270 align-items: center;271 padding: 1.5rem;272 border: 2px dashed var(--glass-border);273 border-radius: 15px;274 color: var(--text-muted);275}276 277.upload-btn-wrapper input[type=file] {278 font-size: 100px;279 position: absolute;280 left: 0;281 top: 0;282 opacity: 0;283 cursor: pointer;284}285 286.hint {287 font-size: 0.8rem;288 color: var(--text-muted);289}290 291/* Chat History */292.chat-card {293 flex-grow: 1;294 display: flex;295 flex-direction: column;296 min-height: 500px;297 max-height: 700px;298 padding: 0;299 overflow: hidden;300}301 302#chat-history {303 flex-grow: 1;304 overflow-y: auto;305 padding: 2rem;306 display: flex;307 flex-direction: column;308 gap: 1.5rem;309}310 311.message {312 display: flex;313 gap: 1rem;314 max-width: 85%;315}316 317.message.user {318 align-self: flex-end;319 flex-direction: row-reverse;320}321 322.message .avatar {323 width: 32px;324 height: 32px;325 border-radius: 8px;326 background: var(--glass);327 display: flex;328 align-items: center;329 justify-content: center;330 font-size: 0.75rem;331 font-weight: 700;332 flex-shrink: 0;333}334 335.message.user .avatar {336 background: var(--accent);337}338 339.message .content {340 background: rgba(255, 255, 255, 0.05);341 padding: 1.25rem 1.5rem;342 border-radius: 18px;343 font-size: 0.95rem;344 word-break: break-word;345 overflow-x: auto;346}347 348/* Markdown Element Styling */349.message .content h1, 350.message .content h2, 351.message .content h3 {352 margin: 1.5rem 0 0.75rem 0;353 color: var(--accent);354 line-height: 1.3;355}356 357.message .content h1 { font-size: 1.4rem; }358.message .content h2 { font-size: 1.2rem; }359.message .content h3 { font-size: 1.1rem; }360 361.message .content p {362 margin-bottom: 1rem;363}364 365.message .content p:last-child {366 margin-bottom: 0;367}368 369.message .content ul, 370.message .content ol {371 margin-bottom: 1rem;372 padding-left: 1.5rem;373}374 375.message .content li {376 margin-bottom: 0.4rem;377}378 379.message .content code {380 background: rgba(0, 0, 0, 0.3);381 padding: 0.2rem 0.4rem;382 border-radius: 4px;383 font-family: 'JetBrains Mono', 'Fira Code', monospace;384 font-size: 0.85rem;385 color: #f7768e;386}387 388.message .content pre {389 background: #1a1b26 !important; /* Tokyo Night Dark feel */390 padding: 1.25rem;391 border-radius: 12px;392 margin: 1.25rem 0;393 overflow-x: auto;394 border: 1px solid var(--glass-border);395}396 397.message .content pre code {398 background: transparent;399 padding: 0;400 color: inherit;401 font-size: 0.9rem;402}403 404.message .content blockquote {405 border-left: 4px solid var(--accent);406 background: rgba(187, 139, 255, 0.05);407 padding: 0.75rem 1.25rem;408 margin: 1.25rem 0;409 border-radius: 0 8px 8px 0;410 font-style: italic;411 color: var(--text-muted);412}413 414.message .content table {415 width: 100%;416 border-collapse: collapse;417 margin: 1.25rem 0;418 font-size: 0.9rem;419}420 421.message .content th, 422.message .content td {423 padding: 0.75rem;424 border: 1px solid var(--glass-border);425 text-align: left;426}427 428.message .content th {429 background: rgba(255, 255, 255, 0.05);430 color: var(--accent);431 font-weight: 600;432}433 434.message.ai .content {435 border-top-left-radius: 2px;436}437 438.message.user .content {439 background: var(--accent);440 color: #fff;441 border-top-right-radius: 2px;442}443 444.input-area {445 padding: 1.5rem;446 background: rgba(0, 0, 0, 0.2);447 display: flex;448 gap: 1rem;449 border-top: 1px solid var(--glass-border);450}451 452.input-area input {453 flex-grow: 1;454 background: var(--glass);455 border: 1px solid var(--glass-border);456 border-radius: 12px;457 padding: 0.75rem 1.25rem;458 color: #fff;459 outline: none;460 transition: border-color 0.2s;461}462 463.input-area input:focus {464 border-color: var(--accent);465}466 467.input-area button {468 background: var(--accent);469 border: none;470 width: 45px;471 height: 45px;472 border-radius: 12px;473 color: #fff;474 display: flex;475 align-items: center;476 justify-content: center;477 cursor: pointer;478 transition: all 0.2s;479}480 481.input-area button:hover {482 background: var(--accent-hover);483 transform: scale(1.05);484}485 486/* Sources UI */487.sources-container {488 margin-top: 1rem;489 border-top: 1px solid var(--glass-border);490 padding-top: 0.75rem;491}492 493.sources-toggle {494 background: transparent;495 border: 1px solid var(--glass-border);496 color: var(--text-muted);497 font-size: 0.75rem;498 padding: 0.3rem 0.6rem;499 border-radius: 6px;500 cursor: pointer;501 transition: all 0.2s;502}503 504.sources-toggle:hover {505 background: var(--glass);506 color: var(--text);507}508 509.sources-content {510 display: none;511 margin-top: 0.75rem;512 font-size: 0.8rem;513 color: var(--text-muted);514 background: rgba(0, 0, 0, 0.2);515 padding: 1rem;516 border-radius: 10px;517 max-height: 200px;518 overflow-y: auto;519}520 521.sources-content.show {522 display: block;523}524 525.source-snippet {526 margin-bottom: 0.75rem;527 padding-bottom: 0.75rem;528 border-bottom: 1px solid rgba(255, 255, 255, 0.05);529}530 531.source-snippet:last-child {532 border-bottom: none;533 margin-bottom: 0;534}535 536.source-meta {537 font-weight: 700;538 color: var(--accent);539 margin-bottom: 0.25rem;540 display: block;541}542 543/* Footer */544footer {545 margin-top: 4rem;546 text-align: center;547 color: var(--text-muted);548 font-size: 0.9rem;549 padding-bottom: 2rem;550 border-top: 1px solid var(--glass-border);551 padding-top: 2rem;552}553 554.footer-content {555 display: flex;556 flex-direction: column;557 gap: 0.5rem;558}559 560.social-link {561 color: var(--accent);562 text-decoration: none;563 font-weight: 600;564 transition: color 0.2s;565}566 567.social-link:hover {568 color: var(--accent-hover);569 text-decoration: underline;570}571 572.tech-stack {573 font-size: 0.75rem;574 opacity: 0.8;575}576 577footer strong {578 color: var(--accent);579}580 581/* Custom Scrollbar */582::-webkit-scrollbar {583 width: 6px;584}585::-webkit-scrollbar-track {586 background: transparent;587}588::-webkit-scrollbar-thumb {589 background: var(--glass-border);590 border-radius: 10px;591}592::-webkit-scrollbar-thumb:hover {593 background: var(--text-muted);594}595 596/* New UI Elements: Clear & Copy */597.chat-header {598 padding: 1rem 1.5rem;599 background: rgba(0, 0, 0, 0.15);600 border-bottom: 1px solid var(--glass-border);601 display: flex;602 justify-content: space-between;603 align-items: center;604}605 606.chat-header h3 {607 margin: 0;608 font-size: 0.8rem;609 text-transform: uppercase;610 letter-spacing: 1px;611 color: var(--text-muted);612}613 614#clear-chat-btn {615 background: transparent;616 border: 1px solid rgba(239, 68, 68, 0.3);617 color: #ef4444;618 padding: 0.3rem 0.6rem;619 border-radius: 6px;620 font-size: 0.7rem;621 cursor: pointer;622 transition: all 0.2s;623}624 625#clear-chat-btn:hover {626 background: rgba(239, 68, 68, 0.1);627 border-color: #ef4444;628}629 630.message.ai {631 position: relative;632}633 634.copy-btn {635 position: absolute;636 top: 0;637 right: -35px;638 background: transparent;639 border: none;640 color: var(--text-muted);641 cursor: pointer;642 opacity: 0;643 transition: all 0.2s;644 padding: 4px;645 border-radius: 4px;646}647 648.message.ai:hover .copy-btn {649 opacity: 1;650}651 652.copy-btn:hover {653 background: rgba(255, 255, 255, 0.05);654 color: var(--accent);655}656 