mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 15:52:25 -05:00 
			
		
		
		
	* dick about with stats a bit * more dicking abuot * lil tweaks * more about-dicking * weee * comments * fixie uppie
		
			
				
	
	
		
			369 lines
		
	
	
	
		
			6.4 KiB
		
	
	
	
		
			CSS
		
	
	
	
	
	
			
		
		
	
	
			369 lines
		
	
	
	
		
			6.4 KiB
		
	
	
	
		
			CSS
		
	
	
	
	
	
| /*
 | |
| 	GoToSocial
 | |
| 	Copyright (C) GoToSocial Authors admin@gotosocial.org
 | |
| 	SPDX-License-Identifier: AGPL-3.0-or-later
 | |
| 
 | |
| 	This program is free software: you can redistribute it and/or modify
 | |
| 	it under the terms of the GNU Affero General Public License as published by
 | |
| 	the Free Software Foundation, either version 3 of the License, or
 | |
| 	(at your option) any later version.
 | |
| 
 | |
| 	This program is distributed in the hope that it will be useful,
 | |
| 	but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| 	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| 	GNU Affero General Public License for more details.
 | |
| 
 | |
| 	You should have received a copy of the GNU Affero General Public License
 | |
| 	along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |
| */
 | |
| 
 | |
| @import "photoswipe/dist/photoswipe.css";
 | |
| @import "photoswipe-dynamic-caption-plugin/photoswipe-dynamic-caption-plugin.css";
 | |
| @import "plyr/dist/plyr.css";
 | |
| 
 | |
