UpdatedStreamOverlay.css 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. /* Scoped to the opt-in renderer. Existing OBS sources retain their styling. */
  2. .updated-overlay {
  3. --overlay-scale: 1;
  4. --overlay-space: clamp(12px, calc(2.5 * var(--overlay-vmin, 1vmin)), 32px);
  5. position: relative;
  6. isolation: isolate;
  7. display: flex;
  8. flex-direction: column;
  9. justify-content: space-between;
  10. min-height: var(--overlay-height, 100vh);
  11. color: #fff;
  12. background: rgb(16 23 27 / var(--overlay-background-alpha, 1));
  13. font-size: calc(clamp(14px, calc(2.2 * var(--overlay-vmin, 1vmin)), 28px) * var(--overlay-scale));
  14. line-height: 1.3;
  15. font-variant-numeric: tabular-nums;
  16. }
  17. .updated-overlay[data-size='small'] {
  18. --overlay-scale: 0.8;
  19. }
  20. .updated-overlay[data-size='large'] {
  21. --overlay-scale: 1.2;
  22. }
  23. .updated-overlay__header {
  24. display: flex;
  25. align-items: flex-start;
  26. justify-content: space-between;
  27. gap: var(--overlay-space);
  28. padding: var(--overlay-space);
  29. z-index: 1;
  30. }
  31. .updated-overlay__identity {
  32. display: flex;
  33. align-items: center;
  34. gap: 0.7em;
  35. min-width: 0;
  36. padding: 0.65em 0.9em;
  37. border-radius: 0.7em;
  38. background: rgb(12 19 23 / var(--overlay-identity-alpha, 0.9));
  39. }
  40. .updated-overlay__identity svg {
  41. flex-shrink: 0;
  42. width: 2em;
  43. height: 2em;
  44. }
  45. .updated-overlay__identity div {
  46. min-width: 0;
  47. overflow-wrap: anywhere;
  48. }
  49. .updated-overlay__identity strong {
  50. display: block;
  51. font-size: 1.35em;
  52. }
  53. .updated-overlay__identity span {
  54. display: block;
  55. color: #b8c0c7;
  56. }
  57. .updated-overlay__logo {
  58. flex-shrink: 0;
  59. margin-left: auto;
  60. }
  61. .updated-overlay__logo > a img {
  62. width: clamp(100px, calc(19 * var(--overlay-vmin, 1vmin)), 230px);
  63. height: auto;
  64. }
  65. .updated-overlay__camera {
  66. position: absolute;
  67. inset: 0;
  68. z-index: -1;
  69. overflow: hidden;
  70. }
  71. .updated-overlay__camera img {
  72. position: absolute;
  73. top: 50%;
  74. left: 50%;
  75. width: 100%;
  76. height: 100%;
  77. max-width: none;
  78. object-fit: cover;
  79. }
  80. .updated-overlay__panel {
  81. padding: var(--overlay-space);
  82. background: rgb(12 19 23 / var(--overlay-panel-alpha, 0.88));
  83. }
  84. .updated-overlay__summary {
  85. display: flex;
  86. align-items: center;
  87. justify-content: space-between;
  88. gap: 1em;
  89. margin-bottom: 0.8em;
  90. }
  91. .updated-overlay__summary h1 {
  92. font-size: 1.65em;
  93. font-weight: 700;
  94. line-height: 1.2;
  95. overflow-wrap: anywhere;
  96. min-width: 0;
  97. }
  98. .updated-overlay__status {
  99. display: flex;
  100. align-items: center;
  101. gap: 0.5em;
  102. font-size: 1.15em;
  103. font-weight: 600;
  104. color: #b8c0c7;
  105. }
  106. .updated-overlay__status > span {
  107. width: 0.75em;
  108. height: 0.75em;
  109. border-radius: 50%;
  110. background: currentColor;
  111. flex-shrink: 0;
  112. }
  113. .updated-overlay[data-state='RUNNING'] .updated-overlay__status,
  114. .updated-overlay[data-state='FINISH'] .updated-overlay__status {
  115. color: #00d76a;
  116. }
  117. .updated-overlay[data-state='PAUSE'] .updated-overlay__status {
  118. color: #fbbf24;
  119. }
  120. .updated-overlay[data-state='FAILED'] .updated-overlay__status {
  121. color: #f87171;
  122. }
  123. .updated-overlay__progress {
  124. display: flex;
  125. align-items: center;
  126. gap: 1em;
  127. }
  128. .updated-overlay__progress > span {
  129. color: #b8c0c7;
  130. font-size: 0.8em;
  131. text-transform: uppercase;
  132. }
  133. .updated-overlay__progress > strong {
  134. color: #00d76a;
  135. font-size: 1.4em;
  136. }
  137. .updated-overlay__progress > div {
  138. flex: 1;
  139. height: 0.65em;
  140. border-radius: 1em;
  141. overflow: hidden;
  142. background: #3c454c;
  143. }
  144. .updated-overlay__progress > div > div {
  145. height: 100%;
  146. border-radius: inherit;
  147. background: #00d76a;
  148. transition: width 0.5s;
  149. }
  150. .updated-overlay__readings {
  151. display: flex;
  152. flex-wrap: wrap;
  153. gap: 1em;
  154. margin-top: 0.8em;
  155. padding-top: 0.8em;
  156. border-top: 1px solid #ffffff35;
  157. }
  158. .updated-overlay__stats,
  159. .updated-overlay__temperatures {
  160. display: flex;
  161. flex: 1 1 auto;
  162. flex-wrap: wrap;
  163. gap: 1em;
  164. }
  165. .updated-overlay__reading {
  166. display: flex;
  167. align-items: center;
  168. gap: 0.6em;
  169. flex: 1 1 auto;
  170. min-width: 0;
  171. }
  172. .updated-overlay__reading svg {
  173. width: 1.8em;
  174. height: 1.8em;
  175. flex-shrink: 0;
  176. }
  177. .updated-overlay__reading > div > span {
  178. display: block;
  179. color: #b8c0c7;
  180. font-size: 0.7em;
  181. text-transform: uppercase;
  182. }
  183. .updated-overlay__reading strong {
  184. display: block;
  185. font-size: 1.3em;
  186. overflow-wrap: anywhere;
  187. }
  188. .updated-overlay__reading small {
  189. font-size: 0.65em;
  190. color: #b8c0c7;
  191. }
  192. .updated-overlay[data-layout='portrait'] {
  193. display: grid;
  194. font-size: calc(clamp(14px, calc(3 * var(--overlay-vmin, 1vmin)), 36px) * var(--overlay-scale));
  195. grid-template-columns: minmax(0, 1fr);
  196. grid-template-rows: auto 1fr auto;
  197. min-height: var(--overlay-height, 100vh);
  198. }
  199. .updated-overlay[data-layout='portrait'] .updated-overlay__header {
  200. grid-row: 1;
  201. align-items: center;
  202. background: rgb(16 23 27 / var(--overlay-background-alpha, 1));
  203. }
  204. .updated-overlay[data-layout='portrait'] .updated-overlay__identity {
  205. background: none;
  206. padding: 0;
  207. }
  208. .updated-overlay[data-layout='portrait'] .updated-overlay__camera {
  209. position: relative;
  210. grid-row: 2;
  211. min-height: calc(var(--overlay-height, 100vh) * 0.3);
  212. z-index: 0;
  213. }
  214. .updated-overlay[data-layout='portrait'] .updated-overlay__panel {
  215. grid-row: 3;
  216. background: rgb(16 23 27 / var(--overlay-background-alpha, 1));
  217. }
  218. .updated-overlay[data-layout='portrait'] .updated-overlay__summary {
  219. flex-direction: column-reverse;
  220. align-items: stretch;
  221. gap: 0.65em;
  222. }
  223. .updated-overlay[data-layout='portrait'] .updated-overlay__progress {
  224. flex-wrap: wrap;
  225. justify-content: space-between;
  226. gap: 0.3em;
  227. }
  228. .updated-overlay[data-layout='portrait'] .updated-overlay__progress > div {
  229. flex: 0 0 100%;
  230. order: 1;
  231. }
  232. .updated-overlay[data-layout='portrait'] .updated-overlay__readings {
  233. flex-direction: column;
  234. }
  235. .updated-overlay[data-layout='portrait'] .updated-overlay__temperatures:not(:first-child) {
  236. border-top: 1px solid #ffffff35;
  237. padding-top: 0.8em;
  238. }
  239. @media (prefers-reduced-motion: reduce) {
  240. .updated-overlay__progress > div > div {
  241. transition: none;
  242. }
  243. }