/*
	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/>.
*/

.profile .profile-header {
	background: $profile-bg;
	border-radius: $br;
	margin-bottom: 1rem;
	padding-bottom: 1rem;

	/*
		Link to open media in slide
		should fill entire media wrapper.
	*/
	a.photoswipe-slide {
		display: inline-block;
		height: 100%;
		width: 100%;
		
		&:focus-visible {
			outline: $button-focus-outline;
		}
	}

	.moved-to {
		padding: 1rem;
		text-align: center;
	}

	.header-image-wrapper {
		position: relative;
		aspect-ratio: 3;
		height: 100%;
		width: 100%;
		
		img {
			position: absolute;
			top: 0;
			left: 0;
			right: 0;
			width: 100%;
			height: 100%;
			object-fit: cover;
		}
	}

	/* 
		Basic info container has the user's avatar, display- and username, and role
		It's partially overlapped over the header image, by a negative margin-top.
	*/
	$avatar-size: 8.5rem;
	$name-size: 3rem;
	$username-size: 2rem;
	$overlap: calc($avatar-size - $name-size - $username-size);

	.basic-info {
		position: relative;
		display: grid;
		gap: 0 1rem;
		box-sizing: border-box;
		grid-template-columns: $avatar-size auto 1fr;
		grid-template-rows: $overlap $name-size auto;
		grid-template-areas:
			"avatar . ."
			"avatar namerole namerole"
			"avatar namerole namerole";

		/*
			Margin top to inset profile pic into
			header image, margin sides to inset
			basic info from header wrapper.
		*/
		margin: calc(-1 * $overlap) 1rem 0 1rem;

		.avatar-image-wrapper {
			grid-area: avatar;
			
			border: 0.2rem solid $avatar-border;
			border-radius: $br;
			
			/*
				Wrapper always same
				size + proportions no
				matter image inside.
			*/
			height: $avatar-size;
			width: $avatar-size;

			/*
				Offset to avoid clashing with
				thick border around avatars.
			*/
			a.photoswipe-slide:focus-visible {
				outline-offset: 0.25rem;
			}

			.avatar {
				/*
					Fit 100% of the wrapper.
				*/
				height: 100%;
				width: 100%;

				/*
					Normalize non-square images.
				*/
				object-fit: cover;

				/*
					Prevent image extending
					beyond rounded borders.
				*/
				border-radius: $br-inner;
			}
		}

		.namerole {
			grid-area: namerole;

			display: grid;
			gap: 0 1rem;
			box-sizing: border-box;
			grid-template-columns: 1fr auto;
			grid-template-rows: $name-size auto;
			grid-template-areas:
				"displayname displayname"
				"username role";

			.displayname {
				grid-area: displayname;
				line-height: $name-size;
				font-size: 1.5rem;
				font-weight: bold;
			}

			.bot-username-wrapper {
				display: flex;
				gap: 0.5rem;
				grid-area: username;
				align-items: center;
				
				.bot-legend-wrapper {
					display: flex;
					gap: 0.25rem;
					align-items: center;
					
					background: $bg;
					color: $fg;
		
					border-radius: $br;
					padding: 0.1rem 0.4rem 0.2rem 0.4rem;
					
					font-variant: small-caps;
					font-weight: bold;

					cursor: default;

					.bot-icon {
						/*
							FA icon is weirdly
							aligned so tweak it
						*/
						margin-top: 0.25rem;
					}
				}

				.username {
					min-width: 0;
					line-height: $username-size;
		
					font-size: 1rem;
					font-weight: bold;
					color: $fg-accent;
					user-select: all;
				}
			}
	
			.role {
				background: $bg;
				color: $fg;
				border: 0.13rem solid $bg;
	
				grid-area: role;
				align-self: center;
				justify-self: start;
				border-radius: $br;
				padding: 0.3rem;
				
				line-height: 1.1rem;
				font-size: 0.9rem;
				font-variant: small-caps;
				font-weight: bold;
	
				&.admin {
					color: $role-admin;
					border-color: $role-admin;
				}
	
				&.moderator {
					color: $role-mod;
					border-color: $role-mod;
				}
			}
		}
	}
}

.profile .about-user {
	flex: 35 14rem;
	border-radius: $br;
	overflow: hidden;

	.col-header {
		margin-bottom: -0.25rem;
	}

	dt {
		font-weight: bold;
	}

	.fields {
		background: $profile-bg;
		display: flex;
		flex-direction: column;
		padding: 0 0.5rem;
		padding-top: 0.25rem;

		.field {
			padding: 0.25rem;
			display: flex;
			flex-direction: column;
			border-bottom: 0.1rem solid $gray2;

			> dt, > dd {
				word-break: break-word;
			}

			&:first-child {
				border-top: 0.1rem solid $gray2;
			}
		}
	}

	.bio {
		background: $profile-bg;
		padding: 1rem 0.75rem;
		padding-bottom: 1.25rem;
	}

	.accountstats {
		background: $bg-accent;
		padding: 0.75rem;
		
		display: flex;
		flex-direction: column;
		gap: 0.25rem;

		.stats-item {
			display: flex;
			dt {
				width: 7rem;
			}
		}
	}
}

/*
	RSS icon isn't really part of the profile header exactly,
	but also it sort of is, and we want it styled the same for
	both microblog and gallery view anyway, so include it here.
*/
.rss-icon {
	display: block;
	margin: -0.25rem 0;
	
	.fa {
		font-size: 2rem;
		object-fit: contain;
		vertical-align: middle;
		color: $orange2;
		/*
			Can't size a single-color background, so we use
			a linear-gradient that's effectively white.
		*/
		background: linear-gradient(to right, $white1 100%, transparent 0) no-repeat center center;
		background-size: 1.2rem 1.4rem;
		/* light mode */
		@media (prefers-color-scheme: light) {
			background: linear-gradient(to right, $white 100%, transparent 0) no-repeat center center;
			background-size: 1.2rem 1.4rem;
		}
	}
}

/*
	Tablet-ish-kinda size.
*/
@media screen and (max-width: 750px) {
	.profile .profile-header {
		.basic-info {
			grid-template-columns: auto 1fr;
			grid-template-rows: $avatar-size $name-size auto;
			grid-template-areas:
				"avatar avatar"
				"namerole namerole"
				"namerole namerole";
			
			/*
				Make display name a bit smaller
				so there's more chance of being
				able to read everything.
			*/
			.namerole {
				.displayname {
					font-size: 1.2rem;
					line-height: 2rem;
					margin-top: 0.5rem;
				}
			}
		}
	}
}

/*
	Phone-ish-kinda size.
*/
@media screen and (max-width: 500px) {
	.profile
	.profile-header
	.basic-info
	.namerole {
		/*
			Line up in smallest possible
			horizontal space to avoid overflow.
		*/
		display: flex;
		flex-direction: column;
		gap: 0.5rem;

		/*
			Don't hug the right anymore
			(good life advice in general).
		*/
		.role {
			align-self: flex-start;
		}

		/*
			Allow this to wrap in case
			of a really skinny screen.
		*/
		.bot-username-wrapper {
			flex-wrap: wrap;
		}
	}
}
