Add styles.css

This commit is contained in:
2026-03-19 01:12:00 +08:00
parent 32e31ee424
commit 482879ba09

357
web/styles.css Normal file
View File

@@ -0,0 +1,357 @@
:root {
--bg-primary: #1e1e1e;
--bg-secondary: #2d2d2d;
--bg-tertiary: #3d3d3d;
--text-primary: #ffffff;
--text-secondary: #aaaaaa;
--accent: #007acc;
--accent-hover: #0098ff;
--error: #f44747;
--success: #4ec9b0;
--warning: #dcdcaa;
--border: #404040;
--font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
--font-mono: 'SF Mono', Monaco, 'Cascadia Code', monospace;
--spacing-xs: 4px;
--spacing-sm: 8px;
--spacing-md: 16px;
--spacing-lg: 24px;
--radius-sm: 4px;
--radius-md: 8px;
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: var(--font-family);
background: var(--bg-primary);
color: var(--text-primary);
overflow: hidden;
user-select: none;
}
#app {
display: flex;
flex-direction: column;
height: 100vh;
width: 100vw;
}
.toolbar {
display: flex;
align-items: center;
justify-content: space-between;
padding: var(--spacing-sm) var(--spacing-md);
background: var(--bg-secondary);
border-bottom: 1px solid var(--border);
gap: var(--spacing-md);
}
.toolbar-left,
.toolbar-center,
.toolbar-right {
display: flex;
align-items: center;
gap: var(--spacing-sm);
}
.toolbar-center {
flex: 1;
justify-content: center;
}
.viewport {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
background: #000;
overflow: hidden;
position: relative;
}
.media-container {
position: relative;
transform-origin: center center;
}
#video-canvas {
display: block;
max-width: 100%;
max-height: 100%;
}
.subtitle-overlay {
position: absolute;
bottom: 60px;
left: 50%;
transform: translateX(-50%);
background: rgba(0, 0, 0, 0.75);
padding: var(--spacing-sm) var(--spacing-md);
border-radius: var(--radius-md);
max-width: 80%;
text-align: center;
opacity: 0;
transition: opacity 0.2s;
}
.subtitle-overlay.visible {
opacity: 1;
}
#subtitle-text {
font-size: 18px;
line-height: 1.4;
color: #fff;
}
.progress-container {
position: relative;
padding: var(--spacing-sm) var(--spacing-md);
background: var(--bg-secondary);
border-top: 1px solid var(--border);
}
.chunk-markers {
position: absolute;
top: var(--spacing-sm);
left: var(--spacing-md);
right: var(--spacing-md);
height: 8px;
pointer-events: none;
}
.chunk-marker {
position: absolute;
width: 2px;
height: 8px;
background: var(--accent);
top: 0;
}
.progress-bar {
width: 100%;
height: 8px;
cursor: pointer;
-webkit-appearance: none;
background: var(--bg-tertiary);
border-radius: var(--radius-sm);
}
.progress-bar::-webkit-slider-thumb {
-webkit-appearance: none;
width: 16px;
height: 16px;
background: var(--accent);
border-radius: 50%;
cursor: pointer;
}
.time-display {
display: flex;
gap: var(--spacing-xs);
margin-top: var(--spacing-xs);
font-family: var(--font-mono);
font-size: 12px;
color: var(--text-secondary);
}
.controls {
display: flex;
align-items: center;
justify-content: space-between;
padding: var(--spacing-sm) var(--spacing-md);
background: var(--bg-secondary);
border-top: 1px solid var(--border);
}
.controls-left,
.controls-center,
.controls-right {
display: flex;
align-items: center;
gap: var(--spacing-sm);
}
.btn {
padding: var(--spacing-sm) var(--spacing-md);
background: var(--bg-tertiary);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
color: var(--text-primary);
cursor: pointer;
font-size: 14px;
transition: background 0.15s, border-color 0.15s;
}
.btn:hover {
background: var(--accent);
border-color: var(--accent);
}
.btn:active {
background: var(--accent-hover);
}
.btn-icon {
padding: var(--spacing-sm);
min-width: 36px;
text-align: center;
}
.btn-toggle {
min-width: 32px;
font-weight: bold;
}
.btn-toggle[data-active="true"] {
background: var(--accent);
border-color: var(--accent);
}
.input {
padding: var(--spacing-sm) var(--spacing-md);
background: var(--bg-tertiary);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
color: var(--text-primary);
font-size: 14px;
min-width: 200px;
}
.input:focus {
outline: none;
border-color: var(--accent);
}
.select {
padding: var(--spacing-sm);
background: var(--bg-tertiary);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
color: var(--text-primary);
font-size: 14px;
cursor: pointer;
}
.volume-control {
display: flex;
align-items: center;
gap: var(--spacing-xs);
}
.volume-slider {
width: 80px;
height: 4px;
-webkit-appearance: none;
background: var(--bg-tertiary);
border-radius: var(--radius-sm);
}
.volume-slider::-webkit-slider-thumb {
-webkit-appearance: none;
width: 12px;
height: 12px;
background: var(--text-primary);
border-radius: 50%;
cursor: pointer;
}
.overlay-toggles {
display: flex;
gap: var(--spacing-xs);
}
.status-bar {
display: flex;
align-items: center;
justify-content: space-between;
padding: var(--spacing-xs) var(--spacing-md);
background: var(--bg-tertiary);
font-size: 12px;
color: var(--text-secondary);
}
.status-center {
font-family: var(--font-mono);
}
.search-panel {
position: absolute;
top: 60px;
right: var(--spacing-md);
width: 400px;
background: var(--bg-secondary);
border: 1px solid var(--border);
border-radius: var(--radius-md);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
z-index: 100;
}
.search-header {
display: flex;
gap: var(--spacing-sm);
padding: var(--spacing-md);
border-bottom: 1px solid var(--border);
}
.search-header .input {
flex: 1;
min-width: 0;
}
.search-results {
max-height: 400px;
overflow-y: auto;
}
.search-result {
padding: var(--spacing-sm) var(--spacing-md);
border-bottom: 1px solid var(--border);
cursor: pointer;
}
.search-result:hover {
background: var(--bg-tertiary);
}
.search-result-time {
font-family: var(--font-mono);
font-size: 12px;
color: var(--accent);
}
.search-result-text {
font-size: 14px;
margin-top: var(--spacing-xs);
}
.keyboard-hint {
position: fixed;
bottom: var(--spacing-md);
right: var(--spacing-md);
background: var(--bg-secondary);
border: 1px solid var(--border);
border-radius: var(--radius-md);
padding: var(--spacing-md);
font-size: 12px;
color: var(--text-secondary);
opacity: 0.7;
}
.keyboard-hint kbd {
display: inline-block;
padding: 2px 6px;
background: var(--bg-tertiary);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
font-family: var(--font-mono);
margin: 0 2px;
}