An entry for the streamplace vod showcase
at main 375 lines 6.2 kB view raw
1/* Video List */ 2.video-list { 3 max-width: 1200px; 4 margin: 0 auto; 5 padding: 2rem; 6} 7 8.video-list h1 { 9 margin-bottom: 2rem; 10 font-size: 2rem; 11 font-weight: 600; 12} 13 14.video-grid { 15 display: grid; 16 grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); 17 gap: 1.5rem; 18} 19 20.video-card { 21 background: var(--card-bg, #1a1a1a); 22 border-radius: 12px; 23 overflow: hidden; 24 cursor: pointer; 25 transition: transform 0.2s, box-shadow 0.2s; 26} 27 28.video-card:hover { 29 transform: translateY(-4px); 30 box-shadow: 0 12px 40px rgba(0, 0, 0, 0.3); 31} 32 33.video-thumbnail { 34 aspect-ratio: 16 / 9; 35 background: linear-gradient(135deg, #2a2a2a 0%, #1a1a1a 100%); 36 display: flex; 37 align-items: flex-end; 38 justify-content: flex-end; 39 padding: 0.5rem; 40} 41 42.video-thumbnail .duration { 43 background: rgba(0, 0, 0, 0.8); 44 padding: 0.25rem 0.5rem; 45 border-radius: 4px; 46 font-size: 0.875rem; 47 font-weight: 500; 48} 49 50.video-info { 51 padding: 1rem; 52} 53 54.video-info h3 { 55 font-size: 1rem; 56 font-weight: 500; 57 margin: 0 0 0.5rem; 58 line-height: 1.4; 59 display: -webkit-box; 60 -webkit-line-clamp: 2; 61 -webkit-box-orient: vertical; 62 overflow: hidden; 63} 64 65.video-info .video-date { 66 font-size: 0.875rem; 67 color: var(--text-muted, #888); 68 margin: 0; 69} 70 71.loading { 72 text-align: center; 73 padding: 2rem; 74 color: var(--text-muted, #888); 75} 76 77.load-more { 78 display: block; 79 width: 100%; 80 max-width: 300px; 81 margin: 2rem auto 0; 82 padding: 0.75rem 1.5rem; 83 background: var(--accent, #646cff); 84 color: white; 85 border: none; 86 border-radius: 8px; 87 font-size: 1rem; 88 cursor: pointer; 89 transition: background 0.2s; 90} 91 92.load-more:hover { 93 background: var(--accent-hover, #535bf2); 94} 95 96/* Watch Page - YouTube Style Layout */ 97.watch-page { 98 display: grid; 99 grid-template-columns: 1fr 380px; 100 gap: 1.5rem; 101 max-width: 1800px; 102 margin: 0 auto; 103 padding: 1rem 2rem; 104} 105 106.watch-main { 107 min-width: 0; 108} 109 110.back-button { 111 display: inline-flex; 112 align-items: center; 113 gap: 0.5rem; 114 padding: 0.5rem 1rem; 115 margin-bottom: 1rem; 116 background: transparent; 117 border: 1px solid var(--border, #333); 118 border-radius: 6px; 119 color: inherit; 120 cursor: pointer; 121 transition: background 0.2s; 122} 123 124.back-button:hover { 125 background: var(--card-bg, #1a1a1a); 126} 127 128.video-container { 129 position: relative; 130 width: 100%; 131 aspect-ratio: 16 / 9; 132 background: #000; 133 border-radius: 12px; 134 overflow: hidden; 135} 136 137.video-element { 138 position: absolute; 139 top: 0; 140 left: 0; 141 width: 100%; 142 height: 100%; 143 object-fit: contain; 144} 145 146.error-overlay { 147 position: absolute; 148 top: 1rem; 149 left: 1rem; 150 right: 1rem; 151 background: rgba(255, 68, 68, 0.9); 152 color: white; 153 padding: 0.75rem 1rem; 154 border-radius: 8px; 155 z-index: 10; 156} 157 158.video-details { 159 padding: 1rem 0; 160} 161 162.video-title { 163 font-size: 1.25rem; 164 font-weight: 600; 165 margin: 0 0 0.75rem; 166 line-height: 1.4; 167} 168 169.video-meta { 170 display: flex; 171 align-items: center; 172 gap: 1rem; 173 margin-bottom: 1rem; 174 color: var(--text-muted, #888); 175 font-size: 0.875rem; 176} 177 178.quality-select { 179 padding: 0.375rem 0.75rem; 180 background: var(--card-bg, #1a1a1a); 181 border: 1px solid var(--border, #333); 182 border-radius: 6px; 183 color: inherit; 184 font-size: 0.875rem; 185 cursor: pointer; 186} 187 188.creator-info { 189 display: flex; 190 align-items: center; 191 gap: 1rem; 192 padding: 1rem; 193 background: var(--card-bg, #1a1a1a); 194 border-radius: 12px; 195} 196 197.creator-avatar, 198.creator-avatar-img { 199 width: 48px; 200 height: 48px; 201 border-radius: 50%; 202 flex-shrink: 0; 203} 204 205.creator-avatar { 206 background: linear-gradient(135deg, #646cff, #535bf2); 207 display: flex; 208 align-items: center; 209 justify-content: center; 210 font-size: 1.25rem; 211 font-weight: 600; 212 color: white; 213} 214 215.creator-avatar-img { 216 object-fit: cover; 217} 218 219.creator-details { 220 display: flex; 221 flex-direction: column; 222 gap: 0.25rem; 223} 224 225.creator-link { 226 color: inherit; 227 text-decoration: none; 228 font-weight: 500; 229} 230 231.creator-link:hover { 232 color: var(--accent, #646cff); 233} 234 235.creator-handle { 236 font-size: 0.875rem; 237 color: var(--text-muted, #888); 238} 239 240/* Sidebar */ 241.watch-sidebar { 242 min-width: 0; 243} 244 245.sidebar-title { 246 font-size: 1rem; 247 font-weight: 600; 248 margin: 0 0 1rem; 249} 250 251.related-videos { 252 display: flex; 253 flex-direction: column; 254 gap: 0.75rem; 255} 256 257.related-video-card { 258 display: grid; 259 grid-template-columns: 168px 1fr; 260 gap: 0.75rem; 261 cursor: pointer; 262 border-radius: 8px; 263 transition: background 0.2s; 264} 265 266.related-video-card:hover { 267 background: var(--card-bg, #1a1a1a); 268} 269 270.related-thumbnail { 271 aspect-ratio: 16 / 9; 272 background: linear-gradient(135deg, #2a2a2a 0%, #1a1a1a 100%); 273 border-radius: 8px; 274 display: flex; 275 align-items: flex-end; 276 justify-content: flex-end; 277 padding: 0.25rem; 278} 279 280.related-thumbnail .duration { 281 background: rgba(0, 0, 0, 0.8); 282 padding: 0.125rem 0.375rem; 283 border-radius: 4px; 284 font-size: 0.75rem; 285 font-weight: 500; 286} 287 288.related-info { 289 padding: 0.25rem 0; 290 min-width: 0; 291} 292 293.related-info h4 { 294 font-size: 0.875rem; 295 font-weight: 500; 296 margin: 0 0 0.25rem; 297 line-height: 1.4; 298 display: -webkit-box; 299 -webkit-line-clamp: 2; 300 -webkit-box-orient: vertical; 301 overflow: hidden; 302} 303 304.related-info p { 305 font-size: 0.75rem; 306 color: var(--text-muted, #888); 307 margin: 0; 308} 309 310/* Responsive */ 311@media (max-width: 1100px) { 312 .watch-page { 313 grid-template-columns: 1fr; 314 padding: 1rem; 315 } 316 317 .watch-sidebar { 318 border-top: 1px solid var(--border, #333); 319 padding-top: 1.5rem; 320 } 321 322 .related-videos { 323 display: grid; 324 grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); 325 gap: 1rem; 326 } 327 328 .related-video-card { 329 grid-template-columns: 1fr; 330 } 331 332 .related-thumbnail { 333 width: 100%; 334 } 335} 336 337/* Error state for video list */ 338.video-list.error { 339 text-align: center; 340 padding: 4rem 2rem; 341} 342 343.video-list.error button { 344 margin-top: 1rem; 345 padding: 0.75rem 2rem; 346 background: var(--accent, #646cff); 347 color: white; 348 border: none; 349 border-radius: 8px; 350 cursor: pointer; 351} 352 353/* Responsive */ 354@media (max-width: 640px) { 355 .video-list { 356 padding: 1rem; 357 } 358 359 .video-list h1 { 360 font-size: 1.5rem; 361 } 362 363 .video-grid { 364 grid-template-columns: 1fr; 365 } 366 367 .video-header { 368 flex-direction: column; 369 align-items: stretch; 370 } 371 372 .video-header h2 { 373 order: -1; 374 } 375}