* { 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; } }