0
0
Fork 0

Replace sprockets/browserify with Webpack (#2617)

* Replace browserify with webpack

* Add react-intl-translations-manager

* Do not minify in development, add offline-plugin for ServiceWorker background cache updates

* Adjust tests and dependencies

* Fix production deployments

* Fix tests

* More optimizations

* Improve travis cache for npm stuff

* Re-run travis

* Add back support for custom.scss as before

* Remove offline-plugin and babili

* Fix issue with Immutable.List().unshift(...values) not working as expected

* Make travis load schema instead of running all migrations in sequence

* Fix missing React import in WarningContainer. Optimize rendering performance by using ImmutablePureComponent instead of
React.PureComponent. ImmutablePureComponent uses Immutable.is() to compare props. Replace dynamic callback bindings in
<UI />

* Add react definitions to places that use JSX

* Add Procfile.dev for running rails, webpack and streaming API at the same time
This commit is contained in:
Eugen Rochko 2017-05-03 02:04:16 +02:00 committed by GitHub
parent 26bc591572
commit f5bf5ebb82
343 changed files with 5299 additions and 2081 deletions

View file

@ -0,0 +1,374 @@
.about-body {
.wrapper {
max-width: 600px;
margin: 0 auto;
color: $color3;
padding-top: 50px;
padding-bottom: 50px;
&.thicc {
max-width: 700px;
}
}
h1 {
font: 46px/52px 'Roboto', sans-serif;
font-weight: 600;
margin-bottom: 20px;
color: $color4;
padding: 20px 0;
img {
margin-bottom: -5px;
margin-right: 5px;
width: 46px;
height: 46px;
}
}
h2 {
font-family: 'Montserrat', sans-serif;
font-size: 24px;
line-height: 28px;
font-weight: 400;
margin-bottom: 20px;
color: $color5;
}
h3 {
font-family: 'Montserrat', sans-serif;
font-size: 20px;
line-height: 28px;
font-weight: 400;
margin-bottom: 20px;
color: $color2;
}
ul, ol {
list-style: inherit;
margin-left: 20px;
&[type='a'] {
list-style-type: lower-alpha;
}
&[type='i'] {
list-style-type: lower-roman;
}
}
li > ol, li > ul {
margin-top: 20px;
}
p, li {
font: 16px/28px 'Montserrat', sans-serif;
font-weight: 400;
margin-bottom: 12px;
a {
color: $color4;
text-decoration: underline;
}
}
em {
display: inline-block;
padding: 7px 7px 5px 7px;
margin: 0 2px;
background: $color3;
color: $color1;
font: 16px/16px 'Montserrat', sans-serif;
font-weight: 300;
}
.screenshot {
box-shadow: 0 0 15px rgba($color8, 0.4);
margin-bottom: 26px;
img {
max-width: 100%;
height: auto;
display: block;
}
}
.actions {
overflow: hidden;
margin-bottom: 20px;
.info {
float: right;
text-align: right;
line-height: 36px;
a {
color: $color3;
text-decoration: underline;
}
}
}
@media screen and (max-width: 625px) {
.wrapper {
padding: 20px;
}
.features-list {
display: block;
}
}
}
.information-board {
margin: 20px 0;
display: flex;
justify-content: space-between;
border-top: 1px solid lighten($color1, 10%);
border-bottom: 1px solid lighten($color1, 10%);
padding-right: 14px;
.section {
flex: 1 0 0;
padding: 14px;
text-align: right;
font: 16px/28px 'Montserrat', sans-serif;
span, strong {
display: block;
}
span {
font-size: 16px;
&:last-child {
color: $color2;
font-size: 14px;
}
}
strong {
font-weight: 500;
font-size: 32px;
line-height: 48px;
color: $color5;
}
}
@media screen and (max-width: 500px) {
flex-direction: column;
.section {
text-align: left;
}
}
}
.owner {
text-align: center;
.avatar {
width: 80px;
height: 80px;
margin: 0 auto;
margin-bottom: 15px;
img {
display: block;
width: 80px;
height: 80px;
border-radius: 48px;
}
}
.name {
font-size: 14px;
a {
display: block;
color: $color5;
text-decoration: none;
&:hover {
.display_name {
text-decoration: underline;
}
}
}
.username {
display: block;
color: $color3;
}
}
}
.contact-email {
text-align: center;
margin: 40px 0;
strong {
display: block;
color: $color5;
word-break: break-word;
}
}
.sidebar-layout {
display: flex;
.main {
flex: 1 1 auto;
padding: 14px 0;
.panel {
padding-right: 14px;
}
}
.sidebar {
border-left: 1px solid lighten($color1, 10%);
width: 180px;
flex: 0 0 auto;
}
.panel {
.panel-header {
background: lighten($color1, 10%);
padding: 7px 14px;
text-transform: uppercase;
font-size: 12px;
font-weight: 500;
}
.panel-body {
padding: 14px;
}
.panel-list {
ul {
list-style: none;
margin: 0;
li {
margin: 0;
font-family: inherit;
font-size: 13px;
line-height: 18px;
a {
display: block;
padding: 7px 14px;
color: rgba($color5, 0.7);
text-decoration: none;
transition: all 200ms linear;
i.fa {
margin-right: 5px;
}
&:hover {
color: $color5;
background-color: darken($color1, 5%);
transition: all 100ms linear;
}
&.selected {
color: $color5;
background-color: $color4;
&:hover {
background-color: lighten($color4, 5%);
}
}
}
}
}
}
}
@media screen and (max-width: 625px) {
flex-direction: column;
.sidebar {
border: 1px solid lighten($color1, 10%);
width: auto;
}
}
}
.features-list {
display: flex;
margin-bottom: 20px;
.features-list__column {
flex: 1 1 0;
ul {
list-style: none;
}
li {
margin: 0;
}
}
}
.screenshot-with-signup {
display: flex;
margin-bottom: 20px;
.mascot {
flex: 1 1 auto;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
img {
display: block;
margin: 0 auto;
max-width: 100%;
height: auto;
}
}
.simple_form, .closed-registrations-message {
width: 300px;
flex: 0 0 auto;
background: rgba(darken($color1, 7%), 0.5);
padding: 14px;
border-radius: 4px;
box-shadow: 0 0 15px rgba($color8, 0.4);
.actions {
margin-bottom: 0;
}
.info {
text-align: center;
a {
color: $color2;
}
}
}
@media screen and (max-width: 625px) {
.mascot {
display: none;
}
.simple_form, .closed-registrations-message {
flex: auto;
}
}
}
.closed-registrations-message {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
}

View file

@ -0,0 +1,391 @@
.card {
background: $color1;
background-size: cover;
padding: 60px 0;
padding-bottom: 0;
border-radius: 4px 4px 0 0;
box-shadow: 0 0 15px rgba($color8, 0.2);
overflow: hidden;
position: relative;
@media screen and (max-width: 700px) {
border-radius: 0;
box-shadow: none;
}
&:after {
background: linear-gradient(rgba($color8, 0.5), rgba($color8, 0.8));
display: block;
content: "";
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: 1;
}
.name {
display: block;
font-size: 20px;
line-height: 18px * 1.5;
color: $color5;
font-weight: 500;
text-align: center;
position: relative;
z-index: 2;
text-shadow: 0 0 2px $color8;
small {
display: block;
font-size: 14px;
color: $color4;
font-weight: 400;
}
}
.avatar {
width: 120px;
margin: 0 auto;
margin-bottom: 15px;
position: relative;
z-index: 2;
img {
width: 120px;
height: 120px;
display: block;
border-radius: 120px;
}
}
.controls {
position: absolute;
top: 10px;
right: 10px;
z-index: 2;
}
.details {
display: flex;
margin-top: 30px;
position: relative;
z-index: 2;
flex-direction: row;
}
.details-counters {
display: flex;
flex-direction: row;
order: 0;
}
.counter {
width: 80px;
color: $color3;
padding: 5px 10px 0px;
margin-bottom: 10px;
border-right: 1px solid $color3;
cursor: default;
position: relative;
a {
display: block;
}
&:after {
display: block;
content: "";
position: absolute;
bottom: -10px;
left: 0;
width: 100%;
border-bottom: 4px solid $color3;
opacity: 0.5;
transition: all 0.8s ease;
}
&.active {
&:after {
border-bottom: 4px solid $color4;
opacity: 1;
}
}
&:hover {
&:after {
opacity: 1;
transition-duration: 0.2s;
}
}
a {
text-decoration: none;
color: inherit;
}
.counter-label {
font-size: 12px;
text-transform: uppercase;
display: block;
margin-bottom: 5px;
text-shadow: 0 0 2px $color8;
}
.counter-number {
font-weight: 500;
font-size: 18px;
color: $color5;
}
}
.bio {
flex: 1;
font-size: 14px;
line-height: 18px;
padding: 5px 10px;
color: $color2;
order: 1;
}
@media screen and (max-width: 480px) {
.details {
display: block;
}
.bio {
text-align: center;
margin-bottom: 20px;
}
.counter {
flex: 1 1 auto;
}
.counter:last-child {
border-right: none;
}
}
}
.pagination {
padding: 30px 0;
text-align: center;
overflow: hidden;
a, .current, .next, .prev, .page, .gap {
font-size: 14px;
color: $color5;
font-weight: 500;
display: inline-block;
padding: 6px 10px;
text-decoration: none;
}
.current {
background: $color5;
border-radius: 100px;
color: $color1;
cursor: default;
margin: 0 10px;
}
.gap {
cursor: default;
}
.prev, .next {
text-transform: uppercase;
color: $color2;
}
.prev {
float: left;
padding-left: 0;
.fa {
display: inline-block;
margin-right: 5px;
}
}
.next {
float: right;
padding-right: 0;
.fa {
display: inline-block;
margin-left: 5px;
}
}
.disabled {
cursor: default;
color: lighten($color1, 10%);
}
@media screen and (max-width: 360px) {
padding: 30px 20px;
a, .current, .next, .prev, .gap {
display: none;
}
.next, .prev {
display: inline-block;
}
}
}
.accounts-grid {
box-shadow: 0 0 15px rgba($color8, 0.2);
background: $color5;
border-radius: 0 0 4px 4px;
padding: 20px 10px;
padding-bottom: 10px;
overflow: hidden;
display: flex;
flex-wrap: wrap;
@media screen and (max-width: 700px) {
border-radius: 0;
box-shadow: none;
}
.account-grid-card {
box-sizing: border-box;
width: 335px;
border: 1px solid $color2;
border-radius: 4px;
color: $color1;
margin-bottom: 10px;
&:nth-child(odd) {
margin-right: 10px;
}
.account-grid-card__header {
overflow: hidden;
padding: 10px;
border-bottom: 1px solid $color2;
}
.avatar {
width: 60px;
height: 60px;
float: left;
margin-right: 15px;
img {
display: block;
width: 60px;
height: 60px;
border-radius: 60px;
}
}
.name {
padding-top: 10px;
a {
display: block;
color: $color1;
text-decoration: none;
&:hover {
.display_name {
text-decoration: underline;
}
}
}
}
.display_name {
font-size: 14px;
display: block;
}
.username {
color: $color4;
}
.note {
padding: 10px;
padding-top: 15px;
color: $color3;
word-wrap: break-word;
}
}
}
.nothing-here {
color: $color3;
font-size: 14px;
font-weight: 500;
text-align: center;
padding: 15px 0;
padding-bottom: 25px;
cursor: default;
}
.account-card {
padding: 14px 10px;
background: $color5;
border-radius: 4px;
text-align: left;
box-shadow: 0 0 15px rgba($color8, 0.2);
.detailed-status__display-name {
display: block;
overflow: hidden;
margin-bottom: 15px;
&:last-child {
margin-bottom: 0;
}
& > div {
float: left;
margin-right: 10px;
width: 48px;
height: 48px;
}
.avatar {
display: block;
border-radius: 4px;
}
.display-name {
display: block;
max-width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
cursor: default;
strong {
font-weight: 500;
color: $color1;
}
span {
font-size: 14px;
color: $color3;
}
}
&:hover {
.display-name {
strong {
text-decoration: none;
}
}
}
}
.account__header__content {
font-size: 14px;
color: $color1;
}
}

View file

@ -0,0 +1,245 @@
.admin-wrapper {
display: flex;
justify-content: center;
height: 100%;
.sidebar-wrapper {
flex: 1;
height: 100%;
background: $color1;
display: flex;
justify-content: flex-end;
}
.sidebar {
width: 240px;
height: 100%;
padding: 0;
overflow-y: auto;
.logo {
display: block;
margin: 40px auto;
width: 100px;
height: 100px;
}
ul {
list-style: none;
border-radius: 4px 0 0 4px;
overflow: hidden;
margin-bottom: 20px;
a {
display: block;
padding: 15px 25px;
color: rgba($color5, 0.7);
text-decoration: none;
transition: all 200ms linear;
border-radius: 4px 0 0 4px;
i.fa {
margin-right: 5px;
}
&:hover {
color: $color5;
background-color: darken($color1, 5%);
transition: all 100ms linear;
}
&.selected {
background: darken($color1, 2%);
border-radius: 4px 0 0 0;
}
}
ul {
background: darken($color1, 4%);
border-radius: 0 0 0 4px;
margin: 0;
a {
border: 0;
&.selected {
color: $color5;
background-color: $color4;
border-bottom: 0;
border-radius: 0;
&:hover {
background-color: lighten($color4, 5%);
}
}
}
}
}
}
.content-wrapper {
flex: 2;
overflow: auto;
}
.content {
max-width: 700px;
padding: 20px 15px;
padding-top: 60px;
padding-left: 25px;
h2 {
color: $color2;
font-size: 24px;
line-height: 28px;
font-weight: 400;
margin-bottom: 40px;
}
& > p {
font-size: 14px;
line-height: 18px;
color: $color2;
margin-bottom: 20px;
strong {
color: $color5;
font-weight: 500;
}
}
hr {
margin: 20px 0;
border: 0;
background: transparent;
border-bottom: 1px solid $color1;
}
}
.simple_form {
max-width: 400px;
.label_input {
label.select {
width: 50%;
}
select {
width: 50%;
float: right;
}
}
}
@media screen and (max-width: 600px) {
display: block;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
.sidebar-wrapper, .content-wrapper {
flex: 0 0 auto;
height: auto;
overflow: initial;
}
.sidebar {
width: 100%;
padding: 10px 0;
height: auto;
.logo {
margin: 20px auto;
}
}
.content {
padding-top: 20px;
}
}
}
.filters {
display: flex;
margin-bottom: 20px;
.filter-subset {
flex: 0 0 auto;
margin-right: 40px;
ul {
margin-top: 5px;
list-style: none;
li {
display: inline-block;
margin-right: 5px;
}
}
strong {
font-weight: 500;
text-transform: uppercase;
font-size: 12px;
}
a {
display: inline-block;
color: rgba($color5, 0.7);
text-decoration: none;
text-transform: uppercase;
font-size: 12px;
font-weight: 500;
border-bottom: 2px solid $color1;
&:hover {
color: $color5;
border-bottom: 2px solid lighten($color1, 5%);
}
&.selected {
color: $color4;
border-bottom: 2px solid $color4;
}
}
}
}
.report-accounts {
display: flex;
margin-bottom: 20px;
}
.report-accounts__item {
flex: 1 1 0;
display: flex;
flex-direction: column;
& > strong {
display: block;
margin-bottom: 10px;
font-weight: 500;
font-size: 14px;
line-height: 18px;
color: $color2;
}
&:first-child {
margin-right: 10px;
}
.account-card {
flex: 1 1 auto;
}
}
.report-status {
display: flex;
margin-bottom: 10px;
.activity-stream {
flex: 2 0 0;
margin-right: 20px;
}
}
.report-status__actions {
flex: 0 0 auto;
}

View file

@ -0,0 +1,20 @@
@import 'variables';
@import 'fonts/roboto';
@import 'fonts/roboto-mono';
@import 'fonts/montserrat';
@import 'reset';
@import 'basics';
@import 'containers';
@import 'lists';
@import 'footer';
@import 'compact_header';
@import 'landing_strip';
@import 'forms';
@import 'accounts';
@import 'stream_entries';
@import 'components';
@import 'about';
@import 'tables';
@import 'admin';
@import 'rtl';

View file

@ -0,0 +1,58 @@
body {
font-family: 'Roboto', sans-serif;
background: $color1 url('../images/background-photo.jpg');
background-size: cover;
background-attachment: fixed;
font-size: 13px;
line-height: 18px;
font-weight: 400;
color: $color5;
padding-bottom: 140px;
text-rendering: optimizelegibility;
font-feature-settings: "kern";
text-size-adjust: none;
&.app-body {
position: fixed;
width: 100%;
height: 100%;
padding: 0;
background: $color1;
}
&.embed {
background: transparent;
margin: 0;
.container {
position: absolute;
width: 100%;
height: 100%;
overflow: hidden;
}
}
&.admin {
background: darken($color1, 4%);
position: fixed;
width: 100%;
height: 100%;
padding: 0;
}
@media screen and (max-width: 360px) {
padding-bottom: 0;
}
}
button:focus {
outline: none;
}
.app-holder {
display: flex;
width: 100%;
height: 100%;
align-items: center;
justify-content: center;
}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,28 @@
.compact-header {
h1 {
font-size: 24px;
line-height: 28px;
color: $color3;
overflow: hidden;
font-weight: 500;
margin-bottom: 20px;
a {
color: inherit;
text-decoration: none;
}
small {
font-weight: 400;
color: $color2;
}
img {
display: inline-block;
margin-bottom: -5px;
margin-right: 15px;
width: 36px;
height: 36px;
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,71 @@
.container {
width: 700px;
margin: 0 auto;
margin-top: 40px;
@media screen and (max-width: 700px) {
width: 100%;
margin: 0;
}
}
.mastodon-column-container {
display: flex;
height: 100%;
width: 100%;
// 707568 - height 100% doesn't work on child of a flex item - chromium - Monorail
// https://bugs.chromium.org/p/chromium/issues/detail?id=707568
flex: 1 1 auto;
}
.logo-container {
max-width: 400px;
margin: 100px auto;
margin-bottom: 0;
cursor: default;
@media screen and (max-width: 360px) {
margin: 30px auto;
}
h1 {
display: block;
text-align: center;
color: $color5;
font-size: 48px;
font-weight: 500;
img {
display: block;
margin: 20px auto;
width: 180px;
height: 180px;
}
a {
color: inherit;
text-decoration: none;
outline: 0;
img {
opacity: 0.8;
transition: opacity 0.8s ease;
}
&:hover {
img {
opacity: 1;
transition-duration: 0.2s;
}
}
}
small {
display: block;
font-size: 12px;
font-weight: 400;
font-family: 'Roboto Mono', monospace;
}
}
}

View file

@ -0,0 +1,11 @@
@font-face {
font-family: 'Montserrat';
src: local('Montserrat');
src: url('../fonts/montserrat/Montserrat-Regular.eot');
src: url('../fonts/montserrat/Montserrat-Regular.eot?#iefix') format('embedded-opentype'),
url('../fonts/montserrat/Montserrat-Regular.woff2') format('woff2'),
url('../fonts/montserrat/Montserrat-Regular.woff') format('woff'),
url('../fonts/montserrat/Montserrat-Regular.ttf') format('truetype');
font-weight: 400;
font-style: normal;
}

View file

@ -0,0 +1,12 @@
@font-face {
font-family: 'Roboto Mono';
src: local('Roboto Mono');
src: url('../fonts/roboto-mono/robotomono-regular-webfont.eot');
src: url('../fonts/roboto-mono/robotomono-regular-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto-mono/robotomono-regular-webfont.woff2') format('woff2'),
url('../fonts/roboto-mono/robotomono-regular-webfont.woff') format('woff'),
url('../fonts/roboto-mono/robotomono-regular-webfont.ttf') format('truetype'),
url('../fonts/roboto-mono/robotomono-regular-webfont.svg#roboto_monoregular') format('svg');
font-weight: 400;
font-style: normal;
}

View file

@ -0,0 +1,52 @@
@font-face {
font-family: 'Roboto';
src: local('Roboto');
src: url('../fonts/roboto/roboto-italic-webfont.eot');
src: url('../fonts/roboto/roboto-italic-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto/roboto-italic-webfont.woff2') format('woff2'),
url('../fonts/roboto/roboto-italic-webfont.woff') format('woff'),
url('../fonts/roboto/roboto-italic-webfont.ttf') format('truetype'),
url('../fonts/roboto/roboto-italic-webfont.svg#roboto-italic-webfont') format('svg');
font-weight: normal;
font-style: italic;
}
@font-face {
font-family: 'Roboto';
src: local('Roboto');
src: url('../fonts/roboto/roboto-bold-webfont.eot');
src: local('Roboto bold'), local('roboto-bold'),
url('../fonts/roboto/roboto-bold-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto/roboto-bold-webfont.woff2') format('woff2'),
url('../fonts/roboto/roboto-bold-webfont.woff') format('woff'),
url('../fonts/roboto/roboto-bold-webfont.ttf') format('truetype'),
url('../fonts/roboto/roboto-bold-webfont.svg#roboto-bold-webfont') format('svg');
font-weight: bold;
font-style: normal;
}
@font-face {
font-family: 'Roboto';
src: local('Roboto');
src: url('../fonts/roboto/roboto-medium-webfont.eot');
src: url('../fonts/roboto/roboto-medium-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto/roboto-medium-webfont.woff2') format('woff2'),
url('../fonts/roboto/roboto-medium-webfont.woff') format('woff'),
url('../fonts/roboto/roboto-medium-webfont.ttf') format('truetype'),
url('../fonts/roboto/roboto-medium-webfont.svg#roboto-medium-webfont') format('svg');
font-weight: 500;
font-style: normal;
}
@font-face {
font-family: 'Roboto';
src: local('Roboto');
src: url('../fonts/roboto/roboto-regular-webfont.eot');
src: url('../fonts/roboto/roboto-regular-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto/roboto-regular-webfont.woff2') format('woff2'),
url('../fonts/roboto/roboto-regular-webfont.woff') format('woff'),
url('../fonts/roboto/roboto-regular-webfont.ttf') format('truetype'),
url('../fonts/roboto/roboto-regular-webfont.svg#roboto-regular-webfont') format('svg');
font-weight: normal;
font-style: normal;
}

View file

@ -0,0 +1,29 @@
.footer {
text-align: center;
margin-top: 30px;
font-size: 12px;
color: darken($color2, 25%);
.domain {
font-weight: 500;
a {
color: inherit;
text-decoration: none;
}
}
.powered-by, .single-user-login {
font-weight: 400;
a {
color: inherit;
text-decoration: underline;
font-weight: 500;
&:hover {
text-decoration: none;
}
}
}
}

View file

@ -0,0 +1,335 @@
code {
font-family: 'Roboto Mono', monospace;
font-weight: 400;
}
.form-container {
max-width: 400px;
padding: 20px;
margin: 0 auto;
}
.simple_form {
.input {
margin-bottom: 15px;
}
span.hint {
display: block;
color: $color3;
font-size: 12px;
margin-top: 4px;
}
p.hint {
margin-bottom: 15px;
}
strong {
font-weight: 500;
}
.label_input {
display: flex;
label {
flex: 0 0 auto;
width: 100px;
}
input {
flex: 1 1 auto;
}
}
.input.file, .input.select, .input.radio_buttons {
padding: 15px 0;
margin-bottom: 0;
label {
font-family: inherit;
font-size: 16px;
color: $color5;
display: block;
padding-top: 5px;
}
}
.fields-group {
margin-bottom: 25px;
}
.input.radio_buttons .radio label {
margin-bottom: 5px;
font-family: inherit;
font-size: 14px;
color: white;
display: block;
width: auto;
}
.input.boolean {
margin-bottom: 5px;
label {
font-family: inherit;
font-size: 14px;
color: white;
display: block;
width: auto;
}
label.checkbox {
position: relative;
padding-left: 25px;
flex: 1 1 auto;
}
input[type=checkbox] {
position: absolute;
left: 0;
top: 1px;
margin: 0;
}
.hint {
padding-left: 25px;
margin-left: 0;
}
}
input[type=text], input[type=number], input[type=email], input[type=password], textarea {
background: transparent;
box-sizing: border-box;
border: 0;
border-bottom: 2px solid $color3;
border-radius: 2px 2px 0 0;
padding: 7px 4px;
font-size: 16px;
color: $color5;
display: block;
width: 100%;
outline: 0;
font-family: inherit;
resize: vertical;
&:invalid {
box-shadow: none;
}
&:focus:invalid {
border-bottom-color: $color6;
}
&:required:valid {
border-bottom-color: $color7;
}
&:active, &:focus {
border-bottom-color: $color4;
background: rgba($color8, 0.1);
}
}
.input.field_with_errors {
label {
color: $color6;
}
input[type=text], input[type=email], input[type=password] {
border-bottom-color: $color6;
}
.error {
display: block;
font-weight: 500;
color: $color6;
margin-top: 4px;
}
}
.actions {
margin-top: 30px;
}
button, .block-button {
display: block;
width: 100%;
border: 0;
border-radius: 4px;
background: $color4;
color: $color5;
font-size: 18px;
padding: 10px;
text-transform: uppercase;
text-decoration: none;
text-align: center;
box-sizing: border-box;
cursor: pointer;
font-weight: 500;
outline: 0;
margin-bottom: 10px;
&:hover {
background-color: lighten($color4, 5%);
}
&:active, &:focus {
position: relative;
top: 1px;
background-color: darken($color4, 5%);
}
&.negative {
background: $color6;
&:hover {
background-color: lighten($color6, 5%);
}
&:active, &:focus {
background-color: darken($color6, 5%);
}
}
}
select {
font-size: 16px;
}
}
.flash-message {
background: $color1;
color: $color3;
border-radius: 4px;
padding: 15px 10px;
margin-bottom: 30px;
box-shadow: 0 0 5px rgba($color8, 0.2);
text-align: center;
strong {
font-weight: 500;
}
}
.form-footer {
margin-top: 30px;
text-align: center;
a {
color: $color5;
text-decoration: none;
&:hover {
text-decoration: underline;
}
}
}
.oauth-prompt, .follow-prompt {
margin-bottom: 30px;
text-align: center;
color: $color3;
h2 {
font-size: 16px;
margin-bottom: 30px;
}
strong {
color: $color2;
font-weight: 500;
}
}
.qr-wrapper {
display: flex;
}
.qr-code {
flex: 0 0 auto;
background: #fff;
padding: 4px;
margin-bottom: 20px;
box-shadow: 0 0 15px rgba($color8, 0.2);
display: inline-block;
svg {
display: block;
margin: 0;
}
}
.qr-alternative {
margin-left: 10px;
color: $color3;
samp {
display: block;
font-size: 14px;
}
}
.table-form {
p {
max-width: 400px;
margin-bottom: 15px;
strong {
font-weight: 500;
}
}
.warning {
max-width: 400px;
box-sizing: border-box;
background: rgba($color6, 0.5);
color: $color5;
text-shadow: 1px 1px 0 rgba($color8, 0.3);
box-shadow: 0 2px 6px rgba($color8, 0.4);
border-radius: 4px;
padding: 10px;
margin-bottom: 15px;
a {
color: $color5;
text-decoration: underline;
&:hover, &:focus, &:active {
text-decoration: none;
}
}
strong {
font-weight: 600;
display: block;
margin-bottom: 5px;
.fa {
font-weight: 400;
}
}
}
}
.action-pagination {
display: flex;
align-items: center;
.actions, .pagination {
flex: 1 1 auto;
}
.actions {
padding: 30px 0;
padding-right: 20px;
flex: 0 0 auto;
}
}
.user_allowed_languages {
li {
float: left;
width: 50%;
}
}

View file

@ -0,0 +1,17 @@
.landing-strip {
background: rgba(darken($color1, 7%), 0.8);
color: $color3;
font-weight: 400;
padding: 14px;
border-radius: 4px;
margin-bottom: 20px;
strong, a {
font-weight: 500;
}
a {
color: inherit;
text-decoration: underline;
}
}

View file

@ -0,0 +1,20 @@
.no-list {
list-style: none;
li {
display: inline-block;
margin: 0 5px;
}
}
.recovery-codes {
list-style: none;
margin: 0 auto;
text-align: center;
li {
font-size: 125%;
line-height: 1.5;
letter-spacing: 1px;
}
}

View file

@ -0,0 +1,91 @@
/* http://meyerweb.com/eric/tools/css/reset/
v2.0 | 20110126
License: none (public domain)
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-thumb {
background: lighten($color1, 4%);
border: 0px none $color5;
border-radius: 50px;
}
::-webkit-scrollbar-thumb:hover {
background: lighten($color1, 6%);
}
::-webkit-scrollbar-thumb:active {
background: lighten($color1, 4%);
}
::-webkit-scrollbar-track {
border: 0px none $color5;
border-radius: 0;
background: rgba($color8, 0.1);
}
::-webkit-scrollbar-track:hover {
background: $color1;
}
::-webkit-scrollbar-track:active {
background: $color1;
}
::-webkit-scrollbar-corner {
background: transparent;
}

View file

@ -0,0 +1,136 @@
body.rtl {
direction: rtl;
.column-link__icon, .column-header__icon {
margin-right: 0;
margin-left: 5px;
}
.character-counter__wrapper {
margin-right: 0;
margin-left: 16px;
}
.navigation-bar__profile {
margin-left: 0;
margin-right: 8px;
}
.search__input {
padding-right: 10px;
padding-left: 30px;
}
.search__icon .fa {
right: auto;
left: 10px;
}
.column-icon-clear {
right: auto;
left: 48px;
}
.column-icon {
right: auto;
left: 5px;
}
.setting-toggle {
margin-left: 0;
margin-right: 8px;
}
.status__avatar {
left: auto;
right: 10px;
}
.status {
padding-left: 10px;
padding-right: 68px;
}
.status__info .status__display-name {
padding-left: 25px;
padding-right: 0;
}
.column-back-button--slim-button {
right: auto;
left: 0;
}
.status__info-time {
float: left;
}
.status__action-bar-button-wrapper {
float: right;
margin-right: 0;
margin-left: 18px;
}
.status__action-bar-dropdown {
float: right;
}
.privacy-dropdown__dropdown {
left: auto;
right: 0;
}
.dropdown--active .dropdown__content {
text-align: right;
}
.dropdown--active .dropdown__content::before {
left: auto;
right: 8px;
}
.dropdown--active .dropdown__content > ul {
left: auto;
right: -10px;
}
.privacy-dropdown__option__icon {
margin-left: 10px;
margin-right: 0;
}
.detailed-status__display-avatar {
margin-right: 0;
margin-left: 10px;
float: right;
}
.detailed-status__favorites, .detailed-status__reblogs {
margin-left: 0;
margin-right: 6px;
}
@media screen and (min-width: 1025px) {
.column, .drawer {
padding-left: 5px;
padding-right: 5px;
&:first-child {
padding-left: 5px;
padding-right: 10px;
}
&:last-child {
padding-right: 0px;
padding-left: 10px;
}
}
.columns-area > div {
.column, .drawer {
padding-left: 5px;
padding-right: 5px;
}
}
}
}

View file

@ -0,0 +1,372 @@
.activity-stream {
clear: both;
box-shadow: 0 0 15px rgba($color8, 0.2);
.entry {
background: $color5;
.detailed-status.light, .status.light {
border-bottom: 1px solid $color2;
}
&:last-child {
&, .detailed-status.light, .status.light {
border-bottom: 0;
border-radius: 0 0 4px 4px;
}
}
&:first-child {
&, .detailed-status.light, .status.light {
border-radius: 4px 4px 0 0;
}
&:last-child {
&, .detailed-status.light, .status.light {
border-radius: 4px;
}
}
}
}
.status.light {
padding: 14px 14px 14px (48px + 14px*2);
position: relative;
min-height: 48px;
cursor: default;
.status__header {
font-size: 15px;
.status__meta {
float: right;
font-size: 14px;
.status__relative-time {
color: $color4;
}
}
}
.status__display-name {
display: block;
max-width: 100%;
padding-right: 25px;
color: $color1;
}
.status__avatar {
position: absolute;
left: 14px;
top: 14px;
width: 48px;
height: 48px;
& > div {
width: 48px;
height: 48px;
}
img {
display: block;
border-radius: 4px;
}
}
.display-name {
display: block;
max-width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
strong {
font-weight: 500;
color: $color1;
}
span {
font-size: 14px;
color: $color4;
}
}
.status__content {
color: $color1;
a {
color: $color4;
}
a.status__content__spoiler-link {
color: $color5;
background: $color3;
&:hover {
background: lighten($color3, 8%);
}
}
}
.status__attachments {
margin-top: 8px;
overflow: hidden;
width: 100%;
box-sizing: border-box;
position: relative;
.status__attachments__inner {
display: flex;
height: 214px;
}
}
}
.detailed-status.light {
padding: 14px;
background: $color5;
cursor: default;
.detailed-status__display-name {
display: block;
overflow: hidden;
margin-bottom: 15px;
& > div {
float: left;
margin-right: 10px;
}
.display-name {
display: block;
max-width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
strong {
font-weight: 500;
color: $color1;
}
span {
font-size: 14px;
color: $color3;
}
}
}
.avatar {
width: 48px;
height: 48px;
img {
display: block;
border-radius: 4px;
}
}
.status__content {
color: $color1;
a {
color: $color4;
}
a.status__content__spoiler-link {
color: $color5;
background: $color3;
&:hover {
background: lighten($color3, 8%);
}
}
}
.detailed-status__meta {
margin-top: 15px;
color: $color3;
font-size: 14px;
line-height: 18px;
a {
color: inherit;
}
span > span {
font-weight: 500;
font-size: 12px;
margin-left: 6px;
display: inline-block;
}
}
.detailed-status__attachments {
margin-top: 8px;
overflow: hidden;
width: 100%;
box-sizing: border-box;
position: relative;
.status__attachments__inner {
display: flex;
height: 360px;
}
}
.video-player {
margin-top: 8px;
height: 300px;
overflow: hidden;
position: relative;
video {
position: relative;
z-index: 1;
width: 100%;
height: 100%;
object-fit: cover;
top: 50%;
transform: translateY(-50%);
}
}
}
.media-item, .video-item {
box-sizing: border-box;
position: relative;
left: auto;
top: auto;
right: auto;
bottom: auto;
float: left;
border: medium none;
display: block;
flex: 1 1 auto;
height: 100%;
margin-right: 2px;
&:last-child {
margin-right: 0;
}
a {
display: block;
width: 100%;
height: 100%;
background: no-repeat scroll center center / cover;
text-decoration: none;
cursor: zoom-in;
}
video {
position: relative;
z-index: 1;
width: 100%;
height: 100%;
object-fit: cover;
top: 50%;
transform: translateY(-50%);
}
}
.video-item {
a {
cursor: pointer;
}
.video-item__play {
position: absolute;
top: 50%;
left: 50%;
font-size: 36px;
transform: translate(-50%, -50%);
padding: 5px;
border-radius: 100px;
color: rgba($color5, 0.8);
z-index: 1;
}
}
.media-spoiler {
background: $color3;
width: 100%;
height: 100%;
cursor: pointer;
position: absolute;
top: 0;
left: 0;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
text-align: center;
transition: all 100ms linear;
z-index: 2;
&:hover {
background: darken($color3, 5%);
}
span {
display: block;
&:first-child {
font-size: 14px;
}
&:last-child {
font-size: 11px;
font-weight: 500;
}
}
}
.pre-header {
padding: 14px 0px;
padding-left: (48px + 14px*2);
padding-bottom: 0;
margin-bottom: -4px;
color: $color3;
font-size: 14px;
position: relative;
.pre-header__icon {
position: absolute;
left: (48px + 14px*2 - 30px);
}
.status__display-name.muted strong {
color: $color3;
}
}
.open-in-web-link {
text-decoration: none;
&:hover {
text-decoration: underline;
}
}
}
.embed {
.activity-stream {
border-radius: 4px;
box-shadow: none;
.entry {
&:last-child {
border-radius: 0 0 4px 4px;
}
&:first-child {
border-radius: 4px 4px 0 0;
&:last-child {
border-radius: 4px;
}
}
}
}
}

View file

@ -0,0 +1,65 @@
.table {
width: 100%;
max-width: 100%;
border-spacing: 0;
border-collapse: collapse;
margin-bottom: 20px;
th, td {
padding: 8px;
line-height: 18px;
vertical-align: top;
border-top: 1px solid $color1;
text-align: left;
}
& > thead > tr > th {
vertical-align: bottom;
border-bottom: 2px solid $color1;
border-top: 0;
font-weight: 500;
}
& > tbody > tr > th {
font-weight: 500;
}
& > tbody > tr:nth-child(odd) > td, & > tbody > tr:nth-child(odd) > th {
background: $color1;
}
a {
color: $color4;
text-decoration: underline;
&:hover {
text-decoration: none;
}
}
strong {
font-weight: 500;
}
}
samp {
font-family: 'Roboto Mono', monospace;
}
a.table-action-link {
text-decoration: none;
display: inline-block;
margin-right: 5px;
padding: 0 10px;
color: rgba($color5, 0.7);
font-weight: 500;
&:hover {
color: $color5;
}
i.fa {
font-weight: 400;
margin-right: 5px;
}
}

View file

@ -0,0 +1,8 @@
$color1: #282c37 !default; // darkest
$color2: #d9e1e8 !default; // lightest
$color3: #9baec8 !default; // lighter
$color4: #2b90d9 !default; // vibrant
$color5: #ffffff !default; // white
$color6: #df405a !default; // error red
$color7: #79bd9a !default; // succ green
$color8: #000000 !default; // black