Files
AstralRinth/assets/styles/components.scss
T
venashial 4d64df37f5 Versatile auth URLs & many UI fixes (#199)
* Make project cards right-align their last element

Spaces out elements in a `.project-card` using `justify-content: space-between;`.

Fixes modrinth/knossos#170

* Automatically set URL for auth redirect

* Make login button use base url or current origin

Allows the login button to work in dev environment

* Remove Axios base URL trailing slash

* Update authUrl() on dashboard to match default

* Remove 'code' query from URL on page load
Allow non-exact paths to highlight mod & dashboard tabs

Fixes modrinth/knossos#200

* Make page 5 button visible on page 4 (pagination)

Fixes modrinth/knossos#184

* Color links on legal pages

Fixes modrinth/knossos#166

* Set max notifications to 5 and ignore duplicates

Fixes modrinth/knossos#175

* Add space above report button when no user desc

Fixes modrinth/knossos#143

* Better text spacing from edge of mobile screen

Fixes modrinth/knossos#179

* Fix slanted bars in modrinth/knossos#57

* Fix checkbox grid and role label

Fixes modrinth/knossos#191

* Move mod 'settings' button to the far right

Fixes modrinth/knossos#138

* Abbreviate minutes to min. when time is too long

Not a perfect solution imo, but works for now

Fixes modrinth/knossos#193

* Fix mobile header margins & add breakpoints

Fixes modrinth/knossos#203

* Clean up nuxt config
Silence babel warning & styleResources

* Upgrade sass-loader to 10.1.1 and remove warning

* Remove added horizontal footer padding

https://github.com/modrinth/knossos/pull/199#discussion_r629011624

* Improve mobile header fix

* Fix up minor inconsistencies in mod header

* Remove hard coded date

* Cleans up pagination to be more intuitive

* Fixes member invite input on moble

* Fix login button when searching mods

* Improved mobile mod search

Consistently sized pagination buttons

Breakpoint for sort buttons on smaller screens

* Consistent link style on text-only pages

* Better 4k support

* Slightly better mobile project-card support

Shuffles categories under mod icon when there is room

* Animate homepage typewriter effect backwards

* Tiny commit to align mod icons in mod headers

* Make processing status include 'Under Review'

This can be later updated once the backend has a separate status

* Create vercel.json

* Update domain auto detection

* Test vercel NODE_ENV

* Remove console.log for debugging hosting services

* Make mobile first + fix shrinked text circle size

* Optimize SVG

* Change media queries to be more mobile first

* Remove `|| window.location.origin`

* re-deploy vercel

* Change "Processing" message to "Under review"
2021-05-27 09:27:13 -07:00

534 lines
10 KiB
SCSS

// Here lies 𝖄𝖊 𝕸𝖆𝖗𝖌𝖎𝖓 𝕸𝖆𝖌𝖎𝖈
// which allows to have just one wrapper div
.iconified-input {
align-items: center;
display: inline-flex;
flex-direction: row-reverse;
input {
padding-left: 2.5rem;
}
svg {
color: var(--color-icon);
margin-right: -2rem;
}
}
.iconified-button {
padding: 0.25rem 0.5rem;
font-size: var(--font-size-sm);
display: flex;
align-items: center;
color: var(--color-button-text);
background-color: var(--color-button-bg);
border-radius: var(--size-rounded-control);
&:hover,
&:focus {
background-color: var(--color-button-bg-hover);
}
svg {
width: 1.25rem;
margin-right: 0.5rem;
}
}
.badge {
max-height: 1rem;
border-radius: 1rem;
font-size: var(--font-size-xs);
font-weight: bold;
letter-spacing: 0.02rem;
padding: 0.25rem 0.5rem;
&.gray {
background-color: var(--color-badge-gray-bg);
color: var(--color-badge-gray-text);
}
&.red {
background-color: var(--color-badge-red-bg);
color: var(--color-badge-red-text);
}
&.green {
background-color: var(--color-badge-green-bg);
color: var(--color-badge-green-text);
}
&.yellow {
background-color: var(--color-badge-yellow-bg);
color: var(--color-badge-yellow-text);
}
}
.text-link {
text-decoration: underline;
}
.required:after {
content: ' *';
color: red;
}
.markdown-body {
p {
padding: 0;
margin: 0;
line-height: 1.5;
word-wrap: break-word;
}
h1,
h2 {
padding: 10px 0 5px;
border-bottom: 1px solid var(--color-header-underline);
}
blockquote {
margin: 15px 0;
padding: 0 1em;
color: var(--color-text);
border-left: 0.25em solid var(--color-block-quote);
}
a {
color: var(--color-link);
}
img {
max-width: 100%;
height: auto;
}
pre {
padding: 15px 10px;
border-radius: var(--size-rounded-control);
background-color: var(--color-code-bg);
code {
font-size: 80%;
padding: 0;
border-radius: 0;
}
}
code {
padding: 0.2em 0.4em;
font-size: 80%;
border-radius: var(--size-rounded-control);
background-color: var(--color-code-bg);
color: var(--color-code-text);
}
hr {
margin: 20px 0;
color: var(--color-divider);
}
}
.tooltip {
display: block !important;
z-index: 10000;
.tooltip-inner {
background: var(--color-tooltip-bg);
color: var(--color-tooltip-text);
padding: 5px 10px 4px;
border-radius: var(--size-rounded-tooltip);
box-shadow: var(--shadow-tooltip);
font-size: 0.9rem;
}
.tooltip-arrow {
width: 0;
height: 0;
border-style: solid;
position: absolute;
margin: 5px;
border-color: var(--color-tooltip-bg);
z-index: 1;
}
&[x-placement^='top'] {
margin-bottom: 5px;
.tooltip-arrow {
border-width: 5px 5px 0 5px;
border-left-color: transparent !important;
border-right-color: transparent !important;
border-bottom-color: transparent !important;
bottom: -5px;
left: calc(50% - 5px);
margin-top: 0;
margin-bottom: 0;
}
}
&[x-placement^='bottom'] {
margin-top: 5px;
.tooltip-arrow {
border-width: 0 5px 5px 5px;
border-left-color: transparent !important;
border-right-color: transparent !important;
border-top-color: transparent !important;
top: -5px;
left: calc(50% - 5px);
margin-top: 0;
margin-bottom: 0;
}
}
&[x-placement^='right'] {
margin-left: 5px;
.tooltip-arrow {
border-width: 5px 5px 5px 0;
border-left-color: transparent !important;
border-top-color: transparent !important;
border-bottom-color: transparent !important;
left: -5px;
top: calc(50% - 5px);
margin-left: 0;
margin-right: 0;
}
}
&[x-placement^='left'] {
margin-right: 5px;
.tooltip-arrow {
border-width: 5px 0 5px 5px;
border-top-color: transparent !important;
border-right-color: transparent !important;
border-bottom-color: transparent !important;
right: -5px;
top: calc(50% - 5px);
margin-left: 0;
margin-right: 0;
}
}
&[aria-hidden='true'] {
visibility: hidden;
opacity: 0;
transition: opacity 0.15s, visibility 0.15s;
}
&[aria-hidden='false'] {
visibility: visible;
opacity: 1;
transition: opacity 0.15s;
}
}
.tabs {
display: flex;
padding: 0.5rem 1rem;
.filler {
flex-grow: 1;
}
}
.tabs a.tab {
user-select: none;
display: flex;
align-items: center;
padding: 0.5rem 0.25rem 0.2rem;
margin: auto 0.5rem;
span {
border-bottom: 3px solid transparent;
}
svg {
width: 1rem;
height: 1rem;
margin-right: 0.4rem;
}
&:hover,
&:focus {
color: var(--color-text-medium);
span {
border-bottom: 3px solid var(--color-brand-disabled);
}
}
&.nuxt-link-exact-active,
&.active-path {
color: var(--color-text-dark);
span {
border-bottom: 3px solid var(--color-brand);
}
}
}
.sidebar {
.card {
padding: var(--spacing-card-md);
margin-bottom: var(--spacing-card-md);
@extend %card;
&.page-nav {
.tab {
padding: var(--spacing-card-sm);
display: flex;
align-items: center;
border-radius: var(--size-rounded-control);
margin-bottom: 0.5rem;
@extend %transparent-clickable;
&.last {
margin-bottom: 0;
}
svg {
color: var(--color-icon);
margin-right: 5px;
height: 1.25rem;
flex-shrink: 0;
}
&.nuxt-link-exact-active,
&.active-path {
svg {
color: var(--color-brand-light);
}
}
}
}
}
@media screen and (min-width: 1024px) {
width: 300px;
}
}
.sidebar-l {
@extend .sidebar;
@media screen and (min-width: 1024px) {
margin-right: var(--spacing-card-lg);
}
}
.sidebar-r {
@extend .sidebar;
margin-left: var(--spacing-card-lg);
}
.button {
//width: max-content;
margin: auto 0;
padding: 6px 20px;
border-radius: var(--size-rounded-control);
color: var(--color-button-text);
background-color: var(--color-button-bg);
font-weight: var(--font-weight-medium);
&:focus,
&:hover {
background-color: var(--color-button-bg-hover);
}
&:active {
background-color: var(--color-button-bg-active);
}
}
.transparent-button {
@extend %transparent-clickable;
margin: auto 0;
padding: 6px 20px;
text-decoration: underline;
}
.brand-button {
@extend .button;
color: var(--color-brand-inverted);
background-color: var(--color-brand);
&:focus,
&:hover {
background-color: var(--color-brand-hover);
color: var(--color-brand-inverted);
}
&:active {
background-color: var(--color-brand-active);
color: var(--color-brand-inverted);
}
}
.multiselect--above .multiselect__content-wrapper {
border-top: none !important;
}
.multiselect {
color: var(--color-text) !important;
input {
background: transparent;
}
.multiselect__tags {
background: var(--color-dropdown-bg);
border: none;
cursor: pointer;
&:active,
&:hover {
background: var(--color-button-bg-hover);
.multiselect__spinner {
background: var(--color-button-bg-hover);
}
}
.multiselect__single {
background: transparent;
}
.multiselect__tag {
color: var(--color-text-dark);
background: transparent;
border: 2px solid var(--color-brand);
}
.multiselect__tag-icon {
background: transparent;
&:after {
color: var(--color-text-dark);
}
}
}
.multiselect__content-wrapper {
background: var(--color-dropdown-bg);
border: none;
.multiselect__element {
.multiselect__option--highlight {
background: var(--color-button-bg-active);
color: var(--color-text-dark);
}
.multiselect__option--selected {
background: var(--color-brand);
font-weight: bold;
color: var(--color-brand-inverted);
}
}
}
.multiselect__spinner {
background: var(--color-dropdown-bg);
&:active,
&:hover {
background: var(--color-button-bg-hover);
}
}
}
.section-header {
@extend %card;
padding: var(--spacing-card-md) var(--spacing-card-lg);
margin-bottom: var(--spacing-card-md);
h3 {
margin: auto 0;
color: var(--color-text-dark);
font-weight: var(--font-weight-extrabold);
}
}
label {
display: flex;
flex-direction: column;
@media screen and (min-width: 1024px) {
flex-direction: row;
}
span {
flex: 2;
padding-right: var(--spacing-card-lg);
}
input,
.multiselect,
.input-group {
flex: 3;
height: fit-content;
}
input[type='button'] {
height: fit-content;
flex: 1;
}
input[type='button']:hover {
cursor: pointer;
}
div,
a {
height: fit-content;
flex: 1;
}
div:hover {
cursor: pointer;
}
}
.input-group {
display: flex;
flex-direction: column;
* {
margin-bottom: var(--spacing-card-sm);
}
}
.switch {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
-webkit-tap-highlight-color: transparent;
cursor: pointer;
&:focus {
outline: 0;
}
}
.stylized-toggle {
height: 32px;
width: 52px;
border-radius: 16px;
display: inline-block;
position: relative;
margin: 0;
border: 2px solid var(--color-button-bg);
transition: all 0.2s ease;
background: var(--color-button-bg);
&:after {
content: '';
position: absolute;
top: 2px;
left: 2px;
width: 24px;
height: 24px;
border-radius: 50%;
background: white;
box-shadow: 0 1px 2px rgba(44, 44, 44, 0.2);
transition: all 0.2s cubic-bezier(0.5, 0.1, 0.75, 1.35);
}
&:checked {
background: var(--color-brand);
border: 2px solid var(--color-brand);
&:after {
transform: translatex(20px);
}
}
&:hover &:focus {
background: var(--color-button-bg);
border: 2px solid var(--color-button-bg);
}
&:hover:checked &:focus:checked {
background: var(--color-brand);
border: 2px solid var(--color-brand);
}
}