diff --git a/optimized.css b/optimized.css deleted file mode 100644 index 2c158c3..0000000 --- a/optimized.css +++ /dev/null @@ -1,707 +0,0 @@ -/* CSS Variables for consistent styling */ -:root { - /* Colors */ - --color-primary: #007bff; - --color-success: #28a745; - --color-danger: #721c24; - --color-text: #495057; - --color-text-muted: #6c757d; - --color-bg-white: #fff; - --color-bg-light: #f8f9fa; - --color-bg-danger: #f8d7da; - --color-bg-warning: #fff3cd; - --color-bg-info: #f0f8ff; - --color-bg-hover: #e3f2fd; - --color-border: #dee2e6; - --color-border-light: #f1f3f4; - --color-border-danger: #f5c6cb; - --color-border-warning: #ffeaa7; - - /* Spacing */ - --spacing-xs: 4px; - --spacing-sm: 8px; - --spacing-md: 15px; - --spacing-lg: 20px; - - /* Typography */ - --font-family-base: system-ui, sans-serif; - --font-family-mono: monospace; - --font-size-xs: 9px; - --font-size-sm: 10px; - --font-size-md: 11px; - --font-size-base: 12px; - --font-size-lg: 14px; - --font-size-xl: 16px; - --font-size-xxl: 18px; - - /* Border radius */ - --radius-sm: 3px; - --radius-md: 4px; - --radius-lg: 6px; - --radius-xl: 8px; - --radius-xxl: 12px; - - /* Z-index */ - --z-modal: 1000; -} - -/* Base styles */ -.base-container { - padding: var(--spacing-lg); -} - -.base-font-mono { - font-family: var(--font-family-mono); -} - -.base-font-bold { - font-weight: bold; -} - -.base-font-italic { - font-style: italic; -} - -.base-cursor-pointer { - cursor: pointer; -} - -.base-cursor-help { - cursor: help; -} - -.base-cursor-disabled { - cursor: not-allowed; -} - -.base-user-select-none { - user-select: none; -} - -.base-text-center { - text-align: center; -} - -.base-text-left { - text-align: left; -} - -.base-text-right { - text-align: right; -} - -.base-flex { - display: flex; -} - -.base-flex-center { - display: flex; - justify-content: center; - align-items: center; -} - -.base-grid-auto { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); -} - -.base-margin-reset { - margin: 0; -} - -.base-border-radius { - border-radius: var(--radius-md); -} - -/* Color utility classes */ -.color-primary { - color: var(--color-primary); -} - -.color-success { - color: var(--color-success); -} - -.color-text { - color: var(--color-text); -} - -.color-text-muted { - color: var(--color-text-muted); -} - -.bg-light { - background: var(--color-bg-light); -} - -.bg-white { - background: var(--color-bg-white); -} - -.bg-info { - background-color: var(--color-bg-info); -} - -.bg-hover:hover { - background-color: var(--color-bg-hover); -} - -.border-standard { - border: 1px solid var(--color-border); -} - -.border-bottom { - border-bottom: 1px solid var(--color-border); -} - -.border-bottom-light { - border-bottom: 1px solid var(--color-border-light); -} - -/* Button base styles */ -.btn-base { - padding: var(--spacing-sm) var(--spacing-md); - border-radius: var(--radius-md); - font-size: var(--font-size-lg); - cursor: pointer; - border: 1px solid var(--color-border); -} - -.btn-disabled:disabled { - background: #e9ecef; - cursor: not-allowed; -} - -/* Main container */ -.container { - composes: base-container; - font-family: var(--font-family-base); -} - -/* Error states */ -.errorContainer { - composes: base-container base-text-center; -} - -.errorMessage { - background: var(--color-bg-danger); - color: var(--color-danger); - padding: var(--spacing-md); - border-radius: var(--radius-xl); - border: 1px solid var(--color-border-danger); -} - -.errorMessage h3 { - margin: 0 0 10px 0; -} - -.errorMessage p { - composes: base-margin-reset; -} - -/* Pagination controls */ -.paginationControls { - composes: base-flex-center; - gap: 10px; - margin-bottom: var(--spacing-lg); -} - -.paginationButton { - composes: btn-base bg-white; -} - -.paginationButton:disabled { - composes: btn-disabled; -} - -.paginationInfo { - margin: 0 var(--spacing-md); - font-size: var(--font-size-lg); -} - -/* Modal styles */ -.modalOverlay { - position: fixed; - top: 0; - left: 0; - width: 100vw; - height: 100vh; - background-color: rgba(0, 0, 0, 0.8); - display: flex; - justify-content: center; - align-items: center; - z-index: var(--z-modal); -} - -.modalContainer { - width: 90vw; - height: 90vh; - background: var(--color-bg-white); - border-radius: var(--radius-xxl); - display: flex; - flex-direction: column; - box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5); -} - -.modalHeader { - composes: base-flex; - align-items: center; - justify-content: space-between; - padding: var(--spacing-md) var(--spacing-lg); - border-bottom: 1px solid var(--color-border); - border-radius: var(--radius-xxl) var(--radius-xxl) 0 0; -} - -.modalTitle { - composes: base-margin-reset color-text; - font-size: var(--font-size-xxl); -} - -.modalCloseButton { - composes: btn-base; - background: transparent; - color: var(--color-text-muted); - border-color: var(--color-text-muted); - border-radius: var(--radius-lg); -} - -.modalCloseButton:hover { - composes: bg-light; -} - -.modalContent { - flex: 1; - padding: 10px; -} - -.modalLegend { - composes: base-grid-auto bg-light; - padding: var(--spacing-md) var(--spacing-lg); - font-size: var(--font-size-base); - color: var(--color-text-muted); - gap: 10px; - border-top: 1px solid var(--color-border); - border-radius: 0 0 var(--radius-xxl) var(--radius-xxl); -} - -.modalLegend div { - margin: 2px 0; -} - -.modalLegend strong { - composes: base-font-bold; -} - -/* Table styles */ -.tableContainer { - composes: bg-white border-standard; - border-radius: var(--radius-xl); - overflow: hidden; -} - -.table { - width: 100%; - border-collapse: collapse; -} - -.tableHeader { - composes: bg-light; -} - -.tableHeaderCell { - padding: var(--spacing-sm); - border-bottom: 1px solid var(--color-border); - font-size: var(--font-size-base); - font-weight: bold; -} - -.tableHeaderCell.center { - composes: base-text-center; -} - -.tableHeaderCell.left { - composes: base-text-left; -} - -.tableHeaderCell.right { - composes: base-text-right; -} - -.tableHeaderCell.expandColumn { - width: 30px; -} - -/* Table rows */ -.tableRow { - composes: border-bottom-light base-cursor-pointer; -} - -.tableRow:hover { - composes: bg-light; -} - -.screenshotRow { - composes: bg-info; - border-bottom: 2px solid var(--color-primary); -} - -.screenshotRow:hover { - composes: bg-hover; -} - -/* Screenshot components */ -.screenshotContainer { - composes: base-flex; - align-items: center; - gap: var(--spacing-md); - padding: var(--spacing-md); -} - -.screenshotLabel { - composes: base-font-bold color-primary; - font-size: var(--font-size-lg); - min-width: 120px; -} - -.screenshotTime { - composes: base-font-mono color-text; - font-size: var(--font-size-base); -} - -.screenshotImage { - max-width: 200px; - max-height: 150px; - border: 2px solid var(--color-primary); - border-radius: var(--radius-md); - cursor: pointer; - transition: transform 0.2s ease; -} - -.screenshotImage:hover { - transform: scale(1.05); -} - -.screenshotHint { - composes: base-font-italic color-text-muted; - font-size: var(--font-size-md); -} - -/* Table cells base */ -.tableCell { - padding: var(--spacing-sm); - font-size: var(--font-size-base); - vertical-align: middle; -} - -.tableCell.center { - composes: base-text-center; -} - -.tableCell.right { - composes: base-text-right; -} - -.tableCell.monospace { - composes: base-font-mono; -} - -.tableCell.bold { - composes: base-font-bold; -} - -.tableCell.expandCell { - composes: color-primary base-font-bold base-user-select-none; - font-size: var(--font-size-xl); -} - -/* Method styles */ -.methodGet { - composes: color-success; -} - -.methodOther { - composes: color-primary; -} - -/* URL cell */ -.urlCell { - font-size: var(--font-size-md); - max-width: 400px; - overflow: hidden; - text-overflow: ellipsis; -} - -.urlLink { - composes: color-primary; - text-decoration: none; -} - -.urlLink:hover { - text-decoration: underline; -} - -/* Queue time container */ -.queueTimeContainer { - composes: base-flex; - align-items: center; - justify-content: flex-end; - gap: var(--spacing-xs); -} - -.queueAnalysisIcon { - composes: base-cursor-help; - font-size: var(--font-size-lg); -} - -/* Connection status indicators */ -.connectionCached, -.connectionReused { - composes: base-font-italic; - color: #666; -} - -/* Cache indicators with consistent spacing */ -.cacheFromCache::before { - content: '💾'; - margin-right: var(--spacing-xs); -} - -.cacheConnectionReused::before { - content: '🔄'; - margin-right: var(--spacing-xs); -} - -.cacheNetwork::before { - content: '🌐'; - margin-right: var(--spacing-xs); -} - -/* Expanded content */ -.expandedRow { - composes: bg-light; - border: 1px solid #e9ecef; -} - -.expandedContent { - padding: var(--spacing-md); - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: var(--spacing-md); -} - -.detailCard { - composes: bg-white border-standard base-border-radius; - padding: 10px; -} - -.detailCard.fullWidth { - grid-column: 1 / -1; -} - -.detailCardTitle { - composes: base-margin-reset color-text base-font-bold; - margin-bottom: var(--spacing-sm); - font-size: var(--font-size-lg); -} - -.detailList { - font-size: var(--font-size-base); - display: flex; - flex-direction: column; - gap: var(--spacing-xs); -} - -.detailListItem { - composes: base-margin-reset; -} - -.detailListItem strong { - composes: base-font-bold; - margin-right: var(--spacing-sm); -} - -/* Timing styles */ -.timingHighlighted { - composes: base-font-bold base-border-radius; - padding: var(--spacing-xs) var(--spacing-sm); - border: 1px solid #e9ecef; -} - -/* Analysis card titles */ -.queueAnalysisCard .detailCardTitle, -.cdnAnalysisCard .detailCardTitle { - composes: base-flex; - align-items: center; - gap: var(--spacing-sm); -} - -.relatedRequestIds { - composes: base-font-mono color-text; - font-size: var(--font-size-md); - word-break: break-all; -} - -/* Debug section */ -.debugSection { - margin-top: var(--spacing-sm); - padding: var(--spacing-sm); - background: var(--color-bg-warning); - border: 1px solid var(--color-border-warning); - border-radius: var(--radius-md); -} - -.debugTitle { - composes: base-font-bold; - margin-bottom: var(--spacing-xs); - font-size: var(--font-size-md); -} - -.debugInfo { - margin-bottom: 6px; - font-size: var(--font-size-md); -} - -.debugHeaders { - composes: base-font-bold; - font-size: var(--font-size-sm); - margin-bottom: 2px; -} - -.headerLine { - composes: base-font-mono; - font-size: var(--font-size-xs); - margin-bottom: 1px; - padding: 1px 3px; - border-radius: 2px; -} - -.headerLine.akamaiIndicator { - background-color: #d1ecf1; - color: #0c5460; -} - -.headerName { - composes: base-font-bold; - margin-right: 5px; -} - -.headerName.akamaiIndicator { - color: #0c5460; -} - -.akamaiLabel { - composes: base-font-bold; - color: #0c5460; - margin-left: 5px; -} - -/* Headers container */ -.headersContainer { - composes: bg-light base-font-mono; - max-height: 150px; - overflow-y: auto; - font-size: var(--font-size-md); - padding: var(--spacing-sm); - border-radius: var(--radius-sm); -} - -.headerItem { - margin-bottom: 2px; - display: grid; - grid-template-columns: 150px 1fr; - gap: 10px; -} - -.headerItemName { - composes: color-primary base-font-bold; -} - -.headerItemValue { - composes: color-text; - word-break: break-all; -} - -/* No results */ -.noResults { - composes: base-text-center color-text-muted; - padding: 40px; - font-size: var(--font-size-xl); -} - -/* Utility classes */ -.coloredBackground { - composes: base-border-radius; - padding: var(--spacing-xs) 6px; -} - -.highlighted { - composes: base-font-bold; -} - -/* Specialized table cell styles */ -.tableCellMonoBold { - composes: tableCell base-font-mono base-font-bold; -} - -.tableCellCenter { - composes: tableCellMonoBold base-text-center; -} - -.tableCellRight { - composes: tableCellMonoBold base-text-right; -} - -.tableCell.statusCell { - composes: tableCellCenter; -} - -.tableCell.methodCell { - composes: tableCellMonoBold; -} - -.tableCell.priorityCell { - composes: tableCellCenter; -} - -.tableCell.timeCell { - composes: tableCellRight color-text; -} - -.tableCell.gray { - composes: color-text-muted; -} - -/* Response time cells with consistent styling */ -.responseTimeCell { - composes: tableCellRight base-border-radius; - padding: var(--spacing-sm); - font-weight: bold; -} - -.totalResponseTimeCell { - composes: responseTimeCell; - border: 1px solid #e9ecef; -} - -.durationCell, -.sizeCell, -.serverLatencyCell { - composes: responseTimeCell; -} - -.protocolCell { - composes: tableCellCenter; -} - -.cdnCell, -.cacheCell { - composes: tableCell base-text-center; -} - -.cdnCell { - composes: base-cursor-help; -} - -.cdnCell.default { - cursor: default; -} \ No newline at end of file diff --git a/src/App.css b/src/App.css deleted file mode 100644 index 8b13789..0000000 --- a/src/App.css +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/App.module.css b/src/App.module.css new file mode 100644 index 0000000..feb0a54 --- /dev/null +++ b/src/App.module.css @@ -0,0 +1,58 @@ +:root { + /* Colors */ + --color-primary: #007bff; + --color-success: #287745; + --color-warning: #f57c00; + --color-danger: #ffcccc; + --color-text: #8899aa; + --color-text-muted: #6c757d; + --color-text-highlight: #ccddee; + + --color-bg-light: #f8f9fa; + --color-bg-success: #222222; + --color-bg-warning: #ffff00; + --color-bg-danger: #cc3344; + --color-bg-info: #f0f8ff; + --color-bg-hover: #e3f2fd; + + --color-border: #dee2e6; + --color-border-light: #f1f3f4; + --color-border-success: #c8e6c9; + --color-border-warning: #ffcc02; + --color-border-danger: #f5c6cb; + --color-bg: #000000; + --color-bg-secondary: #2a2a2a; + + + /* Spacing */ + --spacing-xs: 4px; + --spacing-sm: 8px; + --spacing-md: 15px; + --spacing-lg: 20px; + + /* Typography */ + --font-family-base: sans-serif; + --font-family-mono: monospace; + --font-size-xs: 9px; + --font-size-sm: 10px; + --font-size-md: 11px; + --font-size-base: 12px; + --font-size-lg: 14px; + --font-size-xl: 16px; + --font-size-xxl: 18px; + + /* Border radius */ + --radius-sm: 3px; + --radius-md: 4px; + --radius-lg: 6px; + --radius-xl: 8px; + --radius-xxl: 12px; + + /* Z-index */ + --z-modal: 1000; +} +body { + background-color: var(--color-bg); + color: var(--color-text); + font-family: system-ui, var(--font-family-base); +} diff --git a/src/App.tsx b/src/App.tsx index 31574d8..2d11207 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,5 +1,5 @@ import { useState, useEffect, useCallback } from 'react' -import './App.css' +import styles from './App.module.css' import TraceViewer from './components/TraceViewer' import PhaseViewer from './components/PhaseViewer' import HTTPRequestViewer from './components/httprequestviewer/HTTPRequestViewer' @@ -180,48 +180,23 @@ function App() { // Analysis mode - show the main interface return ( <> -
-
-
+
+
+
-

Perf Viz

+

Perf Viz

-