| <!DOCTYPE html> |
| <html lang="en"> |
|
|
| <head> |
| <meta charset="UTF-8" /> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
| <title>CrashX</title> |
| <meta name="description" content="AI-powered Minecraft crash log analyzer." /> |
|
|
| <link rel="preconnect" href="https://fonts.googleapis.com" /> |
| <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> |
| <link |
| href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400&display=swap" |
| rel="stylesheet" /> |
|
|
| <link rel="stylesheet" href="/css/main.css?v=5.0" /> |
| <script> |
| |
| if (localStorage.getItem('crashx-theme') === 'light') { |
| document.documentElement.classList.add('light-theme'); |
| } |
| if (localStorage.getItem('crashx-sidebar-closed') === 'true') { |
| document.documentElement.classList.add('sidebar-closed-init'); |
| } |
| </script> |
| </head> |
|
|
| <body> |
|
|
| <div id="app-container"> |
| |
| <nav id="sidebar" aria-label="Chat history"> |
| <div class="sidebar-header"> |
| <button id="btn-new-analysis" class="new-chat-btn"> |
| <div class="new-chat-icon"> |
| <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" |
| stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"> |
| <line x1="12" y1="5" x2="12" y2="19"></line> |
| <line x1="5" y1="12" x2="19" y2="12"></line> |
| </svg> |
| </div> |
| <span>New Analysis</span> |
| </button> |
| </div> |
|
|
| <div class="sidebar-scroll"> |
| <div class="history-group"> |
| <div class="history-label">Previous 7 Days</div> |
| <div id="history-list" role="list"> |
| |
| </div> |
| </div> |
| </div> |
|
|
| <div class="sidebar-footer"> |
| <div class="profile-dropdown-container"> |
| |
| <div id="profile-dropdown" class="dropdown-menu"> |
| <button id="btn-theme-toggle" class="dropdown-item"> |
| <div class="theme-icon-container"> |
| <svg class="theme-icon icon-for-dark" width="16" height="16" viewBox="0 0 24 24" fill="none" |
| stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> |
| <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path> |
| </svg> |
| <svg class="theme-icon icon-for-light" width="16" height="16" viewBox="0 0 24 24" fill="none" |
| stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> |
| <circle cx="12" cy="12" r="5"></circle> |
| <line x1="12" y1="1" x2="12" y2="3"></line> |
| <line x1="12" y1="21" x2="12" y2="23"></line> |
| <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line> |
| <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line> |
| <line x1="1" y1="12" x2="3" y2="12"></line> |
| <line x1="21" y1="12" x2="23" y2="12"></line> |
| <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line> |
| <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line> |
| </svg> |
| </div> |
| <span id="theme-text">Switch to Light Mode</span> |
| </button> |
| <div class="dropdown-divider"></div> |
| <button id="btn-sidebar-signin" class="dropdown-item"> |
| <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" |
| stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> |
| <path d="M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4"></path> |
| <polyline points="10 17 15 12 10 7"></polyline> |
| <line x1="15" y1="12" x2="3" y2="12"></line> |
| </svg> |
| <span>Sign in to sync</span> |
| </button> |
| </div> |
|
|
| |
| <button id="btn-profile-menu" class="sidebar-action-btn profile-btn"> |
| <div class="avatar-placeholder"> |
| <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" |
| stroke-width="2"> |
| <path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path> |
| <circle cx="12" cy="7" r="4"></circle> |
| </svg> |
| </div> |
| <span>Guest User</span> |
| </button> |
| </div> |
| </div> |
| </nav> |
|
|
| |
| <main id="main-content"> |
| |
| <header id="topbar"> |
| <button id="btn-toggle-sidebar" class="icon-btn" aria-label="Toggle sidebar"> |
| <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" |
| stroke-linecap="round" stroke-linejoin="round"> |
| <rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect> |
| <line x1="9" y1="3" x2="9" y2="21"></line> |
| </svg> |
| </button> |
| <div class="model-selector"> |
| <span class="logo-text">CrashX</span> |
| <span class="model-version">AI</span> |
| </div> |
| </header> |
|
|
| |
| <div id="chat-container"> |
| <div id="messages-area"> |
| |
| <div id="welcome-screen" class="welcome-screen"> |
| <div class="welcome-logo"> |
| <svg width="36" height="36" viewBox="0 0 24 24" fill="none" stroke="currentColor" |
| stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> |
| <path |
| d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"> |
| </path> |
| <polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline> |
| <line x1="12" y1="22.08" x2="12" y2="12"></line> |
| </svg> |
| </div> |
| <h1>What crashed today?</h1> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div id="input-container"> |
| <div class="input-wrapper"> |
| |
| <div id="queue-bar" class="queue-bar"> |
| <span class="spinner"></span> |
| <span id="queue-bar-text">Analyzing...</span> |
| </div> |
|
|
| <div class="input-box"> |
| <textarea id="crash-log-input" placeholder="Paste your Minecraft crash log here..." rows="1" |
| spellcheck="false"></textarea> |
| <button id="btn-analyze" class="send-btn" disabled> |
| <svg width="20" height="20" viewBox="0 0 24 24" fill="none" class="send-icon"> |
| <path d="M5 12h14M12 5l7 7-7 7" stroke="currentColor" stroke-width="2" |
| stroke-linecap="round" stroke-linejoin="round"></path> |
| </svg> |
| </button> |
| </div> |
| </div> |
| <div class="disclaimer"> |
| CrashX can make mistakes. Verify before making system changes. |
| </div> |
| </div> |
| </main> |
| </div> |
|
|
| |
| <div id="error-toast" class="toast"></div> |
|
|
| <script src="/js/three.min.js"></script> |
| <script type="module" src="/js/main.js"></script> |
| </body> |
|
|
| </html> |