| .media-wrapper {
 | |
| 	height: 100%;
 | |
| 	width: 100%;
 | |
| 	box-sizing: border-box;
 | |
| 	border: 0.15rem solid $gray1;
 | |
| 	border-radius: $br;
 | |
| 	position: relative;
 | |
| 	overflow: hidden;
 | |
| 
 | |
| 	img {
 | |
| 		width: 100%;
 | |
| 		height: 100%;
 | |
| 		object-fit: cover;
 | |
| 	}
 | |
| 
 | |
| 	details {
 | |
| 		position: relative;
 | |
| 		height: 100%;
 | |
| 		width: 100%;
 | |
| 
 | |
| 		div.blurhash-container {
 | |
| 			z-index: -1;
 | |
| 			position: absolute;
 | |
| 			height: 100%;
 | |
| 			width: 100%;
 | |
| 		}
 | |
| 
 | |
| 		canvas {
 | |
| 			height: 100%;
 | |
| 			width: 100%;
 | |
| 			object-fit: cover;
 | |
| 		}
 | |
| 
 | |
| 		summary {
 | |
| 			position: absolute;
 | |
| 			height: 100%;
 | |
| 			width: 100%;
 | |
| 			overflow: hidden;
 | |
| 			z-index: 1;
 | |
| 
 | |
| 			display: grid;
 | |
| 			padding: 1rem;
 | |
| 			grid-template-columns: 1fr auto 1fr;
 | |
| 			grid-template-rows: 1fr 1fr;
 | |
| 			grid-template-areas: 
 | |
| 				"eye sensitive ."
 | |
| 				".   sensitive  .";
 | |
| 
 | |
| 			&::-webkit-details-marker {
 | |
| 				display: none; /* Safari */
 | |
| 			}
 | |
| 
 | |
| 			.eye.button {
 | |
| 				grid-area: eye;
 | |
| 				align-self: start;
 | |
| 				justify-self: start;
 | |
| 				margin: 0;
 | |
| 				padding: 0.4rem;
 | |
| 
 | |
| 				/*
 | |
| 					Make button outline really thick as we can't
 | |
| 					know whether media has good contrast with it.
 | |
| 				*/
 | |
| 				&:focus-visible {
 | |
| 					outline: 0.5rem dashed $button-focus-border;
 | |
| 				}
 | |
| 
 | |
| 				.fa-fw {
 | |
| 					line-height: $fa-fw;
 | |
| 				}
 | |
| 
 | |
| 				.hide {
 | |
| 					display: none;
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			.show.sensitive {
 | |
| 				grid-area: sensitive;
 | |
| 				align-self: center;
 | |
| 
 | |
| 				text-overflow: ellipsis;
 | |
| 				overflow: hidden;
 | |
| 				white-space: nowrap;
 | |
| 
 | |
| 				.button {
 | |
| 					cursor: pointer;
 | |
| 					align-self: center;
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		&[open] summary {
 | |
| 			height: auto;
 | |
| 			width: auto;
 | |
| 			cursor: pointer;
 | |
| 
 | |
| 			grid-template-columns: 1fr;
 | |
| 			grid-template-rows: 1fr;
 | |
| 
 | |
| 			.show {
 | |
| 				display: none;
 | |
| 			}
 | |
| 
 | |
| 			.eye.button .hide {
 | |
| 				display: inline-block;
 | |
| 			}
 | |
| 
 | |
| 			div.blurhash-container,
 | |
| 			div.blurhash-container > canvas {
 | |
| 				display: none;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		a.photoswipe-slide,
 | |
| 		a.unknown-attachment {
 | |
| 			position: absolute;
 | |
| 			width: 100%;
 | |
| 			height: 100%;
 | |
| 
 | |
| 			/*
 | |
| 				Make link outline really thick as we can't
 | |
| 				know whether media has good contrast with it.
 | |
| 				Indent outline to avoid being hidden by overflow: hidden.
 | |
| 			*/
 | |
| 			&:focus-visible {
 | |
| 				outline: 0.5rem dotted $link-fg;
 | |
| 				outline-offset: -0.5rem;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		video.plyr-video, .plyr {
 | |
| 			position: absolute;
 | |
| 			height: 100%;
 | |
| 			width: 100%;
 | |
| 			object-fit: cover;
 | |
| 			background: $gray1;
 | |
| 			min-width: 100%;
 | |
| 		}
 | |
| 
 | |
| 		.unknown-attachment {
 | |
| 			.placeholder {
 | |
| 				width: 100%;
 | |
| 				height: 100%;
 | |
| 				padding: 0.8rem;
 | |
| 
 | |
| 				display: flex;
 | |
| 				flex-direction: column;
 | |
| 				align-items: center;
 | |
| 				gap: 0.25rem;
 | |
| 
 | |
| 				color: $white2;
 | |
| 
 | |
| 				.placeholder-external-link {
 | |
| 					align-self: end;
 | |
| 					font-size: 2.5rem;
 | |
| 				}
 | |
| 
 | |
| 				.placeholder-icon {
 | |
| 					width: 100%;
 | |
| 					font-size: 3.5rem;
 | |
| 					text-align: center;
 | |
| 					margin-top: auto;
 | |
| 				}
 | |
| 
 | |
| 				.placeholder-link-to {
 | |
| 					width: 100%;
 | |
| 					text-align: center;
 | |
| 					margin-bottom: auto;
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	@media screen and (max-width: 55rem) {
 | |
| 		/*
 | |
| 			Tablet-ish width, make "show sensitive"
 | |
| 			and "eye" buttons smaller + more compact.
 | |
| 		*/
 | |
| 		& > details {
 | |
| 			& > summary {
 | |
| 				padding: 0.5rem;
 | |
| 	
 | |
| 				> div.show.sensitive.button {
 | |
| 					font-size: smaller;
 | |
| 					padding: 0.2rem;
 | |
| 					line-height: 1.4rem;
 | |
| 				}
 | |
| 				
 | |
| 				> span.eye.button {
 | |
| 					font-size: smaller;
 | |
| 					padding: 0.2rem;
 | |
| 	
 | |
| 					> .fa-fw {
 | |
| 						line-height: 1.4rem;
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	@media screen and (max-width: 36rem) {
 | |
| 		/*
 | |
| 			Mobile-ish width, even more compact.
 | |
| 		*/
 | |
| 		& > details {
 | |
| 			& > summary {
 | |
| 				> div.show.sensitive.button {
 | |
| 					font-size: small;
 | |
| 					padding: 0.1rem;
 | |
| 					line-height: 1.2rem;
 | |
| 				}
 | |
| 				
 | |
| 				> span.eye.button {
 | |
| 					font-size: small;
 | |
| 					padding: 0.1rem;
 | |
| 	
 | |
| 					> .fa-fw {
 | |
| 						line-height: 1.2rem;
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	@media screen and (max-width: 27rem) {
 | |
| 		/*
 | |
| 			Really really tiny, make the text
 | |
| 			on show/hide sensitive even smaller.
 | |
| 		*/
 | |
| 		& > details > summary > div.show.sensitive.button {
 | |
| 			font-size: x-small;
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| @media (scripting: none) {
 | |
| 	.media-wrapper {
 | |
| 		canvas.blurhash {
 | |
| 			display: none
 | |
| 		}
 | |
| 
 | |
| 		& > details:not([open]) {
 | |
| 			background: linear-gradient(
 | |
| 				var(--bg-accent),
 | |
| 				var(--bg) 
 | |
| 			);
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| .pswp__button--open-post-link {
 | |
| 	display: flex;
 | |
| 	align-items: center;
 | |
| 	justify-content: center;
 | |
| 
 | |
| 	span > i {
 | |
| 		background: $status-bg;
 | |
| 		color: $fg;
 | |
| 		border-radius: 25%;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| .plyr--video {
 | |
| 	flex-direction: column-reverse;
 | |
| 
 | |
| 	.plyr__video-wrapper {
 | |
| 		position: relative;
 | |
| 	}
 | |
| 
 | |
| 	.plyr__controls {
 | |
| 		align-self: stretch;
 | |
| 		position: initial;
 | |
| 		padding: 0.1rem;
 | |
| 		padding-top: 0.2rem;
 | |
| 		gap: 0.15rem;
 | |
| 
 | |
| 		.plyr__controls__item {
 | |
| 			/*
 | |
| 				Override margins from plyr as
 | |
| 				we're displaying in flex with a gap.
 | |
| 			*/
 | |
| 			margin-left: 0;
 | |
| 			margin-right: 0;
 | |
| 			&:first-child {
 | |
| 				margin-right: 0;
 | |
| 			}
 | |
| 
 | |
| 			/*
 | |
| 				Try to split controls in at
 | |
| 				least a somewhat sensible way.
 | |
| 			*/
 | |
| 			&.plyr__volume {
 | |
| 				margin-left: auto;
 | |
| 			}
 | |
| 			&[data-plyr="restart"] {
 | |
| 				margin-right: auto;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		/*
 | |
| 			Override the rule from plyr that
 | |
| 			hides the total duration on thinner
 | |
| 			screens, we have enough room.
 | |
| 		*/
 | |
| 		.plyr__time + .plyr__time {
 | |
| 			display: initial;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	.plyr__control {
 | |
| 		box-shadow: none;
 | |
| 	}
 | |
| 
 | |
| 	.plyr__poster {
 | |
| 		background-size: cover;
 | |
| 	}
 | |
| 
 | |
| 	/*
 | |
| 		Hide plry controls when it's not inside
 | |
| 		a lightbox, but use cursor pointer to
 | |
| 		show the whole thing can be clicked.
 | |
| 	*/
 | |
| 	&.plyr--stopped, &.plyr--paused {
 | |
| 		.plyr__controls {
 | |
| 			display: none;
 | |
| 		}
 | |
| 
 | |
| 		cursor: pointer;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| .pswp__content {
 | |
| 	padding: 2rem;
 | |
| 
 | |
| 	/*
 | |
| 		Render plyr controls as normal
 | |
| 		when it's inside a lightbox.
 | |
| 	*/
 | |
| 	.plyr__control--overlaid {
 | |
| 		top: calc(50% - 18px);
 | |
| 	}
 | |
| 	> .plyr--stopped .plyr__controls,
 | |
| 	> .plyr--paused .plyr__controls {
 | |
| 		display: flex;
 | |
| 	}
 | |
| }
 |