first part of syncing LCARStrek with Firefox 45-48 devtools theme changes
[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,
8.theme-light {
9 --even-animation-timeline-background-color: rgba(160,144,144,0.03);
10}
11
e9fbfc3a
RK
12:root {
13 /* How high should toolbars be */
14 --toolbar-height: 20px;
15 /* How wide should the sidebar be */
16 --timeline-sidebar-width: 150px;
17 /* How high should animations displayed in the timeline be */
18 --timeline-animation-height: 20px;
19}
20
20752032
RK
21html {
22 height: 100%;
23}
24
25body {
26 margin: 0;
27 padding: 0;
28 display : flex;
29 flex-direction: column;
30 height: 100%;
31 overflow: hidden;
32 color: var(--theme-content-color3);
33}
34
d7b7f7e1
RK
35/* The top toolbar, containing the toggle-all button. And the timeline toolbar,
36 containing playback control buttons, shown only when there are animations
37 displayed in the timeline */
20752032 38
d7b7f7e1
RK
39#global-toolbar,
40#timeline-toolbar {
20752032
RK
41 border-bottom: 1px solid var(--theme-splitter-color);
42 display: flex;
43 flex-direction: row;
44 align-items: center;
45 justify-content: flex-end;
e9fbfc3a 46 height: var(--toolbar-height);
20752032
RK
47}
48
d7b7f7e1
RK
49#timeline-toolbar {
50 display: none;
20752032
RK
51}
52
d7b7f7e1
RK
53[timeline] #global-toolbar {
54 display: none;
55}
56
57[timeline] #timeline-toolbar {
58 display: flex;
59}
60
61#global-toolbar .label {
62 padding: 1px 4px;
20752032
RK
63}
64
2e389898
RK
65/* The main animations container */
66
67#players {
e9fbfc3a 68 height: calc(100% - var(--toolbar-height));
2e389898
RK
69 overflow: auto;
70}
71
d7b7f7e1
RK
72[empty] #players {
73 display: none;
74}
75
20752032
RK
76/* The error message, shown when an invalid/unanimated element is selected */
77
78#error-message {
79 padding-top: 10%;
80 text-align: center;
81 flex: 1;
82 overflow: auto;
83
84 /* The error message is hidden by default */
85 display: none;
86}
87
d7b7f7e1
RK
88[empty] #error-message {
89 display: block;
90}
91
92/* Element picker, toggle-all buttons, timeline pause button, ... */
20752032 93
d7b7f7e1
RK
94#global-toolbar .devtools-button,
95#timeline-toolbar .devtools-button {
96 border-width: 0 0 0 1px;
97 min-height: var(--toolbar-height);
98}
99
d7b7f7e1 100#element-picker::before {
dadba0f2 101 background-image: url("chrome://devtools/skin/command-pick.svg");
20752032
RK
102}
103
d7b7f7e1 104.pause-button::before {
20752032
RK
105 background-image: url("debugger-pause.png");
106}
107
d7b7f7e1 108.pause-button.paused::before {
20752032
RK
109 background-image: url("debugger-play.png");
110}
111
024a65e9 112@media (min-resolution: 1.1dppx) {
d7b7f7e1 113 .pause-button::before {
20752032
RK
114 background-image: url("debugger-pause@2x.png");
115 }
116
d7b7f7e1 117 .pause-button.paused::before {
20752032
RK
118 background-image: url("debugger-play@2x.png");
119 }
120}
121
dadba0f2
RK
122#timeline-rate select {
123 -moz-appearance: none;
124 text-align: center;
125 color: inherit;
126 font-family: inherit;
127}
128
2e389898
RK
129/* Animation timeline component */
130
131.animation-timeline {
132 height: 100%;
133 overflow: hidden;
d7b7f7e1 134 position: relative;
2e389898
RK
135 /* The timeline gets its background-image from a canvas element created in
136 /browser/devtools/animationinspector/utils.js drawGraphElementBackground
137 thanks to document.mozSetImageElement("time-graduations", canvas)
138 This is done so that the background can be built dynamically from script */
139 background-image: -moz-element(#time-graduations);
140 background-repeat: repeat-y;
141 /* The animations are drawn 150px from the left edge so that animated nodes
142 can be displayed in a sidebar */
e9fbfc3a 143 background-position: var(--timeline-sidebar-width) 0;
2e389898
RK
144 display: flex;
145 flex-direction: column;
146}
147
e9fbfc3a
RK
148.animation-timeline .scrubber {
149 position: absolute;
150 height: 100%;
151 width: var(--timeline-sidebar-width);
152 border-right: 1px solid #FF0000;
153 box-sizing: border-box;
154 z-index: 1;
155 pointer-events: none;
156}
157
158.animation-timeline .scrubber::before {
159 content: "";
160 position: absolute;
161 top: 0;
162 width: 1px;
163 right: -6px;
164 border-top: 5px solid #FF0000;
165 border-left: 5px solid transparent;
166 border-right: 5px solid transparent;
167}
168
2e389898 169.animation-timeline .time-header {
e9fbfc3a
RK
170 margin-left: var(--timeline-sidebar-width);
171 height: var(--toolbar-height);
2e389898
RK
172 overflow: hidden;
173 position: relative;
e9fbfc3a
RK
174 /* This is the same color as the time graduations in
175 browser/devtools/animationinspector/utils.js */
2e389898 176 border-bottom: 1px solid var(--theme-splitter-color);
e9fbfc3a
RK
177 cursor: col-resize;
178 -moz-user-select: none;
2e389898
RK
179}
180
181.animation-timeline .time-header .time-tick {
182 position: absolute;
183 top: 3px;
184}
185
186.animation-timeline .animations {
187 width: 100%;
188 overflow-y: auto;
189 overflow-x: hidden;
190 margin: 0;
191 padding: 0;
192 list-style-type: none;
193}
194
195/* Animation block widgets */
196
197.animation-timeline .animation {
198 margin: 4px 0;
e9fbfc3a 199 height: var(--timeline-animation-height);
2e389898
RK
200 position: relative;
201}
202
203.animation-timeline .animation:nth-child(2n) {
204 background-color: var(--even-animation-timeline-background-color);
205}
206
207.animation-timeline .animation .target {
e9fbfc3a 208 width: var(--timeline-sidebar-width);
2e389898
RK
209 overflow: hidden;
210 height: 100%;
211}
212
213.animation-timeline .animation-target {
214 background-color: transparent;
215}
216
217.animation-timeline .animation .time-block {
218 position: absolute;
219 top: 0;
e9fbfc3a 220 left: var(--timeline-sidebar-width);
2e389898
RK
221 right: 0;
222 height: 100%;
223}
224
225/* Animation iterations */
226
227.animation-timeline .animation .iterations {
228 position: relative;
229 height: 100%;
2e389898 230 box-sizing: border-box;
e9fbfc3a
RK
231 --timelime-border-color: var(--theme-body-color);
232 --timeline-background-color: var(--theme-splitter-color);
233
234 /* Iterations of the animation are displayed with a repeating linear-gradient
235 which size is dynamically changed from JS. The gradient only draws 1px
236 borders between each iteration. These borders must have the same color as
237 the border of this element */
2e389898
RK
238 background-image:
239 linear-gradient(to right,
e9fbfc3a
RK
240 var(--timelime-border-color) 0,
241 var(--timelime-border-color) 1px,
2e389898
RK
242 transparent 1px,
243 transparent 2px);
244 background-repeat: repeat-x;
245 background-position: -1px 0;
e9fbfc3a
RK
246 border: 1px solid var(--timelime-border-color);
247
248 /* The background color is set independently */
249 background-color: var(--timeline-background-color);
250}
251
252.animation-timeline .animation .cssanimation {
253 --timelime-border-color: var(--theme-highlight-lightorange);
254 --timeline-background-color: var(--theme-contrast-background);
255}
256
257.animation-timeline .animation .csstransition {
258 --timelime-border-color: var(--theme-highlight-bluegrey);
259 --timeline-background-color: var(--theme-highlight-blue);
2e389898
RK
260}
261
262.animation-timeline .animation .iterations.infinite {
263 border-right-width: 0;
264}
265
266.animation-timeline .animation .iterations.infinite::before,
267.animation-timeline .animation .iterations.infinite::after {
268 content: "";
269 position: absolute;
270 top: 0;
271 right: 0;
272 width: 0;
273 height: 0;
274 border-right: 4px solid var(--theme-body-background);
275 border-top: 4px solid transparent;
276 border-bottom: 4px solid transparent;
277}
278
279.animation-timeline .animation .iterations.infinite::after {
280 bottom: 0;
281 top: unset;
282}
283
e9fbfc3a
RK
284.animation-timeline .animation .name {
285 color: var(--theme-selection-color);
286 height: 100%;
2e389898 287 width: 100%;
2e389898 288 overflow: hidden;
e9fbfc3a
RK
289 text-overflow: ellipsis;
290 white-space: nowrap;
291 line-height: 150%;
292 padding: 0 2px;
2e389898
RK
293}
294
dadba0f2
RK
295.animation-timeline .fast-track .name {
296 /* Animations running on the compositor have the fast-track background image*/
297 background-image: url("images/animation-fast-track.svg");
298 background-repeat: no-repeat;
299}
300
2e389898
RK
301.animation-timeline .animation .delay {
302 position: absolute;
303 top: 0;
e9fbfc3a
RK
304 /* Make sure the delay covers up the animation border */
305 transform: translate(-1px, -1px);
306 box-sizing: border-box;
307 height: calc(100% + 2px);
308
309 border: 1px solid var(--timelime-border-color);
310 border-width: 1px 0 1px 1px;
311 background-image: repeating-linear-gradient(45deg,
312 transparent,
313 transparent 1px,
314 var(--theme-selection-color) 1px,
315 var(--theme-selection-color) 4px);
316 background-color: var(--timelime-border-color);
317}
318
319.animation-timeline .animation .delay.negative {
320 /* Negative delays are displayed on top of the animation, so they need a
321 right border. Whereas normal delays are displayed just before the
322 animation, so there's already the animation's left border that serves as
323 a separation. */
324 border-width: 1px;
2e389898
RK
325}
326
327.animation-timeline .animation .delay::before {
328 position: absolute;
329 content: "";
330 left: 0;
331 width: 2px;
332 height: 8px;
333 top: 50%;
334 margin-top: -4px;
e9fbfc3a 335 background: var(--timelime-border-color);
2e389898
RK
336}
337
d74db938
RK
338/* Animation target node gutter, contains a preview of the dom node */
339
340.animation-target {
341 background-color: var(--theme-toolbar-background);
342 padding: 1px 4px;
343 box-sizing: border-box;
344 overflow: hidden;
345 text-overflow: ellipsis;
346 white-space: nowrap;
347}
348
349.animation-target .attribute-name {
350 padding-left: 4px;
351}
352
dadba0f2 353.animation-target .node-highlighter {
dc9d5d64 354 background: url("chrome://devtools/skin/images/vview-open-inspector.png") no-repeat 0 0;
d74db938
RK
355 padding-left: 16px;
356 margin-right: 5px;
357 cursor: pointer;
358}
359
dadba0f2
RK
360.animation-target .node-highlighter:hover {
361 filter: url(images/filters.svg#checked-icon-state);
d74db938
RK
362}
363
dadba0f2
RK
364.animation-target .node-highlighter:active,
365.animation-target .node-highlighter.selected {
366 filter: url(images/filters.svg#checked-icon-state);
d74db938
RK
367}
368
20752032
RK
369/* Animation title gutter, contains the name, duration, iteration */
370
371.animation-title {
372 background-color: var(--theme-toolbar-background);
373 border-bottom: 1px solid var(--theme-splitter-color);
374 padding: 1px 4px;
375 word-wrap: break-word;
376 overflow: auto;
377}
378
379.animation-title .meta-data {
380 float: right;
381}
382
383.animation-title strong {
384 margin: 0 .5em;
385}
386
b336389b
RK
387.animation-title .meta-data .compositor-icon {
388 display: none;
dadba0f2 389 background-image: url("images/animation-fast-track.svg");
b336389b
RK
390 background-repeat: no-repeat;
391 padding-left: 12px;
392 /* Make sure the icon is positioned above the timeline range input so that
393 its tooltip appears on hover */
394 z-index: 1;
395 position: relative;
396}
397
20752032
RK
398/* Timeline wiget */
399
400.timeline {
e9fbfc3a 401 height: var(--timeline-animation-height);
20752032
RK
402 width: 100%;
403 display: flex;
404 flex-direction: row;
405 border-bottom: 1px solid var(--theme-splitter-color);
406}
407
408.timeline .playback-controls {
409 display: flex;
410 flex-direction: row;
411}
412
413/* Playback control buttons */
414
415.timeline .playback-controls button {
416 flex-grow: 1;
417 border-width: 0 1px 0 0;
418}
419
420.timeline .toggle::before {
421 background-image: url(debugger-pause.png);
422}
423
424.paused .timeline .toggle::before,
425.finished .timeline .toggle::before {
426 background-image: url(debugger-play.png);
427}
428
429.timeline .ff::before {
430 background-image: url(fast-forward.png);
431}
432
433.timeline .rw::before {
434 background-image: url(rewind.png);
435}
436
024a65e9 437@media (min-resolution: 1.1dppx) {
20752032
RK
438 .timeline .toggle::before {
439 background-image: url(debugger-pause@2x.png);
440 }
441
442 .paused .timeline .toggle::before,
443 .finished .timeline .toggle::before {
444 background-image: url(debugger-play@2x.png);
445 }
446
447 .timeline .ff::before {
448 background-image: url(fast-forward@2x.png);
449 }
450
451 .timeline .rw::before {
452 background-image: url(rewind@2x.png);
453 }
454}
455
456.timeline .rate {
457 -moz-appearance: none;
458 text-align: center;
a5cb6e53 459 color: var(--theme-body-color);
20752032
RK
460 border-right: 1px solid var(--theme-splitter-color);
461}
462
463/* Slider (input type range) container */
464
465.timeline .sliders-container {
466 flex-grow: 1;
467 height: 100%;
468 position: relative;
469 border-width: 1px 0;
470}
471
472.timeline .sliders-container .current-time {
473 position: absolute;
474 padding: 0;
475 margin: 0;
476 left: 0;
477 width: 100%;
478 height: 100%;
479}
480
481.timeline .sliders-container .current-time::-moz-range-thumb {
482 height: 100%;
483 width: 4px;
484 border-radius: 0;
485 border: none;
486 background: var(--theme-highlight-blue);
487}
488
489.timeline .sliders-container .current-time::-moz-range-track {
490 width: 100%;
491 height: 50px;
492 background: transparent;
493}
494
495/* Current time label */
496
497.timeline .time-display {
498 display: flex;
499 align-items: center;
500 justify-content: center;
501 width: 50px;
502 border-left: 1px solid var(--theme-splitter-color);
503 background: var(--theme-toolbar-background);
504}