/* Specific styles for main app layout. May have overrides for other components with own stylesheets. */ /* variables */ :root { --header-height: 3.5em; --right-col-width: 24em; --video-container-height: calc((9 / 16) * 100vw); --header-bg-color: rgba(20, 0, 40, 1); --user-image-width: 10em; --novideo-container-height: 16em; --owncast-purple: rgba(120, 113, 255, 1); } .no-video, .single-col.no-video { --video-container-height: var(--novideo-container-height); } html { font-size: 14px; scrollbar-width: none; } #loading-logo { margin-top: 3%; margin-left: auto; margin-right: auto; height: 80vh; opacity: 0.2; } a:hover { text-decoration: underline; } .scrollbar-hidden::-webkit-scrollbar { width: 0px; background: transparent; } .scrollbar-hidden { scrollbar-width: none; /* moz only */ } #app-container.config-loading { visibility: hidden; } button[disabled] { opacity: 0.5; pointer-events: none; } /* accessibility things */ .visually-hidden { position: absolute !important; height: 1px; width: 1px; overflow: hidden; clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ clip: rect(1px, 1px, 1px, 1px); white-space: nowrap; /* added line */ } header { height: var(--header-height); background-color: var(--header-bg-color); display: block; } #logo-container { background-size: 1.35em; padding: 1.15rem; background-image: url(/img/logo.svg); } .chat-menu-options li button { display: flex; width: 100%; height: 100%; align-items: center; justify-content: space-between; border-radius: .25rem; padding: .5rem .3rem; color: #dbdbdb; animation: fadeIn 150ms; } .chat-view li button { animation: slideInRight 150ms; } .chat-menu-options li button:hover { background-color: var(--owncast-purple); } #chat-toggle { min-width: 3rem; } #user-info-change { background-color: transparent; } .external-action-button { max-width: 250px; } .external-action-button:hover { box-shadow: var(--owncast-purple) 0px 0px 5px; } .external-action-icon { margin: 0.25em 0.5em 0.25em 0; } .external-action-icon img { height: 1.5em; width: 1.5em; } .external-action-label { text-overflow: ellipsis; overflow: hidden; } #fediverse-follow-button-container .external-action-button { border: 2px solid var(--owncast-purple); } /* ************************************************ */ #video-container { height: var(--video-container-height); margin-top: var(--header-height); position: relative; width: 100%; min-height: 480px; max-height: calc(100vh - var(--header-height) - 3rem); background-size: 30%; } #video-container #video { transition: opacity 0.5s; opacity: 0; pointer-events: none; } .online #video-container #video { opacity: 1; pointer-events: auto; } #app-container .custom-thumbnail-image { transition: opacity 2s; } /* *********** overrides when chat is off ***************************** */ .chat-disabled #user-options-container { display: none; } .chat-disabled footer, .chat-hidden footer { justify-content: center; } /* hide chat by default */ #chat-container-wrap { display: none; } /* *********** overrides when chat is on ***************************** */ .chat { --content-width: calc(100vw - var(--right-col-width)); } .chat #chat-container-wrap { display: block; } .chat main, .chat footer, .chat #user-content { width: var(--content-width); } .user-content-header { width: 100%; } .chat #video-container { height: calc((9 / 16) * var(--content-width)); } .short-wide.chat #video-container { height: calc(100vh - var(--header-height) - 3rem); min-height: auto; } /* display `send` button on mobile */ .touch-screen #send-message-button { display: inline-block; } /* *********** single col layout ***************************** */ .single-col { --right-col-width: 0px; --video-container-height: calc((9 / 16) * 100vw); } .single-col main { position: fixed; width: 100%; z-index: 40; } .single-col #chat-container { width: 100%; } .single-col.chat #video-container, .single-col.chat-disabled #video-container, .single-col.chat-hidden #video-container, .single-col #video-container #video, .single-col.chat #video-container #video { width: 100vw; height: var(--video-container-height); min-height: 212px; } .single-col #user-content, .single-col #chat-container-wrap { margin-top: calc(var(--video-container-height) + var(--header-height) + 1rem); } .single-col #user-content .user-content { flex-wrap: wrap; justify-content: flex-start; } .single-col.chat #user-content { display: none; } .single-col #messages-container { flex-grow: 2; margin-top: calc(var(--video-container-height)); } .single-col #message-input-container { width: 100%; } .single-col #stream-info { height: 0; padding: 0; } .single-col #stream-info span { display: none; } .single-col #message-input-wrap { max-height: 3em; } .single-col .user-logo-icons { margin-right: 0; margin-bottom: 1em; flex-direction: row; align-items: flex-end; justify-content: center; } .single-col.use-fediverse-follow.user-logo-icons { align-items: center; } .single-col .social-list { text-align: left; } .single-col .social-actions { margin-left: 1em; } .single-col .follow-icon-list { justify-content: flex-start; } .single-col.use-fediverse-follow #fediverse-button-singlecol { display: inline-block; } .single-col #external-actions-container { justify-content: flex-start; } .single-col #notify-button-popup { left: 0px; } .single-col #notify-button-popup::before { left: 24px; right: auto; } @media screen and (max-height: 500px) { .single-col.touch-screen:not(.touch-keyboard-active) { --header-height: 0px; } .single-col.touch-screen:not(.touch-keyboard-active) header { display: none; } } /* ************************************************ */ .no-video #video-container { min-height: var(--video-container-height); } /* ************************************************ */ @media screen and (max-width: 860px) { :root { --right-col-width: 20em; } #video-container { min-height: 240px; } .instance-title { font-size: 1rem; } } /* ************************************************ */ @media screen and (max-width: 600px) { #user-info-display { max-width: none; } } #external-modal-iframe { height: 70vh; } /************************** Basic Modal Styles **************************/ /* External modal styling for use with Micromodal from https://gist.github.com/ghosh/4f94cf497d7090359a5c9f81caf60699 See external-action-modal.js */ .modal { z-index: 100; } .modal__overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.75); display: flex; justify-content: center; align-items: center; z-index: 10; } .modal__container { position: relative; background-color: transparent; padding: 0px; max-width: 780px; width: 60%; overflow: hidden; box-sizing: border-box; } @media screen and (max-width: 700px) { .modal__container { width: 100%; } } .modal__close { background: transparent; border: 0; cursor: pointer; margin: 0px; padding: 0px; outline: none; cursor: pointer !important; } .modal__close:before { content: '\2715'; font-size: 1.25rem; } @supports (display: flex) { .modal__header { display: flex; justify-content: space-between; align-items: center; height: initial; } .modal__title { position: static; } .modal__close { position: static; } } /************************** Modal Animation Style **************************/ .fadeIn { animation: mmfadeIn 150ms forwards; } .fadeOut { animation: mmfadeOut 150ms forwards; } .slideInTop { animation: mmslideIn 150ms forwards; } .slideOutBottom { animation: mmslideOut 150ms forwards; } .slideInLeft { animation: mmslideInLeft 150ms forwards; } .slideInRight { animation: mmslideInRight 150ms forwards; } @keyframes mmfadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes mmfadeOut { from { opacity: 1; } to { opacity: 0; } } @keyframes mmslideInRight { from { transform: translateX(15%); } to { transform: translateX(0); } } @keyframes mmslideInLeft { from { transform: translateX(-15%); } to { transform: translateX(0); } } @keyframes mmslideIn { from { transform: translateY(15%); } to { transform: translateY(0); } } @keyframes mmslideOut { from { transform: translateY(0); } to { transform: translateY(-10%); } } .micromodal-slide { display: none; } .micromodal-slide.is-open { display: block; } .micromodal-slide[aria-hidden='false'] .modal__overlay { animation: mmfadeIn 0.3s cubic-bezier(0, 0, 0.2, 1); } .micromodal-slide[aria-hidden='false'] .modal__container { animation: mmslideIn 0.3s cubic-bezier(0, 0, 0.2, 1); } .micromodal-slide[aria-hidden='true'] .modal__overlay { animation: mmfadeOut 0.3s cubic-bezier(0, 0, 0.2, 1); } .micromodal-slide[aria-hidden='true'] .modal__container { animation: mmslideOut 0.3s cubic-bezier(0, 0, 0.2, 1); } .micromodal-slide .modal__container, .micromodal-slide .modal__overlay { will-change: transform; } /* Miromodal mobile styling */ @media only screen and (min-device-width: 600px) and (max-device-width: 480px) { .modal__container { width: 90% !important; min-width: 90% !important; } @supports (display: flex) { .modal__container { width: 90% !important; min-width: 90% !important; height: 85vh; } } .modal__content { -webkit-overflow-scrolling: touch; } } /************************** Tab Bar Base Styles **************************/ .tab-bar [role='tab'] { padding: 0.5rem 1rem; border-radius: 0.25rem 0.25rem 0 0; font-weight: bold; } .tab-bar [role='tab']:hover { background-color: rgba(255, 255, 255, 0.35); } .tab-bar [role='tab'][aria-selected='true'] { color: var(--owncast-purple); background-color: white; } .tab-bar [role='tabpanel'] { padding: 1rem 0; border-top: 1px solid var(--header-bg-color); min-height: 15rem; } .follower { width: 20vw; max-width: 300px; } .following-list-follower { width: 280px; } #follow-loading-spinner-container { position: absolute; display: flex; flex-direction: column; justify-content: center; align-items: center; top: 0px; left: 0px; width: 100%; height: 100%; opacity: 0.7; } #follow-loading-spinner { width: 100px; height: 100px; } /* CHECKBOX TOGGLE SWITCH */ /* @apply rules for documentation, these do not work as inline style */ .toggle-checkbox:checked { /* @apply: right-0 #5A67D8; */ left: 63%; /* border-color:var(--owncast-purple); */ } #toggle:checked { background-color: var(--owncast-purple); } .toggle-checkbox:checked + .toggle-label { outline: 1px solid var(--owncast-purple); } #browser-push-preview-box { outline-offset: 10px; outline: 2px dashed #acafb4; box-shadow: 2px 6px 7px 0px #87898d; } #push-notification-arrow { position: relative; -webkit-animation: cubic-bezier(0.785, 0.135, 0.15, 0.86) infinite; -webkit-animation-name: left-right-bounce; -webkit-animation-duration: 1.5s; margin-right: 2px; } @-webkit-keyframes left-right-bounce { 0% { left: 0; } 50% { left: -6px; } 100% { left: 0; } } #notify-button-container #notify-button-popup { position: absolute; background-color: var(--owncast-purple); z-index: 50; right: 0px; min-width: 14rem; bottom: calc(100% + 0.5rem); opacity: 0; transform: translateY(0%); animation: mmfadeIn 300ms forwards; animation-delay: 1s; } #notify-button-container .external-action-icon { margin: 0.25em 0.5em 0.25em 0.5em; } #notify-button-container button { border-color: #b8bbc2; border-width: 1px; } #notify-button-popup::before { position: absolute; z-index: -1; content: ''; right: 1.5rem; top: 100%; border-style: solid; border-width: 0.5rem 0.5rem 0rem; border-color: var(--owncast-purple) transparent transparent; transition-duration: 0.3s; transition-property: transform; } #notify-button-popup .popout-close-button { border-style: none; }