diff options
Diffstat (limited to 'web/source/css')
-rw-r--r-- | web/source/css/_colors.css | 24 | ||||
-rw-r--r-- | web/source/css/base.css | 33 | ||||
-rw-r--r-- | web/source/css/index.css | 41 | ||||
-rw-r--r-- | web/source/css/profile.css | 376 | ||||
-rw-r--r-- | web/source/css/status.css | 399 |
5 files changed, 434 insertions, 439 deletions
diff --git a/web/source/css/_colors.css b/web/source/css/_colors.css index 01f59a55d..79acf988c 100644 --- a/web/source/css/_colors.css +++ b/web/source/css/_colors.css @@ -69,8 +69,10 @@ $border-accent: $orange2; $link-fg: $fg-accent; -$role-moderator: $orange1; -$role-admin: $blue2; +$role-admin: $orange2; +$role-mod: $blue2; + +$profile-bg: $gray4; $button-bg: $blue2; $button-fg: $gray1; @@ -80,10 +82,11 @@ $button-danger-bg: $error3; $button-danger-fg: $white1; $button-danger-hover-bg: $error2; -$toot-focus-bg: $gray5; -$toot-unfocus-bg: $gray2; +$toot-bg: $gray3; +$toot-info-bg: $gray2; -$toot-info-bg: $gray4; +$toot-focus-bg: $gray5; +$toot-focus-info-bg: $gray4; $no-img-desc-bg: $orange1; $no-img-desc-fg: $gray1; @@ -116,4 +119,13 @@ $error-bg: $error2; $list-entry-bg: $gray2; $list-entry-alternate-bg: $gray3; -$list-entry-hover-bg: $gray4;
\ No newline at end of file +$list-entry-hover-bg: $gray4; + +/* Plyr video player */ +$plyr-color-main: $orange2; +$plyr-video-background: $bg-accent; +$plyr-badge-background: $bg-accent; +$plyr-video-controls-background: $bg-accent; +$plyr-badge-text-color: $fg; +$plyr-badge-border-radius: $br; +$plyr-video-progress-buffered-background: $gray8;
\ No newline at end of file diff --git a/web/source/css/base.css b/web/source/css/base.css index 45b797c64..87d2fcca7 100644 --- a/web/source/css/base.css +++ b/web/source/css/base.css @@ -44,6 +44,11 @@ $br: 0.4rem; inside something with $br, eg avatar, header img */ $br-inner: 0.2rem; +/* Fork-Awesome 'fa-fw' fixed icon width + keep in sync with https://github.com/ForkAwesome/Fork-Awesome/blob/a99579ae3e735ee70e51ed62dfcee3172b5b2db7/css/fork-awesome.css#L50 +*/ +$fa-fw: 1.28571429em; + html, body { padding: 0; margin: 0; @@ -95,26 +100,25 @@ header { } header a { - margin: 2rem; display: flex; flex-wrap: wrap; - gap: 2rem; + margin: 1.5rem; + gap: 1rem; + justify-content: center; img { align-self: center; - height: 6rem; + height: 3rem; } - div { + h1 { flex-grow: 1; align-self: center; - display: flex; + text-align: center; - h1 { - word-wrap: anywhere; - align-self: center; - color: $fg; - } + font-size: 1.5rem; + word-wrap: anywhere; + color: $fg; } } @@ -132,15 +136,6 @@ header a { } main { - section { - background: $bg-accent; - box-shadow: $boxshadow; - border: $boxshadow-border; - border-radius: $br; - padding: 2rem; - margin-bottom: 2rem; - } - p:first-child { margin-top: 0; } diff --git a/web/source/css/index.css b/web/source/css/index.css new file mode 100644 index 000000000..b4ad1bd1c --- /dev/null +++ b/web/source/css/index.css @@ -0,0 +1,41 @@ +/* + GoToSocial + Copyright (C) 2021-2023 GoToSocial Authors admin@gotosocial.org + + 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/>. +*/ + +header a { + margin: 2rem; + gap: 2rem; + + img { + height: 6rem; + } + + h1 { + font-size: 2rem; + } +} + +main { + section { + background: $bg-accent; + box-shadow: $boxshadow; + border: $boxshadow-border; + border-radius: $br; + padding: 2rem; + margin-bottom: 2rem; + } +}
\ No newline at end of file diff --git a/web/source/css/profile.css b/web/source/css/profile.css index 0065f6015..125db3513 100644 --- a/web/source/css/profile.css +++ b/web/source/css/profile.css @@ -16,274 +16,252 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ -header { - a img { - height: 5rem; - } -} - -main { - background: transparent; - padding-top: 0; +.page { + grid-template-columns: 1fr minmax(auto, 60rem) 1fr; /* fallback for lack of min() support */ + grid-template-columns: 1fr min(92%, 65rem) 1fr; } .profile { - background: $bg-accent; - display: grid; - grid-template-columns: 100%; - gap: 0.5rem; - margin-bottom: 0.2rem; - overflow-x: hidden; - position: relative; + padding: 0.5rem; + border-radius: $br; + + .column-split { + display: flex; + flex-wrap: wrap; + gap: 1rem; + } +} +.profile .header { + background: $profile-bg; border-radius: $br; - box-shadow: $boxshadow; - border: $boxshadow-border; + overflow: hidden; + margin-bottom: 1rem; - .headerimage { - width: 100%; - aspect-ratio: 3 / 1; - max-height: 16rem; - overflow: hidden; - box-shadow: $boxshadow; + .header-image { + position: relative; + padding-top: 33.33%; /* aspect-ratio 1/3 */ img { + position: absolute; + top: 0; + left: 0; + right: 0; width: 100%; height: 100%; object-fit: cover; - border-radius: $br-inner $br-inner 0 0; } } - .basic { - height: 8.5rem; - margin-top: -6.5rem; + /* + 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; - display: grid; - grid-template-columns: 1rem 8.5rem 1fr; - grid-template-rows: 3rem 3rem 2.5rem; + $overlap: calc($avatar-size - $name-size - $username-size); + .basic-info { + position: relative; + display: grid; + box-sizing: border-box; + grid-template-columns: $avatar-size auto 1fr; + grid-template-rows: $overlap $name-size auto; grid-template-areas: - ". avatar ." - "filler2 avatar displayname" - ". avatar username"; + "avatar . ." + "avatar displayname displayname" + "avatar username role"; - #profile-basic-filler2 { - grid-area: filler2; - background: $bg-trans; - } + margin: 1rem; + margin-top: calc(-1 * $overlap); + gap: 0 1rem; .avatar { - align-self: end; - box-sizing: border-box; - height: 8.5rem; - width: 8.5rem; grid-area: avatar; - background: $bg; + height: $avatar-size; + width: $avatar-size; border: 0.2rem solid $avatar-border; - padding: 0; border-radius: $br; - position: relative; + overflow: hidden; /* prevents image extending beyond rounded borders */ - box-shadow: $boxshadow; img { - object-fit: cover; - border-radius: $br-inner; - width: 100%; height: 100%; + width: 100%; + object-fit: cover; } } - a, div { - color: inherit; - text-decoration: none; - } - .displayname { grid-area: displayname; + line-height: $name-size; + font-size: 1.5rem; font-weight: bold; - font-size: 2rem; - line-height: 3rem; - background: $bg-trans; - word-break: break-all; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - max-height: 6rem; - padding: 0 0.5rem; } - .usernamecontainer { - height: 2.5rem; - display: grid; - grid-template-columns: auto 1fr; + .username { + min-width: 0; grid-area: username; - /* justify-content: space-between; */ - padding: 0; - gap: 0.5rem; - position: relative; - - color: $fg-accent; - font-weight: bold; + line-height: $username-size; - .username { - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - user-select: all; + font-size: 1rem; + font-weight: bold; + color: $fg-accent; + user-select: all; + } - line-height: 2.5rem; - padding-left: 0; - margin-left: 0.5rem; - } + .role { + background: $bg; + color: $fg; + border: 0.13rem solid $bg; - .role { - justify-self: start; - align-self: center; - line-height: 1.1rem; - font-size: 0.9rem; - margin-right: 0.2rem; - padding: 0.2rem; - margin-top: 0.1rem; - padding-top: 0.1rem; - border: 0.1rem solid $gray1; - border-radius: $br; - font-variant: small-caps; - } + 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; - .role.admin { - background: $gray1; - color: $orange2; - border-color: $orange2; + &.admin { + color: $role-admin; + border-color: $role-admin; } - .role.moderator { - background: $gray1; - color: $blue2; - border-color: $blue1; + &.moderator { + color: $role-mod; + border-color: $role-mod; } } } +} - @media screen and (max-width: 600px) { - & { - gap: 0.1rem; - } - - .basic { - margin-top: calc(-22vw + 1rem); - height: initial; - display: flex; - flex-direction: column; +@media screen and (max-width: 750px) { + .profile .header { + .basic-info { + grid-template-columns: auto 1fr; + grid-template-rows: $avatar-size $name-size auto; + grid-template-areas: + "avatar avatar" + "displayname displayname" + "username role"; - #profile-basic-filler2 { - display: none; + .displayname { + font-size: 1.4rem; } + } + } +} - .avatar { - align-self: flex-start; - margin-left: 1rem; - height: 22vw; - width: 22vw; - } +.profile .col-header { + display: flex; + justify-content: start; + gap: 2rem; + align-items: center; + + margin: 0; + background: $profile-bg; + border-top-left-radius: $br; + border-top-right-radius: $br; + padding: 0.75rem; + + h3 { + font-size: 1.2rem; + line-height: 1.3rem; + margin: 0; + } +} - .displayname { - padding-left: 1rem; - font-size: 1.5rem; - line-height: 2rem; - margin-top: 0.5rem; - align-self: stretch; - } +.profile .toots { + flex: 65 25rem; + display: flex; + flex-direction: column; + gap: 0.4rem; - .usernamecontainer { - padding-left: 1rem; + .col-header { + display: grid; + grid-template-columns: auto 1fr; + gap: 1rem; + + a { + justify-self: end; + } - .username { - margin-left: 0; - } + .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; } } } - .detailed { - display: flex; - flex-direction: column; - flex: 1 1 25em; + .toot { + border-radius: 0; - h2 { - margin-top: 0; + .info { + padding: 0.3rem 0.75rem; } - .bio { - margin-top: 0; - margin-bottom: 0.5rem; - margin-left: 1rem; - margin-right: 1rem; - word-break: break-word; - - a { - color: $acc1; - text-decoration: underline; - } + &:last-child { + border-bottom-left-radius: $br; + border-bottom-right-radius: $br; } } } -.accountstats { - display: flex; - flex-wrap: wrap; - border-radius: 0 0 $br $br; - border-top: 0.1rem solid $bg; - - .entry-group { - flex: 1 1 auto; - min-width: 50%; - display: flex; - } +.profile .about-user { + flex: 35 14rem; + border-radius: $br; + overflow: hidden; - .entry { - white-space: nowrap; - width: 50%; - margin: 1.2rem 0.5rem; - text-align: center; + .col-header { + margin-bottom: -0.25rem; } -} -.nothinghere { - margin-left: 1rem; -} + .fields { + background: $profile-bg; + display: flex; + flex-direction: column; + padding: 0 0.5rem; + padding-top: 0.25rem; -.backnextlinks { - display: flex; - flex-wrap: wrap; - justify-content: space-between; + .field { + padding: 0.25rem; + display: flex; + flex-direction: column; + border-bottom: 0.1rem solid $gray2; + word-break: break-all; - a { - padding: 1rem; + &:first-child { + border-top: 0.1rem solid $gray2; + } + } } - .next { - margin-left: auto; + .bio { + background: $profile-bg; + padding: 1rem 0.75rem; + padding-bottom: 1.25rem; } -} -.toot, .toot:last-child { - box-shadow: $boxshadow; -} - -#recent, #pinned { - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-between; - margin: 1rem; - .rss-icon { - font-size: 1.45em; - 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; + .accountstats { + background: $bg-accent; + padding: 0.75rem; + + display: grid; + grid-template-columns: auto 1fr; + gap: 0.25rem 1rem; } -} +}
\ No newline at end of file diff --git a/web/source/css/status.css b/web/source/css/status.css index 70a47a022..3d0037557 100644 --- a/web/source/css/status.css +++ b/web/source/css/status.css @@ -18,6 +18,7 @@ @import "photoswipe/dist/photoswipe.css"; @import "photoswipe-dynamic-caption-plugin/photoswipe-dynamic-caption-plugin.css"; +@import "plyr/dist/plyr.css"; main { background: transparent; @@ -31,13 +32,13 @@ main { } .toot { - background: $toot-unfocus-bg; + background: $toot-bg; box-shadow: $boxshadow; border: $boxshadow-border; + border-radius: $br; position: relative; margin-bottom: $br; - padding-top: 1.5rem; - padding-bottom: 0.7rem; + padding-top: 0.75rem; a { position: relative; @@ -46,87 +47,88 @@ main { text-decoration: none; } - .contentgrid { - padding: 0 1.5rem; + .author > a { + padding: 0 0.75rem; display: grid; - grid-template-columns: 4rem 1fr auto; - grid-template-rows: 1.5rem auto auto auto; - column-gap: 0.5rem; - } + grid-template-columns: 3.5rem 1fr auto; + grid-template-rows: auto auto; + grid-template-areas: + "avatar display date" + "avatar user ."; + gap: 0 0.5rem; + + .avatar { + grid-area: avatar; + height: 3.5rem; + width: 3.5rem; + object-fit: cover; - .not-expanded { - color: $fg-reduced; - grid-column: 3; - grid-row: 1; - } + border: 0.15rem solid $avatar-border; + border-radius: $br; + overflow: hidden; /* hides corners from img overflowing */ - .avatar { - grid-row: span 3; - aspect-ratio: 1/1; - display: flex; - border: 0.2rem solid $avatar-border; - border-radius: 0.4rem; - overflow: hidden; /* hides corners from img overflowing */ - - img { - height: 100%; - width: 100%; - object-fit: cover; - background: $bg; + img { + height: 100%; + width: 100%; + object-fit: cover; + background: $bg; + } } - } - .displayname, .username { - justify-self: start; - align-self: start; + .displayname, .username { + justify-self: start; + align-self: start; - max-width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } + max-width: 100%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } - .displayname { - font-weight: bold; - font-size: 1.5rem; - line-height: 2rem; - margin-top: -0.5rem; - } + .displayname { + grid-area: display; + font-weight: bold; + font-size: 1rem; + line-height: 1.3rem; + /* margin-top: -0.5rem; */ + } - .username { - color: $link-fg; - font-size: 1rem; - line-height: 1.3rem; - } + .username { + grid-area: user; + color: $link-fg; + font-size: 1rem; + line-height: 1.3rem; + } - input.spoiler:checked ~ .content { - display: none; + .timestamp { + grid-area: date; + color: $fg-reduced; + } } - .spoiler { - padding-bottom: 0.5rem; - + .body { + padding: 0.5rem 0.75rem; display: flex; - align-items: center; - flex-wrap: wrap; - gap: 0.4rem; + flex-direction: column; + gap: 0.5rem; + } - .spoiler-text { - word-break: break-word; + details > summary { + display: inline-block; + list-style: none; + + &::-webkit-details-marker { + display: none; /* Safari */ } - label { - padding: 0.2rem 0.3rem; + .button { + white-space: nowrap; cursor: pointer; - font-size: 1rem; - } - label:hover { } } .text { margin: 0; - padding-top: 0.5rem; grid-row: span 1; grid-column: 1 / span 3; @@ -135,14 +137,21 @@ main { width: 100%; + details > summary { + padding-bottom: 0.5rem; + + .button { + padding: 0.2rem 0.3rem; + font-size: 1rem; + } + } + a { color: $link-fg; text-decoration: underline; } .content { - padding-bottom: 0.5rem; - word-break: break-word; blockquote { @@ -202,152 +211,112 @@ main { } .media { - margin-top: 0.5rem; - border-radius: $br; grid-column: span 3; display: grid; grid-template-columns: 50% 50%; grid-auto-rows: 10rem; overflow: hidden; - gap: 0.3rem; .media-wrapper { + height: 100%; + width: 100%; + box-sizing: border-box; + border: 0.15rem solid $gray1; + border-radius: $br; position: relative; - } - - &.single .media-wrapper { - grid-column: span 2; - } - - &.odd .media-wrapper:first-child, &.double .media-wrapper { - grid-row: span 2; - } - - .open, .open .button { - display: none; - } - - .closed { + overflow: hidden; z-index: 2; - } - input.sensitive-checkbox:checked { /* Media is shown */ - & ~ .video-play { - display: flex; - } - & ~ .sensitive { - .closed { - transition: 0.8s; - pointer-events: none; - opacity: 0; + details { + position: absolute; + height: 100%; + width: 100%; - & > * { + &[open] summary { + height: auto; + width: auto; + margin: 1rem; + padding: 0; + + .show, video, img { display: none; } - } - .open { - display: flex; - justify-content: flex-start; - - .button { - align-self: flex-start; - display: initial; - z-index: 4; + .eye.button .hide { + display: inline-block; + grid-column: 1 / span 3; + grid-row: 1 / span 2; } } - } - } - - .video-play { - .icon-span { - align-self: center; - display: initial; - z-index: 4; - - .icon { - color: $white1; - } - .icon-bg { - color: $gray1; - font-size: 1.1em; - } - } - - display: none; - position: absolute; - height: 100%; - width: 100%; - justify-content: center; - align-items: center; - font-size: 7em; - pointer-events: none; - } - - .sensitive { - position: absolute; - height: 100%; - width: 100%; + summary { + position: absolute; + height: 100%; + width: 100%; + z-index: 3; + overflow: hidden; + + display: grid; + padding: 1rem; + grid-template-columns: 1fr auto 1fr; + grid-template-rows: 1fr 1fr; + grid-template-areas: + "eye sensitive ." + ". sensitive ."; + + .eye.button { + grid-area: eye; + align-self: start; + justify-self: start; + margin: 0; + padding: 0.4rem; + + .fa-fw { + line-height: $fa-fw; + } + + .hide { + display: none; + } + } - .open, .closed { - display: flex; - position: absolute; - height: 100%; - width: 100%; - justify-content: center; - padding: 1rem; + .show.sensitive { + grid-area: sensitive; + align-self: center; - label { - z-index: 3; - } - } + .button { + cursor: pointer; + align-self: center; + } + } - .closed { - transition: 0.3s; - background: $bg-sensitive; - @supports (backdrop-filter: blur(2rem)) { - background: transparent; - backdrop-filter: blur(2rem); + video, img { + z-index: -1; + position: absolute; + height: calc(100% + 1.2rem); + width: calc(100% + 1.2rem); + top: -0.6rem; + left: -0.6rem; + filter: blur(1.2rem); + } } - .button { - align-self: center; - justify-self: center; + video.plyr-video, .plyr { + position: absolute; + height: 100%; + width: 100%; + object-fit: contain; + background: $gray1; } } } - .no-image-desc { - color: $no-img-desc-fg; - background: $no-img-desc-bg; - display: flex; - position: absolute; - bottom: 0.1rem; - right: 0.4rem; - margin-bottom: 0.4rem; - margin-right: 0.4rem; - padding: 0.1rem 0.45rem; - border-radius: 100%; - border: 0.2rem solid $button-fg; - z-index: 3; - - i.fa { - display: block; - line-height: 1.6rem; - } - - span { - margin-left: 0.3rem; - display: none; - } + &.single .media-wrapper { + grid-column: span 2; + } - &:hover { - span { - display: block; - } - border-radius: 0.2rem; - } + &.odd .media-wrapper:first-child, &.double .media-wrapper { + grid-row: span 2; } img { @@ -358,14 +327,14 @@ main { } .info { + display: flex; background: $toot-info-bg; color: $fg-reduced; - display: none; border-top: 0.15rem solid $toot-info-border; - padding: 0.5rem 1.5rem; + padding: 0.5rem 0.75rem; - div { - padding-right: 1.3rem; + div, time { + padding-right: 1rem; } .stats { @@ -406,39 +375,39 @@ main { background: $toot-focus-bg; padding-bottom: 0; - .contentgrid { - .displayname { - grid-column: span 2; - } - - .not-expanded { - display: none; - } - } - .info { - display: flex; - } - - .media { - margin-bottom: 0.5rem; + background: $toot-focus-info-bg; } } } -footer + div { /* something weird from the devstack.. */ - display: none; -} +.plyr--video { + flex-direction: column-reverse; -@media screen and (max-width: 89ch) { - .toot { - .contentgrid { - grid-template-rows: 1.5rem 1.3rem 1.3rem auto; - } + .plyr__video-wrapper { + position: relative; + } - .username, .not-expanded { - grid-column: 2; - grid-row: auto; - } + .plyr__controls { + align-self: stretch; + position: initial; + padding: 0.1rem; + padding-top: 0.2rem; + } + + .plyr__control { + box-shadow: none; + } + + .plyr__control--overlaid { + top: calc(50% - 18px); } } + +.pswp__content { + padding: 2rem; + + .plyr { + max-height: 100%; + } +}
\ No newline at end of file |