435 lines
8.7 KiB
CSS
435 lines
8.7 KiB
CSS
/* Lightningbeam Editor Styles
|
|
* CSS with variables and selector-based theming
|
|
*
|
|
* Tier 1: :root variables (design tokens)
|
|
* Tier 2: Class selectors (.button, .layer-header)
|
|
* Tier 3: Compound/contextual (#timeline .layer-header)
|
|
*
|
|
* Pseudo-states: .hover, .selected, .active, .pressed, .disabled
|
|
*/
|
|
|
|
/* ============================================
|
|
LIGHT MODE VARIABLES (design tokens)
|
|
============================================ */
|
|
:root {
|
|
/* Semantic text colors */
|
|
--text-primary: #0f0f0f;
|
|
--text-secondary: #666;
|
|
--text-tertiary: #999;
|
|
--text-disabled: #bbb;
|
|
--text-on-accent: #fff;
|
|
|
|
/* App backgrounds */
|
|
--bg-app: #e0e0e0;
|
|
--bg-panel: #aaa;
|
|
--bg-header: #ddd;
|
|
--bg-surface: #ccc;
|
|
--bg-surface-raised: #ddd;
|
|
--bg-surface-sunken: #bbb;
|
|
|
|
/* Legacy compat aliases */
|
|
--bg-primary: #f6f6f6;
|
|
--bg-secondary: #ccc;
|
|
--background-color: #ccc;
|
|
--foreground-color: #ddd;
|
|
--highlight: #ddd;
|
|
--shadow: #999;
|
|
--shade: #aaa;
|
|
|
|
/* Borders */
|
|
--border-subtle: #bbb;
|
|
--border-default: #999;
|
|
--border-strong: #555;
|
|
/* Legacy aliases */
|
|
--border-light: #bbb;
|
|
--border-medium: #999;
|
|
--border-dark: #555;
|
|
|
|
/* Accent */
|
|
--accent: #396cd8;
|
|
--accent-hover: #4a7de9;
|
|
--accent-active: #2a5cc8;
|
|
|
|
/* Grid */
|
|
--grid-bg: #555;
|
|
--grid-hover: #666;
|
|
|
|
/* Layer type colors */
|
|
--layer-vector: #ffb464;
|
|
--layer-audio: #64b4ff;
|
|
--layer-midi: #64ff96;
|
|
--layer-video: #b464ff;
|
|
--layer-effect: #ff64b4;
|
|
--layer-group: #00b4b4;
|
|
--layer-raster: #a064c8;
|
|
|
|
/* Status */
|
|
--status-error: #dc3232;
|
|
--status-warning: #dcc832;
|
|
--status-success: #32c850;
|
|
--scrubber: #cc2222;
|
|
|
|
/* Piano */
|
|
--piano-white-key: #ffffff;
|
|
--piano-white-key-pressed: #6496ff;
|
|
--piano-black-key: #000000;
|
|
--piano-black-key-pressed: #3264c8;
|
|
--piano-key-border: #000000;
|
|
--piano-white-label: #333333;
|
|
--piano-black-label: #ffffffb2;
|
|
--piano-sustain-on: #64c864;
|
|
--piano-sustain-off: #808080;
|
|
|
|
/* Toolbar */
|
|
--tool-selected-bg: #466496;
|
|
--tool-unselected-bg: #999;
|
|
--tool-hover-border: #b4b4b4;
|
|
--tool-selected-border: #6496ff;
|
|
--tool-arrow-color: #c8c8c8;
|
|
--color-swatch-border: #555;
|
|
--checkerboard-light: #b4b4b4;
|
|
--checkerboard-dark: #787878;
|
|
|
|
/* Dimensions */
|
|
--header-height: 40px;
|
|
--layer-height: 60px;
|
|
--ruler-height: 30px;
|
|
--layer-header-width: 200px;
|
|
--border-radius: 4px;
|
|
--font-size-small: 11px;
|
|
--font-size-default: 13px;
|
|
--pane-border-width: 1px;
|
|
}
|
|
|
|
/* ============================================
|
|
DARK MODE VARIABLES
|
|
============================================ */
|
|
@media (prefers-color-scheme: dark) {
|
|
:root {
|
|
/* Semantic text colors */
|
|
--text-primary: #f6f6f6;
|
|
--text-secondary: #aaa;
|
|
--text-tertiary: #777;
|
|
--text-disabled: #555;
|
|
--text-on-accent: #fff;
|
|
|
|
/* App backgrounds */
|
|
--bg-app: #2a2a2a;
|
|
--bg-panel: #222;
|
|
--bg-header: #353535;
|
|
--bg-surface: #2f2f2f;
|
|
--bg-surface-raised: #3f3f3f;
|
|
--bg-surface-sunken: #1a1a1a;
|
|
|
|
/* Legacy compat aliases */
|
|
--bg-primary: #2f2f2f;
|
|
--bg-secondary: #3f3f3f;
|
|
--background-color: #333;
|
|
--foreground-color: #888;
|
|
--highlight: #4f4f4f;
|
|
--shadow: #111;
|
|
--shade: #222;
|
|
|
|
/* Borders */
|
|
--border-subtle: #333;
|
|
--border-default: #444;
|
|
--border-strong: #555;
|
|
/* Legacy aliases */
|
|
--border-light: #555;
|
|
--border-medium: #444;
|
|
--border-dark: #333;
|
|
|
|
/* Accent */
|
|
--accent: #396cd8;
|
|
--accent-hover: #4a7de9;
|
|
--accent-active: #2a5cc8;
|
|
|
|
/* Grid */
|
|
--grid-bg: #0f0f0f;
|
|
--grid-hover: #1a1a1a;
|
|
|
|
/* Piano */
|
|
--piano-white-key: #ffffff;
|
|
--piano-white-key-pressed: #6496ff;
|
|
--piano-black-key: #000000;
|
|
--piano-black-key-pressed: #3264c8;
|
|
--piano-key-border: #000000;
|
|
--piano-white-label: #333333;
|
|
--piano-black-label: #ffffffb2;
|
|
--piano-sustain-on: #64c864;
|
|
--piano-sustain-off: #808080;
|
|
|
|
/* Toolbar */
|
|
--tool-selected-bg: #466496;
|
|
--tool-unselected-bg: #323232;
|
|
--tool-hover-border: #b4b4b4;
|
|
--tool-selected-border: #6496ff;
|
|
--tool-arrow-color: #c8c8c8;
|
|
--color-swatch-border: #505050;
|
|
--checkerboard-light: #b4b4b4;
|
|
--checkerboard-dark: #787878;
|
|
}
|
|
}
|
|
|
|
/* ============================================
|
|
COMPONENT STYLES
|
|
============================================ */
|
|
|
|
/* Pane headers */
|
|
.pane-header {
|
|
background-color: var(--bg-header);
|
|
color: var(--text-primary);
|
|
height: var(--header-height);
|
|
border-color: var(--border-default);
|
|
}
|
|
|
|
/* Pane content areas */
|
|
.pane-content {
|
|
background-color: var(--bg-primary);
|
|
border-color: var(--border-subtle);
|
|
}
|
|
|
|
/* Generic panel */
|
|
.panel {
|
|
background-color: var(--bg-panel);
|
|
border-color: var(--border-default);
|
|
}
|
|
|
|
/* Grid */
|
|
.grid {
|
|
background-color: var(--grid-bg);
|
|
}
|
|
|
|
.grid-hover {
|
|
background-color: var(--grid-hover);
|
|
}
|
|
|
|
/* ============================================
|
|
PANE-SPECIFIC STYLES
|
|
============================================ */
|
|
|
|
#stage {
|
|
background-color: var(--bg-primary);
|
|
}
|
|
|
|
#timeline {
|
|
background-color: var(--shade);
|
|
}
|
|
|
|
#toolbar {
|
|
background-color: var(--bg-secondary);
|
|
}
|
|
|
|
#infopanel {
|
|
background-color: var(--bg-panel);
|
|
}
|
|
|
|
#node-editor {
|
|
background-color: #2d2d2d;
|
|
border-color: #4d4d4d;
|
|
}
|
|
|
|
#shader-editor {
|
|
background-color: #19191e;
|
|
}
|
|
|
|
#outliner {
|
|
background-color: #283219;
|
|
}
|
|
|
|
#piano-roll {
|
|
background-color: #1e1e23;
|
|
}
|
|
|
|
/* ============================================
|
|
TIMELINE ELEMENTS
|
|
============================================ */
|
|
|
|
.timeline-background {
|
|
background-color: var(--shade);
|
|
}
|
|
|
|
.timeline-header {
|
|
background-color: var(--shadow);
|
|
}
|
|
|
|
.timeline-spacer {
|
|
background-color: var(--shadow);
|
|
}
|
|
|
|
.timeline-scrubber {
|
|
background-color: var(--scrubber);
|
|
border-color: var(--scrubber);
|
|
}
|
|
|
|
.timeline-layer-active {
|
|
background-color: var(--highlight);
|
|
}
|
|
|
|
.timeline-layer-inactive {
|
|
background-color: var(--background-color);
|
|
}
|
|
|
|
.timeline-row-active {
|
|
background-color: var(--grid-bg);
|
|
}
|
|
|
|
.timeline-row-inactive {
|
|
background-color: var(--foreground-color);
|
|
}
|
|
|
|
.timeline-note {
|
|
background-color: #000000;
|
|
}
|
|
|
|
/* Layer type badges */
|
|
.layer-type-vector {
|
|
background-color: var(--layer-vector);
|
|
}
|
|
|
|
.layer-type-audio {
|
|
background-color: var(--layer-audio);
|
|
}
|
|
|
|
.layer-type-midi {
|
|
background-color: var(--layer-midi);
|
|
}
|
|
|
|
.layer-type-video {
|
|
background-color: var(--layer-video);
|
|
}
|
|
|
|
.layer-type-effect {
|
|
background-color: var(--layer-effect);
|
|
}
|
|
|
|
.layer-type-group {
|
|
background-color: var(--layer-group);
|
|
}
|
|
|
|
.layer-type-raster {
|
|
background-color: var(--layer-raster);
|
|
}
|
|
|
|
/* ============================================
|
|
BUTTONS
|
|
============================================ */
|
|
|
|
.button {
|
|
background-color: var(--bg-primary);
|
|
color: var(--text-primary);
|
|
border-color: var(--border-default);
|
|
}
|
|
|
|
.button.hover {
|
|
border-color: var(--accent);
|
|
}
|
|
|
|
.button.selected {
|
|
background-color: var(--accent);
|
|
border-color: var(--accent);
|
|
}
|
|
|
|
/* Tool buttons */
|
|
.tool-button {
|
|
background-color: var(--tool-unselected-bg);
|
|
}
|
|
|
|
.tool-button.selected {
|
|
background-color: var(--tool-selected-bg);
|
|
}
|
|
|
|
.tool-button.hover {
|
|
border-color: var(--tool-hover-border);
|
|
}
|
|
|
|
/* ============================================
|
|
TEXT
|
|
============================================ */
|
|
|
|
.text-primary {
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.text-secondary {
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.text-disabled {
|
|
color: var(--text-disabled);
|
|
}
|
|
|
|
/* ============================================
|
|
STATUS
|
|
============================================ */
|
|
|
|
.status-error {
|
|
color: var(--status-error);
|
|
}
|
|
|
|
.status-warning {
|
|
color: var(--status-warning);
|
|
}
|
|
|
|
.status-success {
|
|
color: var(--status-success);
|
|
}
|
|
|
|
/* ============================================
|
|
PANE CHROME (borders, icon buttons)
|
|
============================================ */
|
|
|
|
.pane-chrome {
|
|
background-color: #232323;
|
|
border-color: #505050;
|
|
}
|
|
|
|
.pane-chrome-separator {
|
|
border-color: #323232;
|
|
}
|
|
|
|
.pane-icon-button {
|
|
background-color: #323232c8;
|
|
}
|
|
|
|
/* ============================================
|
|
NODE EDITOR
|
|
============================================ */
|
|
|
|
#node-editor .grid {
|
|
background-color: #373737;
|
|
}
|
|
|
|
/* ============================================
|
|
VIRTUAL PIANO
|
|
============================================ */
|
|
|
|
.piano-white-key {
|
|
background-color: var(--piano-white-key);
|
|
border-color: var(--piano-key-border);
|
|
color: var(--piano-white-label);
|
|
}
|
|
|
|
.piano-white-key.pressed {
|
|
background-color: var(--piano-white-key-pressed);
|
|
color: #000000;
|
|
}
|
|
|
|
.piano-black-key {
|
|
background-color: var(--piano-black-key);
|
|
color: var(--piano-black-label);
|
|
}
|
|
|
|
.piano-black-key.pressed {
|
|
background-color: var(--piano-black-key-pressed);
|
|
color: #ffffff;
|
|
}
|
|
|
|
.sustain-indicator.active {
|
|
color: var(--piano-sustain-on);
|
|
}
|
|
|
|
.sustain-indicator {
|
|
color: var(--piano-sustain-off);
|
|
}
|