1
0
Fork 0
muzika-gromche/Frontend/src/style.css

364 lines
10 KiB
CSS
Raw Normal View History

WIP: Add frontend web app player & editor in Vue 3 + Vite TODO: - implement viewing & editing. - Add links to deployment, and CHANGELOG. style.css package.json vite config .vscode eslint use --cache .vscode add vite-css-modules editorconfig tsconfig and updated vue-tsc (fixes most of the type checking bugs) fix last type errors audiowaveform gitignore ESLint ESLint: ignore autogenerated JSON lint:fix tsconfig and vite config migrate icon generating script to TS eslint src/lib/ eslint stores eslint src/*.ts eslint audio pnpm update update icon eslint ahh import new tracks json instructions on jq codenames codenames.json fix styles broken by import order eslint audio app error screen footer copyright year global header loading screen transition search field preview track info inspector control controls controls range controls impl controls index eslint no-console off AudioTrack view inspector cards and sliders more controls master volume slider playhead library page player page timeline markers timeline markers header tick timestamp timeline clip index clip empty clip lyrics clip palette clip fadeout clip default import order timeline timeline panel timeline track header timeline trackview clip view clip audio audio waveform scrollsync easy lints eslint store eslint no mutating props off pnpm catalog off add unhead dep use head eslint inspector eslint easy minor stuff eslint audiowaveform easy fix eslint use :key with v-for fix audio waveforms inspector makes more sense season remove debug inspector Merge codenames into main json bump pnpm pnpm in particular enabled monospace Game Over Move JSON to assets to avoid caching issues update pnpm pnpm update Add Pop1 SFX
2025-11-27 14:57:28 +00:00
@font-face {
font-family: '3270';
src: url('./assets/fonts/3270-Regular.woff') format('woff');
font-weight: normal;
font-style: normal;
}
@import './reset.css' layer(base);
@import 'tailwindcss' prefix(tw);
@layer base {
* {
--main-background-color: #28282e;
--inactive-text-color: #909090;
--active-text-color: #ffffff;
--view-separator-color: #090909;
--view-separator-border: 1px solid var(--view-separator-color);
--header-background-color: #17181a;
--toolbar-background-color: #212126;
--view-background-color: #212126;
--card-background-color: #2a2a2d;
--card-border-color: #000000;
--card-border-width: 1px;
--card-border-radius: 4px;
--card-border: var(--card-border-width) solid var(--card-border-color);
--card-separator-color: #212126;
--card-separator-width: 2px;
--card-outline-color: #929292;
--card-outline-selected-color: #fa5b4a;
--card-min-width: 24rem;
--input-background-color: #1f1f1f;
--input-outline-color: #070707;
/* disabled */
--input-disabled-text-color: #525256;
--input-disabled-background-color: #242428;
--input-disabled-outline-color: #1a1a1d;
/* selected */
--input-selected-outline-color: #e64b3d;
--input-border-width: 1px;
--input-border-radius: 4px;
--input-selection-color: #4b4b4b;
--timeline-background-color: var(--main-background-color);
--timeline-background-top-color: #18181e;
--timeline-border-top-color: var(--view-separator-color);
--timeline-header-separator-color: #000000;
--timeline-header-tick-edge-color: #2f3036;
/*
track layout:
border-top
...track content...
border-bottom
--- border (separator) ---
border-top
...track content...
border-bottom
*/
--timeline-track-border-color: #00000080;
--timeline-track-border: 1px solid var(--timeline-track-border-color);
--timeline-track-border-top-color: #00000033;
--timeline-track-border-top: 1px solid var(--timeline-track-border-top-color);
--timeline-track-border-bottom-color: #0000003a;
--timeline-track-border-bottom: 1px solid var(--timeline-track-border-bottom-color);
--timeline-text-color: #909090;
--timeline-bar-color: #fffff0;
--timeline-bar-opacity: 11%;
--timeline-bar-width: 1px;
--timeline-playhead-color: #e64b3d;
/* TODO: playhead color has some transparency, which is hard to calculate */
--timeline-playhead-color-1: #000000c0;
--timeline-playhead-color-2: #00000059;
--timeline-playhead-pressed-color: #e85c4f;
--timeline-marker-beat-color: #ffffff1c;
/* See ./lib/colors/markers.ts */
--timeline-marker-color-blue: #007fe3;
--timeline-marker-color-cyan: #00ced0;
--timeline-marker-color-green: #00ad00;
--timeline-marker-color-yellow: #f09d00;
--timeline-marker-color-red: #e12401;
--timeline-marker-color-pink: #ff44c8;
--timeline-marker-color-purple: #9013fe;
--timeline-marker-color-fuchsia: #c02e6f;
--timeline-marker-color-rose: #ffa1b9;
--timeline-marker-color-lavender: #a193c8;
--timeline-marker-color-sky: #a193c8;
--timeline-marker-color-mint: #72db00;
--timeline-marker-color-lemon: #dce95a;
--timeline-marker-color-sand: #c4915e;
--timeline-marker-color-cocoa: #6e5143;
--timeline-marker-color-cream: #f5ebe1;
--timeline-clip-border-color: #15151580;
--timeline-clip-border-color-inner: #151515;
--timeline-clip-border-radius: 4px;
/*
* TODO:
* timeline clip selected outline:
* inner 1px black
* outer 2px red
*/
--timeline-clip-outline-selected-color: #e64b3d;
--timeline-clip-outline-selected-width: 2px;
--timeline-clip-outline-selected: var(--timeline-clip-outline-selected-width) solid
var(--timeline-clip-outline-selected-color);
/* See ./lib/colors/clips.ts */
--timeline-clip-color-orange: #eb6e01;
--timeline-clip-color-apricot: #ffa833;
--timeline-clip-color-yellow: #d4ad1f;
--timeline-clip-color-lime: #9fc615;
--timeline-clip-color-olive: #5f9921;
--timeline-clip-color-green: #448f65;
--timeline-clip-color-teal: #019899;
--timeline-clip-color-navy: #005278;
--timeline-clip-color-blue: #4376a1;
--timeline-clip-color-purple: #9972a0;
--timeline-clip-color-violet: #d0568d;
--timeline-clip-color-pink: #e98cb5;
--timeline-clip-color-tan: #b9af97;
--timeline-clip-color-beige: #c4a07c;
--timeline-clip-color-brown: #996601;
--timeline-clip-color-chocolate: #8c5a3f;
--timeline-clip-label-background-color: #00000099;
--timeline-clip-label-border-color: #00000060;
--timeline-clip-baseline-color: #00000033;
--player-background-color: #1a1a1a;
--inspector-section-separator-color: #1e1e1e;
--control-button-text-color: #929292;
--control-button-background-color: var(--main-background-color);
--control-button-border-color: #43474d;
/* active */
--control-button-active-text-color: #ffffff;
--control-button-active-background-color: #17181a;
--control-button-active-border-color: #ffffff;
/* disabled */
--control-button-disabled-text-color: #525256;
--control-button-disabled-border-color: #33343b;
}
:root {
font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
line-height: 1.5;
font-weight: 400;
color-scheme: light dark;
color: rgba(255, 255, 255, 0.87);
background-color: var(--main-background-color);
font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
a {
font-weight: 500;
color: #646cff;
text-decoration: inherit;
}
a:hover {
color: #535bf2;
}
body {
padding: 0;
min-width: 320px;
height: 100vh;
}
#app {
height: 100%;
}
}
@theme {
--font-3270: '3270', monospace;
--font-mono: '3270', monospace;
}
@layer utilities {
.toolbar-background {
background-color: var(--toolbar-background-color);
}
.timeline-background {
background-color: var(--timeline-background-color);
}
.scrollbar-none {
scrollbar-width: none;
}
.toolbar-icon-shadow {
filter: drop-shadow(rgb(0 0 0 / 0.75) 0px 1px);
}
}
@layer components {
.card-border {
border: 1px solid var(--card-border-color);
border-radius: var(--card-border-radius);
}
}
@layer components {
.input-text {
--input-text-color: var(--active-text-color);
color: var(--input-text-color);
background-color: var(--input-background-color);
border-radius: var(--input-border-radius);
outline: var(--input-border-width) solid var(--input-outline-color);
& input,
& textarea {
padding: 1px 2px;
&:focus {
outline: none;
}
}
&:has(input:disabled),
&:has(textarea:disabled),
&:disabled {
--input-text-color: var(--input-disabled-text-color);
--input-background-color: var(--input-disabled-background-color);
--input-outline-color: var(--input-disabled-outline-color);
}
&:has(input:not(:disabled):read-write:focus),
&:has(textarea:not(:disabled):read-write:focus) {
outline-color: var(--input-selected-outline-color);
}
/* Selection background for text inside input-text containers */
& ::selection,
& input::selection,
& textarea::selection {
background-color: var(--input-selection-color);
color: inherit;
}
& ::-moz-selection,
& input::-moz-selection,
& textarea::-moz-selection {
background-color: var(--input-selection-color);
color: inherit;
}
}
input.input-text,
textarea.input-text {
padding: 1px 2px;
&:not(:disabled):read-write:focus,
&:not(:disabled):read-write:focus {
outline-color: var(--input-selected-outline-color);
}
&::selection {
background-color: var(--input-selection-color);
color: inherit;
}
&::-moz-selection {
background-color: var(--input-selection-color);
color: inherit;
}
}
.input-number,
input.input-number {
text-align: center;
}
}
@layer components {
.control-label {
&.control-label__disabled {
color: var(--inactive-text-color);
}
}
}
@layer components {
.control-button {
@apply tw:inline-flex tw:items-center tw:justify-center;
@apply tw:gap-1 tw:px-2 tw:py-0 tw:min-w-24;
color: var(--control-button-text-color);
border-radius: 1em;
border-width: 1px;
border-style: solid;
border-color: var(--control-button-border-color);
background-color: var(--control-button-background-color);
& > .control-button__icon {
@apply tw:flex-none tw:w-4 tw:h-4 tw:fill-current;
}
& > .control-button__text {
}
&:focus-visible {
outline: none;
--control-button-border-color: var(--control-button-active-border-color);
}
&:not(:disabled) {
@variant hover {
--control-button-text-color: var(--control-button-active-text-color);
--control-button-border-color: var(--control-button-active-border-color);
}
@variant active {
--control-button-text-color: var(--control-button-active-text-color);
--control-button-border-color: var(--control-button-active-border-color);
@variant hover {
--control-button-background-color: var(--control-button-active-background-color);
}
}
}
@variant disabled {
--control-button-text-color: var(--control-button-disabled-text-color);
--control-button-border-color: var(--control-button-disabled-border-color);
}
}
}
@layer components {
.control-select {
--input-text-color: var(--active-text-color);
color: var(--input-text-color);
background-color: var(--input-background-color);
border-radius: var(--input-border-radius);
outline: var(--input-border-width) solid var(--input-outline-color);
padding: 1px 16px;
&:disabled {
--input-text-color: var(--input-disabled-text-color);
--input-background-color: var(--input-disabled-background-color);
--input-outline-color: var(--input-disabled-outline-color);
}
/* not sure about this */
&:not(:disabled):focus {
outline-color: var(--input-selected-outline-color);
}
}
}