start 2.48 cycle
[themes.git] / LCARStrek / devtools / animationinspector.css
CommitLineData
2e389898
RK
1/* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5/* Animation-inspector specific theme variables */
6
7.theme-dark,
d0a8de80
RK
8.theme-light,
9.theme-firebug {
2e389898 10 --even-animation-timeline-background-color: rgba(160,144,144,0.03);
d0a8de80 11 --command-pick-image: url(chrome://devtools/skin/images/command-pick.svg);
1e9e1791
RK
12 --pause-image: url(chrome://devtools/skin/images/pause.svg);
13 --rewind-image: url(chrome://devtools/skin/images/rewind.svg);
14 --play-image: url(chrome://devtools/skin/images/play.svg);
2e389898
RK
15}
16
e9fbfc3a
RK
17:root {
18 /* How high should toolbars be */
19 --toolbar-height: 20px;
d0a8de80
RK
20 /* How wide should the sidebar be (should be wide enough to contain long
21 property names like 'border-bottom-right-radius' without ellipsis) */
22 --timeline-sidebar-width: 200px;
e9fbfc3a
RK
23 /* How high should animations displayed in the timeline be */
24 --timeline-animation-height: 20px;
d0a8de80
RK
25 /* The size of a keyframe marker in the keyframes diagram */
26 --keyframes-marker-size: 10px;
1e9e1791 27 /* The color of the time graduation borders */
d0a8de80
RK
28 --time-graduation-border-color: rgba(160, 144, 144, .5);
29}
30
31.animation {
32 --timeline-border-color: var(--theme-body-color);
33 --timeline-background-color: var(--theme-splitter-color);
34}
35
36.animation.cssanimation {
37 --timeline-border-color: var(--theme-highlight-lightorange);
38 --timeline-background-color: var(--theme-contrast-background);
39}
40
41.animation.csstransition {
42 --timeline-border-color: var(--theme-highlight-bluegrey);
43 --timeline-background-color: var(--theme-highlight-blue);
44}
45
46.animation.scriptanimation {
47 --timeline-border-color: var(--theme-highlight-green);
48 --timeline-background-color: var(--theme-graphs-green);
e9fbfc3a
RK
49}
50
20752032
RK
51html {
52 height: 100%;
53}
54
55body {
56 margin: 0;
57 padding: 0;
58 display : flex;
59 flex-direction: column;
60 height: 100%;
61 overflow: hidden;
62 color: var(--theme-content-color3);
63}
64
d7b7f7e1
RK
65/* The top toolbar, containing the toggle-all button. And the timeline toolbar,
66 containing playback control buttons, shown only when there are animations
67 displayed in the timeline */
20752032 68
d7b7f7e1
RK
69#global-toolbar,
70#timeline-toolbar {
20752032
RK
71 border-bottom: 1px solid var(--theme-splitter-color);
72 display: flex;
73 flex-direction: row;
74 align-items: center;
75 justify-content: flex-end;
e9fbfc3a 76 height: var(--toolbar-height);
20752032
RK
77}
78
d7b7f7e1 79#timeline-toolbar {
d0a8de80
RK
80 display: none;
81 justify-content: flex-start;
20752032
RK
82}
83
d7b7f7e1
RK
84[timeline] #global-toolbar {
85 display: none;
86}
87
88[timeline] #timeline-toolbar {
89 display: flex;
90}
91
2e389898
RK
92/* The main animations container */
93
1e9e1791
RK
94#sidebar-panel-animationinspector {
95 height: 100%;
96 width: 100%;
97}
98
2e389898 99#players {
e9fbfc3a 100 height: calc(100% - var(--toolbar-height));
1e9e1791
RK
101 overflow-x: hidden;
102 overflow-y: auto;
2e389898
RK
103}
104
d7b7f7e1
RK
105[empty] #players {
106 display: none;
107}
108
20752032
RK
109/* The error message, shown when an invalid/unanimated element is selected */
110
111#error-message {
112 padding-top: 10%;
113 text-align: center;
114 flex: 1;
115 overflow: auto;
116
117 /* The error message is hidden by default */
118 display: none;
119}
120
d7b7f7e1
RK
121[empty] #error-message {
122 display: block;
123}
124
125/* Element picker, toggle-all buttons, timeline pause button, ... */
20752032 126
d0a8de80
RK
127#global-toolbar > *,
128#timeline-toolbar > * {
129 min-height: var(--toolbar-height);
130 border-color: var(--theme-splitter-color);
131 border-width: 0 0 0 1px;
132 display: flex;
133 justify-content: center;
134 align-items: center;
135}
136
137#global-toolbar .label,
138#timeline-toolbar .label {
139 padding: 0 5px;
140 border-style: solid;
141}
142
d7b7f7e1
RK
143#global-toolbar .devtools-button,
144#timeline-toolbar .devtools-button {
d0a8de80
RK
145 margin: 0;
146 padding: 0;
147}
148
149#timeline-toolbar .devtools-button,
150#timeline-toolbar .label {
151 border-width: 0 1px 0 0;
d7b7f7e1
RK
152}
153
1e9e1791
RK
154#element-picker {
155 height: 18px;
156}
157
d7b7f7e1 158#element-picker::before {
d0a8de80 159 background-image: var(--command-pick-image);
20752032
RK
160}
161
d7b7f7e1 162.pause-button::before {
d0a8de80
RK
163 background-image: var(--pause-image);
164}
165
166#rewind-timeline::before {
167 background-image: var(--rewind-image);
20752032
RK
168}
169
d7b7f7e1 170.pause-button.paused::before {
d0a8de80 171 background-image: var(--play-image);
20752032
RK
172}
173
d0a8de80 174#timeline-rate select.devtools-button {
dadba0f2
RK
175 -moz-appearance: none;
176 text-align: center;
dadba0f2 177 font-family: inherit;
d0a8de80
RK
178 color: var(--theme-body-color);
179 font-size: 1em;
180 position: absolute;
181 top: 0;
182 left: 0;
183 width: 100%;
184 height: 100%;
185 background-image: url("chrome://devtools/skin/images/dropmarker.svg");
186 background-repeat: no-repeat;
187 background-position: calc(100% - 4px) center;
188 padding-right: 1em;
189}
190
191#timeline-rate {
192 position: relative;
193 width: 4.5em;
dadba0f2
RK
194}
195
2e389898
RK
196/* Animation timeline component */
197
198.animation-timeline {
d7b7f7e1 199 position: relative;
2e389898
RK
200 display: flex;
201 flex-direction: column;
202}
203
d0a8de80
RK
204/* Useful for positioning animations or keyframes in the timeline */
205.animation-timeline .track-container {
206 position: absolute;
207 top: 0;
208 left: var(--timeline-sidebar-width);
209 /* Leave the width of a marker right of a track so the 100% markers can be
210 selected easily */
211 right: var(--keyframes-marker-size);
212 height: var(--timeline-animation-height);
213}
214
215.animation-timeline .scrubber-wrapper {
1e9e1791
RK
216 position: absolute;
217 left: var(--timeline-sidebar-width);
218 /* Leave the width of a marker right of a track so the 100% markers can be
219 selected easily */
220 right: var(--keyframes-marker-size);
d0a8de80
RK
221 height: 100%;
222}
223
e9fbfc3a 224.animation-timeline .scrubber {
1e9e1791
RK
225 z-index: 5;
226 pointer-events: none;
e9fbfc3a 227 position: absolute;
1e9e1791
RK
228 /* Make the scrubber as tall as the viewport minus the toolbar height and the
229 header-wrapper's borders */
230 height: calc(100vh - var(--toolbar-height) - 1px);
231 min-height: 100%;
d0a8de80 232 width: 0;
e9fbfc3a
RK
233 border-right: 1px solid #FF0000;
234 box-sizing: border-box;
e9fbfc3a
RK
235}
236
d0a8de80
RK
237/* The scrubber handle is a transparent element displayed on top of the scrubber
238 line that allows users to drag it */
239.animation-timeline .scrubber .scrubber-handle {
240 position: absolute;
241 height: 100%;
d0a8de80
RK
242 /* Make it thick enough for easy dragging */
243 width: 6px;
1e9e1791 244 right: -1.5px;
d0a8de80
RK
245 cursor: col-resize;
246 pointer-events: all;
247}
248
1e9e1791
RK
249.animation-timeline .scrubber .scrubber-handle::before {
250 content: "";
251 position: sticky;
252 top: 0;
253 width: 1px;
254 border-top: 5px solid red;
255 border-left: 5px solid transparent;
256 border-right: 5px solid transparent;
257}
258
2e389898 259.animation-timeline .time-header {
1e9e1791 260 min-height: var(--timeline-animation-height);
e9fbfc3a
RK
261 cursor: col-resize;
262 -moz-user-select: none;
2e389898
RK
263}
264
1e9e1791
RK
265.animation-timeline .time-header .header-item {
266 position: absolute;
267 height: 100%;
268 padding-top: 3px;
269 border-left: 0.5px solid var(--time-graduation-border-color);
270}
271
272.animation-timeline .header-wrapper {
273 position: sticky;
274 top: 0;
275 background-color: var(--theme-body-background);
276 border-bottom: 1px solid var(--time-graduation-border-color);
277 z-index: 3;
278 height: var(--timeline-animation-height);
279 overflow: hidden;
280}
281
282.animation-timeline .time-body {
283 height: 100%;
284}
285
2e389898 286.animation-timeline .time-header .time-tick {
1e9e1791 287 -moz-user-select: none;
2e389898 288 position: absolute;
1e9e1791
RK
289 width: 0;
290 /* When scroll bar is shown, make it covers entire time-body */
291 height: 100%;
292 /* When scroll bar is hidden, make it as tall as the viewport minus the
293 timeline animation height and the header-wrapper's borders */
294 min-height: calc(100vh - var(--timeline-animation-height) - 1px);
295 border-left: 0.5px solid var(--time-graduation-border-color);
2e389898
RK
296}
297
298.animation-timeline .animations {
299 width: 100%;
d0a8de80 300 height: 100%;
2e389898
RK
301 padding: 0;
302 list-style-type: none;
1e9e1791 303 margin-top: 0;
2e389898
RK
304}
305
306/* Animation block widgets */
307
308.animation-timeline .animation {
d0a8de80 309 margin: 2px 0;
e9fbfc3a 310 height: var(--timeline-animation-height);
2e389898
RK
311 position: relative;
312}
313
d0a8de80
RK
314/* We want animations' background colors to alternate, but each animation has
315 a sibling (hidden by default) that contains the animated properties and
316 keyframes, so we need to alternate every 4 elements. */
317.animation-timeline .animation:nth-child(4n+1) {
2e389898
RK
318 background-color: var(--even-animation-timeline-background-color);
319}
320
321.animation-timeline .animation .target {
e9fbfc3a 322 width: var(--timeline-sidebar-width);
2e389898 323 height: 100%;
d0a8de80
RK
324 overflow: hidden;
325 display: flex;
326 align-items: center;
2e389898
RK
327}
328
329.animation-timeline .animation-target {
330 background-color: transparent;
331}
332
333.animation-timeline .animation .time-block {
d0a8de80 334 cursor: pointer;
2e389898
RK
335}
336
337/* Animation iterations */
338
339.animation-timeline .animation .iterations {
d0a8de80 340 position: absolute;
2e389898 341 height: 100%;
2e389898 342 box-sizing: border-box;
e9fbfc3a
RK
343
344 /* Iterations of the animation are displayed with a repeating linear-gradient
345 which size is dynamically changed from JS. The gradient only draws 1px
346 borders between each iteration. These borders must have the same color as
347 the border of this element */
2e389898 348 background-image:
d0a8de80
RK
349 linear-gradient(to left,
350 var(--timeline-border-color) 0,
351 var(--timeline-border-color) 1px,
2e389898
RK
352 transparent 1px,
353 transparent 2px);
d0a8de80
RK
354 border: 1px solid var(--timeline-border-color);
355 /* Border-right is already handled by the gradient */
356 border-width: 1px 0 1px 1px;
e9fbfc3a
RK
357
358 /* The background color is set independently */
359 background-color: var(--timeline-background-color);
360}
361
2e389898
RK
362.animation-timeline .animation .iterations.infinite::before,
363.animation-timeline .animation .iterations.infinite::after {
364 content: "";
365 position: absolute;
366 top: 0;
367 right: 0;
368 width: 0;
369 height: 0;
370 border-right: 4px solid var(--theme-body-background);
371 border-top: 4px solid transparent;
372 border-bottom: 4px solid transparent;
373}
374
375.animation-timeline .animation .iterations.infinite::after {
376 bottom: 0;
377 top: unset;
378}
379
e9fbfc3a 380.animation-timeline .animation .name {
d0a8de80 381 position: absolute;
e9fbfc3a
RK
382 color: var(--theme-selection-color);
383 height: 100%;
d0a8de80
RK
384 display: flex;
385 align-items: center;
386 padding: 0 2px;
387 box-sizing: border-box;
1e9e1791 388 --fast-track-icon-width: 15px;
d0a8de80
RK
389 z-index: 1;
390}
391
392.animation-timeline .animation .name div {
393 /* Flex items don't support text-overflow, so a child div is used */
394 white-space: nowrap;
2e389898 395 overflow: hidden;
e9fbfc3a 396 text-overflow: ellipsis;
2e389898
RK
397}
398
d0a8de80
RK
399.animation-timeline .fast-track .name div {
400 width: calc(100% - var(--fast-track-icon-width));
401}
402
403.animation-timeline .fast-track .name::after {
dadba0f2 404 /* Animations running on the compositor have the fast-track background image*/
d0a8de80
RK
405 content: "";
406 display: block;
407 position: absolute;
1e9e1791 408 top: 1px;
d0a8de80
RK
409 right: 0;
410 height: 100%;
411 width: var(--fast-track-icon-width);
412 z-index: 1;
1e9e1791 413}
d0a8de80 414
1e9e1791
RK
415.animation-timeline .all-properties .name::after {
416 background-color: white;
417 clip-path: url(images/animation-fast-track.svg#thunderbolt);
418 background-repeat: no-repeat;
419 background-position: center;
420}
421
422.animation-timeline .some-properties .name::after {
423 background-color: var(--theme-content-color3);
424 clip-path: url(images/animation-fast-track.svg#thunderbolt);
dadba0f2 425 background-repeat: no-repeat;
d0a8de80 426 background-position: center;
dadba0f2
RK
427}
428
d0a8de80
RK
429.animation-timeline .animation .delay,
430.animation-timeline .animation .end-delay {
2e389898 431 position: absolute;
d0a8de80
RK
432 height: 100%;
433 border: 1px solid var(--timeline-border-color);
e9fbfc3a 434 box-sizing: border-box;
d0a8de80 435}
e9fbfc3a 436
d0a8de80 437.animation-timeline .animation .delay {
e9fbfc3a
RK
438 border-width: 1px 0 1px 1px;
439 background-image: repeating-linear-gradient(45deg,
440 transparent,
441 transparent 1px,
442 var(--theme-selection-color) 1px,
443 var(--theme-selection-color) 4px);
d0a8de80 444 background-color: var(--timeline-border-color);
e9fbfc3a
RK
445}
446
d0a8de80
RK
447.animation-timeline .animation .end-delay {
448 border-width: 1px 1px 1px 0;
449 background-image: repeating-linear-gradient(
450 -45deg,
451 transparent,
452 transparent 3px,
453 var(--timeline-border-color) 3px,
454 var(--timeline-border-color) 4px);
455}
456
457.animation-timeline .animation .delay.negative,
458.animation-timeline .animation .end-delay.negative {
e9fbfc3a
RK
459 /* Negative delays are displayed on top of the animation, so they need a
460 right border. Whereas normal delays are displayed just before the
461 animation, so there's already the animation's left border that serves as
462 a separation. */
463 border-width: 1px;
2e389898
RK
464}
465
d74db938
RK
466/* Animation target node gutter, contains a preview of the dom node */
467
468.animation-target {
469 background-color: var(--theme-toolbar-background);
d0a8de80 470 padding: 0 4px;
d74db938
RK
471 box-sizing: border-box;
472 overflow: hidden;
473 text-overflow: ellipsis;
474 white-space: nowrap;
d0a8de80 475 cursor: pointer;
d74db938
RK
476}
477
478.animation-target .attribute-name {
479 padding-left: 4px;
480}
481
dadba0f2 482.animation-target .node-highlighter {
dc9d5d64 483 background: url("chrome://devtools/skin/images/vview-open-inspector.png") no-repeat 0 0;
d74db938
RK
484 padding-left: 16px;
485 margin-right: 5px;
486 cursor: pointer;
487}
488
dadba0f2
RK
489.animation-target .node-highlighter:hover {
490 filter: url(images/filters.svg#checked-icon-state);
d74db938
RK
491}
492
dadba0f2
RK
493.animation-target .node-highlighter:active,
494.animation-target .node-highlighter.selected {
495 filter: url(images/filters.svg#checked-icon-state);
d74db938
RK
496}
497
d0a8de80 498/* Inline keyframes info in the timeline */
20752032 499
d0a8de80
RK
500.animation-timeline .animated-properties:not(.selected) {
501 display: none;
20752032
RK
502}
503
d0a8de80
RK
504.animation-timeline .animated-properties {
505 background-color: var(--theme-selection-background-semitransparent);
20752032
RK
506}
507
d0a8de80
RK
508.animation-timeline .animated-properties ul {
509 margin: 0;
510 padding: 0;
511 list-style-type: none;
b336389b
RK
512}
513
d0a8de80 514.animation-timeline .animated-properties .property {
e9fbfc3a 515 height: var(--timeline-animation-height);
d0a8de80 516 position: relative;
20752032
RK
517}
518
d0a8de80
RK
519.animation-timeline .animated-properties .property:nth-child(2n) {
520 background-color: var(--even-animation-timeline-background-color);
20752032
RK
521}
522
d0a8de80
RK
523.animation-timeline .animated-properties .name {
524 width: var(--timeline-sidebar-width);
525 padding-right: var(--keyframes-marker-size);
526 box-sizing: border-box;
527 height: 100%;
528 color: var(--theme-body-color-alt);
529 white-space: nowrap;
530 display: flex;
531 justify-content: flex-end;
532 align-items: center;
20752032
RK
533}
534
d0a8de80
RK
535.animation-timeline .animated-properties .name div {
536 overflow: hidden;
537 text-overflow: ellipsis;
20752032
RK
538}
539
1e9e1791
RK
540.animated-properties.cssanimation {
541 --background-color: var(--theme-contrast-background);
542}
543
544.animated-properties.csstransition {
545 --background-color: var(--theme-highlight-blue);
546}
547
548.animated-properties.scriptanimation {
549 --background-color: var(--theme-graphs-green);
550}
551
552.animation-timeline .animated-properties .oncompositor::before {
553 content: "";
554 display: inline-block;
555 width: 17px;
556 height: 17px;
557 background-color: var(--background-color);
558 clip-path: url(images/animation-fast-track.svg#thunderbolt);
559 vertical-align: middle;
560}
561
562.animation-timeline .animated-properties .warning {
563 text-decoration: underline dotted;
564}
565
d0a8de80
RK
566.animation-timeline .animated-properties .frames {
567 /* The frames list is absolutely positioned and the left and width properties
568 are dynamically set from javascript to match the animation's startTime and
569 duration */
570 position: absolute;
571 top: 0;
572 height: 100%;
573 /* Using flexbox to vertically center the frames */
574 display: flex;
575 align-items: center;
20752032
RK
576}
577
d0a8de80
RK
578/* Keyframes diagram, displayed below the timeline, inside the animation-details
579 element. */
20752032 580
d0a8de80
RK
581.keyframes {
582 /* Actual keyframe markers are positioned absolutely within this container and
583 their position is relative to its size (we know the offset of each frame
584 in percentage) */
585 position: relative;
586 width: 100%;
587 height: 0;
20752032
RK
588}
589
d0a8de80
RK
590.keyframes.cssanimation {
591 background-color: var(--theme-contrast-background);
20752032
RK
592}
593
d0a8de80
RK
594.keyframes.csstransition {
595 background-color: var(--theme-highlight-blue);
20752032
RK
596}
597
d0a8de80
RK
598.keyframes.scriptanimation {
599 background-color: var(--theme-graphs-green);
20752032
RK
600}
601
d0a8de80 602.keyframes .frame {
20752032 603 position: absolute;
d0a8de80
RK
604 top: 0;
605 width: 0;
606 height: 0;
607 background-color: inherit;
608 cursor: pointer;
20752032
RK
609}
610
d0a8de80
RK
611.keyframes .frame::before {
612 content: "";
613 display: block;
614 transform:
615 translateX(calc(var(--keyframes-marker-size) * -.5))
616 /* The extra pixel on the Y axis is so that markers are centered on the
617 horizontal line in the keyframes diagram. */
618 translateY(calc(var(--keyframes-marker-size) * -.5 + 1px));
619 width: var(--keyframes-marker-size);
620 height: var(--keyframes-marker-size);
621 border-radius: 100%;
622 background-color: inherit;
20752032 623}