tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

animation.css (16510B)


      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 :root {
      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");
     13  --graph-height: 30px;
     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);
     24 }
     25 
     26 :root.theme-dark {
     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);
     33 }
     34 
     35 #animationinspector-panel {
     36  overflow-x: auto;
     37 }
     38 
     39 /* Root element of animation inspector */
     40 #animation-container {
     41  cursor: default;
     42  display: flex;
     43  flex-direction: column;
     44  height: 100%;
     45  outline: none;
     46  min-width: var(--min-container-width);
     47 }
     48 
     49 #animation-container .uncontrolled {
     50  overflow: hidden;
     51 }
     52 
     53 #animation-container:not(.animation-detail-visible) .controlled {
     54  display: none;
     55 }
     56 
     57 #animation-container .animation-container-splitter {
     58  overflow: hidden;
     59 }
     60 
     61 /* Animation Toolbar */
     62 .animation-toolbar {
     63  display: flex;
     64 }
     65 
     66 .pause-resume-button::before {
     67  background-image: var(--pause-image);
     68 }
     69 
     70 .pause-resume-button.paused::before {
     71  background-image: var(--resume-image);
     72 }
     73 
     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;
     79  text-align: center;
     80 }
     81 
     82 select.playback-rate-selector.devtools-button:not(:empty, :disabled, .checked):hover {
     83  background: none;
     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);
     89 }
     90 
     91 .rewind-button::before {
     92  background-image: var(--rewind-image);
     93 }
     94 
     95 /* Animation List Container */
     96 .animation-list-container {
     97  overflow: hidden;
     98  width: 100%;
     99  user-select: none;
    100 }
    101 
    102 .animation-list-container.active-scrubber,
    103 .animation-list-container.active-scrubber .animation-summary-graph {
    104  cursor: col-resize;
    105 }
    106 
    107 /* Current Time Scrubber */
    108 .current-time-scrubber-area {
    109  grid-column: 2 / 3;
    110  position: relative;
    111  z-index: 2;
    112 }
    113 
    114 .current-time-scrubber-area::before {
    115  content: "";
    116  cursor: col-resize;
    117  height: var(--theme-toolbar-height);
    118  pointer-events: auto;
    119  position: absolute;
    120  /* In order to click on edge of current-time-scrubber-controller element */
    121  width: calc(100% + 1px);
    122 }
    123 
    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;
    127 }
    128 
    129 .indication-bar.current-time-scrubber {
    130  cursor: col-resize;
    131  pointer-events: auto;
    132 }
    133 
    134 .indication-bar.current-time-scrubber:dir(rtl)::before {
    135  transform: translateX(6px);
    136 }
    137 
    138 .indication-bar.current-time-scrubber:dir(rtl)::after {
    139  transform: translateX(1px);
    140 }
    141 
    142 .indication-bar.current-time-scrubber::before {
    143  border-top-color: var(--scrubber-color);
    144 }
    145 
    146 .indication-bar.current-time-scrubber::after {
    147  background-color: var(--scrubber-color);
    148 }
    149 
    150 /* Animation Item */
    151 .animation-item.cssanimation {
    152  --graph-color: var(--cssanimation-color);
    153  --graph-opacity: 0.7;
    154 }
    155 
    156 .animation-item.csstransition {
    157  --graph-color: var(--csstransition-color);
    158  --graph-opacity: 0.8;
    159 }
    160 
    161 .animation-item.scriptanimation {
    162  --graph-color: var(--scriptanimation-color);
    163  --graph-opacity: 0.5;
    164 }
    165 
    166 .animation-item:hover {
    167  background-color: var(--animation-item-hover-color);
    168 }
    169 
    170 .animation-item.selected {
    171  background-color: var(--animation-item-selected-color);
    172 }
    173 
    174 /* Animation Target */
    175 .animation-target {
    176  align-items: center;
    177  display: flex;
    178  grid-column: 1 / 2;
    179  height: inherit;
    180  padding-inline-start: 4px;
    181  /* animation-target is tech term, so it should be displayed as ltr. */
    182  direction: ltr;
    183 }
    184 
    185 .animation-item:dir(rtl).animation-target {
    186  right: 0;
    187 }
    188 
    189 /* Reps component */
    190 .animation-target .objectBox {
    191  display: flex;
    192  max-width: 100%;
    193 }
    194 
    195 .animation-target .objectBox .attrName {
    196  min-width: 0;
    197  overflow: hidden;
    198  text-overflow: ellipsis;
    199  white-space: nowrap;
    200 }
    201 
    202 .animation-target .objectBox .highlight-node {
    203  fill: var(--theme-icon-dimmed-color);
    204  flex: none;
    205 }
    206 
    207 .animation-target .objectBox .highlight-node:hover {
    208  fill: var(--theme-icon-color);
    209 }
    210 
    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);
    217 }
    218 
    219 /* Summary Graph */
    220 .animation-summary-graph {
    221  cursor: pointer;
    222  grid-column: 2 / 3;
    223  height: inherit;
    224  padding-bottom: 3px;
    225  padding-top: 3px;
    226  position: relative;
    227 }
    228 
    229 .animation-summary-graph.compositor::after {
    230  background-image: var(--fast-track-image);
    231  background-repeat: no-repeat;
    232  content: "";
    233  display: block;
    234  fill: var(--theme-icon-dimmed-color);
    235  height: 100%;
    236  position: absolute;
    237  right: 0;
    238  top: 5px;
    239  width: 15px;
    240  -moz-context-properties: fill;
    241 }
    242 
    243 .animation-summary-graph.compositor:dir(rtl)::after {
    244  right: unset;
    245  left: 0;
    246 }
    247 
    248 .animation-summary-graph-path {
    249  height: 100%;
    250  width: 100%;
    251 }
    252 
    253 .animation-summary-graph:dir(rtl) .animation-summary-graph-path {
    254  transform: scaleX(-1);
    255 }
    256 
    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);
    263 }
    264 
    265 .animation-computed-timing-path path.infinity:nth-child(n + 2) {
    266  opacity: 0.3;
    267 }
    268 
    269 .animation-effect-timing-path path {
    270  fill: none;
    271  stroke: var(--graph-color);
    272  stroke-dasharray: 2px 2px;
    273  transform: scale(1, -1);
    274  vector-effect: non-scaling-stroke;
    275 }
    276 
    277 .animation-effect-timing-path path.infinity:nth-child(n + 2) {
    278  opacity: 0.3;
    279 }
    280 
    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;
    286 }
    287 
    288 .animation-negative-delay-path path,
    289 .animation-negative-end-delay-path path {
    290  fill: none;
    291  stroke: var(--theme-graphs-grey);
    292  stroke-dasharray: 2px 2px;
    293  transform: scale(1, -1);
    294  vector-effect: non-scaling-stroke;
    295 }
    296 
    297 .animation-delay-sign,
    298 .animation-end-delay-sign {
    299  background-color: var(--theme-graphs-grey);
    300  height: 3px;
    301  position: absolute;
    302  bottom: 2px;
    303 }
    304 
    305 .animation-delay-sign::before,
    306 .animation-end-delay-sign::before {
    307  background-color: inherit;
    308  border-radius: 50%;
    309  content: "";
    310  height: 6px;
    311  position: absolute;
    312  top: -1.5px;
    313  width: 6px;
    314 }
    315 
    316 .animation-delay-sign.fill,
    317 .animation-end-delay-sign.fill {
    318  background-color: var(--graph-color);
    319 }
    320 
    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. */
    323 
    324 .animation-delay-sign:dir(ltr)::before {
    325  left: -3px;
    326  right: unset;
    327 }
    328 
    329 .animation-delay-sign:dir(rtl)::before {
    330  left: unset;
    331  right: -3px;
    332 }
    333 
    334 .animation-delay-sign.negative:dir(ltr)::before {
    335  left: unset;
    336  right: -3px;
    337 }
    338 
    339 .animation-delay-sign.negative:dir(rtl)::before {
    340  left: -3px;
    341  right: unset;
    342 }
    343 
    344 .animation-end-delay-sign:dir(ltr)::before {
    345  left: unset;
    346  right: -3px;
    347 }
    348 
    349 .animation-end-delay-sign:dir(rtl)::before {
    350  left: -3px;
    351  right: unset;
    352 }
    353 
    354 .animation-end-delay-sign.negative:dir(ltr)::before {
    355  left: -3px;
    356  right: unset;
    357 }
    358 .animation-end-delay-sign.negative:dir(rtl)::before {
    359  left: unset;
    360  right: -3px;
    361 }
    362 
    363 .animation-name {
    364  height: 100%;
    365  left: 0;
    366  pointer-events: none;
    367  position: absolute;
    368  top: 0;
    369  width: calc(100% - 20px);
    370 }
    371 
    372 .animation-name text {
    373  dominant-baseline: middle;
    374  fill: var(--theme-body-color);
    375  paint-order: stroke;
    376  stroke: var(--theme-body-background);
    377  stroke-linejoin: round;
    378  stroke-opacity: 0.7;
    379  stroke-width: 4;
    380  text-anchor: end;
    381 }
    382 
    383 .animation-summary-graph:dir(rtl) .animation-name text {
    384  transform: translateX(-100%);
    385 }
    386 
    387 .animation-summary-graph:dir(rtl) .animation-name {
    388  right: 0;
    389 }
    390 
    391 /* Animation Detail */
    392 .animation-detail-container {
    393  background-color: var(--theme-sidebar-background);
    394  display: flex;
    395  flex-direction: column;
    396  height: 100%;
    397  overflow: hidden;
    398  width: 100%;
    399  z-index: 2;
    400 }
    401 
    402 .animation-detail-header {
    403  display: flex;
    404  padding-inline-end: 0;
    405 }
    406 
    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;
    411 }
    412 
    413 .animation-detail-title {
    414  flex: 1;
    415  overflow: hidden;
    416  text-overflow: ellipsis;
    417  white-space: nowrap;
    418 }
    419 
    420 .animation-detail-close-button {
    421  margin: 0;
    422 }
    423 
    424 .animation-detail-close-button::before {
    425  background-image: url(chrome://devtools/skin/images/close.svg);
    426 }
    427 
    428 /* Animated Property List Container */
    429 .animated-property-list-container {
    430  flex: 1;
    431  overflow: hidden;
    432  user-select: none;
    433 }
    434 
    435 /* Keyframes Progress Bar */
    436 .keyframes-progress-bar-area {
    437  background: none;
    438  grid-column: 2 / 3;
    439  pointer-events: none;
    440  position: relative;
    441  z-index: 2;
    442 }
    443 
    444 .indication-bar.keyframes-progress-bar::before {
    445  border-top-color: var(--progress-bar-color);
    446 }
    447 
    448 .indication-bar.keyframes-progress-bar::after {
    449  background-color: var(--progress-bar-color);
    450 }
    451 
    452 /* Animated Property Item */
    453 .animated-property-item.unchanged {
    454  opacity: 0.6;
    455 }
    456 
    457 /* Animated Property Name */
    458 .animated-property-name {
    459  align-items: center;
    460  display: flex;
    461  height: inherit;
    462  justify-content: flex-end;
    463  padding-inline-end: 10px;
    464 }
    465 
    466 .animated-property-name.compositor span {
    467  padding-inline-start: 15px;
    468  position: relative;
    469 }
    470 
    471 .animated-property-list-container.cssanimation .animated-property-name.compositor {
    472  --fast-track-color: var(--cssanimation-color);
    473 }
    474 
    475 .animated-property-list-container.csstransition .animated-property-name.compositor {
    476  --fast-track-color: var(--csstransition-color);
    477 }
    478 
    479 .animated-property-list-container.scriptanimation .animated-property-name.compositor {
    480  --fast-track-color: var(--scriptanimation-color);
    481 }
    482 
    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;
    488  content: "";
    489  fill: var(--fast-track-color);
    490  height: 100%;
    491  position: absolute;
    492  /* In order to support RTL/LTR both of environment, set the left and right to zero */
    493  left: 0;
    494  right: 0;
    495  width: 15px;
    496  -moz-context-properties: fill;
    497 }
    498 
    499 .animated-property-name.warning span {
    500  text-decoration: underline dotted;
    501 }
    502 
    503 /* Keyframes Graph */
    504 .keyframes-graph {
    505  grid-column: 2 / 3;
    506  height: inherit;
    507  padding-top: 5px;
    508  position: relative;
    509 }
    510 
    511 .keyframes-graph:dir(rtl) .keyframes-graph-path {
    512  transform: scaleX(-1);
    513 }
    514 
    515 .keyframes-graph-path {
    516  height: 100%;
    517  width: 100%;
    518 }
    519 
    520 .keyframes-graph-path path {
    521  fill: var(--teal-60);
    522  fill-opacity: 0.5;
    523  stroke: var(--teal-70);
    524  vector-effect: non-scaling-stroke;
    525  transform: scale(1, -1);
    526 }
    527 
    528 .keyframes-graph.opacity .keyframes-graph-path path {
    529  fill: var(--magenta-50);
    530  stroke: var(--magenta-70);
    531 }
    532 
    533 .keyframes-graph.transform .keyframes-graph-path path {
    534  fill: var(--yellow-50);
    535  stroke: var(--yellow-60);
    536 }
    537 
    538 .keyframes-graph-path .color-path path {
    539  fill-opacity: 1;
    540  stroke: none;
    541 }
    542 
    543 .keyframes-graph .keyframes-graph-path .hint path {
    544  fill: none;
    545  stroke-linecap: round;
    546  stroke-opacity: 0;
    547 }
    548 
    549 .keyframes-graph-path .hint path:hover {
    550  stroke-opacity: 1;
    551 }
    552 
    553 .keyframes-graph-path .hint rect {
    554  fill-opacity: 0.1;
    555 }
    556 
    557 .keyframes-graph-path .hint line {
    558  stroke: #00b0bd;
    559  stroke-opacity: 0;
    560  vector-effect: non-scaling-stroke;
    561 }
    562 
    563 .keyframes-graph-path .hint:hover line {
    564  stroke-opacity: 1;
    565 }
    566 
    567 /* Keyframe Marker List */
    568 .keyframe-marker-list {
    569  pointer-events: none;
    570  position: absolute;
    571  height: 100%;
    572  list-style-type: none;
    573  top: 0%;
    574  width: 100%;
    575  padding-inline-start: 0;
    576 }
    577 
    578 .keyframe-marker-item {
    579  box-shadow: 0 0 0 1px var(--keyframe-marker-shadow-color);
    580  border-radius: 100%;
    581  pointer-events: auto;
    582  position: absolute;
    583  top: 50%;
    584  height: 10px;
    585  transform: translate(-5px, -3px);
    586  width: 10px;
    587 }
    588 
    589 .keyframe-marker-item:dir(rtl) {
    590  transform: translate(5px, -3px);
    591 }
    592 
    593 .animated-property-list-container.cssanimation .keyframe-marker-item {
    594  background-color: var(--cssanimation-color);
    595 }
    596 
    597 .animated-property-list-container.csstransition .keyframe-marker-item {
    598  background-color: var(--csstransition-color);
    599 }
    600 
    601 .animated-property-list-container.scriptanimation .keyframe-marker-item {
    602  background-color: var(--scriptanimation-color);
    603 }
    604 
    605 /* Common Components */
    606 /* Progress Inspection Panel */
    607 .progress-inspection-panel {
    608  height: 100%;
    609  overflow-y: auto;
    610  overflow-x: hidden;
    611 
    612  display: grid;
    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));
    615 }
    616 
    617 .progress-inspection-panel > .background {
    618  grid-column: 1 / -1;
    619  grid-row: 1 / -1;
    620 
    621  position: sticky;
    622  top: 0;
    623 
    624  /* Correspond to the bug 1462235 */
    625  height: calc(100% - 1px);
    626 
    627  pointer-events: none;
    628 
    629  display: grid;
    630  grid-template-columns: subgrid;
    631 }
    632 
    633 .progress-inspection-panel > .header {
    634  grid-column: 1 / -1;
    635  grid-row: 1 / 2;
    636 
    637  position: sticky;
    638  top: 0;
    639 
    640  padding: 0;
    641  z-index: 1;
    642 
    643  display: grid;
    644  grid-template-columns: subgrid;
    645 }
    646 
    647 .progress-inspection-panel > .indicator {
    648  grid-column: 1 / -1;
    649  grid-row: 1 / -1;
    650 
    651  position: sticky;
    652  top: 0;
    653 
    654  /* Correspond to the bug 1462235 */
    655  height: calc(100% - 1px);
    656 
    657  pointer-events: none;
    658  z-index: 2;
    659 
    660  display: grid;
    661  grid-template-columns: subgrid;
    662 }
    663 
    664 .progress-inspection-panel > ul {
    665  grid-column: 1 / -1;
    666  grid-row: 2 / -1;
    667 
    668  list-style-type: none;
    669  margin: 0;
    670  padding: 0;
    671 
    672  display: grid;
    673  grid-template-columns: subgrid;
    674  grid-auto-rows: min-content;
    675 }
    676 
    677 .progress-inspection-panel > ul > li {
    678  grid-column: 1 / -1;
    679  height: var(--graph-height);
    680  display: grid;
    681  grid-template-columns: subgrid;
    682 }
    683 
    684 /* Tick Lines */
    685 .tick-lines {
    686  grid-column: 2 / 3;
    687  position: relative;
    688 }
    689 
    690 .tick-line {
    691  position: absolute;
    692  height: 100%;
    693  border-inline-start: var(--tick-line-style);
    694 }
    695 
    696 /* Tick Labels */
    697 .tick-labels {
    698  grid-column: 2 / 3;
    699  height: 100%;
    700  position: relative;
    701 }
    702 
    703 .tick-label {
    704  border-inline-start: var(--tick-line-style);
    705  height: 100%;
    706  position: absolute;
    707  white-space: nowrap;
    708  overflow: hidden;
    709  text-overflow: ellipsis;
    710 }
    711 
    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));
    716 }
    717 
    718 .animated-property-list-container .tick-label:dir(rtl):last-child {
    719  transform: translateX(calc(100% - 0.6px));
    720 }
    721 
    722 /* Indication Bar */
    723 .indication-bar {
    724  position: absolute;
    725  height: 100%;
    726 }
    727 
    728 .indication-bar::before {
    729  border-inline-start: 5px solid transparent;
    730  border-inline-end: 5px solid transparent;
    731  border-top: 5px solid;
    732  content: "";
    733  height: calc(100% - 5px);
    734  position: absolute;
    735  transform: translateX(-6px);
    736  width: 1px;
    737 }
    738 
    739 .indication-bar::after {
    740  content: "";
    741  height: 100%;
    742  position: absolute;
    743  transform: translateX(-1px);
    744  width: 1px;
    745 }
    746 
    747 /* No Animation Panel */
    748 .animation-error-message > p {
    749  white-space: pre-wrap;
    750 }
    751 
    752 .animation-element-picker::before {
    753  background-image: url("resource://devtools-shared-images/command-pick.svg");
    754 }