|
|
|
body {
|
|
|
|
/* Firefox has a weird default font, which is a different size from the one in Chrome
|
|
|
|
* and makes some renderings bad.
|
|
|
|
*/
|
|
|
|
font-family: "Arial", sans-serif;
|
|
|
|
|
|
|
|
background: #222;
|
|
|
|
color: #fff;
|
|
|
|
height: 100vh;
|
|
|
|
margin: 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
a {
|
|
|
|
color: #ccf;
|
|
|
|
}
|
|
|
|
|
|
|
|
input,
|
|
|
|
textarea {
|
|
|
|
background: #222;
|
|
|
|
color: #fff;
|
|
|
|
border-color: #444;
|
|
|
|
}
|
|
|
|
|
|
|
|
textarea {
|
|
|
|
/* This will look better if it's consistent with input fields */
|
|
|
|
border-style: inset;
|
|
|
|
border-width: 2px;
|
|
|
|
}
|
|
|
|
|
|
|
|
button,
|
|
|
|
select {
|
|
|
|
background: #333;
|
|
|
|
color: #fff;
|
|
|
|
}
|
|
|
|
|
|
|
|
button:active {
|
|
|
|
background: #000;
|
|
|
|
}
|
|
|
|
|
|
|
|
a,
|
|
|
|
.click {
|
|
|
|
cursor: pointer;
|
|
|
|
}
|
|
|
|
|
|
|
|
a.click {
|
|
|
|
text-decoration: underline;
|
|
|
|
}
|
|
|
|
|
|
|
|
.input-error {
|
|
|
|
border-color: #b00;
|
|
|
|
}
|
|
|
|
|
|
|
|
.input-error:focus {
|
|
|
|
outline: #d00 solid 1px;
|
|
|
|
}
|
|
|
|
|
|
|
|
#errors {
|
|
|
|
color: #f33;
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
}
|
|
|
|
|
|
|
|
#errors > div {
|
|
|
|
border-bottom: 1px solid #f33;
|
|
|
|
background: #300;
|
|
|
|
padding: 4px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.error-dismiss {
|
|
|
|
float: right;
|
|
|
|
}
|
|
|
|
|
|
|
|
#page-container {
|
|
|
|
position: relative;
|
|
|
|
max-height: 100vh;
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
justify-content: flex-start;
|
|
|
|
align-items: stretch;
|
|
|
|
}
|
|
|
|
|
|
|
|
#page-container > * {
|
|
|
|
flex: 0 1 auto;
|
|
|
|
}
|
|
|
|
|
|
|
|
#editor-help {
|
|
|
|
position: absolute;
|
|
|
|
top: 0;
|
|
|
|
right: 0;
|
|
|
|
background: #222;
|
|
|
|
padding: 5px;
|
|
|
|
}
|
|
|
|
|
|
|
|
#stream-time-settings {
|
|
|
|
display: flex;
|
|
|
|
align-items: flex-end;
|
|
|
|
gap: 5px;
|
|
|
|
margin-bottom: 10px;
|
|
|
|
margin-top: 5px;
|
|
|
|
}
|
|
|
|
|
|
|
|
#stream-time-settings > div {
|
|
|
|
margin: 0 2px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.field-label {
|
|
|
|
display: block;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video {
|
|
|
|
width: 100%;
|
|
|
|
max-height: 50vh;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-controls {
|
|
|
|
font-size: 110%;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-controls select {
|
|
|
|
appearance: none;
|
|
|
|
font-size: inherit;
|
|
|
|
background: inherit;
|
|
|
|
border: none;
|
|
|
|
text-align: center;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-controls option {
|
|
|
|
background: #222;
|
|
|
|
padding: 2px;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-controls-bar {
|
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
|
|
gap: 8px;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-controls-spacer {
|
|
|
|
flex-grow: 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-controls-volume {
|
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
|
|
gap: 2px;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-controls-volume-level {
|
|
|
|
width: 100px;
|
|
|
|
height: 8px;
|
|
|
|
border-radius: 0;
|
|
|
|
border: 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-controls-playback-position {
|
|
|
|
height: 10px;
|
|
|
|
border-radius: 0;
|
|
|
|
border: 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* For some reason, there's not a cross-browser way to style <progress> elements.
|
|
|
|
* This should be replaced with a cross-browser way of doing this when possible.
|
|
|
|
* I only implemented WebKit/Blink and Firefox here because if you still use IE,
|
|
|
|
* I quite frankly don't care about you.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* WEBKIT/BLINK SECTION */
|
|
|
|
#video-controls-volume-level::-webkit-progress-bar {
|
|
|
|
background: #ffffff30;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-controls-volume-level::-webkit-progress-value {
|
|
|
|
background: #ffffffc0;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-controls-playback-position::-webkit-progress-bar {
|
|
|
|
background: #ffffff30;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-controls-playback-position::-webkit-progress-value {
|
|
|
|
background: #ffffffc0;
|
|
|
|
}
|
|
|
|
/* END WEBKIT/BLINK */
|
|
|
|
|
|
|
|
/* FIREFOX SECTION */
|
|
|
|
#video-controls-volume-level {
|
|
|
|
background: #ffffff30;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-controls-volume-level::-moz-progress-bar {
|
|
|
|
background: #ffffffc0;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-controls-playback-position {
|
|
|
|
background: #ffffff30;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-controls-playback-position::-moz-progress-bar {
|
|
|
|
background: #ffffffc0;
|
|
|
|
}
|
|
|
|
/* END FIREFOX */
|
|
|
|
|
|
|
|
#video-controls-playback-position {
|
|
|
|
width: 100%;
|
|
|
|
}
|
|
|
|
|
|
|
|
#clip-bar {
|
|
|
|
width: 100%;
|
|
|
|
min-height: 7px;
|
|
|
|
background-color: #bbb;
|
|
|
|
position: relative;
|
|
|
|
}
|
|
|
|
|
|
|
|
#clip-bar > div {
|
|
|
|
position: absolute;
|
|
|
|
background-color: #d80;
|
|
|
|
height: 100%;
|
|
|
|
}
|
|
|
|
|
|
|
|
#waveform-container {
|
|
|
|
position: relative;
|
|
|
|
}
|
|
|
|
|
|
|
|
#waveform {
|
|
|
|
width: 100%;
|
|
|
|
|
|
|
|
/* With an unbound height, the waveform can appear a bit away from the video.
|
|
|
|
* The intended effect still works if we scrunch the height a bit, so here's
|
|
|
|
* a height bound for the waveform image.
|
|
|
|
*/
|
|
|
|
max-height: 100px;
|
|
|
|
filter: invert(90%);
|
|
|
|
}
|
|
|
|
|
|
|
|
#waveform-marker {
|
|
|
|
width: 1px;
|
|
|
|
height: 100%;
|
|
|
|
background: #dd8800a0;
|
|
|
|
position: absolute;
|
|
|
|
top: 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
#range-definitions {
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
gap: 1px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.range-transition-duration-section {
|
|
|
|
display: inline-block;
|
|
|
|
}
|
|
|
|
|
|
|
|
.range-transition-duration {
|
|
|
|
width: 50px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.range-definition-times {
|
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
|
|
gap: 4px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.range-definition-start,
|
|
|
|
.range-definition-end {
|
|
|
|
width: 100px;
|
|
|
|
text-align: right;
|
|
|
|
}
|
|
|
|
|
|
|
|
.range-definition-between-time-gap {
|
|
|
|
width: 5px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.range-definition-icon-gap {
|
|
|
|
width: 16px;
|
|
|
|
}
|
|
|
|
|
|
|
|
#add-range-definition {
|
|
|
|
margin-top: 2px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.range-definition-chapter-markers > div {
|
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
|
|
gap: 10px;
|
|
|
|
margin-left: 30px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.range-definition-chapter-marker-start-field {
|
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
|
|
gap: 4px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.range-definition-chapter-marker-start {
|
|
|
|
width: 100px;
|
|
|
|
text-align: right;
|
|
|
|
}
|
|
|
|
|
|
|
|
.range-definition-chapter-marker-edit-gap {
|
|
|
|
width: 16px;
|
|
|
|
}
|
|
|
|
|
|
|
|
input.range-definition-chapter-marker-description {
|
|
|
|
width: 500px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.add-range-definition-chapter-marker {
|
|
|
|
margin-left: 30px;
|
|
|
|
margin-bottom: 7px;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-info {
|
|
|
|
margin: 5px 0;
|
|
|
|
display: grid;
|
|
|
|
grid-template-columns: 200px 1fr;
|
|
|
|
grid-template-rows: minmax(min-content, max-content) 1.25em 3em minmax(4em, max-content) 1.25em;
|
|
|
|
gap: 2px;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-info-editor-notes-container {
|
|
|
|
border: 1px solid #666;
|
|
|
|
background-color: #125;
|
|
|
|
grid-column-end: span 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* In order to maintain the grid dimensions, when we hide the editors notes (for there not being them),
|
|
|
|
* they still need to take up a grid slot. As such, we replace `display: none` in this context with
|
|
|
|
* an effective equivalent that doesn't remove its rendering entirely.
|
|
|
|
*/
|
|
|
|
#video-info-editor-notes-container.hidden {
|
|
|
|
display: block;
|
|
|
|
visibility: hidden;
|
|
|
|
height: 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-info-title-full {
|
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
|
|
white-space: pre;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-info-title {
|
|
|
|
flex-grow: 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-info-title-abbreviated {
|
|
|
|
width: 200px;
|
|
|
|
overflow: hidden;
|
|
|
|
font-size: 1em;
|
|
|
|
line-height: 1em;
|
|
|
|
height: 2em;
|
|
|
|
text-overflow: ellipsis;
|
|
|
|
|
|
|
|
/* For some reason, all this Webkit-specific-looking stuff is required to show ellipses
|
|
|
|
on wrapped text.
|
|
|
|
It also somehow works on Firefox. */
|
|
|
|
display: -webkit-box;
|
|
|
|
-webkit-line-clamp: 2;
|
|
|
|
-webkit-box-orient: vertical;
|
|
|
|
}
|
|
|
|
|
|
|
|
.video-info-thumbnail-mode-options {
|
|
|
|
margin: 2px 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
.video-info-thumbnail-position {
|
|
|
|
width: 50px;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-info-thumbnail-template-preview-image {
|
|
|
|
max-width: 320px;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-info-thumbnail-template-video-source-image {
|
|
|
|
max-width: 640px;
|
|
|
|
}
|
|
|
|
|
|
|
|
#video-info-thumbnail-template-overlay-image {
|
|
|
|
max-width: 640px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.video-info-thumbnail-advanced-crop-flex-wrapper {
|
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
|
|
}
|
|
|
|
|
|
|
|
.video-info-thumbnail-advanced-crop-flex-column {
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
justify-content: center;
|
|
|
|
align-items: center;
|
|
|
|
}
|
|
|
|
|
|
|
|
.video-info-thumbnail-advanced-crop-flex-column div {
|
|
|
|
margin: 0.5em;
|
|
|
|
}
|
|
|
|
|
|
|
|
.submission-response-error {
|
|
|
|
white-space: pre-wrap;
|
|
|
|
}
|
|
|
|
|
|
|
|
.hidden {
|
|
|
|
display: none;
|
|
|
|
}
|
|
|
|
|
|
|
|
#submission {
|
|
|
|
margin: 5px 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
#download {
|
|
|
|
margin: 5px 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
#data-correction {
|
|
|
|
margin: 5px 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
#data-correction-force-reset-confirm p {
|
|
|
|
margin: 5px 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
.submission-response-pending {
|
|
|
|
color: #cc0;
|
|
|
|
}
|
|
|
|
|
|
|
|
.submission-response-error {
|
|
|
|
color: #c00;
|
|
|
|
}
|
|
|
|
|
|
|
|
.submission-response-success {
|
|
|
|
color: #0c0;
|
|
|
|
}
|
|
|
|
|
|
|
|
.time-converter-time {
|
|
|
|
display: block;
|
|
|
|
width: 200px;
|
|
|
|
}
|
|
|
|
|
|
|
|
#chat-replay {
|
|
|
|
overflow-y: auto;
|
|
|
|
min-height: 250px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.chat-replay-message {
|
|
|
|
display: flex;
|
|
|
|
align-items: baseline;
|
|
|
|
gap: 10px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.chat-replay-message-time {
|
|
|
|
flex-basis: 110px;
|
|
|
|
color: #ccc;
|
|
|
|
text-align: right;
|
|
|
|
}
|
|
|
|
|
|
|
|
.chat-replay-message-text {
|
|
|
|
flex-basis: 200px;
|
|
|
|
flex-grow: 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
.chat-replay-message-text-action {
|
|
|
|
font-style: italic;
|
|
|
|
}
|
|
|
|
|
|
|
|
.chat-replay-message-system {
|
|
|
|
color: #aaf;
|
|
|
|
}
|
|
|
|
|
|
|
|
.chat-replay-message-text-action .chat-replay-message-reply:not(.chat-replay-message-text-action) {
|
|
|
|
font-style: normal; /* Clear the italics from the action */
|
|
|
|
}
|
|
|
|
|
|
|
|
.chat-replay-message-emote {
|
|
|
|
/*
|
|
|
|
This size is set based on Twitch's 1.0 emote size.
|
|
|
|
This will need to be updated if that changes. (Otherwise, auto-scrolling will break.)
|
|
|
|
*/
|
|
|
|
width: 28px;
|
|
|
|
height: 28px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.chat-replay-message-reply {
|
|
|
|
font-size: 80%;
|
|
|
|
}
|
|
|
|
|
|
|
|
.chat-replay-message-reply a {
|
|
|
|
text-decoration: none;
|
|
|
|
}
|
|
|
|
|
|
|
|
.chat-replay-message-cleared {
|
|
|
|
opacity: 0.5;
|
|
|
|
}
|
|
|
|
|
|
|
|
.chat-replay-message-cleared .chat-replay-message-text {
|
|
|
|
text-decoration: line-through;
|
|
|
|
}
|