xref: /aosp_15_r20/external/perfetto/ui/src/assets/record.scss (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1// Copyright (C) 2018 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//      http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15@import "widgets/theme";
16
17:root {
18  --record-text-color: #333;
19}
20
21// The whole record page.
22.record-page {
23  position: relative;
24  overflow-y: scroll;
25  background-color: #fefefe;
26  padding: 40px 20px;
27}
28
29// The always-visible centered box that has menu and sections on the right.
30.record-container {
31  position: relative;
32  max-width: 900px;
33  min-height: 500px;
34  margin: auto;
35  border-radius: $pf-border-radius;
36  box-shadow:
37    0 1px 2px 0 #aaa,
38    0 1px 3px 1px #eee;
39  background-color: #fff;
40  display: grid;
41  grid-template-rows: auto 1fr;
42  grid-template-areas:
43    "header"
44    "content";
45  overflow: hidden;
46  z-index: 6;
47
48  // The body of the record container.
49  .record-container-content {
50    display: grid;
51    grid-template-columns: 2fr 5fr;
52    grid-template-areas: "sidebar section";
53  }
54
55  .full-centered {
56    width: 100%;
57    height: 100%;
58    text-align: center;
59    padding: 180px 30px;
60    font-family: "Roboto", sans-serif;
61    font-size: 25px;
62  }
63}
64
65.record-modal {
66  display: flex;
67  flex-direction: column;
68
69  .line {
70    padding: 10px 10px 10px 10px;
71    border-bottom: 1px solid #808080;
72  }
73
74  .record-modal-section {
75    display: flex;
76    flex-direction: row;
77
78    .logo-wrapping {
79      width: 150px;
80      height: 150px;
81      display: inline-block;
82      margin: 50px 30px 0px 0px;
83      align-self: center;
84
85      i.material-icons {
86        color: #16161d;
87        font-size: 150px;
88      }
89    }
90
91    select {
92      min-width: 300px;
93      min-height: 80px;
94    }
95
96    .record-modal-description {
97      display: flex;
98      flex-direction: column;
99      align-items: left;
100
101      .record-modal-command {
102        display: flex;
103        flex-direction: row;
104        align-items: center;
105        padding: 10px 0px 10px 0px;
106        color: #fff;
107
108        .code-snippet {
109          width: 100%;
110        }
111      }
112
113      h3 {
114        padding-top: 15px;
115        align-self: start;
116        font-size: 1.2rem;
117        color: #0000ff;
118      }
119
120      h4 {
121        align-self: start;
122        font-size: 1.1rem;
123      }
124
125      text {
126        padding: 10px 0px 10px 0px;
127        color: #000000;
128      }
129
130      input[type="text"] {
131        flex-grow: 1;
132        border-radius: $pf-border-radius;
133        border: 1px solid #dcdcdc;
134        padding: 3px;
135        margin: 0 10px;
136        min-width: 170px;
137
138        &:focus {
139          outline: none;
140          box-shadow: 1px 1px 1px rgba(23, 32, 44, 0.3);
141        }
142      }
143    }
144  }
145
146  .record-modal-button,
147  .record-modal-button-high,
148  .record-modal-logo-button {
149    font-size: 0.875rem;
150    padding-left: 1rem;
151    padding-right: 1rem;
152    padding-top: 0.5rem;
153    padding-bottom: 0.5rem;
154    background-color: #0000ff;
155    color: #fff;
156    cursor: pointer;
157    -webkit-appearance: button;
158    text-transform: none;
159    overflow: visible;
160    line-height: 1.15;
161    margin: 5px;
162    will-change: transform;
163    -moz-osx-font-smoothing: grayscale;
164    -webkit-backface-visibility: hidden;
165    backface-visibility: hidden;
166    transform: translateZ(0);
167    transition: transform 0.25s ease-out;
168    align-self: end;
169    text-align: center;
170  }
171
172  .record-modal-button,
173  .record-modal-button-high {
174    border-radius: $pf-border-radius;
175    border-style: none;
176    border-width: 0;
177  }
178
179  .record-modal-button-high:disabled {
180    background-color: #808080;
181  }
182
183  .record-modal-button-high {
184    height: 100%;
185    align-self: center;
186    display: flex;
187    align-items: center;
188  }
189
190  .record-modal-logo-button {
191    border-radius: 50%;
192    width: 35px;
193    height: 35px;
194    display: flex;
195    align-items: center;
196    justify-content: center;
197  }
198}
199
200.hider {
201  @include transition(0.2s);
202  position: fixed;
203  left: 0;
204  top: 0;
205  bottom: 0;
206  right: 0;
207  background: #000;
208  opacity: 0.2;
209  z-index: 5;
210}
211
212.record-header {
213  grid-area: header;
214  padding: 10px;
215  display: flex;
216  flex-direction: column;
217  border-bottom: 1px solid #eee;
218
219  .top-part {
220    display: flex;
221    justify-content: space-between;
222    align-items: center;
223
224    // Connect/start/stop tracing buttons.
225    .button {
226      display: flex;
227      justify-content: flex-end;
228      align-items: center;
229      width: auto;
230      height: 50px;
231      margin: 0;
232      > * {
233        @include transition(0.2s);
234        cursor: pointer;
235        border-radius: 10px;
236        margin: 10px;
237        text-align: center;
238        background-color: #eee;
239        font-family: "Roboto", sans-serif;
240        font-size: 17px;
241        @media (max-width: 1280px) {
242          font-size: 1.6vw;
243        }
244        padding: 7px;
245
246        &:hover {
247          background-color: hsl(88, 50%, 84%);
248          box-shadow: 0 0 4px 0 #999;
249        }
250
251        &.selected {
252          background-color: hsl(88, 50%, 67%);
253          box-shadow: 0 0 4px 0 #999;
254        }
255
256        &.disabled {
257          background-color: hsl(0, 0%, 97%);
258        }
259      }
260    }
261
262    .target-and-status {
263      display: flex;
264      flex-direction: column;
265      justify-content: space-evenly;
266
267      .target {
268        display: flex;
269        flex-direction: row;
270        align-items: center;
271      }
272
273      label,
274      select,
275      button {
276        font-weight: 300;
277        margin: 3px;
278        color: #333;
279        font-size: 17px;
280        font-family: "Roboto", sans-serif;
281        align-items: center;
282
283        &.error-label {
284          max-width: 500px;
285          color: rgb(255, 0, 0);
286          font-size: 15px;
287        }
288      }
289      .chip {
290        @include transition();
291        display: flex;
292        align-items: center;
293        border: 1px solid #eee;
294        outline: none;
295        margin: 4px;
296        border-radius: 20px;
297        padding: 4px;
298        height: 30px;
299        &:hover,
300        &:active {
301          box-shadow: 0 0 4px 0 #ccc;
302          background-color: #fafafa;
303        }
304        i {
305          margin: 3px;
306          align-items: center;
307        }
308      }
309    }
310  }
311
312  .note {
313    border-radius: 3px;
314    margin-bottom: 5px;
315    background: #f9eeba;
316    padding: 10px;
317    font-family: "Roboto", sans-serif;
318    font-size: 14px;
319    line-height: 20px;
320  }
321
322  select {
323    @include transition();
324    margin-left: 10px;
325    border-radius: 0;
326    border: 1px solid #eee;
327    outline: none;
328    &:hover,
329    &:active {
330      box-shadow: 0 0 6px #ccc;
331    }
332  }
333}
334
335// The left-hand-side menu with 'Cpu', 'Memory' etc.
336.record-menu {
337  grid-area: sidebar;
338  .rec {
339    color: #ee3326;
340  }
341
342  background-color: #fcfcfc;
343  border-right: 1px solid #eee;
344  padding-bottom: 1em;
345
346  header {
347    font-family: "Roboto", sans-serif;
348    font-size: 14px;
349    font-weight: 700;
350    margin: 1em;
351  }
352
353  ul {
354    list-style-type: none;
355    margin: 0;
356    padding: 0;
357  }
358
359  a,
360  a:link,
361  a:visited {
362    text-decoration: none;
363  }
364
365  li {
366    @include transition();
367    height: 55px;
368    padding: 0 1em;
369    font-size: 15px;
370    letter-spacing: 0.5px;
371    font-family: "Roboto", sans-serif;
372    font-weight: 600;
373    color: #666;
374    display: grid;
375    grid-template-columns: 50px 1fr;
376    grid-template-rows: 40px 1fr;
377    grid-template-areas: "icon title" "icon subtext";
378    cursor: pointer;
379    overflow: hidden;
380
381    i {
382      margin: auto;
383      font-size: 32px;
384      width: 38px;
385      height: 38px;
386      padding: 3px;
387      grid-area: icon;
388    }
389
390    .title {
391      transition: line-height 0.25s ease;
392      grid-area: title;
393      line-height: 55px;
394      display: block;
395    }
396
397    .sub {
398      @include transition(0.5s);
399      grid-area: subtext;
400      font-size: 10px;
401      line-height: 12.5px;
402      margin-top: -5px;
403      opacity: 0;
404      text-overflow: ellipsis;
405      white-space: nowrap;
406    }
407
408    &:hover {
409      background-color: hsl(214, 0%, 90%);
410      .title {
411        line-height: 50px;
412      }
413      .sub {
414        opacity: 1;
415        transition-duration: 0.25s;
416        transition-delay: 0s;
417      }
418    }
419
420    &.active {
421      background-color: hsl(214, 80%, 70%);
422      .title,
423      .sub {
424        color: white;
425      }
426    }
427  } // li
428
429  &.disabled {
430    opacity: 0.5;
431    pointer-events: none;
432  }
433} // record-menu
434
435.record-section {
436  grid-area: section;
437  background: #fff;
438  transition: opacity 0.25s ease;
439  opacity: 0;
440  display: none;
441
442  &:not(.active) {
443    max-height: 0;
444  }
445
446  &.active {
447    display: block;
448    opacity: 1;
449  }
450
451  .config {
452    &:nth-of-type(2n) {
453      background-color: #e7e7e7;
454    }
455
456    height: auto;
457    width: 100%;
458    padding: 0;
459    display: flex;
460    align-items: center;
461  }
462
463  .parsing-errors {
464    padding: 1em;
465    border: 1px solid #dc143c;
466    color: #dc143c;
467  }
468
469  .title-config {
470    display: inline-block;
471    margin: var(--record-section-padding);
472    flex-grow: 1;
473    word-break: break-all;
474  }
475
476  .config-button {
477    border-radius: 100%;
478    margin-right: 10px;
479    text-align: center;
480    justify-items: center;
481    font-family: "Roboto", sans-serif;
482    padding: 7px;
483
484    &:hover:enabled {
485      box-shadow: 0 0 3px 0 #aaa;
486    }
487
488    &:not(:enabled) {
489      background-color: hsl(0, 0%, 83%);
490      color: hsl(0, 0%, 50%);
491    }
492
493    &.load:enabled {
494      background-color: hsl(88, 50%, 67%);
495    }
496
497    &.delete {
498      background-color: hsl(0, 50%, 67%);
499    }
500
501    &.save {
502      &.long {
503        width: 160px;
504      }
505
506      &:enabled {
507        background-color: hsl(197, 50%, 67%);
508      }
509    }
510
511    &.reset {
512      width: 300px;
513      background-color: hsl(0, 50%, 67%);
514    }
515  }
516
517  .reset-wrapper {
518    padding: 1em;
519  }
520
521  .input-config {
522    margin-top: 20px;
523    margin-bottom: 20px;
524    display: flex;
525    align-items: center;
526    padding: 0;
527
528    input {
529      border-radius: 20px;
530      border: 1px solid #eee;
531      line-height: 36px;
532      padding: 0 10px;
533      font-size: 18px;
534      font-family: "Roboto Condensed", sans-serif;
535      font-weight: 300;
536      color: #666;
537      flex-grow: 1;
538      margin-right: 10px;
539      margin-left: 10px;
540
541      background-color: transparent;
542      &:focus {
543        outline: none;
544      }
545      &::placeholder {
546        color: #b4b7ba;
547        font-family: "Roboto", sans-serif;
548        font-weight: 400;
549      }
550    }
551  }
552
553  // By default space all section elements by the same amount.
554  --record-section-padding: 20px;
555
556  > * {
557    padding-left: var(--record-section-padding);
558    padding-right: var(--record-section-padding);
559    &:first-child {
560      padding-top: 20px;
561    }
562    &:last-child {
563      padding-bottom: 20px;
564    }
565  }
566
567  > header {
568    text-align: center;
569    font-family: "Roboto", sans-serif;
570    font-size: 20px;
571    padding: 15px 10px;
572    color: #333;
573    letter-spacing: 0.5px;
574  }
575
576  .hide {
577    opacity: 0;
578    visibility: hidden;
579  }
580
581  .probe {
582    display: grid;
583    grid-template-rows: 40px 1fr;
584    grid-template-columns: 220px 1fr;
585    grid-template-areas: "label label" "img descr";
586    transition: color 0.2s ease;
587    padding-top: var(--record-section-padding);
588    padding-bottom: var(--record-section-padding);
589
590    &.compact {
591      padding-top: 10px;
592      padding-bottom: 10px;
593    }
594
595    &:nth-of-type(2n) {
596      background-color: #f9f9f9;
597    }
598
599    > img {
600      transition:
601        filter 0.2s ease,
602        opacity 0.2s ease;
603      grid-area: img;
604      width: 210px;
605      box-sizing: content-box;
606      cursor: pointer;
607      opacity: 0.5;
608      filter: saturate(0.15);
609    }
610
611    &:hover {
612      > img {
613        opacity: 1;
614      }
615      > label {
616        color: #333;
617        input[type="checkbox"]::after {
618          background: hsl(207, 60%, 60%);
619        }
620      }
621    } // :hover
622
623    > label {
624      grid-area: label;
625      cursor: pointer;
626      font-family: "Roboto", sans-serif;
627      font-size: 20px;
628      font-weight: 400;
629      color: #999;
630
631      // The per-probe on-off switch.
632      input[type="checkbox"] {
633        -moz-appearance: none;
634        -webkit-appearance: none;
635        cursor: pointer;
636        margin: 0 10px 0 3px;
637        position: relative;
638        display: inline-block;
639        height: 20px;
640        width: 44px;
641        background: #89898966;
642        border-radius: 100px;
643        transition: all 0.3s ease;
644        overflow: visible;
645        vertical-align: middle;
646
647        &:focus {
648          outline: none;
649        }
650
651        &::after {
652          position: absolute;
653          left: -2px;
654          top: -3px;
655          display: block;
656          width: 26px;
657          height: 26px;
658          border-radius: 100px;
659          background: #f5f5f5;
660          box-shadow: 0 3px 3px rgba(0, 0, 0, 0.15);
661          content: "";
662          transition: all 0.3s ease;
663        }
664        &:checked {
665          background: #8398b7;
666        }
667        &:focus::after {
668          background: hsl(207, 60%, 60%);
669        }
670        &:checked::after {
671          left: 20px;
672          background: #27303d;
673        }
674      } // checkbox
675    } // label
676
677    // The content of the probe section.
678    > div {
679      grid-area: descr;
680      font-size: 14px;
681      font-weight: 200;
682      min-height: 50px;
683      color: var(--record-text-color);
684      line-height: 20px;
685    }
686
687    // .probe-config is showed only when the probe is enabled.
688    .probe-config {
689      @include transition(0.3s);
690      opacity: 0;
691      visibility: hidden;
692      margin: 10px 10px 0 0;
693      max-height: 0;
694    }
695
696    .extended-desc {
697      grid-column: span 2;
698    }
699
700    &.enabled {
701      .probe-config {
702        opacity: 1;
703        visibility: visible;
704        max-height: 100vh;
705      }
706      > label span {
707        color: #4e80b7;
708      }
709      > img {
710        filter: saturate(1);
711        opacity: 1;
712      }
713    }
714  } // probe
715
716  .toggle {
717    transition: color 0.2s ease;
718    padding-top: var(--record-section-padding);
719
720    &:hover {
721      > img {
722        opacity: 1;
723      }
724      > label {
725        color: #333;
726        input[type="checkbox"]::after {
727          background: hsl(207, 60%, 60%);
728        }
729      }
730    } // :hover
731
732    > label {
733      cursor: pointer;
734      font-size: 14px;
735      color: var(--record-text-color);
736
737      // The per-probe on-off switch.
738      input[type="checkbox"] {
739        -moz-appearance: none;
740        -webkit-appearance: none;
741        cursor: pointer;
742        margin: 0 12px 0 2px;
743        position: relative;
744        display: inline-block;
745        height: 10px;
746        width: 22px;
747        background: #89898966;
748        border-radius: 100px;
749        transition: all 0.3s ease;
750        overflow: visible;
751        vertical-align: middle;
752
753        &:focus {
754          outline: none;
755        }
756
757        &::after {
758          position: absolute;
759          left: -5px;
760          top: -5px;
761          display: block;
762          width: 20px;
763          height: 20px;
764          border-radius: 100px;
765          background: #f5f5f5;
766          box-shadow: 0 3px 3px rgba(0, 0, 0, 0.15);
767          content: "";
768          transition: all 0.3s ease;
769        }
770        &:checked {
771          background: #8398b7;
772        }
773        &:focus::after {
774          background: hsl(207, 60%, 60%);
775        }
776        &:checked::after {
777          left: 12px;
778          background: #27303d;
779        }
780      } // checkbox
781    } // label
782
783    // The content of the toggle section.
784    > div.descr {
785      padding-left: 36px;
786      font-size: 12px;
787      color: #666;
788    }
789  } // toggle
790
791  // The three "Stop when full", "Ring buffer", "Long trace" buttons.
792  .record-mode {
793    display: grid;
794    grid-template-columns: 1fr 1fr 1fr;
795    grid-template-areas: ". . .";
796    grid-template-rows: 1fr;
797    padding-top: 0;
798
799    input[type="radio"] {
800      appearance: none;
801      -webkit-appearance: none;
802      display: none;
803    }
804
805    > * {
806      @include transition(0.2s);
807      cursor: pointer;
808      border-radius: 15px;
809      margin: 5px;
810      text-align: center;
811      background-color: #eee;
812      font-family: "Roboto", sans-serif;
813      font-size: 20px;
814      @media (max-width: 1280px) {
815        font-size: 1.6vw;
816      }
817      padding-bottom: 10px;
818
819      &:hover {
820        background-color: hsl(88, 50%, 84%);
821        box-shadow: 0 0 4px 0 #999;
822      }
823
824      &.selected {
825        background-color: hsl(88, 50%, 67%);
826        box-shadow: 0 0 4px 0 #999;
827      }
828
829      img {
830        width: 100%;
831      }
832    }
833  } // record-mode
834
835  // There are two types of sliders:
836  // 1) The full-width one (default), e.g. the one used in the main recording
837  //    page for the duration of the trace. This one has both an icon and a
838  //    label on the top.
839  // 2) The smaller ones (.thin) used in the probes. This one has no icon.
840  .slider {
841    @include transition(0.3s);
842    display: grid;
843    grid-template-columns: 40px 1fr 130px 0;
844    grid-template-rows: 30px min-content 1fr;
845    grid-template-areas:
846      "hdr hdr hdr hdr" "descr descr descr descr"
847      "icon slider label unit";
848    margin-top: var(--record-section-padding);
849
850    &.thin {
851      grid-template-columns: 1fr 1fr 100px 0;
852      grid-template-areas:
853        "hdr hdr hdr hdr" "descr descr descr descr"
854        "slider slider label unit";
855    }
856
857    &.greyed-out {
858      opacity: 0.5;
859    }
860
861    > * {
862      height: 40px;
863      line-height: 40px;
864    }
865
866    > header {
867      @include transition(0.3s);
868      opacity: 0.6;
869      color: #333;
870      grid-area: hdr;
871    }
872
873    &.thin > header {
874      opacity: 1;
875      color: var(--record-text-color);
876      font-size: 14px;
877    }
878
879    &.thin > header.descr {
880      grid-area: descr;
881      font-size: 12px;
882      color: #666;
883      height: 20px;
884      line-height: 20px;
885    }
886
887    &:hover > header {
888      opacity: 1;
889      transition-duration: 0.15s;
890    }
891
892    > i {
893      grid-area: icon;
894      font-size: 32px;
895      color: #333;
896    }
897
898    input[type="range"] {
899      grid-area: slider;
900      width: 100%;
901      appearance: none;
902      -webkit-appearance: none;
903      scroll-snap-type: x mandatory;
904      background-color: transparent;
905      outline: none;
906      margin-left: -10px;
907      margin-top: -5px;
908
909      &::-webkit-slider-runnable-track {
910        margin: 10px;
911        width: 100%;
912        height: 10px;
913        background-color: #ddd;
914        border-radius: 4px;
915      }
916
917      &::-webkit-slider-thumb {
918        @include transition();
919        appearance: none;
920        -webkit-appearance: none;
921        border: none;
922        border-radius: 3px;
923        height: 20px;
924        width: 40px;
925        background-color: rgb(33, 150, 243);
926        margin-top: -5px;
927        cursor: pointer;
928        content: "";
929      }
930
931      &:hover::-webkit-slider-thumb,
932      &:focus::-webkit-slider-thumb {
933        box-shadow: 0 0 4px rgb(16, 81, 134);
934        transform: scale(1, 1.1);
935      }
936    }
937
938    &.thin input[type="range"]::-webkit-slider-runnable-track {
939      height: 8px;
940    }
941
942    &.thin input[type="range"]::-webkit-slider-thumb {
943      width: 20px;
944      border-radius: 100%;
945    }
946
947    .spinner {
948      @include transition();
949      grid-area: label;
950      border: 1px solid #fafafa;
951      border-bottom: 2px solid #ddd;
952      padding: 0 5px;
953      border-radius: 2px;
954      background-color: rgba(255, 255, 255, 60%);
955      font-family: "Roboto", sans-serif;
956      font-size: 16px;
957      font-weight: 100;
958      height: 35px;
959      outline: none;
960
961      &::-webkit-inner-spin-button,
962      &::-webkit-outer-spin-button,
963      &::-webkit-clear-button {
964        -webkit-appearance: none;
965        margin: 0;
966      }
967
968      &:hover,
969      &:focus {
970        border-bottom-color: hsl(207, 90%, 54%);
971        background-color: hsl(207, 50%, 97%);
972      }
973
974      &:invalid {
975        border-bottom-color: hsl(9, 90%, 54%);
976        background-color: hsl(9, 50%, 97%);
977      }
978    }
979
980    &.thin .spinner {
981      font-size: 14px;
982      margin-top: -5px;
983    }
984
985    .unit {
986      grid-area: unit;
987      font-size: 12px;
988      color: var(--record-text-color);
989      position: relative;
990      line-height: 37px;
991      overflow: hidden;
992      width: 35px;
993      left: -45px;
994      text-align: right;
995      margin-top: -5px;
996    }
997  }
998
999  .chrome-categories {
1000    padding-top: 8px;
1001    padding-bottom: 8px;
1002    display: flex;
1003    flex-direction: row;
1004    gap: 8px;
1005  }
1006
1007  .dropdown {
1008    border: 1px solid #eee;
1009    outline: none;
1010    -webkit-appearance: none;
1011
1012    option,
1013    optgroup {
1014      @include transition();
1015      min-height: 25px;
1016      font-size: 12px;
1017      color: var(--record-text-color);
1018      cursor: pointer;
1019      padding: 5px 0;
1020    }
1021
1022    option {
1023      padding: 2.5px 5px;
1024      border-bottom: 1px solid #eee;
1025      &:hover {
1026        background-color: hsl(214, 80%, 90%);
1027      }
1028      &::before {
1029        display: none;
1030        content: "";
1031      }
1032    }
1033
1034    &.singlecolumn {
1035      margin: var(--record-section-padding) 0;
1036      padding: 0;
1037      max-width: 100%;
1038      width: 100%;
1039      overflow-y: auto;
1040      height: 400px;
1041      optgroup {
1042        display: grid;
1043        padding: 0;
1044        grid-template-columns: 1fr;
1045      }
1046      option {
1047        margin: 0;
1048      }
1049    }
1050
1051    &.multicolumn {
1052      padding: 0;
1053      max-width: 100%;
1054      width: 100%;
1055      overflow-y: auto;
1056      optgroup {
1057        display: grid;
1058        padding: 0;
1059        grid-template-columns: 1fr 1fr 1fr;
1060      }
1061      option {
1062        &:nth-of-type(3n + 1) {
1063          border-left: 1px solid #eee;
1064          border-right: 1px solid #eee;
1065        }
1066        margin: 0;
1067      }
1068
1069      &.two-columns {
1070        height: 400px;
1071        margin: var(--record-section-padding);
1072        optgroup {
1073          display: grid;
1074          padding: 0;
1075          grid-template-columns: 1fr 1fr;
1076        }
1077        option {
1078          &:nth-of-type(2n + 1) {
1079            border-left: 1px solid #eee;
1080            border-right: 1px solid #eee;
1081          }
1082          margin: 0;
1083        }
1084      }
1085    }
1086  }
1087
1088  .atrace-categories {
1089    height: 227px;
1090  }
1091
1092  .ftrace-events {
1093    height: 152px;
1094  }
1095
1096  textarea.extra-input {
1097    width: 100%;
1098    height: 60px;
1099    border: 1px solid #eee;
1100    resize: none;
1101    outline: none;
1102    font-family: var(--monospace-font);
1103
1104    &::placeholder {
1105      color: #aaa;
1106    }
1107  }
1108
1109  textarea.record-apps-list {
1110    margin-top: 16px;
1111    height: 100px;
1112  }
1113
1114  &.instructions {
1115    label,
1116    select {
1117      font-weight: 100;
1118      color: #333;
1119      font-size: 16px;
1120      font-family: "Roboto", sans-serif;
1121    }
1122
1123    .note {
1124      border: 1px dashed #ddd;
1125      background: #f9eeba;
1126      margin: var(--record-section-padding);
1127      padding: 10px;
1128      font-family: "Roboto", sans-serif;
1129      font-size: 14px;
1130      line-height: 20px;
1131    }
1132
1133    select {
1134      @include transition();
1135      margin-left: 10px;
1136      border-radius: 0;
1137      border: 1px solid #eee;
1138      outline: none;
1139
1140      &:hover,
1141      &:active {
1142        box-shadow: 0 0 6px #ccc;
1143      }
1144    }
1145    // Stop/cancel buttons
1146    .buttons {
1147      display: flex;
1148      justify-content: center;
1149      align-items: center;
1150      width: auto;
1151      height: 70px;
1152      > * {
1153        @include transition(0.2s);
1154        cursor: pointer;
1155        border-radius: 10px;
1156        text-align: center;
1157        margin: 3px;
1158        background-color: #eee;
1159        font-family: "Roboto", sans-serif;
1160        flex-grow: 1;
1161        font-size: 17px;
1162        @media (max-width: 1280px) {
1163          font-size: 1.6vw;
1164        }
1165        padding: 7px;
1166
1167        &:hover {
1168          background-color: hsl(88, 50%, 84%);
1169          box-shadow: 0 0 4px 0 #999;
1170        }
1171
1172        &.selected {
1173          background-color: hsl(88, 50%, 67%);
1174          box-shadow: 0 0 4px 0 #999;
1175        }
1176      }
1177    }
1178
1179    .permalinkconfig {
1180      margin: var(--record-section-padding);
1181      height: 40px;
1182      max-width: 200px;
1183      border-radius: 10px;
1184      text-align: center;
1185      justify-items: center;
1186      font-family: "Roboto", sans-serif;
1187      padding: 7px;
1188      background-color: hsl(88, 50%, 67%);
1189
1190      &:hover {
1191        box-shadow: 0 0 4px 0 #999;
1192      }
1193    }
1194
1195    progress {
1196      -webkit-appearance: none;
1197      appearance: none;
1198      width: 600px;
1199      height: 30px;
1200      margin: var(--record-section-padding);
1201      border-radius: 5px;
1202    }
1203    ::-webkit-progress-value {
1204      background-color: hsl(88, 50%, 67%);
1205    }
1206    ::-webkit-progress-bar {
1207      background-color: #eee;
1208    }
1209  }
1210} // record-section
1211
1212.inline-chip {
1213  @include transition();
1214  &:hover,
1215  &:active {
1216    box-shadow: 0 0 2px 0 #ccc;
1217    background-color: #fafafa;
1218  }
1219
1220  > i.material-icons {
1221    color: rgb(60, 60, 60);
1222    font-size: 14px;
1223  }
1224
1225  line-height: 25px;
1226  font-size: smaller;
1227  padding: 2px 4px;
1228  border: 1px solid #eee;
1229  margin: 2px;
1230  border-radius: 9px;
1231}
1232
1233a.inline-chip,
1234a.inline-chip:link,
1235a.inline-chip:visited {
1236  text-decoration: none;
1237  color: var(--record-text-color);
1238}
1239
1240.code-snippet {
1241  display: grid;
1242  position: relative;
1243  padding: 0;
1244  margin: var(--record-section-padding);
1245  background-color: #111;
1246  border-radius: 4px;
1247  box-shadow: 0 0 12px #999;
1248
1249  @keyframes ripple {
1250    0% {
1251      transform: scale(1);
1252    }
1253    30% {
1254      transform: scale(1.2);
1255    }
1256    60% {
1257      transform: scale(1);
1258    }
1259    80% {
1260      transform: scale(1.3);
1261    }
1262    100% {
1263      transform: scale(1.2);
1264    }
1265  }
1266
1267  &::before {
1268    height: 20px;
1269    content: "";
1270    display: block;
1271    background-color: #598eca;
1272  }
1273
1274  &.no-top-bar {
1275    white-space: pre;
1276    &::before {
1277      height: 0;
1278    }
1279  }
1280
1281  > code {
1282    display: block;
1283    margin: 10px 5px 20px 20px;
1284    color: #ccc;
1285    font-family: var(--monospace-font);
1286    font-size: 12px;
1287    line-height: 20px;
1288    overflow-y: auto;
1289    white-space: pre-wrap;
1290    word-wrap: break-word;
1291
1292    // 510px and not 500px, so the overflowing line gets truncated, giving
1293    // a clear indication that the code box scrolls.
1294    max-height: 510px;
1295  }
1296
1297  > button {
1298    @include transition();
1299    display: inline-block;
1300    position: absolute;
1301    top: 30px;
1302    right: 20px;
1303    color: white;
1304    border-radius: 100%;
1305    background-color: #333;
1306    box-shadow: 0 0 2px rgba(255, 255, 255, 200);
1307    padding: 5px;
1308    font-size: 16px;
1309    line-height: 13px; // Deliberately smaller to center the icon.
1310    user-select: none;
1311
1312    &:hover {
1313      background-color: #444;
1314      transform: scale(1.1);
1315    }
1316  }
1317
1318  &:active:hover > button:not(:hover) {
1319    animation: ripple linear 0.5s;
1320    background-color: #701d17;
1321    transform: scale(1.1);
1322  }
1323
1324  > button:active:hover {
1325    transform: scale(0.9);
1326  }
1327} // code-snippet
1328