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/. */
5 /* Animation-inspector specific theme variables */
8 --animation-item-hover-color: rgba
(215, 215, 219, 0.4);
9 --animation-item-selected-color: rgba
(215, 215, 219, 0.9);
10 --cssanimation-color: var
(--purple-50
);
11 --csstransition-color: var
(--blue-55
);
12 --fast-track-image: url
("images/animation-fast-track.svg");
14 --graph-right-offset: 10px;
15 --keyframe-marker-shadow-color: #c4c4c4;
16 --pause-image: url
(chrome://devtools
/skin
/images
/pause
.svg
);
17 --progress-bar-color: var
(--grey-40
);
18 --resume-image: url
(chrome://devtools
/skin
/images
/play
.svg
);
19 --rewind-image: url
(chrome://devtools
/skin
/images
/rewind
.svg
);
20 --scriptanimation-color: var
(--green-60
);
21 --scrubber-color: var
(--magenta-65
);
22 --sidebar-width: 200px;
23 --tick-line-style: 0.5px solid var
(--theme-splitter-color
);
27 --animation-item-hover-color: rgba
(74, 74, 79, 0.5);
28 --animation-item-selected-color: var
(--grey-60
);
29 --csstransition-color: var
(--blue-50
);
30 --keyframe-marker-shadow-color: #818181;
31 --progress-bar-color: var
(--grey-50
);
32 --scrubber-color: var
(--magenta-50
);
35 #animationinspector-panel {
39 /* Root element of animation inspector */
40 #animation-container {
43 flex-direction: column
;
46 min-width: var
(--min-container-width
);
49 #animation-container .uncontrolled
{
53 #animation-container:not
(.animation-detail-visible
) .controlled
{
57 #animation-container .animation-container-splitter
{
61 /* Animation Toolbar */
66 .pause-resume-button::before {
67 background-image: var
(--pause-image
);
70 .pause-resume-button.paused::before {
71 background-image: var
(--resume-image
);
74 select
.playback-rate-selector
.devtools-button
{
75 background-image: url
("chrome://devtools/skin/images/dropmarker.svg");
76 background-position: calc
(100% - 4px) center
;
77 background-repeat: no-repeat
;
78 padding-inline-end: 1em;
82 select
.playback-rate-selector
.devtools-button:not
(:empty
, :disabled
, .checked
):hover
{
84 background-color: var
(--toolbarbutton-background
);
85 background-image: url
("chrome://devtools/skin/images/dropmarker.svg");
86 background-position: calc
(100% - 4px) center
;
87 background-repeat: no-repeat
;
88 border-color: var
(--toolbarbutton-hover-border-color
);
91 .rewind-button::before {
92 background-image: var
(--rewind-image
);
95 /* Animation List Container */
96 .animation-list-container {
102 .animation-list-container
.active-scrubber
,
103 .animation-list-container.active-scrubber .animation-summary-graph {
107 /* Current Time Scrubber */
108 .current-time-scrubber-area {
114 .current-time-scrubber-area::before {
117 height: var
(--theme-toolbar-height
);
118 pointer-events: auto
;
120 /* In order to click on edge of current-time-scrubber-controller element */
121 width: calc
(100% + 1px);
124 .current-time-scrubber-area:dir(rtl)::before {
125 /* In order to click on the start edge of current-time-scrubber-area element on RTL */
126 margin-inline-start: -1px;
129 .indication-bar.current-time-scrubber {
131 pointer-events: auto
;
134 .indication-bar.current-time-scrubber:dir(rtl)::before {
135 transform: translateX
(6px);
138 .indication-bar.current-time-scrubber:dir(rtl)::after {
139 transform: translateX
(1px);
142 .indication-bar.current-time-scrubber::before {
143 border-top-color: var
(--scrubber-color
);
146 .indication-bar.current-time-scrubber::after {
147 background-color: var
(--scrubber-color
);
151 .animation-item.cssanimation {
152 --graph-color: var
(--cssanimation-color
);
153 --graph-opacity: 0.7;
156 .animation-item.csstransition {
157 --graph-color: var
(--csstransition-color
);
158 --graph-opacity: 0.8;
161 .animation-item.scriptanimation {
162 --graph-color: var
(--scriptanimation-color
);
163 --graph-opacity: 0.5;
166 .animation-item:hover {
167 background-color: var
(--animation-item-hover-color
);
170 .animation-item.selected {
171 background-color: var
(--animation-item-selected-color
);
174 /* Animation Target */
180 padding-inline-start: 4px;
181 /* animation-target is tech term, so it should be displayed as ltr. */
185 .animation-item:dir(rtl).animation-target {
190 .animation-target .objectBox {
195 .animation-target .objectBox .attrName {
198 text-overflow: ellipsis
;
202 .animation-target .objectBox .highlight-node {
203 fill: var
(--theme-icon-dimmed-color
);
207 .animation-target .objectBox .highlight-node:hover{
208 fill: var
(--theme-icon-color
);
211 .animation-target
.objectBox
.highlight-node:active
,
212 .animation-target.highlighting .objectBox .highlight-node {
213 fill: var
(--theme-icon-checked-color
);
214 /* Since the icon is quite thin, it can be hard to differentiate it
215 from its regular state. Adding some background helps make it pop a bit */
216 background-color: var
(--dimmed-highlighter-box-content-color
);
220 .animation-summary-graph {
229 .animation-summary-graph.compositor::after {
230 background-image: var
(--fast-track-image
);
231 background-repeat: no-repeat
;
234 fill: var
(--theme-icon-dimmed-color
);
240 -moz-context-properties: fill
;
243 .animation-summary-graph.compositor:dir(rtl)::after {
248 .animation-summary-graph-path {
253 .animation-summary-graph:dir(rtl) .animation-summary-graph-path {
254 transform: scaleX
(-1.0);
257 .animation-computed-timing-path path {
258 fill: var
(--graph-color
);
259 fill-opacity: var
(--graph-opacity
);
260 stroke: var
(--graph-color
);
261 vector-effect: non-scaling-stroke
;
262 transform: scale
(1, -1);
265 .animation-computed-timing-path path.infinity:nth-child(n+2) {
269 .animation-effect-timing-path path {
271 stroke: var
(--graph-color
);
272 stroke-dasharray: 2px 2px;
273 transform: scale
(1, -1);
274 vector-effect: non-scaling-stroke
;
277 .animation-effect-timing-path path.infinity:nth-child(n+2) {
281 .animation-computed-timing-path path
.infinity-duration
,
282 .animation-effect-timing-path path.infinity-duration {
283 mask-clip: stroke-box
;
284 mask-image: linear-gradient
(90deg, black
, transparent
);
285 mask-origin: stroke-box
;
288 .animation-negative-delay-path path
,
289 .animation-negative-end-delay-path path {
291 stroke: var
(--theme-graphs-grey
);
292 stroke-dasharray: 2px 2px;
293 transform: scale
(1, -1);
294 vector-effect: non-scaling-stroke
;
297 .animation-delay-sign
,
298 .animation-end-delay-sign {
299 background-color: var
(--theme-graphs-grey
);
305 .animation-delay-sign::before
,
306 .animation-end-delay-sign::before {
307 background-color: inherit
;
316 .animation-delay-sign
.fill
,
317 .animation-end-delay-sign.fill {
318 background-color: var
(--graph-color
);
321 /* These are delay sign directions. Basically, we can't use
322 the transform due to pseudo element, So we use the left/right align. */
324 .animation-delay-sign:dir(ltr)::before {
329 .animation-delay-sign:dir(rtl)::before {
334 .animation-delay-sign.negative:dir(ltr)::before {
339 .animation-delay-sign.negative:dir(rtl)::before {
344 .animation-end-delay-sign:dir(ltr)::before {
349 .animation-end-delay-sign:dir(rtl)::before {
354 .animation-end-delay-sign.negative:dir(ltr)::before {
358 .animation-end-delay-sign.negative:dir(rtl)::before {
366 pointer-events: none
;
369 width: calc
(100% - 20px);
372 .animation-name text {
373 dominant-baseline: middle
;
374 fill: var
(--theme-focus-outline-color
);
376 stroke: var
(--theme-body-background
);
377 stroke-linejoin: round
;
383 .animation-summary-graph:dir(rtl) .animation-name text {
384 transform: translateX
(-100%);
387 .animation-summary-graph:dir(rtl) .animation-name {
391 /* Animation Detail */
392 .animation-detail-container {
393 background-color: var
(--theme-sidebar-background
);
395 flex-direction: column
;
402 .animation-detail-header {
404 padding-inline-end: 0;
407 /* On OSX the cursor turns into a window-resizing cursor at the edges of the
408 * window, so bring the end of the close button in. */
409 :root
[platform
="mac"] .animation-detail-header
{
410 padding-inline-end: 2px;
413 .animation-detail-title {
416 text-overflow: ellipsis
;
420 .animation-detail-close-button {
424 .animation-detail-close-button::before {
425 background-image: url
(chrome://devtools
/skin
/images
/close
.svg
);
428 /* Animated Property List Container */
429 .animated-property-list-container {
435 /* Keyframes Progress Bar */
436 .keyframes-progress-bar-area {
439 pointer-events: none
;
444 .indication-bar.keyframes-progress-bar::before {
445 border-top-color: var
(--progress-bar-color
);
448 .indication-bar.keyframes-progress-bar::after {
449 background-color: var
(--progress-bar-color
);
452 /* Animated Property Item */
453 .animated-property-item.unchanged {
457 /* Animated Property Name */
458 .animated-property-name {
462 justify-content: flex-end
;
463 padding-inline-end: 10px;
466 .animated-property-name.compositor span {
467 padding-inline-start: 15px;
471 .animated-property-list-container.cssanimation .animated-property-name.compositor {
472 --fast-track-color: var
(--cssanimation-color
);
475 .animated-property-list-container.csstransition .animated-property-name.compositor {
476 --fast-track-color: var
(--csstransition-color
);
479 .animated-property-list-container.scriptanimation .animated-property-name.compositor {
480 --fast-track-color: var
(--scriptanimation-color
);
483 .animated-property-name
.compositor
span:dir
(ltr
)::before
,
484 .animated-property-name.compositor span:dir(rtl)::after {
485 background-image: var
(--fast-track-image
);
486 background-repeat: no-repeat
;
487 background-size: contain
;
489 fill: var
(--fast-track-color
);
492 /* In order to support RTL/LTR both of environment, set the left and right to zero */
496 -moz-context-properties: fill
;
499 .animated-property-name.warning span {
500 text-decoration: underline dotted
;
503 /* Keyframes Graph */
511 .keyframes-graph:dir(rtl) .keyframes-graph-path {
512 transform: scaleX
(-1.0);
515 .keyframes-graph-path {
520 .keyframes-graph-path path {
521 fill: var
(--teal-60
);
523 stroke: var
(--teal-70
);
524 vector-effect: non-scaling-stroke
;
525 transform: scale
(1, -1);
528 .keyframes-graph.opacity .keyframes-graph-path path {
529 fill: var
(--magenta-50
);
530 stroke: var
(--magenta-70
);
533 .keyframes-graph.transform .keyframes-graph-path path {
534 fill: var
(--yellow-50
);
535 stroke: var
(--yellow-60
);
538 .keyframes-graph-path .color-path path {
543 .keyframes-graph .keyframes-graph-path .hint path {
545 stroke-linecap: round
;
549 .keyframes-graph-path .hint path:hover {
553 .keyframes-graph-path .hint rect {
557 .keyframes-graph-path .hint line {
560 vector-effect: non-scaling-stroke
;
563 .keyframes-graph-path .hint:hover line {
567 /* Keyframe Marker List */
568 .keyframe-marker-list {
569 pointer-events: none
;
572 list-style-type: none
;
575 padding-inline-start: 0;
578 .keyframe-marker-item {
579 box-shadow: 0 0 0 1px var
(--keyframe-marker-shadow-color
);
581 pointer-events: auto
;
585 transform: translate
(-5px, -3px);
589 .keyframe-marker-item:dir(rtl) {
590 transform: translate
(5px, -3px);
593 .animated-property-list-container.cssanimation .keyframe-marker-item {
594 background-color: var
(--cssanimation-color
);
597 .animated-property-list-container.csstransition .keyframe-marker-item {
598 background-color: var
(--csstransition-color
);
601 .animated-property-list-container.scriptanimation .keyframe-marker-item {
602 background-color: var
(--scriptanimation-color
);
605 /* Common Components */
606 /* Progress Inspection Panel */
607 .progress-inspection-panel {
613 grid-template-columns: var
(--sidebar-width
) 1fr var
(--graph-right-offset
);
614 grid-template-rows: var
(--theme-toolbar-height
) calc
(100% - var
(--theme-toolbar-height
));
617 .progress-inspection-panel > .background {
624 /* Correspond to the bug 1462235 */
625 height: calc
(100% - 1px);
627 pointer-events: none
;
630 grid-template-columns: subgrid
;
633 .progress-inspection-panel > .header {
644 grid-template-columns: subgrid
;
647 .progress-inspection-panel > .indicator {
654 /* Correspond to the bug 1462235 */
655 height: calc
(100% - 1px);
657 pointer-events: none
;
661 grid-template-columns: subgrid
;
664 .progress-inspection-panel > ul {
668 list-style-type: none
;
673 grid-template-columns: subgrid
;
674 grid-auto-rows: min-content
;
677 .progress-inspection-panel > ul > li {
679 height: var
(--graph-height
);
681 grid-template-columns: subgrid
;
693 border-inline-start: var
(--tick-line-style
);
704 border-inline-start: var
(--tick-line-style
);
709 text-overflow: ellipsis
;
712 .animated-property-list-container .tick-label:last-child {
713 border-inline-start: unset
;
714 border-inline-end: var
(--tick-line-style
);
715 transform: translateX
(calc
(-100% + 0.5px));
718 .animated-property-list-container .tick-label:dir(rtl):last-child {
719 transform: translateX
(calc
(100% - 0.6px));
728 .indication-bar::before {
729 border-inline-start: 5px solid transparent
;
730 border-inline-end: 5px solid transparent
;
731 border-top: 5px solid
;
733 height: calc
(100% - 5px);
735 transform: translateX
(-6px);
739 .indication-bar::after {
743 transform: translateX
(-1px);
747 /* No Animation Panel */
748 .animation-error-message > p {
749 white-space: pre-wrap
;
752 .animation-element-picker::before {
753 background-image: url
("resource://devtools-shared-images/command-pick.svg");