]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/app/+videos/+video-watch/video-watch.component.scss
Use source sans 3 font
[github/Chocobozzz/PeerTube.git] / client / src / app / +videos / +video-watch / video-watch.component.scss
CommitLineData
63c4db6d
C
1@import '_variables';
2@import '_mixins';
19f22055 3@import '_bootstrap-variables';
e2f01c47 4@import '_miniature';
19f22055 5
9a18a625 6$player-factor: 1.7; // 16/9
dd4f25ee 7$video-info-margin-left: 44px;
63c4db6d 8
9a18a625
C
9@function getPlayerHeight($width){
10 @return calc(#{$width} / #{$player-factor})
11}
12
13@function getPlayerWidth($height){
14 @return calc(#{$height} * #{$player-factor})
15}
16
17@mixin playlist-below-player {
72675ebe
C
18 width: 100% !important;
19 height: auto !important;
20 max-height: 300px !important;
67c68723 21 max-width: initial;
72675ebe 22 border-bottom: 1px solid $separator-border-color !important;
9a18a625
C
23}
24
25.root {
9a18a625
C
26 &.theater-enabled #video-wrapper {
27 flex-direction: column;
28 justify-content: center;
29
f8c00564
C
30 $height: calc(100vh - #{$header-height} - #{$theater-bottom-space});
31
9a18a625
C
32 #videojs-wrapper {
33 width: 100%;
f8c00564 34 height: $height;
9a18a625
C
35 }
36
03652b31 37 ::ng-deep .video-js {
9a18a625
C
38 height: $height;
39 width: 100%;
466e3f20 40 max-width: initial;
9a18a625
C
41 }
42
03652b31 43 my-video-watch-playlist ::ng-deep .playlist {
9a18a625
C
44 @include playlist-below-player;
45 }
46 }
191764f3
C
47}
48
5baee5fc 49.blocked-label {
191764f3
C
50 font-weight: $font-semibold;
51}
52
e2f01c47 53#video-wrapper {
a5cf76af
C
54 $video-height: 66vh;
55
be6a4802
C
56 background-color: #000;
57 display: flex;
58 justify-content: center;
6d88de72 59
3143ae17
C
60 #videojs-wrapper {
61 display: flex;
62 justify-content: center;
63 flex-grow: 1;
a5cf76af 64 height: $video-height;
3143ae17
C
65 }
66
6d88de72
C
67 .remote-server-down {
68 color: #fff;
69 display: flex;
70 flex-direction: column;
71 align-items: center;
72 text-align: center;
73 justify-content: center;
74 background-color: #141313;
75 width: 100%;
6d88de72 76 font-size: 24px;
3b492bff 77 height: 500px;
6d88de72
C
78
79 @media screen and (max-width: 1000px) {
80 font-size: 20px;
81 }
7b272fd7 82
acbffe9c 83 @media screen and (max-width: 600px) {
6d88de72 84 font-size: 16px;
b9828abe 85 }
6d88de72
C
86 }
87
03652b31 88 ::ng-deep .video-js {
58f3c3f1
C
89 width: 100%;
90 max-width: getPlayerWidth(66vh);
a5cf76af 91 height: $video-height;
3b492bff 92
7b272fd7
C
93 // VideoJS create an inner video player
94 video {
95 outline: 0;
b9828abe 96 position: relative !important;
7b272fd7 97 }
be6a4802 98 }
054a103b 99
3b492bff 100 @media screen and (max-width: 600px) {
dc13623b
C
101 #videojs-wrapper {
102 height: getPlayerHeight(100vw) !important;
103 }
104
3b492bff 105 .remote-server-down,
03652b31 106 ::ng-deep .video-js {
3b492bff 107 width: 100vw;
dc13623b 108 height: getPlayerHeight(100vw) !important;
3b492bff 109 }
054a103b 110 }
e56b20f5
C
111}
112
bbe0f064 113.alert {
2186386c 114 text-align: center;
2b3f1919 115 border-radius: 0;
2186386c
C
116}
117
7fc441cc
RK
118.flex-direction-column {
119 flex-direction: column;
120}
121
9c89a45c
C
122#video-not-found {
123 height: 300px;
124 line-height: 300px;
125 margin-top: 50px;
126 text-align: center;
fb4fd623
C
127 font-weight: $font-semibold;
128 font-size: 15px;
9c89a45c
C
129}
130
b1fa3eba 131.video-bottom {
9a18a625 132 display: flex;
46788f21 133 margin-top: 1.5rem;
d1992b93 134
b1fa3eba
C
135 .video-info {
136 flex-grow: 1;
20acba1c
C
137 // Set min width for flex item
138 min-width: 1px;
e452d2e2 139 max-width: 100%;
3eeeb87f 140
1f788f20 141 .video-info-first-row {
b1fa3eba 142 display: flex;
1f788f20 143
196b7790 144 & > div:first-child {
1f788f20
C
145 flex-grow: 1;
146 }
d1992b93 147
b1fa3eba 148 .video-info-name {
b2731bff 149 margin-right: 30px;
196b7790 150 min-height: 40px; // Align with the action buttons
b1fa3eba
C
151 font-size: 27px;
152 font-weight: $font-semibold;
153 flex-grow: 1;
154 }
09223546 155
7fc441cc 156 .video-info-first-row-bottom {
5def76eb
RK
157 display: flex;
158 flex-wrap: wrap;
7fc441cc
RK
159 align-items: center;
160 width: 100%;
161 }
162
1f788f20 163 .video-info-date-views {
a0dedc02 164 align-self: start;
8ff3f883
C
165 margin-bottom: 10px;
166 margin-right: 10px;
a0dedc02 167 font-size: 1em;
1f788f20
C
168 }
169
170 .video-info-channel {
171 font-weight: $font-semibold;
172 font-size: 15px;
95166f9a
C
173
174 a {
175 @include disable-default-a-behaviour;
176
e66883b3 177 color: pvar(--mainForegroundColor);
95166f9a
C
178
179 &:hover {
180 opacity: 0.8;
181 }
52d9f792
C
182
183 img {
184 @include avatar(18px);
185
94dfca3e 186 margin: -2px 5px 0 0;
52d9f792 187 }
95166f9a 188 }
22a16e36 189
dd4f25ee
RK
190 .video-info-channel-left {
191 flex-grow: 1;
1f788f20 192
dd4f25ee
RK
193 .video-info-channel-left-links {
194 display: flex;
195 flex-direction: column;
196 position: relative;
9d45db29 197 line-height: 1.37;
b7f5b524 198
dd4f25ee 199 a:nth-of-type(2) {
26171379 200 font-weight: $font-regular;
dd4f25ee
RK
201 font-size: 90%;
202 }
b40a2193
K
203
204 a.single-link {
205 margin-top: 7px;
206 }
b7f5b524
C
207 }
208 }
6e33bf28 209
dd4f25ee
RK
210 my-subscribe-button {
211 margin-left: 5px;
6e33bf28 212 }
1f788f20 213 }
b2731bff 214
c199c427 215 my-feed {
244e76a5
RK
216 margin-left: 5px;
217 margin-top: 1px;
218 }
219
1f788f20 220 .video-actions-rates {
7fc441cc 221 margin: 0 0 10px 0;
2303a803 222 align-items: start;
7fc441cc 223 width: max-content;
5def76eb 224 margin-left: auto;
09223546 225
1f788f20
C
226 .video-actions {
227 height: 40px; // Align with the title
1f788f20
C
228 display: flex;
229 align-items: center;
09223546 230
3a0fb65c
C
231 .action-button:not(:first-child),
232 .action-dropdown,
233 my-video-actions-dropdown {
0240da5c 234 margin-left: 5px;
1f788f20 235 }
0727cab0 236
0240da5c 237 ::ng-deep.action-button {
1f788f20 238 @include peertube-button;
457bb213 239 @include button-with-icon(21px, 0, -1px);
e66883b3 240 @include apply-svg-color(pvar(--actionButtonColor));
7b272fd7 241
0240da5c 242 font-size: 100%;
1f788f20
C
243 font-weight: $font-semibold;
244 display: inline-block;
245 padding: 0 10px 0 10px;
07fa4c97 246 white-space: nowrap;
0240da5c 247 background-color: transparent !important;
e66883b3 248 color: pvar(--actionButtonColor);
0240da5c 249 text-transform: uppercase;
7b272fd7 250
63347a0f
C
251 &::after {
252 display: none;
253 }
254
0240da5c
RK
255 &:hover {
256 opacity: 0.9;
257 }
258
259 &.action-button-like,
260 &.action-button-dislike {
261 filter: brightness(120%);
262
0d3a9be9 263 .count {
c41c0e28 264 margin: 0 5px;
0d3a9be9
C
265 }
266 }
267
1f788f20 268 &.action-button-like.activated {
0d3a9be9 269 .count {
e66883b3 270 color: pvar(--activatedActionButtonColor);
0d3a9be9
C
271 }
272
457bb213 273 my-global-icon {
e66883b3 274 @include apply-svg-color(pvar(--activatedActionButtonColor));
1f788f20 275 }
7b272fd7 276 }
6e33bf28 277
1f788f20 278 &.action-button-dislike.activated {
0d3a9be9 279 .count {
e66883b3 280 color: pvar(--activatedActionButtonColor);
0d3a9be9
C
281 }
282
457bb213 283 my-global-icon {
e66883b3 284 @include apply-svg-color(pvar(--activatedActionButtonColor));
1f788f20 285 }
7b272fd7 286 }
457bb213 287
2fcc2294 288 &.action-button-support {
e66883b3 289 color: pvar(--supportButtonColor);
2fcc2294 290
0240da5c 291 my-global-icon {
e66883b3 292 @include apply-svg-color(pvar(--supportButtonColor));
2fcc2294 293 }
0240da5c 294 }
2fcc2294 295
0240da5c 296 &.action-button-support {
2fcc2294 297 my-global-icon {
0240da5c 298 ::ng-deep path:first-child {
e66883b3 299 fill: pvar(--supportButtonHeartColor) !important;
0240da5c 300 }
2fcc2294
C
301 }
302 }
303
f0a39880
C
304 &.action-button-save {
305 my-global-icon {
306 top: 0 !important;
307 right: -1px;
308 }
309 }
310
457bb213
C
311 .icon-text {
312 margin-left: 3px;
313 }
b1fa3eba 314 }
4e1b0973 315 }
6a9e1d42 316
223b24e6 317 .video-info-likes-dislikes-bar-outer-container {
2de7f588
RK
318 position: relative;
319 }
320
223b24e6 321 .video-info-likes-dislikes-bar-inner-container {
2de7f588 322 position: absolute;
223b24e6 323 height: 20px;
2de7f588
RK
324 }
325
1f788f20 326 .video-info-likes-dislikes-bar {
2d9fea16
RK
327 $likes-bar-height: 2px;
328 height: $likes-bar-height;
329 margin-top: -$likes-bar-height;
0240da5c
RK
330 width: 120px;
331 background-color: #ccc;
2d9fea16
RK
332 position: relative;
333 top: 10px;
6a9e1d42 334
1f788f20
C
335 .likes-bar {
336 height: 100%;
0240da5c
RK
337 background-color: #909090;
338
339 &.liked {
e66883b3 340 background-color: pvar(--activatedActionButtonColor);
0240da5c 341 }
1f788f20 342 }
6a9e1d42
C
343 }
344 }
d1992b93
C
345 }
346
b1fa3eba
C
347 .video-info-description {
348 margin: 20px 0;
dd4f25ee 349 margin-left: $video-info-margin-left;
b1fa3eba 350 font-size: 15px;
d1992b93 351
54a932e8 352 .video-info-description-html {
7a14004b 353 @include peertube-word-wrap;
b29bf61d 354
c4f7fe09 355 ::ng-deep a {
b29bf61d
RK
356 text-decoration: none;
357 }
54a932e8
C
358 }
359
9e9afa45
C
360 .glyphicon, .description-loading {
361 margin-left: 3px;
362 }
363
80958c78
C
364 .description-loading {
365 display: inline-block;
366 }
367
b1fa3eba 368 .video-info-description-more {
2de96f4d 369 cursor: pointer;
b1fa3eba 370 font-weight: $font-semibold;
e66883b3 371 color: pvar(--greyForegroundColor);
b1fa3eba 372 font-size: 14px;
2de96f4d
C
373
374 .glyphicon {
375 position: relative;
376 top: 2px;
377 }
378 }
09223546
C
379 }
380
dd4f25ee
RK
381 .video-attributes {
382 margin-left: $video-info-margin-left;
383 }
384
1f788f20
C
385 .video-attributes .video-attribute {
386 font-size: 13px;
387 display: block;
388 margin-bottom: 12px;
389
390 .video-attribute-label {
adb115f5 391 min-width: 142px;
c6c357ac 392 padding-right: 5px;
1f788f20 393 display: inline-block;
e66883b3 394 color: pvar(--greyForegroundColor);
1f788f20 395 font-weight: $font-bold;
3eeeb87f 396 }
4278710d
C
397
398 a.video-attribute-value {
399 @include disable-default-a-behaviour;
e66883b3 400 color: pvar(--mainForegroundColor);
4278710d
C
401
402 &:hover {
403 opacity: 0.9;
404 }
405 }
406
407 &.video-attribute-tags {
408 .video-attribute-value:not(:nth-child(2)) {
409 &::before {
410 content: ', '
411 }
412 }
413 }
3eeeb87f 414 }
41c3dfac
C
415 }
416
03652b31 417 ::ng-deep .other-videos {
1c66c35c 418 padding-left: 15px;
10475dea 419 min-width: $video-miniature-width;
f7ecffa4 420
5def76eb
RK
421 @media screen and (min-width: 1800px - (3* $video-miniature-width)) {
422 width: min-content;
423 }
424
41c3dfac 425 .title-page {
dd4f25ee 426 margin: 0 !important;
41c3dfac
C
427 }
428
8ff3f883 429 .video-miniature {
41c3dfac 430 display: flex;
94dfca3e 431 width: max-content;
41c3dfac 432 height: 100%;
46788f21 433 padding-bottom: 20px;
9e01e510 434 flex-wrap: wrap;
c8277d71 435 }
a01f107b 436
c8277d71
RK
437 .video-bottom {
438 @media screen and (max-width: 1800px - (3* $video-miniature-width)) {
439 margin-left: 1rem;
41c3dfac 440 }
5dfb7c1d
RK
441 @media screen and (max-width: 500px) {
442 margin-left: 0;
443 margin-top: .5rem;
444 }
41c3dfac 445 }
a01f107b 446 }
d1992b93 447}
41c3dfac 448
1d6587aa
C
449my-video-comments {
450 display: inline-block;
66467298 451 width: 100%;
1d6587aa
C
452 margin-bottom: 20px;
453}
454
2b3b76ab
C
455// If the view is not expanded, take into account the menu
456.privacy-concerns {
d3217560 457 z-index: z(dropdown) + 1;
2b3b76ab
C
458 width: calc(100% - #{$menu-width});
459}
460
8ff3f883
C
461@media screen and (max-width: $small-view) {
462 .privacy-concerns {
28e0e40d 463 margin-left: $menu-width - 15px; // Menu is absolute
8ff3f883
C
464 }
465}
466
2b3b76ab
C
467:host-context(.expanded) {
468 .privacy-concerns {
469 width: 100%;
28e0e40d 470 margin-left: -15px;
2b3b76ab
C
471 }
472}
473
474.privacy-concerns {
475 position: fixed;
476 bottom: 0;
555fdc8c 477 z-index: z(privacymsg);
2b3b76ab
C
478
479 padding: 5px 15px;
480
481 display: flex;
28e0e40d 482 flex-wrap: nowrap;
2b3b76ab 483 align-items: center;
a7d3671d 484 justify-content: space-between;
2b3b76ab
C
485 background-color: rgba(0, 0, 0, 0.9);
486 color: #fff;
487
488 .privacy-concerns-text {
489 margin: 0 5px;
490 }
491
492 a {
493 @include disable-default-a-behaviour;
494
e66883b3 495 color: pvar(--mainColor);
2b3b76ab
C
496 transition: color 0.3s;
497
498 &:hover {
499 color: #fff;
500 }
501 }
502
d3217560 503 .privacy-concerns-button {
2b3b76ab
C
504 padding: 5px 8px 5px 7px;
505 margin-left: auto;
506 border-radius: 3px;
d3217560 507 white-space: nowrap;
2b3b76ab
C
508 cursor: pointer;
509 transition: background-color 0.3s;
510 font-weight: $font-semibold;
511
512 &:hover {
513 background-color: #000;
514 }
515 }
d3217560
RK
516
517 .privacy-concerns-okay {
e66883b3 518 background-color: pvar(--mainColor);
d3217560
RK
519 margin-left: 10px;
520 }
2b3b76ab
C
521}
522
07fa4c97 523@media screen and (max-width: 1600px) {
8ff3f883
C
524 .video-bottom .video-info .video-attributes .video-attribute {
525 margin-bottom: 5px;
b9828abe
C
526 }
527}
b2731bff 528
23f4c3d4 529@media screen and (max-width: 1300px) {
2b3b76ab
C
530 .privacy-concerns {
531 font-size: 12px;
532 padding: 2px 5px;
533
534 .privacy-concerns-text {
535 margin: 0;
536 }
537 }
07fa4c97
C
538}
539
9a18a625 540@media screen and (max-width: 1100px) {
3143ae17
C
541 #video-wrapper {
542 flex-direction: column;
543 justify-content: center;
544
03652b31 545 my-video-watch-playlist ::ng-deep .playlist {
3143ae17
C
546 @include playlist-below-player;
547 }
548 }
549
9a18a625
C
550 .video-bottom {
551 flex-direction: column;
552
03652b31 553 ::ng-deep .other-videos {
9a18a625
C
554 padding-left: 0 !important;
555
03652b31 556 ::ng-deep .video-miniature {
9a18a625
C
557 flex-direction: row;
558 width: auto;
559 }
560 }
561 }
562}
563
1f788f20 564@media screen and (max-width: 600px) {
b2731bff 565 .video-bottom {
c2a89b70 566 margin-top: 20px !important;
46788f21 567 padding-bottom: 20px !important;
1f788f20
C
568
569 .video-info {
93ea9c47 570 padding: 0;
1f788f20
C
571
572 .video-info-first-row {
573
574 .video-info-name {
575 font-size: 20px;
576 height: auto;
577 }
578 }
579 }
b2731bff 580 }
2b3b76ab 581
03652b31 582 ::ng-deep .other-videos .video-miniature {
9a18a625 583 flex-direction: column;
a8981e0b
C
584 }
585
2b3b76ab
C
586 .privacy-concerns {
587 width: 100%;
2b3b76ab 588 }
b2731bff 589}
07fa4c97
C
590
591@media screen and (max-width: 450px) {
93ea9c47
C
592 .video-bottom {
593 .action-button .icon-text {
594 display: none !important;
595 }
596
597 .video-info .video-info-first-row {
598 .video-info-name {
599 font-size: 18px;
600 }
601
602 .video-info-date-views {
603 font-size: 14px;
604 }
605
606 .video-actions-rates {
607 margin-top: 10px;
608 }
609 }
610
611 .video-info-description {
612 font-size: 14px !important;
613 }
07fa4c97
C
614 }
615}
d45f3641
C
616
617
618// Special case for iOS, that takes into account the width for fullscreens
619#video-wrapper ::ng-deep .video-js.vjs-fullscreen {
620 max-width: unset;
621}