| * { | |
| margin: 0; | |
| padding: 0; | |
| box-sizing: border-box; | |
| } | |
| body { | |
| font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; | |
| background-color: #f8f9fa; | |
| color: #333; | |
| line-height: 1.4; | |
| } | |
| #app { | |
| max-width: 1400px; | |
| margin: 0 auto; | |
| padding: 2rem; | |
| } | |
| .header { | |
| background: white; | |
| padding: 1.5rem; | |
| border-radius: 8px; | |
| box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); | |
| margin-bottom: 2rem; | |
| } | |
| .header h1 { | |
| color: #2c3e50; | |
| margin-bottom: 1rem; | |
| } | |
| .controls { | |
| display: flex; | |
| gap: 1rem; | |
| align-items: center; | |
| flex-wrap: wrap; | |
| } | |
| .file-input { | |
| display: none; | |
| } | |
| .file-label { | |
| background: #3498db; | |
| color: white; | |
| padding: 0.5rem 1rem; | |
| border-radius: 4px; | |
| cursor: pointer; | |
| transition: background-color 0.2s; | |
| } | |
| .file-label:hover { | |
| background: #2980b9; | |
| } | |
| .filter-input { | |
| padding: 0.5rem; | |
| border: 1px solid #ddd; | |
| border-radius: 4px; | |
| font-size: 14px; | |
| } | |
| .filter-input:focus { | |
| outline: none; | |
| border-color: #3498db; | |
| } | |
| .stats { | |
| color: #666; | |
| font-size: 14px; | |
| } | |
| .thread-container { | |
| background: white; | |
| border-radius: 8px; | |
| box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); | |
| margin-bottom: 1rem; | |
| overflow: hidden; | |
| } | |
| .thread-header { | |
| padding: 1rem; | |
| background: #34495e; | |
| color: white; | |
| cursor: pointer; | |
| user-select: none; | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| } | |
| .thread-header:hover { | |
| background: #2c3e50; | |
| } | |
| .thread-title { | |
| font-family: "Monaco", "Menlo", "Ubuntu Mono", monospace; | |
| font-size: 14px; | |
| } | |
| .toggle-indicator { | |
| transition: transform 0.2s; | |
| } | |
| .toggle-indicator.expanded { | |
| transform: rotate(90deg); | |
| } | |
| .thread-content { | |
| padding: 1rem; | |
| background: #f8f9fa; | |
| border-top: 1px solid #e9ecef; | |
| } | |
| .backtrace { | |
| font-family: "Monaco", "Menlo", "Ubuntu Mono", monospace; | |
| font-size: 12px; | |
| line-height: 1.3; | |
| white-space: pre; | |
| overflow-x: auto; | |
| background: white; | |
| padding: 1rem; | |
| border-radius: 4px; | |
| border: 1px solid #e9ecef; | |
| } | |
| .backtrace-line { | |
| margin: 2px 0; | |
| padding: 1px 0; | |
| cursor: default; | |
| } | |
| .backtrace-line.has-section { | |
| cursor: pointer; | |
| } | |
| .backtrace-line.has-section:hover { | |
| background-color: #f0f8ff; | |
| } | |
| .collapse-indicator { | |
| color: #3498db; | |
| font-size: 10px; | |
| margin-right: 4px; | |
| font-weight: bold; | |
| user-select: none; | |
| } | |
| .backtrace-line.section-collapsed .collapse-indicator { | |
| color: #95a5a6; | |
| } | |
| .backtrace-line .indent { | |
| display: inline-block; | |
| } | |
| .backtrace-line .sample-count { | |
| color: #e67e22; | |
| font-weight: bold; | |
| } | |
| .backtrace-line .function-name { | |
| color: #2c3e50; | |
| } | |
| .backtrace-line .address { | |
| color: #7f8c8d; | |
| } | |
| .no-threads { | |
| text-align: center; | |
| padding: 3rem; | |
| color: #666; | |
| } | |
| .loading { | |
| text-align: center; | |
| padding: 2rem; | |
| color: #666; | |
| } | |
| @media (max-width: 768px) { | |
| #app { | |
| padding: 1rem; | |
| } | |
| .controls { | |
| flex-direction: column; | |
| align-items: stretch; | |
| } | |
| .thread-header { | |
| padding: 0.75rem; | |
| } | |
| .backtrace { | |
| font-size: 11px; | |
| } | |
| } | |