the browser-facing portion of osu!

Add prettier

nanaya e21df536 4d09c170

+1496 -1119
+2
.github/workflows/lint.yml
··· 51 52 - run: 'yarn lint --max-warnings 89 > /dev/null' 53 54 - run: ./bin/update_licence.sh -nf 55 56 - name: Run PHPCS
··· 51 52 - run: 'yarn lint --max-warnings 89 > /dev/null' 53 54 + - run: yarn pretty 55 + 56 - run: ./bin/update_licence.sh -nf 57 58 - name: Run PHPCS
+4
.prettierignore
···
··· 1 + /* 2 + !/resources 3 + /resources/* 4 + !/resources/css
+1
.prettierrc
···
··· 1 + {}
+2
package.json
··· 4 "dev": "yarn run development", 5 "development": "cross-env NODE_ENV=development webpack", 6 "lint": "eslint --cache 'resources/js/**/*.{js,ts,tsx}' 'tests/karma/**/*.{ts,tsx}' '*.js'", 7 "prod": "yarn run production", 8 "production": "cross-env NODE_ENV=production webpack", 9 "watch": "yarn run development --watch", ··· 71 "photoswipe": "^4.1.1", 72 "postcss": "^8.4.31", 73 "postcss-loader": "^7.3.3", 74 "qtip2": "https://github.com/notbakaneko/qTip2.git#cd5f038667d2b23a44f4274c46de01834d704ce6", 75 "react": "^17.0.2", 76 "react-dom": "^17.0.2",
··· 4 "dev": "yarn run development", 5 "development": "cross-env NODE_ENV=development webpack", 6 "lint": "eslint --cache 'resources/js/**/*.{js,ts,tsx}' 'tests/karma/**/*.{ts,tsx}' '*.js'", 7 + "pretty": "prettier --check resources/css/**/*.less", 8 "prod": "yarn run production", 9 "production": "cross-env NODE_ENV=production webpack", 10 "watch": "yarn run development --watch", ··· 72 "photoswipe": "^4.1.1", 73 "postcss": "^8.4.31", 74 "postcss-loader": "^7.3.3", 75 + "prettier": "^3.3.3", 76 "qtip2": "https://github.com/notbakaneko/qTip2.git#cd5f038667d2b23a44f4274c46de01834d704ce6", 77 "react": "^17.0.2", 78 "react-dom": "^17.0.2",
+1 -1
resources/css/app.less
··· 8 @import "~inter-ui/inter.css"; 9 10 @import "~bootstrap/less/bootstrap"; 11 - @import 'bootstrap-overrides'; 12 13 @import "~qtip2/dist/jquery.qtip.css"; 14 @import "~photoswipe/dist/photoswipe.css";
··· 8 @import "~inter-ui/inter.css"; 9 10 @import "~bootstrap/less/bootstrap"; 11 + @import "bootstrap-overrides"; 12 13 @import "~qtip2/dist/jquery.qtip.css"; 14 @import "~photoswipe/dist/photoswipe.css";
+31 -13
resources/css/base.less
··· 20 margin: 10px 0 0 0; 21 } 22 23 - h1, h2, h3, h4, h5, h6 { 24 color: @osu-colour-c1; 25 } 26 27 a { 28 .link-default(); 29 outline-style: none; 30 - &:link, &:visited, &:hover, &:active { outline-style: none; } 31 32 text-decoration: none; 33 - &:hover { text-decoration: underline; } 34 35 transition: color 80ms linear; 36 } ··· 44 } 45 46 @font-face { 47 - font-family: 'FontAwesomeExtra'; 48 - src: url('~@fonts/extra/extra.eot?1280178'); 49 - src: url('~@fonts/extra/extra.eot?1280178#iefix') format('embedded-opentype'), 50 - url('~@fonts/extra/extra.woff2?1280178') format('woff2'), 51 - url('~@fonts/extra/extra.woff?1280178') format('woff'), 52 - url('~@fonts/extra/extra.ttf?1280178') format('truetype'), 53 - url('~@fonts/extra/extra.svg?1280178#extra') format('svg'); 54 font-weight: normal; 55 font-style: normal; 56 } ··· 98 font-weight: 600; 99 } 100 101 - input[type="checkbox"], input[type="radio"] { 102 margin: 2px 0 0; 103 } 104 105 - a[disabled] { &:extend(.btn[disabled]); } 106 107 - .clickable-row { cursor: pointer; } 108 109 [data-visibility] { 110 will-change: opacity;
··· 20 margin: 10px 0 0 0; 21 } 22 23 + h1, 24 + h2, 25 + h3, 26 + h4, 27 + h5, 28 + h6 { 29 color: @osu-colour-c1; 30 } 31 32 a { 33 .link-default(); 34 outline-style: none; 35 + &:link, 36 + &:visited, 37 + &:hover, 38 + &:active { 39 + outline-style: none; 40 + } 41 42 text-decoration: none; 43 + &:hover { 44 + text-decoration: underline; 45 + } 46 47 transition: color 80ms linear; 48 } ··· 56 } 57 58 @font-face { 59 + font-family: "FontAwesomeExtra"; 60 + src: url("~@fonts/extra/extra.eot?1280178"); 61 + src: 62 + url("~@fonts/extra/extra.eot?1280178#iefix") format("embedded-opentype"), 63 + url("~@fonts/extra/extra.woff2?1280178") format("woff2"), 64 + url("~@fonts/extra/extra.woff?1280178") format("woff"), 65 + url("~@fonts/extra/extra.ttf?1280178") format("truetype"), 66 + url("~@fonts/extra/extra.svg?1280178#extra") format("svg"); 67 font-weight: normal; 68 font-style: normal; 69 } ··· 111 font-weight: 600; 112 } 113 114 + input[type="checkbox"], 115 + input[type="radio"] { 116 margin: 2px 0 0; 117 } 118 119 + a[disabled] { 120 + &:extend(.btn[disabled]); 121 + } 122 123 + .clickable-row { 124 + cursor: pointer; 125 + } 126 127 [data-visibility] { 128 will-change: opacity;
+3 -2
resources/css/bbcode.less
··· 35 position: relative; 36 37 &::before { 38 - content: ''; 39 position: absolute; 40 left: 0; 41 top: 0; ··· 77 max-width: 100%; 78 } 79 80 - ol, ul { 81 padding-left: 20px; 82 } 83
··· 35 position: relative; 36 37 &::before { 38 + content: ""; 39 position: absolute; 40 left: 0; 41 top: 0; ··· 77 max-width: 100%; 78 } 79 80 + ol, 81 + ul { 82 padding-left: 20px; 83 } 84
+3 -3
resources/css/bem/account-edit-entry.less
··· 37 // placeholder to prevent triggering dragleave when entring child element 38 &::after { 39 .full-size(); 40 - content: ''; 41 } 42 } 43 ··· 166 padding-left: (@label-width + 10px); 167 } 168 169 - .@{top}[data-form-error-state=error] & { 170 display: block; 171 } 172 } ··· 206 border-color: @osu-colour-l1; 207 } 208 209 - .@{top}[data-form-error-state=error] & { 210 border-color: @red; 211 } 212
··· 37 // placeholder to prevent triggering dragleave when entring child element 38 &::after { 39 .full-size(); 40 + content: ""; 41 } 42 } 43 ··· 166 padding-left: (@label-width + 10px); 167 } 168 169 + .@{top}[data-form-error-state="error"] & { 170 display: block; 171 } 172 } ··· 206 border-color: @osu-colour-l1; 207 } 208 209 + .@{top}[data-form-error-state="error"] & { 210 border-color: @red; 211 } 212
+2 -2
resources/css/bem/account-edit-status.less
··· 14 &--saved { 15 color: @green; 16 17 - [data-account-edit-state=saved] & { 18 opacity: 1; 19 } 20 } ··· 28 } 29 } 30 31 - [data-account-edit-state=saving] & { 32 opacity: 1; 33 } 34 }
··· 14 &--saved { 15 color: @green; 16 17 + [data-account-edit-state="saved"] & { 18 opacity: 1; 19 } 20 } ··· 28 } 29 } 30 31 + [data-account-edit-state="saving"] & { 32 opacity: 1; 33 } 34 }
+1 -1
resources/css/bem/account-edit.less
··· 26 &::after { 27 .inner-shadow-top(); 28 .full-size(); 29 - content: ''; 30 pointer-events: none; 31 } 32 }
··· 26 &::after { 27 .inner-shadow-top(); 28 .full-size(); 29 + content: ""; 30 pointer-events: none; 31 } 32 }
+2 -1
resources/css/bem/admin-contest-entry.less
··· 35 } 36 37 &__column { 38 - && { // bootstrap override 39 vertical-align: middle; 40 } 41
··· 35 } 36 37 &__column { 38 + && { 39 + // bootstrap override 40 vertical-align: middle; 41 } 42
+2 -1
resources/css/bem/admin-menu.less
··· 24 width: @admin-menu-icon-width; 25 background-color: #333; 26 27 - &:hover, &.js-menu--active { 28 background-color: @blue-darker; 29 } 30 }
··· 24 width: @admin-menu-icon-width; 25 background-color: #333; 26 27 + &:hover, 28 + &.js-menu--active { 29 background-color: @blue-darker; 30 } 31 }
+6 -2
resources/css/bem/artist-album.less
··· 42 &--new { 43 &::after { 44 .full-size(); 45 - content: ''; 46 - background: linear-gradient(to left, @osu-colour-orange-1 0%, transparent 30%) 47 } 48 } 49 }
··· 42 &--new { 43 &::after { 44 .full-size(); 45 + content: ""; 46 + background: linear-gradient( 47 + to left, 48 + @osu-colour-orange-1 0%, 49 + transparent 30% 50 + ); 51 } 52 } 53 }
+2 -1
resources/css/bem/artist-sidebar-album.less
··· 10 flex-direction: column; 11 align-items: center; 12 13 - &:hover, &:active { 14 color: white; 15 text-decoration: none; 16 }
··· 10 flex-direction: column; 11 align-items: center; 12 13 + &:hover, 14 + &:active { 15 color: white; 16 text-decoration: none; 17 }
+2 -1
resources/css/bem/artist-track-search-form-switches.less
··· 18 text-align: center; 19 white-space: nowrap; 20 21 - &:focus, &:active { 22 color: hsl(var(--hsl-c1)); 23 } 24
··· 18 text-align: center; 19 white-space: nowrap; 20 21 + &:focus, 22 + &:active { 23 color: hsl(var(--hsl-c1)); 24 } 25
+2 -1
resources/css/bem/artist-track-search-form.less
··· 53 text-align: center; 54 white-space: nowrap; 55 56 - &:focus, &:active { 57 color: hsl(var(--hsl-c1)); 58 } 59
··· 53 text-align: center; 54 white-space: nowrap; 55 56 + &:focus, 57 + &:active { 58 color: hsl(var(--hsl-c1)); 59 } 60
+5 -1
resources/css/bem/artist-track.less
··· 39 } 40 41 &--original { 42 - background-image: linear-gradient(to right, hsla(var(--hsl-pink-1), 0.2), hsla(var(--hsl-pink-1), 0) 50%); 43 } 44 45 &__button {
··· 39 } 40 41 &--original { 42 + background-image: linear-gradient( 43 + to right, 44 + hsla(var(--hsl-pink-1), 0.2), 45 + hsla(var(--hsl-pink-1), 0) 50% 46 + ); 47 } 48 49 &__button {
+6 -1
resources/css/bem/artist.less
··· 49 margin-bottom: 10px; 50 } 51 52 - > h1, h2, h3, h4, h5, h6 { 53 color: white; 54 } 55
··· 49 margin-bottom: 10px; 50 } 51 52 + > h1, 53 + h2, 54 + h3, 55 + h4, 56 + h5, 57 + h6 { 58 color: white; 59 } 60
+11 -8
resources/css/bem/audio-player.less
··· 6 7 @_height: 40px; 8 9 - --current-time: '0:00'; 10 - --duration: '0:00'; 11 --progress: 0; 12 13 height: @_height; ··· 104 border-radius: 10000px; 105 --current-head-opacity: 0; 106 --bar: 0; 107 - transition: height 100ms, opacity 100ms; 108 user-select: none; 109 position: relative; 110 111 // extended hover area 112 &::before { 113 position: absolute; 114 - content: ''; 115 display: block; 116 left: -5px; 117 right: $left; ··· 119 bottom: $top; 120 } 121 122 - &:hover, &[data-audio-dragging="1"] { 123 height: 6px; 124 --current-head-opacity: 1; 125 } ··· 156 background-color: @osu-colour-h1; 157 right: (-$width / 2); 158 top: calc(50% - ($width / 2)); 159 - content: ''; 160 display: block; 161 opacity: var(--current-head-opacity); 162 transition: inherit; ··· 177 min-width: (@_colon + @_number * 3); 178 179 &::before { 180 - content: var(--timestamp, ''); 181 } 182 183 .@{_top}[data-audio-time-format="minute"] & { ··· 203 204 &--total { 205 color: @osu-colour-c2; 206 - --timestamp: '--:--'; 207 208 .@{_top}[data-audio-has-duration="1"] & { 209 --timestamp: var(--duration);
··· 6 7 @_height: 40px; 8 9 + --current-time: "0:00"; 10 + --duration: "0:00"; 11 --progress: 0; 12 13 height: @_height; ··· 104 border-radius: 10000px; 105 --current-head-opacity: 0; 106 --bar: 0; 107 + transition: 108 + height 100ms, 109 + opacity 100ms; 110 user-select: none; 111 position: relative; 112 113 // extended hover area 114 &::before { 115 position: absolute; 116 + content: ""; 117 display: block; 118 left: -5px; 119 right: $left; ··· 121 bottom: $top; 122 } 123 124 + &:hover, 125 + &[data-audio-dragging="1"] { 126 height: 6px; 127 --current-head-opacity: 1; 128 } ··· 159 background-color: @osu-colour-h1; 160 right: (-$width / 2); 161 top: calc(50% - ($width / 2)); 162 + content: ""; 163 display: block; 164 opacity: var(--current-head-opacity); 165 transition: inherit; ··· 180 min-width: (@_colon + @_number * 3); 181 182 &::before { 183 + content: var(--timestamp, ""); 184 } 185 186 .@{_top}[data-audio-time-format="minute"] & { ··· 206 207 &--total { 208 color: @osu-colour-c2; 209 + --timestamp: "--:--"; 210 211 .@{_top}[data-audio-has-duration="1"] & { 212 --timestamp: var(--duration);
+7 -4
resources/css/bem/avatar.less
··· 99 box-shadow: none; 100 border-radius: 50%; 101 overflow: hidden; 102 - transition: width var(--header-pinned-animation-duration), height var(--header-pinned-animation-duration); 103 position: relative; 104 105 .@{header-pinned} & { ··· 107 height: @nav2-avatar-height--pinned; 108 } 109 110 - &.js-click-menu--active, &:hover { 111 box-shadow: inset 0 0 0 3px hsl(var(--hsl-c1)); 112 } 113 } ··· 126 &--restricted { 127 &::before { 128 .full-size(); 129 - content: ''; 130 - background-image: url('~@images/layout/exclamation-icon.svg'); 131 background-size: 60%; 132 background-position: center; 133 background-repeat: no-repeat;
··· 99 box-shadow: none; 100 border-radius: 50%; 101 overflow: hidden; 102 + transition: 103 + width var(--header-pinned-animation-duration), 104 + height var(--header-pinned-animation-duration); 105 position: relative; 106 107 .@{header-pinned} & { ··· 109 height: @nav2-avatar-height--pinned; 110 } 111 112 + &.js-click-menu--active, 113 + &:hover { 114 box-shadow: inset 0 0 0 3px hsl(var(--hsl-c1)); 115 } 116 } ··· 129 &--restricted { 130 &::before { 131 .full-size(); 132 + content: ""; 133 + background-image: url("~@images/layout/exclamation-icon.svg"); 134 background-size: 60%; 135 background-position: center; 136 background-repeat: no-repeat;
+1 -1
resources/css/bem/badge-achievement.less
··· 12 13 &--dynamic-height { 14 flex: none; 15 - width: (1em * @_big-width / @_big-height ); 16 height: 1em; 17 } 18
··· 12 13 &--dynamic-height { 14 flex: none; 15 + width: (1em * @_big-width / @_big-height); 16 height: 1em; 17 } 18
+13 -10
resources/css/bem/bbcode-editor.less
··· 51 font-size: @font-size--title-small; 52 } 53 54 - .@{_top}[data-state=preview] & { 55 display: none; 56 } 57 58 - .@{_top}[data-state=loading-preview] & { 59 opacity: 0.5; 60 pointer-events: none; 61 } 62 63 .@{_top}--beatmapset-description-editor & { 64 // approximation of 80vh - 3 lines of button bars and editor padding 65 - max-height: calc(80vh - 2 * @editor-padding - 2 * @content-padding - 3 * (1em + 2 * @buttons-margin)); 66 } 67 } 68 ··· 72 &--deactivate { 73 display: none; 74 75 - .js-forum-topic-reply[data-state=stick] & { 76 display: block; 77 } 78 } 79 80 &--hide-on-preview { 81 - .@{_top}[data-state=loading-preview] &, 82 - .@{_top}[data-state=preview] & { 83 display: none; 84 } 85 } 86 87 &--hide-on-write { 88 - .@{_top}[data-state=write] & { 89 display: none; 90 } 91 } ··· 102 } 103 104 &--toolbar { 105 - .@{_top}[data-state=loading-preview] &, 106 - .@{_top}[data-state=preview] & { 107 display: none; 108 } 109 } ··· 155 &__preview { 156 display: none; 157 158 - .@{_top}[data-state=preview] & { 159 display: block; 160 min-height: 0; 161 overflow-y: auto;
··· 51 font-size: @font-size--title-small; 52 } 53 54 + .@{_top}[data-state="preview"] & { 55 display: none; 56 } 57 58 + .@{_top}[data-state="loading-preview"] & { 59 opacity: 0.5; 60 pointer-events: none; 61 } 62 63 .@{_top}--beatmapset-description-editor & { 64 // approximation of 80vh - 3 lines of button bars and editor padding 65 + max-height: calc( 66 + 80vh - 2 * @editor-padding - 2 * @content-padding - 3 * 67 + (1em + 2 * @buttons-margin) 68 + ); 69 } 70 } 71 ··· 75 &--deactivate { 76 display: none; 77 78 + .js-forum-topic-reply[data-state="stick"] & { 79 display: block; 80 } 81 } 82 83 &--hide-on-preview { 84 + .@{_top}[data-state="loading-preview"] &, 85 + .@{_top}[data-state="preview"] & { 86 display: none; 87 } 88 } 89 90 &--hide-on-write { 91 + .@{_top}[data-state="write"] & { 92 display: none; 93 } 94 } ··· 105 } 106 107 &--toolbar { 108 + .@{_top}[data-state="loading-preview"] &, 109 + .@{_top}[data-state="preview"] & { 110 display: none; 111 } 112 } ··· 158 &__preview { 159 display: none; 160 161 + .@{_top}[data-state="preview"] & { 162 display: block; 163 min-height: 0; 164 overflow-y: auto;
+1 -1
resources/css/bem/beatmap-discussion-editor-insertion-menu.less
··· 11 pointer-events: none; // as to not impede text-selection/etc within the editor itself 12 13 &::before { 14 - content: ''; 15 background: @osu-colour-b3; 16 position: absolute; 17 top: 9px;
··· 11 pointer-events: none; // as to not impede text-selection/etc within the editor itself 12 13 &::before { 14 + content: ""; 15 background: @osu-colour-b3; 16 position: absolute; 17 top: 9px;
+3 -3
resources/css/bem/beatmap-discussion-editor.less
··· 19 position: relative; // Slate's placeholder element has width: 100% directly set on it... 20 21 .@{_top}--readonly & { 22 - &:hover .@{_top}__hover-menu { 23 - display: none; 24 - } 25 } 26 27 &:hover .@{_top}__hover-menu {
··· 19 position: relative; // Slate's placeholder element has width: 100% directly set on it... 20 21 .@{_top}--readonly & { 22 + &:hover .@{_top}__hover-menu { 23 + display: none; 24 + } 25 } 26 27 &:hover .@{_top}__hover-menu {
+5 -4
resources/css/bem/beatmap-discussion-post.less
··· 11 12 @_content-gutter-base: 15px; 13 14 - transition: background-color .1s ease-in-out; 15 // margin here instead of padding on __content to make Chrome anchor when images above load in. 16 // even 1 px margin is enough to fix the shifting. 17 margin: 10px 0; ··· 49 50 &::before { 51 .full-size(); 52 - content: ''; 53 background-color: hsl(var(--hsl-blue-3)); 54 width: 5px; 55 } ··· 185 186 .@{_top}--reply & { 187 &::after { 188 - content: ''; 189 height: 1px; 190 align-self: center; 191 flex: 1; ··· 223 min-height: 3em; 224 225 // --reply part to override top modifier 226 - &, .@{_top}--reply & { 227 font-size: @font-size--phone-input; 228 229 @media @desktop {
··· 11 12 @_content-gutter-base: 15px; 13 14 + transition: background-color 0.1s ease-in-out; 15 // margin here instead of padding on __content to make Chrome anchor when images above load in. 16 // even 1 px margin is enough to fix the shifting. 17 margin: 10px 0; ··· 49 50 &::before { 51 .full-size(); 52 + content: ""; 53 background-color: hsl(var(--hsl-blue-3)); 54 width: 5px; 55 } ··· 185 186 .@{_top}--reply & { 187 &::after { 188 + content: ""; 189 height: 1px; 190 align-self: center; 191 flex: 1; ··· 223 min-height: 3em; 224 225 // --reply part to override top modifier 226 + &, 227 + .@{_top}--reply & { 228 font-size: @font-size--phone-input; 229 230 @media @desktop {
+1 -1
resources/css/bem/beatmap-discussion-system-post.less
··· 19 // the fancy green line 20 &::after { 21 flex: 1; 22 - content: ''; 23 background-color: @resolved-color; 24 align-self: center; 25 height: 1px;
··· 19 // the fancy green line 20 &::after { 21 flex: 1; 22 + content: ""; 23 background-color: @resolved-color; 24 align-self: center; 25 height: 1px;
+1 -1
resources/css/bem/beatmap-discussion-user-card.less
··· 45 } 46 47 &__user-badge { 48 - min-height:16px; 49 margin-top: 2px; 50 } 51
··· 45 } 46 47 &__user-badge { 48 + min-height: 16px; 49 margin-top: 2px; 50 } 51
+4 -2
resources/css/bem/beatmap-discussion-vote.less
··· 11 font-size: 12px; 12 13 &--up { 14 - &, &:hover { 15 color: @osu-colour-lime-3; 16 } 17 } 18 19 &--down { 20 - &, &:hover { 21 color: @osu-colour-orange-2; 22 } 23 }
··· 11 font-size: 12px; 12 13 &--up { 14 + &, 15 + &:hover { 16 color: @osu-colour-lime-3; 17 } 18 } 19 20 &--down { 21 + &, 22 + &:hover { 23 color: @osu-colour-orange-2; 24 } 25 }
+19 -9
resources/css/bem/beatmap-discussion.less
··· 38 39 &::before { 40 .full-size(); 41 - content: ''; 42 width: 1px; 43 right: 100%; 44 - background-image: linear-gradient(to bottom, hsla(var(--hsl-b1), 0), @osu-colour-b1 50%, hsla(var(--hsl-b1), 0)); 45 } 46 } 47 } ··· 62 &::before { 63 @media @mobile { 64 overflow-anchor: none; 65 - content: ''; 66 position: absolute; 67 right: 0; 68 top: 0; ··· 76 .thicker-box-shadow(); 77 &::after { 78 .full-size(); 79 - content: ''; 80 background: fade(white, 15%); 81 pointer-events: none; 82 opacity: 0.5; 83 - animation: flash .5s; 84 @keyframes flash { 85 - 0% { opacity: 1; } 86 - 100% { opacity: 0.5; } 87 } 88 } 89 } ··· 147 // hopefully enough for type and resolve status icons. 148 width: 50px; 149 150 - .@{_top}--timeline &, .@{_top}--preview & { 151 // with timestamp, timeline's line and dot. 152 width: 110px; 153 } ··· 170 .@{_top}--unread & { 171 &::before { 172 .full-size(); 173 - content: ''; 174 background-color: @blue-darker; 175 width: 5px; 176 }
··· 38 39 &::before { 40 .full-size(); 41 + content: ""; 42 width: 1px; 43 right: 100%; 44 + background-image: linear-gradient( 45 + to bottom, 46 + hsla(var(--hsl-b1), 0), 47 + @osu-colour-b1 50%, 48 + hsla(var(--hsl-b1), 0) 49 + ); 50 } 51 } 52 } ··· 67 &::before { 68 @media @mobile { 69 overflow-anchor: none; 70 + content: ""; 71 position: absolute; 72 right: 0; 73 top: 0; ··· 81 .thicker-box-shadow(); 82 &::after { 83 .full-size(); 84 + content: ""; 85 background: fade(white, 15%); 86 pointer-events: none; 87 opacity: 0.5; 88 + animation: flash 0.5s; 89 @keyframes flash { 90 + 0% { 91 + opacity: 1; 92 + } 93 + 100% { 94 + opacity: 0.5; 95 + } 96 } 97 } 98 } ··· 156 // hopefully enough for type and resolve status icons. 157 width: 50px; 158 159 + .@{_top}--timeline &, 160 + .@{_top}--preview & { 161 // with timestamp, timeline's line and dot. 162 width: 110px; 163 } ··· 180 .@{_top}--unread & { 181 &::before { 182 .full-size(); 183 + content: ""; 184 background-color: @blue-darker; 185 width: 5px; 186 }
+3 -1
resources/css/bem/beatmap-discussions.less
··· 55 left: @_discussions-horizontal-padding; 56 57 width: @_timeline-line-width; 58 - height: calc(100% - (@_mode-circle-diameter + @_discussions-vertical-padding * 2)); 59 60 margin: 0 ((@_mode-circle-diameter - @_timeline-line-width) / 2); 61
··· 55 left: @_discussions-horizontal-padding; 56 57 width: @_timeline-line-width; 58 + height: calc( 59 + 100% - (@_mode-circle-diameter + @_discussions-vertical-padding * 2) 60 + ); 61 62 margin: 0 ((@_mode-circle-diameter - @_timeline-line-width) / 2); 63
+6 -3
resources/css/bem/beatmap-pack.less
··· 9 width: 100%; 10 margin: 2px 0; 11 12 - &.js-accordion__item--expanded, &--expanded { 13 .thicker-box-shadow(); 14 z-index: 1; 15 } ··· 43 background-color: @osu-colour-b3; 44 display: flex; 45 46 - .js-accordion__item--expanded &, .@{_top}--expanded & { 47 background-color: @osu-colour-b2; 48 } 49 ··· 53 } 54 55 &__name { 56 - .js-accordion__item--expanded &, .@{_top}--expanded & { 57 font-weight: 600; 58 } 59 }
··· 9 width: 100%; 10 margin: 2px 0; 11 12 + &.js-accordion__item--expanded, 13 + &--expanded { 14 .thicker-box-shadow(); 15 z-index: 1; 16 } ··· 44 background-color: @osu-colour-b3; 45 display: flex; 46 47 + .js-accordion__item--expanded &, 48 + .@{_top}--expanded & { 49 background-color: @osu-colour-b2; 50 } 51 ··· 55 } 56 57 &__name { 58 + .js-accordion__item--expanded &, 59 + .@{_top}--expanded & { 60 font-weight: 600; 61 } 62 }
+1 -1
resources/css/bem/beatmaps-popup.less
··· 20 } 21 22 &::before { 23 - content: ''; 24 .thick-box-shadow(); 25 border: 2px solid hsl(var(--hsl-h1)); 26 height: calc(100% + var(--panel-height));
··· 20 } 21 22 &::before { 23 + content: ""; 24 .thick-box-shadow(); 25 border: 2px solid hsl(var(--hsl-h1)); 26 height: calc(100% + var(--panel-height));
+42 -42
resources/css/bem/beatmapset-activities.less
··· 2 // See the LICENCE file in the repository root for full licence text. 3 4 .beatmapset-activities { 5 6 color: white; 7 8 - h2, h3 { 9 - color: white; 10 - } 11 12 - &__post-grow { 13 - flex-grow: 1; 14 - } 15 - 16 - &__discussion-post { 17 - display: flex; 18 - margin-bottom: 10px; 19 - } 20 21 - &__spinner { 22 - display: flex; 23 - flex: 1; 24 - justify-content: center; 25 - padding: 20px; 26 - } 27 28 - &__timeline-icon-margin { 29 - margin: 10px !important; 30 - } 31 32 - &__user-upvote-list { 33 - display: flex; 34 - flex-wrap: wrap; 35 - } 36 37 - &__user-upvote-panel { 38 - display: flex; 39 - margin: 10px; 40 - width: 200px; 41 - } 42 43 - &__vote-icon-spacer { 44 - margin: 10px 5px 10px 0px; 45 - } 46 47 - &__vote-link { 48 - pointer-events: auto; 49 - } 50 51 - &__vote-user-panel { 52 - width: 50px; 53 - flex-shrink: 0; 54 - } 55 56 - .js-usercard { 57 - pointer-events: auto; 58 - } 59 }
··· 2 // See the LICENCE file in the repository root for full licence text. 3 4 .beatmapset-activities { 5 + color: white; 6 7 + h2, 8 + h3 { 9 color: white; 10 + } 11 12 + &__post-grow { 13 + flex-grow: 1; 14 + } 15 16 + &__discussion-post { 17 + display: flex; 18 + margin-bottom: 10px; 19 + } 20 21 + &__spinner { 22 + display: flex; 23 + flex: 1; 24 + justify-content: center; 25 + padding: 20px; 26 + } 27 28 + &__timeline-icon-margin { 29 + margin: 10px !important; 30 + } 31 32 + &__user-upvote-list { 33 + display: flex; 34 + flex-wrap: wrap; 35 + } 36 37 + &__user-upvote-panel { 38 + display: flex; 39 + margin: 10px; 40 + width: 200px; 41 + } 42 43 + &__vote-icon-spacer { 44 + margin: 10px 5px 10px 0px; 45 + } 46 47 + &__vote-link { 48 + pointer-events: auto; 49 + } 50 51 + &__vote-user-panel { 52 + width: 50px; 53 + flex-shrink: 0; 54 + } 55 56 + .js-usercard { 57 + pointer-events: auto; 58 + } 59 }
+1 -1
resources/css/bem/beatmapset-beatmap-picker.less
··· 28 &::before { 29 .full-size(); 30 border-radius: @border-radius--large; 31 - content: ''; 32 background-color: hsla(var(--hsl-b6), 0.5); 33 width: calc(100% - @gutter); 34 height: calc(100% - @gutter);
··· 28 &::before { 29 .full-size(); 30 border-radius: @border-radius--large; 31 + content: ""; 32 background-color: hsla(var(--hsl-b6), 0.5); 33 width: calc(100% - @gutter); 34 height: calc(100% - @gutter);
+4 -4
resources/css/bem/beatmapset-cover-admin.less
··· 1 // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 2 // See the LICENCE file in the repository root for full licence text. 3 4 - .beatmapset-cover-admin { 5 - &__img { 6 - max-width: 100%; 7 - } 8 }
··· 1 // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 2 // See the LICENCE file in the repository root for full licence text. 3 4 + .beatmapset-cover-admin { 5 + &__img { 6 + max-width: 100%; 7 } 8 + }
+2 -2
resources/css/bem/beatmapset-cover.less
··· 7 width: 45px; 8 height: 30px; 9 border-radius: var(--border-radius, 6px); 10 - .at2x('~@images/layout/beatmaps/default-bg.png'); 11 background-position: center; 12 background-size: cover; 13 vertical-align: middle; ··· 15 16 &::before { 17 .full-size(); 18 - content: ''; 19 border-radius: inherit; 20 background-image: var(--bg); 21 background-position: center;
··· 7 width: 45px; 8 height: 30px; 9 border-radius: var(--border-radius, 6px); 10 + .at2x("~@images/layout/beatmaps/default-bg.png"); 11 background-position: center; 12 background-size: cover; 13 vertical-align: middle; ··· 15 16 &::before { 17 .full-size(); 18 + content: ""; 19 border-radius: inherit; 20 background-image: var(--bg); 21 background-position: center;
+9 -4
resources/css/bem/beatmapset-discussions-chart.less
··· 13 14 &::before { 15 --border-size: 2px; 16 - content: ''; 17 position: absolute; 18 width: 100%; 19 bottom: 0; ··· 43 44 &::before { 45 display: block; 46 - content: ''; 47 flex: 1; 48 width: 1px; 49 - background-image: linear-gradient(to top, hsl(var(--hsl-c1)), hsl(var(--hsl-c1)) 10%, hsla(var(--hsl-c1), 0) 70%); 50 transform: scaleX(var(--line-scale)); 51 } 52 53 &::after { 54 .fa(); 55 - content: var(--icon, ''); 56 font-size: 12px; // icon size 57 font-weight: var(--icon-weight); 58 color: var(--icon-colour);
··· 13 14 &::before { 15 --border-size: 2px; 16 + content: ""; 17 position: absolute; 18 width: 100%; 19 bottom: 0; ··· 43 44 &::before { 45 display: block; 46 + content: ""; 47 flex: 1; 48 width: 1px; 49 + background-image: linear-gradient( 50 + to top, 51 + hsl(var(--hsl-c1)), 52 + hsl(var(--hsl-c1)) 10%, 53 + hsla(var(--hsl-c1), 0) 70% 54 + ); 55 transform: scaleX(var(--line-scale)); 56 } 57 58 &::after { 59 .fa(); 60 + content: var(--icon, ""); 61 font-size: 12px; // icon size 62 font-weight: var(--icon-weight); 63 color: var(--icon-colour);
+6 -2
resources/css/bem/beatmapset-header.less
··· 147 color: #fff; 148 149 &--favourites { 150 - &:hover, &:visited, &:link, &:active { 151 text-decoration: none; 152 color: #fff; 153 } ··· 158 } 159 160 &--favourited { 161 - &:hover, &:link { 162 color: @pink-darker; 163 } 164 }
··· 147 color: #fff; 148 149 &--favourites { 150 + &:hover, 151 + &:visited, 152 + &:link, 153 + &:active { 154 text-decoration: none; 155 color: #fff; 156 } ··· 161 } 162 163 &--favourited { 164 + &:hover, 165 + &:link { 166 color: @pink-darker; 167 } 168 }
+39 -17
resources/css/bem/beatmapset-panel.less
··· 3 4 .beatmapset-panel { 5 .desktop-hover() { 6 - --info-bg: linear-gradient(0.25turn, hsl(var(--hsl-b4)), hsla(var(--hsl-b4), 0.8)); 7 --menu-opacity: 1; 8 --menu-container-width: @_menu-width-visible; 9 --play-bg: hsla(var(--hsl-b6), 0.8); ··· 18 19 // Extend by 1px on respective corner to prevent gap on some zoom levels. 20 // Sizing is based on @border-radius--large. 21 - @_top-left-inverted-corner-path: path('M-1 -1 L-1 10 L0 10 A10 10 0 0 1 10 0 L10 -1 Z'); 22 - @_bottom-left-inverted-corner-path: path('M-1 11 L-1 0 L0 0 A10 10 0 0 0 10 10 L10 11 Z'); 23 - @_top-right-inverted-corner-path: path('M11 -1 L11 10 L10 10 A10 10 0 0 0 0 0 L0 -1 Z'); 24 - @_bottom-right-inverted-corner-path: path('M11 11 L11 0 L10 0 A10 10 0 0 1 0 10 L 0 11 Z'); 25 26 --border-cover-opacity: 0; 27 // For elements which provide overall beatmap link. ··· 46 --play-icon-opacity: 0; 47 --play-width: 80px; 48 --source-display: flex; 49 - --stats-grid-template: "hype nominations favourite-count play-count date" / auto auto auto auto auto; 50 --stats-opacity: 1; 51 --transition: all 150ms ease-in-out; 52 ··· 60 61 @media @desktop { 62 --global-beatmap-link-pointer-events: auto; 63 - --info-bg: linear-gradient(0.25turn, hsl(var(--hsl-b2)), hsla(var(--hsl-b2), 0.8)); 64 --menu-bg: hsl(var(--hsl-b3)); 65 --menu-container-width: @_menu-width; 66 --main-height: 100%; ··· 75 76 // hide bottom radius when cover is shown 77 &::before { 78 - content: ''; 79 background-color: inherit; 80 height: @border-radius--large; 81 width: 100%; ··· 114 &--size-extra { 115 @media @desktop { 116 --panel-height: @beatmapset-panel-extra-height-desktop; 117 - --stats-grid-template: "favourite-count hype date" "play-count nominations ." / auto auto auto; 118 --stats-opacity: 1; 119 --play-width: 140px; 120 } ··· 183 184 // solid cover for mobile 185 &::after { 186 - content: ''; 187 position: absolute; 188 display: block; 189 width: calc(100% - var(--play-width)); ··· 220 flex-direction: column; 221 // Adjust radius to prevent bleeding of the underneath cover 222 // when hover background (of &__play) is active. 223 - border-radius: (@border-radius--large - 1px) 0 0 (@border-radius--large - 1px); 224 } 225 226 &__info-row { ··· 266 font-weight: bold; 267 268 &::after { 269 - content: '\a0'; 270 } 271 } 272 ··· 324 overflow: visible; 325 } 326 327 - &::after, &::before { 328 - content: ''; 329 width: @border-radius--large; 330 height: $width; 331 position: absolute; ··· 406 position: relative; 407 // Adjust radius to prevent bleeding of the underneath cover 408 // when hover background is active. 409 - border-radius: (@border-radius--large - 1px) 0 0 (@border-radius--large - 1px); 410 411 - &::after, &::before { 412 - content: ''; 413 width: @border-radius--large; 414 height: $width; 415 position: absolute;
··· 3 4 .beatmapset-panel { 5 .desktop-hover() { 6 + --info-bg: linear-gradient( 7 + 0.25turn, 8 + hsl(var(--hsl-b4)), 9 + hsla(var(--hsl-b4), 0.8) 10 + ); 11 --menu-opacity: 1; 12 --menu-container-width: @_menu-width-visible; 13 --play-bg: hsla(var(--hsl-b6), 0.8); ··· 22 23 // Extend by 1px on respective corner to prevent gap on some zoom levels. 24 // Sizing is based on @border-radius--large. 25 + @_top-left-inverted-corner-path: path( 26 + "M-1 -1 L-1 10 L0 10 A10 10 0 0 1 10 0 L10 -1 Z" 27 + ); 28 + @_bottom-left-inverted-corner-path: path( 29 + "M-1 11 L-1 0 L0 0 A10 10 0 0 0 10 10 L10 11 Z" 30 + ); 31 + @_top-right-inverted-corner-path: path( 32 + "M11 -1 L11 10 L10 10 A10 10 0 0 0 0 0 L0 -1 Z" 33 + ); 34 + @_bottom-right-inverted-corner-path: path( 35 + "M11 11 L11 0 L10 0 A10 10 0 0 1 0 10 L 0 11 Z" 36 + ); 37 38 --border-cover-opacity: 0; 39 // For elements which provide overall beatmap link. ··· 58 --play-icon-opacity: 0; 59 --play-width: 80px; 60 --source-display: flex; 61 + --stats-grid-template: "hype nominations favourite-count play-count date" / 62 + auto auto auto auto auto; 63 --stats-opacity: 1; 64 --transition: all 150ms ease-in-out; 65 ··· 73 74 @media @desktop { 75 --global-beatmap-link-pointer-events: auto; 76 + --info-bg: linear-gradient( 77 + 0.25turn, 78 + hsl(var(--hsl-b2)), 79 + hsla(var(--hsl-b2), 0.8) 80 + ); 81 --menu-bg: hsl(var(--hsl-b3)); 82 --menu-container-width: @_menu-width; 83 --main-height: 100%; ··· 92 93 // hide bottom radius when cover is shown 94 &::before { 95 + content: ""; 96 background-color: inherit; 97 height: @border-radius--large; 98 width: 100%; ··· 131 &--size-extra { 132 @media @desktop { 133 --panel-height: @beatmapset-panel-extra-height-desktop; 134 + --stats-grid-template: "favourite-count hype date" 135 + "play-count nominations ." / auto auto auto; 136 --stats-opacity: 1; 137 --play-width: 140px; 138 } ··· 201 202 // solid cover for mobile 203 &::after { 204 + content: ""; 205 position: absolute; 206 display: block; 207 width: calc(100% - var(--play-width)); ··· 238 flex-direction: column; 239 // Adjust radius to prevent bleeding of the underneath cover 240 // when hover background (of &__play) is active. 241 + border-radius: (@border-radius--large - 1px) 0 0 242 + (@border-radius--large - 1px); 243 } 244 245 &__info-row { ··· 285 font-weight: bold; 286 287 &::after { 288 + content: "\a0"; 289 } 290 } 291 ··· 343 overflow: visible; 344 } 345 346 + &::after, 347 + &::before { 348 + content: ""; 349 width: @border-radius--large; 350 height: $width; 351 position: absolute; ··· 426 position: relative; 427 // Adjust radius to prevent bleeding of the underneath cover 428 // when hover background is active. 429 + border-radius: (@border-radius--large - 1px) 0 0 430 + (@border-radius--large - 1px); 431 432 + &::after, 433 + &::before { 434 + content: ""; 435 width: @border-radius--large; 436 height: $width; 437 position: absolute;
+1 -1
resources/css/bem/beatmapsets-search.less
··· 36 37 &::after { 38 .full-size(); 39 - content: ''; 40 background-color: hsla(var(--hsl-b1), 80%); 41 } 42 }
··· 36 37 &::after { 38 .full-size(); 39 + content: ""; 40 background-color: hsla(var(--hsl-b1), 80%); 41 } 42 }
+1 -1
resources/css/bem/bootstrap/modal-header.less
··· 27 .default-text-shadow(); 28 font-style: normal; 29 font-size: 24px; 30 - color: #FFF; 31 32 position: absolute; 33 margin: 10px;
··· 27 .default-text-shadow(); 28 font-style: normal; 29 font-size: 24px; 30 + color: #fff; 31 32 position: absolute; 33 margin: 10px;
+5 -3
resources/css/bem/btn-circle.less
··· 92 93 .link-hover({ 94 box-shadow: none; 95 - }) 96 } 97 98 &--page-toggle-detail { ··· 120 } 121 } 122 123 - &--activated, &.js-activated { 124 background-color: @osu-colour-h2; 125 color: @osu-colour-b5; 126 ··· 191 opacity: var(--normal-opacity); 192 transition: var(--transition); 193 194 - .@{top}:hover &, .@{top}:active & { 195 opacity: var(--hover-opacity); 196 } 197
··· 92 93 .link-hover({ 94 box-shadow: none; 95 + }); 96 } 97 98 &--page-toggle-detail { ··· 120 } 121 } 122 123 + &--activated, 124 + &.js-activated { 125 background-color: @osu-colour-h2; 126 color: @osu-colour-b5; 127 ··· 192 opacity: var(--normal-opacity); 193 transition: var(--transition); 194 195 + .@{top}:hover &, 196 + .@{top}:active & { 197 opacity: var(--hover-opacity); 198 } 199
+13 -4
resources/css/bem/btn-home.less
··· 6 .link-white(); 7 8 border-radius: @border-radius-large; 9 - background-image: url('~@images/backgrounds/button.svg'); 10 background-size: 175%; 11 background-position: center; 12 ··· 28 --bg-move: 0px; 29 --border-size: 3px; 30 --move: 0px; 31 - --inset-colour: hsl(var(--colour-h), var(--colour-s), calc(var(--colour-l) - 10%)); 32 33 transform: translate(0, var(--move)); 34 - background-color: hsl(var(--colour-h), var(--colour-s), calc(var(--colour-l) + var(--bg-l-adjust))); 35 background-position: calc(50% + var(--bg-move)) 50%; 36 37 box-shadow: 38 0 calc(var(--border-size) - var(--move)) var(--inset-colour), 39 - 0 calc(var(--border-size) + @box-shadow-y - var(--move)) @box-shadow-radius @box-shadow-color; 40 41 &:focus { 42 --bg-move: -10px;
··· 6 .link-white(); 7 8 border-radius: @border-radius-large; 9 + background-image: url("~@images/backgrounds/button.svg"); 10 background-size: 175%; 11 background-position: center; 12 ··· 28 --bg-move: 0px; 29 --border-size: 3px; 30 --move: 0px; 31 + --inset-colour: hsl( 32 + var(--colour-h), 33 + var(--colour-s), 34 + calc(var(--colour-l) - 10%) 35 + ); 36 37 transform: translate(0, var(--move)); 38 + background-color: hsl( 39 + var(--colour-h), 40 + var(--colour-s), 41 + calc(var(--colour-l) + var(--bg-l-adjust)) 42 + ); 43 background-position: calc(50% + var(--bg-move)) 50%; 44 45 box-shadow: 46 0 calc(var(--border-size) - var(--move)) var(--inset-colour), 47 + 0 calc(var(--border-size) + @box-shadow-y - var(--move)) @box-shadow-radius 48 + @box-shadow-color; 49 50 &:focus { 51 --bg-move: -10px;
+8 -4
resources/css/bem/btn-osu-big.less
··· 53 background: var(--active-bg); 54 } 55 56 - &[disabled], &--disabled { 57 cursor: default; 58 background: var(--disabled-bg); 59 color: var(--disabled-colour); ··· 165 flex-direction: column; 166 --bg-colour: hsl(var(--hsl-blue-3)); 167 --bg: var(--bg-colour) center/150% url("~@images/backgrounds/button.svg"); 168 - --hover-bg: var(--bg-colour) calc(50% - 20px) 50%/150% url("~@images/backgrounds/button.svg"); 169 } 170 171 &--download-lazer { ··· 373 white-space: normal; 374 } 375 376 - &--activated, &.js-activated { 377 --bg: hsl(var(--hsl-h2)); 378 --colour: hsl(var(--hsl-c1)); 379 --hover-colour: hsl(var(--hsl-c1)); ··· 424 justify-content: center; 425 } 426 427 - .@{top}--comment-editor, .@{top}--chat-send & { 428 font-size: 120%; 429 } 430
··· 53 background: var(--active-bg); 54 } 55 56 + &[disabled], 57 + &--disabled { 58 cursor: default; 59 background: var(--disabled-bg); 60 color: var(--disabled-colour); ··· 166 flex-direction: column; 167 --bg-colour: hsl(var(--hsl-blue-3)); 168 --bg: var(--bg-colour) center/150% url("~@images/backgrounds/button.svg"); 169 + --hover-bg: var(--bg-colour) calc(50% - 20px) 50%/150% 170 + url("~@images/backgrounds/button.svg"); 171 } 172 173 &--download-lazer { ··· 375 white-space: normal; 376 } 377 378 + &--activated, 379 + &.js-activated { 380 --bg: hsl(var(--hsl-h2)); 381 --colour: hsl(var(--hsl-c1)); 382 --hover-colour: hsl(var(--hsl-c1)); ··· 427 justify-content: center; 428 } 429 430 + .@{top}--comment-editor, 431 + .@{top}--chat-send & { 432 font-size: 120%; 433 } 434
+13 -3
resources/css/bem/chat-conversation-list-item.less
··· 18 19 @media @desktop { 20 &:hover { 21 - background: linear-gradient(to right, @osu-colour-b5 @tile-margin, @osu-colour-b3 33%, @osu-colour-b3 100%); 22 } 23 } 24 ··· 29 30 &--selected { 31 color: white; 32 - background: linear-gradient(to right, @osu-colour-b5 @tile-margin, @osu-colour-b4 33%, @osu-colour-b4 100%); 33 @media @mobile { 34 background: @osu-colour-b4; 35 } ··· 91 opacity: 0.5; 92 .full-size(); 93 border-radius: 1px; 94 - content: ''; 95 box-shadow: 0 0 5px lighten(@green, 10%); 96 animation: glow-pulse 2s infinite; 97 }
··· 18 19 @media @desktop { 20 &:hover { 21 + background: linear-gradient( 22 + to right, 23 + @osu-colour-b5 @tile-margin, 24 + @osu-colour-b3 33%, 25 + @osu-colour-b3 100% 26 + ); 27 } 28 } 29 ··· 34 35 &--selected { 36 color: white; 37 + background: linear-gradient( 38 + to right, 39 + @osu-colour-b5 @tile-margin, 40 + @osu-colour-b4 33%, 41 + @osu-colour-b4 100% 42 + ); 43 @media @mobile { 44 background: @osu-colour-b4; 45 } ··· 101 opacity: 0.5; 102 .full-size(); 103 border-radius: 1px; 104 + content: ""; 105 box-shadow: 0 0 5px lighten(@green, 10%); 106 animation: glow-pulse 2s infinite; 107 }
+5 -4
resources/css/bem/chat-conversation-panel.less
··· 8 position: relative; 9 10 @media @mobile { 11 - overflow-y: hidden; // Needed to limit the height of the panel so chat-conversation is scrollable and 12 - // chat-conversation-list doesn't become 0 height on mobile. 13 - // height: 100% alone doesn't work. 14 - // The panel itself should not be scrollable. 15 } 16 17 &__instructions {
··· 8 position: relative; 9 10 @media @mobile { 11 + // Needed to limit the height of the panel so chat-conversation is scrollable and 12 + // chat-conversation-list doesn't become 0 height on mobile. 13 + // height: 100% alone doesn't work. 14 + // The panel itself should not be scrollable. 15 + overflow-y: hidden; 16 } 17 18 &__instructions {
+3 -3
resources/css/bem/chat-conversation.less
··· 12 -webkit-overflow-scrolling: touch; 13 14 &::after { 15 - content: ''; 16 display: block; 17 padding-bottom: 80px; 18 ··· 80 height: 1.5em; 81 82 &::before { 83 - content: ''; 84 background: @osu-colour-h1; 85 position: absolute; 86 left: 0; ··· 93 content: attr(data-content); 94 position: relative; 95 display: inline-block; 96 - padding: 0 .5em; 97 line-height: 1.5em; 98 color: @osu-colour-h1; 99 background-color: @osu-colour-b4;
··· 12 -webkit-overflow-scrolling: touch; 13 14 &::after { 15 + content: ""; 16 display: block; 17 padding-bottom: 80px; 18 ··· 80 height: 1.5em; 81 82 &::before { 83 + content: ""; 84 background: @osu-colour-h1; 85 position: absolute; 86 left: 0; ··· 93 content: attr(data-content); 94 position: relative; 95 display: inline-block; 96 + padding: 0 0.5em; 97 line-height: 1.5em; 98 color: @osu-colour-h1; 99 background-color: @osu-colour-b4;
+9 -3
resources/css/bem/chat-input.less
··· 7 bottom: 0; 8 text-align: right; 9 10 - background: linear-gradient(to bottom, hsla(var(--hsl-b4), 0), hsla(var(--hsl-b4), 0.95) 40%, hsla(var(--hsl-b4), 0.95) 100%); 11 - width: calc(100% - 20px); // this prevents the gradient drawing over the browser's scroll-bar 12 padding: 10px 30px 15px 50px; 13 14 align-items: center; ··· 18 position: fixed; 19 font-size: 16px; 20 padding-right: 0; 21 - padding-left: 20px 22 } 23 24 &__box {
··· 7 bottom: 0; 8 text-align: right; 9 10 + background: linear-gradient( 11 + to bottom, 12 + hsla(var(--hsl-b4), 0), 13 + hsla(var(--hsl-b4), 0.95) 40%, 14 + hsla(var(--hsl-b4), 0.95) 100% 15 + ); 16 + // this prevents the gradient drawing over the browser's scroll-bar 17 + width: calc(100% - 20px); 18 padding: 10px 30px 15px 50px; 19 20 align-items: center; ··· 24 position: fixed; 25 font-size: 16px; 26 padding-right: 0; 27 + padding-left: 20px; 28 } 29 30 &__box {
-1
resources/css/bem/chat-message-item.less
··· 22 } 23 } 24 } 25 -
··· 22 } 23 } 24 }
+1 -2
resources/css/bem/circular-progress.less
··· 71 margin-top: @thickness; 72 margin-left: @thickness; 73 display: block; 74 - content: ''; 75 border-radius: 50%; 76 background-color: var(--circle-center-fill); 77 width: 1em - (@thickness * 2); ··· 89 color: var(--label-colour); 90 display: var(--label-display); 91 } 92 - 93 94 &__circle { 95 position: absolute;
··· 71 margin-top: @thickness; 72 margin-left: @thickness; 73 display: block; 74 + content: ""; 75 border-radius: 50%; 76 background-color: var(--circle-center-fill); 77 width: 1em - (@thickness * 2); ··· 89 color: var(--label-colour); 90 display: var(--label-display); 91 } 92 93 &__circle { 94 position: absolute;
+6 -2
resources/css/bem/comment.less
··· 154 155 &::after { 156 display: block; 157 - content: ''; 158 position: absolute; 159 bottom: 0; 160 left: 0; 161 width: 100%; 162 height: calc(var(--line-height) * 3); 163 - background-image: linear-gradient(to bottom, hsla(var(--comments-bg-hsl), 0), hsl(var(--comments-bg-hsl))); 164 pointer-events: none; 165 } 166 }
··· 154 155 &::after { 156 display: block; 157 + content: ""; 158 position: absolute; 159 bottom: 0; 160 left: 0; 161 width: 100%; 162 height: calc(var(--line-height) * 3); 163 + background-image: linear-gradient( 164 + to bottom, 165 + hsla(var(--comments-bg-hsl), 0), 166 + hsl(var(--comments-bg-hsl)) 167 + ); 168 pointer-events: none; 169 } 170 }
+14 -5
resources/css/bem/contest-art-entry.less
··· 92 } 93 94 &__thumbnail { 95 - width: calc(var(--thumbnail-size) * var(--thumbnail-scale) * var(--thumbnail-width-multiplier)); 96 - height: calc(var(--thumbnail-size) * var(--thumbnail-scale) * var(--thumbnail-height-multiplier)); 97 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25); 98 background-size: cover; 99 background-position: top; ··· 113 } 114 115 &__vote-link-banner { 116 - --base-size: calc(0.25 * var(--thumbnail-size) * var(--vote-link-banner-scale)); 117 position: absolute; 118 right: 0; 119 bottom: 0; ··· 125 justify-content: center; 126 127 &::before { 128 - content: ''; 129 position: absolute; 130 width: 100%; 131 height: 100%; 132 border-style: solid; 133 border-width: 0 0 var(--base-size) var(--base-size); 134 - border-color: transparent transparent var(--vote-link-banner-bg) transparent; 135 } 136 } 137 }
··· 92 } 93 94 &__thumbnail { 95 + width: calc( 96 + var(--thumbnail-size) * var(--thumbnail-scale) * 97 + var(--thumbnail-width-multiplier) 98 + ); 99 + height: calc( 100 + var(--thumbnail-size) * var(--thumbnail-scale) * 101 + var(--thumbnail-height-multiplier) 102 + ); 103 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25); 104 background-size: cover; 105 background-position: top; ··· 119 } 120 121 &__vote-link-banner { 122 + --base-size: calc( 123 + 0.25 * var(--thumbnail-size) * var(--vote-link-banner-scale) 124 + ); 125 position: absolute; 126 right: 0; 127 bottom: 0; ··· 133 justify-content: center; 134 135 &::before { 136 + content: ""; 137 position: absolute; 138 width: 100%; 139 height: 100%; 140 border-style: solid; 141 border-width: 0 0 var(--base-size) var(--base-size); 142 + border-color: transparent transparent var(--vote-link-banner-bg) 143 + transparent; 144 } 145 } 146 }
+1 -1
resources/css/bem/contest-judge-entry-range-input.less
··· 5 margin-top: 10px; 6 max-width: 500px; 7 8 - input[type='range'] { 9 -webkit-appearance: none; 10 appearance: none; 11 background: transparent;
··· 5 margin-top: 10px; 6 max-width: 500px; 7 8 + input[type="range"] { 9 -webkit-appearance: none; 10 appearance: none; 11 background: transparent;
+3 -1
resources/css/bem/contest-list-item.less
··· 19 height: 90px; 20 } 21 22 - &:active, &:focus, &:hover { 23 color: white; 24 text-decoration: none; 25 }
··· 19 height: 90px; 20 } 21 22 + &:active, 23 + &:focus, 24 + &:hover { 25 color: white; 26 text-decoration: none; 27 }
+2 -1
resources/css/bem/contest-userentry.less
··· 21 } 22 23 &--new { 24 - &:hover, .@{_top}--dragndrop-hover& { 25 background-color: @osu-colour-b3; 26 transform: scale(1.01); 27 }
··· 21 } 22 23 &--new { 24 + &:hover, 25 + .@{_top}--dragndrop-hover& { 26 background-color: @osu-colour-b3; 27 transform: scale(1.01); 28 }
+18 -7
resources/css/bem/contest.less
··· 15 padding-top: 20px; 16 padding-bottom: 20px; 17 18 - > h1, h2, h3, h4, h5, h6 { 19 color: @osu-colour-c1; 20 } 21 } ··· 55 padding: 10px; 56 57 color: white; 58 - &:hover, &:visited, &:link, &:active { 59 color: white; 60 text-decoration: none; 61 } ··· 64 &__section-toggle { 65 transition: all 300ms; 66 transform: rotateZ(0deg); 67 - .@{_top}__group-heading[aria-expanded='true'] & { 68 transform: rotateZ(180deg); 69 } 70 } ··· 97 width: 32px; 98 &--art { 99 width: inherit; 100 - margin-right: 10px 101 } 102 } 103 ··· 123 .center-content(); 124 color: rgba(1, 1, 1, 0.5); 125 126 - &:hover, &:focus { 127 color: rgba(1, 1, 1, 0.75); 128 font-size: inherit; 129 text-decoration: none; ··· 143 &--selected { 144 font-size: inherit; 145 color: @contest-selected-colour; 146 - &:hover, &:focus { 147 color: fade(@contest-selected-colour, 75%); 148 } 149 } ··· 151 &--selected-art { 152 font-size: inherit; 153 color: white; 154 - &:hover, &:focus { 155 color: fade(white, 50%); 156 } 157 }
··· 15 padding-top: 20px; 16 padding-bottom: 20px; 17 18 + > h1, 19 + h2, 20 + h3, 21 + h4, 22 + h5, 23 + h6 { 24 color: @osu-colour-c1; 25 } 26 } ··· 60 padding: 10px; 61 62 color: white; 63 + &:hover, 64 + &:visited, 65 + &:link, 66 + &:active { 67 color: white; 68 text-decoration: none; 69 } ··· 72 &__section-toggle { 73 transition: all 300ms; 74 transform: rotateZ(0deg); 75 + .@{_top}__group-heading[aria-expanded="true"] & { 76 transform: rotateZ(180deg); 77 } 78 } ··· 105 width: 32px; 106 &--art { 107 width: inherit; 108 + margin-right: 10px; 109 } 110 } 111 ··· 131 .center-content(); 132 color: rgba(1, 1, 1, 0.5); 133 134 + &:hover, 135 + &:focus { 136 color: rgba(1, 1, 1, 0.75); 137 font-size: inherit; 138 text-decoration: none; ··· 152 &--selected { 153 font-size: inherit; 154 color: @contest-selected-colour; 155 + &:hover, 156 + &:focus { 157 color: fade(@contest-selected-colour, 75%); 158 } 159 } ··· 161 &--selected-art { 162 font-size: inherit; 163 color: white; 164 + &:hover, 165 + &:focus { 166 color: fade(white, 50%); 167 } 168 }
+3 -3
resources/css/bem/dialog-form.less
··· 99 } 100 101 &__logo { 102 - background-image: url('~@images/layout/osu-logo-white.svg'); 103 background-position: contain; 104 105 flex: none; ··· 138 color: @purple-light; 139 140 &::after { 141 - content: '\a0'; // prevent div from collapsing when empty 142 } 143 } 144 ··· 148 } 149 150 &--header { 151 - .at2x-simple('~@images/headers/oauth-login.jpg'); 152 .center-content(); 153 margin-left: 0; 154 margin-right: 0;
··· 99 } 100 101 &__logo { 102 + background-image: url("~@images/layout/osu-logo-white.svg"); 103 background-position: contain; 104 105 flex: none; ··· 138 color: @purple-light; 139 140 &::after { 141 + content: "\a0"; // prevent div from collapsing when empty 142 } 143 } 144 ··· 148 } 149 150 &--header { 151 + .at2x-simple("~@images/headers/oauth-login.jpg"); 152 .center-content(); 153 margin-left: 0; 154 margin-right: 0;
+4 -3
resources/css/bem/download-page-header.less
··· 51 pointer-events: none; 52 53 &::before { 54 - content: '•'; 55 } 56 } 57 } ··· 87 } 88 } 89 90 - &::after, &::before { 91 - content: ''; 92 display: block; 93 flex: 1; 94 background-color: hsl(var(--hsl-b2));
··· 51 pointer-events: none; 52 53 &::before { 54 + content: "•"; 55 } 56 } 57 } ··· 87 } 88 } 89 90 + &::after, 91 + &::before { 92 + content: ""; 93 display: block; 94 flex: 1; 95 background-color: hsl(var(--hsl-b2));
+1 -1
resources/css/bem/download-page.less
··· 25 26 @media @desktop { 27 flex-direction: row; 28 - justify-content: space-between; 29 } 30 } 31
··· 25 26 @media @desktop { 27 flex-direction: row; 28 + justify-content: space-between; 29 } 30 } 31
+3 -2
resources/css/bem/flag-country.less
··· 3 4 .flag-country { 5 --height: 1em; 6 - --width-height-ratio: calc(100 / 72); // Original flag svg ratio; using a different ratio turns the flag into a blurry mess on Chrome. 7 8 height: var(--height); 9 width: calc(var(--height) * var(--width-height-ratio)); ··· 23 border-radius: inherit; 24 filter: contrast(0) brightness(2); 25 opacity: 0.25; 26 - content: ''; 27 } 28 29 &--flat {
··· 3 4 .flag-country { 5 --height: 1em; 6 + // Original flag svg ratio; using a different ratio turns the flag into a blurry mess on Chrome. 7 + --width-height-ratio: calc(100 / 72); 8 9 height: var(--height); 10 width: calc(var(--height) * var(--width-height-ratio)); ··· 24 border-radius: inherit; 25 filter: contrast(0) brightness(2); 26 opacity: 0.25; 27 + content: ""; 28 } 29 30 &--flat {
+3 -1
resources/css/bem/footer.less
··· 38 margin-bottom: 5px; 39 } 40 41 - &:hover, &:focus, &:active { 42 color: @osu-colour-l1; 43 } 44
··· 38 margin-bottom: 5px; 39 } 40 41 + &:hover, 42 + &:focus, 43 + &:active { 44 color: @osu-colour-l1; 45 } 46
+1 -1
resources/css/bem/form-select.less
··· 26 &::after { 27 .fas(); 28 .center-content(); 29 - content: '\f078'; 30 padding: 0 10px; 31 position: absolute; 32 right: 0;
··· 26 &::after { 27 .fas(); 28 .center-content(); 29 + content: "\f078"; 30 padding: 0 10px; 31 position: absolute; 32 right: 0;
+1 -1
resources/css/bem/forum-cover-edit.less
··· 22 } 23 24 &__cover { 25 - .at2x-simple('~@images/headers/forum-topic-covers/forum-cover-category-osu.jpg'); 26 width: 100%; 27 border-radius: @border-radius-large; 28 height: 0;
··· 22 } 23 24 &__cover { 25 + .at2x-simple("~@images/headers/forum-topic-covers/forum-cover-category-osu.jpg"); 26 width: 100%; 27 border-radius: @border-radius-large; 28 height: 0;
+4 -3
resources/css/bem/forum-item-stripe.less
··· 14 transition: @forum-item-animate; 15 16 &::after { 17 - content: ''; 18 .full-size(); 19 border-radius: @border-radius-base 0 0 @border-radius-base; 20 background-color: var(--forum-item-background-color); ··· 29 } 30 31 &::before { 32 - content: ''; 33 .full-size(); 34 border-radius: @border-radius-base 0 0 @border-radius-base; 35 background-color: var(--forum-bg); 36 } 37 38 - .forum-item:hover &, .forum-topic-entry:hover & { 39 color: var(--forum-item-background-color-hover); 40 width: 25px; 41
··· 14 transition: @forum-item-animate; 15 16 &::after { 17 + content: ""; 18 .full-size(); 19 border-radius: @border-radius-base 0 0 @border-radius-base; 20 background-color: var(--forum-item-background-color); ··· 29 } 30 31 &::before { 32 + content: ""; 33 .full-size(); 34 border-radius: @border-radius-base 0 0 @border-radius-base; 35 background-color: var(--forum-bg); 36 } 37 38 + .forum-item:hover &, 39 + .forum-topic-entry:hover & { 40 color: var(--forum-item-background-color-hover); 41 width: 25px; 42
+1 -1
resources/css/bem/forum-list.less
··· 34 position: relative; 35 36 @media @desktop { 37 - display :none; 38 } 39 } 40
··· 34 position: relative; 35 36 @media @desktop { 37 + display: none; 38 } 39 } 40
+2 -2
resources/css/bem/forum-poll-container.less
··· 14 } 15 16 &--form { 17 - .@{_top}[data-page=form][data-edit="0"] & { 18 display: block; 19 } 20 } 21 22 &--results { 23 - .@{_top}[data-page=results][data-edit="0"] & { 24 display: block; 25 } 26 }
··· 14 } 15 16 &--form { 17 + .@{_top}[data-page="form"][data-edit="0"] & { 18 display: block; 19 } 20 } 21 22 &--results { 23 + .@{_top}[data-page="results"][data-edit="0"] & { 24 display: block; 25 } 26 }
+1 -1
resources/css/bem/forum-post-info.less
··· 62 &--registration { 63 font-size: @font-size--normal; 64 65 - strong { 66 font-weight: 600; 67 } 68 }
··· 62 &--registration { 63 font-size: @font-size--normal; 64 65 + strong { 66 font-weight: 600; 67 } 68 }
+1 -1
resources/css/bem/forum-title.less
··· 7 flex: 1; 8 9 &::before { 10 - content: ''; 11 position: absolute; 12 height: 80%; 13 width: 3px;
··· 7 flex: 1; 8 9 &::before { 10 + content: ""; 11 position: absolute; 12 height: 80%; 13 width: 3px;
+9 -6
resources/css/bem/forum-topic-nav.less
··· 138 display: none; 139 } 140 } 141 - 142 } 143 144 &__mobile-float { ··· 159 position: absolute; 160 left: 0; 161 bottom: 100%; 162 - transition: width 500ms ease-out, height 120ms ease-out; 163 cursor: pointer; 164 backface-visibility: hidden; 165 ··· 172 173 // easier targeting 174 &::after { 175 - content: ''; 176 position: absolute; 177 left: 0; 178 bottom: 100%; ··· 214 width: 100%; 215 height: var(--main-height); 216 } 217 - 218 219 &__seek-tooltip { 220 position: absolute; 221 - bottom: calc(var(--main-height) + @_seek-bar-height-desktop-hover + @_seek-tooltip-arrow-height); 222 223 display: flex; 224 width: 0; ··· 234 flex: none; 235 236 &::before { 237 - content: ''; 238 position: absolute; 239 top: 100%; 240 left: 50%;
··· 138 display: none; 139 } 140 } 141 } 142 143 &__mobile-float { ··· 158 position: absolute; 159 left: 0; 160 bottom: 100%; 161 + transition: 162 + width 500ms ease-out, 163 + height 120ms ease-out; 164 cursor: pointer; 165 backface-visibility: hidden; 166 ··· 173 174 // easier targeting 175 &::after { 176 + content: ""; 177 position: absolute; 178 left: 0; 179 bottom: 100%; ··· 215 width: 100%; 216 height: var(--main-height); 217 } 218 219 &__seek-tooltip { 220 position: absolute; 221 + bottom: calc( 222 + var(--main-height) + @_seek-bar-height-desktop-hover + 223 + @_seek-tooltip-arrow-height 224 + ); 225 226 display: flex; 227 width: 0; ··· 237 flex: none; 238 239 &::before { 240 + content: ""; 241 position: absolute; 242 top: 100%; 243 left: 50%;
+10 -10
resources/css/bem/forum-user-badge.less
··· 2 // See the LICENCE file in the repository root for full licence text. 3 4 .forum-user-badge { 5 - background-color: @osu-colour-b6; 6 - color: @osu-colour-lime-2; 7 - font-size: @font-size--tiny; 8 - font-weight: 600; 9 - padding: 2px 10px; 10 - border-radius: 10000px; 11 - text-transform: uppercase; 12 13 - @media @desktop { 14 - font-size: @font-size--small; 15 - } 16 }
··· 2 // See the LICENCE file in the repository root for full licence text. 3 4 .forum-user-badge { 5 + background-color: @osu-colour-b6; 6 + color: @osu-colour-lime-2; 7 + font-size: @font-size--tiny; 8 + font-weight: 600; 9 + padding: 2px 10px; 10 + border-radius: 10000px; 11 + text-transform: uppercase; 12 13 + @media @desktop { 14 + font-size: @font-size--small; 15 + } 16 }
+1 -1
resources/css/bem/header-nav-mobile.less
··· 33 position: relative; 34 35 &::before { 36 - content: ''; 37 z-index: @z-index--simple-menu-hover-object; 38 width: 100%; 39 height: 4px;
··· 33 position: relative; 34 35 &::before { 36 + content: ""; 37 z-index: @z-index--simple-menu-hover-object; 38 width: 100%; 39 height: 4px;
+2 -2
resources/css/bem/header-nav-v4.less
··· 29 gap: 20px; 30 31 &::before { 32 - content: ''; 33 position: absolute; 34 bottom: 0; 35 width: 100%; ··· 61 62 @media @desktop { 63 &::before { 64 - content: ''; 65 position: absolute; 66 bottom: -2px; 67 height: 5px;
··· 29 gap: 20px; 30 31 &::before { 32 + content: ""; 33 position: absolute; 34 bottom: 0; 35 width: 100%; ··· 61 62 @media @desktop { 63 &::before { 64 + content: ""; 65 position: absolute; 66 bottom: -2px; 67 height: 5px;
+48 -42
resources/css/bem/header-v4.less
··· 20 display: flex; 21 justify-content: center; 22 overflow: hidden; 23 - .at2x-fallback(--header-bg, '~@images/headers/generic.jpg'); 24 25 &::before { 26 - content: ''; 27 - background-image: linear-gradient(to right, @osu-colour-d5, transparent 200px, transparent 1000px, @osu-colour-d5 1200px); 28 background-position: center; 29 height: 100%; 30 width: 1200px; ··· 37 } 38 39 .@{_top}--beatmappacks & { 40 - .at2x-simple('~@images/headers/beatmappacks.jpg'); 41 } 42 43 .@{_top}--changelog & { 44 - .at2x-simple('~@images/headers/changelog.jpg'); 45 } 46 47 .@{_top}--chat & { 48 - .at2x-simple('~@images/headers/chat.jpg'); 49 filter: hue-rotate(115deg); // fix colour 50 51 &::before { ··· 54 } 55 56 .@{_top}--contests & { 57 - .at2x-fallback(--header-bg, '~@images/headers/contest.jpg'); 58 } 59 60 .@{_top}--forum & { ··· 66 } 67 68 .@{_top}--forums-index & { 69 - .at2x-simple('~@images/headers/forum-index.jpg'); 70 } 71 72 .@{_top}--help & { ··· 74 } 75 76 .@{_top}--mp-history & { 77 - .at2x-simple('~@images/headers/mp-history.jpg'); 78 } 79 80 .@{_top}--news & { 81 - .at2x-simple('~@images/headers/news.png'); 82 } 83 84 .@{_top}--password-reset & { 85 - .at2x-simple('~@images/headers/password-reset.jpg'); 86 } 87 88 .@{_top}--rankings & { 89 - .at2x-simple('~@images/headers/rankings.jpg'); 90 } 91 92 .@{_top}--search & { 93 - .at2x-simple('~@images/headers/search.jpg'); 94 } 95 96 .@{_top}--store & { 97 opacity: 0.7; 98 - .at2x-simple('~@images/headers/store.png'); 99 } 100 101 .@{_top}--supporter & { 102 opacity: 0.2; 103 - .at2x-simple('~@images/headers/supporter.jpg'); 104 } 105 106 .@{_top}--tournaments & { 107 - .at2x-simple('~@images/headers/tournament-v2.jpg'); 108 } 109 110 .@{_top}--users & { ··· 150 } 151 152 &__icon { 153 - background-image: url('~@images/icons/home.svg'); 154 background-repeat: no-repeat; 155 background-position: center; 156 align-self: stretch; ··· 160 background-size: 75%; 161 162 .@{_top}--artist & { 163 - background-image: url('~@images/icons/artists.svg'); 164 } 165 166 .@{_top}--artists & { 167 - background-image: url('~@images/icons/artists.svg'); 168 } 169 170 .@{_top}--beatmappacks & { 171 - background-image: url('~@images/icons/beatmappacks.svg'); 172 } 173 174 .@{_top}--beatmapset & { 175 - background-image: url('~@images/icons/beatmapsets.svg'); 176 } 177 178 .@{_top}--beatmapsets & { 179 - background-image: url('~@images/icons/beatmapsets.svg'); 180 } 181 182 .@{_top}--changelog & { 183 - background-image: url('~@images/icons/changelog.svg'); 184 } 185 186 .@{_top}--chat & { 187 - background-image: url('~@images/icons/chat.svg'); 188 } 189 190 .@{_top}--comments & { 191 - background-image: url('~@images/icons/chat.svg'); 192 } 193 194 .@{_top}--contests & { 195 - background-image: url('~@images/icons/contests.svg'); 196 } 197 198 .@{_top}--error & { 199 - background-image: url('~@images/icons/notifications.svg'); 200 } 201 202 .@{_top}--forum & { 203 - background-image: url('~@images/icons/forum.svg'); 204 } 205 206 .@{_top}--forums-index & { 207 - background-image: url('~@images/icons/forum.svg'); 208 } 209 210 .@{_top}--friends & { 211 - background-image: url('~@images/icons/friends.svg'); 212 } 213 214 .@{_top}--help & { 215 - background-image: url('~@images/icons/help.svg'); 216 } 217 218 .@{_top}--home & { 219 - background-image: url('~@images/icons/home.svg'); 220 } 221 222 .@{_top}--livestreams & { 223 - background-image: url('~@images/icons/forum.svg'); 224 } 225 226 .@{_top}--news & { 227 - background-image: url('~@images/icons/news.svg'); 228 } 229 230 .@{_top}--notifications & { 231 - background-image: url('~@images/icons/notifications.svg'); 232 } 233 234 .@{_top}--password-reset & { 235 - background-image: url('~@images/icons/settings.svg'); 236 } 237 238 .@{_top}--rankings & { 239 - background-image: url('~@images/icons/rankings.svg'); 240 } 241 242 .@{_top}--search & { 243 - background-image: url('~@images/icons/search.svg'); 244 } 245 246 .@{_top}--settings & { 247 - background-image: url('~@images/icons/settings.svg'); 248 } 249 250 .@{_top}--store & { 251 - background-image: url('~@images/icons/store.svg'); 252 } 253 254 .@{_top}--tournaments & { 255 - background-image: url('~@images/icons/tournaments.svg'); 256 } 257 258 .@{_top}--users & { 259 - background-image: url('~@images/icons/profile.svg'); 260 } 261 } 262
··· 20 display: flex; 21 justify-content: center; 22 overflow: hidden; 23 + .at2x-fallback(--header-bg, "~@images/headers/generic.jpg"); 24 25 &::before { 26 + content: ""; 27 + background-image: linear-gradient( 28 + to right, 29 + @osu-colour-d5, 30 + transparent 200px, 31 + transparent 1000px, 32 + @osu-colour-d5 1200px 33 + ); 34 background-position: center; 35 height: 100%; 36 width: 1200px; ··· 43 } 44 45 .@{_top}--beatmappacks & { 46 + .at2x-simple("~@images/headers/beatmappacks.jpg"); 47 } 48 49 .@{_top}--changelog & { 50 + .at2x-simple("~@images/headers/changelog.jpg"); 51 } 52 53 .@{_top}--chat & { 54 + .at2x-simple("~@images/headers/chat.jpg"); 55 filter: hue-rotate(115deg); // fix colour 56 57 &::before { ··· 60 } 61 62 .@{_top}--contests & { 63 + .at2x-fallback(--header-bg, "~@images/headers/contest.jpg"); 64 } 65 66 .@{_top}--forum & { ··· 72 } 73 74 .@{_top}--forums-index & { 75 + .at2x-simple("~@images/headers/forum-index.jpg"); 76 } 77 78 .@{_top}--help & { ··· 80 } 81 82 .@{_top}--mp-history & { 83 + .at2x-simple("~@images/headers/mp-history.jpg"); 84 } 85 86 .@{_top}--news & { 87 + .at2x-simple("~@images/headers/news.png"); 88 } 89 90 .@{_top}--password-reset & { 91 + .at2x-simple("~@images/headers/password-reset.jpg"); 92 } 93 94 .@{_top}--rankings & { 95 + .at2x-simple("~@images/headers/rankings.jpg"); 96 } 97 98 .@{_top}--search & { 99 + .at2x-simple("~@images/headers/search.jpg"); 100 } 101 102 .@{_top}--store & { 103 opacity: 0.7; 104 + .at2x-simple("~@images/headers/store.png"); 105 } 106 107 .@{_top}--supporter & { 108 opacity: 0.2; 109 + .at2x-simple("~@images/headers/supporter.jpg"); 110 } 111 112 .@{_top}--tournaments & { 113 + .at2x-simple("~@images/headers/tournament-v2.jpg"); 114 } 115 116 .@{_top}--users & { ··· 156 } 157 158 &__icon { 159 + background-image: url("~@images/icons/home.svg"); 160 background-repeat: no-repeat; 161 background-position: center; 162 align-self: stretch; ··· 166 background-size: 75%; 167 168 .@{_top}--artist & { 169 + background-image: url("~@images/icons/artists.svg"); 170 } 171 172 .@{_top}--artists & { 173 + background-image: url("~@images/icons/artists.svg"); 174 } 175 176 .@{_top}--beatmappacks & { 177 + background-image: url("~@images/icons/beatmappacks.svg"); 178 } 179 180 .@{_top}--beatmapset & { 181 + background-image: url("~@images/icons/beatmapsets.svg"); 182 } 183 184 .@{_top}--beatmapsets & { 185 + background-image: url("~@images/icons/beatmapsets.svg"); 186 } 187 188 .@{_top}--changelog & { 189 + background-image: url("~@images/icons/changelog.svg"); 190 } 191 192 .@{_top}--chat & { 193 + background-image: url("~@images/icons/chat.svg"); 194 } 195 196 .@{_top}--comments & { 197 + background-image: url("~@images/icons/chat.svg"); 198 } 199 200 .@{_top}--contests & { 201 + background-image: url("~@images/icons/contests.svg"); 202 } 203 204 .@{_top}--error & { 205 + background-image: url("~@images/icons/notifications.svg"); 206 } 207 208 .@{_top}--forum & { 209 + background-image: url("~@images/icons/forum.svg"); 210 } 211 212 .@{_top}--forums-index & { 213 + background-image: url("~@images/icons/forum.svg"); 214 } 215 216 .@{_top}--friends & { 217 + background-image: url("~@images/icons/friends.svg"); 218 } 219 220 .@{_top}--help & { 221 + background-image: url("~@images/icons/help.svg"); 222 } 223 224 .@{_top}--home & { 225 + background-image: url("~@images/icons/home.svg"); 226 } 227 228 .@{_top}--livestreams & { 229 + background-image: url("~@images/icons/forum.svg"); 230 } 231 232 .@{_top}--news & { 233 + background-image: url("~@images/icons/news.svg"); 234 } 235 236 .@{_top}--notifications & { 237 + background-image: url("~@images/icons/notifications.svg"); 238 } 239 240 .@{_top}--password-reset & { 241 + background-image: url("~@images/icons/settings.svg"); 242 } 243 244 .@{_top}--rankings & { 245 + background-image: url("~@images/icons/rankings.svg"); 246 } 247 248 .@{_top}--search & { 249 + background-image: url("~@images/icons/search.svg"); 250 } 251 252 .@{_top}--settings & { 253 + background-image: url("~@images/icons/settings.svg"); 254 } 255 256 .@{_top}--store & { 257 + background-image: url("~@images/icons/store.svg"); 258 } 259 260 .@{_top}--tournaments & { 261 + background-image: url("~@images/icons/tournaments.svg"); 262 } 263 264 .@{_top}--users & { 265 + background-image: url("~@images/icons/profile.svg"); 266 } 267 } 268
-1
resources/css/bem/input-container.less
··· 57 font-size: @font-size--normal; 58 } 59 } 60 -
··· 57 font-size: @font-size--normal; 58 } 59 }
+8 -6
resources/css/bem/js-flash-border.less
··· 2 // See the LICENCE file in the repository root for full licence text. 3 4 .js-flash-border { 5 - transition: border 200ms; 6 - border: 1px solid transparent; 7 8 - &--on { 9 - animation: js-flash-border 400ms 2; 10 - } 11 } 12 13 @keyframes js-flash-border { 14 - 50% { border-color: @yellow; } 15 }
··· 2 // See the LICENCE file in the repository root for full licence text. 3 4 .js-flash-border { 5 + transition: border 200ms; 6 + border: 1px solid transparent; 7 8 + &--on { 9 + animation: js-flash-border 400ms 2; 10 + } 11 } 12 13 @keyframes js-flash-border { 14 + 50% { 15 + border-color: @yellow; 16 + } 17 }
+4 -4
resources/css/bem/landing-hero.less
··· 23 24 &::after { 25 .full-size(); 26 - content: ''; 27 background-color: hsla(var(--hsl-b6), 0.5); 28 } 29 } ··· 54 } 55 56 &__logo { 57 - .at2x-simple('~@images/layout/osu-logo.png'); 58 width: @logo-size; 59 height: @logo-size; 60 background-size: contain; ··· 119 width: calc(100% - @side-padding); 120 max-width: 328px; 121 background-size: contain; 122 - .at2x-simple('~@images/layout/pippi.png'); 123 transition: all 1s; 124 125 @media @mobile { ··· 128 } 129 130 &__pippi-logo { 131 - .at2x-simple('~@images/landing/logo.png'); 132 width: 100%; 133 height: 100%; 134 background-size: contain;
··· 23 24 &::after { 25 .full-size(); 26 + content: ""; 27 background-color: hsla(var(--hsl-b6), 0.5); 28 } 29 } ··· 54 } 55 56 &__logo { 57 + .at2x-simple("~@images/layout/osu-logo.png"); 58 width: @logo-size; 59 height: @logo-size; 60 background-size: contain; ··· 119 width: calc(100% - @side-padding); 120 max-width: 328px; 121 background-size: contain; 122 + .at2x-simple("~@images/layout/pippi.png"); 123 transition: all 1s; 124 125 @media @mobile { ··· 128 } 129 130 &__pippi-logo { 131 + .at2x-simple("~@images/landing/logo.png"); 132 width: 100%; 133 height: 100%; 134 background-size: contain;
+1 -1
resources/css/bem/landing-nav.less
··· 83 flex-direction: column; 84 85 &::before { 86 - content: ''; 87 width: 100%; 88 height: 10px; 89 bottom: 100%;
··· 83 flex-direction: column; 84 85 &::before { 86 + content: ""; 87 width: 100%; 88 height: 10px; 89 bottom: 100%;
+1 -1
resources/css/bem/line-chart.less
··· 69 display: flex; 70 flex-direction: column; 71 72 - &[data-float=right] { 73 left: auto; 74 right: 0; 75 }
··· 69 display: flex; 70 flex-direction: column; 71 72 + &[data-float="right"] { 73 left: auto; 74 right: 0; 75 }
+1 -1
resources/css/bem/livestream-featured.less
··· 7 position: relative; 8 9 &::before { 10 - content: ''; 11 display: block; 12 width: 100%; 13 // ensuring fixed aspect ratio
··· 7 position: relative; 8 9 &::before { 10 + content: ""; 11 display: block; 12 width: 100%; 13 // ensuring fixed aspect ratio
+6 -6
resources/css/bem/loading-overlay.less
··· 27 28 &::before { 29 .full-size(); 30 - content: ''; 31 background-color: #000; 32 will-change: opacity; 33 } ··· 41 animation-fill-mode: forwards; 42 } 43 } 44 - 45 46 &__container { 47 width: @circle-size*4; ··· 109 border-radius: 100%; 110 background-color: transparent; 111 112 - 113 .@{_top}--visible & { 114 animation-name: loading-overlay--circle-approach; 115 } ··· 146 animation-fill-mode: forwards; 147 will-change: opacity; 148 149 - @animation-delay-start: @animation-delay*1/8; 150 151 .@{_top}--visible & { 152 animation-name: loading-overlay--follow-point; ··· 188 opacity: 1; 189 } 190 191 - 20.1%, 100% { 192 transform: scale(0.5); 193 opacity: 0; 194 } ··· 205 opacity: 1; 206 } 207 208 - 40%, 100% { 209 transform: scale(1); 210 opacity: 0; 211 }
··· 27 28 &::before { 29 .full-size(); 30 + content: ""; 31 background-color: #000; 32 will-change: opacity; 33 } ··· 41 animation-fill-mode: forwards; 42 } 43 } 44 45 &__container { 46 width: @circle-size*4; ··· 108 border-radius: 100%; 109 background-color: transparent; 110 111 .@{_top}--visible & { 112 animation-name: loading-overlay--circle-approach; 113 } ··· 144 animation-fill-mode: forwards; 145 will-change: opacity; 146 147 + @animation-delay-start: @animation-delay*1 / 8; 148 149 .@{_top}--visible & { 150 animation-name: loading-overlay--follow-point; ··· 186 opacity: 1; 187 } 188 189 + 20.1%, 190 + 100% { 191 transform: scale(0.5); 192 opacity: 0; 193 } ··· 204 opacity: 1; 205 } 206 207 + 40%, 208 + 100% { 209 transform: scale(1); 210 opacity: 0; 211 }
+1 -2
resources/css/bem/medals-group.less
··· 1 // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 2 // See the LICENCE file in the repository root for full licence text. 3 4 - 5 .medals-group { 6 display: grid; 7 gap: 20px; ··· 35 position: relative; 36 37 &::before { 38 - content: ''; 39 position: absolute; 40 top: 0; 41 left: 0;
··· 1 // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 2 // See the LICENCE file in the repository root for full licence text. 3 4 .medals-group { 5 display: grid; 6 gap: 20px; ··· 34 position: relative; 35 36 &::before { 37 + content: ""; 38 position: absolute; 39 top: 0; 40 left: 0;
+1 -1
resources/css/bem/mobile-menu-tab.less
··· 30 color: @osu-colour-c1; 31 32 &::before { 33 - content: ''; 34 display: block; 35 position: absolute; 36 height: 4px;
··· 30 color: @osu-colour-c1; 31 32 &::before { 33 + content: ""; 34 display: block; 35 position: absolute; 36 height: 4px;
+27 -27
resources/css/bem/mod.less
··· 24 } 25 } 26 27 - .all(~"4K", '4K'); 28 - .all(~"5K", '5K'); 29 - .all(~"6K", '6K'); 30 - .all(~"7K", '7K'); 31 - .all(~"8K", '8K'); 32 - .all(~"9K", '9K'); 33 - .all(~"AP", 'autopilot'); 34 - .all(~"CL", 'classic'); 35 - .all(~"DT", 'double-time'); 36 - .all(~"EZ", 'easy'); 37 - .all(~"FI", 'fader'); 38 - .all(~"FL", 'flashlight'); 39 - .all(~"HD", 'hidden'); 40 - .all(~"HR", 'hard-rock'); 41 - .all(~"HT", 'half'); 42 - .all(~"MR", 'mirror'); 43 - .all(~"NC", 'nightcore'); 44 - .all(~"NF", 'no-fail'); 45 - .all(~"NM", 'no-mod'); 46 - .all(~"PF", 'perfect'); 47 - .all(~"RD", 'random'); 48 - .all(~"RX", 'relax'); 49 - .all(~"SD", 'sudden-death'); 50 - .all(~"SO", 'spun-out'); 51 - .all(~"TD", 'touchdevice'); 52 - .all(~"V2", 'v2'); 53 54 .type-bg(Automation); 55 .type-bg(Conversion); ··· 63 background-size: contain; 64 background-position: center; 65 background-repeat: no-repeat; 66 - content: ''; 67 display: var(--generic-display); 68 69 @media @highdpi {
··· 24 } 25 } 26 27 + .all(~"4K", "4K"); 28 + .all(~"5K", "5K"); 29 + .all(~"6K", "6K"); 30 + .all(~"7K", "7K"); 31 + .all(~"8K", "8K"); 32 + .all(~"9K", "9K"); 33 + .all(~"AP", "autopilot"); 34 + .all(~"CL", "classic"); 35 + .all(~"DT", "double-time"); 36 + .all(~"EZ", "easy"); 37 + .all(~"FI", "fader"); 38 + .all(~"FL", "flashlight"); 39 + .all(~"HD", "hidden"); 40 + .all(~"HR", "hard-rock"); 41 + .all(~"HT", "half"); 42 + .all(~"MR", "mirror"); 43 + .all(~"NC", "nightcore"); 44 + .all(~"NF", "no-fail"); 45 + .all(~"NM", "no-mod"); 46 + .all(~"PF", "perfect"); 47 + .all(~"RD", "random"); 48 + .all(~"RX", "relax"); 49 + .all(~"SD", "sudden-death"); 50 + .all(~"SO", "spun-out"); 51 + .all(~"TD", "touchdevice"); 52 + .all(~"V2", "v2"); 53 54 .type-bg(Automation); 55 .type-bg(Conversion); ··· 63 background-size: contain; 64 background-position: center; 65 background-repeat: no-repeat; 66 + content: ""; 67 display: var(--generic-display); 68 69 @media @highdpi {
+2 -2
resources/css/bem/mp-history-game.less
··· 108 padding: 10px; 109 background-color: @osu-colour-b3; 110 111 - &--no-teams, &:last-child { 112 border-radius: 0 0 @border-radius-base @border-radius-base; 113 } 114 } ··· 153 width: 50%; 154 155 padding: 20px; 156 - 157 158 @media @desktop { 159 width: unset;
··· 108 padding: 10px; 109 background-color: @osu-colour-b3; 110 111 + &--no-teams, 112 + &:last-child { 113 border-radius: 0 0 @border-radius-base @border-radius-base; 114 } 115 } ··· 154 width: 50%; 155 156 padding: 20px; 157 158 @media @desktop { 159 width: unset;
+10 -2
resources/css/bem/multiplayer-room.less
··· 4 .multiplayer-room { 5 --bg: hsla(var(--hsl-b6), 0.75); 6 --border-radius: @border-radius--large; 7 - --room-bg: linear-gradient(0.25turn, hsl(var(--hsl-b2)), hsla(var(--hsl-b2), 0.8)); 8 9 .link-hover({ 10 --room-bg: linear-gradient(0.25turn, hsl(var(--hsl-b4)), hsla(var(--hsl-b4), 0.8)); ··· 79 &__difficulty { 80 display: flex; 81 border-radius: 10000px; 82 - background: linear-gradient(0deg, var(--max-difficulty) 50%, var(--min-difficulty) 50%); 83 } 84 85 &__members {
··· 4 .multiplayer-room { 5 --bg: hsla(var(--hsl-b6), 0.75); 6 --border-radius: @border-radius--large; 7 + --room-bg: linear-gradient( 8 + 0.25turn, 9 + hsl(var(--hsl-b2)), 10 + hsla(var(--hsl-b2), 0.8) 11 + ); 12 13 .link-hover({ 14 --room-bg: linear-gradient(0.25turn, hsl(var(--hsl-b4)), hsla(var(--hsl-b4), 0.8)); ··· 83 &__difficulty { 84 display: flex; 85 border-radius: 10000px; 86 + background: linear-gradient( 87 + 0deg, 88 + var(--max-difficulty) 50%, 89 + var(--min-difficulty) 50% 90 + ); 91 } 92 93 &__members {
+2 -1
resources/css/bem/nav-button.less
··· 11 border-radius: 10000px; 12 transition: none; 13 14 - &.js-click-menu--active, &:hover { 15 background-color: hsla(var(--hsl-c1), 0.2); 16 } 17
··· 11 border-radius: 10000px; 12 transition: none; 13 14 + &.js-click-menu--active, 15 + &:hover { 16 background-color: hsla(var(--hsl-c1), 0.2); 17 } 18
-1
resources/css/bem/nav-click-popup.less
··· 1 // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 2 // See the LICENCE file in the repository root for full licence text. 3 4 - 5 .nav-click-popup { 6 position: absolute; 7 top: 100%;
··· 1 // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 2 // See the LICENCE file in the repository root for full licence text. 3 4 .nav-click-popup { 5 position: absolute; 6 top: 100%;
+2 -2
resources/css/bem/nav2-header.less
··· 21 transition-duration: 0s; 22 border-bottom: 1px solid @osu-colour-h1; 23 24 - &[data-visibility=hidden] { 25 transition-duration: 250ms; 26 } 27 } ··· 39 40 &__triangles { 41 .full-size(); 42 - background-image: url('~@images/layout/nav2-background-hue0.png'); 43 background-position: bottom center; 44 background-repeat: repeat-x; 45 filter: hue-rotate(var(--base-hue-deg)) saturate(0.6);
··· 21 transition-duration: 0s; 22 border-bottom: 1px solid @osu-colour-h1; 23 24 + &[data-visibility="hidden"] { 25 transition-duration: 250ms; 26 } 27 } ··· 39 40 &__triangles { 41 .full-size(); 42 + background-image: url("~@images/layout/nav2-background-hue0.png"); 43 background-position: bottom center; 44 background-repeat: repeat-x; 45 filter: hue-rotate(var(--base-hue-deg)) saturate(0.6);
+10 -4
resources/css/bem/nav2.less
··· 82 width: @_logo-size; 83 height: @_logo-size; 84 margin: -@__logo-whitespace; 85 - transition: width var(--header-pinned-animation-duration), height var(--header-pinned-animation-duration); 86 position: relative; 87 88 .@{header-pinned} & { ··· 99 color: @pink-light; 100 101 &::after { 102 - content: ''; 103 position: absolute; 104 105 border-radius: 10px; 106 top: (@_link-padding-vertical + @_link-highlight-margin-vertical); 107 right: 100%; 108 width: 3px; 109 - height: calc(100% - (@_link-padding-vertical * 2 + @_link-highlight-margin-vertical * 2)); 110 background-color: @yellow; 111 opacity: 0; 112 will-change: opacity; ··· 135 .@{_top}__colgroup:hover & { 136 color: fade(#fff, 70%); 137 138 - &:hover, &.js-menu--active { 139 color: #fff; 140 } 141 }
··· 82 width: @_logo-size; 83 height: @_logo-size; 84 margin: -@__logo-whitespace; 85 + transition: 86 + width var(--header-pinned-animation-duration), 87 + height var(--header-pinned-animation-duration); 88 position: relative; 89 90 .@{header-pinned} & { ··· 101 color: @pink-light; 102 103 &::after { 104 + content: ""; 105 position: absolute; 106 107 border-radius: 10px; 108 top: (@_link-padding-vertical + @_link-highlight-margin-vertical); 109 right: 100%; 110 width: 3px; 111 + height: calc( 112 + 100% - 113 + (@_link-padding-vertical * 2 + @_link-highlight-margin-vertical * 2) 114 + ); 115 background-color: @yellow; 116 opacity: 0; 117 will-change: opacity; ··· 140 .@{_top}__colgroup:hover & { 141 color: fade(#fff, 70%); 142 143 + &:hover, 144 + &.js-menu--active { 145 color: #fff; 146 } 147 }
+4 -2
resources/css/bem/navbar-mobile-item.less
··· 57 color: @_colour-base; 58 } 59 60 - &:hover, &:active { 61 color: @_colour-hover; 62 } 63 ··· 80 .link-plain(); 81 display: flex; 82 align-items: center; 83 - padding: 5px @navbar-padding-horizontal 5px (@navbar-mobile--content-height + 30px); 84 color: @osu-colour-c2; 85 86 &:hover {
··· 57 color: @_colour-base; 58 } 59 60 + &:hover, 61 + &:active { 62 color: @_colour-hover; 63 } 64 ··· 81 .link-plain(); 82 display: flex; 83 align-items: center; 84 + padding: 5px @navbar-padding-horizontal 5px 85 + (@navbar-mobile--content-height + 30px); 86 color: @osu-colour-c2; 87 88 &:hover {
+4 -2
resources/css/bem/news-card.less
··· 28 } 29 30 &__cover-container { 31 - .at2x-simple('~@images/headers/news-show-default.jpg'); 32 background-size: cover; 33 background-repeat: no-repeat; 34 border-radius: @border-radius-large; ··· 66 font-size: @font-size--normal; 67 68 &--author { 69 - strong { font-weight: 600; } 70 } 71 72 &--preview {
··· 28 } 29 30 &__cover-container { 31 + .at2x-simple("~@images/headers/news-show-default.jpg"); 32 background-size: cover; 33 background-repeat: no-repeat; 34 border-radius: @border-radius-large; ··· 66 font-size: @font-size--normal; 67 68 &--author { 69 + strong { 70 + font-weight: 600; 71 + } 72 } 73 74 &--preview {
+1 -1
resources/css/bem/notification-action-button.less
··· 27 28 &::before { 29 .full-size(); 30 - content: ''; 31 width: @border-radius-large; 32 border-radius: 0 @border-radius-large @border-radius-large 0; 33 background-color: transparent;
··· 27 28 &::before { 29 .full-size(); 30 + content: ""; 31 width: @border-radius-large; 32 border-radius: 0 @border-radius-large @border-radius-large 0; 33 background-color: transparent;
+2 -2
resources/css/bem/notification-banner-v2.less
··· 17 text-align: center; 18 position: relative; 19 --divider-colour: @red; 20 - --icon: url('~@images/layout/exclamation-icon.svg'); 21 22 @media @desktop { 23 flex-direction: row; ··· 65 66 &::after { 67 position: absolute; 68 - content: ''; 69 height: @_bar-width; 70 background-color: var(--divider-colour); 71 border-radius: 10px;
··· 17 text-align: center; 18 position: relative; 19 --divider-colour: @red; 20 + --icon: url("~@images/layout/exclamation-icon.svg"); 21 22 @media @desktop { 23 flex-direction: row; ··· 65 66 &::after { 67 position: absolute; 68 + content: ""; 69 height: @_bar-width; 70 background-color: var(--divider-colour); 71 border-radius: 10px;
+2 -1
resources/css/bem/notification-popup-item-group.less
··· 4 .notification-popup-item-group { 5 @_top: notification-category-group; 6 background-color: @osu-colour-b5; 7 - border-radius: (@border-radius-large + 10px) (@border-radius-large + 10px) @border-radius-large @border-radius-large; 8 display: flex; 9 flex-direction: column; 10
··· 4 .notification-popup-item-group { 5 @_top: notification-category-group; 6 background-color: @osu-colour-b5; 7 + border-radius: (@border-radius-large + 10px) (@border-radius-large + 10px) 8 + @border-radius-large @border-radius-large; 9 display: flex; 10 flex-direction: column; 11
+4 -4
resources/css/bem/notification-popup-item.less
··· 127 128 .@{_top}:hover & { 129 .show-more-link { 130 - background-color: hsl(var(--hsl-b1)); 131 - &:hover { 132 - background-color: hsl(var(--hsl-b3)); 133 - } 134 } 135 } 136 }
··· 127 128 .@{_top}:hover & { 129 .show-more-link { 130 + background-color: hsl(var(--hsl-b1)); 131 + &:hover { 132 + background-color: hsl(var(--hsl-b3)); 133 + } 134 } 135 } 136 }
+2 -1
resources/css/bem/notification-popup.less
··· 34 @media @desktop { 35 -webkit-overflow-scrolling: touch; 36 overflow: auto; 37 - max-height: calc(var(--vh, 1vh) * 100 - (@nav2-height + 30px)); // 30px is the parent's padding 38 padding: 0 5px; 39 } 40 }
··· 34 @media @desktop { 35 -webkit-overflow-scrolling: touch; 36 overflow: auto; 37 + // 30px is the parent's padding 38 + max-height: calc(var(--vh, 1vh) * 100 - (@nav2-height + 30px)); 39 padding: 0 5px; 40 } 41 }
+11 -7
resources/css/bem/osu-layout.less
··· 10 display: flex; 11 flex-direction: column; 12 13 - transition: filter 200ms ease-in-out, opacity 200ms ease-in-out; // for fading in after &--masked is removed 14 15 &--body { 16 - --nav-logo: url('~@images/layout/osu-logo-white.svg'); 17 - --nav-logo-bg: url('~@images/layout/osu-logo-triangles.svg'); 18 19 background-color: @osu-colour-b6; 20 } ··· 33 height: 100%; 34 top: 0; 35 left: 0; 36 - content: ''; 37 z-index: @z-index--body-background; 38 } 39 } 40 41 &--body-lazer { 42 - --nav-logo: url('~@images/layout/osu-lazer-logo-white.svg'); 43 - --nav-logo-bg: url('~@images/layout/osu-lazer-logo-triangles.svg'); 44 } 45 46 &--full { ··· 55 pointer-events: none; 56 backface-visibility: hidden; // prevents flashing in some browers on resize/transition start 57 58 - @media screen and (-ms-high-contrast: active), screen and (-ms-high-contrast: none) { 59 /* IE10+ fallback */ 60 opacity: 0; 61 }
··· 10 display: flex; 11 flex-direction: column; 12 13 + // for fading in after &--masked is removed 14 + transition: 15 + filter 200ms ease-in-out, 16 + opacity 200ms ease-in-out; 17 18 &--body { 19 + --nav-logo: url("~@images/layout/osu-logo-white.svg"); 20 + --nav-logo-bg: url("~@images/layout/osu-logo-triangles.svg"); 21 22 background-color: @osu-colour-b6; 23 } ··· 36 height: 100%; 37 top: 0; 38 left: 0; 39 + content: ""; 40 z-index: @z-index--body-background; 41 } 42 } 43 44 &--body-lazer { 45 + --nav-logo: url("~@images/layout/osu-lazer-logo-white.svg"); 46 + --nav-logo-bg: url("~@images/layout/osu-lazer-logo-triangles.svg"); 47 } 48 49 &--full { ··· 58 pointer-events: none; 59 backface-visibility: hidden; // prevents flashing in some browers on resize/transition start 60 61 + @media screen and (-ms-high-contrast: active), 62 + screen and (-ms-high-contrast: none) { 63 /* IE10+ fallback */ 64 opacity: 0; 65 }
+8 -3
resources/css/bem/osu-md.less
··· 68 flex: 1; 69 overflow-wrap: anywhere; 70 71 - h1, h2, h3, h4, h5, h6 { 72 font-size: revert; 73 border-bottom: 1px solid hsl(var(--hsl-b3)); 74 } ··· 79 font-style: italic; 80 81 &::before { 82 - content: '* '; 83 } 84 &::after { 85 - content: ' *'; 86 } 87 } 88
··· 68 flex: 1; 69 overflow-wrap: anywhere; 70 71 + h1, 72 + h2, 73 + h3, 74 + h4, 75 + h5, 76 + h6 { 77 font-size: revert; 78 border-bottom: 1px solid hsl(var(--hsl-b3)); 79 } ··· 84 font-style: italic; 85 86 &::before { 87 + content: "* "; 88 } 89 &::after { 90 + content: " *"; 91 } 92 } 93
+11 -4
resources/css/bem/osu-page.less
··· 39 padding-bottom: 20px; 40 color: @osu-colour-c1; 41 42 - h1, h3, h4 { 43 font-style: normal; 44 color: white; 45 } ··· 154 animation: forum-topic-reply-flash 500ms ease-in-out; 155 156 @keyframes forum-topic-reply-flash { 157 - 50% { background-color: @osu-colour-b1; } 158 } 159 } 160 161 - &[data-state=stick] { 162 position: fixed; 163 z-index: @z-index--forum-topic-reply-stick; 164 bottom: 0; // weird flashing in firefox android on certain scroll if using top ··· 249 250 flex: 1 0 auto; 251 display: flex; 252 - height: calc((var(--vh, 1vh) * 100) - (@header-container-min-height + 60px)); // viewport height - (header + footer + margins) 253 254 @media @mobile { 255 height: calc((var(--vh, 1vh) * 100) - var(--navbar-height));
··· 39 padding-bottom: 20px; 40 color: @osu-colour-c1; 41 42 + h1, 43 + h3, 44 + h4 { 45 font-style: normal; 46 color: white; 47 } ··· 156 animation: forum-topic-reply-flash 500ms ease-in-out; 157 158 @keyframes forum-topic-reply-flash { 159 + 50% { 160 + background-color: @osu-colour-b1; 161 + } 162 } 163 } 164 165 + &[data-state="stick"] { 166 position: fixed; 167 z-index: @z-index--forum-topic-reply-stick; 168 bottom: 0; // weird flashing in firefox android on certain scroll if using top ··· 253 254 flex: 1 0 auto; 255 display: flex; 256 + // viewport height - (header + footer + margins) 257 + height: calc( 258 + (var(--vh, 1vh) * 100) - (@header-container-min-height + 60px) 259 + ); 260 261 @media @mobile { 262 height: calc((var(--vh, 1vh) * 100) - var(--navbar-height));
+6 -6
resources/css/bem/osu-switch-v2.less
··· 49 } 50 } 51 52 - .@{_top}__input[type=checkbox] + & { 53 border-radius: 0.5em; 54 55 &::after { 56 .fas(); 57 - content: '\f00c'; 58 } 59 } 60 61 - .@{_top}__input[type=checkbox][data-indeterminate='true'] + & { 62 color: hsl(var(--hsl-h1)); 63 64 &::after { 65 .fas(); 66 - content: '\f068'; 67 opacity: 1; 68 } 69 } 70 71 - .@{_top}__input[type=radio] + & { 72 border-radius: 50%; 73 74 &::after { 75 - content: ''; 76 background-color: currentColor; 77 border-radius: 50%; 78 width: calc(100% - 6px);
··· 49 } 50 } 51 52 + .@{_top}__input[type="checkbox"] + & { 53 border-radius: 0.5em; 54 55 &::after { 56 .fas(); 57 + content: "\f00c"; 58 } 59 } 60 61 + .@{_top}__input[type="checkbox"][data-indeterminate="true"] + & { 62 color: hsl(var(--hsl-h1)); 63 64 &::after { 65 .fas(); 66 + content: "\f068"; 67 opacity: 1; 68 } 69 } 70 71 + .@{_top}__input[type="radio"] + & { 72 border-radius: 50%; 73 74 &::after { 75 + content: ""; 76 background-color: currentColor; 77 border-radius: 50%; 78 width: calc(100% - 6px);
+1 -1
resources/css/bem/osu-table.less
··· 3 4 .osu-table { 5 @_top: osu-table; 6 - @passive-row: ~'@{_top}__body-row--highlightable'; 7 8 @handle: 16px; 9 @row-height: 1.8em;
··· 3 4 .osu-table { 5 @_top: osu-table; 6 + @passive-row: ~"@{_top}__body-row--highlightable"; 7 8 @handle: 16px; 9 @row-height: 1.8em;
+2 -1
resources/css/bem/page-mode-link.less
··· 13 white-space: nowrap; 14 } 15 16 - &.js-is-active, &--is-active { 17 font-weight: 600; 18 color: #fff; 19
··· 13 white-space: nowrap; 14 } 15 16 + &.js-is-active, 17 + &--is-active { 18 font-weight: 600; 19 color: #fff; 20
+7 -2
resources/css/bem/page-mode.less
··· 77 78 // pls halp 79 .@{_top}--breadcrumb & + &::before { 80 - content: '»'; 81 margin-right: 10px; 82 margin-top: 5px; 83 vertical-align: middle; ··· 105 margin-top: 0; 106 border: 0; 107 height: 1px; 108 - background-image: linear-gradient(to right, transparent, @osu-colour-b6, transparent); 109 } 110 }
··· 77 78 // pls halp 79 .@{_top}--breadcrumb & + &::before { 80 + content: "»"; 81 margin-right: 10px; 82 margin-top: 5px; 83 vertical-align: middle; ··· 105 margin-top: 0; 106 border: 0; 107 height: 1px; 108 + background-image: linear-gradient( 109 + to right, 110 + transparent, 111 + @osu-colour-b6, 112 + transparent 113 + ); 114 } 115 }
+2 -2
resources/css/bem/page-nav-fancy.less
··· 4 .page-nav-fancy { 5 @_top: page-nav-fancy; 6 7 - .at2x-simple('~@images/headers/news-show-default.jpg'); 8 .link-plain(); 9 .link-white(); 10 background-position: center; ··· 28 .full-size(); 29 .fade-element(120ms); 30 will-change: opacity; 31 - content: ''; 32 background-color: @osu-colour-b6; 33 opacity: 0.75; 34 }
··· 4 .page-nav-fancy { 5 @_top: page-nav-fancy; 6 7 + .at2x-simple("~@images/headers/news-show-default.jpg"); 8 .link-plain(); 9 .link-white(); 10 background-position: center; ··· 28 .full-size(); 29 .fade-element(120ms); 30 will-change: opacity; 31 + content: ""; 32 background-color: @osu-colour-b6; 33 opacity: 0.75; 34 }
+13 -4
resources/css/bem/page-tabs.less
··· 14 position: relative; 15 16 &::before { 17 - content: ''; 18 19 position: absolute; 20 top: 100%; ··· 23 width: 100%; 24 height: 1px; 25 26 - background-image:linear-gradient(to left, transparent 10%, @osu-colour-b1 50%, transparent 90%); 27 } 28 29 &--follows { ··· 52 cursor: pointer; 53 position: relative; // so it's above block's ::before 54 55 - &:hover, &:active, &:focus { 56 color: @osu-colour-l1; 57 text-decoration: none; 58 border-bottom-color: var(--tab-hover-border-colour); ··· 68 color: #ccc; 69 cursor: default; 70 71 - &:hover, &:active, &:focus { 72 color: #ccc; 73 text-decoration: none; 74 }
··· 14 position: relative; 15 16 &::before { 17 + content: ""; 18 19 position: absolute; 20 top: 100%; ··· 23 width: 100%; 24 height: 1px; 25 26 + background-image: linear-gradient( 27 + to left, 28 + transparent 10%, 29 + @osu-colour-b1 50%, 30 + transparent 90% 31 + ); 32 } 33 34 &--follows { ··· 57 cursor: pointer; 58 position: relative; // so it's above block's ::before 59 60 + &:hover, 61 + &:active, 62 + &:focus { 63 color: @osu-colour-l1; 64 text-decoration: none; 65 border-bottom-color: var(--tab-hover-border-colour); ··· 75 color: #ccc; 76 cursor: default; 77 78 + &:hover, 79 + &:active, 80 + &:focus { 81 color: #ccc; 82 text-decoration: none; 83 }
+2 -2
resources/css/bem/password-reset.less
··· 16 margin-top: 5px; 17 color: @yellow; 18 19 - [data-form-error-state=error] & { 20 display: block; 21 } 22 } ··· 33 border-color: @yellow; 34 } 35 36 - [data-form-error-state=error] & { 37 border-color: @red; 38 } 39 }
··· 16 margin-top: 5px; 17 color: @yellow; 18 19 + [data-form-error-state="error"] & { 20 display: block; 21 } 22 } ··· 33 border-color: @yellow; 34 } 35 36 + [data-form-error-state="error"] & { 37 border-color: @red; 38 } 39 }
+5 -3
resources/css/bem/play-detail.less
··· 27 min-height: auto; 28 background-color: transparent; 29 30 - &:hover, &--active { 31 --bg: hsl(var(--hsl-b2)); 32 --bg-main: hsl(var(--hsl-b1)); 33 } ··· 169 position: relative; 170 right: auto; 171 bottom: auto; 172 - padding: @_padding-vertical-desktop @_padding-horizontal @_padding-vertical-desktop (@_padding-horizontal + 10px); 173 min-width: 110px; 174 flex: none; 175 background: var(--bg); ··· 178 179 &::before { 180 @media @desktop { 181 - content: ''; 182 width: 10px; 183 height: 100%; 184 position: absolute;
··· 27 min-height: auto; 28 background-color: transparent; 29 30 + &:hover, 31 + &--active { 32 --bg: hsl(var(--hsl-b2)); 33 --bg-main: hsl(var(--hsl-b1)); 34 } ··· 170 position: relative; 171 right: auto; 172 bottom: auto; 173 + padding: @_padding-vertical-desktop @_padding-horizontal 174 + @_padding-vertical-desktop (@_padding-horizontal + 10px); 175 min-width: 110px; 176 flex: none; 177 background: var(--bg); ··· 180 181 &::before { 182 @media @desktop { 183 + content: ""; 184 width: 10px; 185 height: 100%; 186 position: absolute;
+4 -3
resources/css/bem/product-box.less
··· 33 &--card { 34 padding: 20px; 35 36 - &::before, &::after { 37 .full-size(); 38 - content: ''; 39 will-change: opacity; 40 transition: opacity 120ms; 41 pointer-events: none; ··· 76 &__oos-bar { 77 width: 233px; 78 height: 136px; 79 - .at2x-simple('~@images/layout/store-out-of-stock-bar.png'); 80 background-size: contain; 81 position: absolute; 82 bottom: 0;
··· 33 &--card { 34 padding: 20px; 35 36 + &::before, 37 + &::after { 38 .full-size(); 39 + content: ""; 40 will-change: opacity; 41 transition: opacity 120ms; 42 pointer-events: none; ··· 77 &__oos-bar { 78 width: 233px; 79 height: 136px; 80 + .at2x-simple("~@images/layout/store-out-of-stock-bar.png"); 81 background-size: contain; 82 position: absolute; 83 bottom: 0;
+1 -1
resources/css/bem/profile-cover-change-popup.less
··· 46 // placeholder to prevent triggering dragleave when entering child element 47 &::after { 48 .full-size(); 49 - content: ''; 50 } 51 } 52 }
··· 46 // placeholder to prevent triggering dragleave when entering child element 47 &::after { 48 .full-size(); 49 + content: ""; 50 } 51 } 52 }
+1 -1
resources/css/bem/profile-extra-entries.less
··· 28 29 &::before { 30 .full-size(); 31 - content: ''; 32 margin: 0 -10px; 33 width: calc(100% + 20px); 34 pointer-events: none;
··· 28 29 &::before { 30 .full-size(); 31 + content: ""; 32 margin: 0 -10px; 33 width: calc(100% + 20px); 34 pointer-events: none;
+1 -1
resources/css/bem/profile-extra-recent-infringements.less
··· 78 color: @osu-colour-l1; 79 80 &::before { 81 - content: ''; 82 } 83 } 84 }
··· 78 color: @osu-colour-l1; 79 80 &::before { 81 + content: ""; 82 } 83 } 84 }
+8 -3
resources/css/bem/profile-hue-selector.less
··· 26 top: 0; 27 width: @handle-width; 28 height: 100%; 29 - background-color: hsl(var(--hue), var(--c-saturation-2), var(--c-lightness-2)); 30 } 31 } 32 ··· 38 --lightness: var(--c-lightness-3); 39 // TODO: replace with this simpler alternative once supported by the next Firefox ESR (>127): 40 // background: linear-gradient(to right in hsl longer hue, var(--start-colour), var(--end-colour)); 41 - background: linear-gradient(to right, 42 hsl(0, var(--saturation), var(--lightness)) 0%, 43 hsl(60, var(--saturation), var(--lightness)) 16.67%, 44 hsl(120, var(--saturation), var(--lightness)) 33.33%, 45 hsl(180, var(--saturation), var(--lightness)) 50%, 46 hsl(240, var(--saturation), var(--lightness)) 66.67%, 47 hsl(300, var(--saturation), var(--lightness)) 83.33%, 48 - hsl(360, var(--saturation), var(--lightness)) 100%, 49 ); 50 } 51 }
··· 26 top: 0; 27 width: @handle-width; 28 height: 100%; 29 + background-color: hsl( 30 + var(--hue), 31 + var(--c-saturation-2), 32 + var(--c-lightness-2) 33 + ); 34 } 35 } 36 ··· 42 --lightness: var(--c-lightness-3); 43 // TODO: replace with this simpler alternative once supported by the next Firefox ESR (>127): 44 // background: linear-gradient(to right in hsl longer hue, var(--start-colour), var(--end-colour)); 45 + background: linear-gradient( 46 + to right, 47 hsl(0, var(--saturation), var(--lightness)) 0%, 48 hsl(60, var(--saturation), var(--lightness)) 16.67%, 49 hsl(120, var(--saturation), var(--lightness)) 33.33%, 50 hsl(180, var(--saturation), var(--lightness)) 50%, 51 hsl(240, var(--saturation), var(--lightness)) 66.67%, 52 hsl(300, var(--saturation), var(--lightness)) 83.33%, 53 + hsl(360, var(--saturation), var(--lightness)) 100% 54 ); 55 } 56 }
+1 -1
resources/css/bem/profile-previous-usernames.less
··· 10 border-radius: @border-radius-large; 11 display: flex; 12 align-items: baseline; 13 - transition: all 200ms cubic-bezier(.22,.61,.36,1); 14 text-shadow: initial; 15 16 @media @desktop {
··· 10 border-radius: @border-radius-large; 11 display: flex; 12 align-items: baseline; 13 + transition: all 200ms cubic-bezier(0.22, 0.61, 0.36, 1); 14 text-shadow: initial; 15 16 @media @desktop {
+7 -4
resources/css/bem/report-form.less
··· 24 max-width: 100vw; 25 } 26 27 - 28 &__button { 29 .reset-input(); 30 .default-text-shadow(); ··· 39 &[disabled] { 40 &::before { 41 .full-size(); 42 - content: ''; 43 border-radius: inherit; 44 background-color: fade(#000, 50%); 45 } 46 } 47 48 - &:focus, &:hover, &:active { 49 background-color: @osu-colour-b6; 50 } 51 ··· 56 &--report { 57 background-color: @red-dark; 58 59 - &:focus, &:hover, &:active { 60 background-color: @red; 61 } 62 }
··· 24 max-width: 100vw; 25 } 26 27 &__button { 28 .reset-input(); 29 .default-text-shadow(); ··· 38 &[disabled] { 39 &::before { 40 .full-size(); 41 + content: ""; 42 border-radius: inherit; 43 background-color: fade(#000, 50%); 44 } 45 } 46 47 + &:focus, 48 + &:hover, 49 + &:active { 50 background-color: @osu-colour-b6; 51 } 52 ··· 57 &--report { 58 background-color: @red-dark; 59 60 + &:focus, 61 + &:hover, 62 + &:active { 63 background-color: @red; 64 } 65 }
+1 -1
resources/css/bem/score-buttons.less
··· 13 14 .link-hover({ 15 background-color: hsl(var(--hsl-l1)); 16 - }) 17 } 18 }
··· 13 14 .link-hover({ 15 background-color: hsl(var(--hsl-l1)); 16 + }); 17 } 18 }
+1 -1
resources/css/bem/score-info.less
··· 52 53 &::after { 54 .full-size(); 55 - content: ''; 56 background-color: hsla(var(--hsl-b6), 0.75); 57 } 58 }
··· 52 53 &::after { 54 .full-size(); 55 + content: ""; 56 background-color: hsla(var(--hsl-b6), 0.75); 57 } 58 }
+3 -1
resources/css/bem/search-result-more.less
··· 24 color: @osu-colour-c1; 25 } 26 27 - &:focus, &:active, &:hover { 28 color: @osu-colour-c1; 29 } 30
··· 24 color: @osu-colour-c1; 25 } 26 27 + &:focus, 28 + &:active, 29 + &:hover { 30 color: @osu-colour-c1; 31 } 32
+1 -1
resources/css/bem/search-result.less
··· 13 14 &::before { 15 .full-size(); 16 - content: ''; 17 width: 5px; 18 border-top-left-radius: @border-radius-base; 19 border-bottom-left-radius: @border-radius-base;
··· 13 14 &::before { 15 .full-size(); 16 + content: ""; 17 width: 5px; 18 border-top-left-radius: @border-radius-base; 19 border-bottom-left-radius: @border-radius-base;
+6 -3
resources/css/bem/show-more-link.less
··· 76 margin: 5px auto 0; 77 } 78 79 - &[data-disabled='1'], &.js-disabled { 80 background-color: @osu-colour-b2; 81 } 82 ··· 86 position: absolute; 87 display: none; 88 89 - .@{_top}[data-disabled='1'] &, .@{_top}.js-disabled & { 90 display: flex; 91 } 92 } ··· 97 display: flex; 98 align-items: center; 99 100 - .@{_top}[data-disabled='1'] &, .@{_top}.js-disabled & { 101 opacity: 0; 102 } 103 }
··· 76 margin: 5px auto 0; 77 } 78 79 + &[data-disabled="1"], 80 + &.js-disabled { 81 background-color: @osu-colour-b2; 82 } 83 ··· 87 position: absolute; 88 display: none; 89 90 + .@{_top}[data-disabled="1"] &, 91 + .@{_top}.js-disabled & { 92 display: flex; 93 } 94 } ··· 99 display: flex; 100 align-items: center; 101 102 + .@{_top}[data-disabled="1"] &, 103 + .@{_top}.js-disabled & { 104 opacity: 0; 105 } 106 }
+2 -2
resources/css/bem/simple-form.less
··· 43 44 &:empty { 45 &::before { 46 - content: '\a0'; 47 } 48 } 49 } ··· 101 102 &:empty { 103 &::before { 104 - content: '\a0'; 105 } 106 } 107
··· 43 44 &:empty { 45 &::before { 46 + content: "\a0"; 47 } 48 } 49 } ··· 101 102 &:empty { 103 &::before { 104 + content: "\a0"; 105 } 106 } 107
+9 -5
resources/css/bem/simple-menu.less
··· 51 52 // extends mouse hover area to cover margin-bottom 53 &::after { 54 - content: ''; 55 display: block; 56 position: absolute; 57 top: 100%; ··· 113 114 .@{_top}--forum-topic-moderation & { 115 // hopefully 25px is enough to account for scrollbar (when exists) 116 - max-width: calc(100vw - (2 * @forum-topic-nav-item--gutter + 2 * @_padding-vertical + 25px)); 117 width: max-content; 118 display: grid; 119 grid-template-columns: repeat(auto-fit, @btn-circle-diameter); ··· 163 164 &::before { 165 .full-size(); 166 - content: ''; 167 background-color: fade(#000, 50%); 168 } 169 ··· 182 &__item { 183 .highlight-stripe() { 184 &::before { 185 - content: ''; 186 border-radius: 10px; 187 position: absolute; 188 top: (@_item-padding-vertical + 2px); ··· 239 } 240 } 241 242 - &[disabled], &--disabled { 243 color: #999; 244 // disable hover 245 pointer-events: none;
··· 51 52 // extends mouse hover area to cover margin-bottom 53 &::after { 54 + content: ""; 55 display: block; 56 position: absolute; 57 top: 100%; ··· 113 114 .@{_top}--forum-topic-moderation & { 115 // hopefully 25px is enough to account for scrollbar (when exists) 116 + max-width: calc( 117 + 100vw - 118 + (2 * @forum-topic-nav-item--gutter + 2 * @_padding-vertical + 25px) 119 + ); 120 width: max-content; 121 display: grid; 122 grid-template-columns: repeat(auto-fit, @btn-circle-diameter); ··· 166 167 &::before { 168 .full-size(); 169 + content: ""; 170 background-color: fade(#000, 50%); 171 } 172 ··· 185 &__item { 186 .highlight-stripe() { 187 &::before { 188 + content: ""; 189 border-radius: 10px; 190 position: absolute; 191 top: (@_item-padding-vertical + 2px); ··· 242 } 243 } 244 245 + &[disabled], 246 + &--disabled { 247 color: #999; 248 // disable hover 249 pointer-events: none;
+1 -1
resources/css/bem/sort.less
··· 47 48 &:hover { 49 background-color: var(--item-hover-bg); 50 - }; 51 } 52 53 &--contest-judge {
··· 47 48 &:hover { 49 background-color: var(--item-hover-bg); 50 + } 51 } 52 53 &--contest-judge {
+1 -1
resources/css/bem/sticky-header-breadcrumbs.less
··· 17 & + & { 18 &::before { 19 .fas(); 20 - content: '\f105'; 21 margin: 0 10px; 22 } 23 }
··· 17 & + & { 18 &::before { 19 .fas(); 20 + content: "\f105"; 21 margin: 0 10px; 22 } 23 }
+1 -1
resources/css/bem/store-notice.less
··· 15 16 &--important { 17 background-color: @yellow; 18 - background-image: url('~@images/backgrounds/button.svg'); 19 background-size: @container-tablet; 20 background-position: center; 21 color: @osu-colour-b6;
··· 15 16 &--important { 17 background-color: @yellow; 18 + background-image: url("~@images/backgrounds/button.svg"); 19 background-size: @container-tablet; 20 background-position: center; 21 color: @osu-colour-b6;
+2 -2
resources/css/bem/store-order.less
··· 39 .colors(processing); 40 .colors(shipped); 41 42 - &::before{ 43 - content: ''; 44 position: absolute; 45 top: 0; 46 left: 0;
··· 39 .colors(processing); 40 .colors(shipped); 41 42 + &::before { 43 + content: ""; 44 position: absolute; 45 top: 0; 46 left: 0;
+2 -2
resources/css/bem/store-payment-button.less
··· 25 } 26 27 &--paypal { 28 - background-image: url('~@images/store/paypal.png'); 29 } 30 31 &--xsolla { 32 - background-image: url('~@images/store/xsolla.png'); 33 } 34 }
··· 25 } 26 27 &--paypal { 28 + background-image: url("~@images/store/paypal.png"); 29 } 30 31 &--xsolla { 32 + background-image: url("~@images/store/xsolla.png"); 33 } 34 }
+14 -6
resources/css/bem/store-slider.less
··· 14 padding: 0 (@slider-callout--width / 2 - @gutter-v2 + 2px); 15 16 @media @desktop { 17 - padding: 0 ((@slider-callout--width + @callout-extension) / 2 - @gutter-v2-desktop + 2px); 18 } 19 20 - &__bigtext { // stupid name 21 font-size: @font-size--large; 22 font-weight: 600; 23 } ··· 45 width: @slider-callout--width + @callout-extension; 46 } 47 48 - &::after, &::before { 49 top: 100%; 50 left: 50%; 51 border: solid transparent; 52 - content: ''; 53 height: 0; 54 width: 0; 55 position: absolute; ··· 97 margin: 0 @preset-margin; 98 } 99 100 - &__subtext { // stupid name 101 margin-top: 2px; 102 color: @osu-colour-c2; 103 } ··· 114 } 115 116 &--disabled { 117 - .ui-slider-handle, .ui-slider-range { 118 background-color: @osu-colour-b1; 119 } 120 }
··· 14 padding: 0 (@slider-callout--width / 2 - @gutter-v2 + 2px); 15 16 @media @desktop { 17 + padding: 0 18 + ( 19 + (@slider-callout--width + @callout-extension) / 2 - @gutter-v2-desktop + 20 + 2px 21 + ); 22 } 23 24 + &__bigtext { 25 + // stupid name 26 font-size: @font-size--large; 27 font-weight: 600; 28 } ··· 50 width: @slider-callout--width + @callout-extension; 51 } 52 53 + &::after, 54 + &::before { 55 top: 100%; 56 left: 50%; 57 border: solid transparent; 58 + content: ""; 59 height: 0; 60 width: 0; 61 position: absolute; ··· 103 margin: 0 @preset-margin; 104 } 105 106 + &__subtext { 107 + // stupid name 108 margin-top: 2px; 109 color: @osu-colour-c2; 110 } ··· 121 } 122 123 &--disabled { 124 + .ui-slider-handle, 125 + .ui-slider-range { 126 background-color: @osu-colour-b1; 127 } 128 }
+1 -1
resources/css/bem/store-xsolla.less
··· 24 &__icon { 25 width: 40px; 26 height: 40px; 27 - background-image: url('~@images/layout/xsolla.png'); 28 background-size: contain; 29 } 30
··· 24 &__icon { 25 width: 40px; 26 height: 40px; 27 + background-image: url("~@images/layout/xsolla.png"); 28 background-size: contain; 29 } 30
+9 -5
resources/css/bem/supporter-eyecatch.less
··· 2 // See the LICENCE file in the repository root for full licence text. 3 4 .supporter-eyecatch { 5 - .at2x-simple('~@images/layout/supporter/banner-bg.jpg'); 6 background-size: cover; 7 width: auto; 8 height: 480px; ··· 11 position: relative; 12 13 &::before { 14 - content: ''; 15 .full-size(); 16 - background: linear-gradient(to bottom, hsla(var(--hsl-b5), 1) 4%, hsla(var(--hsl-b5), 0) 100%); 17 } 18 19 &::after { 20 - content: ''; 21 .full-size(); 22 - .at2x-simple('~@images/layout/supporter/banner-fg.png'); 23 background-size: cover; 24 background-position: center; 25 pointer-events: none;
··· 2 // See the LICENCE file in the repository root for full licence text. 3 4 .supporter-eyecatch { 5 + .at2x-simple("~@images/layout/supporter/banner-bg.jpg"); 6 background-size: cover; 7 width: auto; 8 height: 480px; ··· 11 position: relative; 12 13 &::before { 14 + content: ""; 15 .full-size(); 16 + background: linear-gradient( 17 + to bottom, 18 + hsla(var(--hsl-b5), 1) 4%, 19 + hsla(var(--hsl-b5), 0) 100% 20 + ); 21 } 22 23 &::after { 24 + content: ""; 25 .full-size(); 26 + .at2x-simple("~@images/layout/supporter/banner-fg.png"); 27 background-size: cover; 28 background-position: center; 29 pointer-events: none;
+48 -14
resources/css/bem/supporter-heart.less
··· 5 @animation-rate: 937.5ms; // 64bpm (aka 128bpm at half-time) 6 7 @keyframes support-circle-pulsate { 8 - 0% { transform: scale(0.9); } 9 - 20% { transform: scale(1.0); } 10 - 100% { transform: scale(0.9); } 11 } 12 13 @keyframes support-circle-glow { 14 // this is basically .default-box-shadow() animated to have a less intense shadow with an added glow when pulsating 15 - 0% { box-shadow: 0 1px @box-shadow-radius @box-shadow-color, inset 0 0 0px white; } 16 - 20% { box-shadow: 0 1px @box-shadow-radius lighten(@box-shadow-color, 70%), inset 0 0 5px white; } 17 - 80% { box-shadow: 0 1px @box-shadow-radius @box-shadow-color, inset 0 0 0px white; } 18 } 19 20 @keyframes support-heart-pulsate { 21 - 0% { transform: scale(1.0); } 22 - 20% { transform: scale(1.2); } 23 - 100% { transform: scale(1.0); } 24 } 25 26 @keyframes support-heart-glow { 27 - 0% { text-shadow: 0 0 0px white; } 28 - 20% { text-shadow: 0 0 10px white; } 29 - 80% { text-shadow: 0 0 0px white; } 30 } 31 32 .btn-bg(); ··· 70 &--active { 71 opacity: 1; 72 background-color: @osu-colour-pink-1; 73 - animation: support-circle-pulsate @animation-rate infinite ease-in-out, support-circle-glow @animation-rate infinite ease-in-out; 74 animation-fill-mode: none; 75 76 &::after { 77 - animation: support-heart-pulsate @animation-rate infinite ease-in-out, support-heart-glow @animation-rate infinite ease-in-out; 78 } 79 } 80 }
··· 5 @animation-rate: 937.5ms; // 64bpm (aka 128bpm at half-time) 6 7 @keyframes support-circle-pulsate { 8 + 0% { 9 + transform: scale(0.9); 10 + } 11 + 20% { 12 + transform: scale(1); 13 + } 14 + 100% { 15 + transform: scale(0.9); 16 + } 17 } 18 19 @keyframes support-circle-glow { 20 // this is basically .default-box-shadow() animated to have a less intense shadow with an added glow when pulsating 21 + 0% { 22 + box-shadow: 23 + 0 1px @box-shadow-radius @box-shadow-color, 24 + inset 0 0 0px white; 25 + } 26 + 20% { 27 + box-shadow: 28 + 0 1px @box-shadow-radius lighten(@box-shadow-color, 70%), 29 + inset 0 0 5px white; 30 + } 31 + 80% { 32 + box-shadow: 33 + 0 1px @box-shadow-radius @box-shadow-color, 34 + inset 0 0 0px white; 35 + } 36 } 37 38 @keyframes support-heart-pulsate { 39 + 0% { 40 + transform: scale(1); 41 + } 42 + 20% { 43 + transform: scale(1.2); 44 + } 45 + 100% { 46 + transform: scale(1); 47 + } 48 } 49 50 @keyframes support-heart-glow { 51 + 0% { 52 + text-shadow: 0 0 0px white; 53 + } 54 + 20% { 55 + text-shadow: 0 0 10px white; 56 + } 57 + 80% { 58 + text-shadow: 0 0 0px white; 59 + } 60 } 61 62 .btn-bg(); ··· 100 &--active { 101 opacity: 1; 102 background-color: @osu-colour-pink-1; 103 + animation: 104 + support-circle-pulsate @animation-rate infinite ease-in-out, 105 + support-circle-glow @animation-rate infinite ease-in-out; 106 animation-fill-mode: none; 107 108 &::after { 109 + animation: 110 + support-heart-pulsate @animation-rate infinite ease-in-out, 111 + support-heart-glow @animation-rate infinite ease-in-out; 112 } 113 } 114 }
+1 -1
resources/css/bem/supporter-perk-list-hero.less
··· 44 position: relative; 45 46 @media @desktop { 47 - margin-top: -50px 48 } 49 } 50
··· 44 position: relative; 45 46 @media @desktop { 47 + margin-top: -50px; 48 } 49 } 50
+7 -6
resources/css/bem/supporter-promo.less
··· 27 flex-direction: column; 28 29 @media @desktop { 30 - justify-content: center; 31 - padding-right: 50px; 32 - height: 100%; 33 } 34 35 @media @mobile { ··· 45 } 46 47 &__heart { 48 - .at2x-simple('~@images/badges/heart.png'); 49 .circle(75px); 50 background-size: 75px 75px; 51 ··· 63 flex-direction: column; 64 align-items: center; 65 66 - .at2x-simple('~@images/layout/pippi.png'); 67 68 width: 164px; 69 height: 234px; ··· 98 font-weight: 700; 99 color: @pink-dark; 100 101 - &:hover, &:active { 102 color: #fff; 103 } 104 }
··· 27 flex-direction: column; 28 29 @media @desktop { 30 + justify-content: center; 31 + padding-right: 50px; 32 + height: 100%; 33 } 34 35 @media @mobile { ··· 45 } 46 47 &__heart { 48 + .at2x-simple("~@images/badges/heart.png"); 49 .circle(75px); 50 background-size: 75px 75px; 51 ··· 63 flex-direction: column; 64 align-items: center; 65 66 + .at2x-simple("~@images/layout/pippi.png"); 67 68 width: 164px; 69 height: 234px; ··· 98 font-weight: 700; 99 color: @pink-dark; 100 101 + &:hover, 102 + &:active { 103 color: #fff; 104 } 105 }
+4 -2
resources/css/bem/supporter-status.less
··· 7 color: white; 8 9 @keyframes support-fill-pour { 10 - 0% { width: 0; } 11 } 12 13 display: flex; ··· 44 } 45 46 &__pippi { 47 - .at2x-simple('~@images/layout/supporter/header-pippi.png'); 48 background-size: cover; 49 background-position: center; 50 height: 348px;
··· 7 color: white; 8 9 @keyframes support-fill-pour { 10 + 0% { 11 + width: 0; 12 + } 13 } 14 15 display: flex; ··· 46 } 47 48 &__pippi { 49 + .at2x-simple("~@images/layout/supporter/header-pippi.png"); 50 background-size: cover; 51 background-position: center; 52 height: 348px;
+1 -1
resources/css/bem/title.less
··· 40 padding: 10px 0; 41 42 &::before { 43 - content: ''; 44 height: 0.65em; 45 margin-top: 0.3em; 46 margin-left: -6px;
··· 40 padding: 10px 0; 41 42 &::before { 43 + content: ""; 44 height: 0.65em; 45 margin-top: 0.3em; 46 margin-left: -6px;
+67 -67
resources/css/bem/tournament-list-item.less
··· 1 // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 2 // See the LICENCE file in the repository root for full licence text. 3 4 - .tournament-list-item { 5 - @_top: tournament-list-item; 6 7 - display: flex; 8 - flex-direction: column; 9 - background-color: @osu-colour-b4; 10 11 - .link-white(); 12 - .link-plain(); 13 - .default-box-shadow(); 14 15 - transition: 50ms ease-in-out; 16 17 - &:hover { 18 - @media @desktop { 19 - .@{_top}__image { 20 - transform: scale(1.02); 21 - } 22 } 23 - background-color: @osu-colour-b3; 24 } 25 26 - &__metadata { 27 - display: flex; 28 - justify-content: space-between; 29 30 - @media @mobile { 31 - align-items: center; 32 - } 33 } 34 35 - &__metadata-left { 36 - padding: 15px; 37 - padding-top: 10px; 38 - } 39 40 - &__metadata-right { 41 - padding: 10px; 42 - } 43 44 - &__tournament-date { 45 - font-size: @font-size--title-small-4; 46 - font-weight: bold; 47 - padding-bottom: 5px; 48 49 - @media @mobile { 50 - font-size: 12px; 51 - } 52 } 53 54 - &__registration-date { 55 - color: @osu-colour-f1; 56 - font-size: 12px; 57 58 - @media @mobile { 59 - font-size: 9px; 60 - } 61 } 62 63 - &__registrations { 64 - font-size: @font-size--title-small-2; 65 66 - @media @mobile { 67 - font-size: 12px; 68 - display: flex; 69 - flex-direction: column-reverse; 70 - align-items: center; 71 - } 72 } 73 74 - &__image-wrapper { 75 - overflow: hidden; 76 - } 77 78 - &__image { 79 - transition: 50ms ease-in-out; 80 - height: 510px; 81 - width: 100%; 82 - object-fit: cover; 83 - will-change: transform, filter, opacity; 84 85 - .@{_top}--old & { 86 - filter: grayscale(); 87 - opacity: 0.75; 88 - height: 210px; 89 - } 90 91 - .@{_top}--old:hover & { 92 - filter: none; 93 - opacity: 1; 94 - } 95 } 96 }
··· 1 // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 2 // See the LICENCE file in the repository root for full licence text. 3 4 + .tournament-list-item { 5 + @_top: tournament-list-item; 6 7 + display: flex; 8 + flex-direction: column; 9 + background-color: @osu-colour-b4; 10 11 + .link-white(); 12 + .link-plain(); 13 + .default-box-shadow(); 14 15 + transition: 50ms ease-in-out; 16 17 + &:hover { 18 + @media @desktop { 19 + .@{_top}__image { 20 + transform: scale(1.02); 21 } 22 } 23 + background-color: @osu-colour-b3; 24 + } 25 26 + &__metadata { 27 + display: flex; 28 + justify-content: space-between; 29 30 + @media @mobile { 31 + align-items: center; 32 } 33 + } 34 35 + &__metadata-left { 36 + padding: 15px; 37 + padding-top: 10px; 38 + } 39 40 + &__metadata-right { 41 + padding: 10px; 42 + } 43 44 + &__tournament-date { 45 + font-size: @font-size--title-small-4; 46 + font-weight: bold; 47 + padding-bottom: 5px; 48 49 + @media @mobile { 50 + font-size: 12px; 51 } 52 + } 53 54 + &__registration-date { 55 + color: @osu-colour-f1; 56 + font-size: 12px; 57 58 + @media @mobile { 59 + font-size: 9px; 60 } 61 + } 62 63 + &__registrations { 64 + font-size: @font-size--title-small-2; 65 66 + @media @mobile { 67 + font-size: 12px; 68 + display: flex; 69 + flex-direction: column-reverse; 70 + align-items: center; 71 } 72 + } 73 74 + &__image-wrapper { 75 + overflow: hidden; 76 + } 77 78 + &__image { 79 + transition: 50ms ease-in-out; 80 + height: 510px; 81 + width: 100%; 82 + object-fit: cover; 83 + will-change: transform, filter, opacity; 84 85 + .@{_top}--old & { 86 + filter: grayscale(); 87 + opacity: 0.75; 88 + height: 210px; 89 + } 90 91 + .@{_top}--old:hover & { 92 + filter: none; 93 + opacity: 1; 94 } 95 } 96 + }
+6 -1
resources/css/bem/tournament.less
··· 30 31 font-size: 14px; 32 33 - > h1, h2, h3, h4, h5, h6 { 34 color: white; 35 } 36 a {
··· 30 31 font-size: 14px; 32 33 + > h1, 34 + h2, 35 + h3, 36 + h4, 37 + h5, 38 + h6 { 39 color: white; 40 } 41 a {
+1 -1
resources/css/bem/track-cover-preview.less
··· 18 19 &::before { 20 .full-size(); 21 - content: ''; 22 background-color: fade(#000, 75%); 23 } 24 }
··· 18 19 &::before { 20 .full-size(); 21 + content: ""; 22 background-color: fade(#000, 75%); 23 } 24 }
+2 -1
resources/css/bem/user-card-brick.less
··· 40 .link-plain(); 41 42 display: flex; 43 - padding: @_border-width @_brick-padding-horizontal @_border-width @_brick-padding-horizontal - @_group-bar-margin; 44 height: 100%; 45 align-items: center; 46 overflow: hidden;
··· 40 .link-plain(); 41 42 display: flex; 43 + padding: @_border-width @_brick-padding-horizontal @_border-width 44 + @_brick-padding-horizontal - @_group-bar-margin; 45 height: 100%; 46 align-items: center; 47 overflow: hidden;
+4 -3
resources/css/bem/user-card.less
··· 44 } 45 46 &--has-outline::after { 47 - .@{top}:hover&, .@{top}--active& { 48 .full-size(); 49 - content: ''; 50 border: 2px solid @osu-colour-l1; 51 border-radius: @card-border-radius; 52 pointer-events: none; ··· 80 } 81 82 .@{top}--list & { 83 - border-radius: @avatar-border-radius 0 0 @avatar-border-radius 84 } 85 } 86
··· 44 } 45 46 &--has-outline::after { 47 + .@{top}:hover&, 48 + .@{top}--active& { 49 .full-size(); 50 + content: ""; 51 border: 2px solid @osu-colour-l1; 52 border-radius: @card-border-radius; 53 pointer-events: none; ··· 81 } 82 83 .@{top}--list & { 84 + border-radius: @avatar-border-radius 0 0 @avatar-border-radius; 85 } 86 } 87
+4 -1
resources/css/bem/user-cards.less
··· 7 display: grid; 8 gap: 10px; 9 // auto-fit centres if there's only 1 card 10 - grid-template-columns: repeat(auto-fill, minmax(@user-card-width-min, @user-card-width)); 11 12 justify-content: center; 13
··· 7 display: grid; 8 gap: 10px; 9 // auto-fit centres if there's only 1 card 10 + grid-template-columns: repeat( 11 + auto-fill, 12 + minmax(@user-card-width-min, @user-card-width) 13 + ); 14 15 justify-content: center; 16
+1 -1
resources/css/bem/user-home-beatmapset.less
··· 38 39 &__creator { 40 font-size: 10px; 41 - margin-top: 2px 42 } 43 44 &__meta {
··· 38 39 &__creator { 40 font-size: 10px; 41 + margin-top: 2px; 42 } 43 44 &__meta {
+3 -1
resources/css/bem/user-level.less
··· 11 12 &__icon { 13 .full-size(); 14 - clip-path: path("m 25,2.7 a 9.3,9.3 0 0 1 4.7,1.2 l 11.3,6.5 a 9.3,9.3 0 0 1 4.6,8.1 v 13.0 a 9.3,9.3 0 0 1 -4.6,8.1 L 29.7,46.1 a 9.3,9.3 0 0 1 -9.3,0 L 9.1,39.6 A 9.3,9.3 0 0 1 4.4,31.5 v -13.0 A 9.3,9.3 0 0 1 9.1,10.4 L 20.4,3.9 A 9.3,9.3 0 0 1 25,2.7 M 25,0.0 A 11.9,11.9 0 0 0 19.0,1.6 L 7.7,8.1 A 12.0,12.0 0 0 0 1.7,18.5 v 13.0 a 12.0,12.0 0 0 0 6.0,10.4 l 11.3,6.5 a 12.0,12.0 0 0 0 12.0,0 l 11.3,-6.5 a 12.0,12.0 0 0 0 6.0,-10.4 v -13.0 A 12.0,12.0 0 0 0 42.3,8.1 L 31.0,1.6 A 11.9,11.9 0 0 0 25.0,0 Z"); 15 background: linear-gradient(var(--bg)); 16 } 17
··· 11 12 &__icon { 13 .full-size(); 14 + clip-path: path( 15 + "m 25,2.7 a 9.3,9.3 0 0 1 4.7,1.2 l 11.3,6.5 a 9.3,9.3 0 0 1 4.6,8.1 v 13.0 a 9.3,9.3 0 0 1 -4.6,8.1 L 29.7,46.1 a 9.3,9.3 0 0 1 -9.3,0 L 9.1,39.6 A 9.3,9.3 0 0 1 4.4,31.5 v -13.0 A 9.3,9.3 0 0 1 9.1,10.4 L 20.4,3.9 A 9.3,9.3 0 0 1 25,2.7 M 25,0.0 A 11.9,11.9 0 0 0 19.0,1.6 L 7.7,8.1 A 12.0,12.0 0 0 0 1.7,18.5 v 13.0 a 12.0,12.0 0 0 0 6.0,10.4 l 11.3,6.5 a 12.0,12.0 0 0 0 12.0,0 l 11.3,-6.5 a 12.0,12.0 0 0 0 6.0,-10.4 v -13.0 A 12.0,12.0 0 0 0 42.3,8.1 L 31.0,1.6 A 11.9,11.9 0 0 0 25.0,0 Z" 16 + ); 17 background: linear-gradient(var(--bg)); 18 } 19
+1 -1
resources/css/bem/user-list-popup.less
··· 13 .default-border-radius(); 14 .default-box-shadow(); 15 16 - @media @desktop { 17 --columns: 10; 18 } 19
··· 13 .default-border-radius(); 14 .default-box-shadow(); 15 16 + @media @desktop { 17 --columns: 10; 18 } 19
+1 -1
resources/css/bem/user-session-list-session.less
··· 1 // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 2 // See the LICENCE file in the repository root for full licence text. 3 4 - .user-session-list-session { 5 flex-direction: row; 6 margin-bottom: 10px; 7
··· 1 // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 2 // See the LICENCE file in the repository root for full licence text. 3 4 + .user-session-list-session { 5 flex-direction: row; 6 margin-bottom: 10px; 7
+1 -1
resources/css/bem/user-verification-popup.less
··· 20 21 &__modal { 22 .default-box-shadow(); 23 - .at2x-simple('~@images/backgrounds/user-verification.jpg'); 24 background-size: cover; 25 background-position: center 0; 26 width: 100%;
··· 20 21 &__modal { 22 .default-box-shadow(); 23 + .at2x-simple("~@images/backgrounds/user-verification.jpg"); 24 background-size: cover; 25 background-position: center 0; 26 width: 100%;
-1
resources/css/bem/wiki-main-page-panel.less
··· 14 15 text-align: center; 16 17 - 18 &--full { 19 @media @desktop { 20 grid-column: 1 / span 2;
··· 14 15 text-align: center; 16 17 &--full { 18 @media @desktop { 19 grid-column: 1 / span 2;
+1 -1
resources/css/bem/wiki-search.less
··· 21 border: @_border-size solid hsl(var(--hsl-b6)); 22 23 &:focus-within { 24 - box-shadow: 0 0 10px hsl(var(--hsl-h2)); 25 border: @_border-size solid hsl(var(--hsl-h2)); 26 } 27 }
··· 21 border: @_border-size solid hsl(var(--hsl-b6)); 22 23 &:focus-within { 24 + box-shadow: 0 0 10px hsl(var(--hsl-h2)); 25 border: @_border-size solid hsl(var(--hsl-h2)); 26 } 27 }
-2
resources/css/bootstrap-variables.less
··· 34 @padding-xs-vertical: 0; 35 @padding-xs-horizontal: 5px; 36 37 - 38 @input-color: @gray-dark; 39 @input-border-focus: @pink; 40 ··· 56 @badge-color: @purple-darker; 57 @badge-link-hover-color: @pink-dark; 58 @badge-bg: #fff; 59 - 60 61 @nav-link-hover-bg: transparent; 62 @nav-link-padding: 10px;
··· 34 @padding-xs-vertical: 0; 35 @padding-xs-horizontal: 5px; 36 37 @input-color: @gray-dark; 38 @input-border-focus: @pink; 39 ··· 55 @badge-color: @purple-darker; 56 @badge-link-hover-color: @pink-dark; 57 @badge-bg: #fff; 58 59 @nav-link-hover-bg: transparent; 60 @nav-link-padding: 10px;
+8 -8
resources/css/colors.less
··· 31 @green-dark: #668800; 32 @green-darker: #445500; 33 34 - @red-lighter: #FFEDED; 35 - @red-light: #ED7887; 36 - @red: #ED1221; 37 - @red-dark: #BA0011; 38 @red-darker: #870000; 39 40 // https://about.twitter.com/en/who-we-are/brand-toolkit ··· 46 // bandcamp "green" from the provided buttons at https://bandcamp.com/buttons 47 @bandcamp-colour: #61929c; 48 // spotify "Green*" from https://developer.spotify.com/design/ 49 - @spotify-colour: #1DB954; 50 // patreon orange from the provided logos at https://www.patreon.com/toolbox/media 51 @patreon-colour: #e6461a; 52 // youtube red from https://www.youtube.com/yt/brand/ (yes it's supposed to be rgb(255,0,0) - my poor eyes...) ··· 96 b4: 10%, 20%; 97 b5: 10%, 15%; 98 b6: 10%, 10%; 99 - } 100 101 each(@base-colours, { 102 --hsl-@{key}: var(--base-hue), @value; ··· 140 orange: 45; 141 red: 360; 142 darkorange: 20; 143 - } 144 145 --c-saturation-1: 100%; 146 --c-saturation-2: 80%; ··· 201 @link-gray-light: #ccc; 202 @link-gray-light-hover: #eee; 203 204 - @group-colour-default: #0087CA; 205 206 @colour-rank-d: #ff5858; 207 @colour-rank-c: #ea7948;
··· 31 @green-dark: #668800; 32 @green-darker: #445500; 33 34 + @red-lighter: #ffeded; 35 + @red-light: #ed7887; 36 + @red: #ed1221; 37 + @red-dark: #ba0011; 38 @red-darker: #870000; 39 40 // https://about.twitter.com/en/who-we-are/brand-toolkit ··· 46 // bandcamp "green" from the provided buttons at https://bandcamp.com/buttons 47 @bandcamp-colour: #61929c; 48 // spotify "Green*" from https://developer.spotify.com/design/ 49 + @spotify-colour: #1db954; 50 // patreon orange from the provided logos at https://www.patreon.com/toolbox/media 51 @patreon-colour: #e6461a; 52 // youtube red from https://www.youtube.com/yt/brand/ (yes it's supposed to be rgb(255,0,0) - my poor eyes...) ··· 96 b4: 10%, 20%; 97 b5: 10%, 15%; 98 b6: 10%, 10%; 99 + }; 100 101 each(@base-colours, { 102 --hsl-@{key}: var(--base-hue), @value; ··· 140 orange: 45; 141 red: 360; 142 darkorange: 20; 143 + }; 144 145 --c-saturation-1: 100%; 146 --c-saturation-2: 80%; ··· 201 @link-gray-light: #ccc; 202 @link-gray-light-hover: #eee; 203 204 + @group-colour-default: #0087ca; 205 206 @colour-rank-d: #ff5858; 207 @colour-rank-c: #ea7948;
+530 -508
resources/css/entrypoints/docs.less
··· 4 @import "~normalize.css/normalize.css"; 5 @import "~highlight.js/styles/obsidian.css"; 6 7 - @font-default: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; 8 9 body, 10 html { 11 - font-family: @font-default; 12 - font-size: 14px; 13 } 14 15 .content h1, ··· 18 .content h4, 19 .content h5, 20 .content h6 { 21 - font-family: @font-default; 22 } 23 24 .content h1, ··· 27 .content h4, 28 .content h5, 29 .content h6 { 30 - font-weight: 700 31 } 32 33 .content code, 34 .content pre { 35 - font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif; 36 - font-size: 14px; 37 - line-height: 1.5 38 } 39 40 .content code { 41 - word-break: break-all; 42 - word-break: break-word; 43 } 44 45 .content aside.notice:before, 46 .content aside.success:before, 47 .content aside.warning:before, 48 - .tocify-wrapper>.search:before { 49 - font-family: @font-default; 50 - speak: none; 51 - font-style: normal; 52 - font-variant: normal; 53 - text-transform: none; 54 - line-height: 1 55 } 56 57 .content aside.warning:before { 58 - content: "✋" 59 } 60 61 .content aside.notice:before { 62 - content: "ℹ" 63 } 64 65 .content aside.success:before { 66 - content: "✅" 67 } 68 69 - .tocify-wrapper>.search:before { 70 - content: "🔎" 71 } 72 73 .highlight .c, 74 .highlight .c1, 75 .highlight .cm, 76 .highlight .cs { 77 - color: #909090 78 } 79 80 .highlight, 81 .highlight .w { 82 - background-color: #292929 83 } 84 85 .hljs { 86 - display: block; 87 - overflow-x: auto; 88 - padding: .5em; 89 - background: #23241f 90 } 91 92 .hljs, 93 .hljs-subst, 94 .hljs-tag { 95 - color: #f8f8f2 96 } 97 98 .hljs-emphasis, 99 .hljs-strong { 100 - color: #a8a8a2 101 } 102 103 .hljs-bullet, ··· 106 .hljs-number, 107 .hljs-quote, 108 .hljs-regexp { 109 - color: #ae81ff 110 } 111 112 .hljs-code, 113 .hljs-section, 114 .hljs-selector-class, 115 .hljs-title { 116 - color: #a6e22e 117 } 118 119 .hljs-strong { 120 - font-weight: 700 121 } 122 123 .hljs-emphasis { 124 - font-style: italic 125 } 126 127 .hljs-attr, 128 .hljs-keyword, 129 .hljs-name, 130 .hljs-selector-tag { 131 - color: #f92672 132 } 133 134 .hljs-attribute, 135 .hljs-symbol { 136 - color: #66d9ef 137 } 138 139 .hljs-class .hljs-title, 140 .hljs-params { 141 - color: #f8f8f2 142 } 143 144 .hljs-addition, ··· 151 .hljs-template-variable, 152 .hljs-type, 153 .hljs-variable { 154 - color: #e6db74 155 } 156 157 .hljs-comment, 158 .hljs-deletion, 159 .hljs-meta { 160 - color: #75715e 161 } 162 163 body, 164 html { 165 - color: #333; 166 - padding: 0; 167 - margin: 0; 168 - -webkit-font-smoothing: antialiased; 169 - -moz-osx-font-smoothing: grayscale; 170 - background-color: whitesmoke; 171 - height: 100%; 172 - -webkit-text-size-adjust: none 173 } 174 175 - #toc>ul>li>a>span { 176 - float: right; 177 - background-color: #2484ff; 178 - border-radius: 40px; 179 - width: 20px 180 } 181 182 .tocify-wrapper { 183 - transition: left .3s ease-in-out; 184 - overflow-y: auto; 185 - overflow-x: hidden; 186 - position: fixed; 187 - z-index: 30; 188 - top: 0; 189 - left: 0; 190 - bottom: 0; 191 - width: 230px; 192 - background-color: #393939; 193 - font-size: 13px; 194 - font-weight: 700 195 } 196 197 .tocify-wrapper .lang-selector { 198 - display: none 199 } 200 201 .tocify-wrapper .lang-selector a { 202 - padding-top: .5em; 203 - padding-bottom: .5em 204 } 205 206 - .tocify-wrapper>img { 207 - display: block 208 } 209 210 - .tocify-wrapper>.search { 211 - position: relative 212 } 213 214 - .tocify-wrapper>.search input { 215 - background: #393939; 216 - border-width: 0 0 1px; 217 - border-color: #666; 218 - padding: 6px 0 6px 20px; 219 - box-sizing: border-box; 220 - margin: 10px 15px; 221 - width: 200px; 222 - outline: none; 223 - color: #fff; 224 - border-radius: 0 225 } 226 227 - .tocify-wrapper>.search:before { 228 - position: absolute; 229 - top: 17px; 230 - left: 15px; 231 - color: #fff 232 } 233 234 - .tocify-wrapper img+.tocify { 235 - margin-top: 20px 236 } 237 238 .tocify-wrapper .search-results { 239 - margin-top: 0; 240 - box-sizing: border-box; 241 - height: 0; 242 - overflow-y: auto; 243 - overflow-x: hidden; 244 - transition-property: height, margin; 245 - transition-duration: .18s; 246 - transition-timing-function: ease-in-out; 247 - background: linear-gradient(180deg, rgba(0, 0, 0, .2), transparent 8px), linear-gradient(0deg, rgba(0, 0, 0, .2), transparent 8px), linear-gradient(180deg, #000, transparent 1.5px), linear-gradient(0deg, #939393, hsla(0, 0%, 58%, 0) 1.5px), #262626 248 } 249 250 .tocify-wrapper .search-results.visible { 251 - height: 30%; 252 - margin-bottom: 1em 253 } 254 255 .tocify-wrapper .search-results li { 256 - margin: 1em 15px; 257 - line-height: 1 258 } 259 260 .tocify-wrapper a { 261 - color: #fff; 262 - text-decoration: none 263 } 264 265 .tocify-wrapper .search-results a:hover { 266 - text-decoration: underline 267 } 268 269 .tocify-wrapper .toc-footer li, 270 - .tocify-wrapper .tocify-item>a { 271 - padding: 0 15px; 272 - display: block; 273 - overflow-x: hidden; 274 - white-space: nowrap; 275 - text-overflow: ellipsis 276 } 277 - .tocify-wrapper .tocify-item.level-3>a { 278 - padding: 0 25px; 279 } 280 281 .tocify-wrapper li, 282 .tocify-wrapper ul { 283 - list-style: none; 284 - margin: 0; 285 - padding: 0; 286 - line-height: 28px 287 } 288 289 .tocify-wrapper li { 290 - color: #fff; 291 - transition-property: background; 292 - transition-timing-function: linear; 293 - transition-duration: .23s 294 } 295 296 .tocify-wrapper .tocify-focus { 297 - box-shadow: 0 1px 0 #000; 298 - background-color: #2467af; 299 - color: #fff; 300 - font-weight: bold; 301 } 302 303 .tocify-wrapper .tocify-subheader { 304 - display: none; 305 - background-color: #262626; 306 - font-weight: 500; 307 - background: linear-gradient(180deg, rgba(0, 0, 0, .2), transparent 8px), linear-gradient(0deg, rgba(0, 0, 0, .2), transparent 8px), linear-gradient(180deg, #000, transparent 1.5px), linear-gradient(0deg, #939393, hsla(0, 0%, 58%, 0) 1.5px), #262626 308 } 309 310 .tocify-wrapper .jets-searching .tocify-subheader, 311 .tocify-wrapper .tocify-subheader.visible { 312 - display: block; 313 } 314 315 - .tocify-wrapper .tocify-subheader .tocify-item>a { 316 - padding-left: 25px; 317 - font-size: 12px 318 } 319 320 - .tocify-wrapper .tocify-subheader .tocify-item.level-3>a { 321 - padding-left: 35px; 322 } 323 324 - .tocify-wrapper .tocify-subheader>li:last-child { 325 - box-shadow: none 326 } 327 328 .tocify-wrapper .toc-footer { 329 - padding: 1em 0; 330 - margin-top: 1em; 331 - border-top: 1px dashed #666 332 } 333 334 .tocify-wrapper .toc-footer a, 335 .tocify-wrapper .toc-footer li { 336 - color: #fff; 337 - text-decoration: none 338 } 339 340 .tocify-wrapper .toc-footer a:hover { 341 - text-decoration: underline 342 } 343 344 .tocify-wrapper .toc-footer li { 345 - font-size: .8em; 346 - line-height: 1.7; 347 - text-decoration: none 348 } 349 350 #nav-button { 351 - padding: 0 1.5em 5em 0; 352 - display: none; 353 - position: fixed; 354 - top: 0; 355 - left: 0; 356 - z-index: 100; 357 - color: #000; 358 - text-decoration: none; 359 - font-weight: 700; 360 - opacity: .7; 361 - line-height: 16px; 362 - transition: left .3s ease-in-out 363 } 364 365 #nav-button span { 366 - display: block; 367 - padding: 6px; 368 - background-color: rgba(234, 242, 246, .7); 369 - -webkit-transform-origin: 0 0; 370 - transform-origin: 0 0; 371 - -webkit-transform: rotate(-90deg) translate(-100%); 372 - transform: rotate(-90deg) translate(-100%); 373 - border-radius: 0 0 0 5px 374 } 375 376 #nav-button img { 377 - height: 16px; 378 - vertical-align: bottom 379 } 380 381 #nav-button:hover { 382 - opacity: 1 383 } 384 385 #nav-button.open { 386 - left: 230px 387 } 388 389 .page-wrapper { 390 - margin-left: 230px; 391 - position: relative; 392 - z-index: 10; 393 - background-color: #eaf2f6; 394 - min-height: 100%; 395 - padding-bottom: 1px 396 } 397 398 .page-wrapper .dark-box { 399 - width: 50%; 400 - background-color: #393939; 401 - position: absolute; 402 - right: 0; 403 - top: 0; 404 - bottom: 0 405 } 406 407 .page-wrapper .lang-selector { 408 - position: fixed; 409 - z-index: 50; 410 - border-bottom: 5px solid #393939 411 } 412 413 .lang-selector { 414 - background-color: #222; 415 - width: 100%; 416 - font-weight: 700 417 } 418 419 .lang-selector button { 420 - display: block; 421 - float: left; 422 - color: #fff; 423 - text-decoration: none; 424 - padding: 0 10px; 425 - line-height: 30px; 426 - outline: 0; 427 - background: transparent; 428 - border: none; 429 - --bg: transparent; 430 - --bg-hover: #111; 431 - --bg-active: #393939; 432 - background: var(--bg); 433 } 434 435 .lang-selector button:active, 436 .lang-selector button:hover, 437 .lang-selector button:focus { 438 - --bg: var(--bg-hover); 439 } 440 441 .lang-selector:after { 442 - content: ''; 443 - clear: both; 444 - display: block 445 } 446 447 .content { 448 - position: relative; 449 - z-index: 30 450 } 451 452 .content:after { 453 - content: ''; 454 - display: block; 455 - clear: both 456 } 457 458 - .content>aside, 459 - .content>details, 460 - .content>dl, 461 - .content>h1, 462 - .content>h2, 463 - .content>h3, 464 - .content>h4, 465 - .content>h5, 466 - .content>h6, 467 - .content>ol, 468 - .content>p, 469 - .content>table, 470 - .content>ul, 471 - .content>form>aside, 472 - .content>form>details, 473 - .content>form>h1, 474 - .content>form>h2, 475 - .content>form>h3, 476 - .content>form>h4, 477 - .content>form>h5, 478 - .content>form>h6, 479 - .content>form>p, 480 - .content>form>table, 481 - .content>form>ul, 482 - .content>form>div { 483 - margin-right: 50%; 484 - padding: 0 28px; 485 - box-sizing: border-box; 486 - display: block; 487 - text-shadow: 0 1px 0 #fff 488 } 489 490 - .content>ol, 491 - .content>ul { 492 - padding-left: 43px 493 } 494 495 - .content>div, 496 - .content>h1, 497 - .content>h2 { 498 - clear: both 499 } 500 501 .content h1 { 502 - font-size: 30px; 503 - padding-top: .5em; 504 - padding-bottom: .5em; 505 - border-bottom: 1px solid #ccc; 506 - margin-bottom: 21px; 507 - margin-top: 2em; 508 - border-top: 1px solid #ddd; 509 - background-image: linear-gradient(180deg, #fff, #f9f9f9) 510 } 511 512 - .content div:first-child+h1, 513 .content h1:first-child { 514 - border-top-width: 0; 515 - margin-top: 0 516 } 517 518 .content h2 { 519 - font-size: 20px; 520 - margin-top: 4em; 521 - margin-bottom: 0; 522 - border-top: 1px solid #ccc; 523 - padding-top: 1.2em; 524 - padding-bottom: 1.2em; 525 - background-image: linear-gradient(180deg, hsla(0, 0%, 100%, .4), hsla(0, 0%, 100%, 0)) 526 } 527 528 - .content h1+div+h2, 529 - .content h1+h2 { 530 - margin-top: -21px; 531 - border-top: none 532 } 533 534 .content h3, 535 .content h4, 536 .content h5, 537 .content h6 { 538 - font-size: 15px; 539 - margin-top: 2.5em; 540 - margin-bottom: .8em 541 } 542 543 .content h4, 544 .content h5, 545 .content h6 { 546 - font-size: 10px 547 } 548 549 .content hr { 550 - margin: 2em 0; 551 - border-top: 2px solid #393939; 552 - border-bottom: 2px solid #eaf2f6 553 } 554 555 .content table { 556 - margin-bottom: 1em; 557 - overflow: auto; 558 - border-collapse: collapse; 559 } 560 561 .content table td, 562 .content table th { 563 - text-align: left; 564 - vertical-align: top; 565 - line-height: 1.6 566 } 567 568 .content table th { 569 - padding: 5px 10px; 570 - border-bottom: 1px solid #ccc; 571 - vertical-align: bottom 572 } 573 574 .content table td { 575 - padding: 10px 576 } 577 578 .content table tr:last-child { 579 - border-bottom: 1px solid #ccc 580 } 581 582 - .content table tr:nth-child(odd)>td { 583 - background-color: #ebf3f6 584 } 585 586 - .content table tr:nth-child(even)>td { 587 - background-color: #ebf2f6 588 } 589 590 .content dt { 591 - font-weight: 700 592 } 593 594 .content dd { 595 - margin-left: 15px 596 } 597 598 .content dd, 599 .content dt, 600 .content li, 601 .content p { 602 - line-height: 1.6; 603 - margin-top: 0 604 } 605 606 .content img { 607 - max-width: 100% 608 } 609 610 .content code { 611 - padding: 3px; 612 - border-radius: 3px; 613 - background-color: rgba(0, 0, 0, 0.05); 614 } 615 616 - .content pre>code { 617 - background-color: transparent; 618 - padding: 0 619 } 620 621 .content aside { 622 - padding-top: 1em; 623 - padding-bottom: 1em; 624 - margin-top: 1.5em; 625 - margin-bottom: 1.5em; 626 - background: #292929; 627 - line-height: 1.6; 628 - color: #c8c8c8; 629 - text-shadow: none; 630 } 631 632 .content aside.info { 633 - background: #8fbcd4; 634 - text-shadow: 0 1px 0 #a0c6da; 635 - color: initial; 636 } 637 638 .content aside.warning { 639 - background-color: #c97a7e; 640 - text-shadow: 0 1px 0 #d18e91; 641 - color: initial; 642 } 643 644 .content aside.success { 645 - background-color: #6ac174; 646 - text-shadow: 0 1px 0 #80ca89; 647 - color: initial; 648 } 649 650 .content aside:before { 651 - vertical-align: middle; 652 - padding-right: .5em; 653 - font-size: 14px 654 } 655 656 .content .search-highlight { 657 - padding: 2px; 658 - margin: -2px; 659 - border-radius: 4px; 660 - border: 1px solid #f7e633; 661 - text-shadow: 1px 1px 0 #666; 662 - background: linear-gradient(to top left, #f7e633, #f1d32f) 663 } 664 665 .content blockquote, 666 .content pre { 667 - background-color: #292929; 668 - color: #fff; 669 - padding: 1.5em 28px; 670 - margin: 0; 671 - width: 50%; 672 - float: right; 673 - clear: right; 674 - box-sizing: border-box; 675 - text-shadow: 0 1px 2px rgba(0, 0, 0, .4) 676 } 677 678 .content .annotation { 679 - background-color: #292929; 680 - color: #fff; 681 - padding: 0 28px; 682 - margin: 0; 683 - width: 50%; 684 - float: right; 685 - clear: right; 686 - box-sizing: border-box; 687 - text-shadow: 0 1px 2px rgba(0, 0, 0, .4) 688 } 689 690 .content .annotation pre { 691 - padding: 0 0; 692 - width: 100%; 693 - float: none; 694 } 695 696 - .content blockquote>p, 697 - .content pre>p { 698 - margin: 0 699 } 700 701 .content blockquote a, 702 .content pre a { 703 - color: #fff; 704 - text-decoration: none; 705 - border-bottom: 1px dashed #ccc 706 } 707 708 - .content blockquote>p { 709 - background-color: #1c1c1c; 710 - border-radius: 5px; 711 - padding: 13px; 712 - color: #ccc; 713 - border-top: 1px solid #000; 714 - border-bottom: 1px solid #404040 715 } 716 717 - @media (max-width:930px) { 718 - .tocify-wrapper { 719 - left: -230px 720 - } 721 - .tocify-wrapper.open { 722 - left: 0 723 - } 724 - .page-wrapper { 725 - margin-left: 0 726 - } 727 - #nav-button { 728 - display: block 729 - } 730 - .tocify-wrapper .tocify-item>a { 731 - padding-top: .3em; 732 - padding-bottom: .3em 733 - } 734 } 735 736 - @media (max-width:700px) { 737 - .dark-box { 738 - display: none 739 - } 740 - .tocify-wrapper .lang-selector { 741 - display: block 742 - } 743 - .page-wrapper .lang-selector { 744 - display: none 745 - } 746 - .content aside, 747 - .content dl, 748 - .content h1, 749 - .content h2, 750 - .content h3, 751 - .content h4, 752 - .content h5, 753 - .content h6, 754 - .content ol, 755 - .content p, 756 - .content table, 757 - .content ul { 758 - margin-right: 0 759 - } 760 - .content>aside, 761 - .content>details, 762 - .content>dl, 763 - .content>h1, 764 - .content>h2, 765 - .content>h3, 766 - .content>h4, 767 - .content>h5, 768 - .content>h6, 769 - .content>ol, 770 - .content>p, 771 - .content>table, 772 - .content>ul, 773 - .content>form>aside, 774 - .content>form>details, 775 - .content>form>h1, 776 - .content>form>h2, 777 - .content>form>h3, 778 - .content>form>h4, 779 - .content>form>h5, 780 - .content>form>h6, 781 - .content>form>p, 782 - .content>form>table, 783 - .content>form>ul, 784 - .content>form>div { 785 - margin-right: 0; 786 - } 787 - .content blockquote, 788 - .content pre { 789 - float: none; 790 - width: auto 791 - } 792 - .content .annotation { 793 - float: none; 794 - width: auto 795 - } 796 } 797 798 .badge { 799 - padding: 1px 9px 2px; 800 - white-space: nowrap; 801 - -webkit-border-radius: 9px; 802 - -moz-border-radius: 9px; 803 - border-radius: 9px; 804 - color: #ffffff; 805 - text-shadow: none !important; 806 - font-weight: bold; 807 } 808 809 .badge.badge-darkred { 810 - background-color: darkred; 811 } 812 813 .badge.badge-red { 814 - background-color: red; 815 } 816 817 .badge.badge-blue { 818 - background-color: blue; 819 } 820 821 .badge.badge-darkblue { 822 - background-color: darkblue; 823 } 824 825 .badge.badge-green { 826 - background-color: green; 827 } 828 829 .badge.badge-darkgreen { 830 - background-color: darkgreen; 831 } 832 833 .badge.badge-purple { 834 - background-color: purple; 835 } 836 837 .badge.badge-black { 838 - background-color: black; 839 } 840 841 .badge.badge-grey { 842 - background-color: grey; 843 } 844 845 .fancy-heading-panel { 846 - background-color: lightgrey; 847 - border-radius: 5px; 848 - padding-left: 5px !important; 849 - padding-top: 5px !important; 850 - padding-bottom: 5px !important; 851 - margin-left: 25px; 852 - margin-right: 10px; 853 - width: 47%; 854 } 855 856 @media screen and (max-width: 700px) { 857 - .fancy-heading-panel { 858 - width: 95%; 859 - } 860 - 861 } 862 863 button { 864 - border: none; 865 } 866 867 * { 868 - /* Foreground, Background */ 869 - scrollbar-color: #3c4c67 transparent; 870 } 871 - *::-webkit-scrollbar { /* Background */ 872 - width: 10px; 873 - height: 10px; 874 - background: transparent; 875 } 876 877 - *::-webkit-scrollbar-thumb { /* Foreground */ 878 - background: #626161; 879 } 880 881 details { 882 - position: relative; 883 } 884 885 details::before { 886 - position: absolute; 887 - content: ''; 888 - height: 100%; 889 - width: 4px; 890 - margin-left: -8px; 891 - border-radius: 8px; 892 - background: lightgrey; 893 } 894 895 /* override pastel's override */ 896 details > summary { 897 - display: list-item; 898 } 899 900 .badge.badge-scope { 901 - font-size: 80%; 902 - text-decoration: none; 903 - background: #87ad3a; 904 } 905 .badge.badge-scope-lazer { 906 - background: #ba6436; 907 } 908 .badge.badge-scope-oauth { 909 - background: #3a87ad; 910 } 911 .badge.badge-user { 912 - background: #ad2a66; 913 } 914 - .content table tr:nth-child(2n+1) > td { 915 - background: rgba(0, 0, 0, 0.02); 916 } 917 .content table td { 918 - padding-top: 5px; 919 - padding-bottom: 5px; 920 } 921 .logo { 922 - background-image: url('~@images/layout/osu-logo-white.svg'); 923 - background-position: center; 924 - background-size: contain; 925 - background-repeat: no-repeat; 926 - width: 100%; 927 - max-width: 70%; 928 - padding-bottom: $max-width; 929 - margin: auto; 930 - display: block; 931 - margin-top: 10px; 932 } 933 .menu-burger { 934 --width: 2px; ··· 941 margin: 0 calc(var(--width) + var(--space)) -2px; 942 border-radius: 10000px; 943 944 - &::after, &::before { 945 - content: ''; 946 width: inherit; 947 height: inherit; 948 background-color: inherit;
··· 4 @import "~normalize.css/normalize.css"; 5 @import "~highlight.js/styles/obsidian.css"; 6 7 + @font-default: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; 8 9 body, 10 html { 11 + font-family: @font-default; 12 + font-size: 14px; 13 } 14 15 .content h1, ··· 18 .content h4, 19 .content h5, 20 .content h6 { 21 + font-family: @font-default; 22 } 23 24 .content h1, ··· 27 .content h4, 28 .content h5, 29 .content h6 { 30 + font-weight: 700; 31 } 32 33 .content code, 34 .content pre { 35 + font-family: 36 + Consolas, 37 + Menlo, 38 + Monaco, 39 + Lucida Console, 40 + Liberation Mono, 41 + DejaVu Sans Mono, 42 + Bitstream Vera Sans Mono, 43 + Courier New, 44 + monospace, 45 + serif; 46 + font-size: 14px; 47 + line-height: 1.5; 48 } 49 50 .content code { 51 + word-break: break-all; 52 + word-break: break-word; 53 } 54 55 .content aside.notice:before, 56 .content aside.success:before, 57 .content aside.warning:before, 58 + .tocify-wrapper > .search:before { 59 + font-family: @font-default; 60 + speak: none; 61 + font-style: normal; 62 + font-variant: normal; 63 + text-transform: none; 64 + line-height: 1; 65 } 66 67 .content aside.warning:before { 68 + content: "✋"; 69 } 70 71 .content aside.notice:before { 72 + content: "ℹ"; 73 } 74 75 .content aside.success:before { 76 + content: "✅"; 77 } 78 79 + .tocify-wrapper > .search:before { 80 + content: "🔎"; 81 } 82 83 .highlight .c, 84 .highlight .c1, 85 .highlight .cm, 86 .highlight .cs { 87 + color: #909090; 88 } 89 90 .highlight, 91 .highlight .w { 92 + background-color: #292929; 93 } 94 95 .hljs { 96 + display: block; 97 + overflow-x: auto; 98 + padding: 0.5em; 99 + background: #23241f; 100 } 101 102 .hljs, 103 .hljs-subst, 104 .hljs-tag { 105 + color: #f8f8f2; 106 } 107 108 .hljs-emphasis, 109 .hljs-strong { 110 + color: #a8a8a2; 111 } 112 113 .hljs-bullet, ··· 116 .hljs-number, 117 .hljs-quote, 118 .hljs-regexp { 119 + color: #ae81ff; 120 } 121 122 .hljs-code, 123 .hljs-section, 124 .hljs-selector-class, 125 .hljs-title { 126 + color: #a6e22e; 127 } 128 129 .hljs-strong { 130 + font-weight: 700; 131 } 132 133 .hljs-emphasis { 134 + font-style: italic; 135 } 136 137 .hljs-attr, 138 .hljs-keyword, 139 .hljs-name, 140 .hljs-selector-tag { 141 + color: #f92672; 142 } 143 144 .hljs-attribute, 145 .hljs-symbol { 146 + color: #66d9ef; 147 } 148 149 .hljs-class .hljs-title, 150 .hljs-params { 151 + color: #f8f8f2; 152 } 153 154 .hljs-addition, ··· 161 .hljs-template-variable, 162 .hljs-type, 163 .hljs-variable { 164 + color: #e6db74; 165 } 166 167 .hljs-comment, 168 .hljs-deletion, 169 .hljs-meta { 170 + color: #75715e; 171 } 172 173 body, 174 html { 175 + color: #333; 176 + padding: 0; 177 + margin: 0; 178 + -webkit-font-smoothing: antialiased; 179 + -moz-osx-font-smoothing: grayscale; 180 + background-color: whitesmoke; 181 + height: 100%; 182 + -webkit-text-size-adjust: none; 183 } 184 185 + #toc > ul > li > a > span { 186 + float: right; 187 + background-color: #2484ff; 188 + border-radius: 40px; 189 + width: 20px; 190 } 191 192 .tocify-wrapper { 193 + transition: left 0.3s ease-in-out; 194 + overflow-y: auto; 195 + overflow-x: hidden; 196 + position: fixed; 197 + z-index: 30; 198 + top: 0; 199 + left: 0; 200 + bottom: 0; 201 + width: 230px; 202 + background-color: #393939; 203 + font-size: 13px; 204 + font-weight: 700; 205 } 206 207 .tocify-wrapper .lang-selector { 208 + display: none; 209 } 210 211 .tocify-wrapper .lang-selector a { 212 + padding-top: 0.5em; 213 + padding-bottom: 0.5em; 214 } 215 216 + .tocify-wrapper > img { 217 + display: block; 218 } 219 220 + .tocify-wrapper > .search { 221 + position: relative; 222 } 223 224 + .tocify-wrapper > .search input { 225 + background: #393939; 226 + border-width: 0 0 1px; 227 + border-color: #666; 228 + padding: 6px 0 6px 20px; 229 + box-sizing: border-box; 230 + margin: 10px 15px; 231 + width: 200px; 232 + outline: none; 233 + color: #fff; 234 + border-radius: 0; 235 } 236 237 + .tocify-wrapper > .search:before { 238 + position: absolute; 239 + top: 17px; 240 + left: 15px; 241 + color: #fff; 242 } 243 244 + .tocify-wrapper img + .tocify { 245 + margin-top: 20px; 246 } 247 248 .tocify-wrapper .search-results { 249 + margin-top: 0; 250 + box-sizing: border-box; 251 + height: 0; 252 + overflow-y: auto; 253 + overflow-x: hidden; 254 + transition-property: height, margin; 255 + transition-duration: 0.18s; 256 + transition-timing-function: ease-in-out; 257 + background: linear-gradient(180deg, rgba(0, 0, 0, 0.2), transparent 8px), 258 + linear-gradient(0deg, rgba(0, 0, 0, 0.2), transparent 8px), 259 + linear-gradient(180deg, #000, transparent 1.5px), 260 + linear-gradient(0deg, #939393, hsla(0, 0%, 58%, 0) 1.5px), #262626; 261 } 262 263 .tocify-wrapper .search-results.visible { 264 + height: 30%; 265 + margin-bottom: 1em; 266 } 267 268 .tocify-wrapper .search-results li { 269 + margin: 1em 15px; 270 + line-height: 1; 271 } 272 273 .tocify-wrapper a { 274 + color: #fff; 275 + text-decoration: none; 276 } 277 278 .tocify-wrapper .search-results a:hover { 279 + text-decoration: underline; 280 } 281 282 .tocify-wrapper .toc-footer li, 283 + .tocify-wrapper .tocify-item > a { 284 + padding: 0 15px; 285 + display: block; 286 + overflow-x: hidden; 287 + white-space: nowrap; 288 + text-overflow: ellipsis; 289 } 290 + .tocify-wrapper .tocify-item.level-3 > a { 291 + padding: 0 25px; 292 } 293 294 .tocify-wrapper li, 295 .tocify-wrapper ul { 296 + list-style: none; 297 + margin: 0; 298 + padding: 0; 299 + line-height: 28px; 300 } 301 302 .tocify-wrapper li { 303 + color: #fff; 304 + transition-property: background; 305 + transition-timing-function: linear; 306 + transition-duration: 0.23s; 307 } 308 309 .tocify-wrapper .tocify-focus { 310 + box-shadow: 0 1px 0 #000; 311 + background-color: #2467af; 312 + color: #fff; 313 + font-weight: bold; 314 } 315 316 .tocify-wrapper .tocify-subheader { 317 + display: none; 318 + background-color: #262626; 319 + font-weight: 500; 320 + background: linear-gradient(180deg, rgba(0, 0, 0, 0.2), transparent 8px), 321 + linear-gradient(0deg, rgba(0, 0, 0, 0.2), transparent 8px), 322 + linear-gradient(180deg, #000, transparent 1.5px), 323 + linear-gradient(0deg, #939393, hsla(0, 0%, 58%, 0) 1.5px), #262626; 324 } 325 326 .tocify-wrapper .jets-searching .tocify-subheader, 327 .tocify-wrapper .tocify-subheader.visible { 328 + display: block; 329 } 330 331 + .tocify-wrapper .tocify-subheader .tocify-item > a { 332 + padding-left: 25px; 333 + font-size: 12px; 334 } 335 336 + .tocify-wrapper .tocify-subheader .tocify-item.level-3 > a { 337 + padding-left: 35px; 338 } 339 340 + .tocify-wrapper .tocify-subheader > li:last-child { 341 + box-shadow: none; 342 } 343 344 .tocify-wrapper .toc-footer { 345 + padding: 1em 0; 346 + margin-top: 1em; 347 + border-top: 1px dashed #666; 348 } 349 350 .tocify-wrapper .toc-footer a, 351 .tocify-wrapper .toc-footer li { 352 + color: #fff; 353 + text-decoration: none; 354 } 355 356 .tocify-wrapper .toc-footer a:hover { 357 + text-decoration: underline; 358 } 359 360 .tocify-wrapper .toc-footer li { 361 + font-size: 0.8em; 362 + line-height: 1.7; 363 + text-decoration: none; 364 } 365 366 #nav-button { 367 + padding: 0 1.5em 5em 0; 368 + display: none; 369 + position: fixed; 370 + top: 0; 371 + left: 0; 372 + z-index: 100; 373 + color: #000; 374 + text-decoration: none; 375 + font-weight: 700; 376 + opacity: 0.7; 377 + line-height: 16px; 378 + transition: left 0.3s ease-in-out; 379 } 380 381 #nav-button span { 382 + display: block; 383 + padding: 6px; 384 + background-color: rgba(234, 242, 246, 0.7); 385 + -webkit-transform-origin: 0 0; 386 + transform-origin: 0 0; 387 + -webkit-transform: rotate(-90deg) translate(-100%); 388 + transform: rotate(-90deg) translate(-100%); 389 + border-radius: 0 0 0 5px; 390 } 391 392 #nav-button img { 393 + height: 16px; 394 + vertical-align: bottom; 395 } 396 397 #nav-button:hover { 398 + opacity: 1; 399 } 400 401 #nav-button.open { 402 + left: 230px; 403 } 404 405 .page-wrapper { 406 + margin-left: 230px; 407 + position: relative; 408 + z-index: 10; 409 + background-color: #eaf2f6; 410 + min-height: 100%; 411 + padding-bottom: 1px; 412 } 413 414 .page-wrapper .dark-box { 415 + width: 50%; 416 + background-color: #393939; 417 + position: absolute; 418 + right: 0; 419 + top: 0; 420 + bottom: 0; 421 } 422 423 .page-wrapper .lang-selector { 424 + position: fixed; 425 + z-index: 50; 426 + border-bottom: 5px solid #393939; 427 } 428 429 .lang-selector { 430 + background-color: #222; 431 + width: 100%; 432 + font-weight: 700; 433 } 434 435 .lang-selector button { 436 + display: block; 437 + float: left; 438 + color: #fff; 439 + text-decoration: none; 440 + padding: 0 10px; 441 + line-height: 30px; 442 + outline: 0; 443 + background: transparent; 444 + border: none; 445 + --bg: transparent; 446 + --bg-hover: #111; 447 + --bg-active: #393939; 448 + background: var(--bg); 449 } 450 451 .lang-selector button:active, 452 .lang-selector button:hover, 453 .lang-selector button:focus { 454 + --bg: var(--bg-hover); 455 } 456 457 .lang-selector:after { 458 + content: ""; 459 + clear: both; 460 + display: block; 461 } 462 463 .content { 464 + position: relative; 465 + z-index: 30; 466 } 467 468 .content:after { 469 + content: ""; 470 + display: block; 471 + clear: both; 472 } 473 474 + .content > aside, 475 + .content > details, 476 + .content > dl, 477 + .content > h1, 478 + .content > h2, 479 + .content > h3, 480 + .content > h4, 481 + .content > h5, 482 + .content > h6, 483 + .content > ol, 484 + .content > p, 485 + .content > table, 486 + .content > ul, 487 + .content > form > aside, 488 + .content > form > details, 489 + .content > form > h1, 490 + .content > form > h2, 491 + .content > form > h3, 492 + .content > form > h4, 493 + .content > form > h5, 494 + .content > form > h6, 495 + .content > form > p, 496 + .content > form > table, 497 + .content > form > ul, 498 + .content > form > div { 499 + margin-right: 50%; 500 + padding: 0 28px; 501 + box-sizing: border-box; 502 + display: block; 503 + text-shadow: 0 1px 0 #fff; 504 } 505 506 + .content > ol, 507 + .content > ul { 508 + padding-left: 43px; 509 } 510 511 + .content > div, 512 + .content > h1, 513 + .content > h2 { 514 + clear: both; 515 } 516 517 .content h1 { 518 + font-size: 30px; 519 + padding-top: 0.5em; 520 + padding-bottom: 0.5em; 521 + border-bottom: 1px solid #ccc; 522 + margin-bottom: 21px; 523 + margin-top: 2em; 524 + border-top: 1px solid #ddd; 525 + background-image: linear-gradient(180deg, #fff, #f9f9f9); 526 } 527 528 + .content div:first-child + h1, 529 .content h1:first-child { 530 + border-top-width: 0; 531 + margin-top: 0; 532 } 533 534 .content h2 { 535 + font-size: 20px; 536 + margin-top: 4em; 537 + margin-bottom: 0; 538 + border-top: 1px solid #ccc; 539 + padding-top: 1.2em; 540 + padding-bottom: 1.2em; 541 + background-image: linear-gradient( 542 + 180deg, 543 + hsla(0, 0%, 100%, 0.4), 544 + hsla(0, 0%, 100%, 0) 545 + ); 546 } 547 548 + .content h1 + div + h2, 549 + .content h1 + h2 { 550 + margin-top: -21px; 551 + border-top: none; 552 } 553 554 .content h3, 555 .content h4, 556 .content h5, 557 .content h6 { 558 + font-size: 15px; 559 + margin-top: 2.5em; 560 + margin-bottom: 0.8em; 561 } 562 563 .content h4, 564 .content h5, 565 .content h6 { 566 + font-size: 10px; 567 } 568 569 .content hr { 570 + margin: 2em 0; 571 + border-top: 2px solid #393939; 572 + border-bottom: 2px solid #eaf2f6; 573 } 574 575 .content table { 576 + margin-bottom: 1em; 577 + overflow: auto; 578 + border-collapse: collapse; 579 } 580 581 .content table td, 582 .content table th { 583 + text-align: left; 584 + vertical-align: top; 585 + line-height: 1.6; 586 } 587 588 .content table th { 589 + padding: 5px 10px; 590 + border-bottom: 1px solid #ccc; 591 + vertical-align: bottom; 592 } 593 594 .content table td { 595 + padding: 10px; 596 } 597 598 .content table tr:last-child { 599 + border-bottom: 1px solid #ccc; 600 } 601 602 + .content table tr:nth-child(odd) > td { 603 + background-color: #ebf3f6; 604 } 605 606 + .content table tr:nth-child(even) > td { 607 + background-color: #ebf2f6; 608 } 609 610 .content dt { 611 + font-weight: 700; 612 } 613 614 .content dd { 615 + margin-left: 15px; 616 } 617 618 .content dd, 619 .content dt, 620 .content li, 621 .content p { 622 + line-height: 1.6; 623 + margin-top: 0; 624 } 625 626 .content img { 627 + max-width: 100%; 628 } 629 630 .content code { 631 + padding: 3px; 632 + border-radius: 3px; 633 + background-color: rgba(0, 0, 0, 0.05); 634 } 635 636 + .content pre > code { 637 + background-color: transparent; 638 + padding: 0; 639 } 640 641 .content aside { 642 + padding-top: 1em; 643 + padding-bottom: 1em; 644 + margin-top: 1.5em; 645 + margin-bottom: 1.5em; 646 + background: #292929; 647 + line-height: 1.6; 648 + color: #c8c8c8; 649 + text-shadow: none; 650 } 651 652 .content aside.info { 653 + background: #8fbcd4; 654 + text-shadow: 0 1px 0 #a0c6da; 655 + color: initial; 656 } 657 658 .content aside.warning { 659 + background-color: #c97a7e; 660 + text-shadow: 0 1px 0 #d18e91; 661 + color: initial; 662 } 663 664 .content aside.success { 665 + background-color: #6ac174; 666 + text-shadow: 0 1px 0 #80ca89; 667 + color: initial; 668 } 669 670 .content aside:before { 671 + vertical-align: middle; 672 + padding-right: 0.5em; 673 + font-size: 14px; 674 } 675 676 .content .search-highlight { 677 + padding: 2px; 678 + margin: -2px; 679 + border-radius: 4px; 680 + border: 1px solid #f7e633; 681 + text-shadow: 1px 1px 0 #666; 682 + background: linear-gradient(to top left, #f7e633, #f1d32f); 683 } 684 685 .content blockquote, 686 .content pre { 687 + background-color: #292929; 688 + color: #fff; 689 + padding: 1.5em 28px; 690 + margin: 0; 691 + width: 50%; 692 + float: right; 693 + clear: right; 694 + box-sizing: border-box; 695 + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4); 696 } 697 698 .content .annotation { 699 + background-color: #292929; 700 + color: #fff; 701 + padding: 0 28px; 702 + margin: 0; 703 + width: 50%; 704 + float: right; 705 + clear: right; 706 + box-sizing: border-box; 707 + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4); 708 } 709 710 .content .annotation pre { 711 + padding: 0 0; 712 + width: 100%; 713 + float: none; 714 } 715 716 + .content blockquote > p, 717 + .content pre > p { 718 + margin: 0; 719 } 720 721 .content blockquote a, 722 .content pre a { 723 + color: #fff; 724 + text-decoration: none; 725 + border-bottom: 1px dashed #ccc; 726 } 727 728 + .content blockquote > p { 729 + background-color: #1c1c1c; 730 + border-radius: 5px; 731 + padding: 13px; 732 + color: #ccc; 733 + border-top: 1px solid #000; 734 + border-bottom: 1px solid #404040; 735 } 736 737 + @media (max-width: 930px) { 738 + .tocify-wrapper { 739 + left: -230px; 740 + } 741 + .tocify-wrapper.open { 742 + left: 0; 743 + } 744 + .page-wrapper { 745 + margin-left: 0; 746 + } 747 + #nav-button { 748 + display: block; 749 + } 750 + .tocify-wrapper .tocify-item > a { 751 + padding-top: 0.3em; 752 + padding-bottom: 0.3em; 753 + } 754 } 755 756 + @media (max-width: 700px) { 757 + .dark-box { 758 + display: none; 759 + } 760 + .tocify-wrapper .lang-selector { 761 + display: block; 762 + } 763 + .page-wrapper .lang-selector { 764 + display: none; 765 + } 766 + .content aside, 767 + .content dl, 768 + .content h1, 769 + .content h2, 770 + .content h3, 771 + .content h4, 772 + .content h5, 773 + .content h6, 774 + .content ol, 775 + .content p, 776 + .content table, 777 + .content ul { 778 + margin-right: 0; 779 + } 780 + .content > aside, 781 + .content > details, 782 + .content > dl, 783 + .content > h1, 784 + .content > h2, 785 + .content > h3, 786 + .content > h4, 787 + .content > h5, 788 + .content > h6, 789 + .content > ol, 790 + .content > p, 791 + .content > table, 792 + .content > ul, 793 + .content > form > aside, 794 + .content > form > details, 795 + .content > form > h1, 796 + .content > form > h2, 797 + .content > form > h3, 798 + .content > form > h4, 799 + .content > form > h5, 800 + .content > form > h6, 801 + .content > form > p, 802 + .content > form > table, 803 + .content > form > ul, 804 + .content > form > div { 805 + margin-right: 0; 806 + } 807 + .content blockquote, 808 + .content pre { 809 + float: none; 810 + width: auto; 811 + } 812 + .content .annotation { 813 + float: none; 814 + width: auto; 815 + } 816 } 817 818 .badge { 819 + padding: 1px 9px 2px; 820 + white-space: nowrap; 821 + -webkit-border-radius: 9px; 822 + -moz-border-radius: 9px; 823 + border-radius: 9px; 824 + color: #ffffff; 825 + text-shadow: none !important; 826 + font-weight: bold; 827 } 828 829 .badge.badge-darkred { 830 + background-color: darkred; 831 } 832 833 .badge.badge-red { 834 + background-color: red; 835 } 836 837 .badge.badge-blue { 838 + background-color: blue; 839 } 840 841 .badge.badge-darkblue { 842 + background-color: darkblue; 843 } 844 845 .badge.badge-green { 846 + background-color: green; 847 } 848 849 .badge.badge-darkgreen { 850 + background-color: darkgreen; 851 } 852 853 .badge.badge-purple { 854 + background-color: purple; 855 } 856 857 .badge.badge-black { 858 + background-color: black; 859 } 860 861 .badge.badge-grey { 862 + background-color: grey; 863 } 864 865 .fancy-heading-panel { 866 + background-color: lightgrey; 867 + border-radius: 5px; 868 + padding-left: 5px !important; 869 + padding-top: 5px !important; 870 + padding-bottom: 5px !important; 871 + margin-left: 25px; 872 + margin-right: 10px; 873 + width: 47%; 874 } 875 876 @media screen and (max-width: 700px) { 877 + .fancy-heading-panel { 878 + width: 95%; 879 + } 880 } 881 882 button { 883 + border: none; 884 } 885 886 * { 887 + /* Foreground, Background */ 888 + scrollbar-color: #3c4c67 transparent; 889 } 890 + *::-webkit-scrollbar { 891 + /* Background */ 892 + width: 10px; 893 + height: 10px; 894 + background: transparent; 895 } 896 897 + *::-webkit-scrollbar-thumb { 898 + /* Foreground */ 899 + background: #626161; 900 } 901 902 details { 903 + position: relative; 904 } 905 906 details::before { 907 + position: absolute; 908 + content: ""; 909 + height: 100%; 910 + width: 4px; 911 + margin-left: -8px; 912 + border-radius: 8px; 913 + background: lightgrey; 914 } 915 916 /* override pastel's override */ 917 details > summary { 918 + display: list-item; 919 } 920 921 .badge.badge-scope { 922 + font-size: 80%; 923 + text-decoration: none; 924 + background: #87ad3a; 925 } 926 .badge.badge-scope-lazer { 927 + background: #ba6436; 928 } 929 .badge.badge-scope-oauth { 930 + background: #3a87ad; 931 } 932 .badge.badge-user { 933 + background: #ad2a66; 934 } 935 + .content table tr:nth-child(2n + 1) > td { 936 + background: rgba(0, 0, 0, 0.02); 937 } 938 .content table td { 939 + padding-top: 5px; 940 + padding-bottom: 5px; 941 } 942 .logo { 943 + background-image: url("~@images/layout/osu-logo-white.svg"); 944 + background-position: center; 945 + background-size: contain; 946 + background-repeat: no-repeat; 947 + width: 100%; 948 + max-width: 70%; 949 + padding-bottom: $max-width; 950 + margin: auto; 951 + display: block; 952 + margin-top: 10px; 953 } 954 .menu-burger { 955 --width: 2px; ··· 962 margin: 0 calc(var(--width) + var(--space)) -2px; 963 border-radius: 10000px; 964 965 + &::after, 966 + &::before { 967 + content: ""; 968 width: inherit; 969 height: inherit; 970 background-color: inherit;
+4 -3
resources/css/functions.less
··· 22 23 .fancy-scrollbar() { 24 @_scrollbar-track: rgba(255, 255, 255, 0.025); 25 - @_scrollbar-thumb: rgba(255,255,255,0.5); 26 27 scrollbar-color: @_scrollbar-thumb @_scrollbar-track; 28 scrollbar-width: thin; ··· 57 min-height: 10px; /*Prevent it from getting too small */ 58 } 59 ::-webkit-scrollbar-thumb:active { 60 - background: rgba(255,255,255,0.61); /* Some darker color when you click it */ 61 -webkit-border-radius: 100px; 62 } 63 } ··· 105 .light-header-overlay() { 106 &::after { 107 .full-size(); 108 - content: ''; 109 background-color: hsla(var(--hsl-b5), 60%); 110 } 111 }
··· 22 23 .fancy-scrollbar() { 24 @_scrollbar-track: rgba(255, 255, 255, 0.025); 25 + @_scrollbar-thumb: rgba(255, 255, 255, 0.5); 26 27 scrollbar-color: @_scrollbar-thumb @_scrollbar-track; 28 scrollbar-width: thin; ··· 57 min-height: 10px; /*Prevent it from getting too small */ 58 } 59 ::-webkit-scrollbar-thumb:active { 60 + /* Some darker color when you click it */ 61 + background: rgba(255, 255, 255, 0.61); 62 -webkit-border-radius: 100px; 63 } 64 } ··· 106 .light-header-overlay() { 107 &::after { 108 .full-size(); 109 + content: ""; 110 background-color: hsla(var(--hsl-b5), 60%); 111 } 112 }
+47 -17
resources/css/keyframes.less
··· 4 @keyframes spinner-sk-cubemove { 5 25% { 6 transform: translateX(42px) rotate(-90deg) scale(0.5); 7 - } 50% { 8 transform: translateX(42px) translateY(42px) rotate(-179deg); 9 - } 50.1% { 10 transform: translateX(42px) translateY(42px) rotate(-180deg); 11 - } 75% { 12 transform: translateX(0) translateY(42px) rotate(-270deg) scale(0.5); 13 - } 100% { 14 transform: rotate(-360deg); 15 } 16 } 17 18 @keyframes spin-w-easing { 19 - 100% { transform:rotate(360deg); } 20 } 21 22 @keyframes grow-and-shrink { 23 - 0% { transform: scale(0.8); } 24 - 20% { transform: scale(1.0); } 25 - 100% { transform: scale(0.8); } 26 } 27 28 @keyframes fade-in-out { 29 - 0% { opacity: 0.0; } 30 - 20% { opacity: 1.0; } 31 - 100% { opacity: 0.0; } 32 } 33 34 @keyframes glow-pulse { 35 - 0% { opacity: 0.5; } 36 - 10% { opacity: 1.0; } 37 - 20% { opacity: 0.5; } 38 - 30% { opacity: 1.0; } 39 - 70% { opacity: 0.5; } 40 - 90% { opacity: 0.3; } 41 }
··· 4 @keyframes spinner-sk-cubemove { 5 25% { 6 transform: translateX(42px) rotate(-90deg) scale(0.5); 7 + } 8 + 50% { 9 transform: translateX(42px) translateY(42px) rotate(-179deg); 10 + } 11 + 50.1% { 12 transform: translateX(42px) translateY(42px) rotate(-180deg); 13 + } 14 + 75% { 15 transform: translateX(0) translateY(42px) rotate(-270deg) scale(0.5); 16 + } 17 + 100% { 18 transform: rotate(-360deg); 19 } 20 } 21 22 @keyframes spin-w-easing { 23 + 100% { 24 + transform: rotate(360deg); 25 + } 26 } 27 28 @keyframes grow-and-shrink { 29 + 0% { 30 + transform: scale(0.8); 31 + } 32 + 20% { 33 + transform: scale(1); 34 + } 35 + 100% { 36 + transform: scale(0.8); 37 + } 38 } 39 40 @keyframes fade-in-out { 41 + 0% { 42 + opacity: 0; 43 + } 44 + 20% { 45 + opacity: 1; 46 + } 47 + 100% { 48 + opacity: 0; 49 + } 50 } 51 52 @keyframes glow-pulse { 53 + 0% { 54 + opacity: 0.5; 55 + } 56 + 10% { 57 + opacity: 1; 58 + } 59 + 20% { 60 + opacity: 0.5; 61 + } 62 + 30% { 63 + opacity: 1; 64 + } 65 + 70% { 66 + opacity: 0.5; 67 + } 68 + 90% { 69 + opacity: 0.3; 70 + } 71 }
+16 -11
resources/css/layout.less
··· 4 // main: compiled.less 5 @import "app"; 6 7 - *, ::before, ::after { 8 box-sizing: border-box; 9 } 10 ··· 27 --font-content: @font-content; 28 29 --navbar-height: @navbar-height; 30 - --scroll-padding-top: calc(var(--navbar-height) + 1em + var(--scroll-padding-top-extra, 0px)); 31 --page-gutter: @gutter-v2; 32 33 @media @desktop { ··· 36 } 37 } 38 39 - html, body { 40 height: 100%; 41 } 42 ··· 99 --base-hue-deg: calc(var(--base-hue) * 1deg); 100 101 // level tier gradients 102 - --level-tier-iron: #BAB3AB, #BAB3AB; 103 - --level-tier-bronze: #B88F7A, #855C47; 104 - --level-tier-silver: #E0E0EB, #A3A3C2; 105 - --level-tier-gold: #F0E4A8, #E0C952; 106 - --level-tier-platinum: #A8F0EF, #52E0DF; 107 - --level-tier-rhodium: #D9F8D3, #A0CF96; 108 - --level-tier-radiant: #97DCFF, #ED82FF; 109 - --level-tier-lustrous: #FFE600, #ED82FF; 110 } 111 112 #popup-container {
··· 4 // main: compiled.less 5 @import "app"; 6 7 + *, 8 + ::before, 9 + ::after { 10 box-sizing: border-box; 11 } 12 ··· 29 --font-content: @font-content; 30 31 --navbar-height: @navbar-height; 32 + --scroll-padding-top: calc( 33 + var(--navbar-height) + 1em + var(--scroll-padding-top-extra, 0px) 34 + ); 35 --page-gutter: @gutter-v2; 36 37 @media @desktop { ··· 40 } 41 } 42 43 + html, 44 + body { 45 height: 100%; 46 } 47 ··· 104 --base-hue-deg: calc(var(--base-hue) * 1deg); 105 106 // level tier gradients 107 + --level-tier-iron: #bab3ab, #bab3ab; 108 + --level-tier-bronze: #b88f7a, #855c47; 109 + --level-tier-silver: #e0e0eb, #a3a3c2; 110 + --level-tier-gold: #f0e4a8, #e0c952; 111 + --level-tier-platinum: #a8f0ef, #52e0df; 112 + --level-tier-rhodium: #d9f8d3, #a0cf96; 113 + --level-tier-radiant: #97dcff, #ed82ff; 114 + --level-tier-lustrous: #ffe600, #ed82ff; 115 } 116 117 #popup-container {
+1 -2
resources/css/sections.less
··· 46 .menu-colour(rankings, osu-colour-green-1); 47 .menu-colour(store, osu-colour-darkorange-1); 48 49 - 50 .menu-colour(@section, @colour) { 51 .u-section-@{section}--before-bg-normal { 52 &::before { ··· 95 --forum-bg: @bg; 96 --forum-text: @text; 97 --forum-text-hover: @text-hover; 98 - .at2x-var(--forum-cover, '~@images/headers/forum-topic-covers/forum-cover-@{category}.jpg'); 99 } 100 }
··· 46 .menu-colour(rankings, osu-colour-green-1); 47 .menu-colour(store, osu-colour-darkorange-1); 48 49 .menu-colour(@section, @colour) { 50 .u-section-@{section}--before-bg-normal { 51 &::before { ··· 94 --forum-bg: @bg; 95 --forum-text: @text; 96 --forum-text-hover: @text-hover; 97 + .at2x-var(--forum-cover, "~@images/headers/forum-topic-covers/forum-cover-@{category}.jpg"); 98 } 99 }
+2 -2
resources/css/spinner.less
··· 25 position: relative; 26 27 &::before { 28 - content: ''; 29 position: absolute; 30 top: 0; 31 left: 0; ··· 35 border: 0.18em solid currentColor; 36 border-bottom-color: transparent; 37 border-radius: 100%; 38 - animation: ball-clip-rotate .75s linear infinite; 39 40 .la-ball-clip-rotate--loaded& { 41 animation-iteration-count: 1;
··· 25 position: relative; 26 27 &::before { 28 + content: ""; 29 position: absolute; 30 top: 0; 31 left: 0; ··· 35 border: 0.18em solid currentColor; 36 border-bottom-color: transparent; 37 border-radius: 100%; 38 + animation: ball-clip-rotate 0.75s linear infinite; 39 40 .la-ball-clip-rotate--loaded& { 41 animation-iteration-count: 1;
+14 -14
resources/css/torus.less
··· 36 37 @font-face { 38 // Torus-Thin 39 - font-family: 'Torus'; 40 font-weight: 100; 41 - src: url('~@fonts/torus/Torus-Thin.otf'); 42 } 43 44 @font-face { 45 // Torus-SemiBold 46 - font-family: 'Torus'; 47 font-weight: 600; 48 - src: url('~@fonts/torus/Torus-SemiBold.otf'); 49 } 50 51 @font-face { 52 // Torus-SemiBold, for default bold 53 - font-family: 'Torus'; 54 font-weight: 700; 55 - src: url('~@fonts/torus/Torus-SemiBold.otf'); 56 } 57 58 @font-face { 59 // Torus-Regular 60 - font-family: 'Torus'; 61 font-weight: 400; 62 - src: url('~@fonts/torus/Torus-Regular.otf'); 63 } 64 65 @font-face { 66 // Torus-Light 67 - font-family: 'Torus'; 68 font-weight: 300; 69 - src: url('~@fonts/torus/Torus-Light.otf'); 70 } 71 72 @font-face { 73 // Torus-Heavy 74 - font-family: 'Torus'; 75 font-weight: 900; 76 - src: url('~@fonts/torus/Torus-Heavy.otf'); 77 } 78 79 @font-face { 80 // Torus-Bold 81 - font-family: 'Torus'; 82 font-weight: 800; 83 - src: url('~@fonts/torus/Torus-Bold.otf'); 84 }
··· 36 37 @font-face { 38 // Torus-Thin 39 + font-family: "Torus"; 40 font-weight: 100; 41 + src: url("~@fonts/torus/Torus-Thin.otf"); 42 } 43 44 @font-face { 45 // Torus-SemiBold 46 + font-family: "Torus"; 47 font-weight: 600; 48 + src: url("~@fonts/torus/Torus-SemiBold.otf"); 49 } 50 51 @font-face { 52 // Torus-SemiBold, for default bold 53 + font-family: "Torus"; 54 font-weight: 700; 55 + src: url("~@fonts/torus/Torus-SemiBold.otf"); 56 } 57 58 @font-face { 59 // Torus-Regular 60 + font-family: "Torus"; 61 font-weight: 400; 62 + src: url("~@fonts/torus/Torus-Regular.otf"); 63 } 64 65 @font-face { 66 // Torus-Light 67 + font-family: "Torus"; 68 font-weight: 300; 69 + src: url("~@fonts/torus/Torus-Light.otf"); 70 } 71 72 @font-face { 73 // Torus-Heavy 74 + font-family: "Torus"; 75 font-weight: 900; 76 + src: url("~@fonts/torus/Torus-Heavy.otf"); 77 } 78 79 @font-face { 80 // Torus-Bold 81 + font-family: "Torus"; 82 font-weight: 800; 83 + src: url("~@fonts/torus/Torus-Bold.otf"); 84 }
+2 -1
resources/css/utilities.less
··· 1 // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 2 // See the LICENCE file in the repository root for full licence text. 3 4 - .no-print, .no-print * { 5 @media print { 6 display: none !important; 7 }
··· 1 // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 2 // See the LICENCE file in the repository root for full licence text. 3 4 + .no-print, 5 + .no-print * { 6 @media print { 7 display: none !important; 8 }
+16 -7
resources/css/variables.less
··· 8 9 @font-grade: Venera, sans-serif; 10 @font-content: Inter, sans-serif; 11 - @font-default: Torus, Inter, 'Helvetica Neue', Tahoma, Arial, 'Hiragino Kaku Gothic ProN', Meiryo, 'Microsoft YaHei', 'Apple SD Gothic Neo', sans-serif; 12 - @font-default-vi: Quicksand, Torus, Inter, 'Helvetica Neue', Tahoma, Arial, 'PingFang TC', 'Microsoft JhengHei', 'Apple SD Gothic Neo', system-ui, sans-serif; 13 - @font-default-th: Torus, Inter, 'Helvetica Neue', 'Prompt', Tahoma, Arial, 'Hiragino Kaku Gothic ProN', Meiryo, 'Microsoft YaHei', "Apple SD Gothic Neo", sans-serif; 14 - @font-default-zh: Torus, Inter, 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Microsoft YaHei', 'Apple SD Gothic Neo', system-ui, sans-serif; 15 - @font-default-zh-tw: Torus, Inter, 'Helvetica Neue', Tahoma, Arial, 'PingFang TC', 'Microsoft JhengHei', 'Apple SD Gothic Neo', system-ui, sans-serif; 16 17 @screen-mobile-max: (@screen-sm-min - 1px); 18 @desktop: ~"(min-width: @{screen-sm-min})"; ··· 30 31 // update app-deps.ts when changing the height of the header. 32 @nav2-avatar-height: 60px; 33 - @nav2-avatar-height--pinned : 40px; 34 @nav2-height: 90px; 35 @nav2-height--pinned: 50px; 36 @nav2-header-height: 360px; 37 @nav2-header-image-height: 310px; 38 - 39 40 // mobile nav 41 // TODO: un-bootstrap names
··· 8 9 @font-grade: Venera, sans-serif; 10 @font-content: Inter, sans-serif; 11 + @font-default: Torus, Inter, "Helvetica Neue", Tahoma, Arial, 12 + "Hiragino Kaku Gothic ProN", Meiryo, "Microsoft YaHei", "Apple SD Gothic Neo", 13 + sans-serif; 14 + @font-default-vi: Quicksand, Torus, Inter, "Helvetica Neue", Tahoma, Arial, 15 + "PingFang TC", "Microsoft JhengHei", "Apple SD Gothic Neo", system-ui, 16 + sans-serif; 17 + @font-default-th: Torus, Inter, "Helvetica Neue", "Prompt", Tahoma, Arial, 18 + "Hiragino Kaku Gothic ProN", Meiryo, "Microsoft YaHei", "Apple SD Gothic Neo", 19 + sans-serif; 20 + @font-default-zh: Torus, Inter, "Helvetica Neue", Tahoma, Arial, 21 + "Hiragino Sans GB", "Microsoft YaHei", "Apple SD Gothic Neo", system-ui, 22 + sans-serif; 23 + @font-default-zh-tw: Torus, Inter, "Helvetica Neue", Tahoma, Arial, 24 + "PingFang TC", "Microsoft JhengHei", "Apple SD Gothic Neo", system-ui, 25 + sans-serif; 26 27 @screen-mobile-max: (@screen-sm-min - 1px); 28 @desktop: ~"(min-width: @{screen-sm-min})"; ··· 40 41 // update app-deps.ts when changing the height of the header. 42 @nav2-avatar-height: 60px; 43 + @nav2-avatar-height--pinned: 40px; 44 @nav2-height: 90px; 45 @nav2-height--pinned: 50px; 46 @nav2-header-height: 360px; 47 @nav2-header-image-height: 310px; 48 49 // mobile nav 50 // TODO: un-bootstrap names
+2 -2
resources/css/venera.less
··· 2 // See the LICENCE file in the repository root for full licence text. 3 4 @font-face { 5 - font-family: 'Venera'; 6 font-weight: 500; 7 - src: url('~@fonts/venera/Venera-500.otf'); 8 }
··· 2 // See the LICENCE file in the repository root for full licence text. 3 4 @font-face { 5 + font-family: "Venera"; 6 font-weight: 500; 7 + src: url("~@fonts/venera/Venera-500.otf"); 8 }
+5
yarn.lock
··· 6169 resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 6170 integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 6171 6172 process@^0.11.10: 6173 version "0.11.10" 6174 resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
··· 6169 resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 6170 integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 6171 6172 + prettier@^3.3.3: 6173 + version "3.3.3" 6174 + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" 6175 + integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== 6176 + 6177 process@^0.11.10: 6178 version "0.11.10" 6179 resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"