diff --git a/.prettierignore b/.prettierignore
index da7e1dcd6a..4d6ba882c9 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -96,6 +96,7 @@ AUTHORS.md
# Ignore glitch-soc vendored CSS reset
app/javascript/flavours/glitch/styles/reset.scss
+app/javascript/flavours/glitch/styles_new/mastodon/reset.scss
# Ignore win95 theme
app/javascript/styles/win95.scss
\ No newline at end of file
diff --git a/app/javascript/flavours/glitch/styles_new/application.scss b/app/javascript/flavours/glitch/styles_new/application.scss
new file mode 100644
index 0000000000..e16e5368e7
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/application.scss
@@ -0,0 +1,7 @@
+@use 'mastodon/css_variables';
+@use 'mastodon/variables';
+@use 'common';
+
+html {
+ color-scheme: dark;
+}
diff --git a/app/javascript/flavours/glitch/styles_new/common.scss b/app/javascript/flavours/glitch/styles_new/common.scss
new file mode 100644
index 0000000000..b08803c1a5
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/common.scss
@@ -0,0 +1,26 @@
+@use 'mastodon/mixins';
+@use '@/styles/fonts/roboto';
+@use '@/styles/fonts/roboto-mono';
+
+@use 'mastodon/reset';
+@use 'mastodon/basics';
+@use 'mastodon/branding';
+@use 'mastodon/containers';
+@use 'mastodon/lists';
+@use 'mastodon/widgets';
+@use 'mastodon/forms';
+@use 'mastodon/accounts';
+@use 'mastodon/components';
+@use 'mastodon/polls';
+@use 'mastodon/modal';
+@use 'mastodon/emoji_picker';
+@use 'mastodon/annual_reports';
+@use 'mastodon/about';
+@use 'mastodon/tables';
+@use 'mastodon/admin';
+@use 'mastodon/dashboard';
+@use 'mastodon/rtl';
+@use 'mastodon/accessibility';
+@use 'mastodon/rich_text';
+@use 'mastodon/glitch/local_settings';
+@use 'mastodon/glitch/doodle';
diff --git a/app/javascript/flavours/glitch/styles_new/contrast.scss b/app/javascript/flavours/glitch/styles_new/contrast.scss
new file mode 100644
index 0000000000..af73c88fef
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/contrast.scss
@@ -0,0 +1,8 @@
+@use 'mastodon/css_variables';
+@use 'mastodon/variables';
+@use 'common';
+@use 'contrast/diff';
+
+html {
+ color-scheme: dark;
+}
diff --git a/app/javascript/flavours/glitch/styles_new/contrast/diff.scss b/app/javascript/flavours/glitch/styles_new/contrast/diff.scss
new file mode 100644
index 0000000000..f809c7cdc3
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/contrast/diff.scss
@@ -0,0 +1,54 @@
+:root {
+ /* TEXT TOKENS */
+
+ --color-text-primary: var(--color-grey-50);
+ --color-text-secondary: var(--color-grey-300);
+ --color-text-tertiary: var(--color-grey-400);
+ --color-text-brand: var(--color-indigo-300);
+ --color-text-status-links: var(--color-text-brand);
+
+ /* BORDER TOKENS */
+
+ --border-strength-primary: 18%;
+}
+
+.status__content a,
+.reply-indicator__content a,
+.edit-indicator__content a,
+.link-footer a,
+.status__content__read-more-button,
+.status__content__translate-button {
+ text-decoration: underline;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: none;
+ }
+
+ &.mention {
+ text-decoration: none;
+
+ span {
+ text-decoration: underline;
+ }
+
+ &:hover,
+ &:focus,
+ &:active {
+ span {
+ text-decoration: none;
+ }
+ }
+ }
+}
+
+.link-button:disabled {
+ cursor: not-allowed;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: none !important;
+ }
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon-light.scss b/app/javascript/flavours/glitch/styles_new/mastodon-light.scss
new file mode 100644
index 0000000000..494efdbbde
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon-light.scss
@@ -0,0 +1,9 @@
+@use 'mastodon-light/css_variables';
+@use 'mastodon/variables' with (
+ $emojis-requiring-inversion: 'chains'
+);
+@use 'common';
+
+html {
+ color-scheme: light;
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon-light/css_variables.scss b/app/javascript/flavours/glitch/styles_new/mastodon-light/css_variables.scss
new file mode 100644
index 0000000000..70745ec071
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon-light/css_variables.scss
@@ -0,0 +1,214 @@
+@use '../mastodon/theme_utils' as utils;
+
+:root {
+ --color-black: #000;
+ --color-grey-950: #181821;
+ --color-grey-800: #292938;
+ --color-grey-700: #444664;
+ --color-grey-600: #545778;
+ --color-grey-500: #696d91;
+ --color-grey-400: #8b8dac;
+ --color-grey-300: #b4b6cb;
+ --color-grey-200: #d8d9e3;
+ --color-grey-100: #f0f0f5;
+ --color-grey-50: #f0f1ff;
+ --color-white: #fff;
+ --color-indigo-600: #6147e6;
+ --color-indigo-400: #8886ff;
+ --color-indigo-300: #a5abfd;
+ --color-indigo-200: #c8cdfe;
+ --color-indigo-100: #e0e3ff;
+ --color-indigo-50: #f0f1ff;
+ --color-red-500: #ff637e;
+ --color-red-600: #ec003f;
+ --color-yellow-400: #ffb900;
+ --color-yellow-600: #e17100;
+ --color-green-400: #05df72;
+ --color-green-600: #00a63e;
+
+ /* TEXT TOKENS */
+
+ --color-text-primary: var(--color-grey-950);
+ --color-text-secondary: var(--color-grey-600);
+ --color-text-tertiary: var(--color-grey-500);
+ --color-text-on-inverted: var(--color-white);
+ --color-text-brand: var(--color-indigo-600);
+ --color-text-brand-soft: color-mix(
+ in oklab,
+ var(--color-text-primary),
+ var(--color-text-brand)
+ );
+ --color-text-on-brand-base: var(--color-white);
+ --color-text-error: var(--color-red-600);
+ --color-text-on-error-base: var(--color-white);
+ --color-text-warning: var(--color-yellow-600);
+ --color-text-on-warning-base: var(--color-white);
+ --color-text-success: var(--color-green-600);
+ --color-text-on-success-base: var(--color-white);
+ --color-text-disabled: var(--color-grey-300);
+ --color-text-on-disabled: var(--color-grey-200);
+ --color-text-bookmark-highlight: var(--color-text-error);
+ --color-text-favourite-highlight: var(--color-text-warning);
+ --color-text-on-media: var(--color-white);
+ --color-text-status-links: var(--color-text-brand);
+
+ /* BACKGROUND TOKENS */
+
+ // Neutrals
+ --color-bg-primary: var(--color-white);
+ --overlay-strength-secondary: 5%;
+ --color-bg-secondary-base: var(--color-grey-600);
+ --color-bg-secondary: #{color-mix(
+ in oklab,
+ var(--color-bg-primary),
+ var(--color-bg-secondary-base) var(--overlay-strength-secondary)
+ )};
+ --color-bg-secondary-solid: #{color-mix(
+ in srgb,
+ var(--color-bg-primary),
+ var(--color-bg-secondary-base) var(--overlay-strength-secondary)
+ )};
+ --color-bg-tertiary: #{color-mix(
+ in oklab,
+ var(--color-bg-primary),
+ var(--color-bg-secondary-base) calc(2 * var(--overlay-strength-secondary))
+ )};
+
+ // Utility
+ --color-bg-ambient: var(--color-bg-primary);
+ --color-bg-elevated: var(--color-bg-primary);
+ --color-bg-inverted: var(--color-grey-950);
+ --color-bg-media-base: var(--color-black);
+ --color-bg-media-strength: 65%;
+ --color-bg-media: #{utils.css-alpha(
+ var(--color-bg-media-base),
+ var(--color-bg-media-strength)
+ )};
+ --color-bg-overlay: var(--color-bg-primary);
+ --color-bg-disabled: var(--color-grey-400);
+
+ // Brand
+ --overlay-strength-brand: 8%;
+ --color-bg-brand-base: var(--color-indigo-600);
+ --color-bg-brand-base-hover: color-mix(
+ in oklab,
+ var(--color-bg-brand-base),
+ black var(--overlay-strength-brand)
+ );
+ --color-bg-brand-soft: #{utils.css-alpha(
+ var(--color-bg-brand-base),
+ calc(var(--overlay-strength-brand) * 1.5)
+ )};
+ --color-bg-brand-softer: #{utils.css-alpha(
+ var(--color-bg-brand-base),
+ var(--overlay-strength-brand)
+ )};
+
+ // Error
+ --overlay-strength-error: 12%;
+ --color-bg-error-base: var(--color-red-600);
+ --color-bg-error-base-hover: color-mix(
+ in oklab,
+ var(--color-bg-error-base),
+ black var(--overlay-strength-error)
+ );
+ --color-bg-error-soft: #{utils.css-alpha(
+ var(--color-bg-error-base),
+ calc(var(--overlay-strength-error) * 1.5)
+ )};
+ --color-bg-error-softer: #{utils.css-alpha(
+ var(--color-bg-error-base),
+ var(--overlay-strength-error)
+ )};
+
+ // Warning
+ --overlay-strength-warning: 10%;
+ --color-bg-warning-base: var(--color-yellow-600);
+ --color-bg-warning-base-hover: color-mix(
+ in oklab,
+ var(--color-bg-warning-base),
+ black var(--overlay-strength-warning)
+ );
+ --color-bg-warning-soft: #{utils.css-alpha(
+ var(--color-bg-warning-base),
+ calc(var(--overlay-strength-warning) * 1.5)
+ )};
+ --color-bg-warning-softer: #{utils.css-alpha(
+ var(--color-bg-warning-base),
+ var(--overlay-strength-warning)
+ )};
+
+ // Success
+ --overlay-strength-success: 15%;
+ --color-bg-success-base: var(--color-green-600);
+ --color-bg-success-base-hover: color-mix(
+ in oklab,
+ var(--color-bg-success-base),
+ black var(--overlay-strength-success)
+ );
+ --color-bg-success-soft: #{utils.css-alpha(
+ var(--color-bg-success-base),
+ calc(var(--overlay-strength-success) * 1.5)
+ )};
+ --color-bg-success-softer: #{utils.css-alpha(
+ var(--color-bg-success-base),
+ var(--overlay-strength-success)
+ )};
+
+ /* BORDER TOKENS */
+
+ --border-strength-primary: 15%;
+ --color-border-primary: color-mix(
+ in oklab,
+ var(--color-bg-primary),
+ var(--color-grey-950) var(--border-strength-primary)
+ );
+ --color-border-media: rgb(252 248 255 / 15%);
+ --color-border-on-bg-secondary: var(--color-grey-200);
+ --color-border-on-bg-brand-softer: var(--color-indigo-200);
+ --color-border-on-bg-error-softer: #{utils.css-alpha(
+ var(--color-text-error),
+ 50%
+ )};
+ --color-border-on-bg-warning-softer: #{utils.css-alpha(
+ var(--color-text-warning),
+ 50%
+ )};
+ --color-border-on-bg-success-softer: #{utils.css-alpha(
+ var(--color-text-success),
+ 50%
+ )};
+ --color-border-on-bg-inverted: var(--color-border-primary);
+
+ /* SHADOW TOKENS */
+
+ --shadow-strength-primary: 30%;
+ --color-shadow-primary: #{utils.css-alpha(
+ var(--color-black),
+ var(--shadow-strength-primary)
+ )};
+ --dropdown-shadow:
+ 0 20px 25px -5px var(--color-shadow-primary),
+ 0 8px 10px -6px var(--color-shadow-primary);
+ --overlay-icon-shadow: drop-shadow(0 0 8px var(--color-shadow-primary));
+
+ /* GRAPHS/CHARTS TOKENS */
+
+ --color-graph-primary-stroke: var(--color-text-brand);
+ --color-graph-primary-fill: var(--color-bg-brand-softer);
+ --color-graph-warning-stroke: var(--color-text-warning);
+ --color-graph-warning-fill: var(--color-bg-warning-softer);
+ --color-graph-disabled-stroke: var(--color-text-disabled);
+ --color-graph-disabled-fill: var(--color-bg-disabled);
+
+ /* LEGACY TOKENS */
+
+ --rich-text-container-color: rgb(255 216 231 / 100%);
+ --rich-text-text-color: rgb(114 47 83 / 100%);
+ --rich-text-decorations-color: rgb(255 175 212 / 100%);
+
+ /* MISCELLANEOUS */
+
+ --outline-focus-default: 2px solid var(--color-text-brand);
+ --avatar-border-radius: 8px;
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/_mixins.scss b/app/javascript/flavours/glitch/styles_new/mastodon/_mixins.scss
new file mode 100644
index 0000000000..f825659c1d
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/_mixins.scss
@@ -0,0 +1,56 @@
+// glitch-soc addition
+@mixin fullwidth-gallery {
+ &.full-width {
+ margin-left: -14px;
+ margin-right: -14px;
+ width: inherit;
+ max-width: none;
+ border-radius: 0;
+ }
+}
+
+@mixin search-input {
+ outline: 0;
+ box-sizing: border-box;
+ width: 100%;
+ box-shadow: none;
+ font-family: inherit;
+ background: var(--color-bg-secondary);
+ color: var(--color-text-primary);
+ border-radius: 4px;
+ border: 1px solid var(--color-border-on-bg-secondary);
+ font-size: 17px;
+ line-height: normal;
+ margin: 0;
+}
+
+@mixin search-popout {
+ background: var(--color-bg-elevated);
+ border-radius: 4px;
+ padding: 10px 14px;
+ padding-bottom: 14px;
+ margin-top: 10px;
+ color: var(--color-text-secondary);
+ box-shadow: 2px 4px 15px var(--color-shadow-primary);
+
+ h4 {
+ text-transform: uppercase;
+ color: var(--color-text-secondary);
+ font-size: 13px;
+ font-weight: 500;
+ margin-bottom: 10px;
+ }
+
+ li {
+ padding: 4px 0;
+ }
+
+ ul {
+ margin-bottom: 10px;
+ }
+
+ em {
+ font-weight: 500;
+ color: var(--color-text-primary);
+ }
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/_theme_utils.scss b/app/javascript/flavours/glitch/styles_new/mastodon/_theme_utils.scss
new file mode 100644
index 0000000000..1c03c2f65c
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/_theme_utils.scss
@@ -0,0 +1,3 @@
+@function css-alpha($base-color, $amount) {
+ @return #{rgb(from $base-color r g b / $amount)};
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/_variables.scss b/app/javascript/flavours/glitch/styles_new/mastodon/_variables.scss
new file mode 100644
index 0000000000..a948dbc41c
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/_variables.scss
@@ -0,0 +1,27 @@
+// Keep this filter a SCSS variable rather than
+// a CSS Custom Property due to this Safari bug:
+// https://github.com/mdn/browser-compat-data/issues/25914#issuecomment-2676190245
+$backdrop-blur-filter: blur(10px) saturate(180%) contrast(75%) brightness(70%);
+
+// Language codes that uses CJK fonts
+$cjk-langs: ja, ko, zh-CN, zh-HK, zh-TW;
+
+// Variables for components
+$media-modal-media-max-width: 100%;
+
+// put margins on top and bottom of image to avoid the screen covered by image.
+$media-modal-media-max-height: 80%;
+
+$no-gap-breakpoint: 1175px;
+$mobile-menu-breakpoint: 760px;
+$mobile-breakpoint: 630px;
+$no-columns-breakpoint: 600px;
+
+$font-sans-serif: 'mastodon-font-sans-serif' !default;
+$font-display: 'mastodon-font-display' !default;
+$font-monospace: 'mastodon-font-monospace' !default;
+
+$emojis-requiring-inversion: 'back' 'copyright' 'curly_loop' 'currency_exchange'
+ 'end' 'heavy_check_mark' 'heavy_division_sign' 'heavy_dollar_sign'
+ 'heavy_minus_sign' 'heavy_multiplication_x' 'heavy_plus_sign' 'on'
+ 'registered' 'soon' 'spider' 'telephone_receiver' 'tm' 'top' 'wavy_dash' !default;
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/about.scss b/app/javascript/flavours/glitch/styles_new/mastodon/about.scss
new file mode 100644
index 0000000000..0bb2c8c9eb
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/about.scss
@@ -0,0 +1,130 @@
+@use 'variables' as *;
+
+$maximum-width: 1235px;
+$fluid-breakpoint: $maximum-width + 20px;
+
+.container {
+ box-sizing: border-box;
+ max-width: $maximum-width;
+ margin: 0 auto;
+ position: relative;
+
+ @media screen and (max-width: $fluid-breakpoint) {
+ width: 100%;
+ padding: 0 10px;
+ }
+}
+
+.brand {
+ position: relative;
+ text-decoration: none;
+}
+
+.rules-list {
+ font-size: 15px;
+ line-height: 22px;
+ counter-reset: list-counter;
+
+ li {
+ position: relative;
+ border-bottom: 1px solid var(--color-border-primary);
+ padding: 1em 1.75em;
+ padding-inline-start: 3em;
+ font-weight: 500;
+ counter-increment: list-counter;
+ min-height: 4ch;
+
+ button {
+ background: transparent;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ text-align: start;
+ font: inherit;
+
+ &:hover,
+ &:focus,
+ &:active {
+ background: transparent;
+ }
+
+ &[aria-expanded='false'] .rules-list__hint {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+
+ @supports (-webkit-line-clamp: 2) {
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ white-space: normal;
+ }
+ }
+ }
+
+ &::before {
+ content: counter(list-counter);
+ position: absolute;
+ inset-inline-start: 0;
+ top: 1em;
+ background: var(--color-bg-brand-base);
+ color: var(--color-text-on-brand-base);
+ border-radius: 50%;
+ width: 4ch;
+ height: 4ch;
+ font-weight: 500;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ }
+
+ &:last-child {
+ border-bottom: 0;
+ }
+ }
+
+ &__text {
+ color: var(--color-text-primary);
+ }
+
+ &__hint {
+ font-size: 14px;
+ font-weight: 400;
+ color: var(--color-text-secondary);
+ }
+}
+
+.rules-languages {
+ display: flex;
+ gap: 1rem;
+ align-items: center;
+ position: relative;
+
+ > label {
+ font-size: 14px;
+ font-weight: 600;
+ color: var(--color-text-primary);
+ }
+
+ select {
+ appearance: none;
+ box-sizing: border-box;
+ font-size: 14px;
+ color: var(--color-text-primary);
+ display: block;
+ width: 100%;
+ outline: 0;
+ font-family: inherit;
+ resize: vertical;
+ background: var(--color-bg-secondary);
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+ padding-inline-start: 10px;
+ padding-inline-end: 30px;
+ height: 41px;
+
+ @media screen and (width <= 600px) {
+ font-size: 16px;
+ }
+ }
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/accessibility.scss b/app/javascript/flavours/glitch/styles_new/mastodon/accessibility.scss
new file mode 100644
index 0000000000..42117ac20f
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/accessibility.scss
@@ -0,0 +1,36 @@
+@use 'variables' as *;
+
+%emoji-color-inversion {
+ filter: invert(1);
+}
+
+.emojione {
+ @each $emoji in $emojis-requiring-inversion {
+ &[title=':#{$emoji}:'] {
+ @extend %emoji-color-inversion;
+ }
+ }
+}
+
+// glitch-soc addition
+.hicolor-privacy-icons {
+ .status__visibility-icon.icon-globe,
+ .privacy-dropdown__option .icon-globe {
+ color: #1976d2;
+ }
+
+ .status__visibility-icon.icon-unlock,
+ .privacy-dropdown__option .icon-unlock {
+ color: #388e3c;
+ }
+
+ .status__visibility-icon.icon-lock,
+ .privacy-dropdown__option .icon-lock {
+ color: #ffa000;
+ }
+
+ .status__visibility-icon.icon-envelope,
+ .privacy-dropdown__option .icon-envelope {
+ color: #d32f2f;
+ }
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/accounts.scss b/app/javascript/flavours/glitch/styles_new/mastodon/accounts.scss
new file mode 100644
index 0000000000..421cc04626
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/accounts.scss
@@ -0,0 +1,418 @@
+@use 'sass:color';
+@use 'variables' as *;
+
+.card {
+ & > a {
+ display: block;
+ text-decoration: none;
+ color: inherit;
+ overflow: hidden;
+ border-radius: 4px;
+
+ &:hover,
+ &:active,
+ &:focus {
+ .card__bar {
+ background: var(--color-bg-brand-softer);
+ }
+ }
+ }
+
+ &__img {
+ height: 130px;
+ position: relative;
+ background: var(--color-bg-secondary);
+ border: 1px solid var(--color-border-primary);
+ border-bottom: none;
+
+ img {
+ display: block;
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ object-fit: cover;
+ }
+
+ @media screen and (width <= 600px) {
+ height: 200px;
+ }
+ }
+
+ &__bar {
+ position: relative;
+ padding: 15px;
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ background: var(--color-bg-primary);
+ border: 1px solid var(--color-border-primary);
+ border-top: none;
+
+ .avatar {
+ flex: 0 0 auto;
+ width: 48px;
+ height: 48px;
+ padding-top: 2px;
+
+ img {
+ width: 100%;
+ height: 100%;
+ display: block;
+ margin: 0;
+ border-radius: 4px;
+ background: var(--color-bg-secondary);
+ object-fit: cover;
+ }
+ }
+
+ .display-name {
+ margin-inline-start: 15px;
+ text-align: start;
+
+ svg[data-hidden] {
+ display: none;
+ }
+
+ strong {
+ font-size: 15px;
+ color: var(--color-text-primary);
+ font-weight: 500;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ span {
+ display: block;
+ font-size: 14px;
+ color: var(--color-text-secondary);
+ font-weight: 400;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ }
+ }
+}
+
+.pagination {
+ padding: 30px 0;
+ text-align: center;
+ overflow: hidden;
+
+ a,
+ .current,
+ .newer,
+ .older,
+ .page,
+ .gap {
+ font-size: 14px;
+ color: var(--color-text-primary);
+ font-weight: 500;
+ display: inline-block;
+ padding: 6px 10px;
+ text-decoration: none;
+ }
+
+ .current {
+ color: var(--color-bg-inverted);
+ background: var(--color-text-on-inverted);
+ border-radius: 100px;
+ cursor: default;
+ margin: 0 10px;
+ }
+
+ .gap {
+ cursor: default;
+ }
+
+ .older,
+ .newer {
+ text-transform: uppercase;
+ color: var(--color-text-primary);
+ }
+
+ .older {
+ float: left;
+ padding-inline-start: 0;
+ }
+
+ .newer {
+ float: right;
+ padding-inline-end: 0;
+ }
+
+ .disabled {
+ cursor: default;
+ color: var(--color-text-disabled);
+ }
+
+ @media screen and (width <= 700px) {
+ padding: 30px 20px;
+
+ .page {
+ display: none;
+ }
+
+ .newer,
+ .older {
+ display: inline-block;
+ }
+ }
+}
+
+.nothing-here {
+ color: var(--color-text-secondary);
+ background: var(--color-bg-primary);
+ font-size: 14px;
+ font-weight: 500;
+ text-align: center;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ cursor: default;
+ border-radius: 4px;
+ padding: 20px;
+ min-height: 30vh;
+ border: 1px solid var(--color-border-primary);
+
+ @media screen and (min-width: ($no-gap-breakpoint - 1)) {
+ border-top: 0;
+ }
+
+ &--no-toolbar {
+ border-top: 1px solid var(--color-border-primary);
+ }
+
+ &--under-tabs {
+ border-radius: 0 0 4px 4px;
+ }
+
+ &--flexible {
+ box-sizing: border-box;
+ min-height: 100%;
+ }
+}
+
+.information-badge,
+.simple_form .overridden,
+.simple_form .recommended,
+.simple_form .not_recommended,
+.simple_form .glitch_only {
+ display: inline-block;
+ padding: 4px 6px;
+ cursor: default;
+ border-radius: 4px;
+ font-size: 12px;
+ line-height: 12px;
+ font-weight: 500;
+ color: var(--color-text-primary);
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+.information-badge,
+.simple_form .overridden,
+.simple_form .recommended,
+.simple_form .not_recommended {
+ background-color: var(--color-bg-secondary);
+ border: 1px solid var(--color-border-primary);
+}
+
+.information-badge {
+ &.superapp {
+ color: var(--color-text-success);
+ background-color: var(--color-bg-success-softer);
+ border-color: var(--color-border-on-bg-success-softer);
+ }
+}
+
+.account-role {
+ display: inline-flex;
+ padding: 4px;
+ padding-inline-end: 8px;
+ border: 1px solid var(--color-text-brand);
+ color: var(--color-text-brand);
+ font-weight: 500;
+ font-size: 12px;
+ letter-spacing: 0.5px;
+ line-height: 16px;
+ gap: 4px;
+ border-radius: 6px;
+ align-items: center;
+
+ svg {
+ width: auto;
+ height: 15px;
+ opacity: 0.85;
+ fill: currentColor;
+ }
+
+ &__domain {
+ font-weight: 400;
+ opacity: 0.75;
+ letter-spacing: 0;
+ }
+}
+
+.simple_form .not_recommended {
+ color: var(--color-text-error);
+ background-color: var(--color-bg-error-softer);
+ border-color: var(--color-border-on-bg-error-softer);
+}
+
+.simple_form .glitch_only {
+ color: var(--color-text-warning);
+ background-color: var(--color-bg-warning-softer);
+ border-color: var(--color-border-on-bg-warning-softer);
+}
+
+.account__header__fields {
+ max-width: 100vw;
+ padding: 0;
+ margin: 15px -15px -15px;
+ border: 0 none;
+ border-top: 1px solid var(--color-border-primary);
+ border-bottom: 1px solid var(--color-border-primary);
+ font-size: 14px;
+ line-height: 20px;
+
+ dl {
+ display: flex;
+ border-bottom: 1px solid var(--color-border-primary);
+ }
+
+ dt,
+ dd {
+ box-sizing: border-box;
+ padding: 14px;
+ text-align: center;
+ max-height: 48px;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ }
+
+ dt {
+ font-weight: 500;
+ width: 120px;
+ flex: 0 0 auto;
+ color: var(--color-text-primary);
+ background: var(--color-bg-secondary);
+ }
+
+ dd {
+ flex: 1 1 auto;
+ color: var(--color-text-secondary);
+ }
+
+ a {
+ color: var(--color-text-brand);
+ text-decoration: none;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: underline;
+ }
+ }
+
+ .verified {
+ border: 1px solid var(--color-border-on-bg-success-softer);
+ background: var(--color-bg-success-softer);
+
+ a {
+ color: var(--color-text-success);
+ font-weight: 500;
+ }
+
+ &__mark {
+ color: var(--color-text-success);
+ }
+ }
+
+ dl:last-child {
+ border-bottom: 0;
+ }
+}
+
+.directory__tag .trends__item__current {
+ width: auto;
+}
+
+.pending-account {
+ &__header {
+ color: var(--color-text-secondary);
+
+ a {
+ color: var(--color-text-primary);
+ text-decoration: none;
+
+ &:hover,
+ &:active,
+ &:focus {
+ text-decoration: underline;
+ }
+ }
+
+ strong {
+ color: var(--color-text-primary);
+ font-weight: 700;
+ }
+
+ .warning-hint {
+ font-weight: normal !important;
+ }
+ }
+
+ &__body {
+ margin-top: 10px;
+ }
+}
+
+.batch-table__row--muted {
+ color: var(--color-text-tertiary);
+}
+
+.batch-table__row--muted .pending-account__header,
+.batch-table__row--muted .accounts-table,
+.batch-table__row--muted .name-tag {
+ &,
+ a,
+ strong {
+ color: var(--color-text-tertiary);
+ }
+}
+
+.batch-table__row--muted .name-tag .avatar {
+ opacity: 0.5;
+}
+
+.batch-table__row--muted .accounts-table {
+ tbody td.accounts-table__extra,
+ &__count,
+ &__count small {
+ color: var(--color-text-tertiary);
+ }
+}
+
+.batch-table__row--attention {
+ color: var(--color-text-warning);
+}
+
+.batch-table__row--attention .pending-account__header,
+.batch-table__row--attention .accounts-table,
+.batch-table__row--attention .name-tag {
+ &,
+ a,
+ strong {
+ color: var(--color-text-warning);
+ }
+}
+
+.batch-table__row--attention .accounts-table {
+ tbody td.accounts-table__extra,
+ &__count,
+ &__count small {
+ color: var(--color-text-warning);
+ }
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/admin.scss b/app/javascript/flavours/glitch/styles_new/mastodon/admin.scss
new file mode 100644
index 0000000000..9885511989
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/admin.scss
@@ -0,0 +1,2189 @@
+@use 'sass:color';
+@use 'sass:math';
+@use 'variables' as *;
+
+$no-columns-breakpoint: 890px;
+$sidebar-width: 300px;
+$content-width: 840px;
+
+.admin-wrapper {
+ display: flex;
+ justify-content: center;
+ box-sizing: border-box;
+ width: 100%;
+ min-height: 100vh;
+ min-height: 100dvh;
+ padding: env(safe-area-inset-top) env(safe-area-inset-right)
+ env(safe-area-inset-bottom) env(safe-area-inset-left);
+
+ .icon {
+ width: 16px;
+ height: 16px;
+ vertical-align: top;
+ margin: 0 2px;
+ }
+
+ .sidebar-wrapper {
+ min-height: 100vh;
+ min-height: 100dvh;
+ overflow: hidden;
+ pointer-events: none;
+ flex: 1 1 auto;
+
+ &__inner {
+ display: flex;
+ justify-content: flex-end;
+ height: 100%;
+ }
+ }
+
+ .sidebar {
+ width: $sidebar-width;
+ padding: 0;
+ pointer-events: auto;
+
+ &__toggle {
+ display: none;
+ background: var(--color-bg-primary);
+ border-bottom: 1px solid var(--color-border-primary);
+ align-items: center;
+
+ &__logo {
+ flex: 1 1 auto;
+
+ a {
+ display: block;
+ padding: 15px;
+ }
+ }
+
+ &__icon {
+ display: block;
+ color: var(--color-text-secondary);
+ text-decoration: none;
+ flex: 0 0 auto;
+ font-size: 18px;
+ padding: 10px;
+ margin: 5px 10px;
+ border-radius: 4px;
+
+ &:focus {
+ background: var(--color-bg-brand-softer);
+ }
+
+ .material-close {
+ display: none;
+ }
+
+ &.active {
+ .material-close {
+ display: block;
+ }
+
+ .material-menu {
+ display: none;
+ }
+ }
+ }
+ }
+
+ .logo {
+ display: block;
+ margin: 40px auto;
+ width: 100px;
+ height: 100px;
+ }
+
+ .logo--wordmark {
+ display: inherit;
+ margin: inherit;
+ width: inherit;
+ height: 25px;
+ }
+
+ @media screen and (max-width: $no-columns-breakpoint) {
+ & > a:first-child {
+ display: none;
+ }
+ }
+
+ ul {
+ list-style: none;
+ overflow: hidden;
+ margin-bottom: 20px;
+
+ @media screen and (max-width: $no-columns-breakpoint) {
+ margin-bottom: 0;
+ }
+
+ a {
+ font-size: 14px;
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ padding: 15px;
+ color: var(--color-text-secondary);
+ text-decoration: none;
+ transition: all 200ms linear;
+ transition-property: color, background-color;
+
+ &:hover {
+ color: var(--color-text-primary);
+ transition: all 100ms linear;
+ transition-property: color, background-color;
+ }
+ }
+
+ ul {
+ margin: 0;
+
+ a {
+ border: 0;
+ padding: 15px 35px;
+ }
+ }
+
+ .warning a {
+ color: var(--color-text-warning);
+ font-weight: 700;
+ }
+
+ .simple-navigation-active-leaf a {
+ color: var(--color-text-brand);
+ border-bottom: 0;
+ }
+ }
+ }
+
+ .content-wrapper {
+ box-sizing: border-box;
+ width: 100%;
+ max-width: $content-width;
+ flex: 1 1 auto;
+ }
+
+ @media screen and (max-width: ($content-width + $sidebar-width)) {
+ .sidebar-wrapper--empty {
+ display: none;
+ }
+
+ .sidebar-wrapper {
+ width: $sidebar-width;
+ flex: 0 0 auto;
+ }
+ }
+
+ @media screen and (max-width: $no-columns-breakpoint) {
+ .sidebar-wrapper {
+ width: 100%;
+ }
+ }
+
+ .content {
+ padding-top: 55px;
+ padding-bottom: 20px;
+ padding-inline-start: 25px;
+ padding-inline-end: 15px;
+
+ @media screen and (max-width: $no-columns-breakpoint) {
+ max-width: none;
+ padding: 15px;
+ padding-top: 30px;
+ }
+
+ &__heading {
+ margin-bottom: 45px;
+
+ &__row {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ justify-content: space-between;
+ margin-top: -15px;
+ margin-inline-end: -15px;
+
+ & > * {
+ margin-top: 15px;
+ margin-inline-end: 15px;
+ }
+ }
+
+ &__tabs {
+ margin-top: 30px;
+ width: 100%;
+
+ & > div {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 5px;
+ }
+
+ a {
+ font-size: 14px;
+ display: inline-flex;
+ align-items: center;
+ padding: 7px 10px;
+ border-radius: 4px;
+ color: var(--color-text-secondary);
+ text-decoration: none;
+ font-weight: 500;
+ gap: 5px;
+ white-space: nowrap;
+
+ @media screen and (max-width: $mobile-breakpoint) {
+ flex: 1 0 50%;
+ }
+
+ &:hover,
+ &:focus,
+ &:active {
+ background: var(--color-bg-secondary);
+ }
+
+ &.selected {
+ font-weight: 700;
+ color: var(--color-text-on-brand-base);
+ background: var(--color-bg-brand-base);
+ }
+ }
+ }
+
+ &__actions {
+ display: inline-flex;
+ flex-flow: wrap;
+ gap: 5px;
+ align-items: center;
+
+ .time-period {
+ padding: 0 10px;
+ }
+
+ .back-link {
+ margin-bottom: 0;
+ }
+ }
+
+ h2 small {
+ font-size: 12px;
+ display: block;
+ font-weight: 500;
+ color: var(--color-text-secondary);
+ line-height: 18px;
+ }
+
+ @media screen and (max-width: $no-columns-breakpoint) {
+ border-bottom: 0;
+ padding-bottom: 0;
+ }
+ }
+
+ h2 {
+ color: var(--color-text-primary);
+ font-size: 24px;
+ line-height: 36px;
+ font-weight: 700;
+ }
+
+ h3 {
+ color: var(--color-text-primary);
+ font-size: 20px;
+ line-height: 28px;
+ font-weight: 400;
+ margin-bottom: 30px;
+ }
+
+ h4 {
+ text-transform: uppercase;
+ font-size: 13px;
+ font-weight: 700;
+ color: var(--color-text-secondary);
+ padding-top: 24px;
+ margin-bottom: 8px;
+ border-top: 1px solid var(--color-border-primary);
+ }
+
+ h6 {
+ font-size: 16px;
+ color: var(--color-text-primary);
+ line-height: 28px;
+ font-weight: 500;
+ }
+
+ .fields-group h6 {
+ color: var(--color-text-primary);
+ font-weight: 500;
+ }
+
+ .directory__tag h4 {
+ font-size: 18px;
+ font-weight: 700;
+ color: var(--color-text-primary);
+ text-transform: none;
+ padding-top: 0;
+ margin-bottom: 0;
+ border-top: 0;
+
+ .comment {
+ display: block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ margin-top: 4px;
+
+ &.private-comment {
+ display: block;
+ color: var(--color-text-secondary);
+ }
+
+ &.public-comment {
+ display: block;
+ color: var(--color-text-primary);
+ }
+ }
+ }
+
+ & > p {
+ font-size: 14px;
+ line-height: 21px;
+ color: var(--color-text-primary);
+ margin-bottom: 20px;
+
+ strong {
+ color: var(--color-text-primary);
+ font-weight: 500;
+
+ @each $lang in $cjk-langs {
+ &:lang(#{$lang}) {
+ font-weight: 700;
+ }
+ }
+ }
+ }
+
+ hr {
+ width: 100%;
+ height: 0;
+ border: 0;
+ border-bottom: 1px solid var(--color-border-primary);
+ margin: 20px 0;
+
+ &.spacer {
+ height: 1px;
+ border: 0;
+ }
+ }
+ }
+
+ @media screen and (max-width: $no-columns-breakpoint) {
+ display: block;
+
+ .sidebar-wrapper {
+ min-height: 0;
+ }
+
+ .sidebar {
+ width: 100%;
+ padding: 0;
+ height: auto;
+
+ &__toggle {
+ display: flex;
+ }
+
+ & > ul {
+ display: none;
+
+ &.visible {
+ display: block;
+ position: fixed;
+ z-index: 10;
+ width: 100%;
+ height: calc(100% - 56px);
+ inset-inline-start: 0;
+ bottom: 0;
+ overflow-y: auto;
+ background: var(--color-bg-primary);
+ }
+ }
+
+ ul a,
+ ul ul a {
+ font-size: 16px;
+ border-radius: 0;
+ transition: none;
+
+ &:hover {
+ transition: none;
+ }
+ }
+
+ ul ul {
+ border-radius: 0;
+ }
+
+ ul .simple-navigation-active-leaf a {
+ border-bottom-color: var(--color-text-brand);
+ }
+ }
+ }
+}
+
+hr.spacer {
+ width: 100%;
+ border: 0;
+ margin: 20px 0;
+ height: 1px;
+}
+
+body,
+.admin-wrapper .content {
+ .muted-hint {
+ color: var(--color-text-secondary);
+
+ a {
+ color: var(--color-text-brand);
+ }
+ }
+
+ .positive-hint,
+ .negative-hint,
+ .neutral-hint {
+ a {
+ color: inherit;
+ text-decoration: underline;
+
+ &:focus,
+ &:hover,
+ &:active {
+ text-decoration: none;
+ }
+ }
+ }
+
+ .positive-hint {
+ color: var(--color-text-success);
+ font-weight: 500;
+ }
+
+ .negative-hint {
+ color: var(--color-text-error);
+ font-weight: 500;
+ }
+
+ .neutral-hint {
+ color: var(--color-text-primary);
+ font-weight: 500;
+ }
+
+ .warning-hint {
+ color: var(--color-text-warning);
+ font-weight: 500;
+ }
+}
+
+kbd {
+ font-family: Courier, monospace;
+ background-color: var(--color-bg-brand-softer);
+ padding: 4px;
+ padding-bottom: 2px;
+ border-radius: 5px;
+}
+
+.filters {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 40px;
+
+ .filter-subset {
+ flex: 0 0 auto;
+ margin-bottom: 20px;
+
+ &:last-child {
+ margin-bottom: 30px;
+ }
+
+ ul {
+ margin-top: 5px;
+ list-style: none;
+
+ li {
+ display: inline-block;
+ margin-inline-end: 5px;
+ }
+ }
+
+ & > div {
+ display: flex;
+ gap: 5px;
+ }
+
+ strong {
+ font-weight: 500;
+ text-transform: uppercase;
+ font-size: 12px;
+
+ @each $lang in $cjk-langs {
+ &:lang(#{$lang}) {
+ font-weight: 700;
+ }
+ }
+ }
+
+ &--with-select strong {
+ display: block;
+ margin-bottom: 10px;
+ }
+
+ a {
+ display: inline-block;
+ color: var(--color-text-secondary);
+ text-decoration: none;
+ text-transform: uppercase;
+ font-size: 12px;
+ font-weight: 500;
+ border-bottom: 2px solid var(--color-bg-secondary);
+
+ &:hover {
+ color: var(--color-text-primary);
+ border-bottom: 2px solid var(--color-bg-tertiary);
+ }
+
+ &.selected {
+ color: var(--color-text-brand);
+ border-bottom: 2px solid var(--color-text-brand);
+ }
+ }
+ }
+}
+
+.flavour-screen {
+ display: block;
+ margin: 10px auto;
+ max-width: 100%;
+}
+
+.flavour-description {
+ display: block;
+ font-size: 16px;
+ margin: 10px 0;
+
+ & > p {
+ margin: 10px 0;
+ }
+}
+
+.report-accounts {
+ display: flex;
+ flex-wrap: wrap;
+ margin-bottom: 20px;
+}
+
+.report-accounts__item {
+ display: flex;
+ flex: 250px;
+ flex-direction: column;
+ margin: 0 5px;
+
+ & > strong {
+ display: block;
+ margin: 0 0 10px -5px;
+ font-weight: 500;
+ font-size: 14px;
+ line-height: 18px;
+ color: var(--color-text-primary);
+
+ @each $lang in $cjk-langs {
+ &:lang(#{$lang}) {
+ font-weight: 700;
+ }
+ }
+ }
+
+ .account-card {
+ flex: 1 1 auto;
+ }
+}
+
+.report-status,
+.account-status {
+ display: flex;
+ margin-bottom: 10px;
+}
+
+.report-status__actions,
+.account-status__actions {
+ flex: 0 0 auto;
+ display: flex;
+ flex-direction: column;
+
+ .icon-button {
+ font-size: 24px;
+ width: 24px;
+ text-align: center;
+ margin-bottom: 10px;
+ }
+}
+
+.simple_form.new_report_note,
+.simple_form.new_account_moderation_note {
+ max-width: 100%;
+}
+
+.batch-form-box {
+ display: flex;
+ flex-wrap: wrap;
+ margin-bottom: 5px;
+
+ #form_status_batch_action {
+ margin: 0 5px 5px 0;
+ font-size: 14px;
+ }
+
+ input.button {
+ margin: 0 5px 5px 0;
+ }
+}
+
+.back-link {
+ margin-bottom: 10px;
+ font-size: 14px;
+
+ a {
+ color: var(--color-text-brand);
+ text-decoration: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+}
+
+.special-action-button,
+.back-link {
+ text-align: end;
+ flex: 1 1 auto;
+}
+
+.action-buttons {
+ display: flex;
+ overflow: hidden;
+ justify-content: space-between;
+}
+
+.spacer {
+ flex: 1 1 auto;
+}
+
+.log-entry {
+ display: block;
+ line-height: 20px;
+ padding: 15px;
+ padding-inline-start: 15px * 2 + 40px;
+ background: var(--color-bg-primary);
+ border-right: 1px solid var(--color-border-primary);
+ border-left: 1px solid var(--color-border-primary);
+ border-bottom: 1px solid var(--color-border-primary);
+ position: relative;
+ text-decoration: none;
+ color: var(--color-text-secondary);
+ font-size: 14px;
+
+ &:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-top: 1px solid var(--color-border-primary);
+ }
+
+ &:last-child {
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ border-bottom: 1px solid var(--color-border-primary);
+ }
+
+ &__avatar {
+ position: absolute;
+ inset-inline-start: 15px;
+ top: 15px;
+
+ .avatar {
+ border-radius: var(--avatar-border-radius);
+ width: 40px;
+ height: 40px;
+ }
+ }
+
+ &__title {
+ overflow-wrap: break-word;
+ }
+
+ &__timestamp {
+ color: var(--color-text-tertiary);
+ }
+
+ a,
+ .username,
+ .target {
+ color: var(--color-text-primary);
+ text-decoration: none;
+ font-weight: 500;
+ }
+
+ a {
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: underline;
+ }
+ }
+}
+
+.strike-entry {
+ display: block;
+ line-height: 20px;
+ padding: 15px;
+ padding-inline-start: 15px * 2 + 40px;
+ background: var(--color-bg-primary);
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+ position: relative;
+ text-decoration: none;
+ color: var(--color-text-secondary);
+ font-size: 14px;
+ margin-bottom: 15px;
+
+ &__avatar {
+ position: absolute;
+ inset-inline-start: 15px;
+ top: 15px;
+
+ .avatar {
+ border-radius: var(--avatar-border-radius);
+ width: 40px;
+ height: 40px;
+ }
+ }
+
+ &__title {
+ overflow-wrap: break-word;
+ }
+
+ &__timestamp {
+ color: var(--color-text-secondary);
+ }
+
+ &:hover,
+ &:focus,
+ &:active {
+ background: var(--color-bg-primary);
+ }
+}
+
+a.name-tag,
+.name-tag,
+a.inline-name-tag,
+.inline-name-tag {
+ text-decoration: none;
+ color: var(--color-text-primary);
+
+ &:hover {
+ color: var(--color-text-brand);
+ }
+
+ .username {
+ font-weight: 500;
+ }
+
+ &.suspended {
+ .username {
+ text-decoration: line-through;
+ color: var(--color-text-error);
+ }
+
+ .avatar {
+ filter: grayscale(100%);
+ opacity: 0.8;
+ }
+ }
+}
+
+a.name-tag,
+.name-tag {
+ display: inline-flex;
+ align-items: center;
+ vertical-align: top;
+
+ .avatar {
+ display: block;
+ margin: 0;
+ margin-inline-end: 5px;
+ border-radius: 50%;
+ }
+
+ &.suspended {
+ .avatar {
+ filter: grayscale(100%);
+ opacity: 0.8;
+ }
+ }
+}
+
+.speech-bubble {
+ margin-bottom: 20px;
+ border-inline-start: 4px solid var(--color-text-brand);
+
+ &.positive {
+ border-color: var(--color-text-success);
+ }
+
+ &.negative {
+ border-color: var(--color-text-error);
+ }
+
+ &.warning {
+ border-color: var(--color-text-warning);
+ }
+
+ &__bubble {
+ padding: 16px;
+ padding-inline-start: 14px;
+ font-size: 15px;
+ line-height: 20px;
+ border-radius: 4px 4px 4px 0;
+ position: relative;
+ font-weight: 500;
+
+ a {
+ color: var(--color-text-secondary);
+ }
+ }
+
+ &__owner {
+ padding: 8px;
+ padding-inline-start: 12px;
+ }
+
+ time {
+ color: var(--color-text-tertiary);
+ }
+}
+
+.report-card {
+ background: var(--color-bg-primary);
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+ margin-bottom: 20px;
+
+ &__profile {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 15px;
+
+ .account {
+ padding: 0;
+ border: none;
+
+ &__avatar-wrapper {
+ margin-inline-start: 0;
+ }
+ }
+
+ &__stats {
+ flex: 0 0 auto;
+ font-weight: 500;
+ color: var(--color-text-secondary);
+ text-transform: uppercase;
+ text-align: end;
+
+ a {
+ color: inherit;
+ text-decoration: none;
+
+ &:focus,
+ &:hover,
+ &:active {
+ color: var(--color-text-brand);
+ }
+ }
+
+ .red {
+ color: var(--color-text-error);
+ }
+ }
+ }
+
+ &__summary {
+ &__item {
+ display: flex;
+ justify-content: flex-start;
+ border-top: 1px solid var(--color-border-primary);
+
+ &__reported-by,
+ &__assigned {
+ padding: 15px;
+ flex: 0 0 auto;
+ box-sizing: border-box;
+ width: 150px;
+ color: var(--color-text-secondary);
+
+ &,
+ .username {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ }
+
+ &__content {
+ flex: 1 1 auto;
+ max-width: calc(100% - 300px);
+
+ &__icon {
+ margin-inline-end: 4px;
+ font-weight: 500;
+ }
+ }
+
+ &__content a {
+ display: block;
+ box-sizing: border-box;
+ width: 100%;
+ padding: 15px;
+ text-decoration: none;
+ color: var(--color-text-secondary);
+
+ &:hover {
+ color: var(--color-text-brand);
+ }
+ }
+ }
+ }
+}
+
+.one-line {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.ellipsized-ip {
+ display: inline-block;
+ max-width: 120px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ vertical-align: middle;
+}
+
+.admin-account-bio {
+ display: flex;
+ flex-wrap: wrap;
+ margin: 0 -5px;
+ margin-top: 20px;
+
+ > div {
+ box-sizing: border-box;
+ padding: 0 5px;
+ margin-bottom: 10px;
+ flex: 1 0 50%;
+ max-width: 100%;
+ }
+
+ .account__header__fields,
+ .account__header__content {
+ background: var(--color-bg-primary);
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+ height: 100%;
+ }
+
+ .account__header__fields {
+ margin: 0;
+ border: 1px solid var(--color-border-primary);
+
+ a {
+ color: var(--color-text-brand);
+ }
+
+ dl:first-child .verified {
+ border-radius: 0 4px 0 0;
+ }
+
+ .verified a {
+ color: var(--color-text-success);
+ }
+ }
+
+ .account__header__content {
+ box-sizing: border-box;
+ padding: 20px;
+ color: var(--color-text-primary);
+ }
+}
+
+.center-text {
+ text-align: center;
+}
+
+.applications-list__item,
+.filters-list__item {
+ padding: 15px 0;
+ background: var(--color-bg-primary);
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+ margin-top: 15px;
+}
+
+.applications-list {
+ .icon {
+ vertical-align: middle;
+ }
+}
+
+.announcements-list,
+.filters-list {
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+ border-bottom: none;
+
+ &__item {
+ padding: 15px 0;
+ border-bottom: 1px solid var(--color-border-primary);
+
+ &__title {
+ padding: 0 15px;
+ display: block;
+ font-weight: 500;
+ font-size: 18px;
+ line-height: 1.5;
+ color: var(--color-text-primary);
+ text-decoration: none;
+ margin-bottom: 10px;
+
+ &:hover {
+ color: var(--color-text-brand);
+ }
+
+ .account-role {
+ vertical-align: middle;
+ }
+ }
+
+ .icon {
+ vertical-align: middle;
+ }
+
+ a.announcements-list__item__title {
+ &:hover,
+ &:focus,
+ &:active {
+ color: var(--color-text-primary);
+ }
+ }
+
+ &__action-bar {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ gap: 8px;
+
+ &:not(.no-wrap) {
+ flex-wrap: wrap;
+ }
+ }
+
+ &__meta {
+ padding: 0 15px;
+ color: var(--color-text-tertiary);
+
+ a {
+ color: inherit;
+ text-decoration: underline;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: none;
+ }
+ }
+ }
+
+ &__actions {
+ margin-inline-start: auto;
+ }
+
+ &__permissions {
+ margin-top: 10px;
+ }
+ }
+}
+
+.filters-list__item {
+ &__title {
+ display: flex;
+ justify-content: space-between;
+ margin-bottom: 0;
+ overflow-wrap: anywhere;
+ }
+
+ &__permissions {
+ margin-top: 0;
+ margin-bottom: 10px;
+ }
+
+ .expiration {
+ font-size: 13px;
+ }
+
+ &.expired {
+ .expiration {
+ color: var(--color-text-error);
+ }
+
+ .permissions-list__item__icon {
+ color: var(--color-text-secondary);
+ }
+ }
+}
+
+.rule-actions {
+ display: flex;
+ flex-direction: column;
+
+ a.table-action-link {
+ padding-inline-start: 0;
+ }
+}
+
+.dashboard__counters.admin-account-counters {
+ margin-top: 10px;
+}
+
+.account-badges {
+ margin: -2px 0;
+}
+
+.retention {
+ overflow: auto;
+
+ > h4 {
+ position: sticky;
+ inset-inline-start: 0;
+ }
+
+ &__table {
+ &__number {
+ color: var(--color-bg-primary);
+ padding: 10px;
+ }
+
+ &__date {
+ white-space: nowrap;
+ padding: 10px 0;
+ text-align: start;
+ min-width: 120px;
+
+ &.retention__table__average {
+ font-weight: 700;
+ }
+ }
+
+ &__size {
+ text-align: center;
+ padding: 10px;
+ }
+
+ &__label {
+ font-weight: 700;
+ color: var(--color-text-secondary);
+ }
+
+ &__box {
+ box-sizing: border-box;
+ width: 52px;
+ margin: 1px;
+ padding: 10px;
+ font-weight: 500;
+ color: var(--color-text-primary);
+ background: var(--color-bg-primary);
+
+ @for $i from 0 through 10 {
+ &--#{10 * $i} {
+ @if $i > 5 {
+ color: var(--color-text-on-brand-base);
+ }
+
+ background-color: rgb(
+ from var(--color-bg-brand-base) r g b / #{math.div(max(1, $i), 10)}
+ );
+ }
+ }
+ }
+ }
+}
+
+.sparkline {
+ display: block;
+ text-decoration: none;
+ background: var(--color-bg-primary);
+ border-radius: 4px;
+ border: 1px solid var(--color-border-primary);
+ padding: 0;
+ position: relative;
+ padding-bottom: 55px + 20px;
+ overflow: hidden;
+
+ &__value {
+ display: flex;
+ line-height: 33px;
+ align-items: flex-end;
+ padding: 20px;
+ padding-bottom: 10px;
+
+ &__total {
+ display: block;
+ margin-inline-end: 10px;
+ font-weight: 500;
+ font-size: 28px;
+ color: var(--color-text-primary);
+ }
+
+ &__change {
+ display: block;
+ font-weight: 500;
+ font-size: 18px;
+ color: var(--color-text-secondary);
+ margin-bottom: -3px;
+
+ &.positive {
+ color: var(--color-text-success);
+ }
+
+ &.negative {
+ color: var(--color-text-error);
+ }
+ }
+ }
+
+ &__label {
+ padding: 0 20px;
+ padding-bottom: 10px;
+ text-transform: uppercase;
+ color: var(--color-text-secondary);
+ font-weight: 500;
+ }
+
+ &__graph {
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+
+ svg {
+ display: block;
+ margin: 0;
+ }
+
+ path:first-child {
+ fill: var(--color-graph-primary-fill) !important;
+ fill-opacity: 1 !important;
+ }
+
+ path:last-child {
+ stroke: var(--color-graph-primary-stroke) !important;
+ fill: none !important;
+ }
+ }
+}
+
+a.sparkline {
+ &:hover,
+ &:focus,
+ &:active {
+ background: var(--color-bg-brand-softer);
+ }
+}
+
+.skeleton {
+ background-color: var(--color-bg-primary);
+ background-image: linear-gradient(
+ 90deg,
+ var(--color-bg-primary),
+ var(--color-bg-secondary),
+ var(--color-bg-primary)
+ );
+ background-size: 200px 100%;
+ background-repeat: no-repeat;
+ border-radius: 4px;
+ display: inline-block;
+ line-height: 1;
+ width: 100%;
+ animation: skeleton 1.2s ease-in-out infinite;
+
+ .reduce-motion & {
+ animation: none;
+ }
+}
+
+@keyframes skeleton {
+ 0% {
+ background-position: -200px 0;
+ }
+
+ 100% {
+ background-position: calc(200px + 100%) 0;
+ }
+}
+
+.dimension {
+ table {
+ width: 100%;
+ }
+
+ &__item {
+ border-bottom: 1px solid var(--color-border-primary);
+
+ &__key {
+ font-weight: 500;
+ padding: 11px 10px;
+ }
+
+ &__value {
+ text-align: end;
+ color: var(--color-text-secondary);
+ padding: 11px 10px;
+ }
+
+ &__indicator {
+ display: inline-block;
+ width: 8px;
+ height: 8px;
+ border-radius: 50%;
+ background: var(--color-text-brand);
+ margin-inline-end: 10px;
+
+ @for $i from 0 through 10 {
+ &--#{10 * $i} {
+ background-color: rgb(
+ from var(--color-text-brand) r g b / #{math.div(max(1, $i), 10)}
+ );
+ }
+ }
+ }
+
+ &:last-child {
+ border-bottom: 0;
+ }
+
+ &.negative {
+ color: var(--color-text-error);
+ font-weight: 700;
+
+ .dimension__item__value {
+ color: var(--color-text-error);
+ }
+ }
+ }
+}
+
+.report-reason-selector {
+ border-radius: 4px;
+ background: var(--color-bg-primary);
+ margin-bottom: 20px;
+
+ &__category {
+ cursor: pointer;
+ border-bottom: 1px solid var(--color-border-primary);
+
+ &__label {
+ padding: 15px;
+ display: flex;
+ gap: 8px;
+ align-items: center;
+ }
+
+ &__rules {
+ margin-inline-start: 30px;
+ }
+ }
+
+ &__rule {
+ cursor: pointer;
+ padding: 15px;
+ display: flex;
+ gap: 8px;
+ align-items: center;
+ }
+}
+
+.report-header {
+ display: grid;
+ gap: 15px;
+ grid-template-columns: minmax(0, 1fr) 300px;
+
+ &__details {
+ &__item {
+ border-bottom: 1px solid var(--color-border-primary);
+ padding: 15px 0;
+
+ &:last-child {
+ border-bottom: 0;
+ }
+
+ &__header {
+ font-weight: 600;
+ padding: 4px 0;
+ }
+ }
+
+ &--horizontal {
+ display: grid;
+ grid-auto-columns: minmax(0, 1fr);
+ grid-auto-flow: column;
+
+ .report-header__details__item {
+ border-bottom: 0;
+ }
+ }
+ }
+
+ @media screen and (width <= 930px) {
+ grid-template-columns: minmax(0, 1fr);
+ }
+}
+
+.account-card {
+ border-radius: 4px;
+ border: 1px solid var(--color-border-primary);
+ position: relative;
+
+ &__warning-badge {
+ position: absolute;
+ padding: 4px 10px;
+ top: 10px;
+ inset-inline-start: 10px;
+ border-radius: 4px;
+ background:
+ url('@/images/warning-stripes.svg') repeat-y left,
+ url('@/images/warning-stripes.svg') repeat-y right,
+ var(--color-bg-primary);
+ }
+
+ &__permalink {
+ color: inherit;
+ text-decoration: none;
+ }
+
+ &__header {
+ padding: 4px;
+ border-radius: 4px;
+ height: 128px;
+
+ img {
+ display: block;
+ margin: 0;
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ background: var(--color-bg-secondary);
+ }
+ }
+
+ &__title {
+ margin-top: -(15px + 8px);
+ display: flex;
+ align-items: flex-end;
+
+ &__avatar {
+ padding: 14px;
+
+ img,
+ .account__avatar {
+ display: block;
+ margin: 0;
+ width: 56px;
+ height: 56px;
+ background-color: var(--color-bg-secondary);
+ border-radius: 8px;
+ border: 1px solid var(--color-border-media);
+ }
+ }
+
+ .display-name {
+ color: var(--color-text-secondary);
+ padding-bottom: 15px;
+ font-size: 15px;
+ line-height: 20px;
+
+ bdi {
+ display: block;
+ color: var(--color-text-primary);
+ font-weight: 700;
+ }
+ }
+ }
+
+ &__bio {
+ padding: 0 15px;
+ margin: 8px 0;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ overflow-wrap: break-word;
+ max-height: 21px * 2;
+ position: relative;
+ font-size: 15px;
+ line-height: 21px;
+
+ &::after {
+ display: block;
+ content: '';
+ width: 50px;
+ height: 21px;
+ position: absolute;
+ bottom: 0;
+ inset-inline-end: 15px;
+ pointer-events: none;
+ }
+
+ a {
+ color: var(--color-text-primary);
+ text-decoration: none;
+ unicode-bidi: isolate;
+
+ &:hover {
+ text-decoration: underline;
+ }
+
+ &.mention {
+ &:hover {
+ text-decoration: none;
+
+ span {
+ text-decoration: underline;
+ }
+ }
+ }
+ }
+ }
+
+ &__actions {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+
+ &__button {
+ flex-shrink: 1;
+ padding: 0 15px;
+ overflow: hidden;
+
+ .button {
+ min-width: 0;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ max-width: 100%;
+ }
+ }
+ }
+
+ &__counters {
+ flex: 1 1 auto;
+ display: grid;
+ grid-auto-columns: minmax(0, 1fr);
+ grid-auto-flow: column;
+ max-width: 340px;
+ min-width: 65px * 3;
+
+ &__item {
+ padding: 15px 0;
+ text-align: center;
+ color: var(--color-text-primary);
+ font-weight: 600;
+ font-size: 15px;
+ line-height: 21px;
+
+ small {
+ display: block;
+ color: var(--color-text-secondary);
+ font-weight: 400;
+ font-size: 13px;
+ line-height: 18px;
+ }
+ }
+ }
+}
+
+.report-notes {
+ margin-bottom: 20px;
+
+ &__item {
+ background: var(--color-bg-primary);
+ position: relative;
+ padding: 15px;
+ padding-inline-start: 15px * 2 + 40px;
+ border: 1px solid var(--color-border-primary);
+
+ &:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ }
+
+ &:last-child {
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ }
+
+ &__avatar {
+ position: absolute;
+ inset-inline-start: 15px;
+ top: 15px;
+ border-radius: var(--avatar-border-radius);
+ width: 40px;
+ height: 40px;
+ }
+
+ &__header {
+ color: var(--color-text-secondary);
+ font-size: 15px;
+ line-height: 20px;
+ margin-bottom: 4px;
+
+ .username {
+ color: var(--color-text-primary);
+ font-weight: 500;
+ margin-inline-end: 5px;
+
+ a {
+ color: inherit;
+ text-decoration: none;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: underline;
+ }
+ }
+ }
+
+ a.timestamp {
+ color: var(--color-text-secondary);
+ text-decoration: none;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: underline;
+ }
+ }
+
+ time {
+ margin-inline-start: 5px;
+ vertical-align: baseline;
+ }
+ }
+
+ &__content {
+ font-size: 15px;
+ line-height: 20px;
+ overflow-wrap: break-word;
+ font-weight: 400;
+ color: var(--color-text-primary);
+
+ p {
+ margin-bottom: 20px;
+ white-space: pre-wrap;
+ unicode-bidi: plaintext;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ a {
+ color: var(--color-text-brand);
+ text-decoration: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+ }
+
+ &__actions {
+ position: absolute;
+ top: 15px;
+ inset-inline-end: 15px;
+ text-align: end;
+ }
+ }
+}
+
+.report-actions {
+ &__item {
+ display: flex;
+ align-items: center;
+ line-height: 18px;
+
+ &:last-child {
+ border-bottom: 0;
+ }
+
+ &__button {
+ box-sizing: border-box;
+ flex: 0 0 auto;
+ width: 200px;
+ padding: 15px;
+ padding-inline-end: 0;
+
+ .button {
+ display: block;
+ width: 100%;
+ }
+ }
+
+ &__description {
+ padding: 15px;
+ font-size: 14px;
+ color: var(--color-text-tertiary);
+ }
+ }
+
+ @media screen and (width <= 800px) {
+ border: 0;
+
+ &__item {
+ flex-direction: column;
+ border: 0;
+
+ &__button {
+ width: 100%;
+ padding: 15px 0;
+ }
+
+ &__description {
+ padding: 0;
+ padding-bottom: 15px;
+ }
+ }
+ }
+}
+
+.section-skip-link {
+ float: right;
+
+ a {
+ color: var(--color-text-brand);
+ text-decoration: none;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: underline;
+ }
+ }
+}
+
+.strike-card {
+ padding: 15px;
+ font-size: 15px;
+ line-height: 20px;
+ overflow-wrap: break-word;
+ font-weight: 400;
+ color: var(--color-text-primary);
+ box-sizing: border-box;
+ min-height: 100%;
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+
+ a {
+ color: var(--color-text-brand);
+ text-decoration: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+
+ p {
+ margin-bottom: 20px;
+ unicode-bidi: plaintext;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+
+ strong {
+ font-weight: 700;
+ }
+ }
+
+ &__rules {
+ list-style: disc;
+ padding-inline-start: 15px;
+ margin-bottom: 20px;
+ color: var(--color-text-secondary);
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+
+ &__text {
+ color: var(--color-text-primary);
+ }
+ }
+
+ &__statuses-list {
+ border-radius: 4px;
+ border: 1px solid var(--color-border-primary);
+ font-size: 13px;
+ line-height: 18px;
+ overflow: hidden;
+
+ &__item {
+ padding: 16px;
+ border-bottom: 1px solid var(--color-border-primary);
+
+ &:last-child {
+ border-bottom: 0;
+ }
+
+ &__meta {
+ color: var(--color-text-secondary);
+ }
+
+ a {
+ color: inherit;
+ text-decoration: none;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: underline;
+ }
+ }
+ }
+ }
+}
+
+.availability-indicator {
+ display: flex;
+ align-items: center;
+ margin-bottom: 30px;
+ font-size: 14px;
+ line-height: 21px;
+
+ &__hint {
+ padding: 0 15px;
+ }
+
+ &__graphic {
+ display: flex;
+ margin: 0 -2px;
+
+ &__item {
+ display: block;
+ flex: 0 0 auto;
+ width: 4px;
+ height: 21px;
+ background: var(--color-bg-secondary);
+ margin: 0 2px;
+ border-radius: 2px;
+
+ &.positive {
+ background: var(--color-bg-success-base);
+ }
+
+ &.negative {
+ background: var(--color-bg-error-base);
+ }
+ }
+ }
+}
+
+.history {
+ counter-reset: step 0;
+ font-size: 15px;
+ line-height: 22px;
+
+ > li {
+ counter-increment: step 1;
+ padding-inline-start: 2.5rem;
+ padding-bottom: 8px;
+ position: relative;
+ margin-bottom: 8px;
+
+ &::before {
+ position: absolute;
+ content: counter(step);
+ font-size: 0.625rem;
+ font-weight: 500;
+ inset-inline-start: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: calc(1.375rem + 1px);
+ height: calc(1.375rem + 1px);
+ background: var(--color-bg-primary);
+ border: 1px solid var(--color-text-brand);
+ color: var(--color-text-brand);
+ border-radius: 8px;
+ }
+
+ &::after {
+ position: absolute;
+ content: '';
+ width: 1px;
+ background: var(--color-text-brand);
+ bottom: 0;
+ top: calc(1.875rem + 1px);
+ inset-inline-start: 0.6875rem;
+ }
+
+ &:last-child {
+ margin-bottom: 0;
+
+ &::after {
+ display: none;
+ }
+ }
+ }
+
+ &__entry {
+ h5 {
+ font-weight: 500;
+ color: var(--color-text-primary);
+ line-height: 25px;
+ margin-bottom: 16px;
+ }
+
+ .status {
+ border: 1px solid var(--color-border-primary);
+ background: var(--color-bg-secondary);
+ border-radius: 4px;
+ }
+ }
+}
+
+.status__card {
+ padding: 15px;
+ border-radius: 4px;
+ font-size: 15px;
+ line-height: 20px;
+ overflow-wrap: break-word;
+ font-weight: 400;
+ border: 1px solid var(--color-border-primary);
+ color: var(--color-text-primary);
+ box-sizing: border-box;
+ min-height: 100%;
+
+ &.status--has-quote {
+ .quote-inline {
+ display: none;
+ }
+ }
+
+ .status__quote & {
+ // Remove the border from the .status__card within .status__quote
+ border: none;
+
+ .display-name__account {
+ line-height: inherit;
+ }
+
+ .status__avatar,
+ .status__avatar .account__avatar {
+ width: 32px;
+ height: 32px;
+ }
+ }
+
+ .status__prepend {
+ padding: 0 0 15px;
+ gap: 4px;
+ align-items: center;
+ }
+
+ > details {
+ summary {
+ display: block;
+ box-sizing: border-box;
+ color: var(--color-text-primary);
+ background: var(--color-bg-brand-softer);
+ border: 1px solid var(--color-border-on-bg-brand-softer);
+ border-radius: 8px;
+ padding: 8px 13px;
+ position: relative;
+ font-size: 15px;
+ line-height: 22px;
+ cursor: pointer;
+
+ &::after {
+ content: attr(data-show, 'Show more');
+ margin-top: 8px;
+ display: block;
+ font-size: 15px;
+ line-height: 20px;
+ color: var(--color-text-brand);
+ cursor: pointer;
+ border: 0;
+ background: transparent;
+ padding: 0;
+ text-decoration: none;
+ font-weight: 500;
+ }
+
+ &:hover,
+ &:focus-visible {
+ &::after {
+ text-decoration: underline !important;
+ }
+ }
+ }
+
+ &[open] summary {
+ margin-bottom: 16px;
+
+ &::after {
+ content: attr(data-hide, 'Hide post');
+ }
+ }
+ }
+
+ .preview-card {
+ position: relative;
+ max-width: 566px;
+
+ .status-card__image {
+ &--video {
+ aspect-ratio: 16 / 9;
+ }
+
+ &--large {
+ aspect-ratio: 1.91 / 1;
+ }
+
+ aspect-ratio: 1;
+ }
+
+ .spoiler-button__overlay__label {
+ outline: 1px solid var(--color-border-media);
+ }
+
+ .hide-button {
+ // Toggled to appear when the preview-card is unblurred:
+ display: none;
+ position: absolute;
+ top: 5px;
+ right: 5px;
+ color: var(--color-text-on-media);
+ background: var(--color-bg-media);
+ backdrop-filter: $backdrop-blur-filter;
+ outline: 1px solid var(--color-border-media);
+ border: 0;
+ padding: 3px 12px;
+ border-radius: 99px;
+ font-size: 14px;
+ font-weight: 700;
+ line-height: 20px;
+
+ &:hover,
+ &:focus {
+ background-color: rgb(from var(--color-bg-media-base) r g b / 90%);
+ }
+ }
+
+ &.preview-card--image-visible {
+ .hide-button {
+ display: block;
+ }
+
+ .spoiler-button__overlay,
+ .status-card__image-preview {
+ display: none;
+ }
+ }
+ }
+
+ .detailed-status__meta {
+ .detailed-status__application,
+ .detailed-status__datetime,
+ .detailed-status__link {
+ color: inherit;
+ }
+ }
+}
+
+.admin {
+ &__terms-of-service {
+ &__container {
+ background: var(--color-bg-tertiary);
+ border-radius: 8px;
+ border: 1px solid var(--color-border-primary);
+ overflow: hidden;
+
+ &__header {
+ padding: 16px;
+ font-size: 14px;
+ line-height: 20px;
+ color: var(--color-text-primary);
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ }
+
+ &__body {
+ background: var(--color-bg-primary);
+ padding: 16px;
+ overflow-y: scroll;
+ height: 30vh;
+ }
+ }
+
+ &__history {
+ & > li {
+ border-bottom: 1px solid var(--color-border-primary);
+
+ &:last-child {
+ border-bottom: 0;
+ }
+ }
+
+ &__item {
+ padding: 16px 0;
+ padding-bottom: 8px;
+
+ h5 {
+ font-size: 14px;
+ line-height: 20px;
+ font-weight: 600;
+ margin-bottom: 16px;
+
+ a {
+ color: inherit;
+ text-decoration: none;
+ }
+ }
+ }
+ }
+ }
+}
+
+.dot-indicator {
+ display: inline-flex;
+ align-items: center;
+ gap: 8px;
+ font-weight: 500;
+
+ &__indicator {
+ display: inline-block;
+ width: 8px;
+ height: 8px;
+ border-radius: 50%;
+ background: var(--color-text-tertiary);
+ }
+
+ &.success {
+ color: var(--color-text-success);
+
+ .dot-indicator__indicator {
+ background-color: var(--color-bg-success-base);
+ }
+ }
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/annual_reports.scss b/app/javascript/flavours/glitch/styles_new/mastodon/annual_reports.scss
new file mode 100644
index 0000000000..a9b7e0ddee
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/annual_reports.scss
@@ -0,0 +1,342 @@
+@use 'variables' as *;
+
+:root {
+ --indigo-1: #17063b;
+ --indigo-2: #2f0c7a;
+ --indigo-3: #562cfc;
+ --indigo-5: #858afa;
+ --indigo-6: #cccfff;
+ --lime: #baff3b;
+ --goldenrod-2: #ffc954;
+}
+
+.annual-report {
+ flex: 0 0 auto;
+ background: var(--indigo-1);
+ padding: 24px;
+
+ &__header {
+ margin-bottom: 16px;
+
+ h1 {
+ font-size: 25px;
+ font-weight: 600;
+ line-height: 30px;
+ color: var(--lime);
+ margin-bottom: 8px;
+ }
+
+ p {
+ font-size: 16px;
+ font-weight: 600;
+ line-height: 20px;
+ color: var(--indigo-6);
+ }
+ }
+
+ &__bento {
+ display: grid;
+ gap: 8px;
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr);
+ grid-template-rows: minmax(0, auto) minmax(0, 1fr) minmax(0, auto) minmax(
+ 0,
+ auto
+ );
+
+ &__box {
+ padding: 16px;
+ border-radius: 8px;
+ background: var(--indigo-2);
+ color: var(--indigo-5);
+ }
+ }
+
+ &__summary {
+ &__most-boosted-post {
+ grid-column: span 2;
+ grid-row: span 2;
+ padding: 0;
+
+ .status__content,
+ .content-warning {
+ color: var(--indigo-6);
+ }
+
+ .detailed-status {
+ border: 0;
+ }
+
+ .content-warning {
+ border: 0;
+ background: var(--indigo-1);
+
+ .link-button {
+ color: var(--indigo-5);
+ }
+ }
+
+ .detailed-status__meta__line {
+ border-bottom-color: var(--indigo-3);
+ }
+
+ .detailed-status__meta {
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+ }
+
+ .detailed-status__meta,
+ .poll__footer,
+ .poll__link,
+ .detailed-status .logo,
+ .detailed-status__display-name {
+ color: var(--indigo-5);
+ }
+
+ .detailed-status__meta .animated-number,
+ .detailed-status__display-name strong {
+ color: var(--indigo-6);
+ }
+
+ .poll__chart {
+ background-color: var(--indigo-3);
+
+ &.leading {
+ background-color: var(--goldenrod-2);
+ }
+ }
+
+ .status-card,
+ .hashtag-bar {
+ display: none;
+ }
+ }
+
+ &__followers {
+ grid-column: span 1;
+ text-align: center;
+ position: relative;
+ overflow: hidden;
+ padding-block-start: 24px;
+ padding-block-end: 24px;
+
+ --sparkline-gradient-top: rgba(86, 44, 252, 50%);
+ --sparkline-gradient-bottom: rgba(86, 44, 252, 0%);
+
+ &__foreground {
+ width: 100%;
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ gap: 8px;
+ position: relative;
+ z-index: 1;
+ }
+
+ &__number {
+ font-size: 31px;
+ font-weight: 600;
+ line-height: 37px;
+ color: var(--lime);
+ }
+
+ &__label {
+ font-size: 14px;
+ font-weight: 600;
+ line-height: 17px;
+ color: var(--indigo-6);
+ }
+
+ &__footnote {
+ display: block;
+ font-weight: 400;
+ opacity: 0.5;
+ }
+
+ svg {
+ position: absolute;
+ bottom: 0;
+ inset-inline-end: 0;
+ pointer-events: none;
+ z-index: 0;
+ height: 70%;
+ width: auto;
+
+ path:first-child {
+ fill: url('#gradient') !important;
+ fill-opacity: 1 !important;
+ }
+
+ path:last-child {
+ stroke: var(--color-graph-primary-stroke) !important;
+ fill: none !important;
+ }
+ }
+ }
+
+ &__archetype {
+ grid-column: span 1;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ gap: 8px;
+ padding: 0;
+
+ img {
+ display: block;
+ width: 100%;
+ height: auto;
+ border-radius: 8px;
+ }
+
+ &__label {
+ padding: 16px;
+ padding-bottom: 8px;
+ font-size: 14px;
+ line-height: 17px;
+ font-weight: 600;
+ color: var(--lime);
+ }
+ }
+
+ &__most-used-app {
+ grid-column: span 1;
+ text-align: center;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ gap: 8px;
+ box-sizing: border-box;
+
+ &__label {
+ font-size: 14px;
+ line-height: 17px;
+ font-weight: 600;
+ color: var(--indigo-6);
+ }
+
+ &__icon {
+ font-size: 14px;
+ line-height: 17px;
+ font-weight: 600;
+ color: var(--goldenrod-2);
+ }
+ }
+
+ &__percentile {
+ grid-row: span 2;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: space-between;
+ text-align: center;
+ text-wrap: balance;
+ padding: 16px 8px;
+
+ &__label {
+ font-size: 14px;
+ line-height: 17px;
+ }
+
+ &__number {
+ font-size: 54px;
+ font-weight: 600;
+ line-height: 73px;
+ color: var(--goldenrod-2);
+ }
+
+ &__footnote {
+ font-size: 11px;
+ line-height: 14px;
+ opacity: 0.5;
+ }
+ }
+
+ &__new-posts {
+ grid-column: span 2;
+ text-align: center;
+ position: relative;
+ overflow: hidden;
+
+ &__label {
+ font-size: 20px;
+ font-weight: 600;
+ line-height: 24px;
+ color: var(--indigo-6);
+ z-index: 1;
+ position: relative;
+ }
+
+ &__number {
+ font-size: 76px;
+ font-weight: 600;
+ line-height: 91px;
+ color: var(--goldenrod-2);
+ z-index: 1;
+ position: relative;
+ }
+
+ svg {
+ position: absolute;
+ inset-inline-start: -7px;
+ top: -4px;
+ z-index: 0;
+ }
+ }
+
+ &__most-used-hashtag {
+ grid-column: span 2;
+ text-align: center;
+ overflow: hidden;
+
+ &__hashtag {
+ font-size: 42px;
+ font-weight: 600;
+ line-height: 58px;
+ color: var(--indigo-6);
+ margin-inline-start: -100%;
+ margin-inline-end: -100%;
+ }
+
+ &__label {
+ font-size: 14px;
+ font-weight: 600;
+ line-height: 17px;
+ }
+ }
+ }
+}
+
+.annual-report-modal {
+ max-width: 600px;
+ background: var(--indigo-1);
+ border-radius: 16px;
+ display: flex;
+ flex-direction: column;
+ overflow-y: auto;
+
+ .loading-indicator .circular-progress {
+ color: var(--lime);
+ }
+
+ @media screen and (max-width: $no-columns-breakpoint) {
+ border-bottom: 0;
+ border-radius: 16px 16px 0 0;
+ }
+}
+
+.notification-group--annual-report {
+ .notification-group__icon {
+ color: var(--lime);
+ }
+
+ .notification-group__main .link-button {
+ font-weight: 500;
+ color: var(--lime);
+ }
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/basics.scss b/app/javascript/flavours/glitch/styles_new/mastodon/basics.scss
new file mode 100644
index 0000000000..6298409d15
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/basics.scss
@@ -0,0 +1,300 @@
+@use 'variables' as *;
+
+html.has-modal {
+ &,
+ body {
+ touch-action: none;
+ overscroll-behavior: none;
+ -webkit-overflow-scrolling: auto;
+ scrollbar-gutter: stable;
+ }
+
+ body {
+ overflow: hidden !important;
+ }
+}
+
+body {
+ font-family: $font-sans-serif, sans-serif;
+ background: var(--color-bg-ambient);
+ font-size: 13px;
+ line-height: 18px;
+ font-weight: 400;
+ color: var(--color-text-primary);
+ text-rendering: optimizelegibility;
+
+ // Disable kerning for Japanese text to preserve monospaced alignment for readability
+ &:not(:lang(ja)) {
+ font-feature-settings: 'kern';
+ }
+
+ text-size-adjust: none;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0%);
+ -webkit-tap-highlight-color: transparent;
+
+ &.system-font {
+ // system-ui => standard property (Chrome/Android WebView 56+, Opera 43+, Safari 11+)
+ // -apple-system => Safari <11 specific
+ // BlinkMacSystemFont => Chrome <56 on macOS specific
+ // Segoe UI => Windows 7/8/10
+ // Oxygen => KDE
+ // Ubuntu => Unity/Ubuntu
+ // Cantarell => GNOME
+ // Fira Sans => Firefox OS
+ // Droid Sans => Older Androids (<4.0)
+ // Helvetica Neue => Older macOS <10.11
+ // $font-sans-serif => web-font (Roboto) fallback and newer Androids (>=4.0)
+ font-family:
+ system-ui,
+ -apple-system,
+ BlinkMacSystemFont,
+ 'Segoe UI',
+ Oxygen,
+ Ubuntu,
+ Cantarell,
+ 'Fira Sans',
+ 'Droid Sans',
+ 'Helvetica Neue',
+ $font-sans-serif,
+ sans-serif;
+ }
+
+ &.app-body {
+ padding: 0;
+ padding-left: env(safe-area-inset-left);
+ padding-right: env(safe-area-inset-right);
+ box-sizing: border-box;
+
+ &.layout-single-column {
+ height: auto;
+ min-height: 100vh;
+ min-height: 100dvh;
+ overflow-y: scroll;
+ }
+
+ &.layout-multiple-columns {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ padding-bottom: env(safe-area-inset-bottom);
+ }
+ }
+
+ &.player {
+ padding: 0;
+ margin: 0;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+
+ & > div {
+ height: 100%;
+ }
+
+ .video-player video {
+ width: 100%;
+ height: 100%;
+ max-height: 100vh;
+ }
+
+ .media-gallery {
+ margin-top: 0;
+ height: 100% !important;
+ border-radius: 0;
+ }
+
+ .media-gallery__item {
+ border-radius: 0;
+ }
+ }
+
+ &.embed {
+ margin: 0;
+ padding-bottom: 0;
+ overflow: hidden;
+ }
+
+ &.admin {
+ padding: 0;
+ background: var(--color-bg-primary);
+ }
+
+ &.error {
+ position: absolute;
+ text-align: center;
+ width: 100%;
+ height: 100%;
+ padding: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ .dialog {
+ vertical-align: middle;
+ margin: 20px;
+
+ &__illustration {
+ img {
+ display: block;
+ max-width: 470px;
+ width: 100%;
+ height: auto;
+ margin-top: -120px;
+ margin-bottom: -45px;
+ }
+ }
+
+ h1 {
+ font-size: 20px;
+ line-height: 28px;
+ font-weight: 400;
+ }
+ }
+ }
+}
+
+a {
+ &:focus {
+ border-radius: 4px;
+ outline: var(--outline-focus-default);
+ }
+
+ &:focus:not(:focus-visible) {
+ outline: none;
+ }
+}
+
+button {
+ font-family: inherit;
+ cursor: pointer;
+
+ &:focus:not(:focus-visible) {
+ outline: none;
+ }
+}
+
+.app-holder {
+ &,
+ & > div,
+ & > noscript {
+ display: flex;
+ width: 100%;
+ align-items: center;
+ justify-content: center;
+ outline: 0 !important;
+ }
+
+ & > noscript {
+ min-height: 100vh;
+ min-height: 100dvh;
+ }
+}
+
+.layout-single-column .app-holder {
+ &,
+ & > div {
+ min-height: 100vh;
+ min-height: 100dvh;
+ }
+}
+
+.layout-multiple-columns .app-holder {
+ &,
+ & > div {
+ height: 100%;
+ }
+}
+
+.error-boundary,
+.app-holder noscript {
+ flex-direction: column;
+ font-size: 16px;
+ font-weight: 400;
+ line-height: 1.7;
+ color: var(--color-text-error);
+ text-align: center;
+
+ & > div {
+ max-width: 500px;
+ }
+
+ p {
+ margin-bottom: 0.85em;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ a {
+ color: var(--color-text-brand);
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: none;
+ }
+ }
+
+ &__footer {
+ color: var(--color-text-secondary);
+ font-size: 13px;
+
+ a {
+ color: var(--color-text-secondary);
+ }
+ }
+
+ button {
+ display: inline;
+ border: 0;
+ background: transparent;
+ color: var(--color-text-secondary);
+ font: inherit;
+ padding: 0;
+ margin: 0;
+ line-height: inherit;
+ cursor: pointer;
+ outline: 0;
+ transition: color 300ms linear;
+ text-decoration: underline;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: none;
+ }
+
+ &.copied {
+ color: var(--mas-status-success-color);
+ transition: none;
+ }
+ }
+}
+
+.logo-resources {
+ // Not using display: none because of https://bugs.chromium.org/p/chromium/issues/detail?id=258029
+ visibility: hidden;
+ user-select: none;
+ pointer-events: none;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+ inset-inline-start: 0;
+ z-index: -1000;
+}
+
+// NoScript adds a __ns__pop2top class to the full ancestry of blocked elements,
+// to set the z-index to a high value, which messes with modals and dropdowns.
+// Blocked elements can in theory only be media and frames/embeds, so they
+// should only appear in statuses, under divs and articles.
+body,
+div,
+article {
+ .__ns__pop2top {
+ z-index: unset !important;
+ }
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/branding.scss b/app/javascript/flavours/glitch/styles_new/mastodon/branding.scss
new file mode 100644
index 0000000000..a7cc9c500e
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/branding.scss
@@ -0,0 +1,5 @@
+@use 'variables' as *;
+
+.logo {
+ color: var(--color-text-primary);
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/components.scss b/app/javascript/flavours/glitch/styles_new/mastodon/components.scss
new file mode 100644
index 0000000000..61faaf1f32
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/components.scss
@@ -0,0 +1,11789 @@
+@use 'sass:color';
+@use 'variables' as *;
+@use 'mixins' as *;
+
+.app-body {
+ -webkit-overflow-scrolling: touch;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+}
+
+.animated-number {
+ display: inline-flex;
+ flex-direction: column;
+ align-items: stretch;
+ overflow: hidden;
+ position: relative;
+}
+
+.inline-alert {
+ color: var(--color-text-success);
+ font-weight: 400;
+
+ .no-reduce-motion & {
+ transition: opacity 200ms ease;
+ }
+}
+
+.link-button {
+ display: block;
+ font-size: 15px;
+ line-height: 20px;
+ color: var(--color-text-brand);
+ border: 0;
+ background: transparent;
+ padding: 0;
+ cursor: pointer;
+ text-decoration: none;
+
+ &--destructive {
+ color: var(--color-text-error);
+ }
+
+ &:hover,
+ &:active {
+ text-decoration: underline;
+ }
+
+ &:disabled {
+ color: var(--color-text-primary);
+ cursor: default;
+ }
+
+ &:focus-visible {
+ outline: var(--outline-focus-default);
+ }
+}
+
+.help-button {
+ color: var(--color-text-on-brand-base);
+ background: var(--color-bg-brand-base);
+ border: 0;
+ border-radius: 20px;
+ cursor: pointer;
+ width: 24px;
+ height: 24px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ &:active,
+ &:focus,
+ &:hover {
+ background: var(--color-bg-brand-base-hover);
+ }
+
+ &:focus-visible {
+ outline: var(--outline-focus-default);
+ }
+
+ .icon {
+ width: 14px;
+ height: 14px;
+ }
+}
+
+.button {
+ background-color: var(--color-bg-brand-base);
+ border: 10px none;
+ border-radius: 4px;
+ box-sizing: border-box;
+ color: var(--color-text-on-brand-base);
+ cursor: pointer;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ gap: 6px;
+ font-family: inherit;
+ font-size: 15px;
+ font-weight: 500;
+ letter-spacing: 0;
+ line-height: 22px;
+ overflow: hidden;
+ padding: 7px 18px;
+ position: relative;
+ text-align: center;
+ text-decoration: none;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ width: auto;
+
+ &:active,
+ &:focus,
+ &:hover {
+ background-color: var(--color-bg-brand-base-hover);
+ }
+
+ &:focus-visible {
+ outline: 2px solid var(--color-bg-brand-base);
+ outline-offset: 2px;
+ }
+
+ &--compact {
+ font-size: 14px;
+ line-height: normal;
+ font-weight: 700;
+ padding: 5px 12px;
+ border-radius: 4px;
+ }
+
+ &--dangerous {
+ background-color: var(--color-bg-error-base);
+ color: var(--color-text-on-error-base);
+
+ &:active,
+ &:focus,
+ &:hover {
+ background-color: var(--color-bg-error-base-hover);
+ transition: none;
+ }
+ }
+
+ &--destructive {
+ &:active,
+ &:focus,
+ &:hover {
+ color: var(--color-text-on-error-base);
+ background-color: var(--color-bg-error-base);
+ transition: none;
+ }
+ }
+
+ &:disabled,
+ &.disabled {
+ color: var(--color-text-on-disabled);
+ background-color: var(--color-bg-disabled);
+ cursor: not-allowed;
+ }
+
+ &.copyable {
+ transition: background 300ms linear;
+ }
+
+ &.copied {
+ color: var(--color-text-on-success-base);
+ background-color: var(--color-bg-success-base);
+ transition: none;
+ }
+
+ &.button-secondary {
+ color: var(--color-text-brand);
+ background: transparent;
+ padding: 6px 17px;
+ border: 1px solid var(--color-text-brand);
+
+ &:active,
+ &:focus,
+ &:hover {
+ border-color: var(--color-text-brand);
+ color: var(--color-text-brand);
+ background-color: transparent;
+ text-decoration: none;
+ }
+
+ &.button--destructive {
+ &:active,
+ &:focus,
+ &:hover {
+ border-color: var(--color-text-error);
+ color: var(--color-text-error);
+ }
+ }
+
+ &:disabled,
+ &.disabled {
+ border-color: var(--color-text-disabled);
+ color: var(--color-text-disabled);
+
+ &:active,
+ &:focus,
+ &:hover {
+ border-color: var(--color-text-disabled);
+ color: var(--color-text-disabled);
+ }
+ }
+ }
+
+ &.button--plain {
+ color: var(--color-text-brand);
+ background: transparent;
+ padding: 6px;
+
+ // The button has no outline, so we use negative margin to
+ // visually align its label with its surroundings while maintaining
+ // a generous click target
+ margin-inline: -6px;
+ border: 1px solid transparent;
+
+ &:active,
+ &:focus,
+ &:hover {
+ border-color: transparent;
+ color: var(--color-text-brand-soft);
+ background-color: transparent;
+ text-decoration: none;
+ }
+
+ &:disabled,
+ &.disabled {
+ opacity: 0.7;
+ border-color: transparent;
+ color: var(--color-text-disabled);
+
+ &:active,
+ &:focus,
+ &:hover {
+ border-color: transparent;
+ color: var(--color-text-disabled);
+ }
+ }
+ }
+
+ &.button--block {
+ width: 100%;
+ }
+
+ &.loading {
+ cursor: wait;
+
+ .button__label-wrapper {
+ // Hide the label only visually, so that
+ // it keeps its layout and accessibility
+ opacity: 0;
+ }
+
+ .loading-indicator {
+ position: absolute;
+ inset: 0;
+ }
+ }
+
+ .icon {
+ width: 18px;
+ height: 18px;
+ }
+}
+
+.column__wrapper {
+ display: flex;
+ flex: 1 1 auto;
+ position: relative;
+}
+
+.icon {
+ flex: 0 0 auto;
+ width: 24px;
+ height: 24px;
+ aspect-ratio: 1;
+
+ path {
+ fill: currentColor;
+ }
+}
+
+.icon-button {
+ --default-icon-color: var(--color-text-secondary);
+ --default-bg-color: transparent;
+ --hover-icon-color: var(--color-text-primary);
+ --hover-bg-color: var(--color-bg-brand-softer);
+
+ display: inline-flex;
+ color: var(--default-icon-color);
+ border: 0;
+ padding: 0;
+ border-radius: 4px;
+ background: var(--default-bg-color);
+ cursor: pointer;
+ align-items: center;
+ justify-content: center;
+ text-decoration: none;
+ gap: 4px;
+ flex: 0 0 auto;
+
+ a {
+ display: flex;
+ color: inherit;
+ text-decoration: none;
+ }
+
+ &:hover,
+ &:active,
+ &:focus-visible {
+ color: var(--hover-icon-color);
+ background-color: var(--hover-bg-color);
+ }
+
+ &:focus-visible {
+ outline: 2px solid var(--color-text-brand);
+ }
+
+ &.disabled {
+ color: var(--color-text-disabled);
+ background-color: var(--default-bg-color);
+ cursor: default;
+ }
+
+ &.inverted {
+ --default-icon-color: var(--color-text-primary);
+ --hover-icon-color: var(--color-text-secondary);
+ }
+
+ &.active {
+ --default-icon-color: var(--color-text-brand);
+ --hover-icon-color: var(--color-text-brand);
+ --hover-bg-color: transparent;
+ }
+
+ &.overlayed {
+ --default-icon-color: rgb(from var(--color-text-on-media) r g b / 70%);
+ --default-bg-color: var(--color-bg-media);
+ --hover-icon-color: var(--color-text-brand);
+ --hover-bg-color: rgb(from var(--color-bg-media-base) r g b / 90%);
+
+ box-sizing: content-box;
+ backdrop-filter: $backdrop-blur-filter;
+ border-radius: 4px;
+ padding: 2px;
+ }
+
+ &--with-counter {
+ padding-inline-end: 4px;
+ }
+
+ &__counter {
+ display: block;
+ width: auto;
+ font-size: 12px;
+ font-weight: 500;
+ }
+
+ &.copyable {
+ transition: all 300ms linear;
+ }
+
+ &.copied {
+ color: var(--color-text-success);
+ transition: none;
+ background-color: var(--color-bg-success-softer);
+ border-color: var(--color-border-on-bg-brand-softer);
+ }
+}
+
+body > [data-popper-placement] {
+ z-index: 9999;
+}
+
+.invisible {
+ font-size: 0;
+ line-height: 0;
+ display: inline-block;
+ width: 0;
+ height: 0;
+ position: absolute;
+
+ img,
+ svg {
+ margin: 0 !important;
+ border: 0 !important;
+ padding: 0 !important;
+ width: 0 !important;
+ height: 0 !important;
+ }
+}
+
+.ellipsis {
+ &::after {
+ content: '…';
+ }
+}
+
+.autosuggest-textarea {
+ &__textarea {
+ background: transparent;
+ min-height: 100px;
+ padding-bottom: 0;
+ resize: none;
+ scrollbar-color: initial;
+
+ &::-webkit-scrollbar {
+ all: unset;
+ }
+ }
+
+ &__suggestions {
+ box-shadow: var(--dropdown-shadow);
+ background: var(--color-bg-elevated);
+ border: 1px solid var(--color-border-primary);
+ border-radius: 0 0 4px 4px;
+ color: var(--color-text-primary);
+ font-size: 14px;
+ padding: 0;
+
+ &__item {
+ box-sizing: border-box;
+ display: flex;
+ align-items: center;
+ height: 48px;
+ cursor: pointer;
+ font-size: 14px;
+ line-height: 20px;
+ letter-spacing: 0.25px;
+ color: var(--color-text-primary);
+
+ &:last-child {
+ border-radius: 0 0 4px 4px;
+ }
+
+ &:hover,
+ &:focus,
+ &:active {
+ background: var(--color-bg-secondary);
+
+ .autosuggest-account .display-name__account {
+ color: inherit;
+ }
+ }
+
+ &.selected {
+ color: var(--color-text-on-brand-base);
+ background: var(--color-bg-brand-base);
+
+ .autosuggest-account .display-name__account {
+ color: inherit;
+ }
+ }
+ }
+ }
+}
+
+.autosuggest-account,
+.autosuggest-emoji,
+.autosuggest-hashtag {
+ flex: 1 0 0;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: flex-start;
+ gap: 12px;
+ padding: 8px 12px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.autosuggest-account {
+ .display-name {
+ font-weight: 400;
+ display: flex;
+ flex-direction: column;
+ flex: 1 0 0;
+ }
+
+ .display-name__account {
+ display: block;
+ line-height: 16px;
+ font-size: 12px;
+ color: var(--color-text-secondary);
+ }
+}
+
+.autosuggest-hashtag {
+ justify-content: space-between;
+
+ &__name {
+ flex: 1 1 auto;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ &__uses {
+ flex: 0 0 auto;
+ text-align: end;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+}
+
+.autosuggest-emoji {
+ &__name {
+ flex: 1 0 0;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+}
+
+.autosuggest-account .account__avatar,
+.autosuggest-emoji img {
+ display: block;
+ width: 24px;
+ height: 24px;
+ flex: 0 0 auto;
+}
+
+.compose-form {
+ display: flex;
+ flex-direction: column;
+ gap: 32px;
+
+ .layout-multiple-columns &,
+ .column & {
+ padding: 15px;
+ }
+
+ &__highlightable {
+ display: flex;
+ flex-direction: column;
+ flex: 0 1 auto;
+ border-radius: 4px;
+ border: 1px solid var(--color-border-on-bg-secondary);
+ transition: border-color 300ms linear;
+ position: relative;
+ background: var(--color-bg-secondary);
+
+ &.active {
+ transition: none;
+ border-color: var(--color-text-brand);
+ }
+ }
+
+ &__warning {
+ color: var(--color-text-primary);
+ background: var(--color-bg-warning-softer);
+ border: 1px solid var(--color-border-on-bg-warning-softer);
+ padding: 8px 10px;
+ border-radius: 4px;
+ font-size: 13px;
+ font-weight: 400;
+
+ strong {
+ font-weight: 500;
+
+ @each $lang in $cjk-langs {
+ &:lang(#{$lang}) {
+ font-weight: 700;
+ }
+ }
+ }
+
+ a {
+ color: var(--color-text-brand);
+ font-weight: 500;
+ text-decoration: underline;
+
+ &:hover,
+ &:active,
+ &:focus {
+ text-decoration: none;
+ }
+ }
+ }
+
+ .spoiler-input {
+ display: flex;
+ align-items: stretch;
+
+ &__border {
+ background: url('@/images/warning-stripes.svg') repeat-y;
+ width: 5px;
+ flex: 0 0 auto;
+ }
+
+ .autosuggest-input {
+ flex: 1 1 auto;
+ border: 1px solid var(--color-border-primary);
+ border-width: 1px 0;
+ }
+ }
+
+ .autosuggest-textarea__textarea,
+ .spoiler-input__input {
+ display: block;
+ box-sizing: border-box;
+ width: 100%;
+ margin: 0;
+ color: var(--color-text-primary);
+ background: transparent;
+ font-family: inherit;
+ font-size: 14px;
+ padding: 12px;
+ line-height: normal;
+ border: 0;
+ outline: 0;
+
+ &:focus {
+ outline: 0;
+ }
+ }
+
+ .spoiler-input__input {
+ padding: 12px 12px - 5px;
+ background: var(--color-bg-brand-softer);
+ color: var(--color-text-brand);
+ }
+
+ &__dropdowns {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ margin: 8px;
+ flex-wrap: wrap;
+
+ & > div {
+ overflow: hidden;
+ display: flex;
+ }
+ }
+
+ &__uploads {
+ padding: 0 12px;
+ aspect-ratio: 3/2;
+ flex-shrink: 0;
+ }
+
+ .media-gallery {
+ gap: 8px;
+ }
+
+ &__upload {
+ position: relative;
+
+ &.draggable {
+ will-change: transform, opacity;
+ touch-action: none;
+ cursor: grab;
+ }
+
+ &.dragging {
+ opacity: 0;
+ }
+
+ &.overlay {
+ height: 100%;
+ border-radius: 8px;
+ pointer-events: none;
+ }
+
+ &__actions {
+ display: flex;
+ align-items: flex-start;
+ justify-content: space-between;
+ padding: 8px;
+ }
+
+ &__preview,
+ &__visualizer {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ z-index: -1;
+ top: 0;
+ }
+
+ &__preview {
+ border-radius: 6px;
+ inset-inline-start: 0;
+ }
+
+ &__visualizer {
+ padding: 16px;
+ box-sizing: border-box;
+
+ .audio-player__visualizer {
+ margin: 0 auto;
+ display: block;
+ height: 100%;
+ }
+
+ .icon {
+ position: absolute;
+ top: 50%;
+ inset-inline-start: 50%;
+ transform: translate(-50%, -50%);
+ opacity: 0.75;
+ color: var(--player-foreground-color);
+ filter: var(--overlay-icon-shadow);
+ width: 48px;
+ height: 48px;
+ }
+ }
+
+ &__thumbnail {
+ width: 100%;
+ height: 100%;
+ background-position: center;
+ background-size: cover;
+ background-repeat: no-repeat;
+ overflow: hidden;
+ }
+
+ .icon-button {
+ flex: 0 0 auto;
+ color: var(--color-text-on-media);
+ background: var(--color-bg-media);
+ backdrop-filter: $backdrop-blur-filter;
+ border-radius: 6px;
+ font-size: 12px;
+ line-height: 16px;
+ font-weight: 500;
+ padding: 4px 8px;
+ font-family: inherit;
+
+ .icon {
+ width: 15px;
+ height: 15px;
+ }
+ }
+
+ .icon-button.compose-form__upload__delete {
+ padding: 2px;
+ border-radius: 50%;
+
+ .icon {
+ width: 20px;
+ height: 20px;
+ }
+ }
+
+ &__warning {
+ position: absolute;
+ z-index: 2;
+ bottom: 0;
+ inset-inline-start: 0;
+ inset-inline-end: 0;
+ padding: 8px;
+
+ .icon-button.active {
+ color: var(--color-text-on-warning-base);
+ background: var(--color-bg-warning-base);
+ }
+ }
+ }
+
+ &__footer {
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+ padding: 12px;
+ }
+
+ // glitch: reintroduce sensitive button
+ &__sensitive-button {
+ padding: 0 12px;
+
+ input[type='checkbox'] {
+ appearance: none;
+ display: block;
+ border: 1px solid var(--color-text-secondary);
+ box-sizing: border-box;
+ width: 17px;
+ height: 17px;
+ border-radius: 4px;
+ flex: 0 0 auto;
+
+ &:active,
+ &:focus,
+ &:hover {
+ border-color: var(--color-text-success);
+ border-width: 4px;
+ }
+
+ &:checked {
+ background-color: var(--color-text-success);
+ border-color: var(--color-text-success);
+ }
+
+ &::-moz-focus-inner {
+ outline: 0 !important;
+ border: 0;
+ }
+
+ &:focus,
+ &:active {
+ outline: 0 !important;
+ }
+
+ &:disabled {
+ opacity: 0.5;
+ }
+ }
+ }
+
+ &__submit {
+ display: flex;
+ flex: 1 0 100%; // glitch: always on its own line
+ max-width: 100%;
+ overflow: hidden;
+ gap: 5px; // glitch: handle secondary post privacy
+ align-items: stretch; // glitch: handle secondary post privacy
+
+ .button.secondary-post-button {
+ flex: 0 1 auto;
+ padding-top: 0;
+ padding-bottom: 0;
+
+ .icon {
+ vertical-align: middle;
+ }
+ }
+ }
+
+ &__buttons {
+ display: flex;
+ gap: 8px;
+ align-items: center;
+ flex: 1 1 auto;
+
+ & > div {
+ display: flex;
+ }
+
+ .icon-button {
+ padding: 2px;
+ }
+
+ .icon-button .icon {
+ width: 20px;
+ height: 20px;
+ }
+ }
+
+ &__actions {
+ display: flex;
+ align-items: center;
+ flex: 0 0 auto;
+ gap: 12px;
+ flex-wrap: wrap;
+
+ .icon-button {
+ box-sizing: content-box;
+ color: var(--color-text-brand);
+
+ &:hover,
+ &:focus,
+ &:active {
+ color: var(--color-text-brand);
+ }
+
+ &.disabled {
+ color: var(--color-text-disabled);
+ }
+
+ &.active {
+ background: var(--color-bg-brand-base);
+ color: var(--color-text-on-brand-base);
+ }
+ }
+ }
+
+ &__poll {
+ margin-top: 8px;
+ display: flex;
+ flex-direction: column;
+ align-self: stretch;
+ gap: 8px;
+
+ .poll__option {
+ padding: 0 12px;
+ gap: 8px;
+
+ &.empty:not(:focus-within) {
+ opacity: 0.5;
+ }
+ }
+
+ .poll__input {
+ width: 17px;
+ height: 17px;
+ border-color: var(--color-text-secondary);
+ }
+
+ &__footer {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+ padding-inline-start: 37px;
+ padding-inline-end: 40px;
+
+ &__sep {
+ width: 1px;
+ height: 22px;
+ background: var(--color-border-primary);
+ flex: 0 0 auto;
+ }
+ }
+
+ &__select {
+ display: flex;
+ flex-direction: column;
+ gap: 2px;
+ flex: 1 1 auto;
+ min-width: 0;
+
+ &__label {
+ flex: 0 0 auto;
+ font-size: 11px;
+ font-weight: 500;
+ line-height: 16px;
+ letter-spacing: 0.5px;
+ color: var(--color-text-secondary);
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ }
+
+ &__value {
+ flex: 0 0 auto;
+ appearance: none;
+ background: transparent;
+ border: none;
+ padding: 0;
+ font-size: 14px;
+ font-weight: 500;
+ line-height: 20px;
+ letter-spacing: 0.1px;
+ color: var(--color-text-brand);
+ background-color: var(--color-bg-secondary-solid);
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ }
+ }
+ }
+
+ .status__quote {
+ margin: 0 8px;
+ max-height: 220px;
+
+ // Override .status__content .status__content__text.status__content__text--visible
+ .status__content__text.status__content__text {
+ display: -webkit-box;
+ }
+
+ .status__content__text {
+ -webkit-line-clamp: 4;
+ line-clamp: 4;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+ }
+ }
+}
+
+.dropdown-button {
+ display: flex;
+ align-items: center;
+ gap: 4px;
+ color: var(--color-text-brand);
+ background: transparent;
+ border: 1px solid var(--color-text-brand);
+ border-radius: 6px;
+ padding: 4px 8px;
+ font-size: 13px;
+ line-height: normal;
+ font-weight: 400;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+
+ &[disabled] {
+ cursor: default;
+ color: var(--color-text-disabled);
+ border-color: var(--color-text-disabled);
+ }
+
+ .icon {
+ width: 15px;
+ height: 15px;
+ flex: 0 0 auto;
+ }
+
+ &__label {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ flex: 1 1 auto;
+ }
+
+ &.active {
+ color: var(--color-text-on-brand-base);
+ border-color: var(--color-bg-brand-base);
+ background: var(--color-bg-brand-base);
+ }
+
+ &.warning {
+ color: var(--color-text-warning);
+ border-color: var(--color-text-warning);
+
+ &.active {
+ color: var(--color-text-on-warning-base);
+ border-color: var(--color-bg-warning-base);
+ background-color: var(--color-bg-warning-base);
+ }
+ }
+}
+
+.character-counter {
+ cursor: default;
+ font-family: $font-sans-serif, sans-serif;
+ font-size: 14px;
+ font-weight: 400;
+ line-height: normal;
+ color: var(--color-text-secondary);
+ flex: 1 0 auto;
+ text-align: end;
+
+ &.character-counter--over {
+ color: var(--color-text-error);
+ }
+}
+
+.no-reduce-motion .spoiler-input {
+ transition:
+ height 0.4s ease,
+ opacity 0.4s ease;
+}
+
+.sign-in-banner {
+ padding: 10px;
+
+ p {
+ font-size: 15px;
+ line-height: 22px;
+ color: var(--color-text-primary);
+ margin-bottom: 20px;
+
+ strong {
+ font-weight: 700;
+ }
+
+ a {
+ color: var(--color-text-primary);
+ text-decoration: none;
+ unicode-bidi: isolate;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+ }
+
+ .button {
+ margin-bottom: 10px;
+ }
+}
+
+.emojione {
+ font-size: inherit;
+ vertical-align: middle;
+ object-fit: contain;
+ margin: -0.2ex 0.15em 0.2ex;
+ width: 16px;
+ height: 16px;
+
+ img {
+ width: auto;
+ }
+}
+
+.status__content--with-action {
+ cursor: pointer;
+}
+
+.status__content {
+ clear: both;
+}
+
+.status__content,
+.edit-indicator__content,
+.reply-indicator__content {
+ position: relative;
+ overflow-wrap: break-word;
+ font-weight: 400;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ font-size: 15px;
+ line-height: 20px;
+ padding-top: 2px;
+ color: var(--color-text-primary);
+
+ &:focus {
+ outline: 0;
+ }
+
+ &.status__content--with-spoiler {
+ white-space: normal;
+
+ .status__content__text {
+ white-space: pre-wrap;
+ }
+ }
+
+ .emojione {
+ width: 20px;
+ height: 20px;
+ margin: -3px 0 0;
+ }
+
+ p,
+ pre {
+ margin-bottom: 20px;
+ white-space: pre-wrap;
+ unicode-bidi: plaintext;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ a {
+ color: var(--color-text-status-links);
+ text-decoration: none;
+ unicode-bidi: isolate;
+
+ &:hover {
+ text-decoration: underline;
+ }
+
+ &.mention {
+ &:hover {
+ text-decoration: none;
+
+ span {
+ text-decoration: underline;
+ }
+ }
+ }
+ }
+
+ a.unhandled-link {
+ color: var(--color-text-brand);
+
+ .link-origin-tag {
+ color: var(--color-text-warning);
+ font-size: 0.8em;
+ }
+ }
+
+ .status__content__text {
+ display: none;
+
+ &.status__content__text--visible {
+ display: block;
+ }
+ }
+}
+
+.reply-indicator {
+ display: grid;
+ grid-template-columns: 46px minmax(0, 1fr);
+ grid-template-rows: 46px max-content;
+ gap: 0 10px;
+
+ .detailed-status__display-name {
+ margin-bottom: 4px;
+ }
+
+ .detailed-status__display-avatar {
+ grid-column-start: 1;
+ grid-row-start: 1;
+ grid-row-end: span 1;
+ }
+
+ &__main {
+ grid-column-start: 2;
+ grid-row-start: 1;
+ grid-row-end: span 2;
+ }
+
+ .display-name {
+ font-size: 14px;
+ line-height: 16px;
+
+ &__account {
+ display: none;
+ }
+ }
+
+ &__line {
+ grid-column-start: 1;
+ grid-row-start: 2;
+ grid-row-end: span 1;
+ position: relative;
+
+ &::before {
+ display: block;
+ content: '';
+ position: absolute;
+ inset-inline-start: 50%;
+ top: 4px;
+ transform: translateX(-50%);
+ background: var(--color-border-primary);
+ width: 2px;
+ height: calc(100% + 32px - 8px); // Account for gap to next element
+ }
+ }
+
+ &__content {
+ font-size: 14px;
+ line-height: 20px;
+ letter-spacing: 0.25px;
+ display: -webkit-box;
+ line-clamp: 4;
+ -webkit-line-clamp: 4;
+ -webkit-box-orient: vertical;
+ padding: 0;
+ max-height: 4 * 20px;
+ overflow: hidden;
+ color: var(--color-text-secondary);
+ }
+
+ &__attachments {
+ margin-top: 4px;
+ color: var(--color-text-secondary);
+ font-size: 12px;
+ line-height: 16px;
+ display: flex;
+ align-items: center;
+ gap: 4px;
+
+ .icon {
+ width: 18px;
+ height: 18px;
+ }
+ }
+}
+
+.edit-indicator {
+ border-radius: 4px 4px 0 0;
+ background: var(--color-bg-tertiary);
+ padding: 12px;
+ overflow-y: auto;
+ flex: 0 0 auto;
+ border-bottom: 1px solid var(--color-border-primary);
+ display: flex;
+ flex-direction: column;
+ gap: 4px;
+
+ &__header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ color: var(--color-text-secondary);
+ font-size: 12px;
+ line-height: 16px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ &__cancel {
+ display: flex;
+
+ .icon {
+ width: 18px;
+ height: 18px;
+ }
+ }
+
+ &__display-name {
+ display: flex;
+ gap: 4px;
+
+ a {
+ color: inherit;
+ text-decoration: none;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: underline;
+ }
+ }
+ }
+
+ &__content {
+ color: var(--color-text-primary);
+ font-size: 14px;
+ line-height: 20px;
+ letter-spacing: 0.25px;
+ padding-top: 0 !important;
+ display: -webkit-box;
+ line-clamp: 4;
+ -webkit-line-clamp: 4;
+ -webkit-box-orient: vertical;
+ max-height: 4 * 20px;
+ overflow: hidden;
+
+ a {
+ color: var(--color-text-brand);
+ }
+ }
+
+ &__attachments {
+ color: var(--color-text-secondary);
+ font-size: 12px;
+ line-height: 16px;
+ opacity: 0.75;
+ display: flex;
+ align-items: center;
+ gap: 4px;
+
+ .icon {
+ width: 18px;
+ height: 18px;
+ }
+ }
+}
+
+.edit-indicator__content,
+.reply-indicator__content {
+ .emojione {
+ width: 18px;
+ height: 18px;
+ margin: -3px 0 0;
+ }
+}
+
+.announcements__content {
+ overflow-wrap: break-word;
+ overflow-y: auto;
+
+ .emojione {
+ width: 20px;
+ height: 20px;
+ margin: -3px 0 0;
+ }
+
+ p {
+ margin-bottom: 10px;
+ white-space: pre-wrap;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ a {
+ color: var(--color-text-primary);
+ text-decoration: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+
+ &.mention {
+ &:hover {
+ text-decoration: none;
+
+ span {
+ text-decoration: underline;
+ }
+ }
+ }
+
+ &.unhandled-link {
+ color: var(--color-text-brand);
+ }
+ }
+}
+
+.status__content.status__content--collapsed {
+ max-height: 20px * 15; // 15 lines is roughly above 500 characters
+}
+
+.status__content__read-more-button,
+.status__content__translate-button {
+ display: flex;
+ align-items: center;
+ font-size: 15px;
+ line-height: 22px;
+ color: var(--color-text-brand);
+ border: 0;
+ background: transparent;
+ padding: 0;
+ margin-top: 16px;
+ text-decoration: none;
+ text-wrap: nowrap;
+
+ .status--is-quote & {
+ // Needed to prevent buttons from stretching across whole
+ // status width in Safari due to line-clamp
+ width: min-content;
+ white-space: nowrap;
+ }
+
+ &:hover,
+ &:active {
+ text-decoration: underline;
+ }
+
+ .icon {
+ width: 15px;
+ height: 15px;
+ }
+}
+
+.translate-button {
+ margin-top: 16px;
+ font-size: 15px;
+ line-height: 20px;
+ display: flex;
+ justify-content: space-between;
+ color: var(--color-text-tertiary);
+}
+
+.status__wrapper--filtered {
+ color: var(--color-text-tertiary);
+ border: 0;
+ font-size: inherit;
+ text-align: center;
+ line-height: inherit;
+ margin: 0;
+ padding: 15px;
+ box-sizing: border-box;
+ width: 100%;
+ clear: both;
+ border-bottom: 1px solid var(--color-border-primary);
+
+ &__button {
+ display: inline;
+ color: var(--color-text-brand);
+ border: 0;
+ background: transparent;
+ padding: 0;
+ font-size: inherit;
+ line-height: inherit;
+
+ &:hover,
+ &:active {
+ text-decoration: underline;
+ }
+ }
+}
+
+.focusable {
+ &:focus-visible {
+ outline: 2px solid var(--color-text-brand);
+ outline-offset: -2px;
+ background: var(--color-bg-brand-softer);
+ }
+}
+
+.status {
+ padding: 10px 14px; // glitch: reduced padding
+ min-height: 54px;
+ border-bottom: 1px solid var(--color-border-primary);
+ cursor: auto;
+ opacity: 1;
+ animation: fade 150ms linear;
+
+ @keyframes fade {
+ 0% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 1;
+ }
+ }
+
+ .content-warning {
+ margin-bottom: 10px;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ .media-gallery,
+ .video-player,
+ .audio-player,
+ .attachment-list {
+ margin-top: 8px; // glitch: reduced margins
+ }
+
+ &--in-thread {
+ --thread-margin: calc(46px + 8px);
+
+ border-bottom: 0;
+
+ & > .status__content,
+ & > .status__action-bar,
+ & > .media-gallery,
+ & > div > .video-player,
+ & > .audio-player,
+ & > .attachment-list,
+ & > .picture-in-picture-placeholder,
+ & > .more-from-author,
+ & > .status-card,
+ & > .hashtag-bar,
+ & > .content-warning,
+ & > .filter-warning,
+ & > .status__quote {
+ margin-inline-start: var(--thread-margin);
+ width: calc(100% - var(--thread-margin));
+ }
+
+ .more-from-author {
+ width: calc(100% - var(--thread-margin) + 2px);
+ }
+
+ .status__content__read-more-button {
+ margin-inline-start: var(--thread-margin);
+ }
+ }
+
+ &__action-bar__button-wrapper {
+ flex-basis: 0;
+
+ // glitch-soc: disable this for now; flex-grow: 1;
+
+ &:last-child {
+ flex-grow: 0;
+ }
+ }
+
+ &--first-in-thread {
+ border-top: 1px solid var(--color-border-primary);
+ }
+
+ &__line {
+ --thread-line-color: var(--color-border-primary);
+
+ height: 10px - 4px;
+ border-inline-start: 2px solid var(--thread-line-color);
+ width: 0;
+ position: absolute;
+ top: 0;
+ inset-inline-start: 14px + ((46px - 2px) * 0.5);
+
+ &--full {
+ top: 0;
+ height: 100%;
+
+ &::before {
+ content: '';
+ display: block;
+ position: absolute;
+ top: 10px - 4px;
+ height: 46px + 4px + 4px;
+ width: 2px;
+ background: var(--thread-line-color);
+ inset-inline-start: -2px;
+ }
+ }
+
+ &--first {
+ top: 10px + 46px + 4px;
+ height: calc(100% - (10px + 46px + 4px));
+
+ &::before {
+ display: none;
+ }
+ }
+ }
+
+ .no-reduce-motion &--highlighted-entry::before {
+ content: '';
+ position: absolute;
+ inset: 0;
+ background: var(--color-bg-brand-softer);
+ opacity: 0;
+ animation: fade 0.7s reverse both 0.3s;
+ pointer-events: none;
+ }
+}
+
+.status__relative-time {
+ display: block;
+ font-size: 14px;
+ color: var(--color-text-secondary);
+ text-align: end;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.notification__relative_time {
+ color: var(--color-text-tertiary);
+ float: right;
+ font-size: 14px;
+ padding-bottom: 1px;
+}
+
+.status__display-name {
+ color: var(--color-text-secondary);
+}
+
+.status__info .status__display-name {
+ max-width: 100%;
+ display: flex;
+ font-size: 15px;
+ line-height: 22px;
+ align-items: start; // glitch: changed because of our different layout
+ gap: 10px;
+ overflow: hidden;
+ margin-inline-end: auto;
+
+ .display-name {
+ bdi {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ &__account {
+ white-space: nowrap;
+ display: block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ }
+}
+
+.status__quote-cancel {
+ align-self: self-start;
+ order: 5;
+}
+
+.status__info {
+ font-size: 15px;
+ padding-bottom: 10px;
+ display: flex;
+ align-items: start;
+ justify-content: space-between;
+ gap: 10px;
+ cursor: pointer;
+}
+
+.status__info__icons {
+ display: flex;
+ align-items: center;
+ height: 1em;
+ color: var(--color-text-tertiary);
+ gap: 4px;
+
+ & > .icon {
+ width: 16px;
+ height: 16px;
+ }
+}
+
+.status-check-box__status {
+ display: block;
+ box-sizing: border-box;
+ width: 100%;
+ padding: 0 10px;
+
+ .detailed-status__display-name {
+ color: var(--color-text-tertiary);
+
+ span {
+ display: inline;
+ }
+
+ &:hover strong {
+ text-decoration: none;
+ }
+ }
+
+ .media-gallery,
+ .audio-player,
+ .video-player {
+ margin-top: 15px;
+ max-width: 250px;
+ }
+
+ .status__content {
+ padding: 0;
+ white-space: normal;
+ }
+
+ .media-gallery__item-thumbnail {
+ cursor: default;
+ }
+}
+
+.status__prepend {
+ padding: 8px 14px; // glitch: reduced padding
+ padding-bottom: 0;
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ font-size: 14px;
+ line-height: 22px;
+ font-weight: 500;
+ color: var(--color-text-secondary);
+
+ &__icon {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex: 0 0 auto;
+
+ .icon {
+ width: 16px;
+ height: 16px;
+ }
+ }
+
+ a {
+ color: inherit;
+ text-decoration: none;
+ }
+
+ > span {
+ display: block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+}
+
+.status__wrapper-direct,
+.notification-ungrouped--direct,
+.notification-group--direct,
+.notification-group--annual-report {
+ background: var(--color-bg-brand-softer);
+
+ &:focus {
+ background: var(--color-bg-brand-soft);
+ }
+}
+
+.status__wrapper-direct,
+.notification-ungrouped--direct {
+ .status__prepend,
+ .notification-ungrouped__header {
+ color: var(--color-text-brand);
+ }
+}
+
+.status__action-bar {
+ display: flex;
+ align-items: center;
+ gap: 18px;
+ margin-top: 8px;
+
+ &-spacer {
+ flex-grow: 1;
+ }
+}
+
+.detailed-status__action-bar-dropdown {
+ flex: 1 1 auto;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+}
+
+.detailed-status {
+ padding: 14px 10px; // glitch: reduced padding
+ border-top: 1px solid var(--color-border-primary);
+
+ .status__content {
+ font-size: 19px;
+ line-height: 24px;
+
+ .emojione {
+ width: 24px;
+ height: 24px;
+ margin: -1px 0 0;
+ }
+ }
+
+ .media-gallery,
+ .video-player,
+ .audio-player {
+ margin-top: 8px; // glitch: reduced margins
+ }
+
+ .status__prepend {
+ padding: 0;
+ margin-bottom: 16px;
+ }
+
+ .content-warning {
+ margin-bottom: 16px;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ .logo {
+ width: 40px;
+ height: 40px;
+ color: var(--color-text-tertiary);
+ }
+}
+
+.embed {
+ position: relative;
+
+ &__overlay {
+ display: block;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ }
+
+ .detailed-status {
+ border-top: 0;
+ }
+}
+
+.scrollable > div:first-child .detailed-status {
+ border-top: 0;
+}
+
+.detailed-status__meta {
+ margin-top: 24px;
+ color: var(--color-text-tertiary);
+ font-size: 14px;
+ line-height: 18px;
+
+ &__line {
+ border-bottom: 1px solid var(--color-border-primary);
+ padding: 8px 0;
+ display: flex;
+ align-items: center;
+ gap: 8px;
+
+ &:first-child {
+ padding-top: 0;
+ }
+
+ &:last-child {
+ padding-bottom: 0;
+ border-bottom: 0;
+ }
+ }
+
+ .icon {
+ width: 18px;
+ height: 18px;
+ }
+
+ .animated-number {
+ color: var(--color-text-primary);
+ font-weight: 500;
+ }
+}
+
+.detailed-status__action-bar {
+ border-top: 1px solid var(--color-border-primary);
+ border-bottom: 1px solid var(--color-border-primary);
+ display: flex;
+ flex-direction: row;
+ padding: 8px 0; // glitch: reduced padding
+}
+
+.detailed-status__wrapper-direct {
+ .detailed-status,
+ .detailed-status__action-bar {
+ background: var(--color-bg-brand-softer);
+ }
+
+ .status__prepend {
+ color: var(--color-text-brand);
+ }
+}
+
+.status__quote {
+ // --status-gutter-width is currently only set inside of
+ // .notification-ungrouped, so everywhere else this will fall back
+ // to the pixel values
+ --quote-margin: var(--status-gutter-width);
+
+ position: relative;
+ overflow: hidden;
+ margin-block-start: 16px;
+ margin-inline-start: calc(var(--quote-margin) + var(--thread-margin, 0px));
+ border-radius: 12px;
+ color: var(--color-text-primary);
+ border: 1px solid var(--color-border-primary);
+}
+
+.status__quote--error {
+ box-sizing: border-box;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 8px;
+ padding: 12px;
+ font-size: 14px;
+ line-height: 20px;
+ letter-spacing: 0.25px;
+ min-height: 56px;
+
+ .link-button {
+ font-size: inherit;
+ line-height: inherit;
+ letter-spacing: inherit;
+ }
+}
+
+.status__quote-author-button {
+ position: relative;
+ overflow: hidden;
+ display: flex;
+ margin-top: 8px;
+ padding: 8px 12px;
+ align-items: center;
+ font-family: inherit;
+ font-size: 14px;
+ font-weight: 400;
+ line-height: 20px;
+ letter-spacing: 0.25px;
+ color: var(--color-text-secondary);
+ background: var(--color-bg-brand-softer);
+ border-radius: 8px;
+ cursor: default;
+}
+
+.status--is-quote {
+ border: none;
+ padding: 12px;
+
+ .status__info {
+ padding-bottom: 8px;
+ }
+
+ .display-name,
+ .status__relative-time {
+ font-size: 14px;
+ line-height: 20px;
+ letter-spacing: 0.1px;
+ }
+
+ .display-name__account {
+ font-size: 12px;
+ line-height: 16px;
+ letter-spacing: 0.5px;
+ }
+
+ .status__content {
+ display: -webkit-box;
+ font-size: 14px;
+ letter-spacing: 0.25px;
+ line-height: 20px;
+ -webkit-line-clamp: 4;
+ line-clamp: 4;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+
+ p {
+ margin-bottom: 20px;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+ }
+
+ .media-gallery,
+ .video-player,
+ .audio-player,
+ .attachment-list,
+ .poll {
+ margin-top: 8px;
+ }
+}
+
+.detailed-status__link {
+ display: inline-flex;
+ align-items: center;
+ color: inherit;
+ text-decoration: none;
+ gap: 6px;
+}
+
+.domain {
+ padding: 16px;
+ border-bottom: 1px solid var(--color-border-primary);
+ display: flex;
+ align-items: center;
+ gap: 8px;
+
+ &__domain-name {
+ flex: 1 1 auto;
+ color: var(--color-text-primary);
+ font-size: 15px;
+ line-height: 21px;
+ font-weight: 500;
+ }
+}
+
+.account {
+ padding: 10px; // glitch: reduced padding
+ border-bottom: 1px solid var(--color-border-primary);
+
+ .account__display-name {
+ flex: 1 1 auto;
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ color: var(--color-text-secondary);
+ overflow: hidden;
+ text-decoration: none;
+ font-size: 14px;
+
+ .display-name {
+ margin-bottom: 4px;
+ }
+
+ .display-name strong {
+ display: inline;
+ color: var(--color-text-primary);
+ }
+ }
+
+ &--minimal {
+ .account__display-name {
+ .display-name {
+ margin-bottom: 0;
+ }
+
+ .display-name strong {
+ display: block;
+ }
+ }
+ }
+
+ &__avatar-wrapper .account__avatar {
+ @container (width < 360px) {
+ width: 35px !important;
+ height: 35px !important;
+ }
+ }
+
+ &__domain-pill {
+ display: inline-flex;
+ background: var(--color-bg-brand-softer);
+ border-radius: 4px;
+ border: 0;
+ color: var(--color-text-brand);
+ font-weight: 500;
+ font-size: 12px;
+ line-height: 16px;
+ padding: 4px 8px;
+
+ &.active {
+ color: var(--color-text-on-brand-base);
+ background: var(--color-bg-brand-base);
+ }
+
+ &__popout {
+ background: var(--color-bg-elevated);
+ backdrop-filter: $backdrop-blur-filter;
+ border: 1px solid var(--color-border-primary);
+ box-shadow: var(--dropdown-shadow);
+ max-width: 320px;
+ padding: 16px;
+ border-radius: 8px;
+ display: flex;
+ flex-direction: column;
+ gap: 24px;
+ font-size: 14px;
+ line-height: 20px;
+ color: var(--color-text-secondary);
+
+ .link-button {
+ display: inline;
+ font-size: inherit;
+ line-height: inherit;
+ }
+
+ &__header {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+
+ &__icon {
+ width: 40px;
+ height: 40px;
+ color: var(--color-text-on-brand-base);
+ background: var(--color-bg-brand-base);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: 50%;
+ flex-shrink: 0;
+ }
+
+ h3 {
+ font-size: 17px;
+ line-height: 22px;
+ color: var(--color-text-primary);
+ }
+ }
+
+ &__handle {
+ border: 2px dashed var(--color-border-on-brand-softer);
+ background: var(--color-bg-brand-softer);
+ padding: 12px 8px;
+ color: var(--color-text-brand);
+ border-radius: 4px;
+
+ &__label {
+ font-size: 11px;
+ line-height: 16px;
+ font-weight: 500;
+ }
+
+ &__handle {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ user-select: all;
+ }
+ }
+
+ &__parts {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ font-size: 12px;
+ line-height: 16px;
+
+ & > div {
+ display: flex;
+ align-items: flex-start;
+ gap: 12px;
+ }
+
+ &__icon {
+ width: 40px;
+ height: 40px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
+ color: var(--color-text-brand);
+ }
+
+ h6 {
+ font-size: 14px;
+ line-height: 20px;
+ font-weight: 500;
+ color: var(--color-text-primary);
+ }
+ }
+ }
+ }
+
+ &__note {
+ font-size: 14px;
+ font-weight: 400;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ display: -webkit-box;
+ line-clamp: 1;
+ -webkit-line-clamp: 1;
+ -webkit-box-orient: vertical;
+ margin-top: 10px;
+ color: var(--color-text-secondary);
+
+ &--missing {
+ color: var(--color-text-tertiary);
+ }
+
+ p {
+ margin-bottom: 10px;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ a {
+ color: inherit;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: none;
+ }
+ }
+ }
+}
+
+.learn-more__popout {
+ gap: 8px;
+
+ &__content {
+ display: flex;
+ flex-direction: column;
+ gap: 4px;
+ }
+
+ h6 {
+ font-size: inherit;
+ font-weight: 500;
+ line-height: inherit;
+ letter-spacing: 0.1px;
+ }
+
+ .link-button {
+ font-weight: 500;
+ }
+}
+
+.account__wrapper {
+ display: flex;
+ gap: 10px;
+ align-items: center;
+ justify-content: end;
+}
+
+.account__wrapper--with-bio {
+ align-items: start;
+}
+
+.account__info-wrapper {
+ flex: 1 1 auto;
+ min-width: 0;
+}
+
+.account__avatar {
+ display: block;
+ position: relative;
+ border-radius: var(--avatar-border-radius);
+ background: var(--color-bg-tertiary);
+ flex-shrink: 0;
+
+ img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ border-radius: var(--avatar-border-radius);
+ display: inline-block; // to not show broken images
+ }
+
+ &--loading {
+ background-color: var(--color-bg-tertiary);
+ }
+
+ &--inline {
+ display: inline-block;
+ vertical-align: middle;
+ margin-inline-end: 5px;
+ }
+
+ &-composite {
+ overflow: hidden;
+ position: relative;
+
+ & > div {
+ float: left;
+ position: relative;
+ box-sizing: border-box;
+ }
+
+ .account__avatar {
+ width: 100% !important;
+ height: 100% !important;
+ }
+
+ &__label {
+ display: block;
+ position: absolute;
+ top: 50%;
+ inset-inline-start: 50%;
+ transform: translate(-50%, -50%);
+ color: var(--color-text-primary);
+ text-shadow: 1px 1px 2px
+ rgb(from var(--color-shadow-primary) r g b / 100%);
+ font-weight: 700;
+ font-size: 15px;
+ }
+ }
+
+ &__counter {
+ $height: 16px;
+ $h-padding: 5px;
+
+ position: absolute;
+ bottom: -3px;
+ inset-inline-end: -3px;
+ padding-left: $h-padding;
+ padding-right: $h-padding;
+ height: $height;
+ border-radius: $height;
+ min-width: $height - 2 * $h-padding; // to ensure that it is never narrower than a circle
+ line-height: $height + 1px; // to visually center the numbers
+ color: var(--color-text-on-brand-base);
+ background: var(--color-bg-brand-base);
+ border-width: 1px;
+ border-style: solid;
+ border-color: var(--color-bg-primary);
+ font-size: 11px;
+ font-weight: 500;
+ text-align: center;
+ }
+}
+
+a .account__avatar {
+ cursor: pointer;
+}
+
+.avatar-group {
+ display: flex;
+
+ --avatar-height: 28px;
+
+ &:not(.avatar-group--compact) {
+ gap: 8px;
+ flex-wrap: wrap;
+ height: var(--avatar-height);
+ overflow-y: clip;
+ }
+}
+
+.avatar-group--compact {
+ & > :not(:first-child) {
+ margin-inline-start: -12px;
+ }
+
+ & > :first-child {
+ transform: rotate(-4deg);
+ }
+
+ & > :nth-child(2) {
+ transform: rotate(-2deg);
+ }
+
+ .account__avatar {
+ box-shadow: 0 0 0 2px var(--color-bg-primary);
+ }
+}
+
+.account__avatar-overlay {
+ position: relative;
+
+ &-overlay {
+ position: absolute;
+ bottom: 0;
+ inset-inline-end: 0;
+ z-index: 1;
+ }
+}
+
+.account__relationship {
+ white-space: nowrap;
+ display: flex;
+ align-items: center;
+ gap: 8px;
+}
+
+.account__relationship,
+.explore-suggestions-card {
+ .icon-button {
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+ box-sizing: content-box;
+ padding: 5px;
+
+ .icon {
+ width: 24px;
+ height: 24px;
+ }
+ }
+}
+
+.account-authorize {
+ padding: 14px 10px;
+
+ .detailed-status__display-name {
+ display: block;
+ margin-bottom: 15px;
+ overflow: hidden;
+ }
+}
+
+.account-authorize__avatar {
+ float: left;
+ margin-inline-end: 10px;
+}
+
+.status__display-name,
+.status__relative-time,
+.detailed-status__display-name,
+.detailed-status__datetime,
+.detailed-status__application,
+.detailed-status__link,
+.account__display-name {
+ text-decoration: none;
+}
+
+.status__display-name,
+.account__display-name {
+ .display-name strong {
+ color: var(--color-text-primary);
+ }
+}
+
+.muted {
+ .emojione {
+ opacity: 0.5;
+ }
+}
+
+.status__display-name,
+.detailed-status__display-name,
+a.account__display-name {
+ &:hover .display-name strong {
+ text-decoration: underline;
+ }
+}
+
+.account__display-name .display-name strong {
+ display: block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.detailed-status__application,
+.detailed-status__datetime,
+.detailed-status__link {
+ color: inherit;
+}
+
+.detailed-status__display-name {
+ color: var(--color-text-secondary);
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ font-size: 15px;
+ line-height: 22px;
+ margin-bottom: 16px;
+ overflow: hidden;
+
+ strong,
+ span {
+ display: block;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ }
+
+ strong {
+ color: var(--color-text-primary);
+ }
+}
+
+.muted {
+ .status__content,
+ .status__content p,
+ .status__content a {
+ color: var(--color-text-tertiary);
+ }
+
+ .status__display-name strong {
+ color: var(--color-text-tertiary);
+ }
+
+ .status__avatar {
+ opacity: 0.5;
+ }
+}
+
+.notification__report {
+ padding: 10px; // glitch: reduced padding
+ border-bottom: 1px solid var(--color-border-primary);
+ display: flex;
+ gap: 10px;
+
+ &__avatar {
+ flex: 0 0 auto;
+ }
+
+ &__details {
+ flex: 1 1 auto;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ color: var(--color-text-secondary);
+ gap: 10px;
+ font-size: 15px;
+ line-height: 22px;
+ white-space: nowrap;
+ overflow: hidden;
+
+ & > div {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ strong {
+ font-weight: 500;
+ }
+ }
+
+ &__actions {
+ flex: 0 0 auto;
+ }
+}
+
+.notification-group--link {
+ color: var(--color-text-primary);
+ text-decoration: none;
+
+ .notification-group__main {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 8px;
+ flex-grow: 1;
+ font-size: 15px;
+ line-height: 22px;
+
+ strong,
+ bdi {
+ font-weight: 700;
+ }
+
+ .link-button {
+ font-size: inherit;
+ line-height: inherit;
+ font-weight: inherit;
+ }
+ }
+}
+
+.notification__message {
+ padding: 8px 14px; // glitch: reduced padding
+ padding-bottom: 0;
+ cursor: default;
+ color: var(--color-text-secondary);
+ font-size: 15px;
+ line-height: 22px;
+ font-weight: 500;
+ display: flex;
+ align-items: center;
+ gap: 10px;
+
+ .icon {
+ color: var(--color-text-brand);
+ width: 18px;
+ height: 18px;
+ }
+
+ .icon-star {
+ color: var(--color-text-favourite-highlight);
+ }
+
+ > span {
+ display: inline;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+}
+
+.icon-button.star-icon.active {
+ color: var(--color-text-favourite-highlight);
+}
+
+.icon-button.bookmark-icon.active {
+ color: var(--color-text-bookmark-highlight);
+}
+
+.no-reduce-motion .icon-button.star-icon {
+ &.activate {
+ & > .icon {
+ animation: spring-rotate-in 1s linear;
+ transform-origin: 50% 52%;
+ }
+ }
+
+ &.deactivate {
+ & > .icon {
+ animation: spring-rotate-out 1s linear;
+ transform-origin: 50% 52%;
+ }
+ }
+}
+
+.notification__display-name {
+ color: inherit;
+ font-weight: 500;
+ text-decoration: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+}
+
+.display-name {
+ display: block;
+ max-width: 100%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+
+ &__account {
+ text-overflow: ellipsis;
+ overflow: hidden;
+ }
+}
+
+.display-name__html {
+ font-weight: 500;
+}
+
+.status__relative-time,
+.detailed-status__datetime,
+.detailed-status__link {
+ &:is(a):hover {
+ text-decoration: underline;
+ }
+}
+
+.zoomable-image {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ scrollbar-width: none;
+ overflow: hidden;
+ user-select: none;
+
+ img {
+ max-width: $media-modal-media-max-width;
+ max-height: $media-modal-media-max-height;
+ width: auto;
+ height: auto;
+ outline: 1px solid var(--color-border-media);
+ outline-offset: -1px;
+ border-radius: 8px;
+ touch-action: none;
+ user-select: none;
+ }
+
+ &--zoomed-in {
+ z-index: 9999;
+ cursor: grab;
+
+ img {
+ outline: none;
+ border-radius: 0;
+ }
+ }
+
+ &--dragging {
+ cursor: grabbing;
+ }
+
+ &--error img {
+ visibility: hidden;
+ }
+
+ &__preview {
+ max-width: $media-modal-media-max-width;
+ max-height: $media-modal-media-max-height;
+ position: absolute;
+ z-index: 1;
+ outline: 1px solid var(--color-border-media);
+ outline-offset: -1px;
+ border-radius: 8px;
+ overflow: hidden;
+
+ canvas {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ z-index: -1;
+ }
+ }
+
+ .loading-indicator {
+ z-index: 2;
+ mix-blend-mode: luminosity;
+ }
+}
+
+.navigation-bar {
+ display: flex;
+ align-items: center;
+ flex-shrink: 0;
+ cursor: default;
+ gap: 10px;
+
+ .column > & {
+ padding: 15px;
+ }
+
+ .account {
+ border-bottom: 0;
+ padding: 0;
+ flex: 1 1 auto;
+ min-width: 0;
+
+ &__display-name {
+ font-size: 14px;
+ line-height: 20px;
+ font-weight: 500;
+
+ .display-name__account {
+ font-size: 14px;
+ font-weight: 400;
+ }
+ }
+ }
+
+ .icon-button {
+ padding: 8px;
+ color: var(--color-text-primary);
+ }
+
+ .icon-button .icon {
+ width: 24px;
+ height: 24px;
+ }
+}
+
+.dropdown-animation {
+ animation: dropdown 250ms cubic-bezier(0.1, 0.7, 0.1, 1);
+
+ @keyframes dropdown {
+ from {
+ opacity: 0;
+ }
+
+ to {
+ opacity: 1;
+ }
+ }
+
+ .reduce-motion & {
+ animation: none;
+ }
+}
+
+.dropdown {
+ display: inline-block;
+}
+
+.dropdown__content {
+ display: none;
+ position: absolute;
+}
+
+.dropdown-menu__separator {
+ border-bottom: 1px solid var(--color-border-primary);
+ margin: 2px 0; // glitch: reduced margins
+ height: 0;
+}
+
+.dropdown-menu {
+ background: var(--color-bg-elevated);
+ backdrop-filter: $backdrop-blur-filter;
+ border: 1px solid var(--color-border-primary);
+ padding: 2px; // glitch: reduced padding
+ border-radius: 4px;
+ box-shadow: var(--dropdown-shadow);
+ z-index: 9999;
+
+ &__text-button {
+ display: inline-flex;
+ align-items: center;
+ color: inherit;
+ background: transparent;
+ border: 0;
+ margin: 0;
+ padding: 0;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+
+ &:focus-visible {
+ outline: 1px dotted;
+ }
+
+ &:hover {
+ text-decoration: underline;
+ }
+
+ .icon {
+ width: 15px;
+ height: 15px;
+ }
+ }
+
+ &__container {
+ &__header {
+ border-bottom: 1px solid var(--color-border-primary);
+ padding: 6px 14px; // glitch: reduced padding
+ padding-bottom: 12px; // glitch: reduced padding
+ margin-bottom: 4px;
+ font-size: 13px;
+ line-height: 18px;
+ color: var(--color-text-secondary);
+ }
+
+ &__list {
+ list-style: none;
+
+ &--scrollable {
+ max-height: 300px;
+ overflow-y: scroll;
+ }
+ }
+
+ &--loading {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 30px 45px;
+ }
+ }
+
+ &.left {
+ transform-origin: 100% 50%;
+ }
+
+ &.top {
+ transform-origin: 50% 100%;
+ }
+
+ &.bottom {
+ transform-origin: 50% 0;
+ }
+
+ &.right {
+ transform-origin: 0 50%;
+ }
+}
+
+.dropdown-menu__item {
+ font-size: 13px;
+ line-height: 18px;
+ font-weight: 500;
+ display: block;
+
+ &--dangerous {
+ color: var(--color-text-error);
+ }
+
+ &--highlighted {
+ color: var(--color-text-brand);
+ }
+
+ &-content {
+ display: flex;
+ flex-direction: column;
+ }
+
+ &-subtitle {
+ font-weight: 400;
+ }
+
+ a,
+ button {
+ font: inherit;
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ white-space: inherit;
+ width: 100%;
+ padding: 6px 14px; // glitch: reduced padding
+ border: 0;
+ margin: 0;
+ background: transparent;
+ box-sizing: border-box;
+ text-decoration: none;
+ color: inherit;
+ text-align: inherit;
+ border-radius: 4px;
+
+ &:focus,
+ &:hover,
+ &:active {
+ &:not(:disabled, [aria-disabled='true']) {
+ background: var(--color-bg-secondary);
+ outline: 0;
+ }
+ }
+ }
+
+ button:disabled,
+ button[aria-disabled='true'] {
+ color: var(--color-text-disabled);
+ cursor: default;
+
+ &:focus {
+ color: rgb(from var(--color-text-disabled) r g b / 70%);
+ background: var(--color-bg-disabled);
+ outline: 0;
+ }
+ }
+}
+
+.reblog-menu-item {
+ max-width: 360px;
+}
+
+.inline-account {
+ display: inline-flex;
+ align-items: center;
+ vertical-align: top;
+
+ .account__avatar {
+ margin-inline-end: 5px;
+ border-radius: 50%;
+ }
+
+ strong {
+ font-weight: 600;
+ }
+}
+
+.columns-area {
+ display: flex;
+ flex: 1 1 auto;
+ flex-direction: row;
+ justify-content: flex-start;
+ position: relative;
+
+ .layout-multiple-columns & {
+ overflow-x: auto;
+
+ &.unscrollable {
+ overflow-x: hidden;
+ }
+ }
+
+ &__panels {
+ box-sizing: border-box;
+ display: flex;
+ justify-content: center;
+ gap: 16px;
+ width: 100%;
+ height: 100%;
+ min-height: 100vh;
+ min-height: 100dvh;
+ padding-inline: 10px;
+ padding-bottom: env(safe-area-inset-bottom);
+
+ &__pane {
+ height: 100%;
+ overflow: hidden;
+ display: flex;
+ justify-content: flex-end;
+ min-width: 285px;
+
+ &--start {
+ justify-content: flex-start;
+ }
+
+ &__inner {
+ position: fixed;
+ width: 285px;
+ height: 100%;
+ }
+ }
+
+ &__main {
+ --column-header-height: 62px;
+
+ box-sizing: border-box;
+ width: 100%;
+ flex: 0 1 auto;
+ display: flex;
+ flex-direction: column;
+ contain: inline-size layout paint style;
+ container: column / inline-size;
+ color: var(--color-text-primary);
+ background-color: var(--color-bg-primary);
+
+ @media screen and (min-width: $no-gap-breakpoint) {
+ max-width: 600px;
+ }
+ }
+ }
+}
+
+.ui__navigation-bar {
+ position: fixed;
+ bottom: 0;
+ z-index: 3;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ width: 100%;
+ gap: 8px;
+ padding-bottom: env(safe-area-inset-bottom);
+ background: var(--color-bg-primary);
+ backdrop-filter: $backdrop-blur-filter;
+ border-top: 1px solid var(--color-border-primary);
+ box-sizing: border-box;
+
+ .layout-multiple-columns & {
+ display: none;
+ }
+
+ &__items {
+ display: grid;
+ grid-auto-columns: minmax(0, 1fr);
+ grid-auto-flow: column;
+ padding: 0 16px;
+
+ &.active {
+ flex: 1;
+ padding: 0;
+ }
+ }
+
+ &__sign-up {
+ display: flex;
+ align-items: center;
+ gap: 4px;
+ padding-inline-start: 16px;
+ }
+
+ &__item {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ background: transparent;
+ border: none;
+ gap: 8px;
+ font-size: 12px;
+ font-weight: 500;
+ line-height: 16px;
+ padding-top: 11px;
+ padding-bottom: 15px;
+ border-top: 4px solid transparent;
+ text-decoration: none;
+ color: inherit;
+
+ &.active {
+ color: var(--color-text-brand);
+ }
+
+ &:focus {
+ outline: 0;
+ }
+
+ &:focus-visible {
+ border-top-color: var(--color-text-brand);
+ border-radius: 0;
+ }
+ }
+}
+
+.tabs-bar__wrapper {
+ background: var(--color-bg-primary);
+ backdrop-filter: $backdrop-blur-filter;
+ position: sticky;
+ top: 0;
+ z-index: 2;
+ border-top: 0;
+
+ @media screen and (min-width: $no-gap-breakpoint) {
+ border-top: 10px solid var(--color-bg-ambient);
+ }
+}
+
+.react-swipeable-view-container {
+ &,
+ .columns-area,
+ .drawer,
+ .column {
+ height: 100%;
+ }
+}
+
+.react-swipeable-view-container > * {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100%;
+}
+
+.column {
+ width: 350px;
+ position: relative;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+
+ > .scrollable {
+ border: 1px solid var(--color-border-primary);
+ border-top: 0;
+ border-radius: 0 0 4px 4px;
+
+ &.about,
+ &.privacy-policy {
+ border-top: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ border-top: 0;
+ border-bottom: 0;
+ }
+ }
+ }
+}
+
+.column__alert {
+ --alert-height: 54px;
+
+ position: sticky;
+ bottom: 0;
+ z-index: 10;
+ box-sizing: border-box;
+ display: grid;
+ grid-template-rows: minmax(var(--alert-height), max-content);
+ align-items: end;
+ width: 100%;
+ max-width: 360px;
+ padding: 1rem;
+ margin: auto auto 0;
+ overflow: clip;
+ pointer-events: none;
+
+ @media (max-width: #{$mobile-menu-breakpoint - 1}) {
+ // Compensate for mobile menubar
+ bottom: var(--mobile-bottom-nav-height);
+ }
+
+ & > * {
+ // Make all nested alerts occupy the same space
+ // rather than stack
+ grid-area: 1 / 1;
+ pointer-events: initial;
+ }
+}
+
+.ui {
+ --mobile-bottom-nav-height: 55px;
+ --last-content-item-border-width: 2px;
+
+ flex: 0 0 auto;
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ height: 100%;
+
+ @media (max-width: #{$mobile-menu-breakpoint - 1}) {
+ padding-bottom: calc(
+ var(--mobile-bottom-nav-height) - var(--last-content-item-border-width)
+ );
+ }
+}
+
+.drawer {
+ width: 300px;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ overflow-y: hidden;
+}
+
+.drawer__tab {
+ display: flex;
+ flex: 1 1 auto;
+ padding: 13px 3px 11px;
+ color: var(--color-text-secondary);
+ text-decoration: none;
+ text-align: center;
+ font-size: 16px;
+ align-items: center;
+ justify-content: center;
+}
+
+.column,
+.drawer {
+ flex: 1 1 100%;
+}
+
+@media screen and (width > $mobile-breakpoint) {
+ .columns-area {
+ padding: 0;
+ }
+
+ .column,
+ .drawer {
+ flex: 0 0 auto;
+ padding: 10px;
+ padding-inline-start: 5px;
+ padding-inline-end: 5px;
+
+ &:first-child {
+ padding-inline-start: 10px;
+ }
+
+ &:last-child {
+ padding-inline-end: 10px;
+ }
+ }
+
+ .columns-area > div {
+ .column,
+ .drawer {
+ padding-inline-start: 5px;
+ padding-inline-end: 5px;
+ }
+ }
+}
+
+.columns-area--mobile {
+ flex-direction: column;
+ width: 100%;
+ height: 100%;
+ margin: 0 auto;
+
+ .column,
+ .drawer {
+ width: 100%;
+ height: 100%;
+ padding: 0;
+ }
+
+ .account-card {
+ margin-bottom: 0;
+ }
+
+ .filter-form {
+ display: flex;
+ flex-wrap: wrap;
+ }
+
+ .autosuggest-textarea__textarea {
+ font-size: 16px;
+ }
+
+ .search__input {
+ line-height: 18px;
+ font-size: 16px;
+ padding-block: 15px;
+ padding-inline-end: 30px;
+ }
+
+ .scrollable {
+ overflow: visible;
+
+ @supports (display: grid) {
+ contain: content;
+ }
+ }
+
+ @media screen and (min-width: $no-gap-breakpoint) {
+ padding: 10px 0;
+ padding-top: 0;
+ }
+}
+
+@media screen and (min-width: $no-gap-breakpoint) {
+ .react-swipeable-view-container .columns-area--mobile {
+ height: calc(100% - 10px) !important;
+ }
+
+ .getting-started__wrapper {
+ margin-bottom: 10px;
+ }
+
+ .search-page .search {
+ display: none;
+ }
+
+ .navigation-panel__legal,
+ .navigation-panel__compose-button,
+ .navigation-panel .navigation-bar {
+ display: none !important;
+ }
+}
+
+@media screen and (max-width: ($no-gap-breakpoint - 1px)) {
+ $sidebar-width: 285px;
+
+ .columns-area__panels__main {
+ width: calc(100% - $sidebar-width);
+ }
+
+ .columns-area__panels {
+ min-height: 100vh;
+ min-height: 100dvh;
+ gap: 0;
+ padding-inline: 0;
+ }
+
+ .columns-area__panels__pane--navigational {
+ min-width: $sidebar-width;
+
+ .columns-area__panels__pane__inner {
+ width: $sidebar-width;
+ }
+
+ .navigation-panel {
+ margin: 0;
+ border-inline-start: 1px solid var(--color-border-primary);
+ height: 100dvh;
+ }
+
+ .navigation-panel__banner,
+ .navigation-panel__logo,
+ .getting-started__trends {
+ display: none;
+ }
+ }
+
+ .layout-single-column {
+ .column > .scrollable,
+ .tabs-bar__wrapper .column-header,
+ .tabs-bar__wrapper .column-back-button,
+ .explore__search-header,
+ .column-search-header {
+ border-left: 0;
+ border-right: 0;
+ }
+
+ .column-header,
+ .column-back-button,
+ .scrollable,
+ .error-column {
+ border-radius: 0 !important;
+ }
+
+ .column-header,
+ .column-back-button {
+ border-top: 0;
+ }
+ }
+}
+
+@media screen and (width <= 759px) {
+ .columns-area__panels__main {
+ width: 100%;
+ }
+
+ .columns-area__panels__pane--navigational {
+ position: fixed;
+ inset-inline-end: 0;
+ width: 100%;
+ height: 100%;
+ pointer-events: none;
+ }
+
+ .columns-area__panels__pane--navigational .columns-area__panels__pane__inner {
+ pointer-events: auto;
+ background: var(--color-bg-primary);
+ position: fixed;
+ width: 284px + 70px;
+ inset-inline-end: -70px;
+ touch-action: pan-y;
+
+ .navigation-panel {
+ width: 284px;
+ overflow-y: auto;
+ scrollbar-width: thin;
+
+ &__menu {
+ flex-shrink: 0;
+ min-height: none;
+ overflow: hidden;
+ padding-bottom: calc(65px + env(safe-area-inset-bottom));
+ }
+
+ &__logo {
+ display: none;
+ }
+ }
+ }
+}
+
+.columns-area__panels__pane--navigational {
+ transition: background 500ms;
+}
+
+.columns-area__panels__pane--overlay {
+ pointer-events: auto;
+ background: rgb(from var(--color-bg-overlay) r g b / 50%);
+ z-index: 3;
+
+ .columns-area__panels__pane__inner {
+ box-shadow: var(--dropdown-shadow);
+ }
+}
+
+@media screen and (width >= 760px) {
+ .ui__navigation-bar {
+ display: none;
+ }
+}
+
+.explore-suggestions-card {
+ padding: 12px 16px;
+ gap: 8px;
+ display: flex;
+ flex-direction: column;
+ border-bottom: 1px solid var(--color-border-primary);
+
+ &:last-child {
+ border-bottom: 0;
+ }
+
+ &__source {
+ font-size: 13px;
+ line-height: 16px;
+ color: var(--color-text-tertiary);
+
+ @container (width >= 400px) {
+ padding-inline-start: 60px;
+ }
+ }
+
+ &__body {
+ display: flex;
+ gap: 12px;
+ align-items: center;
+ justify-content: end;
+ }
+
+ &__avatar {
+ flex-shrink: 0;
+
+ @container (width < 360px) {
+ width: 35px !important;
+ height: 35px !important;
+ }
+ }
+
+ &__link {
+ flex: 1 1 auto;
+ display: flex;
+ gap: 12px;
+ align-items: center;
+ text-decoration: none;
+ min-width: 0;
+
+ &:hover,
+ &:focus-visible {
+ .display-name__html {
+ text-decoration: underline;
+ }
+ }
+
+ .display-name {
+ font-size: 15px;
+ line-height: 20px;
+ color: var(--color-text-primary);
+
+ strong {
+ font-weight: 700;
+ }
+
+ &__account {
+ color: var(--color-text-secondary);
+ display: block;
+ }
+ }
+ }
+
+ &__actions {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ justify-content: end;
+
+ .button {
+ min-width: 80px;
+ }
+ }
+
+ &__dismiss-button {
+ @container (width < 400px) {
+ display: none;
+ }
+ }
+}
+
+@media screen and (max-width: ($no-gap-breakpoint - 1px)) {
+ .columns-area__panels__pane--compositional {
+ display: none;
+ }
+}
+
+.icon-with-badge {
+ display: inline-flex;
+ position: relative;
+
+ &__badge {
+ position: absolute;
+ inset-inline-start: 9px;
+ top: -13px;
+ color: var(--color-text-on-brand-base);
+ background: var(--color-bg-brand-base);
+ border: 2px solid var(--color-bg-primary);
+ padding: 1px 6px;
+ border-radius: 6px;
+ font-size: 10px;
+ font-weight: 500;
+ line-height: 14px;
+ }
+
+ &__issue-badge {
+ position: absolute;
+ inset-inline-start: 11px;
+ bottom: 1px;
+ display: block;
+ background: var(--color-text-error);
+ border-radius: 50%;
+ width: 0.625rem;
+ height: 0.625rem;
+ }
+}
+
+.column-link--transparent .icon-with-badge__badge {
+ border-color: var(--color-bg-primary);
+}
+
+.column-title {
+ text-align: center;
+ padding-bottom: 32px;
+
+ h3 {
+ font-size: 24px;
+ line-height: 1.5;
+ font-weight: 700;
+ margin-bottom: 10px;
+ }
+
+ p {
+ font-size: 16px;
+ line-height: 24px;
+ font-weight: 400;
+ color: var(--color-text-secondary);
+ }
+
+ @media screen and (width >= 600px) {
+ padding: 40px;
+ }
+}
+
+.copy-paste-text {
+ background: var(--color-bg-secondary);
+ border-radius: 8px;
+ border: 1px solid var(--color-border-primary);
+ padding: 16px;
+ color: var(--color-text-primary);
+ font-size: 15px;
+ line-height: 22px;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-end;
+ transition: border-color 300ms linear;
+ margin-bottom: 30px;
+
+ &:focus,
+ &.focused {
+ transition: none;
+ outline: 0;
+ border-color: var(--color-text-brand);
+ }
+
+ &.copied {
+ border-color: var(--color-text-success);
+ transition: none;
+ }
+
+ textarea {
+ width: 100%;
+ height: auto;
+ background: transparent;
+ color: inherit;
+ font: inherit;
+ border: 0;
+ padding: 0;
+ margin-bottom: 30px;
+ resize: none;
+
+ &:focus {
+ outline: 0;
+ }
+ }
+}
+
+.onboarding__profile {
+ position: relative;
+ margin-bottom: 40px + 20px;
+ margin-top: -20px;
+
+ .app-form__avatar-input {
+ border: 2px solid var(--color-bg-primary);
+ position: absolute;
+ inset-inline-start: -2px;
+ bottom: -40px;
+ z-index: 2;
+ }
+
+ .app-form__header-input {
+ margin: 0 -20px;
+ border-radius: 0;
+
+ img {
+ border-radius: 0;
+ }
+ }
+}
+
+.compose-panel {
+ width: 285px;
+ margin-top: 10px;
+ display: flex;
+ flex-direction: column;
+ height: calc(100% - 10px);
+ overflow-y: auto;
+ scrollbar-width: thin;
+
+ .compose-form {
+ flex: 1 1 auto;
+ }
+}
+
+.navigation-panel {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ height: calc(100% - 20px);
+ overflow: hidden;
+ display: flex;
+ flex-direction: column;
+
+ &__menu {
+ flex: 1 1 auto;
+ min-height: 0;
+ overflow-y: auto;
+ scrollbar-width: thin;
+ }
+
+ &__list-panel {
+ &__header {
+ display: flex;
+ align-items: center;
+ padding-inline-end: 4px;
+
+ &__sep {
+ width: 0;
+ height: 24px;
+ border-left: 1px solid var(--color-border-primary);
+ }
+
+ .column-link {
+ flex: 1 1 auto;
+ }
+
+ .icon-button {
+ padding: 8px;
+ }
+ }
+
+ &__items {
+ padding-inline-start: 24px + 8px;
+
+ .icon {
+ display: none;
+ }
+ }
+ }
+
+ &__compose-button {
+ display: flex;
+ justify-content: flex-start;
+ padding-top: 8px;
+ padding-bottom: 8px;
+ padding-inline-start: 12px - 7px;
+ padding-inline-end: 12px;
+ gap: 8px;
+ margin: 12px;
+ border-radius: 6px;
+ font-size: 16px;
+ font-weight: 600;
+ line-height: 18px;
+
+ .icon {
+ width: 24px;
+ height: 24px;
+ }
+ }
+
+ .navigation-bar {
+ padding: 16px;
+ }
+
+ .search {
+ margin: 16px;
+ margin-bottom: 12px;
+ }
+
+ .logo {
+ height: 30px;
+ width: auto;
+ }
+
+ &__logo {
+ margin-bottom: 12px;
+ }
+
+ .getting-started__trends h4 {
+ padding: 10px 12px;
+ padding-inline-start: 16px;
+ }
+
+ .getting-started__trends .trends__item {
+ padding: 10px 12px;
+ padding-inline-start: 16px;
+ }
+
+ @media screen and (height <= 930px) {
+ &__portal .trends__item:nth-child(n + 5) {
+ display: none;
+ }
+ }
+
+ @media screen and (height <= (930px - 56px)) {
+ &__portal .trends__item:nth-child(n + 4) {
+ display: none;
+ }
+ }
+
+ @media screen and (height <= (930px - 56px * 2)) {
+ &__portal .trends__item:nth-child(n + 3) {
+ display: none;
+ }
+ }
+
+ @media screen and (height <= (930px - 56px * 3)) {
+ &__portal {
+ display: none;
+ }
+ }
+}
+
+.navigation-panel,
+.compose-panel {
+ hr {
+ flex: 0 0 auto;
+ border: 0;
+ background: transparent;
+ border-top: 1px solid var(--color-border-primary);
+ margin: 10px 0;
+ }
+
+ .flex-spacer {
+ background: transparent;
+ }
+}
+
+.drawer__pager {
+ box-sizing: border-box;
+ padding: 0;
+ flex-grow: 1;
+ position: relative;
+ overflow: hidden;
+ display: flex;
+ border-radius: 4px;
+ border: 1px solid var(--color-border-primary);
+}
+
+.drawer__inner {
+ position: absolute;
+ top: 0;
+ inset-inline-start: 0;
+ background: var(--color-bg-primary);
+ box-sizing: border-box;
+ padding: 0;
+ display: flex;
+ flex-direction: column;
+ overflow: hidden;
+ overflow-y: auto;
+ width: 100%;
+ height: 100%;
+ z-index: 0;
+}
+
+.drawer__inner__mastodon {
+ position: relative;
+ background: var(--color-bg-primary);
+ flex: 1;
+ min-height: 47px;
+ display: none;
+ contain: content;
+
+ > img {
+ display: block;
+ object-fit: contain;
+ object-position: bottom left;
+ width: 85%;
+ height: 100%;
+ pointer-events: none;
+ user-select: none;
+ }
+
+ @media screen and (height >= 640px) {
+ display: block;
+ }
+}
+
+.drawer__header {
+ flex: 0 0 auto;
+ font-size: 16px;
+ border: 1px solid var(--color-border-primary);
+ margin-bottom: 10px;
+ display: flex;
+ flex-direction: row;
+ border-radius: 4px;
+ overflow: hidden;
+
+ a:hover,
+ a:focus,
+ a:active {
+ color: var(--color-text-primary);
+ }
+}
+
+.scrollable {
+ overflow-y: scroll;
+ overflow-x: hidden;
+ flex: 1 1 auto;
+ -webkit-overflow-scrolling: touch;
+ scrollbar-width: thin;
+
+ &.optionally-scrollable {
+ overflow-y: auto;
+ }
+
+ @supports (display: grid) {
+ // hack to fix Chrome <57
+ contain: strict;
+ }
+
+ &--flex {
+ display: flex;
+ flex-direction: column;
+ }
+
+ &__append {
+ flex: 1 1 auto;
+ position: relative;
+ min-height: 120px;
+ }
+
+ .scrollable {
+ flex: 1 1 auto;
+ }
+}
+
+.scrollable.fullscreen {
+ @supports (display: grid) {
+ // hack to fix Chrome <57
+ contain: none;
+ }
+}
+
+.column-back-button {
+ box-sizing: border-box;
+ width: 100%;
+ background: transparent;
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px 4px 0 0;
+ color: var(--color-text-brand);
+ cursor: pointer;
+ flex: 0 0 auto;
+ font-size: 16px;
+ line-height: inherit;
+ text-align: unset;
+ padding: 13px;
+ margin: 0;
+ z-index: 3;
+ outline: 0;
+ display: flex;
+ align-items: center;
+ gap: 5px;
+
+ &:hover {
+ text-decoration: underline;
+ }
+}
+
+.column-header__back-button {
+ display: flex;
+ align-items: center;
+ gap: 5px;
+ background: transparent;
+ border: 0;
+ font-family: inherit;
+ color: var(--color-text-brand);
+ cursor: pointer;
+ white-space: nowrap;
+ font-size: 16px;
+ padding: 13px;
+ z-index: 3;
+
+ &:hover {
+ text-decoration: underline;
+ }
+
+ &.compact {
+ padding-inline-end: 5px;
+ flex: 0 0 auto;
+ }
+}
+
+.react-toggle {
+ display: inline-block;
+ position: relative;
+ cursor: pointer;
+ background-color: transparent;
+ border: 0;
+ border-radius: 10px;
+ padding: 0;
+ user-select: none;
+ -webkit-tap-highlight-color: transparent;
+}
+
+.react-toggle--focus,
+.react-toggle:focus-within {
+ outline: var(--outline-focus-default);
+ outline-offset: 2px;
+
+ .react-toggle-track {
+ border-color: transparent;
+ }
+}
+
+.react-toggle-screenreader-only,
+.sr-only {
+ border: 0;
+ clip-path: inset(50%);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+}
+
+.react-toggle--disabled {
+ cursor: not-allowed;
+ opacity: 0.5;
+ transition: opacity 0.25s;
+}
+
+.react-toggle-track {
+ width: 32px;
+ height: 20px;
+ padding: 0;
+ border-radius: 10px;
+ background-color: rgb(from var(--color-bg-brand-softer) r g b / 50%);
+ border: 1px solid rgb(from var(--color-text-brand) r g b / 50%);
+ box-sizing: border-box;
+
+ .react-toggle:hover:not(.react-toggle--disabled) & {
+ background-color: rgb(
+ from var(--color-bg-brand-softer) r g b /
+ calc(50% + var(--overlay-strength-brand))
+ );
+ }
+
+ .react-toggle--checked & {
+ background-color: var(--color-bg-brand-base);
+ border-color: var(--color-bg-brand-base);
+ }
+
+ .react-toggle--checked:not(.react-toggle--disabled):hover & {
+ background-color: var(--color-bg-brand-base-hover);
+ }
+}
+
+.react-toggle-track-check,
+.react-toggle-track-x {
+ display: none;
+}
+
+.react-toggle-thumb {
+ position: absolute;
+ top: 2px;
+ inset-inline-start: 2px;
+ width: 16px;
+ height: 16px;
+ border-radius: 50%;
+ background-color: var(--color-text-on-brand-base);
+ box-sizing: border-box;
+ transition: all 0.25s ease;
+ transition-property: border-color, left;
+
+ .react-toggle--checked & {
+ inset-inline-start: 32px - 16px - 2px;
+ border-color: var(--color-bg-brand-base);
+ }
+}
+
+.follow_requests-unlocked_explanation,
+.switch-to-advanced {
+ color: var(--color-text-secondary);
+ background-color: var(--color-bg-secondary);
+ padding: 15px;
+ border-radius: 4px;
+ margin-top: 4px;
+ margin-bottom: 12px;
+ font-size: 13px;
+ line-height: 18px;
+
+ a {
+ color: var(--color-text-brand);
+ font-weight: bold;
+ }
+}
+
+.column-link {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ width: 100%;
+ padding: 12px;
+ font-size: 16px;
+ font-weight: 400;
+ text-decoration: none;
+ overflow: hidden;
+ white-space: nowrap;
+ color: color-mix(
+ in oklab,
+ var(--color-text-primary),
+ var(--color-text-secondary)
+ );
+ background: transparent;
+ border: 0;
+ border-left: 4px solid transparent;
+ box-sizing: border-box;
+
+ &:hover,
+ &:focus,
+ &:active {
+ color: var(--color-text-primary);
+ }
+
+ &.active {
+ color: var(--color-text-brand);
+ }
+
+ &:focus {
+ outline: 0;
+ }
+
+ &:focus-visible {
+ border-color: var(--color-text-brand);
+ border-radius: 0;
+ }
+
+ &--logo {
+ background: transparent;
+ padding: 10px;
+
+ &:hover,
+ &:focus,
+ &:active {
+ background: transparent;
+ }
+ }
+}
+
+.column-link__badge {
+ display: inline-block;
+ border-radius: 4px;
+ font-size: 12px;
+ line-height: 19px;
+ font-weight: 500;
+ background: var(--color-bg-primary);
+ padding: 4px 8px;
+ margin: -6px 10px;
+}
+
+.column-subheading {
+ background: var(--color-bg-secondary);
+ color: var(--color-text-secondary);
+ padding: 8px 20px;
+ font-size: 12px;
+ font-weight: 500;
+ text-transform: uppercase;
+ cursor: default;
+}
+
+.getting-started__wrapper {
+ flex: 0 0 auto;
+}
+
+.flex-spacer {
+ flex: 1 1 auto;
+}
+
+.getting-started {
+ color: var(--color-text-tertiary);
+ overflow: auto;
+ border: 1px solid var(--color-border-primary);
+ border-top: 0;
+
+ &__trends {
+ flex: 0 1 auto;
+ opacity: 1;
+ animation: fade 150ms linear;
+ margin-top: 10px;
+
+ h4 {
+ border-bottom: 1px solid var(--color-border-primary);
+ padding: 10px;
+ font-size: 12px;
+ text-transform: uppercase;
+ font-weight: 500;
+
+ a {
+ color: var(--color-text-secondary);
+ text-decoration: none;
+ }
+ }
+
+ .trends__item {
+ border-bottom: 0;
+ padding: 10px;
+
+ &__current {
+ color: var(--color-text-secondary);
+ }
+ }
+ }
+}
+
+.keyboard-shortcuts {
+ padding: 8px 0 0;
+ overflow: hidden;
+
+ thead {
+ position: absolute;
+ inset-inline-start: -9999px;
+ }
+
+ td {
+ padding: 0 10px 8px;
+ }
+
+ kbd {
+ display: inline-block;
+ }
+}
+
+input.glitch-setting-text {
+ box-sizing: border-box;
+ color: var(--color-text-secondary);
+ background: transparent;
+ border: 0;
+ border-bottom: 2px solid var(--color-text-secondary);
+ outline: 0;
+ font-family: inherit;
+ margin-bottom: 10px;
+ padding: 7px 0;
+ width: 100%;
+
+ &:focus,
+ &:active {
+ color: var(--color-text-on-brand-base);
+ border-bottom-color: var(--color-bg-brand-base);
+ }
+
+ @media screen and (width <= 600px) {
+ font-size: 16px;
+ }
+}
+
+.status-card {
+ display: flex;
+ align-items: center;
+ position: relative;
+ font-size: 14px;
+ color: var(--color-text-secondary);
+ margin-top: 14px;
+ text-decoration: none;
+ overflow: hidden;
+ border: 1px solid var(--color-border-primary);
+ border-radius: 8px;
+ contain: inline-size layout paint style;
+
+ &.bottomless {
+ border-radius: 8px 8px 0 0;
+ }
+
+ &__actions {
+ bottom: 0;
+ inset-inline-start: 0;
+ position: absolute;
+ inset-inline-end: 0;
+ top: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ cursor: pointer;
+
+ & > div {
+ background: rgb(from var(--color-shadow-primary) r g b / 60%);
+ border-radius: 8px;
+ padding: 12px 9px;
+ backdrop-filter: $backdrop-blur-filter;
+ flex: 0 0 auto;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ }
+
+ button,
+ a {
+ display: inline;
+ color: var(--color-text-primary);
+ background: transparent;
+ border: 0;
+ padding: 0 8px;
+ text-decoration: none;
+ font-size: 18px;
+ line-height: 18px;
+
+ &:hover,
+ &:active,
+ &:focus {
+ color: var(--color-text-primary);
+ }
+ }
+
+ a {
+ font-size: 19px;
+ position: relative;
+ bottom: -1px;
+ }
+ }
+}
+
+a.status-card {
+ cursor: pointer;
+
+ &:hover,
+ &:focus,
+ &:active {
+ .status-card__title,
+ .status-card__host,
+ .status-card__author,
+ .status-card__description {
+ color: var(--color-text-brand);
+ }
+ }
+}
+
+.status-card a {
+ color: inherit;
+ text-decoration: none;
+
+ &:hover,
+ &:focus,
+ &:active {
+ .status-card__title,
+ .status-card__host,
+ .status-card__author,
+ .status-card__description {
+ color: var(--color-text-brand);
+ }
+ }
+}
+
+.status-card-photo {
+ cursor: zoom-in;
+ display: block;
+ text-decoration: none;
+ width: 100%;
+ height: auto;
+ margin: 0;
+}
+
+.status-card-video {
+ // Firefox has a bug where frameborder=0 iframes add some extra blank space
+ // see https://bugzilla.mozilla.org/show_bug.cgi?id=155174
+ overflow: hidden;
+
+ iframe {
+ width: 100%;
+ height: 100%;
+ }
+}
+
+.status-card__title {
+ display: block;
+ font-weight: 700;
+ font-size: 19px;
+ line-height: 24px;
+ color: var(--color-text-primary);
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+
+.status-card.expanded .status-card__title {
+ white-space: normal;
+ display: -webkit-box;
+ line-clamp: 2;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+}
+
+.status-card__content {
+ flex: 1 1 auto;
+ overflow: hidden;
+ padding: 8px 10px; // glitch: reduced padding
+ box-sizing: border-box;
+ max-width: 100%;
+}
+
+.status-card__host {
+ display: block;
+ font-size: 14px;
+ margin-bottom: 8px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.status-card__author {
+ display: block;
+ margin-top: 8px;
+ font-size: 14px;
+ color: var(--color-text-primary);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+
+ strong {
+ font-weight: 500;
+ }
+}
+
+.status-card__description {
+ display: block;
+ margin-top: 8px;
+ font-size: 14px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.status-card__image {
+ flex: 0 0 auto;
+ width: 96px; // glitch: intentional change to better use space
+ aspect-ratio: 1;
+ background: var(--color-bg-secondary);
+ position: relative;
+
+ & > .icon {
+ width: 18px;
+ height: 18px;
+ position: absolute;
+ transform-origin: 50% 50%;
+ top: 50%;
+ inset-inline-start: 50%;
+ transform: translate(-50%, -50%);
+ }
+}
+
+.status-card__image-image {
+ display: block;
+ margin: 0;
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ background-size: cover;
+ background-position: center center;
+}
+
+.status-card__image-preview {
+ display: block;
+ margin: 0;
+ width: 100%;
+ height: 100%;
+ object-fit: fill;
+ position: absolute;
+ top: 0;
+ inset-inline-start: 0;
+ z-index: 0;
+ background: var(--color-bg-primary);
+
+ &--hidden {
+ display: none;
+ }
+}
+
+.status-card.expanded {
+ flex-direction: column;
+ align-items: flex-start;
+}
+
+.status-card.expanded .status-card__image {
+ width: 100%;
+ aspect-ratio: auto;
+}
+
+.status-card__image,
+.status-card__image-image,
+.status-card__image-preview {
+ border-start-start-radius: 8px;
+ border-start-end-radius: 0;
+ border-end-end-radius: 0;
+ border-end-start-radius: 8px;
+}
+
+.status-card.expanded .status-card__image,
+.status-card.expanded .status-card__image-image,
+.status-card.expanded .status-card__image-preview {
+ border-start-end-radius: 8px;
+ border-end-end-radius: 0;
+ border-end-start-radius: 0;
+}
+
+.status-card.bottomless .status-card__image,
+.status-card.bottomless .status-card__image-image,
+.status-card.bottomless .status-card__image-preview {
+ border-end-end-radius: 0;
+ border-end-start-radius: 0;
+}
+
+.status-card.expanded > a {
+ width: 100%;
+}
+
+.load-more {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: var(--color-text-primary);
+ background-color: transparent;
+ border: 0;
+ font-size: inherit;
+ line-height: inherit;
+ width: 100%;
+ padding: 15px;
+ box-sizing: border-box;
+ text-decoration: none;
+
+ &--large {
+ padding-block: 32px;
+ }
+
+ &:is(button) {
+ &:hover {
+ background: var(--color-bg-secondary);
+ }
+
+ &:focus-visible {
+ outline: 2px solid var(--color-text-brand);
+ outline-offset: -2px;
+ }
+ }
+
+ .icon {
+ width: 22px;
+ height: 22px;
+ }
+}
+
+.load-gap {
+ border-bottom: 1px solid var(--color-border-primary);
+}
+
+.timeline-hint {
+ text-align: center;
+ color: var(--color-text-secondary);
+ padding: 16px;
+ box-sizing: border-box;
+ width: 100%;
+ font-size: 14px;
+ line-height: 21px;
+
+ strong {
+ font-weight: 500;
+ }
+
+ a {
+ color: var(--color-text-brand);
+ text-decoration: none;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: underline;
+ color: var(--color-text-brand-soft);
+ }
+ }
+
+ &--with-descendants {
+ border-top: 1px solid var(--color-border-primary);
+ }
+}
+
+.regeneration-indicator {
+ color: var(--color-text-secondary);
+ border: 1px solid var(--color-border-primary);
+ border-top: 0;
+ cursor: default;
+ display: flex;
+ flex: 1 1 auto;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ padding: 20px;
+
+ &__figure {
+ display: block;
+ width: 100%;
+ height: auto;
+ max-width: 350px;
+ margin-top: -50px;
+ }
+
+ &__label {
+ text-align: center;
+ font-size: 16px;
+
+ strong {
+ font-weight: 500;
+ display: block;
+ margin-bottom: 10px;
+ color: var(--color-text-secondary);
+ }
+
+ span {
+ font-size: 15px;
+ }
+ }
+}
+
+.column-header__wrapper {
+ position: relative;
+ flex: 0 0 auto;
+ z-index: 1;
+
+ &.active {
+ box-shadow: 0 1px 0 var(--color-bg-brand-softer);
+
+ &::before {
+ display: block;
+ content: '';
+ position: absolute;
+ bottom: -13px;
+ inset-inline-start: 0;
+ inset-inline-end: 0;
+ margin: 0 auto;
+ width: 60%;
+ pointer-events: none;
+ height: 28px;
+ z-index: 1;
+ background: radial-gradient(
+ ellipse,
+ rgb(from var(--color-bg-brand-softer-base) r g b / 23%) 0%,
+ transparent 60%
+ );
+ }
+ }
+
+ .announcements {
+ z-index: 1;
+ position: relative;
+ }
+}
+
+.column-header__select-row {
+ border-width: 0 1px 1px;
+ border-style: solid;
+ border-color: var(--color-border-primary);
+ padding: 15px;
+ display: flex;
+ align-items: center;
+ gap: 8px;
+
+ &__checkbox .check-box {
+ display: flex;
+ }
+
+ &__select-menu:disabled {
+ visibility: hidden;
+ }
+
+ &__mode-button {
+ margin-left: auto;
+ color: var(--color-text-brand);
+ font-weight: bold;
+ font-size: 14px;
+
+ &:hover {
+ color: var(--color-text-brand-soft);
+ }
+ }
+}
+
+.column-header {
+ display: flex;
+ font-size: 16px;
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px 4px 0 0;
+ flex: 0 0 auto;
+ cursor: pointer;
+ position: relative;
+ z-index: 2;
+ outline: 0;
+
+ &__title {
+ display: flex;
+ align-items: center;
+ gap: 5px;
+ margin: 0;
+ border: 0;
+ padding: 13px;
+ padding-inline-end: 0;
+ color: inherit;
+ background: transparent;
+ font: inherit;
+ text-align: start;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+ flex: 1;
+
+ &:focus-visible {
+ outline: var(--outline-focus-default);
+ }
+
+ .logo {
+ height: 24px;
+ }
+ }
+
+ .column-header__back-button + &__title {
+ padding-inline-start: 0;
+ }
+
+ .column-header__back-button {
+ flex: 1;
+ color: var(--color-text-brand);
+
+ &.compact {
+ flex: 0 0 auto;
+ color: var(--color-text-primary);
+ }
+ }
+
+ &.active {
+ .column-header__icon {
+ color: var(--color-text-brand);
+ text-shadow: 0 0 10px var(--color-bg-brand-softer);
+ }
+ }
+
+ &:focus,
+ &:active {
+ outline: 0;
+ }
+
+ &__advanced-buttons {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 16px;
+ padding-top: 0;
+
+ &:first-child {
+ padding-top: 16px;
+ }
+ }
+}
+
+.column-header__buttons {
+ height: 48px;
+ display: flex;
+}
+
+.column-header__links {
+ margin-bottom: 14px;
+}
+
+.column-header__links .text-btn {
+ margin-inline-end: 10px;
+}
+
+.column-header__button {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ border: 0;
+ color: var(--color-text-primary);
+ background: transparent;
+ cursor: pointer;
+ font-size: 16px;
+ padding: 0 15px;
+
+ &:last-child {
+ border-start-end-radius: 4px;
+ }
+
+ &:hover {
+ color: var(--color-text-secondary);
+ }
+
+ &:focus-visible {
+ outline: var(--outline-focus-default);
+ }
+
+ &.active {
+ color: var(--color-text-brand);
+
+ &:hover {
+ color: var(--color-text-brand);
+ }
+ }
+
+ &:disabled {
+ color: var(--color-text-disabled);
+ cursor: default;
+ }
+}
+
+.no-reduce-motion .column-header__button .icon-sliders {
+ transition: transform 150ms ease-in-out;
+}
+
+.column-header__collapsible {
+ max-height: 70vh;
+ overflow: hidden;
+ overflow-y: auto;
+ color: var(--color-text-secondary);
+ transition:
+ max-height 150ms ease-in-out,
+ opacity 300ms linear;
+ opacity: 1;
+ z-index: 1;
+ position: relative;
+ border-left: 1px solid var(--color-border-primary);
+ border-right: 1px solid var(--color-border-primary);
+ border-bottom: 1px solid var(--color-border-primary);
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ border-left: 0;
+ border-right: 0;
+ }
+
+ &.collapsed {
+ max-height: 0;
+ opacity: 0.5;
+ border-bottom: 0;
+ }
+
+ &.animating {
+ overflow-y: hidden;
+ }
+
+ hr {
+ height: 0;
+ background: transparent;
+ border: 0;
+ border-top: 1px solid var(--color-border-primary);
+ margin: 10px 0;
+ }
+}
+
+.column-header__collapsible-inner {
+ border-top: 0;
+}
+
+.column-header__setting-btn {
+ &:hover,
+ &:focus {
+ color: var(--color-text-secondary);
+ text-decoration: underline;
+ }
+}
+
+.column-header__collapsible__extra + .column-header__setting-btn {
+ padding-top: 5px;
+}
+
+.column-header__permission-btn {
+ display: inline;
+ font-weight: inherit;
+ text-decoration: underline;
+}
+
+.column-header__setting-arrows {
+ display: flex;
+ align-items: center;
+}
+
+.column-settings__pillbar {
+ display: flex;
+ background-color: transparent;
+ margin-bottom: 10px;
+ align-items: stretch;
+ gap: 2px;
+
+ .pillbar-button:first-child {
+ border-start-start-radius: 4px;
+ border-end-start-radius: 4px;
+ }
+
+ .pillbar-button:last-child {
+ border-start-end-radius: 4px;
+ border-end-end-radius: 4px;
+ }
+}
+
+.pillbar-button {
+ border: 0;
+ color: var(--color-text-primary);
+ padding: 2px;
+ margin: 0;
+ font-size: inherit;
+ flex: auto;
+ background-color: var(--color-bg-elevated);
+ transition: all 0.2s ease;
+ transition-property: background-color, box-shadow;
+
+ &[disabled] {
+ cursor: not-allowed;
+ opacity: 0.5;
+ }
+
+ &:not([disabled]) {
+ &:hover,
+ &:active {
+ background: var(--color-bg-secondary);
+ }
+
+ &.active {
+ background-color: var(--color-bg-brand-base);
+ color: var(--color-text-on-brand-base);
+ }
+
+ &:focus-visible {
+ outline: var(--outline-focus-default);
+ }
+ }
+}
+
+.text-btn {
+ display: inline-flex;
+ align-items: center;
+ gap: 4px;
+ padding: 0;
+ font-family: inherit;
+ font-size: inherit;
+ font-weight: inherit;
+ color: inherit;
+ border: 0;
+ background: transparent;
+ cursor: pointer;
+ text-decoration: none;
+
+ .icon {
+ width: 13px;
+ height: 13px;
+ }
+}
+
+.column-header__issue-btn {
+ color: var(--color-text-error);
+
+ &:hover {
+ text-decoration: underline;
+ }
+}
+
+.loading-indicator {
+ color: var(--color-text-secondary);
+ font-size: 12px;
+ font-weight: 400;
+ text-transform: uppercase;
+ overflow: visible;
+ position: absolute;
+ top: 50%;
+ inset-inline-start: 50%;
+ transform: translate(-50%, -50%);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.load-more .loading-indicator,
+.button .loading-indicator,
+.icon-button .loading-indicator {
+ position: static;
+ transform: none;
+ color: inherit;
+
+ .circular-progress {
+ color: inherit;
+ width: 22px;
+ height: 22px;
+ }
+}
+
+.button--compact .loading-indicator .circular-progress {
+ width: 17px;
+ height: 17px;
+}
+
+.icon-button .loading-indicator .circular-progress {
+ color: var(--color-text-tertiary);
+ width: 12px;
+ height: 12px;
+ margin: 6px;
+}
+
+.load-more .loading-indicator .circular-progress {
+ color: var(--color-text-tertiary);
+}
+
+.circular-progress {
+ color: var(--color-text-tertiary);
+ animation: 1.4s linear 0s infinite normal none running simple-rotate;
+
+ circle {
+ stroke: currentColor;
+ stroke-dasharray: 80px, 200px;
+ stroke-dashoffset: 0;
+ animation: circular-progress 1.4s ease-in-out infinite;
+ }
+}
+
+@keyframes circular-progress {
+ 0% {
+ stroke-dasharray: 1px, 200px;
+ stroke-dashoffset: 0;
+ }
+
+ 50% {
+ stroke-dasharray: 100px, 200px;
+ stroke-dashoffset: -15px;
+ }
+
+ 100% {
+ stroke-dasharray: 100px, 200px;
+ stroke-dashoffset: -125px;
+ }
+}
+
+@keyframes simple-rotate {
+ 0% {
+ transform: rotate(0deg);
+ }
+
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+
+@keyframes spring-rotate-in {
+ 0% {
+ transform: rotate(0deg);
+ }
+
+ 30% {
+ transform: rotate(-484.8deg);
+ }
+
+ 60% {
+ transform: rotate(-316.7deg);
+ }
+
+ 90% {
+ transform: rotate(-375deg);
+ }
+
+ 100% {
+ transform: rotate(-360deg);
+ }
+}
+
+@keyframes spring-rotate-out {
+ 0% {
+ transform: rotate(-360deg);
+ }
+
+ 30% {
+ transform: rotate(124.8deg);
+ }
+
+ 60% {
+ transform: rotate(-43.27deg);
+ }
+
+ 90% {
+ transform: rotate(15deg);
+ }
+
+ 100% {
+ transform: rotate(0deg);
+ }
+}
+
+.video-error-cover {
+ align-items: center;
+ background: var(--color-bg-primary);
+ color: var(--color-text-primary);
+ cursor: pointer;
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ justify-content: center;
+ margin-top: 8px;
+ position: relative;
+ text-align: center;
+ z-index: 100;
+}
+
+.spoiler-button {
+ top: 0;
+ inset-inline-start: 0;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ z-index: 100;
+
+ &--hidden {
+ display: none;
+ }
+
+ &--click-thru {
+ pointer-events: none;
+ }
+
+ &__overlay {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: transparent;
+ width: 100%;
+ height: 100%;
+ padding: 0;
+ margin: 0;
+ border: 0;
+ color: var(--color-text-on-media);
+ line-height: 20px;
+ font-size: 14px;
+
+ &__label {
+ background-color: var(--color-bg-media);
+ backdrop-filter: $backdrop-blur-filter;
+ border-radius: 8px;
+ padding: 12px 16px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 4px;
+ flex-direction: column;
+ font-weight: 600;
+ }
+
+ &__action {
+ font-weight: 400;
+ font-size: 13px;
+ }
+
+ &:hover,
+ &:focus {
+ .spoiler-button__overlay__label {
+ background-color: rgb(from var(--color-bg-media-base) r g b / 90%);
+ }
+ }
+ }
+}
+
+.account--panel {
+ border-top: 1px solid var(--color-border-primary);
+ border-bottom: 1px solid var(--color-border-primary);
+ display: flex;
+ flex-direction: row;
+ padding: 10px 0;
+}
+
+.account--panel__button,
+.detailed-status__button {
+ flex: 1 1 auto;
+ text-align: center;
+}
+
+.column-settings {
+ display: flex;
+ flex-direction: column;
+
+ &__section {
+ // FIXME: Legacy
+ color: var(--color-text-secondary);
+ cursor: default;
+ display: block;
+ font-weight: 500;
+ }
+
+ .column-header__links {
+ margin: 0;
+ }
+
+ section {
+ padding: 16px;
+ border-bottom: 1px solid var(--color-border-primary);
+
+ &:last-child {
+ border-bottom: 0;
+ }
+ }
+
+ h3 {
+ font-size: 16px;
+ line-height: 24px;
+ letter-spacing: 0.5px;
+ font-weight: 500;
+ color: var(--color-text-primary);
+ margin-bottom: 16px;
+ }
+
+ &__row {
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+ }
+
+ .app-form__toggle {
+ &__toggle > div {
+ border: 0;
+ }
+ }
+}
+
+.column-settings__hashtags {
+ margin-top: 15px;
+
+ .column-settings__row {
+ margin-bottom: 15px;
+ }
+
+ .column-select {
+ &__control {
+ @include search-input;
+
+ &::placeholder {
+ color: color-mix(
+ in oklab,
+ var(--color-text-primary),
+ var(--color-text-secondary)
+ );
+ }
+
+ &::-moz-focus-inner {
+ border: 0;
+ }
+
+ &::-moz-focus-inner,
+ &:focus,
+ &:active {
+ outline: 0 !important;
+ }
+
+ &:focus {
+ background: var(--color-bg-secondary);
+ }
+
+ @media screen and (width <= 600px) {
+ font-size: 16px;
+ }
+ }
+
+ &__placeholder {
+ color: var(--color-text-tertiary);
+ padding-inline-start: 2px;
+ font-size: 12px;
+ }
+
+ &__value-container {
+ padding-inline-start: 6px;
+ }
+
+ &__multi-value {
+ background: var(--color-bg-secondary);
+
+ &__remove {
+ cursor: pointer;
+
+ &:hover,
+ &:active,
+ &:focus {
+ background: var(--color-bg-brand-softer);
+ color: color-mix(
+ in oklab,
+ var(--color-text-primary),
+ var(--color-text-secondary)
+ );
+ }
+ }
+ }
+
+ &__multi-value__label,
+ &__input,
+ &__input-container {
+ color: var(--color-text-secondary);
+ }
+
+ &__clear-indicator,
+ &__dropdown-indicator {
+ cursor: pointer;
+ transition: none;
+ color: var(--color-text-tertiary);
+
+ &:hover,
+ &:active,
+ &:focus {
+ color: var(--color-text-secondary);
+ }
+ }
+
+ &__indicator-separator {
+ background-color: var(--color-border-primary);
+ }
+
+ &__menu {
+ @include search-popout;
+
+ padding: 0;
+ background: var(--color-bg-elevated);
+ }
+
+ &__menu-list {
+ padding: 6px;
+ }
+
+ &__option {
+ color: var(--color-text-primary);
+ border-radius: 4px;
+ font-size: 14px;
+
+ &--is-focused,
+ &--is-selected {
+ color: var(--color-text-on-brand-base);
+ background: var(--color-bg-brand-base);
+ }
+ }
+ }
+}
+
+.column-settings__row {
+ .text-btn:not(.column-header__permission-btn) {
+ margin-bottom: 15px;
+ }
+}
+
+.setting-toggle {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+}
+
+.setting-toggle__label {
+ color: var(--color-text-secondary);
+}
+
+.limited-account-hint {
+ p {
+ color: var(--color-text-primary);
+ font-size: 15px;
+ font-weight: 500;
+ margin-bottom: 20px;
+ }
+}
+
+.empty-column-indicator {
+ color: var(--color-text-secondary);
+ text-align: center;
+ padding: 20px;
+ font-size: 14px;
+ line-height: 20px;
+ font-weight: 400;
+ cursor: default;
+ display: flex;
+ flex: 1 1 auto;
+ align-items: center;
+ justify-content: center;
+
+ & > span {
+ max-width: 500px;
+ }
+
+ a {
+ color: var(--color-text-brand);
+ text-decoration: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+}
+
+.empty-column-indicator {
+ &__arrow {
+ position: absolute;
+ top: 50%;
+ inset-inline-start: 50%;
+ pointer-events: none;
+ transform: translate(100%, -100%) rotate(12deg);
+ transform-origin: center;
+ }
+}
+
+.follow_requests-unlocked_explanation {
+ margin: 16px;
+ margin-bottom: 0;
+}
+
+.error-column {
+ padding: 20px;
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+ display: flex;
+ flex: 1 1 auto;
+ align-items: center;
+ justify-content: center;
+ flex-direction: column;
+ cursor: default;
+
+ &__image {
+ width: 70%;
+ max-width: 350px;
+ margin-top: -50px;
+ }
+
+ &__message {
+ text-align: center;
+ color: var(--color-text-secondary);
+ font-size: 15px;
+ line-height: 22px;
+
+ h1 {
+ font-size: 28px;
+ line-height: 33px;
+ font-weight: 700;
+ margin-bottom: 15px;
+ color: var(--color-text-primary);
+ }
+
+ p {
+ max-width: 48ch;
+ }
+
+ &__actions {
+ margin-top: 30px;
+ display: flex;
+ gap: 10px;
+ align-items: center;
+ justify-content: center;
+ }
+ }
+}
+
+@keyframes heartbeat {
+ 0% {
+ transform: scale(1);
+ animation-timing-function: ease-out;
+ }
+
+ 10% {
+ transform: scale(0.91);
+ animation-timing-function: ease-in;
+ }
+
+ 17% {
+ transform: scale(0.98);
+ animation-timing-function: ease-out;
+ }
+
+ 33% {
+ transform: scale(0.87);
+ animation-timing-function: ease-in;
+ }
+
+ 45% {
+ transform: scale(1);
+ animation-timing-function: ease-out;
+ }
+}
+
+.no-reduce-motion .pulse-loading {
+ transform-origin: center center;
+ animation: heartbeat 1.5s ease-in-out infinite both;
+}
+
+.emoji-picker-dropdown__menu {
+ position: relative;
+ margin-top: 5px;
+ z-index: 2;
+ background: var(--color-bg-elevated);
+ backdrop-filter: $backdrop-blur-filter;
+ border: 1px solid var(--color-border-primary);
+ box-shadow: var(--dropdown-shadow);
+ border-radius: 5px;
+
+ .emoji-mart-scroll {
+ transition: opacity 200ms ease;
+ }
+
+ &.selecting .emoji-mart-scroll {
+ opacity: 0.5;
+ }
+}
+
+.emoji-picker-dropdown__modifiers {
+ position: absolute;
+ top: 60px;
+ inset-inline-end: 11px;
+ cursor: pointer;
+}
+
+.emoji-picker-dropdown__modifiers__menu {
+ position: absolute;
+ z-index: 4;
+ top: -5px;
+ inset-inline-start: -9px;
+ background: var(--color-bg-elevated);
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+ box-shadow: var(--dropdown-shadow);
+ overflow: hidden;
+
+ button {
+ display: block;
+ cursor: pointer;
+ border: 0;
+ padding: 4px 8px;
+ background: transparent;
+
+ &:hover,
+ &:focus,
+ &:active {
+ background: var(--color-border-primary);
+ }
+ }
+
+ .emoji-mart-emoji {
+ height: 22px;
+ }
+}
+
+.emoji-mart-emoji {
+ span {
+ background-repeat: no-repeat;
+ }
+}
+
+.upload-area {
+ align-items: center;
+ background: rgb(from var(--color-bg-overlay) r g b / 80%);
+ display: flex;
+ height: 100vh;
+ justify-content: center;
+ inset-inline-start: 0;
+ opacity: 0;
+ position: fixed;
+ top: 0;
+ visibility: hidden;
+ width: 100vw;
+ z-index: 2000;
+
+ * {
+ pointer-events: none;
+ }
+}
+
+.upload-area__drop {
+ width: 320px;
+ height: 160px;
+ display: flex;
+ box-sizing: border-box;
+ position: relative;
+ padding: 8px;
+}
+
+.upload-area__background {
+ position: absolute;
+ top: 0;
+ inset-inline-end: 0;
+ bottom: 0;
+ inset-inline-start: 0;
+ z-index: -1;
+ border-radius: 4px;
+ background: var(--color-bg-elevated);
+ box-shadow: 0 0 5px var(--color-shadow-primary);
+}
+
+.upload-area__content {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ color: var(--color-text-primary);
+ font-size: 18px;
+ font-weight: 500;
+ border: 2px dashed var(--color-border-primary);
+ border-radius: 4px;
+}
+
+.upload-progress {
+ color: var(--color-text-secondary);
+ overflow: hidden;
+ display: flex;
+ gap: 8px;
+ align-items: center;
+ padding: 0 12px;
+
+ .icon {
+ width: 24px;
+ height: 24px;
+ color: var(--color-text-brand);
+ }
+
+ span {
+ font-size: 12px;
+ text-transform: uppercase;
+ font-weight: 500;
+ display: block;
+ }
+}
+
+.upload-progress__message {
+ flex: 1 1 auto;
+}
+
+.upload-progress__backdrop {
+ width: 100%;
+ height: 6px;
+ border-radius: 6px;
+ background: var(--color-bg-primary);
+ position: relative;
+ margin-top: 5px;
+}
+
+.upload-progress__tracker {
+ position: absolute;
+ inset-inline-start: 0;
+ top: 0;
+ height: 6px;
+ background: var(--color-text-brand);
+ border-radius: 6px;
+}
+
+.emoji-button {
+ display: block;
+ padding-top: 5px;
+ padding-bottom: 2px;
+ padding-inline-start: 2px;
+ padding-inline-end: 5px;
+ outline: 0;
+ cursor: pointer;
+
+ img {
+ filter: grayscale(100%);
+ opacity: 0.8;
+ display: block;
+ margin: 0;
+ width: 22px;
+ height: 22px;
+ }
+
+ &:hover,
+ &:active,
+ &:focus {
+ img {
+ opacity: 1;
+ filter: none;
+ border-radius: 100%;
+ }
+ }
+
+ &:focus-visible {
+ img {
+ outline: var(--outline-focus-default);
+ }
+ }
+}
+
+.dropdown--active .emoji-button img {
+ opacity: 1;
+ filter: none;
+}
+
+.privacy-dropdown__dropdown,
+.language-dropdown__dropdown,
+.visibility-dropdown__dropdown {
+ box-shadow: var(--dropdown-shadow);
+ background: var(--color-bg-elevated);
+ border: 1px solid var(--color-border-primary);
+ padding: 4px;
+ border-radius: 4px;
+ overflow: hidden;
+ z-index: 2;
+
+ &.top {
+ transform-origin: 50% 100%;
+ }
+
+ &.bottom {
+ transform-origin: 50% 0;
+ }
+}
+
+.modal-root__container .privacy-dropdown {
+ flex-grow: 0;
+}
+
+.modal-root__container .privacy-dropdown__dropdown {
+ pointer-events: auto;
+ z-index: 9999;
+}
+
+.privacy-dropdown__option,
+.visibility-dropdown__option {
+ font-size: 14px;
+ line-height: 20px;
+ letter-spacing: 0.25px;
+ padding: 8px 12px;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ border-radius: 4px;
+ color: var(--color-text-primary);
+
+ // Make sure adjacent hover/active states don't have a meeting radius.
+ &:hover + &:is(:focus, .active),
+ &:is(:focus, .active) + &:hover,
+ &:is(:focus, .active) + &:is(:focus, .active) {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ }
+
+ &:hover:has(+ :focus, .active),
+ &:is(:focus, .active):has(+ :hover),
+ &:is(:focus, .active):has(+ :is(:focus, .active)) {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+
+ &:hover,
+ &:active {
+ background: var(--color-bg-secondary);
+ }
+
+ &:focus,
+ &.active {
+ background: var(--color-bg-brand-base);
+ color: var(--color-text-on-brand-base);
+ outline: 0;
+
+ .privacy-dropdown__option__content,
+ .privacy-dropdown__option__content strong,
+ .privacy-dropdown__option__additional,
+ .visibility-dropdown__option__content,
+ .visibility-dropdown__option__content strong,
+ .visibility-dropdown__option__additional {
+ color: var(--color-text-on-brand-base);
+ }
+ }
+
+ &__additional {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: var(--color-text-secondary);
+ cursor: help;
+ }
+}
+
+.privacy-dropdown__option__icon,
+.visibility-dropdown__option__icon {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.privacy-dropdown__option__content,
+.visibility-dropdown__option__content {
+ flex: 1 1 auto;
+ color: var(--color-text-secondary);
+
+ strong {
+ color: var(--color-text-primary);
+ font-weight: 500;
+ display: block;
+
+ @each $lang in $cjk-langs {
+ &:lang(#{$lang}) {
+ font-weight: 700;
+ }
+ }
+ }
+}
+
+.icon-badge-wrapper {
+ position: relative;
+}
+
+.icon-badge {
+ position: absolute;
+ display: block;
+ inset-inline-end: -0.25em;
+ top: -0.25em;
+ background-color: var(--color-bg-brand-base);
+ border-radius: 50%;
+ font-size: 75%;
+ width: 1em;
+ height: 1em;
+}
+
+.ui .flash-message {
+ margin-top: 10px;
+ margin-inline-start: auto;
+ margin-inline-end: auto;
+ margin-bottom: 0;
+ min-width: 75%;
+}
+
+.account__disclaimer {
+ display: flex;
+ padding: 10px;
+ gap: 5px;
+ color: var(--color-text-tertiary);
+ align-items: center;
+
+ strong {
+ font-weight: 500;
+ }
+
+ a {
+ font-weight: 500;
+ color: inherit;
+ text-decoration: underline;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: none;
+ }
+ }
+}
+
+.account__action-bar {
+ border-top: 1px solid var(--color-border-primary);
+ border-bottom: 1px solid var(--color-border-primary);
+ line-height: 36px;
+ overflow: hidden;
+ flex: 0 0 auto;
+ display: flex;
+}
+
+.account__action-bar-links {
+ display: flex;
+ flex: 1 1 auto;
+ line-height: 18px;
+ text-align: center;
+}
+
+.account__action-bar__tab {
+ text-decoration: none;
+ overflow: hidden;
+ flex: 0 1 100%;
+ border-inline-start: 1px solid var(--color-border-primary);
+ padding: 10px 0;
+ border-bottom: 4px solid transparent;
+
+ &:first-child {
+ border-inline-start: 0;
+ }
+
+ &.active {
+ border-bottom: 4px solid var(--color-text-brand);
+ }
+
+ & > span {
+ display: block;
+ text-transform: uppercase;
+ font-size: 11px;
+ color: var(--color-text-secondary);
+ }
+
+ strong {
+ display: block;
+ font-size: 15px;
+ font-weight: 500;
+ color: var(--color-text-primary);
+
+ @each $lang in $cjk-langs {
+ &:lang(#{$lang}) {
+ font-weight: 700;
+ }
+ }
+ }
+
+ abbr {
+ color: var(--color-text-brand);
+ }
+}
+
+.language-dropdown {
+ &__dropdown {
+ width: 300px;
+ padding: 0;
+
+ .emoji-mart-search {
+ padding: 10px;
+ background: var(--color-bg-elevated);
+
+ input {
+ padding: 8px 12px;
+ background: var(--color-bg-primary);
+ border: 1px solid var(--color-border-primary);
+ color: var(--color-text-secondary);
+
+ @media screen and (width <= 600px) {
+ font-size: 16px;
+ line-height: 24px;
+ letter-spacing: 0.5px;
+ }
+ }
+ }
+
+ .emoji-mart-search-icon {
+ inset-inline-end: 15px;
+ opacity: 1;
+ color: var(--color-text-primary);
+
+ .icon {
+ width: 18px;
+ height: 18px;
+ }
+
+ &:disabled {
+ color: var(--color-text-secondary);
+ }
+ }
+
+ .emoji-mart-scroll {
+ padding: 0 10px 10px;
+ background: var(--color-bg-elevated);
+ }
+
+ &__results {
+ &__item {
+ display: flex;
+ align-items: center;
+ gap: 0.5em;
+ cursor: pointer;
+ color: var(--color-text-primary);
+ font-size: 14px;
+ line-height: 20px;
+ letter-spacing: 0.25px;
+ font-weight: 500;
+ padding: 8px 12px;
+ border-radius: 4px;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+
+ &__common-name {
+ color: var(--color-text-secondary);
+ font-weight: 400;
+ }
+
+ &:active,
+ &:hover {
+ background: var(--color-bg-secondary);
+ }
+
+ &:focus,
+ &.active {
+ background: var(--color-bg-brand-base);
+ color: var(--color-text-on-brand-base);
+ outline: 0;
+
+ .language-dropdown__dropdown__results__item__common-name {
+ color: var(--color-text-on-brand-base);
+ }
+ }
+ }
+ }
+ }
+}
+
+.visibility-modal {
+ &__quote-warning {
+ color: var(--color-text-primary);
+ background: var(--color-bg-warning-softer);
+ padding: 16px;
+ border-radius: 4px;
+
+ h3 {
+ font-weight: 500;
+ margin-bottom: 4px;
+ }
+
+ p {
+ font-size: 0.8em;
+ }
+ }
+}
+
+.visibility-dropdown {
+ &__overlay[data-popper-placement] {
+ z-index: 9999;
+ }
+
+ &.disabled {
+ opacity: 0.6;
+ cursor: default;
+ }
+
+ &__label {
+ display: block;
+ font-weight: 500;
+ margin-bottom: 8px;
+ }
+
+ &__button {
+ display: flex;
+ align-items: center;
+ color: var(--color-text-primary);
+ background: var(--color-bg-secondary-solid);
+ border: 1px solid var(--color-border-primary);
+ padding: 8px 12px;
+ width: 100%;
+ text-align: left;
+ border-radius: 4px;
+ font-size: 14px;
+ height: 40px;
+
+ &:disabled {
+ cursor: default;
+ }
+ }
+
+ &__icon {
+ margin-inline: auto -4px;
+ width: 18px;
+ height: 18px;
+ opacity: 0.5;
+ }
+
+ &__helper {
+ margin-top: 4px;
+ font-size: 0.8em;
+ color: var(--color-text-tertiary);
+ }
+}
+
+.search {
+ margin-bottom: 32px;
+ position: relative;
+
+ .layout-multiple-columns & {
+ margin-bottom: 10px;
+ }
+
+ &__popout {
+ box-sizing: border-box;
+ display: none;
+ position: absolute;
+ inset-inline-start: 0;
+ margin-top: -2px;
+ width: 100%;
+ background: var(--color-bg-elevated);
+ border: 1px solid var(--color-border-primary);
+ border-radius: 0 0 4px 4px;
+ box-shadow: var(--dropdown-shadow);
+ z-index: 99;
+ font-size: 13px;
+ padding: 15px 5px;
+
+ h4 {
+ text-transform: uppercase;
+ color: var(--color-text-secondary);
+ font-weight: 500;
+ padding: 0 10px;
+ margin-bottom: 10px;
+ }
+
+ .icon-button {
+ padding: 0;
+ color: var(--color-text-secondary);
+ }
+
+ .icon {
+ width: 18px;
+ height: 18px;
+ }
+
+ &__menu {
+ margin-bottom: 20px;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+
+ &__message {
+ color: var(--color-text-secondary);
+ padding: 0 10px;
+ }
+
+ &__item {
+ display: block;
+ box-sizing: border-box;
+ width: 100%;
+ border: 0;
+ font: inherit;
+ background: transparent;
+ color: var(--color-text-secondary);
+ padding: 10px;
+ cursor: pointer;
+ border-radius: 4px;
+ text-align: start;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+
+ &--flex {
+ display: flex;
+ justify-content: space-between;
+ }
+
+ .icon-button {
+ transition: none;
+ }
+
+ &:hover,
+ &:focus,
+ &:active,
+ &.selected {
+ color: var(--color-text-on-brand-base);
+ background: var(--color-bg-brand-base);
+
+ .icon-button {
+ color: inherit;
+ }
+ }
+
+ mark {
+ background: transparent;
+ font-weight: 700;
+ color: var(--color-text-primary);
+ }
+
+ span {
+ overflow: inherit;
+ text-overflow: inherit;
+ }
+ }
+ }
+ }
+
+ &.active {
+ .search__input {
+ border-radius: 4px 4px 0 0;
+ }
+
+ .search__popout {
+ display: block;
+ }
+ }
+}
+
+.search__input {
+ @include search-input;
+
+ display: block;
+ padding: 12px 16px;
+ padding-inline-start: 16px + 15px + 8px;
+ line-height: normal;
+
+ &::-moz-focus-inner {
+ border: 0;
+ }
+
+ &::-moz-focus-inner,
+ &:focus,
+ &:active {
+ outline: 0 !important;
+ }
+}
+
+.search__icon-wrapper {
+ position: absolute;
+ top: 14px;
+ display: grid;
+ margin-inline-start: 16px - 2px;
+ width: 20px;
+ height: 20px;
+
+ .icon {
+ width: 100%;
+ height: 100%;
+ }
+
+ &:not(.has-value) {
+ pointer-events: none;
+ }
+}
+
+.search__icon {
+ grid-area: 1 / 1;
+ transition: all 100ms linear;
+ transition-property: transform, opacity;
+ color: var(--color-text-secondary);
+}
+
+.search__icon.icon-search {
+ .has-value & {
+ pointer-events: none;
+ opacity: 0;
+ transform: rotate(90deg);
+ }
+}
+
+.search__icon--clear-button {
+ background: transparent;
+ border: 0;
+ padding: 0;
+ width: 20px;
+ height: 20px;
+ border-radius: 100%;
+
+ &::-moz-focus-inner {
+ border: 0;
+ }
+
+ &::-moz-focus-inner,
+ &:focus {
+ outline: 0 !important;
+ }
+
+ &:focus-visible {
+ box-shadow: 0 0 0 2px var(--color-text-brand);
+ }
+
+ &[aria-hidden='true'] {
+ pointer-events: none;
+ opacity: 0;
+ transform: rotate(-90deg);
+ }
+}
+
+.search-results__section {
+ border-bottom: 1px solid var(--color-border-primary);
+
+ &:last-child {
+ border-bottom: 0;
+ }
+
+ &__header {
+ border-bottom: 1px solid var(--color-border-primary);
+ background: var(--color-bg-tertiary);
+ padding: 15px;
+ font-weight: 500;
+ font-size: 14px;
+ color: var(--color-text-secondary);
+ display: flex;
+ justify-content: space-between;
+
+ h3 {
+ display: flex;
+ align-items: center;
+ gap: 5px;
+ }
+
+ button {
+ color: var(--color-text-brand);
+ padding: 0;
+ border: 0;
+ background: 0;
+ font: inherit;
+
+ &:hover,
+ &:active,
+ &:focus {
+ text-decoration: underline;
+ }
+ }
+ }
+
+ .account:last-child,
+ & > div:last-child .status {
+ border-bottom: 0;
+ }
+}
+
+.search-results__info {
+ padding: 20px;
+ color: var(--color-text-secondary);
+ text-align: center;
+}
+
+.modal-root {
+ position: relative;
+ z-index: 9998;
+}
+
+.modal-root__overlay {
+ position: fixed;
+ top: 0;
+ inset-inline-start: 0;
+ inset-inline-end: 0;
+ bottom: 0;
+ opacity: 0.9;
+ background: var(--color-bg-overlay);
+ transition: background 0.5s;
+}
+
+.modal-root__container {
+ position: fixed;
+ top: 0;
+ inset-inline-start: 0;
+ width: 100%;
+ height: 100%;
+ max-width: 100vw;
+ max-height: 100vh;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ align-content: space-around;
+ z-index: 9999;
+ pointer-events: none;
+ user-select: none;
+ overscroll-behavior: none;
+}
+
+.modal-root__modal {
+ pointer-events: auto;
+ user-select: text;
+ display: flex;
+ max-width: 100vw;
+
+ @media screen and (width <= $mobile-breakpoint) {
+ margin-top: auto;
+ }
+}
+
+.video-modal .video-player {
+ max-height: 80vh;
+ max-width: 100vw;
+}
+
+.audio-modal__container {
+ width: 50vw;
+}
+
+.media-modal {
+ width: 100%;
+ height: 100%;
+ position: relative;
+ touch-action: pan-y;
+
+ &__buttons {
+ position: absolute;
+ inset-inline-end: 8px;
+ top: 8px;
+ z-index: 100;
+ display: flex;
+ gap: 8px;
+ align-items: center;
+
+ .icon-button {
+ --default-icon-color: var(--color-text-on-media);
+ --default-bg-color: transparent;
+ --hover-icon-color: var(--color-text-on-media);
+ --hover-bg-color: rgb(
+ from var(--color-text-on-media) r g b /
+ var(--overlay-strength-secondary)
+ );
+
+ padding: 8px;
+
+ .icon {
+ width: 24px;
+ height: 24px;
+ filter: var(--overlay-icon-shadow);
+ }
+ }
+ }
+}
+
+.media-modal__closer {
+ display: flex;
+ position: absolute;
+ top: 0;
+ inset-inline-start: 0;
+ inset-inline-end: 0;
+ bottom: 0;
+ align-items: center;
+ justify-content: space-around; // If set to center, the fullscreen image overlay is misaligned.
+
+ > div {
+ flex-shrink: 0;
+ overflow: auto;
+ }
+}
+
+.media-modal__navigation {
+ position: absolute;
+ top: 0;
+ inset-inline-start: 0;
+ inset-inline-end: 0;
+ bottom: 0;
+ pointer-events: none;
+ transition: opacity 0.3s linear;
+ will-change: opacity;
+
+ * {
+ pointer-events: auto;
+ }
+
+ &.media-modal__navigation--hidden {
+ opacity: 0;
+
+ * {
+ pointer-events: none;
+ }
+ }
+}
+
+.media-modal__nav {
+ background: transparent;
+ box-sizing: border-box;
+ border: 0;
+ color: var(--color-text-on-media);
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ font-size: 24px;
+ height: 20vmax;
+ margin: auto 0;
+ padding: 30px 5px;
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ transform: scaleX(var(--text-x-direction));
+
+ .icon {
+ border-radius: 5px;
+ padding: 10px;
+ }
+
+ &:hover .icon,
+ &:focus .icon,
+ &:active .icon {
+ background: rgb(
+ from var(--color-text-on-media) r g b / var(--overlay-strength-secondary)
+ );
+ }
+}
+
+.media-modal__nav--prev {
+ inset-inline-start: 0;
+}
+
+.media-modal__nav--next {
+ inset-inline-end: 0;
+}
+
+.media-modal__overlay {
+ max-width: 600px;
+ position: absolute;
+ inset-inline-start: 0;
+ inset-inline-end: 0;
+ bottom: 0;
+ margin: 0 auto;
+
+ .picture-in-picture__footer {
+ border-radius: 0;
+ border: none;
+ background: transparent;
+ backdrop-filter: none;
+ padding: 16px;
+
+ .icon-button {
+ --default-icon-color: var(--color-text-on-media);
+ --default-bg-color: transparent;
+ --hover-icon-color: var(--color-text-on-media);
+ --hover-bg-color: rgb(
+ from var(--color-text-on-media) r g b / var(--overlay-strength-brand)
+ );
+
+ .icon {
+ filter: var(--overlay-icon-shadow);
+ }
+
+ &.active {
+ --default-icon-color: var(--color-text-brand);
+ --hover-icon-color: var(--color-text-brand);
+ --hover-bg-color: var(--color-bg-brand-soft);
+ }
+
+ &.star-icon.active {
+ --default-icon-color: var(--color-text-favourite-highlight);
+ --hover-icon-color: var(--color-text-favourite-highlight);
+ --hover-bg-color: rgb(
+ from var(--color-text-favourite-highlight) r g b /
+ var(--overlay-strength-brand)
+ );
+ }
+
+ &.disabled {
+ --default-icon-color: var(--color-text-on-media);
+ --default-bg-color: transparent;
+
+ cursor: default;
+ opacity: 0.4;
+ }
+ }
+ }
+}
+
+.media-modal__pagination {
+ display: flex;
+ justify-content: center;
+ margin-bottom: 20px;
+}
+
+.media-modal__page-dot {
+ flex: 0 0 auto;
+ background-color: rgb(from var(--color-text-on-media) r g b / 40%);
+ filter: var(--overlay-icon-shadow);
+ height: 6px;
+ width: 6px;
+ border-radius: 50%;
+ margin: 0 4px;
+ padding: 0;
+ border: 0;
+ font-size: 0;
+ transition: background-color 0.2s ease-in-out;
+
+ &.active {
+ background-color: var(--color-text-on-media);
+ }
+
+ &:focus {
+ opacity: 1;
+ outline: 2px solid var(--color-text-on-media);
+ outline-offset: 2px;
+ }
+}
+
+.modal-placeholder {
+ width: 588px;
+ min-height: 478px;
+ flex-direction: column;
+ background: var(--color-bg-primary);
+ backdrop-filter: $backdrop-blur-filter;
+ border: 1px solid var(--color-border-primary);
+ border-radius: 16px;
+
+ &__error {
+ padding: 24px;
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+
+ &__image {
+ width: 70%;
+ max-width: 350px;
+ }
+
+ &__message {
+ text-align: center;
+ text-wrap: balance;
+ font-size: 14px;
+ line-height: 20px;
+ letter-spacing: 0.25px;
+
+ &__actions {
+ margin-top: 24px;
+ display: flex;
+ gap: 10px;
+ align-items: center;
+ justify-content: center;
+ }
+ }
+ }
+}
+
+.safety-action-modal {
+ width: 600px;
+ flex-direction: column;
+
+ &__top,
+ &__bottom {
+ display: flex;
+ gap: 8px;
+ padding: 24px;
+ flex-direction: column;
+ background: var(--color-bg-primary);
+ backdrop-filter: $backdrop-blur-filter;
+ border: 1px solid var(--color-border-primary);
+ }
+
+ &__top {
+ border-radius: 16px 16px 0 0;
+ border-bottom: 0;
+ gap: 16px;
+ }
+
+ &__bottom {
+ border-radius: 0 0 16px 16px;
+ border-top: 0;
+
+ @media screen and (max-width: $mobile-breakpoint) {
+ border-radius: 0;
+ border-bottom: 0;
+ padding-bottom: 32px;
+ }
+ }
+
+ &__header {
+ display: flex;
+ gap: 16px;
+ align-items: center;
+ font-size: 14px;
+ line-height: 20px;
+ color: var(--color-text-secondary);
+
+ &__icon {
+ border-radius: 64px;
+ color: var(--color-text-on-brand-base);
+ background: var(--color-bg-brand-base);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 40px;
+ height: 40px;
+ flex-shrink: 0;
+
+ .icon {
+ width: 24px;
+ height: 24px;
+ }
+ }
+
+ h1 {
+ font-size: 22px;
+ line-height: 28px;
+ color: var(--color-text-primary);
+ }
+ }
+
+ &__confirmation {
+ font-size: 14px;
+ line-height: 20px;
+ color: var(--color-text-secondary);
+
+ h1 {
+ font-size: 16px;
+ line-height: 24px;
+ color: var(--color-text-primary);
+ font-weight: 500;
+
+ &:not(:only-child) {
+ margin-bottom: 8px;
+ }
+ }
+
+ strong {
+ font-weight: 700;
+ color: var(--color-text-primary);
+ }
+ }
+
+ &__status {
+ border: 1px solid var(--color-border-primary);
+ border-radius: 8px;
+ padding: 8px;
+ cursor: pointer;
+
+ &__account {
+ display: flex;
+ align-items: center;
+ gap: 4px;
+ margin-bottom: 8px;
+ color: var(--color-text-tertiary);
+
+ bdi {
+ color: inherit;
+ }
+ }
+
+ &__content {
+ display: -webkit-box;
+ font-size: 15px;
+ line-height: 22px;
+ color: var(--color-text-tertiary);
+ line-clamp: 4;
+ -webkit-line-clamp: 4;
+ -webkit-box-orient: vertical;
+ max-height: 4 * 22px;
+ overflow: hidden;
+
+ p,
+ a {
+ color: inherit;
+ }
+ }
+
+ .reply-indicator__attachments {
+ margin-top: 0;
+ font-size: 15px;
+ line-height: 22px;
+ color: var(--color-text-tertiary);
+ }
+ }
+
+ &__bullet-points {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ font-size: 16px;
+ line-height: 24px;
+
+ & > div {
+ display: flex;
+ gap: 16px;
+ align-items: center;
+
+ strong {
+ font-weight: 700;
+ }
+ }
+
+ &--deemphasized {
+ color: var(--color-text-primary);
+ }
+
+ &__icon {
+ width: 40px;
+ height: 40px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
+
+ .icon {
+ width: 24px;
+ height: 24px;
+ }
+ }
+ }
+
+ &__field-group {
+ display: flex;
+ flex-direction: column;
+
+ label {
+ display: flex;
+ gap: 16px;
+ align-items: center;
+ font-size: 16px;
+ line-height: 24px;
+ height: 32px;
+ padding: 0 12px;
+ }
+ }
+
+ &__caveats {
+ font-size: 14px;
+ padding: 0 12px;
+
+ strong {
+ font-weight: 500;
+ }
+ }
+
+ &__bottom {
+ padding-top: 0;
+
+ &__collapsible {
+ display: none;
+ flex-direction: column;
+ gap: 16px;
+ }
+
+ &.active {
+ background: var(--color-bg-secondary);
+ padding-top: 24px;
+
+ .safety-action-modal__bottom__collapsible {
+ display: flex;
+ }
+ }
+ }
+
+ &__actions {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ justify-content: flex-end;
+
+ &__hint {
+ font-size: 14px;
+ line-height: 20px;
+ color: var(--color-text-tertiary);
+ }
+
+ .link-button {
+ padding: 10px 12px;
+ font-weight: 600;
+ }
+ }
+}
+
+.dialog-modal {
+ width: 588px;
+ max-height: 80vh;
+ flex-direction: column;
+ background: var(--color-bg-elevated);
+ backdrop-filter: $backdrop-blur-filter;
+ border: 1px solid var(--color-border-primary);
+ border-radius: 16px;
+
+ &__header {
+ box-sizing: border-box;
+ border-bottom: 1px solid var(--color-border-primary);
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ flex-direction: row-reverse;
+ padding: 12px 24px;
+ min-height: 61px;
+
+ &__title {
+ font-size: 16px;
+ line-height: 24px;
+ font-weight: 500;
+ letter-spacing: 0.15px;
+ }
+ }
+
+ &__content {
+ font-size: 14px;
+ line-height: 20px;
+ letter-spacing: 0.25px;
+ overflow-y: auto;
+
+ &__description {
+ margin: 24px 24px 0;
+ color: var(--color-text-secondary);
+
+ a {
+ color: inherit;
+ }
+ }
+
+ &__form {
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+ padding: 24px;
+ }
+
+ &__preview {
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+ align-items: center;
+ justify-content: center;
+ padding: 24px;
+ background: var(--color-bg-media-base);
+
+ img {
+ display: block;
+ }
+
+ img,
+ .gifv video {
+ outline: 1px solid var(--color-border-media);
+ outline-offset: -1px;
+ border-radius: 8px;
+ }
+
+ img,
+ .gifv video,
+ .video-player,
+ .audio-player {
+ max-width: 360px;
+ max-height: 45vh;
+ }
+ }
+
+ &__actions {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ justify-content: flex-end;
+ padding: 0 24px 24px;
+ }
+ }
+
+ &__popout {
+ background: var(--color-bg-elevated);
+ backdrop-filter: $backdrop-blur-filter;
+ border: 1px solid var(--color-border-primary);
+ box-shadow: var(--dropdown-shadow);
+ max-width: 320px;
+ padding: 16px;
+ border-radius: 8px;
+ z-index: 9999 !important;
+ font-size: 14px;
+ line-height: 20px;
+ color: var(--color-text-secondary);
+ }
+
+ .copy-paste-text {
+ margin-bottom: 0;
+ }
+}
+
+.hotkey-combination {
+ display: inline-flex;
+ align-items: center;
+ gap: 4px;
+}
+
+.doodle-modal,
+.boost-modal,
+.report-modal,
+.actions-modal,
+.compare-history-modal {
+ background: var(--color-bg-primary);
+ color: var(--color-text-primary);
+ border-radius: 4px;
+ border: 1px solid var(--color-border-primary);
+ overflow: hidden;
+ max-width: 90vw;
+ width: 480px;
+ position: relative;
+ flex-direction: column;
+
+ @media screen and (max-width: $no-columns-breakpoint) {
+ border-bottom: 0;
+ border-radius: 4px 4px 0 0;
+ padding-bottom: env(safe-area-inset-bottom);
+ }
+}
+
+.doodle-modal__action-bar {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ background: var(--color-bg-elevated);
+ padding: 10px; // purposefully reduce padding in glitch-soc
+
+ & > div {
+ flex: 1 1 auto;
+ text-align: end;
+ color: var(--color-text-brand);
+ padding-inline-end: 10px;
+ }
+
+ .icon {
+ vertical-align: middle;
+ }
+
+ .button {
+ flex: 0 0 auto;
+ }
+}
+
+.boost-modal__container {
+ overflow-y: auto;
+ padding: 10px;
+
+ .status {
+ user-select: text;
+ border-bottom: 0;
+ }
+}
+
+.report-modal {
+ width: 90vw;
+ max-width: 700px;
+ border: 1px solid var(--color-border-primary);
+}
+
+.report-dialog-modal {
+ max-width: 90vw;
+ width: 480px;
+ height: 80vh;
+ background: var(--color-bg-primary);
+ color: var(--color-text-primary);
+ border-radius: 4px;
+ border: 1px solid var(--color-border-primary);
+ overflow: hidden;
+ position: relative;
+ flex-direction: column;
+ display: flex;
+
+ &__container {
+ box-sizing: border-box;
+ border-top: 1px solid var(--color-border-primary);
+ padding: 20px;
+ flex-grow: 1;
+ display: flex;
+ flex-direction: column;
+ min-height: 0;
+ overflow: auto;
+ }
+
+ &__title {
+ font-size: 28px;
+ line-height: 33px;
+ font-weight: 700;
+ margin-bottom: 15px;
+
+ @media screen and (height <= 800px) {
+ font-size: 22px;
+ }
+ }
+
+ &__subtitle {
+ font-size: 17px;
+ font-weight: 600;
+ line-height: 22px;
+ margin-bottom: 4px;
+ }
+
+ &__lead {
+ font-size: 17px;
+ line-height: 22px;
+ color: var(--color-text-primary);
+ margin-bottom: 30px;
+
+ a {
+ text-decoration: none;
+ color: var(--color-text-brand);
+ font-weight: 500;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+ }
+
+ &__actions {
+ margin-top: 30px;
+ display: flex;
+
+ .button {
+ flex: 1 1 auto;
+ }
+ }
+
+ &__statuses {
+ flex-grow: 1;
+ min-height: 0;
+ overflow: auto;
+ }
+
+ .status__content a {
+ color: var(--color-text-brand);
+ }
+
+ .status__content,
+ .status__content p {
+ color: var(--color-text-primary);
+ }
+
+ .dialog-option {
+ align-items: center;
+ gap: 12px;
+ }
+
+ .dialog-option .poll__input {
+ color: var(--color-text-secondary);
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+
+ svg {
+ width: 15px;
+ height: 15px;
+ }
+
+ &:active,
+ &:focus,
+ &:hover {
+ border-color: var(--color-text-success);
+ border-width: 4px;
+ }
+
+ &.active {
+ color: var(--color-text-on-success-base);
+ background: var(--color-bg-success-base);
+ border-color: var(--color-bg-success-base);
+ }
+ }
+
+ .poll__option.dialog-option {
+ padding: 15px 0;
+ flex: 0 0 auto;
+ border-bottom: 1px solid var(--color-border-primary);
+
+ &:last-child {
+ border-bottom: 0;
+ }
+
+ & > .poll__option__text {
+ font-size: 13px;
+ color: var(--color-text-primary);
+
+ strong {
+ font-size: 17px;
+ font-weight: 500;
+ line-height: 22px;
+ color: var(--color-text-primary);
+ display: block;
+ margin-bottom: 4px;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+ }
+ }
+
+ .flex-spacer {
+ background: transparent;
+ }
+
+ &__textarea {
+ display: block;
+ box-sizing: border-box;
+ width: 100%;
+ color: var(--color-text-primary);
+ background: var(--color-bg-secondary);
+ padding: 10px;
+ font-family: inherit;
+ font-size: 17px;
+ line-height: 22px;
+ resize: vertical;
+ border: 0;
+ border: 1px solid var(--color-border-primary);
+ outline: 0;
+ border-radius: 4px;
+ margin: 20px 0;
+
+ &:focus {
+ outline: 0;
+ }
+ }
+
+ &__toggle {
+ display: flex;
+ align-items: center;
+ margin-bottom: 16px;
+ gap: 8px;
+
+ & > span {
+ display: block;
+ font-size: 14px;
+ font-weight: 500;
+ line-height: 20px;
+ }
+ }
+
+ .button.button-secondary {
+ border-color: var(--color-text-error);
+ color: var(--color-text-error);
+ flex: 0 0 auto;
+
+ &:hover,
+ &:focus,
+ &:active {
+ color: var(--color-text-on-error-base);
+ background: var(--color-bg-error-base);
+ border-color: var(--color-bg-error-base);
+ }
+ }
+
+ hr {
+ border: 0;
+ background: transparent;
+ margin: 15px 0;
+ }
+
+ .emoji-mart-search {
+ padding-inline-end: 10px;
+ }
+
+ .emoji-mart-search-icon {
+ inset-inline-end: 10px + 5px;
+ }
+}
+
+.setting-divider {
+ background: transparent;
+ border: 0;
+ margin: 0;
+ width: 100%;
+ height: 1px;
+ margin-bottom: 29px;
+}
+
+.actions-modal {
+ border-radius: 8px 8px 0 0;
+ background: var(--color-bg-elevated);
+ backdrop-filter: $backdrop-blur-filter;
+ border-color: var(--color-border-primary);
+ box-shadow: var(--dropdown-shadow);
+ max-height: 80vh;
+ max-width: 80vw;
+
+ ul {
+ overflow-y: auto;
+ padding-bottom: 8px;
+ }
+
+ a,
+ button {
+ color: inherit;
+ display: flex;
+ padding: 16px;
+ font-size: 15px;
+ line-height: 21px;
+ background: transparent;
+ border: none;
+ align-items: center;
+ text-decoration: none;
+ width: 100%;
+ box-sizing: border-box;
+
+ &:hover,
+ &:active,
+ &:focus {
+ background: var(--color-bg-brand-softer);
+ }
+ }
+}
+
+.report-modal__target {
+ padding: 30px;
+ font-size: 16px;
+
+ strong {
+ font-weight: 500;
+
+ @each $lang in $cjk-langs {
+ &:lang(#{$lang}) {
+ font-weight: 700;
+ }
+ }
+ }
+}
+
+.report-modal__target {
+ text-align: center;
+}
+
+.report-modal__target {
+ padding: 15px;
+
+ .report-modal__close {
+ position: absolute;
+ top: 10px;
+ inset-inline-end: 10px;
+ }
+}
+
+.compare-history-modal {
+ .report-modal__target {
+ border-bottom: 1px solid var(--color-border-primary);
+ }
+
+ &__container {
+ padding: 30px;
+ pointer-events: all;
+ overflow-y: auto;
+ }
+
+ .status__content {
+ color: var(--color-text-primary);
+ font-size: 19px;
+ line-height: 24px;
+
+ .emojione {
+ width: 24px;
+ height: 24px;
+ margin: -1px 0 0;
+ }
+
+ a {
+ color: var(--color-text-brand);
+ }
+
+ hr {
+ height: 0.25rem;
+ padding: 0;
+ background-color: var(--color-text-primary);
+ border: 0;
+ margin: 20px 0;
+ }
+ }
+
+ .media-gallery,
+ .audio-player,
+ .video-player {
+ margin-top: 15px;
+ }
+}
+
+.loading-bar {
+ background-color: var(--color-bg-brand-base);
+ height: 3px;
+ position: fixed;
+ top: 0;
+ inset-inline-start: 0;
+ z-index: 9999;
+}
+
+// glitch: deprecated settings modal
+img.modal-warning {
+ display: block;
+ margin: auto;
+ margin-bottom: 15px;
+ width: 60px;
+}
+
+// glitch: optional wide mode
+.wide .columns-area:not(.columns-area--mobile) {
+ .column {
+ flex: auto;
+ min-width: 330px;
+ max-width: 400px;
+ }
+
+ .drawer {
+ min-width: 300px;
+ max-width: 400px;
+ flex: 1 1 200px;
+ }
+}
+
+.fullwidth-columns .columns-area:not(.columns-area--mobile) {
+ .column {
+ flex: auto;
+ max-width: unset;
+ }
+}
+
+.media-gallery__actions {
+ position: absolute;
+ top: 6px;
+ inset-inline-end: 6px;
+ display: flex;
+ gap: 2px;
+ z-index: 2;
+
+ &__pill {
+ display: block;
+ color: var(--color-text-on-media);
+ background: var(--color-bg-media);
+ backdrop-filter: $backdrop-blur-filter;
+ border: 0;
+ padding: 3px 12px;
+ border-radius: 99px;
+ font-size: 14px;
+ font-weight: 700;
+ line-height: 20px;
+ }
+}
+
+.media-gallery__item__badges {
+ position: absolute;
+ bottom: 8px;
+ inset-inline-end: 8px;
+ display: flex;
+ gap: 2px;
+ pointer-events: none;
+}
+
+.media-gallery__alt__label,
+.relationship-tag {
+ display: block;
+ text-align: center;
+ color: var(--color-text-on-media);
+ background: var(--color-bg-media);
+ backdrop-filter: $backdrop-blur-filter;
+ border: 0;
+ padding: 3px 8px;
+ border-radius: 4px;
+ font-size: 12px;
+ font-weight: 700;
+ z-index: 1;
+ line-height: 20px;
+ cursor: pointer;
+ pointer-events: auto;
+
+ &--non-interactive {
+ pointer-events: none;
+ }
+}
+
+.relationship-tag {
+ text-transform: uppercase;
+ cursor: default;
+}
+
+.info-tooltip {
+ color: var(--color-text-on-media);
+ background: var(--color-bg-media);
+ backdrop-filter: $backdrop-blur-filter;
+ border-radius: 4px;
+ box-shadow: var(--dropdown-shadow);
+ padding: 16px;
+ min-width: 16em;
+ min-height: 2em;
+ max-width: 22em;
+ max-height: 30em;
+ overflow-y: auto;
+ z-index: 10;
+
+ &--solid {
+ color: var(--color-text-primary);
+ background: var(--color-bg-elevated);
+ border: 1px solid var(--color-border-primary);
+ }
+
+ h4 {
+ font-size: 15px;
+ line-height: 20px;
+ font-weight: 500;
+ margin-bottom: 8px;
+ }
+
+ p {
+ font-size: 15px;
+ line-height: 20px;
+ opacity: 0.85;
+ white-space: pre-line;
+ }
+
+ .button {
+ margin-block-start: 8px;
+ }
+}
+
+.attachment-list {
+ display: flex;
+ font-size: 14px;
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+ margin-top: 14px; // glitch: reduced margins
+ overflow: hidden;
+
+ &__icon {
+ flex: 0 0 auto;
+ color: var(--color-text-tertiary);
+ padding: 8px 18px;
+ cursor: default;
+ border-inline-end: 1px solid var(--color-border-primary);
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ font-size: 26px;
+ }
+
+ &__list {
+ list-style: none;
+ padding: 4px 0;
+ padding-inline-start: 8px;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+
+ li {
+ display: block;
+ padding: 4px 0;
+ }
+
+ a {
+ text-decoration: none;
+ color: var(--color-text-tertiary);
+ font-weight: 500;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+ }
+
+ &.compact {
+ border: 0;
+ margin-top: 4px; // glitch: reduced margins
+
+ .attachment-list__list {
+ padding: 0;
+ display: block;
+ }
+
+ .icon {
+ color: var(--color-text-tertiary);
+ vertical-align: middle;
+ }
+ }
+}
+
+/* Media Gallery */
+.media-gallery {
+ box-sizing: border-box;
+ margin-top: 8px;
+ overflow: hidden;
+ border-radius: 8px;
+ position: relative;
+ width: 100%;
+ min-height: 64px;
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-template-rows: 1fr 1fr;
+ gap: 2px;
+
+ &--layout-2 {
+ & > .media-gallery__item:nth-child(1) {
+ border-end-end-radius: 0;
+ border-start-end-radius: 0;
+ }
+
+ & > .media-gallery__item:nth-child(2) {
+ border-start-start-radius: 0;
+ border-end-start-radius: 0;
+ }
+ }
+
+ &--layout-3 {
+ min-height: calc(64px * 2 + 8px);
+
+ & > .media-gallery__item:nth-child(1) {
+ border-end-end-radius: 0;
+ border-start-end-radius: 0;
+ }
+
+ & > .media-gallery__item:nth-child(2) {
+ border-start-start-radius: 0;
+ border-end-start-radius: 0;
+ border-end-end-radius: 0;
+ }
+
+ & > .media-gallery__item:nth-child(3) {
+ border-start-start-radius: 0;
+ border-end-start-radius: 0;
+ border-start-end-radius: 0;
+ }
+ }
+
+ &--layout-4 {
+ min-height: calc(64px * 2 + 8px);
+
+ & > .media-gallery__item:nth-child(1) {
+ border-end-end-radius: 0;
+ border-start-end-radius: 0;
+ border-end-start-radius: 0;
+ }
+
+ & > .media-gallery__item:nth-child(2) {
+ border-start-start-radius: 0;
+ border-end-start-radius: 0;
+ border-end-end-radius: 0;
+ }
+
+ & > .media-gallery__item:nth-child(3) {
+ border-start-start-radius: 0;
+ border-start-end-radius: 0;
+ border-end-start-radius: 0;
+ border-end-end-radius: 0;
+ }
+
+ & > .media-gallery__item:nth-child(4) {
+ border-start-start-radius: 0;
+ border-end-start-radius: 0;
+ border-start-end-radius: 0;
+ }
+ }
+
+ @include fullwidth-gallery;
+}
+
+.media-gallery__item {
+ border: 0;
+ box-sizing: border-box;
+ display: block;
+ position: relative;
+ border-radius: 8px;
+ overflow: hidden;
+ outline: 1px solid var(--color-border-media);
+ outline-offset: -1px;
+ z-index: 1;
+
+ &--tall {
+ grid-row: span 2;
+ }
+
+ &--wide {
+ grid-column: span 2;
+ }
+
+ .full-width & {
+ border-radius: 0;
+ }
+
+ &.letterbox {
+ background: var(--color-bg-media);
+ }
+
+ &--square {
+ aspect-ratio: 1;
+ }
+
+ &__overlay {
+ position: absolute;
+ top: 0;
+ inset-inline-start: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ box-sizing: border-box;
+ width: 100%;
+ height: 100%;
+ pointer-events: none;
+ padding: 8px;
+ z-index: 1;
+
+ &--corner {
+ align-items: flex-start;
+ justify-content: flex-end;
+ }
+
+ .icon {
+ color: var(--color-text-on-media);
+ filter: drop-shadow(0 0 6px var(--color-bg-media-base));
+ }
+ }
+
+ &--error img {
+ visibility: hidden;
+ }
+}
+
+.media-gallery__item-thumbnail {
+ cursor: pointer;
+ display: block;
+ text-decoration: none;
+ color: var(--color-text-primary);
+ position: relative;
+ z-index: -1;
+
+ &,
+ img {
+ height: 100%;
+ width: 100%;
+ object-fit: contain;
+
+ &:not(.letterbox) {
+ height: 100%;
+ object-fit: cover;
+ }
+ }
+}
+
+.media-gallery__preview {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ position: absolute;
+ top: 0;
+ inset-inline-start: 0;
+ z-index: -2;
+ background: var(--color-bg-overlay);
+
+ &--hidden {
+ display: none;
+ }
+}
+
+.media-gallery__gifv {
+ height: 100%;
+ overflow: hidden;
+ position: relative;
+ width: 100%;
+ z-index: -1;
+}
+
+.media-gallery__item-gifv-thumbnail {
+ cursor: pointer;
+ height: 100%;
+ width: 100%;
+ object-fit: contain;
+ user-select: none;
+
+ &:not(.letterbox) {
+ height: 100%;
+ object-fit: cover;
+ }
+}
+
+/* End Media Gallery */
+
+.detailed,
+.fullscreen {
+ .video-player__volume__current,
+ .video-player__volume::before {
+ bottom: 27px;
+ }
+
+ .video-player__volume__handle {
+ bottom: 23px;
+ }
+}
+
+.audio-player {
+ /* These are only fallback values, the AudioPlayer component inserts
+ * the real colours dynamically as inline styles */
+ --player-foreground-color: var(--color-text-on-media);
+ --player-background-color: var(--color-bg-media-base);
+ --player-accent-color: var(--color-text-brand);
+
+ box-sizing: border-box;
+ container: audio-player / inline-size;
+ position: relative;
+ overflow: hidden;
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ aspect-ratio: 16 / 9;
+ color: var(--player-foreground-color);
+ background: var(--player-background-color);
+ border-radius: 8px;
+ outline: 1px solid var(--color-border-media);
+ outline-offset: -1px;
+
+ &__controls {
+ display: grid;
+ grid-template-columns: 1fr 1fr 1fr;
+ height: 100%;
+
+ &__play {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+
+ .player-button {
+ position: absolute;
+ top: 50%;
+ inset-inline-start: 50%;
+ transform: translate(-50%, -50%);
+ }
+
+ .icon {
+ filter: var(--overlay-icon-shadow);
+ }
+ }
+
+ .player-button {
+ display: inline-block;
+ outline: 0;
+ padding: 5px;
+ flex: 0 0 auto;
+ background: transparent;
+ border: 0;
+ color: var(--player-foreground-color);
+ opacity: 0.75;
+
+ .icon {
+ width: 48px;
+ height: 48px;
+ }
+
+ &:active,
+ &:hover,
+ &:focus {
+ opacity: 1;
+ }
+ }
+ }
+
+ &__visualizer {
+ width: 100%;
+ max-width: 200px;
+ }
+
+ .video-player__seek {
+ position: absolute;
+ inset: 0 0 auto;
+ height: 24px;
+ z-index: 1; /* Ensure this renders on top of audio player controls */
+ }
+
+ &.inactive {
+ .video-player__seek,
+ .audio-player__controls,
+ .video-player__controls {
+ visibility: hidden;
+ }
+ }
+
+ .video-player__volume::before,
+ .video-player__seek::before {
+ background: currentColor;
+ opacity: 0.15;
+ }
+
+ .video-player__seek__buffer {
+ background: currentColor;
+ opacity: 0.2;
+ }
+
+ .video-player__seek__progress,
+ .video-player__seek__handle,
+ .video-player__volume__current,
+ .video-player__volume__handle {
+ background-color: var(--player-accent-color);
+ }
+
+ .video-player__buttons button,
+ .video-player__buttons a {
+ color: currentColor;
+ opacity: 0.75;
+
+ &:active,
+ &:hover,
+ &:focus {
+ color: currentColor;
+ opacity: 1;
+ }
+ }
+
+ .video-player__time-sep,
+ .video-player__time-total,
+ .video-player__time-current {
+ color: currentColor;
+ }
+
+ @container audio-player (max-width: 400px) {
+ .video-player__time,
+ .player-button.video-player__download__icon {
+ display: none;
+ }
+ }
+
+ .video-player__seek::before,
+ .video-player__seek__buffer,
+ .video-player__seek__progress {
+ top: 0;
+ }
+
+ .video-player__seek__handle {
+ top: -4px;
+ }
+
+ .video-player__controls {
+ padding-top: 10px;
+ background: transparent;
+ z-index: 1;
+ }
+}
+
+.video-player {
+ overflow: hidden;
+ position: relative;
+ color: var(--color-text-on-media);
+ background: var(--color-bg-media);
+ max-width: 100%;
+ border-radius: 8px;
+ box-sizing: border-box;
+ display: flex;
+ align-items: center;
+ outline: 1px solid var(--color-border-media);
+ outline-offset: -1px;
+ z-index: 2;
+
+ // TODO: might be able to delete this block
+ .detailed-status & {
+ width: 100%;
+ height: 100%;
+ }
+
+ @include fullwidth-gallery;
+
+ video {
+ display: block;
+ max-width: 100vw; // TODO: might be able to delete this
+ max-height: 80vh; // TODO: might be able to delete this
+ z-index: -2;
+ position: relative; // TODO: might be able to delete this
+ }
+
+ &.fullscreen {
+ width: 100% !important;
+ height: 100% !important;
+ margin: 0;
+ aspect-ratio: auto !important;
+ outline: none;
+ border-radius: 0;
+
+ video {
+ max-width: 100% !important; // TODO: might be able to delete this
+ max-height: 100% !important; // TODO: might be able to delete this
+ width: 100% !important;
+ height: 100% !important;
+ outline: 0;
+ }
+ }
+
+ &.inline {
+ video {
+ object-fit: contain;
+ }
+ }
+
+ &__controls {
+ position: absolute;
+ direction: ltr;
+ z-index: -1;
+ bottom: 0;
+ inset-inline-start: 0;
+ inset-inline-end: 0;
+ box-sizing: border-box;
+ background: linear-gradient(
+ 0deg,
+ rgb(from var(--color-bg-media-base) r g b / 85%) 0,
+ rgb(from var(--color-bg-media-base) r g b / 45%) 60%,
+ transparent
+ );
+ padding: 0 15px;
+ opacity: 0;
+ pointer-events: none;
+ transition: opacity 0.1s ease;
+ will-change: opacity, pointer-events;
+
+ &.active {
+ opacity: 1;
+ pointer-events: auto;
+ }
+ }
+
+ .media-gallery__actions {
+ opacity: 0;
+ transition: opacity 0.1s ease;
+
+ &.active {
+ opacity: 1;
+ }
+ }
+
+ &.inactive {
+ video,
+ .video-player__controls {
+ visibility: hidden;
+ }
+ }
+
+ &__spoiler {
+ display: none;
+ position: absolute;
+ top: 0;
+ inset-inline-start: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 4;
+ border: 0;
+ background: var(--color-bg-primary);
+ color: var(--color-text-secondary);
+ transition: none;
+ pointer-events: none;
+
+ &.active {
+ display: block;
+ pointer-events: auto;
+
+ &:hover,
+ &:active,
+ &:focus {
+ color: color-mix(
+ in oklab,
+ var(--color-text-primary),
+ var(--color-text-secondary)
+ );
+ }
+ }
+
+ &__title {
+ display: block;
+ font-size: 14px;
+ }
+
+ &__subtitle {
+ display: block;
+ font-size: 11px;
+ font-weight: 500;
+ }
+ }
+
+ &__buttons-bar {
+ display: flex;
+ justify-content: space-between;
+ padding-bottom: 8px;
+ margin: 0 -5px;
+
+ .video-player__download__icon {
+ color: inherit;
+ }
+ }
+
+ &__buttons {
+ display: flex;
+ flex: 0 1 auto;
+ min-width: 30px;
+ align-items: center;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ gap: 5px;
+
+ .player-button {
+ display: inline-block;
+ outline: 0;
+ padding: 5px;
+ flex: 0 0 auto;
+ background: transparent;
+ border: 0;
+ color: rgb(from var(--color-text-on-media) r g b / 75%);
+ font-weight: 500;
+
+ &:active,
+ &:hover,
+ &:focus {
+ color: var(--color-text-on-media);
+ }
+ }
+ }
+
+ &__time {
+ display: inline;
+ flex: 0 1 auto;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ margin: 0 5px;
+
+ // Ensure digits maintain a consistent width
+ font-variant-numeric: tabular-nums;
+ }
+
+ &__time-sep,
+ &__time-total,
+ &__time-current {
+ color: var(--color-text-on-media);
+ font-size: 14px;
+ font-weight: 500;
+ }
+
+ &__time-sep {
+ display: inline-block;
+ margin: 0 6px;
+ }
+
+ &__volume {
+ flex: 0 0 auto;
+ display: inline-flex;
+ cursor: pointer;
+ height: 24px;
+ position: relative;
+ overflow: hidden;
+
+ .no-reduce-motion & {
+ transition: all 100ms linear;
+ }
+
+ &.active {
+ overflow: visible;
+ width: 50px;
+ margin-inline-end: 16px;
+ }
+
+ &::before {
+ content: '';
+ width: 50px;
+ background: rgb(from var(--color-text-on-media) r g b / 35%);
+ border-radius: 4px;
+ display: block;
+ position: absolute;
+ height: 4px;
+ inset-inline-start: 0;
+ top: 50%;
+ transform: translate(0, -50%);
+ }
+
+ &__current {
+ display: block;
+ position: absolute;
+ height: 4px;
+ border-radius: 4px;
+ inset-inline-start: 0;
+ top: 50%;
+ transform: translate(0, -50%);
+ background: var(--color-text-on-media);
+ }
+
+ &__handle {
+ position: absolute;
+ z-index: 3;
+ border-radius: 50%;
+ width: 12px;
+ height: 12px;
+ top: 50%;
+ inset-inline-start: 0;
+ margin-inline-start: -6px;
+ transform: translate(0, -50%);
+ background: var(--color-text-on-media);
+ box-shadow: 1px 2px 6px var(--color-shadow-primary);
+ opacity: 0;
+
+ .no-reduce-motion & {
+ transition: opacity 100ms linear;
+ }
+ }
+
+ &.active &__handle {
+ opacity: 1;
+ }
+ }
+
+ &__link {
+ padding: 2px 10px;
+
+ a {
+ text-decoration: none;
+ font-size: 14px;
+ font-weight: 500;
+ color: var(--color-text-on-media);
+
+ &:hover,
+ &:active,
+ &:focus {
+ text-decoration: underline;
+ }
+ }
+ }
+
+ &__seek {
+ cursor: pointer;
+ height: 24px;
+ position: relative;
+
+ &::before {
+ content: '';
+ width: 100%;
+ background: rgb(from var(--color-text-on-media) r g b / 35%);
+ border-radius: 4px;
+ display: block;
+ position: absolute;
+ height: 4px;
+ top: 14px;
+ }
+
+ &__progress,
+ &__buffer {
+ display: block;
+ position: absolute;
+ height: 4px;
+ border-radius: 4px;
+ top: 14px;
+ background: var(--color-text-on-media);
+ }
+
+ &__buffer {
+ background: rgb(from var(--color-text-on-media) r g b / 20%);
+ }
+
+ &__handle {
+ position: absolute;
+ z-index: 3;
+ opacity: 0;
+ border-radius: 50%;
+ width: 12px;
+ height: 12px;
+ top: 10px;
+ margin-inline-start: -6px;
+ background: var(--color-text-on-media);
+ box-shadow: 1px 2px 6px var(--color-shadow-primary);
+
+ .no-reduce-motion & {
+ transition: opacity 0.1s ease;
+ }
+
+ &.active {
+ opacity: 1;
+ cursor: grabbing;
+ }
+ }
+
+ &:hover {
+ .video-player__seek__handle {
+ opacity: 1;
+ }
+ }
+ }
+
+ &__hotkey-indicator {
+ position: absolute;
+ top: 50%;
+ inset-inline-start: 50%;
+ transform: translate(-50%, -50%);
+ color: var(--color-text-on-media);
+ background: var(--color-bg-media);
+ backdrop-filter: $backdrop-blur-filter;
+ border-radius: 8px;
+ padding: 16px 24px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ gap: 8px;
+
+ &__label {
+ font-size: 15px;
+ font-weight: 500;
+ }
+ }
+
+ &.detailed,
+ &.fullscreen {
+ .video-player__buttons {
+ .player-button {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ }
+ }
+ }
+}
+
+.gifv {
+ position: relative;
+
+ canvas {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ }
+
+ video {
+ max-width: 100vw;
+ max-height: 80vh;
+ }
+}
+
+.scrollable .account-card {
+ margin: 10px;
+}
+
+.scrollable .account-card__title__avatar {
+ img {
+ border: 2px solid var(--color-bg-primary);
+ }
+
+ .account__avatar {
+ border: none;
+ }
+}
+
+.scrollable .account-card__header {
+ img {
+ border-radius: 4px;
+ }
+}
+
+.scrollable .account-card__bio::after {
+ background: linear-gradient(to left, var(--color-bg-primary), transparent);
+}
+
+.account-gallery__container {
+ display: grid;
+ grid-template-columns: 1fr 1fr 1fr;
+ gap: 2px;
+
+ .media-gallery__item {
+ border-radius: 0;
+ }
+
+ .load-more,
+ .timeline-hint {
+ grid-column: span 3;
+ }
+}
+
+.notification__filter-bar,
+.account__section-headline {
+ border: 1px solid var(--color-border-primary);
+ border-top: 0;
+ cursor: default;
+ display: flex;
+ flex-shrink: 0;
+
+ @media screen and (max-width: ($no-gap-breakpoint - 1px)) {
+ border-right: 0;
+ border-left: 0;
+ }
+
+ button {
+ background: transparent;
+ border: 0;
+ margin: 0;
+ }
+
+ button,
+ a {
+ display: block;
+ flex: 1 1 auto;
+ color: var(--color-text-secondary);
+ padding: 15px 0;
+ font-size: 14px;
+ font-weight: 500;
+ text-align: center;
+ text-decoration: none;
+ position: relative;
+
+ &.active {
+ color: var(--color-text-primary);
+
+ &::before {
+ display: block;
+ content: '';
+ position: absolute;
+ bottom: -1px;
+ left: 50%;
+ transform: translateX(-50%);
+ width: 40px;
+ height: 3px;
+ border-radius: 4px 4px 0 0;
+ background: var(--color-text-brand);
+ }
+ }
+ }
+
+ .scrollable & {
+ border-left: 0;
+ border-right: 0;
+ }
+}
+
+.filter-form {
+ border-bottom: 1px solid var(--color-border-primary);
+
+ &__column {
+ display: flex;
+ flex-direction: column;
+ gap: 15px;
+ padding: 15px;
+ }
+
+ .radio-button {
+ display: flex;
+ }
+}
+
+.column-settings__row .radio-button {
+ display: flex;
+}
+
+.radio-button,
+.check-box {
+ font-size: 14px;
+ position: relative;
+ display: inline-flex;
+ align-items: center;
+ line-height: 18px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ cursor: pointer;
+ gap: 10px;
+ color: var(--color-text-primary);
+
+ input[type='radio'],
+ input[type='checkbox'] {
+ display: none;
+ }
+
+ &__input {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+ border: 2px solid var(--color-text-primary);
+ box-sizing: border-box;
+ width: 20px;
+ height: 20px;
+ flex: 0 0 auto;
+ border-radius: 50%;
+
+ &.checked,
+ &.indeterminate {
+ border-color: var(--color-text-brand);
+ }
+
+ .icon {
+ width: 18px;
+ height: 18px;
+ }
+ }
+}
+
+.radio-button__input.checked::before {
+ content: '';
+ display: block;
+ border-radius: 50%;
+ width: calc(100% - 4px);
+ height: calc(100% - 4px);
+ background: var(--color-text-brand);
+}
+
+.check-box {
+ &__input {
+ width: 18px;
+ height: 18px;
+ border-radius: 2px;
+
+ &.checked,
+ &.indeterminate {
+ background: var(--color-bg-brand-base);
+ color: var(--color-text-on-brand-base);
+ }
+ }
+}
+
+noscript {
+ text-align: center;
+
+ img {
+ width: 200px;
+ opacity: 0.5;
+ animation: flicker 4s infinite;
+ }
+
+ div {
+ font-size: 14px;
+ margin: 30px auto;
+ color: var(--color-text-primary);
+ max-width: 400px;
+
+ a {
+ color: var(--color-text-brand);
+ text-decoration: underline;
+
+ &:hover {
+ text-decoration: none;
+ }
+ }
+ }
+}
+
+@keyframes flicker {
+ 0% {
+ opacity: 1;
+ }
+
+ 30% {
+ opacity: 0.75;
+ }
+
+ 100% {
+ opacity: 1;
+ }
+}
+
+.moved-account-banner,
+.follow-request-banner,
+.account-memorial-banner {
+ padding: 20px;
+ background: var(--color-bg-tertiary);
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+
+ &__message {
+ color: var(--color-text-secondary);
+ padding: 8px 0;
+ padding-top: 0;
+ padding-bottom: 4px;
+ font-size: 14px;
+ font-weight: 500;
+ text-align: center;
+ margin-bottom: 16px;
+ }
+
+ &__action {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ gap: 15px;
+ width: 100%;
+ }
+
+ .detailed-status__display-name {
+ margin-bottom: 0;
+ }
+}
+
+.follow-request-banner .button {
+ width: 100%;
+}
+
+.account-memorial-banner__message {
+ margin-bottom: 0;
+}
+
+.column-inline-form {
+ padding: 15px;
+ display: flex;
+ justify-content: flex-start;
+ gap: 15px;
+ align-items: center;
+ border: 1px solid var(--color-border-primary);
+ border-top: 0;
+
+ label {
+ flex: 1 1 auto;
+
+ input {
+ width: 100%;
+ }
+ }
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ border-left: 0;
+ border-right: 0;
+ }
+}
+
+.drawer__backdrop {
+ cursor: pointer;
+ position: absolute;
+ top: 0;
+ inset-inline-start: 0;
+ width: 100%;
+ height: 100%;
+ background: rgb(from var(--color-bg-overlay) r g b / 50%);
+}
+
+.focal-point {
+ position: relative;
+ cursor: grab;
+ overflow: hidden;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ &.dragging {
+ cursor: grabbing;
+ }
+
+ &__reticle {
+ position: absolute;
+ width: 100px;
+ height: 100px;
+ transform: translate(-50%, -50%);
+ border: 2px solid var(--color-text-on-media);
+ border-radius: 50%;
+ box-shadow: 0 0 0 9999em var(--color-shadow-primary);
+ pointer-events: none;
+ }
+}
+
+.account__header__content {
+ color: var(--color-text-secondary);
+ font-size: 14px;
+ font-weight: 400;
+ overflow: hidden;
+ word-break: normal;
+ overflow-wrap: break-word;
+
+ p {
+ margin-bottom: 20px;
+ unicode-bidi: plaintext;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ a {
+ color: inherit;
+ text-decoration: underline;
+
+ &:hover {
+ text-decoration: none;
+ }
+ }
+}
+
+.account__header {
+ overflow: hidden;
+ container: account-header / inline-size;
+
+ &.inactive {
+ opacity: 0.5;
+
+ .account__header__image,
+ .account__avatar {
+ filter: grayscale(100%);
+ }
+ }
+
+ &__info {
+ position: absolute;
+ top: 20px;
+ inset-inline-end: 20px;
+ display: flex;
+ flex-wrap: wrap;
+ gap: 2px;
+ }
+
+ &__image {
+ overflow: hidden;
+ height: 145px;
+ position: relative;
+ background: var(--color-bg-tertiary);
+ border-bottom: 1px solid var(--color-border-primary);
+
+ img {
+ object-fit: cover;
+ display: block;
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ }
+ }
+
+ &__bar {
+ position: relative;
+ padding: 0 20px;
+ padding-bottom: 16px; // glitch-soc addition for the different tabs design
+ border-bottom: 1px solid var(--color-border-primary);
+
+ .avatar {
+ display: block;
+ flex: 0 0 auto;
+
+ .account__avatar {
+ background: var(--color-bg-primary);
+ border: 1px solid var(--color-border-primary);
+ border-radius: var(--avatar-border-radius);
+ }
+ }
+ }
+
+ &__badges {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 8px;
+
+ .account-role {
+ line-height: unset;
+ }
+ }
+
+ &__tabs {
+ display: flex;
+ align-items: flex-start;
+ justify-content: space-between;
+ margin-top: -55px;
+ padding-top: 10px;
+ gap: 8px;
+ overflow: hidden;
+ margin-inline-start: -2px; // aligns the pfp with content below
+
+ &__name {
+ margin-top: 16px;
+ margin-bottom: 16px;
+
+ .emojione {
+ width: 22px;
+ height: 22px;
+ }
+
+ h1 {
+ font-size: 17px;
+ line-height: 22px;
+ color: var(--color-text-primary);
+ font-weight: 600;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+
+ small {
+ display: flex;
+ align-items: center;
+ gap: 4px;
+ font-size: 14px;
+ line-height: 20px;
+ color: var(--color-text-secondary);
+ font-weight: 400;
+ overflow: hidden;
+ text-overflow: ellipsis;
+
+ span {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ user-select: all;
+ }
+
+ .icon-lock {
+ height: 18px;
+ width: 18px;
+ }
+ }
+ }
+ }
+
+ .spacer {
+ flex: 1 1 auto;
+ }
+ }
+
+ &__follow-button {
+ flex-grow: 1;
+ }
+
+ &__buttons {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+
+ $button-breakpoint: 420px;
+ $button-fallback-breakpoint: #{$button-breakpoint} + 55px;
+
+ &--desktop {
+ margin-top: 55px;
+
+ @container (width < #{$button-breakpoint}) {
+ display: none;
+ }
+
+ @supports (not (container-type: inline-size)) {
+ @media (max-width: #{$button-fallback-breakpoint}) {
+ display: none;
+ }
+ }
+ }
+
+ &--mobile {
+ margin-block: 16px;
+
+ @container (width >= #{$button-breakpoint}) {
+ display: none;
+ }
+
+ @supports (not (container-type: inline-size)) {
+ @media (min-width: (#{$button-fallback-breakpoint} + 1px)) {
+ display: none;
+ }
+ }
+ }
+
+ .button {
+ flex-shrink: 1;
+ white-space: nowrap;
+ min-width: 80px;
+ }
+
+ .icon-button {
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+ box-sizing: content-box;
+ padding: 5px;
+
+ .icon {
+ width: 24px;
+ height: 24px;
+ }
+
+ &.copied {
+ border-color: var(--color-text-success);
+ }
+ }
+ }
+
+ &__bio {
+ .account__header__content {
+ color: var(--color-text-primary);
+ }
+
+ .account__header__fields {
+ margin: 0;
+ margin-top: 16px;
+ border-radius: 4px;
+ border: 1px solid var(--color-border-primary);
+
+ dl {
+ display: block;
+ padding: 8px 16px; // glitch-soc: padding purposefuly reduced
+ border-bottom-color: var(--color-border-primary);
+ }
+
+ dd,
+ dt {
+ font-size: 13px;
+ line-height: 18px;
+ padding: 0;
+ text-align: initial;
+ }
+
+ dt {
+ width: auto;
+ background: transparent;
+ text-transform: uppercase;
+ color: var(--color-text-tertiary);
+ }
+
+ dd {
+ color: var(--color-text-secondary);
+ }
+
+ a {
+ color: var(--color-text-brand);
+ }
+
+ .icon {
+ width: 18px;
+ height: 18px;
+ }
+
+ .verified {
+ border: 1px solid var(--color-text-success);
+ margin-top: -1px;
+ margin-inline: -1px;
+
+ &:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ }
+
+ &:last-child {
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ margin-bottom: -1px;
+ }
+
+ dt,
+ dd {
+ color: var(--color-text-success);
+ }
+
+ dd {
+ display: flex;
+ align-items: center;
+ gap: 4px;
+
+ span {
+ display: flex;
+ }
+ }
+
+ a {
+ color: var(--color-text-success);
+ }
+ }
+ }
+ }
+
+ &__extra {
+ margin-top: 16px;
+
+ &__links {
+ font-size: 14px;
+ color: var(--color-text-secondary);
+ margin: 0 -10px;
+ padding-top: 16px;
+ padding-bottom: 10px;
+
+ a {
+ display: inline-block;
+ color: var(--color-text-secondary);
+ text-decoration: none;
+ padding: 5px 10px;
+ font-weight: 500;
+
+ strong {
+ font-weight: 700;
+ color: var(--color-text-primary);
+ }
+ }
+ }
+ }
+
+ &__account-note {
+ color: var(--color-text-primary);
+ font-size: 14px;
+ font-weight: 400;
+ margin-bottom: 10px;
+
+ &__loading-indicator-wrapper {
+ position: relative;
+ height: 37px;
+
+ .loading-indicator {
+ left: 10px;
+ }
+
+ .circular-progress {
+ width: 14px;
+ height: 14px;
+ }
+ }
+
+ label {
+ display: block;
+ font-size: 12px;
+ font-weight: 500;
+ color: var(--color-text-secondary);
+ text-transform: uppercase;
+ margin-bottom: 5px;
+ }
+
+ textarea {
+ display: block;
+ box-sizing: border-box;
+ width: calc(100% + 20px);
+ color: var(--color-text-primary);
+ background: transparent;
+ padding: 10px;
+ margin: 0 -10px;
+ font-family: inherit;
+ font-size: 14px;
+ resize: none;
+ border: 0;
+ outline: 0;
+ border-radius: 4px;
+
+ &::placeholder {
+ color: var(--color-text-tertiary);
+ opacity: 1;
+ }
+
+ &:focus {
+ background: var(--color-bg-brand-softer);
+ }
+ }
+ }
+
+ &__familiar-followers {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ margin-block: 16px;
+ color: var(--color-text-secondary);
+
+ a:any-link {
+ font-weight: 500;
+ text-decoration: none;
+ color: var(--color-text-primary);
+ }
+ }
+}
+
+.account__contents {
+ overflow: hidden;
+}
+
+.account__details {
+ display: flex;
+ flex-wrap: wrap;
+ column-gap: 1em;
+}
+
+.verified-badge {
+ display: inline-flex;
+ align-items: center;
+ color: var(--color-text-success);
+ gap: 4px;
+ overflow: hidden;
+ white-space: nowrap;
+
+ > span {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ a {
+ color: inherit;
+ font-weight: 500;
+ text-decoration: none;
+ }
+
+ .icon {
+ width: 16px;
+ height: 16px;
+ }
+}
+
+.trends {
+ &__item {
+ display: flex;
+ align-items: center;
+ padding: 16px;
+ border-bottom: 1px solid var(--color-border-primary);
+ gap: 8px;
+
+ &__name {
+ flex: 1 1 auto;
+ color: var(--color-text-secondary);
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+
+ strong {
+ font-weight: 500;
+ }
+
+ a {
+ color: var(--color-text-primary);
+ text-decoration: none;
+ font-size: 14px;
+ font-weight: 500;
+ display: block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+
+ &:hover,
+ &:focus,
+ &:active {
+ span {
+ text-decoration: underline;
+ }
+ }
+ }
+ }
+
+ &__current {
+ flex: 0 0 auto;
+ font-size: 24px;
+ font-weight: 500;
+ text-align: end;
+ color: var(--color-text-primary);
+ text-decoration: none;
+ }
+
+ &__sparkline {
+ flex: 0 0 auto;
+ width: 50px;
+
+ path:first-child {
+ fill: var(--color-graph-primary-fill) !important;
+ fill-opacity: 1 !important;
+ }
+
+ path:last-child {
+ stroke: var(--color-graph-primary-stroke) !important;
+ fill: none !important;
+ }
+ }
+
+ &--requires-review {
+ .trends__item__name {
+ color: var(--color-text-warning);
+
+ a {
+ color: var(--color-text-warning);
+ }
+ }
+
+ .trends__item__current {
+ color: var(--color-text-warning);
+ }
+
+ .trends__item__sparkline {
+ path:first-child {
+ fill: var(--color-graph-warning-fill) !important;
+ }
+
+ path:last-child {
+ stroke: var(--color-graph-warning-stroke) !important;
+ }
+ }
+ }
+
+ &--disabled {
+ .trends__item__name {
+ color: var(--color-text-disabled);
+
+ a {
+ color: var(--color-text-disabled);
+ }
+ }
+
+ .trends__item__current {
+ color: var(--color-text-disabled);
+ }
+
+ .trends__item__sparkline {
+ path:first-child {
+ fill: var(--color-graph-disabled-fill) !important;
+ }
+
+ path:last-child {
+ stroke: var(--color-graph-disabled-stroke) !important;
+ }
+ }
+ }
+ }
+
+ &--compact &__item {
+ padding: 12px;
+ }
+}
+
+.conversation {
+ display: flex;
+ border-bottom: 1px solid var(--color-border-primary);
+ padding: 5px;
+ padding-bottom: 0;
+
+ &:focus {
+ background: var(--color-bg-secondary);
+ outline: 0;
+ }
+
+ &__avatar {
+ flex: 0 0 auto;
+ padding: 10px;
+ padding-top: 12px;
+ position: relative;
+ cursor: pointer;
+ }
+
+ &__unread {
+ display: inline-block;
+ background: var(--color-text-brand);
+ border-radius: 50%;
+ width: 0.625rem;
+ height: 0.625rem;
+ margin: -0.1ex 0.15em 0.1ex;
+ }
+
+ &__content {
+ flex: 1 1 auto;
+ padding: 10px 5px;
+ padding-inline-end: 15px;
+ overflow: hidden;
+
+ &__info {
+ overflow: hidden;
+ display: flex;
+ flex-direction: row-reverse;
+ justify-content: space-between;
+ }
+
+ &__relative-time {
+ font-size: 15px;
+ color: var(--color-text-secondary);
+ padding-inline-start: 15px;
+ }
+
+ &__names {
+ color: var(--color-text-secondary);
+ font-size: 15px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ margin-bottom: 4px;
+ flex-basis: 90px;
+ flex-grow: 1;
+
+ a {
+ color: var(--color-text-primary);
+ text-decoration: none;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: underline;
+ }
+ }
+ }
+
+ .status__content {
+ margin: 0;
+ }
+ }
+}
+
+.announcements {
+ width: calc(100% - 124px);
+ flex: 0 0 auto;
+ position: relative;
+ overflow: hidden;
+
+ .layout-multiple-columns & {
+ width: 100%;
+ }
+
+ @media screen and (max-width: (124px + 300px)) {
+ width: 100%;
+ }
+
+ &__root {
+ background: var(--color-bg-brand-softer);
+ font-size: 13px;
+ display: flex;
+ align-items: flex-end;
+ }
+
+ &__mastodon {
+ width: 124px;
+ flex: 0 0 auto;
+
+ @media screen and (max-width: (124px + 300px)) {
+ display: none;
+ }
+ }
+
+ &__slides {
+ display: flex;
+ flex-wrap: nowrap;
+ align-items: start;
+ }
+
+ &__slide {
+ box-sizing: border-box;
+ width: 100%;
+ flex: 0 0 100%;
+ padding: 15px;
+ position: relative;
+ font-size: 15px;
+ line-height: 20px;
+ overflow-wrap: break-word;
+ font-weight: 400;
+ max-height: 50vh;
+ overflow: hidden;
+ flex-direction: column;
+ }
+
+ &__range {
+ display: block;
+ font-weight: 500;
+ margin-bottom: 10px;
+ padding-inline-end: 18px;
+ }
+
+ &__unread {
+ position: absolute;
+ top: 19px;
+ inset-inline-end: 19px;
+ display: block;
+ background: var(--color-text-brand);
+ border-radius: 50%;
+ width: 0.625rem;
+ height: 0.625rem;
+ }
+
+ &__pagination {
+ padding: 15px;
+ color: var(--color-text-secondary);
+ position: absolute;
+ bottom: 3px;
+ inset-inline-end: 0;
+ display: flex;
+ align-items: center;
+ z-index: 1;
+ }
+}
+
+.layout-multiple-columns .announcements__mastodon {
+ display: none;
+}
+
+.layout-multiple-columns .announcements__container {
+ width: 100%;
+}
+
+.reactions-bar {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ margin-top: 15px;
+ margin-inline-start: -2px;
+ width: calc(100% - (90px - 33px));
+
+ &__item {
+ flex-shrink: 0;
+ background: var(--color-bg-brand-softer);
+ color: color-mix(
+ in oklab,
+ var(--color-text-primary),
+ var(--color-text-secondary)
+ );
+ border: 1px solid var(--color-border-on-bg-brand-softer);
+ border-radius: 3px;
+ box-sizing: border-box;
+ margin: 2px;
+ cursor: pointer;
+ user-select: none;
+ padding: 0 6px;
+ display: flex;
+ align-items: center;
+ transition: all 100ms ease-in;
+ transition-property: background-color, color;
+
+ &__emoji {
+ display: block;
+ margin: 3px 0;
+ width: 16px;
+ height: 16px;
+
+ img {
+ display: block;
+ margin: 0;
+ width: 100%;
+ height: 100%;
+ min-width: auto;
+ min-height: auto;
+ object-fit: contain;
+ }
+ }
+
+ &__count {
+ display: block;
+ min-width: 9px;
+ font-size: 13px;
+ font-weight: 500;
+ text-align: center;
+ margin-inline-start: 6px;
+ }
+
+ &:hover,
+ &:focus,
+ &:active {
+ color: var(--color-text-primary);
+ background: var(--color-bg-brand-soft);
+ transition: all 200ms ease-out;
+ transition-property: background-color, color;
+ }
+
+ &.active {
+ color: var(--color-text-brand);
+ background-color: var(--color-bg-brand-softer);
+ border-color: var(--color-text-brand);
+ transition: all 100ms ease-in;
+ transition-property: background-color, color;
+ }
+ }
+
+ .emoji-picker-dropdown {
+ display: flex;
+ margin: 2px;
+ }
+
+ &:hover .emoji-button {
+ opacity: 0.85;
+ }
+
+ .emoji-button {
+ color: var(--color-text-secondary);
+ margin: 0;
+ font-size: 16px;
+ width: auto;
+ flex-shrink: 0;
+ padding: 0 6px;
+ height: 22px;
+ display: flex;
+ align-items: center;
+ opacity: 0.5;
+ transition: all 100ms ease-in;
+ transition-property: background-color, color;
+
+ &:hover,
+ &:active,
+ &:focus {
+ opacity: 1;
+ color: color-mix(
+ in oklab,
+ var(--color-text-primary),
+ var(--color-text-secondary)
+ );
+ transition: all 200ms ease-out;
+ transition-property: background-color, color;
+ }
+ }
+
+ &--empty {
+ .emoji-button {
+ padding: 0;
+ }
+ }
+}
+
+.notification,
+.status__wrapper,
+.conversation {
+ position: relative;
+
+ // When scrolling these elements into view, take into account
+ // the column header height
+ scroll-margin-top: var(--column-header-height, 0);
+
+ &.unread {
+ &::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ inset-inline-start: 0;
+ width: 100%;
+ height: 100%;
+ border-inline-start: 4px solid var(--color-text-brand);
+ pointer-events: none;
+ }
+ }
+}
+
+.picture-in-picture {
+ position: fixed;
+ bottom: 20px;
+ inset-inline-end: 20px;
+ width: 300px;
+ box-shadow: var(--dropdown-shadow);
+
+ // glitch: feature to chose which side the pop-in player is displayed
+ &.left {
+ inset-inline-end: unset;
+ inset-inline-start: 20px;
+ }
+
+ &__footer {
+ border-radius: 0 0 4px 4px;
+ background: var(--color-bg-secondary);
+ backdrop-filter: $backdrop-blur-filter;
+ border: 1px solid var(--color-border-primary);
+ border-top: 0;
+ padding: 12px;
+ display: flex;
+ justify-content: space-between;
+ }
+
+ &__header {
+ border-radius: 4px 4px 0 0;
+ background: var(--color-bg-secondary);
+ backdrop-filter: $backdrop-blur-filter;
+ border: 1px solid var(--color-border-primary);
+ border-bottom: 0;
+ padding: 12px;
+ display: flex;
+ justify-content: space-between;
+
+ .icon-button {
+ padding: 6px;
+ }
+
+ &__account {
+ display: flex;
+ text-decoration: none;
+ overflow: hidden;
+ }
+
+ .account__avatar {
+ margin-inline-end: 8px;
+ }
+
+ .display-name {
+ color: var(--color-text-primary);
+ text-decoration: none;
+
+ strong,
+ span {
+ display: block;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ }
+
+ span {
+ color: var(--color-text-secondary);
+ }
+ }
+ }
+
+ .video-player,
+ .audio-player {
+ border-radius: 0;
+ }
+}
+
+.picture-in-picture-placeholder {
+ border-radius: 8px;
+ box-sizing: border-box;
+ border: 1px dashed var(--color-border-primary);
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ margin-top: 16px;
+ font-size: 15px;
+ line-height: 21px;
+ font-weight: 500;
+ cursor: pointer;
+ color: var(--color-text-tertiary);
+ aspect-ratio: 16 / 9;
+
+ .icon {
+ width: 48px;
+ height: 48px;
+ margin-bottom: 8px;
+ }
+
+ &:hover,
+ &:active,
+ &:focus {
+ color: var(--color-text-secondary);
+ }
+
+ &:focus-visible {
+ outline: var(--outline-focus-default);
+ border-color: transparent;
+ }
+}
+
+.notifications-permission-banner {
+ padding: 30px;
+ border-bottom: 1px solid var(--color-border-primary);
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+
+ &__close {
+ position: absolute;
+ top: 10px;
+ inset-inline-end: 10px;
+ }
+
+ h2 {
+ font-size: 16px;
+ font-weight: 500;
+ margin-bottom: 15px;
+ text-align: center;
+ }
+
+ p {
+ color: var(--color-text-secondary);
+ margin-bottom: 15px;
+ text-align: center;
+
+ .icon {
+ width: 20px;
+ height: 20px;
+ vertical-align: middle;
+ }
+ }
+}
+
+.explore__search-header {
+ justify-content: center;
+ align-items: center;
+ border: 1px solid var(--color-border-primary);
+ border-top: 0;
+ border-bottom: 0;
+ padding: 16px;
+ padding-bottom: 8px;
+
+ .search {
+ width: 100%;
+ margin-bottom: 0;
+ }
+
+ .search__input {
+ padding-block: 12px;
+ padding-inline-end: 30px;
+ }
+
+ .search__popout {
+ border: 1px solid var(--color-border-primary);
+ }
+
+ .search__icon {
+ top: 12px;
+ inset-inline-end: 12px;
+ color: var(--color-text-tertiary);
+ }
+}
+
+.layout-single-column .explore__search-header {
+ display: none;
+
+ @media screen and (max-width: ($no-gap-breakpoint - 1px)) {
+ display: flex;
+ }
+}
+
+.explore__search-results {
+ flex: 1 1 auto;
+ display: flex;
+ flex-direction: column;
+
+ @media screen and (min-width: $no-gap-breakpoint) {
+ border: 1px solid var(--color-border-primary);
+ border-top: 0;
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ }
+}
+
+.story {
+ display: flex;
+ align-items: center;
+ color: var(--color-text-primary);
+ padding: 16px;
+ border-bottom: 1px solid var(--color-border-primary);
+ gap: 16px;
+
+ &:last-child {
+ border-bottom: 0;
+ }
+
+ &__details {
+ flex: 1 1 auto;
+
+ &__publisher {
+ color: var(--color-text-secondary);
+ margin-bottom: 8px;
+ font-size: 14px;
+ line-height: 20px;
+ }
+
+ &__title {
+ display: block;
+ font-size: 19px;
+ line-height: 24px;
+ font-weight: 500;
+ margin-bottom: 8px;
+ text-decoration: none;
+ color: var(--color-text-primary);
+
+ &:hover,
+ &:active,
+ &:focus {
+ color: var(--color-text-brand);
+ }
+ }
+
+ &__shared {
+ display: flex;
+ align-items: baseline;
+ color: var(--color-text-secondary);
+ gap: 8px;
+ justify-content: space-between;
+ font-size: 14px;
+ line-height: 20px;
+
+ &__pill {
+ background: var(--color-bg-tertiary);
+ border-radius: 4px;
+ color: inherit;
+ text-decoration: none;
+ padding: 4px 12px;
+ font-size: 12px;
+ font-weight: 500;
+ line-height: 16px;
+ flex-shrink: 0;
+ }
+
+ &__author-link {
+ display: inline-flex;
+ align-items: center;
+ gap: 4px;
+ color: var(--color-text-primary);
+ font-weight: 500;
+ text-decoration: none;
+
+ &:hover,
+ &:active,
+ &:focus {
+ color: var(--color-text-brand);
+ }
+ }
+ }
+
+ strong {
+ font-weight: 500;
+ }
+ }
+
+ &__thumbnail {
+ flex: 0 0 auto;
+ position: relative;
+ width: 120px;
+ aspect-ratio: 1;
+
+ .skeleton {
+ width: 100%;
+ height: 100%;
+ }
+
+ img {
+ border-radius: 8px;
+ display: block;
+ margin: 0;
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ }
+
+ &__preview {
+ border-radius: 8px;
+ display: block;
+ margin: 0;
+ width: 100%;
+ height: 100%;
+ object-fit: fill;
+ position: absolute;
+ top: 0;
+ inset-inline-start: 0;
+ z-index: 0;
+
+ &--hidden {
+ display: none;
+ }
+ }
+ }
+
+ &.expanded {
+ flex-direction: column;
+
+ .story__thumbnail {
+ order: 1;
+ width: 100%;
+ height: auto;
+ aspect-ratio: 1.91 / 1;
+ }
+
+ .story__details {
+ order: 2;
+ width: 100%;
+ flex: 0 0 auto;
+ }
+ }
+}
+
+.server-banner {
+ &__introduction {
+ font-size: 15px;
+ line-height: 22px;
+ color: var(--color-text-secondary);
+ margin-bottom: 20px;
+
+ strong {
+ font-weight: 700;
+ }
+
+ a {
+ color: inherit;
+ text-decoration: underline;
+
+ &:hover,
+ &:active,
+ &:focus {
+ text-decoration: none;
+ }
+ }
+ }
+
+ &__hero {
+ display: block;
+ border-radius: 4px;
+ width: 100%;
+ height: auto;
+ margin-bottom: 20px;
+ aspect-ratio: 1.9;
+ border: 0;
+ background: var(--color-bg-tertiary);
+ object-fit: cover;
+ }
+
+ &__description {
+ font-size: 15px;
+ line-height: 22px;
+ color: var(--color-text-secondary);
+ margin-bottom: 20px;
+ }
+
+ &__meta {
+ display: flex;
+ gap: 10px;
+ max-width: 100%;
+
+ &__column {
+ flex: 0 0 auto;
+ width: calc(50% - 5px);
+ overflow: hidden;
+ }
+ }
+
+ &__number {
+ font-weight: 600;
+ color: var(--color-text-primary);
+ font-size: 14px;
+ }
+
+ &__number-label {
+ color: var(--color-text-secondary);
+ font-weight: 500;
+ font-size: 14px;
+ }
+
+ h4 {
+ text-transform: uppercase;
+ color: var(--color-text-secondary);
+ margin-bottom: 10px;
+ font-weight: 600;
+ }
+
+ .account {
+ padding: 0;
+ border: 0;
+ }
+
+ .account__avatar-wrapper {
+ margin-inline-start: 0;
+ }
+
+ .spacer {
+ margin: 10px 0;
+ }
+}
+
+.safety-action-modal,
+.interaction-modal {
+ max-width: 100vw;
+ width: 600px;
+ overflow-y: auto;
+}
+
+.interaction-modal {
+ overflow: visible;
+ position: relative;
+ display: block;
+ border-radius: 16px;
+ background: var(--color-bg-primary);
+ backdrop-filter: $backdrop-blur-filter;
+ border: 1px solid var(--color-border-primary);
+ padding: 24px;
+ box-sizing: border-box;
+
+ @media screen and (max-width: $mobile-breakpoint) {
+ border-radius: 16px 16px 0 0;
+ border-bottom: 0;
+ padding-bottom: 32px;
+ }
+
+ h3 {
+ font-size: 22px;
+ line-height: 33px;
+ font-weight: 700;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 8px;
+ }
+
+ p {
+ text-align: center;
+ font-size: 17px;
+ line-height: 22px;
+ color: var(--color-text-secondary);
+
+ strong {
+ color: var(--color-text-primary);
+ font-weight: 700;
+ }
+ }
+
+ p.hint {
+ margin-bottom: 14px;
+ font-size: 14px;
+ }
+
+ &__lead {
+ margin-bottom: 20px;
+
+ h3 {
+ margin-bottom: 15px;
+ }
+ }
+
+ &__login {
+ position: relative;
+ margin-bottom: 20px;
+
+ &__input {
+ @include search-input;
+
+ border: 1px solid var(--color-border-primary);
+ padding: 4px 6px;
+ color: var(--color-text-primary);
+ font-size: 16px;
+ line-height: 18px;
+ display: flex;
+ align-items: center;
+
+ input {
+ background: transparent;
+ color: inherit;
+ font: inherit;
+ border: 0;
+ padding: 15px - 4px 15px - 6px;
+ flex: 1 1 auto;
+ min-width: 0;
+
+ &::placeholder {
+ color: color-mix(
+ in oklab,
+ var(--color-text-primary),
+ var(--color-text-secondary)
+ );
+ }
+
+ &:focus {
+ outline: 0;
+ }
+ }
+
+ .button {
+ flex: 0 0 auto;
+ }
+ }
+
+ .search__popout {
+ margin-top: -1px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ border: 1px solid var(--color-border-primary);
+ }
+
+ &.invalid &__input {
+ border-color: var(--color-text-error);
+ }
+
+ &.expanded .search__popout {
+ display: block;
+ }
+
+ &.expanded &__input {
+ border-radius: 4px 4px 0 0;
+ }
+ }
+
+ &__choices {
+ display: flex;
+ gap: 40px;
+
+ &__choice {
+ flex: 1;
+ box-sizing: border-box;
+
+ h3 {
+ margin-bottom: 20px;
+ }
+
+ p {
+ color: var(--color-text-secondary);
+ margin-bottom: 20px;
+ font-size: 15px;
+ }
+
+ .button {
+ margin-bottom: 10px;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+ }
+ }
+
+ @media screen and (max-width: ($no-gap-breakpoint - 1px)) {
+ &__choices {
+ flex-direction: column;
+
+ &__choice {
+ margin-top: 40px;
+ }
+ }
+ }
+
+ .link-button {
+ font-size: inherit;
+ display: inline;
+ }
+}
+
+.privacy-policy {
+ padding: 20px;
+
+ @media screen and (min-width: $no-gap-breakpoint) {
+ border-radius: 4px;
+ }
+
+ &__body {
+ margin-top: 20px;
+ }
+}
+
+.prose {
+ color: var(--color-text-primary);
+ font-size: 15px;
+ line-height: 22px;
+
+ p,
+ ul,
+ ol {
+ margin-top: 1.25em;
+ margin-bottom: 1.25em;
+ }
+
+ img {
+ margin-top: 2em;
+ margin-bottom: 2em;
+ max-width: 100%;
+ }
+
+ video {
+ margin-top: 2em;
+ margin-bottom: 2em;
+ max-width: 100%;
+ }
+
+ figure {
+ margin-top: 2em;
+ margin-bottom: 2em;
+
+ figcaption {
+ font-size: 0.875em;
+ line-height: 1.4285714;
+ margin-top: 0.8571429em;
+ }
+ }
+
+ figure > * {
+ margin-top: 0;
+ margin-bottom: 0;
+ }
+
+ h1 {
+ font-size: 1.5em;
+ margin-top: 0;
+ margin-bottom: 1em;
+ line-height: 1.33;
+ }
+
+ h2 {
+ font-size: 1.25em;
+ margin-top: 1.6em;
+ margin-bottom: 0.6em;
+ line-height: 1.6;
+ }
+
+ h3,
+ h4,
+ h5,
+ h6 {
+ margin-top: 1.5em;
+ margin-bottom: 0.5em;
+ line-height: 1.5;
+ }
+
+ ol {
+ counter-reset: list-counter;
+ }
+
+ li {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+
+ ol > li {
+ counter-increment: list-counter;
+
+ &::before {
+ content: counter(list-counter) '.';
+ position: absolute;
+ inset-inline-start: 0;
+ }
+ }
+
+ ul > li::before {
+ content: '';
+ position: absolute;
+ background-color: var(--color-text-secondary);
+ border-radius: 50%;
+ width: 0.375em;
+ height: 0.375em;
+ top: 0.5em;
+ inset-inline-start: 0.25em;
+ }
+
+ ul > li,
+ ol > li {
+ position: relative;
+ padding-inline-start: 1.75em;
+ }
+
+ & > ul > li p {
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+ }
+
+ & > ul > li > *:first-child {
+ margin-top: 1.25em;
+ }
+
+ & > ul > li > *:last-child {
+ margin-bottom: 1.25em;
+ }
+
+ & > ol > li > *:first-child {
+ margin-top: 1.25em;
+ }
+
+ & > ol > li > *:last-child {
+ margin-bottom: 1.25em;
+ }
+
+ ul ul,
+ ul ol,
+ ol ul,
+ ol ol {
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+ }
+
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6,
+ strong,
+ b {
+ color: var(--color-text-primary);
+ font-weight: 700;
+ }
+
+ em,
+ i {
+ font-style: italic;
+ }
+
+ a {
+ color: var(--color-text-brand);
+ text-decoration: underline;
+
+ &:focus,
+ &:hover,
+ &:active {
+ text-decoration: none;
+ }
+ }
+
+ code {
+ font-size: 0.875em;
+ background: var(--color-bg-secondary);
+ border-radius: 4px;
+ padding: 0.2em 0.3em;
+ }
+
+ hr {
+ border: 0;
+ border-top: 1px solid var(--color-border-primary);
+ margin-top: 3em;
+ margin-bottom: 3em;
+ }
+
+ hr + * {
+ margin-top: 0;
+ }
+
+ h2 + * {
+ margin-top: 0;
+ }
+
+ h3 + * {
+ margin-top: 0;
+ }
+
+ h4 + *,
+ h5 + *,
+ h6 + * {
+ margin-top: 0;
+ }
+
+ & > :first-child {
+ margin-top: 0;
+ }
+
+ & > :last-child {
+ margin-bottom: 0;
+ }
+}
+
+.dismissable-banner,
+.warning-banner {
+ position: relative;
+ margin: 10px;
+ margin-bottom: 5px;
+ border-radius: 8px;
+ border: 1px solid var(--color-border-on-bg-brand-softer);
+ background: var(--color-bg-brand-softer);
+ overflow: hidden;
+ flex-shrink: 0;
+
+ &__background-image {
+ width: 125%;
+ position: absolute;
+ bottom: -25%;
+ inset-inline-end: -25%;
+ z-index: -1;
+ opacity: 0.15;
+ mix-blend-mode: luminosity;
+ }
+
+ &__message {
+ flex: 1 1 auto;
+ padding: 15px;
+ font-size: 15px;
+ line-height: 22px;
+ font-weight: 500;
+ color: var(--color-text-primary);
+
+ p {
+ margin-bottom: 15px;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ h1 {
+ color: var(--color-text-brand);
+ font-size: 22px;
+ line-height: 33px;
+ font-weight: 700;
+ margin-bottom: 15px;
+ }
+
+ &__actions {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 4px;
+
+ &__wrapper {
+ display: flex;
+ margin-top: 30px;
+ }
+
+ .button {
+ display: block;
+ flex-grow: 1;
+ }
+ }
+ }
+
+ &__action {
+ float: right;
+ padding: 15px 10px;
+
+ .icon-button {
+ color: var(--color-text-brand);
+ }
+ }
+}
+
+.warning-banner {
+ border: 1px solid var(--color-border-on-bg-error-softer);
+ background: var(--color-bg-error-softer);
+
+ &__message {
+ h1 {
+ color: var(--color-text-error);
+ }
+
+ a {
+ color: var(--color-text-primary);
+ }
+ }
+}
+
+.image {
+ position: relative;
+ overflow: hidden;
+
+ &__preview {
+ position: absolute;
+ top: 0;
+ inset-inline-start: 0;
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ }
+
+ &.loaded &__preview {
+ display: none;
+ }
+
+ img {
+ display: block;
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ border: 0;
+ background: transparent;
+ opacity: 0;
+ }
+
+ &.loaded img {
+ opacity: 1;
+ }
+}
+
+.link-footer {
+ flex: 0 0 auto;
+ padding-top: 20px;
+ z-index: 1;
+ font-size: 13px;
+
+ .column & {
+ padding: 15px;
+ }
+
+ p {
+ color: var(--color-text-secondary);
+ margin-bottom: 20px;
+
+ .version {
+ white-space: nowrap;
+ }
+
+ strong {
+ font-weight: 500;
+ }
+
+ a {
+ color: var(--color-text-secondary);
+ text-decoration: underline;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: none;
+ }
+ }
+ }
+}
+
+.about {
+ padding: 20px;
+ border-top: 1px solid var(--color-border-primary);
+
+ @media screen and (min-width: $no-gap-breakpoint) {
+ border-radius: 4px;
+ }
+
+ &__footer {
+ color: var(--color-text-tertiary);
+ text-align: center;
+ font-size: 15px;
+ line-height: 22px;
+ margin-top: 20px;
+ }
+
+ &__header {
+ margin-bottom: 30px;
+
+ &__hero {
+ width: 100%;
+ height: auto;
+ aspect-ratio: 1.9;
+ background: var(--color-bg-tertiary);
+ border-radius: 8px;
+ margin-bottom: 30px;
+ }
+
+ h1,
+ p {
+ text-align: center;
+ }
+
+ h1 {
+ font-size: 24px;
+ line-height: 1.5;
+ font-weight: 700;
+ margin-bottom: 10px;
+ }
+
+ p {
+ font-size: 16px;
+ line-height: 24px;
+ font-weight: 400;
+ color: var(--color-text-secondary);
+ }
+ }
+
+ &__meta {
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+ display: flex;
+ margin-bottom: 30px;
+ font-size: 15px;
+
+ &__column {
+ box-sizing: border-box;
+ width: 50%;
+ padding: 20px;
+ }
+
+ &__divider {
+ width: 0;
+ border: 0;
+ border-style: solid;
+ border-color: var(--color-border-primary);
+ border-left-width: 1px;
+ min-height: calc(100% - 60px);
+ flex: 0 0 auto;
+ }
+
+ h4 {
+ font-size: 15px;
+ text-transform: uppercase;
+ color: var(--color-text-secondary);
+ font-weight: 500;
+ margin-bottom: 20px;
+ }
+
+ @media screen and (width <= 600px) {
+ display: block;
+
+ h4 {
+ text-align: center;
+ }
+
+ &__column {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ }
+
+ &__divider {
+ min-height: 0;
+ width: 100%;
+ border-left-width: 0;
+ border-top-width: 1px;
+ }
+ }
+
+ .layout-multiple-columns & {
+ display: block;
+
+ h4 {
+ text-align: center;
+ }
+
+ &__column {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ }
+
+ &__divider {
+ min-height: 0;
+ width: 100%;
+ border-left-width: 0;
+ border-top-width: 1px;
+ }
+ }
+ }
+
+ &__mail {
+ color: var(--color-text-primary);
+ text-decoration: none;
+ font-weight: 500;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: underline;
+ }
+ }
+
+ .link-footer {
+ padding: 0;
+ margin-top: 60px;
+ text-align: center;
+ font-size: 15px;
+ line-height: 22px;
+
+ @media screen and (min-width: $no-gap-breakpoint) {
+ display: none;
+ }
+ }
+
+ .account {
+ padding: 0;
+ border: 0;
+ }
+
+ .account__avatar-wrapper {
+ margin-inline-start: 0;
+ }
+
+ .account__relationship {
+ display: none;
+ }
+
+ &__section {
+ margin-bottom: 10px;
+
+ &__title {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ font-size: 17px;
+ font-weight: 600;
+ line-height: 22px;
+ padding: 20px;
+ border-radius: 4px;
+ border: 1px solid var(--color-border-primary);
+ color: var(--color-text-brand);
+ cursor: pointer;
+ width: 100%;
+ background: none;
+ }
+
+ &.active &__title {
+ border-radius: 4px 4px 0 0;
+ }
+
+ &__body {
+ border: 1px solid var(--color-border-primary);
+ border-top: 0;
+ padding: 20px;
+ font-size: 15px;
+ line-height: 22px;
+ }
+ }
+
+ &__domain-blocks {
+ margin-top: 30px;
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+
+ &__domain {
+ border-bottom: 1px solid var(--color-border-primary);
+ padding: 10px;
+ font-size: 15px;
+ color: var(--color-text-secondary);
+
+ &:nth-child(2n) {
+ background: var(--color-bg-secondary);
+ }
+
+ &:last-child {
+ border-bottom: 0;
+ }
+
+ &__header {
+ display: flex;
+ gap: 10px;
+ justify-content: space-between;
+ font-weight: 500;
+ margin-bottom: 4px;
+ }
+
+ h6 {
+ color: var(--color-text-primary);
+ font-size: inherit;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ p {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ }
+ }
+}
+
+.notification-list {
+ position: fixed;
+ bottom: 2rem;
+ inset-inline-start: 1rem;
+ z-index: 9999;
+ display: flex;
+ flex-direction: column;
+ gap: 4px;
+}
+
+.notification-bar {
+ --alert-edge-spacing: 1rem;
+
+ display: flex;
+ gap: 10px;
+ flex: 0 0 auto;
+ width: auto;
+ padding: 15px;
+ margin: 0;
+ color: var(--color-text-on-inverted);
+ background: var(--color-bg-inverted);
+ backdrop-filter: blur(8px);
+ border: 1px solid var(--color-border-on-bg-inverted);
+ border-radius: 8px;
+ box-shadow:
+ 0 10px 15px -3px var(--color-shadow-primary),
+ 0 4px 6px -4px var(--color-shadow-primary);
+ cursor: default;
+ font-size: 15px;
+ line-height: 21px;
+
+ &.from-side {
+ translate: calc(
+ -1 * (100% + var(--alert-edge-spacing)) * var(--text-x-direction)
+ );
+ }
+
+ &.from-below {
+ translate: 0 calc(100% + var(--alert-edge-spacing));
+ }
+
+ &.notification-bar--active {
+ translate: none;
+ }
+
+ .no-reduce-motion & {
+ transition: 0.5s cubic-bezier(0.89, 0.01, 0.5, 1.1);
+ will-change: translate;
+ }
+}
+
+.notification-bar__content {
+ margin-inline-end: auto;
+}
+
+.notification-bar__title {
+ margin-inline-end: 5px;
+ font-weight: 700;
+}
+
+.notification-bar__action {
+ display: inline-block;
+ border: 0;
+ background: transparent;
+ text-transform: uppercase;
+ cursor: pointer;
+ color: var(--color-text-brand);
+ font-weight: 700;
+ border-radius: 4px;
+ padding: 0 4px;
+
+ &:hover,
+ &:focus,
+ &:active {
+ background: var(--color-bg-brand-softer);
+ }
+}
+
+.notification-bar__dismiss-button {
+ margin-top: -2px;
+ color: rgb(from currentColor r g b / 85%);
+
+ &:hover,
+ &:focus,
+ &:active {
+ color: currentColor;
+ }
+}
+
+.notification-bar__loading-indicator {
+ --spinner-size: 22px;
+
+ position: relative;
+ height: var(--spinner-size);
+ width: var(--spinner-size);
+ margin-inline-start: 2px;
+
+ svg {
+ color: var(--color-text-on-media);
+ height: var(--spinner-size);
+ width: var(--spinner-size);
+ }
+}
+
+.hashtag-header {
+ border-bottom: 1px solid var(--color-border-primary);
+ padding: 15px;
+ font-size: 17px;
+ line-height: 22px;
+ color: var(--color-text-secondary);
+
+ strong {
+ font-weight: 700;
+ }
+
+ &__header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 15px;
+ gap: 15px;
+
+ h1 {
+ color: var(--color-text-primary);
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ font-size: 22px;
+ line-height: 33px;
+ font-weight: 700;
+ }
+
+ &__buttons {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+
+ .button {
+ flex-shrink: 1;
+ white-space: nowrap;
+ min-width: 80px;
+ }
+
+ .icon-button {
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+ box-sizing: content-box;
+ padding: 5px;
+
+ .icon {
+ width: 24px;
+ height: 24px;
+ }
+ }
+ }
+ }
+}
+
+.hashtag-bar {
+ margin-top: 16px;
+ display: flex;
+ flex-wrap: wrap;
+ font-size: 12px;
+ line-height: 16px;
+ gap: 6px;
+ color: color-mix(
+ in oklab,
+ var(--color-text-primary),
+ var(--color-text-secondary)
+ );
+
+ a {
+ display: inline-flex;
+ color: inherit;
+ text-decoration: none;
+ padding: 4px 12px;
+ background: var(--color-bg-brand-softer);
+ border-radius: 4px;
+ font-weight: 500;
+
+ &:hover,
+ &:focus,
+ &:active {
+ background: var(--color-bg-brand-soft);
+ }
+ }
+
+ .link-button {
+ color: inherit;
+ font-size: inherit;
+ line-height: inherit;
+ padding: 0;
+ }
+}
+
+.inline-follow-suggestions {
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+ padding: 16px 0;
+ padding-bottom: 0;
+ border-bottom: 1px solid var(--color-border-primary);
+ background: var(--color-bg-brand-softer);
+
+ &.focusable:focus-visible {
+ background: var(--color-bg-brand-softer);
+ }
+
+ &__header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 0 16px;
+
+ h3 {
+ font-size: 15px;
+ line-height: 22px;
+ font-weight: 500;
+ }
+
+ &__actions {
+ display: flex;
+ align-items: center;
+ gap: 24px;
+ }
+
+ .link-button {
+ font-size: 13px;
+ font-weight: 500;
+ }
+ }
+
+ &__body {
+ position: relative;
+
+ &__scroll-button {
+ position: absolute;
+ height: 100%;
+ background: transparent;
+ border: none;
+ cursor: pointer;
+ top: 0;
+ color: var(--color-text-primary);
+ opacity: 0.5;
+
+ &.left {
+ left: 0;
+ }
+
+ &.right {
+ right: 0;
+ }
+
+ &__icon {
+ border-radius: 50%;
+ color: var(--color-text-on-brand-base);
+ background: var(--color-bg-brand-base);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ aspect-ratio: 1;
+ padding: 8px;
+
+ .icon {
+ width: 24px;
+ height: 24px;
+ }
+ }
+
+ &:hover,
+ &:focus,
+ &:active {
+ opacity: 1;
+ }
+ }
+
+ &__scrollable {
+ box-sizing: border-box;
+ display: flex;
+ flex-wrap: nowrap;
+ min-height: 228px;
+ gap: 16px;
+ padding: 16px;
+ scroll-snap-type: x mandatory;
+ scroll-padding: 16px;
+ scroll-behavior: smooth;
+ overflow-x: scroll;
+ scrollbar-width: none;
+
+ &__card {
+ background: var(--color-bg-primary);
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+ align-items: center;
+ padding: 12px;
+ scroll-snap-align: start;
+ flex: 0 0 auto;
+ width: 200px;
+ box-sizing: border-box;
+ position: relative;
+
+ a {
+ text-decoration: none;
+ }
+
+ & > .icon-button {
+ position: absolute;
+ inset-inline-end: 8px;
+ top: 8px;
+ opacity: 0.75;
+ }
+
+ &__avatar {
+ height: 48px;
+ display: flex;
+
+ a {
+ display: flex;
+ text-decoration: none;
+ }
+ }
+
+ .account__avatar {
+ flex-shrink: 0;
+ align-self: flex-end;
+ border: 1px solid var(--color-border-primary);
+ background-color: var(--color-bg-tertiary);
+ }
+
+ &__text-stack {
+ display: flex;
+ flex-direction: column;
+ gap: 4px;
+ align-items: center;
+ max-width: 100%;
+
+ a {
+ max-width: 100%;
+ }
+
+ &__source {
+ display: inline-flex;
+ align-items: center;
+ color: var(--color-text-tertiary);
+ gap: 4px;
+ overflow: hidden;
+ white-space: nowrap;
+ cursor: help;
+
+ > span {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ .icon {
+ width: 16px;
+ height: 16px;
+ }
+ }
+ }
+
+ .display-name {
+ display: flex;
+ flex-direction: column;
+ gap: 4px;
+ align-items: center;
+
+ & > * {
+ max-width: 100%;
+ }
+
+ &__html {
+ font-size: 15px;
+ font-weight: 500;
+ color: var(--color-text-primary);
+ }
+
+ &__account {
+ font-size: 14px;
+ color: var(--color-text-secondary);
+ }
+ }
+
+ .verified-badge {
+ font-size: 14px;
+ max-width: 100%;
+ }
+
+ .button {
+ display: block;
+ width: 100%;
+ }
+ }
+ }
+ }
+}
+
+.filtered-notifications-banner {
+ display: flex;
+ align-items: center;
+ border-bottom: 1px solid var(--color-border-primary);
+ padding: 16px 24px;
+ gap: 8px;
+ color: var(--color-text-secondary);
+ text-decoration: none;
+
+ &:hover,
+ &:active,
+ &:focus {
+ color: var(--color-text-primary);
+ }
+
+ .notification-group__icon {
+ color: inherit;
+ }
+
+ &__text {
+ flex: 1 1 auto;
+ font-size: 14px;
+ line-height: 20px;
+
+ strong {
+ font-size: 16px;
+ line-height: 24px;
+ display: block;
+ }
+ }
+
+ &__badge {
+ color: var(--color-text-on-brand-base);
+ background: var(--color-bg-brand-base);
+ border-radius: 100px;
+ padding: 2px 8px;
+ }
+}
+
+.notification-request {
+ $padding: 15px;
+
+ display: flex;
+ padding: $padding;
+ gap: 8px;
+ position: relative;
+ border-bottom: 1px solid var(--color-border-primary);
+
+ &__checkbox {
+ position: absolute;
+ inset-inline-start: $padding;
+ top: 50%;
+ transform: translateY(-50%);
+ width: 0;
+ overflow: hidden;
+ opacity: 0;
+
+ .check-box {
+ display: flex;
+ }
+ }
+
+ &__link {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ flex: 1 1 auto;
+ text-decoration: none;
+ color: inherit;
+ overflow: hidden;
+
+ .account__avatar {
+ flex-shrink: 0;
+ }
+ }
+
+ &__name {
+ flex: 1 1 auto;
+ color: var(--color-text-secondary);
+ font-size: 14px;
+ line-height: 20px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+
+ &__display-name {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ font-size: 16px;
+ letter-spacing: 0.5px;
+ line-height: 24px;
+ color: var(--color-text-primary);
+
+ bdi {
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ }
+ }
+
+ .filtered-notifications-banner__badge {
+ color: var(--color-text-on-brand-base);
+ background: var(--color-bg-brand-base);
+ border-radius: 4px;
+ padding: 1px 6px;
+ }
+ }
+
+ &__actions {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+
+ .icon-button {
+ border-radius: 4px;
+ border: 1px solid var(--color-border-primary);
+ padding: 5px;
+ }
+ }
+
+ .notification-request__link {
+ transition: padding-inline-start 0.1s ease-in-out;
+ }
+
+ &--forced-checkbox {
+ cursor: pointer;
+
+ &:hover {
+ background: var(--color-bg-secondary);
+ }
+
+ .notification-request__checkbox {
+ opacity: 1;
+ width: 30px;
+ }
+
+ .notification-request__link {
+ padding-inline-start: 30px;
+ }
+
+ .notification-request__actions {
+ display: none;
+ }
+ }
+}
+
+.more-from-author {
+ box-sizing: border-box;
+ font-size: 14px;
+ color: var(--color-text-secondary);
+ background: var(--color-bg-tertiary);
+ border: 1px solid var(--color-border-primary);
+ border-top: 0;
+ border-radius: 0 0 8px 8px;
+ padding: 15px;
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 4px 8px;
+
+ .logo {
+ width: 16px;
+ height: 16px;
+ color: var(--color-text-secondary);
+ }
+
+ & > span {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ }
+
+ a {
+ display: inline-flex;
+ align-items: center;
+ gap: 4px;
+ font-weight: 500;
+ color: var(--color-text-primary);
+ text-decoration: none;
+ min-width: 0;
+
+ &:hover,
+ &:focus,
+ &:active {
+ color: var(--color-text-brand);
+ }
+ }
+}
+
+.notification-group {
+ display: flex;
+ align-items: flex-start;
+ gap: 8px;
+ padding: 10px 14px; // glitch: reduced padding
+ border-bottom: 1px solid var(--color-border-primary);
+
+ &__icon {
+ width: 40px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex: 0 0 auto;
+ color: var(--color-text-tertiary);
+
+ .icon {
+ width: 28px;
+ height: 28px;
+ }
+ }
+
+ &--follow &__icon,
+ &--follow-request &__icon {
+ color: var(--color-text-brand);
+ }
+
+ &--favourite &__icon {
+ color: var(--color-text-favourite-highlight);
+ }
+
+ &--reblog &__icon {
+ color: var(--color-text-success);
+ }
+
+ &--relationships-severance-event &__icon,
+ &--admin-report &__icon,
+ &--admin-sign-up &__icon {
+ color: var(--color-text-tertiary);
+ }
+
+ &--moderation-warning &__icon {
+ color: var(--color-text-bookmark-highlight);
+ }
+
+ &--follow-request &__actions {
+ align-items: center;
+ display: flex;
+ gap: 8px;
+
+ .icon-button {
+ border: 1px solid var(--color-border-primary);
+ border-radius: 50%;
+ padding: 1px;
+ }
+ }
+
+ &__main {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ flex: 1 1 auto;
+ overflow: hidden;
+ container-type: inline-size;
+
+ &__header {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+
+ &__wrapper {
+ display: flex;
+ justify-content: space-between;
+ }
+
+ &__label {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 2px 8px;
+ font-size: 15px;
+ line-height: 22px;
+ color: var(--color-text-secondary);
+
+ a {
+ color: inherit;
+ text-decoration: none;
+ }
+
+ bdi {
+ font-weight: 700;
+ color: var(--color-text-primary);
+ }
+
+ time {
+ color: var(--color-text-tertiary);
+ }
+
+ @container (width < 350px) {
+ time,
+ &-separator {
+ display: none;
+ }
+ }
+ }
+ }
+
+ &__status {
+ border: 1px solid var(--color-border-primary);
+ border-radius: 8px;
+ padding: 8px;
+ }
+
+ &__additional-content {
+ color: var(--color-text-tertiary);
+ margin-top: -8px; // to offset the parent's `gap` property
+ font-size: 15px;
+ line-height: 22px;
+ }
+ }
+
+ .status {
+ padding: 0;
+ border: 0;
+ }
+
+ &__embedded-status {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ cursor: pointer;
+
+ &__account {
+ display: flex;
+ align-items: center;
+ gap: 4px;
+ color: var(--color-text-tertiary);
+ font-size: 15px;
+ line-height: 22px;
+
+ bdi {
+ color: var(--color-text-secondary);
+ }
+
+ .account__avatar {
+ flex: 0 0 auto;
+ }
+ }
+
+ /* glitch: used for CWs */
+ p {
+ font-size: 15px;
+ color: var(--color-text-secondary);
+ }
+
+ &__content {
+ display: -webkit-box;
+ font-size: 15px;
+ line-height: 22px;
+ color: var(--color-text-secondary);
+ -webkit-line-clamp: 4;
+ line-clamp: 4;
+ -webkit-box-orient: vertical;
+ max-height: none;
+ overflow: hidden;
+
+ p,
+ a {
+ color: inherit;
+ }
+
+ p {
+ margin-bottom: 8px;
+ }
+ }
+
+ .reply-indicator__attachments {
+ margin-top: 0;
+ font-size: 15px;
+ line-height: 22px;
+ color: var(--color-text-tertiary);
+ }
+ }
+}
+
+.notification-group__actions,
+.compose-form__actions {
+ .button {
+ display: block; // Otherwise text-ellipsis doesn't work
+ flex: 1 1 auto;
+ }
+}
+
+.notification-ungrouped {
+ padding: 10px 14px; // glitch: reduced padding
+ border-bottom: 1px solid var(--color-border-primary);
+
+ &__header {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ color: var(--color-text-tertiary);
+ font-size: 15px;
+ line-height: 22px;
+ font-weight: 500;
+ padding-inline-start: 24px;
+ margin-bottom: 16px;
+
+ &__icon {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex: 0 0 auto;
+
+ .icon {
+ width: 16px;
+ height: 16px;
+ }
+ }
+
+ a {
+ color: inherit;
+ text-decoration: none;
+ }
+ }
+
+ .status:not(.status--is-quote) {
+ border: 0;
+ padding: 0;
+ }
+
+ .status__wrapper-direct {
+ background: transparent;
+ }
+
+ .status {
+ // 40px avatar + 8px gap
+ --status-gutter-width: 48px;
+ }
+
+ .status--is-quote {
+ --status-gutter-width: 0;
+ }
+
+ .status__content,
+ .status__action-bar,
+ .media-gallery,
+ .video-player,
+ .audio-player,
+ .attachment-list,
+ .picture-in-picture-placeholder,
+ .more-from-author,
+ .status-card,
+ .hashtag-bar,
+ .content-warning,
+ .filter-warning {
+ margin-inline-start: var(--status-gutter-width);
+ width: calc(100% - var(--status-gutter-width));
+ }
+
+ .more-from-author {
+ width: calc(100% - var(--status-gutter-width) + 2px);
+ }
+
+ .status__content__read-more-button {
+ margin-inline-start: var(--status-gutter-width);
+ }
+
+ .notification__report {
+ border: 0;
+ padding: 0;
+ }
+}
+
+.notification-group--unread,
+.notification-ungrouped--unread {
+ position: relative;
+
+ &::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ inset-inline-start: 0;
+ width: 100%;
+ height: 100%;
+ border-inline-start: 4px solid var(--color-text-brand);
+ pointer-events: none;
+ }
+}
+
+.hover-card-controller[data-popper-reference-hidden='true'] {
+ opacity: 0;
+ pointer-events: none;
+}
+
+.hover-card {
+ box-shadow: var(--dropdown-shadow);
+ background: var(--color-bg-primary);
+ backdrop-filter: $backdrop-blur-filter;
+ border: 1px solid var(--color-border-primary);
+ border-radius: 8px;
+ padding: 16px;
+ width: 270px;
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+
+ &--loading {
+ position: relative;
+ min-height: 100px;
+ }
+
+ &__name {
+ display: flex;
+ gap: 12px;
+ text-decoration: none;
+ color: inherit;
+ }
+
+ &__numbers,
+ &__familiar-followers {
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 2px 10px;
+ }
+
+ &__numbers {
+ font-size: 15px;
+ line-height: 22px;
+ color: var(--color-text-primary);
+
+ strong {
+ font-weight: 700;
+ }
+ }
+
+ &__text-row {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ }
+
+ &__bio {
+ color: var(--color-text-primary);
+ font-size: 14px;
+ line-height: 20px;
+ display: -webkit-box;
+ line-clamp: 2;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ max-height: 2 * 20px;
+ overflow: hidden;
+
+ p {
+ margin-bottom: 0;
+ }
+
+ a {
+ color: inherit;
+ text-decoration: underline;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: none;
+ }
+ }
+ }
+
+ &__note {
+ &-label {
+ color: var(--color-text-tertiary);
+ font-size: 12px;
+ font-weight: 500;
+ text-transform: uppercase;
+ }
+
+ dd {
+ white-space: pre-line;
+ color: var(--color-text-primary);
+ overflow: hidden;
+ line-clamp: 3; // Not yet supported in browers
+ display: -webkit-box; // The next 3 properties are needed
+ -webkit-line-clamp: 3;
+ -webkit-box-orient: vertical;
+ }
+ }
+
+ &__limited-account-note {
+ text-align: center;
+ font-weight: 500;
+ }
+
+ .display-name {
+ font-size: 15px;
+ line-height: 22px;
+
+ bdi {
+ font-weight: 500;
+ color: var(--color-text-primary);
+ }
+
+ &__account {
+ display: block;
+ color: var(--color-text-tertiary);
+ }
+ }
+
+ .account-fields {
+ color: var(--color-text-primary);
+ font-size: 14px;
+ line-height: 20px;
+
+ a {
+ color: inherit;
+ text-decoration: none;
+
+ &:focus,
+ &:hover,
+ &:active {
+ text-decoration: underline;
+ }
+ }
+
+ dl {
+ display: flex;
+ align-items: center;
+ gap: 4px;
+
+ dt {
+ flex: 0 1 auto;
+ color: var(--color-text-tertiary);
+ min-width: 0;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ }
+
+ dd {
+ flex: 1 1 auto;
+ font-weight: 500;
+ min-width: 0;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ text-align: end;
+ }
+
+ &.verified {
+ dd {
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+ gap: 4px;
+ overflow: hidden;
+ white-space: nowrap;
+ color: var(--color-text-success);
+
+ & > span {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ a {
+ font-weight: 500;
+ }
+
+ .icon {
+ width: 16px;
+ height: 16px;
+ }
+ }
+ }
+ }
+ }
+}
+
+.content-warning {
+ display: block;
+ box-sizing: border-box;
+ color: var(--color-text-primary);
+ background: var(--color-bg-brand-softer);
+ border: 1px solid var(--color-border-on-bg-brand-softer);
+ border-radius: 8px;
+ padding: 8px (5px + 8px);
+ position: relative;
+ font-size: 15px;
+ line-height: 22px;
+ cursor: pointer;
+
+ p {
+ margin-bottom: 8px;
+ font-weight: 500;
+ }
+
+ .link-button {
+ font-size: inherit;
+ line-height: inherit;
+ font-weight: 500;
+ }
+
+ &--filter {
+ color: var(--color-text-secondary);
+
+ p {
+ font-weight: normal;
+ }
+
+ .filter-name {
+ font-weight: 500;
+ color: var(--color-text-primary);
+ }
+ }
+
+ .status__content__spoiler-icon {
+ float: inline-end;
+ width: 20px;
+ height: 20px;
+ }
+}
+
+.lists__item {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+ padding-inline-end: 13px;
+ border-bottom: 1px solid var(--color-border-primary);
+
+ &__title {
+ display: flex;
+ align-items: center;
+ gap: 5px;
+ padding: 16px 13px;
+ flex: 1 1 auto;
+ font-size: 16px;
+ line-height: 24px;
+ color: var(--color-text-secondary);
+ text-decoration: none;
+
+ &:is(a):hover,
+ &:is(a):focus,
+ &:is(a):active {
+ color: var(--color-text-primary);
+ }
+
+ input {
+ display: block;
+ width: 100%;
+ background: transparent;
+ border: 0;
+ padding: 0;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+ color: inherit;
+
+ &::placeholder {
+ color: var(--color-text-secondary);
+ opacity: 1;
+ }
+
+ &:focus {
+ outline: 0;
+ }
+ }
+ }
+}
+
+.column-search-header {
+ display: flex;
+ gap: 12px;
+ align-items: center;
+ border: 1px solid var(--color-border-primary);
+ border-top: 0;
+ border-bottom: 0;
+ padding: 16px;
+ padding-bottom: 8px;
+
+ input {
+ background: var(--color-bg-secondary);
+ border: 1px solid var(--color-border-primary);
+ color: var(--color-text-primary);
+ padding: 12px;
+ font-size: 16px;
+ line-height: normal;
+ border-radius: 4px;
+ display: block;
+ flex: 1 1 auto;
+
+ &::placeholder {
+ color: var(--color-text-secondary);
+ opacity: 1;
+ }
+
+ &:focus {
+ outline: 0;
+ }
+ }
+}
+
+.column-footer {
+ padding: 16px;
+}
+
+.lists-scrollable {
+ min-height: 50vh;
+}
+
+.featured-carousel {
+ overflow: hidden;
+ flex-shrink: 0;
+ border-bottom: 1px solid var(--color-border-primary);
+ touch-action: pan-y;
+
+ &__slides {
+ display: flex;
+ flex-wrap: nowrap;
+ align-items: start;
+ }
+
+ &__slide {
+ flex: 0 0 auto;
+ flex-basis: 100%;
+ width: 100%;
+ overflow: hidden;
+ }
+
+ .status {
+ border-bottom: 0;
+
+ // glitch-soc fix for width-constrained
+ contain: inline-size;
+ }
+
+ &__header {
+ padding: 8px 16px;
+ color: var(--color-text-secondary);
+ inset-inline-end: 0;
+ display: flex;
+ align-items: center;
+ gap: 4px;
+ }
+
+ &__title {
+ flex-grow: 1;
+ font-size: 12px;
+ font-weight: 500;
+ text-transform: uppercase;
+ display: flex;
+ align-items: center;
+ gap: 4px;
+
+ .icon {
+ width: 16px;
+ height: 16px;
+ }
+ }
+
+ &__pagination {
+ display: flex;
+ align-items: center;
+ gap: 4px;
+ }
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/containers.scss b/app/javascript/flavours/glitch/styles_new/mastodon/containers.scss
new file mode 100644
index 0000000000..57c62a29e3
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/containers.scss
@@ -0,0 +1,166 @@
+@use 'variables' as *;
+
+.container-alt {
+ width: 700px;
+ margin: 0 auto;
+
+ @media screen and (width <= 740px) {
+ width: 100%;
+ margin: 0;
+ }
+}
+
+.logo-container {
+ margin: 50px auto;
+
+ h1 {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ .logo {
+ height: 42px;
+ margin-inline-end: 10px;
+ }
+
+ a {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ color: var(--color-text-primary);
+ text-decoration: none;
+ outline: 0;
+ padding: 12px 16px;
+ line-height: 32px;
+ font-weight: 500;
+ font-size: 14px;
+ }
+ }
+}
+
+.compose-standalone {
+ .compose-form {
+ width: 400px;
+ margin: 0 auto;
+ padding: 10px 0;
+ padding-bottom: 20px;
+ box-sizing: border-box;
+
+ @media screen and (width <= 400px) {
+ width: 100%;
+ padding: 20px;
+ }
+ }
+}
+
+.account-header {
+ width: 400px;
+ margin: 0 auto;
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ font-size: 14px;
+ line-height: 20px;
+ box-sizing: border-box;
+ padding: 20px 0;
+ margin-top: 40px;
+ margin-bottom: 10px;
+ border-bottom: 1px solid var(--color-border-primary);
+
+ @media screen and (width <= 440px) {
+ width: 100%;
+ margin: 0;
+ padding: 20px;
+ }
+
+ .avatar {
+ width: 48px;
+ height: 48px;
+ flex: 0 0 auto;
+
+ img {
+ width: 100%;
+ height: 100%;
+ display: block;
+ margin: 0;
+ border-radius: var(--avatar-border-radius);
+ }
+ }
+
+ .name {
+ flex: 1 1 auto;
+ color: var(--color-text-primary);
+
+ .username {
+ display: block;
+ font-size: 16px;
+ line-height: 24px;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ color: var(--color-text-primary);
+ }
+ }
+
+ .logout-link {
+ display: block;
+ font-size: 32px;
+ line-height: 40px;
+ flex: 0 0 auto;
+ }
+}
+
+.redirect {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ font-size: 14px;
+ line-height: 18px;
+
+ &__logo {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-bottom: 30px;
+
+ img {
+ height: 48px;
+ }
+ }
+
+ &__message {
+ text-align: center;
+
+ h1 {
+ font-size: 17px;
+ line-height: 22px;
+ font-weight: 700;
+ margin-bottom: 30px;
+ }
+
+ p {
+ margin-bottom: 30px;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ a {
+ color: var(--color-text-brand);
+ font-weight: 500;
+ text-decoration: none;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: underline;
+ }
+ }
+ }
+
+ &__link {
+ margin-top: 15px;
+ }
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/css_variables.scss b/app/javascript/flavours/glitch/styles_new/mastodon/css_variables.scss
new file mode 100644
index 0000000000..ba3319a6b4
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/css_variables.scss
@@ -0,0 +1,228 @@
+@use 'theme_utils' as utils;
+
+:root {
+ --color-black: #000;
+ --color-grey-950: #181821;
+ --color-grey-800: #292938;
+ --color-grey-700: #444664;
+ --color-grey-600: #545778;
+ --color-grey-500: #696d91;
+ --color-grey-400: #8b8dac;
+ --color-grey-300: #b4b6cb;
+ --color-grey-200: #d8d9e3;
+ --color-grey-100: #f0f0f5;
+ --color-grey-50: #f0f1ff;
+ --color-white: #fff;
+ --color-indigo-600: #6147e6;
+ --color-indigo-400: #8886ff;
+ --color-indigo-300: #a5abfd;
+ --color-indigo-200: #c8cdfe;
+ --color-indigo-100: #e0e3ff;
+ --color-indigo-50: #f0f1ff;
+ --color-red-500: #ff637e;
+ --color-red-600: #ec003f;
+ --color-yellow-400: #ffb900;
+ --color-yellow-600: #e17100;
+ --color-green-400: #05df72;
+ --color-green-600: #00a63e;
+
+ /* TEXT TOKENS */
+
+ --color-text-primary: var(--color-grey-50);
+ --color-text-secondary: var(--color-grey-400);
+ --color-text-tertiary: var(--color-grey-500);
+ --color-text-on-inverted: var(--color-grey-950);
+ --color-text-brand: var(--color-indigo-400);
+ --color-text-brand-soft: color-mix(
+ in oklab,
+ var(--color-text-primary),
+ var(--color-text-brand)
+ );
+ --color-text-on-brand-base: var(--color-white);
+ --color-text-error: var(--color-red-500);
+ --color-text-on-error-base: var(--color-white);
+ --color-text-warning: var(--color-yellow-400);
+ --color-text-on-warning-base: var(--color-white);
+ --color-text-success: var(--color-green-400);
+ --color-text-on-success-base: var(--color-white);
+ --color-text-disabled: var(--color-grey-600);
+ --color-text-on-disabled: var(--color-grey-400);
+ --color-text-bookmark-highlight: var(--color-text-error);
+ --color-text-favourite-highlight: var(--color-text-warning);
+ --color-text-on-media: var(--color-white);
+ --color-text-status-links: color-mix(
+ in oklab,
+ var(--color-text-primary),
+ var(--color-text-secondary)
+ );
+
+ /* BACKGROUND TOKENS */
+
+ // Neutrals
+ --color-bg-primary: var(--color-grey-950);
+ --overlay-strength-secondary: 10%;
+ --color-bg-secondary-base: var(--color-indigo-200);
+ --color-bg-secondary: #{utils.css-alpha(
+ var(--color-bg-secondary-base),
+ var(--overlay-strength-secondary)
+ )};
+ --color-bg-secondary-solid: color-mix(
+ in srgb,
+ var(--color-bg-primary),
+ var(--color-bg-secondary-base) var(--overlay-strength-secondary)
+ );
+ --color-bg-tertiary: color-mix(
+ in oklab,
+ var(--color-bg-primary),
+ var(--color-bg-secondary-base) calc(2 * var(--overlay-strength-secondary))
+ );
+
+ // Utility
+ --color-bg-ambient: var(--color-bg-primary);
+ --color-bg-elevated: var(--color-grey-800);
+ --color-bg-inverted: var(--color-grey-50);
+ --color-bg-media-base: var(--color-black);
+ --color-bg-media-strength: 65%;
+ --color-bg-media: #{utils.css-alpha(
+ var(--color-bg-media-base),
+ var(--color-bg-media-strength)
+ )};
+ --color-bg-overlay: var(--color-bg-primary);
+ --color-bg-disabled: var(--color-grey-700);
+
+ // Brand
+ --overlay-strength-brand: 10%;
+ --color-bg-brand-base: var(--color-indigo-600);
+ --color-bg-brand-base-hover: color-mix(
+ in oklab,
+ var(--color-bg-brand-base),
+ black var(--overlay-strength-brand)
+ );
+ --color-bg-brand-soft: #{utils.css-alpha(
+ var(--color-bg-brand-base),
+ calc(var(--overlay-strength-brand) * 1.5)
+ )};
+ --color-bg-brand-softer: #{utils.css-alpha(
+ var(--color-bg-brand-base),
+ var(--overlay-strength-brand)
+ )};
+
+ // Error
+ --overlay-strength-error: 12%;
+ --color-bg-error-base: var(--color-red-600);
+ --color-bg-error-base-hover: color-mix(
+ in oklab,
+ var(--color-bg-error-base),
+ black var(--overlay-strength-error)
+ );
+ --color-bg-error-soft: #{utils.css-alpha(
+ var(--color-bg-error-base),
+ calc(var(--overlay-strength-error) * 1.5)
+ )};
+ --color-bg-error-softer: #{utils.css-alpha(
+ var(--color-bg-error-base),
+ var(--overlay-strength-error)
+ )};
+
+ // Warning
+ --overlay-strength-warning: 10%;
+ --color-bg-warning-base: var(--color-yellow-600);
+ --color-bg-warning-base-hover: color-mix(
+ in oklab,
+ var(--color-bg-warning-base),
+ black var(--overlay-strength-warning)
+ );
+ --color-bg-warning-soft: #{utils.css-alpha(
+ var(--color-bg-warning-base),
+ calc(var(--overlay-strength-warning) * 1.5)
+ )};
+ --color-bg-warning-softer: #{utils.css-alpha(
+ var(--color-bg-warning-base),
+ var(--overlay-strength-warning)
+ )};
+
+ // Success
+ --overlay-strength-success: 15%;
+ --color-bg-success-base: var(--color-green-600);
+ --color-bg-success-base-hover: color-mix(
+ in oklab,
+ var(--color-bg-success-base),
+ black var(--overlay-strength-success)
+ );
+ --color-bg-success-soft: #{utils.css-alpha(
+ var(--color-bg-success-base),
+ calc(var(--overlay-strength-success) * 1.5)
+ )};
+ --color-bg-success-softer: #{utils.css-alpha(
+ var(--color-bg-success-base),
+ var(--overlay-strength-success)
+ )};
+
+ /* BORDER TOKENS */
+
+ --border-strength-primary: 18%;
+ --color-border-primary: #{utils.css-alpha(
+ var(--color-indigo-200),
+ var(--border-strength-primary)
+ )};
+ --color-border-media: rgb(252 248 255 / 15%);
+ --color-border-on-bg-secondary: #{utils.css-alpha(
+ var(--color-indigo-200),
+ calc(var(--border-strength-primary) / 1.5)
+ )};
+ --color-border-on-bg-brand-softer: var(--color-border-primary);
+ --color-border-on-bg-error-softer: #{utils.css-alpha(
+ var(--color-text-error),
+ 50%
+ )};
+ --color-border-on-bg-warning-softer: #{utils.css-alpha(
+ var(--color-text-warning),
+ 50%
+ )};
+ --color-border-on-bg-success-softer: #{utils.css-alpha(
+ var(--color-text-success),
+ 50%
+ )};
+ --color-border-on-bg-inverted: var(--color-border-primary);
+
+ /* SHADOW TOKENS */
+
+ --shadow-strength-primary: 80%;
+ --color-shadow-primary: #{utils.css-alpha(
+ var(--color-black),
+ var(--shadow-strength-primary)
+ )};
+ --dropdown-shadow:
+ 0 20px 25px -5px var(--color-shadow-primary),
+ 0 8px 10px -6px var(--color-shadow-primary);
+ --overlay-icon-shadow: drop-shadow(0 0 8px var(--color-shadow-primary));
+
+ /* GRAPHS/CHARTS TOKENS */
+
+ --color-graph-primary-stroke: var(--color-text-brand);
+ --color-graph-primary-fill: var(--color-bg-brand-softer);
+ --color-graph-warning-stroke: var(--color-text-warning);
+ --color-graph-warning-fill: var(--color-bg-warning-softer);
+ --color-graph-disabled-stroke: var(--color-text-disabled);
+ --color-graph-disabled-fill: var(--color-bg-disabled);
+
+ /* LEGACY TOKENS */
+
+ --rich-text-container-color: rgb(87 24 60 / 100%);
+ --rich-text-text-color: rgb(255 175 212 / 100%);
+ --rich-text-decorations-color: rgb(128 58 95 / 100%);
+
+ /* MISCELLANEOUS */
+
+ --outline-focus-default: 2px solid var(--color-text-brand);
+ --avatar-border-radius: 8px;
+}
+
+body {
+ // Variable for easily inverting directional UI elements,
+ --text-x-direction: 1;
+
+ &.rtl {
+ --text-x-direction: -1;
+ }
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/dashboard.scss b/app/javascript/flavours/glitch/styles_new/mastodon/dashboard.scss
new file mode 100644
index 0000000000..db3f0e8a84
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/dashboard.scss
@@ -0,0 +1,120 @@
+@use 'variables' as *;
+
+.dashboard__counters {
+ display: flex;
+ flex-wrap: wrap;
+ margin: 0 -5px;
+ margin-bottom: 20px;
+
+ & > div {
+ box-sizing: border-box;
+ flex: 0 0 33.333%;
+ padding: 0 5px;
+ margin-bottom: 10px;
+
+ & > div,
+ & > a {
+ padding: 20px;
+ background: var(--color-bg-primary);
+ border-radius: 4px;
+ border: 1px solid var(--color-border-primary);
+ box-sizing: border-box;
+ height: 100%;
+ }
+
+ & > a {
+ text-decoration: none;
+ color: inherit;
+ display: block;
+
+ &:hover,
+ &:focus,
+ &:active {
+ background: var(--color-bg-brand-softer);
+ }
+ }
+ }
+
+ &__num,
+ &__text {
+ text-align: center;
+ font-weight: 500;
+ font-size: 24px;
+ color: var(--color-text-primary);
+ margin-bottom: 20px;
+ line-height: 30px;
+ }
+
+ &__text {
+ font-size: 18px;
+ }
+
+ &__label {
+ font-size: 14px;
+ color: var(--color-text-secondary);
+ text-align: center;
+ font-weight: 500;
+ }
+}
+
+.dashboard {
+ display: grid;
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr);
+ gap: 10px;
+
+ @media screen and (width <= 1350px) {
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
+ }
+
+ &__item {
+ &--span-double-column {
+ grid-column: span 2;
+ }
+
+ &--span-double-row {
+ grid-row: span 2;
+ }
+
+ h4 {
+ padding-top: 20px;
+ }
+ }
+
+ &__quick-access {
+ display: flex;
+ align-items: baseline;
+ border-radius: 4px;
+ background: var(--color-bg-brand-base);
+ color: var(--color-text-on-brand-base);
+ transition: all 100ms ease-in;
+ font-size: 14px;
+ padding: 8px 16px;
+ text-decoration: none;
+ margin-bottom: 4px;
+
+ &:active,
+ &:focus,
+ &:hover {
+ background-color: var(--color-bg-brand-base-hover);
+ transition: all 200ms ease-out;
+ }
+
+ &.positive {
+ background: var(--color-bg-success-softer);
+ color: var(--color-text-success);
+ }
+
+ &.negative {
+ background: var(--color-bg-error-softer);
+ color: var(--color-text-error);
+ }
+
+ span {
+ flex: 1 1 auto;
+ }
+
+ strong {
+ font-weight: 700;
+ }
+ }
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/emoji_picker.scss b/app/javascript/flavours/glitch/styles_new/mastodon/emoji_picker.scss
new file mode 100644
index 0000000000..ad2f2f630d
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/emoji_picker.scss
@@ -0,0 +1,248 @@
+@use 'variables' as *;
+
+.emoji-mart {
+ font-size: 13px;
+ display: inline-block;
+
+ &,
+ * {
+ box-sizing: border-box;
+ line-height: 1.15;
+ }
+
+ .emoji-mart-emoji {
+ padding: 6px;
+ }
+}
+
+.emoji-mart-bar {
+ &:first-child {
+ background: var(--color-bg-tertiary);
+ border-bottom: 1px solid var(--color-border-primary);
+ }
+}
+
+.emoji-mart-anchors {
+ display: flex;
+ justify-content: space-between;
+ padding: 0 6px;
+ line-height: 0;
+}
+
+.emoji-mart-anchor {
+ position: relative;
+ flex: 1;
+ text-align: center;
+ padding: 12px 4px;
+ overflow: hidden;
+ transition: color 0.1s ease-out;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+ color: var(--color-text-secondary);
+
+ &:hover {
+ color: color-mix(
+ in oklab,
+ var(--color-text-primary),
+ var(--color-text-secondary)
+ );
+ }
+}
+
+.emoji-mart-anchor-selected {
+ color: var(--color-text-brand);
+
+ &:hover {
+ color: var(--color-text-brand-soft);
+ }
+
+ .emoji-mart-anchor-bar {
+ bottom: -1px;
+ }
+}
+
+.emoji-mart-anchor-bar {
+ position: absolute;
+ bottom: -5px;
+ inset-inline-start: 0;
+ width: 100%;
+ height: 4px;
+ background-color: var(--color-text-brand);
+}
+
+.emoji-mart-anchors {
+ i {
+ display: inline-block;
+ width: 100%;
+ max-width: 22px;
+ }
+
+ svg {
+ fill: currentColor;
+ max-height: 18px;
+ }
+}
+
+.emoji-mart-scroll {
+ overflow-y: scroll;
+ height: 270px;
+ max-height: 35vh;
+ padding: 0 6px 6px;
+ will-change: transform;
+}
+
+.emoji-mart-search {
+ padding: 10px;
+ padding-inline-end: 45px;
+ position: relative;
+
+ input {
+ font-size: 16px;
+ font-weight: 400;
+ padding: 7px 9px;
+ padding-inline-end: 25px;
+ font-family: inherit;
+ display: block;
+ width: 100%;
+ background: var(--color-bg-secondary);
+ color: var(--color-text-secondary);
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+
+ &::-moz-focus-inner {
+ border: 0;
+ }
+
+ &:active,
+ &:focus {
+ outline: none !important;
+ border-width: 1px !important;
+ }
+
+ &::-webkit-search-cancel-button {
+ display: none;
+ }
+ }
+}
+
+.emoji-mart-search-icon {
+ position: absolute;
+ top: 18px;
+ inset-inline-end: 45px + 5px;
+ z-index: 2;
+ padding: 2px 5px 1px;
+ border: 0;
+ background: none;
+ transition: all 100ms linear;
+ transition-property: opacity;
+ pointer-events: auto;
+
+ &:disabled {
+ cursor: default;
+ pointer-events: none;
+ }
+
+ svg {
+ fill: currentColor;
+ }
+}
+
+.emoji-mart-category .emoji-mart-emoji {
+ cursor: pointer;
+
+ span {
+ z-index: 1;
+ position: relative;
+ text-align: center;
+ display: inline-flex !important;
+ align-items: center;
+ justify-content: center;
+ }
+
+ &:hover::before {
+ z-index: -1;
+ content: '';
+ position: absolute;
+ top: 0;
+ inset-inline-start: 0;
+ width: 100%;
+ height: 100%;
+ background-color: var(--color-bg-brand-softer);
+ border-radius: 100%;
+ }
+}
+
+.emoji-mart-category-label {
+ z-index: 2;
+ position: relative;
+ position: -webkit-sticky;
+ position: sticky;
+ top: 0;
+
+ span {
+ display: block;
+ width: 100%;
+ font-weight: 500;
+ padding: 5px 6px;
+ }
+}
+
+/* For screenreaders only, via https://stackoverflow.com/a/19758620 */
+.emoji-mart-sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip-path: inset(50%);
+ border: 0;
+}
+
+.emoji-mart-category-list {
+ margin: 0;
+ padding: 0;
+}
+
+.emoji-mart-category-list li {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ display: inline-block;
+}
+
+.emoji-mart-emoji {
+ position: relative;
+ display: inline-block;
+ background: transparent;
+ border: 0;
+ padding: 0;
+ font-size: 0;
+
+ span {
+ width: 22px;
+ height: 22px;
+ }
+}
+
+.emoji-mart-no-results {
+ font-size: 14px;
+ color: var(--color-text-tertiary);
+ text-align: center;
+ padding: 5px 6px;
+ padding-top: 70px;
+
+ .emoji-mart-no-results-label {
+ margin-top: 0.2em;
+ }
+
+ .emoji-mart-emoji:hover::before {
+ cursor: default;
+ content: none;
+ }
+}
+
+.emoji-mart-preview {
+ display: none;
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/forms.scss b/app/javascript/flavours/glitch/styles_new/mastodon/forms.scss
new file mode 100644
index 0000000000..a66d6c52f0
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/forms.scss
@@ -0,0 +1,1450 @@
+@use 'sass:color';
+@use 'variables' as *;
+
+code {
+ font-family: $font-monospace, monospace;
+ font-weight: 400;
+}
+
+.form-container {
+ max-width: 450px;
+ padding: 20px;
+ padding-bottom: 50px;
+ margin: 50px auto;
+}
+
+.form-section {
+ border-radius: 8px;
+ background: var(--color-bg-secondary);
+ padding: 24px;
+ margin-bottom: 24px;
+}
+
+.fade-out-top {
+ position: relative;
+ overflow: hidden;
+ height: 160px;
+ max-width: 566px;
+ margin-inline: auto;
+
+ &::after {
+ content: '';
+ display: block;
+ background: linear-gradient(
+ to bottom,
+ var(--color-bg-secondary-solid),
+ transparent
+ );
+ position: absolute;
+ top: 0;
+ inset-inline-start: 0;
+ width: 100%;
+ height: 100px;
+ pointer-events: none;
+ }
+
+ & > div {
+ position: absolute;
+ inset-inline-start: 0;
+ bottom: 0;
+ }
+}
+
+.indicator-icon {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+ color: var(--color-text-primary);
+
+ &.success {
+ color: var(--color-text-on-success-base);
+ background: var(--color-bg-success-base);
+ }
+
+ &.failure {
+ color: var(--color-text-on-error-base);
+ background: var(--color-bg-error-base);
+ }
+}
+
+.simple_form {
+ &.hidden {
+ display: none;
+ }
+
+ .input {
+ margin-bottom: 16px;
+ overflow: hidden;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+
+ &__toolbar {
+ margin-top: 16px;
+ display: flex;
+ align-items: center;
+ gap: 16px;
+
+ .character-counter {
+ flex: 0 0 auto;
+ }
+ }
+
+ &.hidden {
+ margin: 0;
+ }
+
+ &.radio_buttons {
+ .radio {
+ margin-bottom: 15px;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ .radio > label {
+ position: relative;
+ padding-inline-start: 28px;
+
+ input {
+ position: absolute;
+ top: -2px;
+ inset-inline-start: 0;
+ }
+ }
+ }
+
+ &.boolean {
+ position: relative;
+ margin-bottom: 0;
+
+ .label_input > label {
+ font-family: inherit;
+ font-size: 14px;
+ padding-top: 5px;
+ color: var(--color-text-primary);
+ display: block;
+ width: auto;
+ }
+
+ .label_input,
+ .hint {
+ padding-inline-start: 28px;
+ }
+
+ .label_input__wrapper {
+ position: static;
+ }
+
+ label.checkbox {
+ position: absolute;
+ top: 2px;
+ inset-inline-start: 0;
+ }
+
+ label a {
+ color: var(--color-text-brand);
+ text-decoration: underline;
+
+ &:hover,
+ &:active,
+ &:focus {
+ text-decoration: none;
+ }
+ }
+
+ .overridden,
+ .recommended,
+ .not_recommended,
+ .glitch_only {
+ position: absolute;
+ margin: 0 4px;
+ margin-top: -2px;
+ }
+ }
+ }
+
+ .row {
+ display: flex;
+ margin: 0 -5px;
+
+ .input {
+ box-sizing: border-box;
+ flex: 1 1 auto;
+ width: 50%;
+ padding: 0 5px;
+ }
+ }
+
+ .title {
+ font-size: 28px;
+ line-height: 33px;
+ font-weight: 700;
+ margin-bottom: 15px;
+ }
+
+ .lead {
+ font-size: 17px;
+ line-height: 22px;
+ color: var(--color-text-primary);
+ margin-bottom: 30px;
+
+ &.invited-by {
+ margin-bottom: 15px;
+ }
+
+ a {
+ color: var(--color-text-brand);
+ }
+ }
+
+ .rules-list {
+ font-size: 17px;
+ line-height: 22px;
+ margin-bottom: 30px;
+ }
+
+ .hint {
+ color: var(--color-text-secondary);
+
+ a {
+ color: var(--color-text-brand);
+ }
+
+ code {
+ border-radius: 3px;
+ padding: 0.2em 0.4em;
+ background: var(--color-bg-secondary);
+ }
+
+ li {
+ list-style: disc;
+ margin-inline-start: 18px;
+ }
+
+ .icon {
+ vertical-align: -3px;
+ }
+ }
+
+ ul.hint {
+ margin-bottom: 15px;
+ }
+
+ span.hint {
+ display: block;
+ font-size: 12px;
+ margin-top: 4px;
+ }
+
+ p.hint {
+ margin-bottom: 15px;
+ color: var(--color-text-secondary);
+
+ &.subtle-hint {
+ text-align: center;
+ font-size: 12px;
+ line-height: 18px;
+ margin-top: 15px;
+ margin-bottom: 0;
+ }
+ }
+
+ .authentication-hint {
+ margin-bottom: 25px;
+ }
+
+ .card {
+ margin-bottom: 15px;
+ }
+
+ strong {
+ font-weight: 500;
+
+ @each $lang in $cjk-langs {
+ &:lang(#{$lang}) {
+ font-weight: 700;
+ }
+ }
+ }
+
+ .input.with_floating_label {
+ .label_input {
+ display: flex;
+
+ & > label {
+ font-family: inherit;
+ font-size: 14px;
+ color: var(--color-text-primary);
+ font-weight: 500;
+ min-width: 150px;
+ flex: 0 0 auto;
+ }
+
+ input,
+ select {
+ flex: 1 1 auto;
+ }
+ }
+
+ &.select .hint {
+ margin-top: 6px;
+ margin-inline-start: 150px;
+ }
+ }
+
+ .input.with_label {
+ .label_input > label {
+ font-family: inherit;
+ font-size: 14px;
+ color: var(--color-text-primary);
+ display: block;
+ margin-bottom: 8px;
+ overflow-wrap: break-word;
+ font-weight: 500;
+ }
+
+ .hint {
+ margin-top: 6px;
+ }
+
+ ul {
+ flex: 390px;
+ }
+ }
+
+ .input.with_block_label {
+ max-width: none;
+
+ & > label {
+ font-family: inherit;
+ font-size: 14px;
+ color: var(--color-text-primary);
+ display: block;
+ font-weight: 600;
+ line-height: 20px;
+ }
+
+ .hint {
+ line-height: 16px;
+ margin-bottom: 12px;
+ }
+
+ ul {
+ columns: 2;
+
+ @media screen and (max-width: $mobile-breakpoint) {
+ columns: 1;
+ }
+ }
+ }
+
+ .input.with_block_label.user_role_permissions_as_keys ul {
+ columns: unset;
+ }
+
+ .input.datetime .label_input,
+ .input.date .label_input {
+ display: flex;
+ gap: 4px;
+ align-items: center;
+
+ select {
+ display: inline-block;
+ width: auto;
+ flex: 0;
+ }
+ }
+
+ .input.date_of_birth .label_input {
+ display: flex;
+ gap: 8px;
+ align-items: center;
+
+ input {
+ box-sizing: content-box;
+ width: 32px;
+ flex: 0;
+
+ &:last-child {
+ width: 64px;
+ }
+ }
+ }
+
+ .input.select.select--languages {
+ min-width: 32ch;
+ }
+
+ .required abbr {
+ text-decoration: none;
+ color: var(--color-text-error);
+ }
+
+ .fields-group {
+ margin-bottom: 25px;
+
+ .input:last-child {
+ margin-bottom: 0;
+ }
+
+ &__thumbnail {
+ display: block;
+ margin: 0;
+ margin-bottom: 10px;
+ max-width: 100%;
+ height: auto;
+ border-radius: var(--avatar-border-radius);
+ background: url('@/images/void.png');
+
+ &[src$='missing.png'] {
+ visibility: hidden;
+ }
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+
+ account_avatar-preview {
+ width: 90px;
+ height: 90px;
+ object-fit: cover;
+ }
+ }
+ }
+
+ .fields-row {
+ display: flex;
+ margin: 0 -10px;
+ padding-top: 5px;
+ margin-bottom: 25px;
+
+ .input {
+ max-width: none;
+ }
+
+ &__column {
+ box-sizing: border-box;
+ padding: 0 10px;
+ flex: 1 1 auto;
+ min-height: 1px;
+
+ &-6 {
+ max-width: 50%;
+ }
+
+ .actions {
+ margin-top: 27px;
+ }
+ }
+
+ .fields-group:last-child,
+ .fields-row__column.fields-group {
+ margin-bottom: 0;
+ }
+
+ @media screen and (max-width: $no-columns-breakpoint) {
+ display: block;
+ margin-bottom: 0;
+
+ &__column {
+ max-width: none;
+ }
+
+ .fields-group:last-child,
+ .fields-row__column.fields-group,
+ .fields-row__column {
+ margin-bottom: 25px;
+ }
+ }
+
+ .fields-group.invited-by {
+ margin-bottom: 30px;
+
+ .hint {
+ text-align: center;
+ }
+ }
+ }
+
+ .input.radio_buttons .radio label {
+ margin-bottom: 5px;
+ font-family: inherit;
+ font-size: 14px;
+ color: var(--color-text-primary);
+ display: block;
+ width: auto;
+ }
+
+ .check_boxes {
+ .checkbox {
+ label {
+ font-family: inherit;
+ font-size: 14px;
+ color: var(--color-text-primary);
+ display: inline-block;
+ width: auto;
+ position: relative;
+ padding-top: 5px;
+ padding-inline-start: 25px;
+ flex: 1 1 auto;
+ }
+
+ input[type='checkbox'] {
+ position: absolute;
+ inset-inline-start: 0;
+ top: 5px;
+ margin: 0;
+ }
+ }
+ }
+
+ .input.static .label_input__wrapper {
+ font-size: 14px;
+ padding: 10px;
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+ }
+
+ input[type='text'],
+ input[type='number'],
+ input[type='email'],
+ input[type='password'],
+ input[type='url'],
+ input[type='datetime-local'],
+ textarea {
+ box-sizing: border-box;
+ font-size: 14px;
+ line-height: 20px;
+ color: var(--color-text-primary);
+ display: block;
+ width: 100%;
+ outline: 0;
+ font-family: inherit;
+ resize: vertical;
+ background: var(--color-bg-secondary);
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+ padding: 10px 16px;
+
+ &:invalid {
+ box-shadow: none;
+ }
+
+ &:required:valid {
+ border-color: var(--color-text-success);
+ }
+
+ @media screen and (width <= 600px) {
+ font-size: 16px;
+ }
+ }
+
+ input[type='text'],
+ input[type='number'],
+ input[type='email'],
+ input[type='password'],
+ input[type='datetime-local'] {
+ &:focus:invalid:not(:placeholder-shown),
+ &:required:invalid:not(:placeholder-shown) {
+ border-color: var(--color-text-error);
+ }
+ }
+
+ .input.field_with_errors {
+ label {
+ color: var(--color-text-error);
+ }
+
+ input[type='text'],
+ input[type='number'],
+ input[type='email'],
+ input[type='password'],
+ input[type='datetime-local'],
+ textarea,
+ select {
+ border-color: var(--color-text-error);
+ }
+
+ .error {
+ display: block;
+ font-weight: 500;
+ color: var(--color-text-error);
+ margin-top: 4px;
+ }
+ }
+
+ .input.disabled {
+ opacity: 0.5;
+ }
+
+ .actions {
+ margin-top: 30px;
+ display: flex;
+ gap: 10px;
+
+ &.actions--top {
+ margin-top: 0;
+ margin-bottom: 30px;
+ }
+ }
+
+ .stacked-actions {
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+ margin-top: 30px;
+ margin-bottom: 15px;
+ }
+
+ .btn {
+ display: block;
+ width: 100%;
+ border: 0;
+ border-radius: 4px;
+ background: var(--color-bg-brand-base);
+ color: var(--color-text-on-brand-base);
+ font-size: 15px;
+ line-height: 22px;
+ height: auto;
+ padding: 7px 18px;
+ text-decoration: none;
+ text-align: center;
+ box-sizing: border-box;
+ cursor: pointer;
+ font-weight: 500;
+ outline: 0;
+
+ &:last-child {
+ margin-inline-end: 0;
+ }
+
+ &:active,
+ &:focus,
+ &:hover {
+ background: var(--color-bg-brand-base-hover);
+ }
+
+ &:disabled,
+ &:disabled:hover {
+ color: var(--color-text-on-disabled);
+ background: var(--color-bg-disabled);
+ }
+
+ &.negative {
+ background: var(--color-bg-error-base);
+
+ &:hover,
+ &:active,
+ &:focus {
+ background: var(--color-bg-error-base-hover);
+ }
+ }
+ }
+
+ select {
+ appearance: none;
+ box-sizing: border-box;
+ font-size: 14px;
+ color: var(--color-text-primary);
+ display: block;
+ width: 100%;
+ outline: 0;
+ font-family: inherit;
+ resize: vertical;
+ background: var(--color-bg-secondary);
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+ padding-inline-start: 10px;
+ padding-inline-end: 30px;
+ height: 41px;
+
+ @media screen and (width <= 600px) {
+ font-size: 16px;
+ }
+ }
+
+ h4 {
+ margin-bottom: 15px !important;
+ }
+
+ .label_input {
+ position: relative;
+
+ &__loading-indicator {
+ box-sizing: border-box;
+ position: absolute;
+ top: 0;
+ inset-inline-start: 0;
+ border: 1px solid transparent;
+ padding: 10px 16px;
+ width: 100%;
+ }
+
+ &__wrapper {
+ position: relative;
+ }
+
+ &__append {
+ position: absolute;
+ inset-inline-end: 3px;
+ top: 1px;
+ padding: 10px;
+ font-size: 14px;
+ color: var(--color-text-tertiary);
+ font-family: inherit;
+ pointer-events: none;
+ cursor: default;
+ max-width: 50%;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+
+ &::after {
+ content: '';
+ display: block;
+ position: absolute;
+ top: 0;
+ inset-inline-end: 0;
+ bottom: 1px;
+ width: 5px;
+ }
+ }
+ }
+
+ .status-card {
+ contain: unset;
+ }
+}
+
+/* Double-chevron icon for custom select components */
+.select-wrapper,
+.select .label_input__wrapper {
+ width: 100%;
+
+ &::after {
+ --icon-size: 11px;
+
+ content: '';
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ inset-inline-end: 9px;
+ width: var(--icon-size);
+ background-color: var(--color-text-tertiary);
+ pointer-events: none;
+ mask-image: url("data:image/svg+xml;utf8,");
+ mask-position: right center;
+ mask-size: var(--icon-size);
+ mask-repeat: no-repeat;
+ }
+}
+
+.block-icon {
+ display: block;
+ margin: 0 auto;
+ margin-bottom: 10px;
+ font-size: 24px;
+}
+
+.flash-message {
+ color: var(--color-text-brand);
+ background: transparent;
+ border: 1px solid var(--color-text-brand);
+ border-radius: 4px;
+ padding: 15px 10px;
+ margin-bottom: 30px;
+ text-align: center;
+
+ &.notice {
+ border: 1px solid var(--color-border-on-bg-success-softer);
+ background: var(--color-bg-success-softer);
+ color: var(--color-text-success);
+ }
+
+ &.warning {
+ border: 1px solid var(--color-border-on-bg-warning-softer);
+ background: var(--color-bg-warning-softer);
+ color: var(--color-text-warning);
+ }
+
+ &.alert {
+ border: 1px solid var(--color-border-on-bg-error-softer);
+ background: var(--color-bg-error-softer);
+ color: var(--color-text-error);
+ }
+
+ &.hidden {
+ display: none;
+ }
+
+ &.hidden-on-touch-devices {
+ @media screen and (pointer: coarse) {
+ display: none;
+ }
+ }
+
+ a {
+ display: inline-block;
+ color: var(--color-text-secondary);
+ text-decoration: none;
+
+ &:hover {
+ color: var(--color-text-primary);
+ text-decoration: underline;
+ }
+ }
+
+ &.warning a {
+ font-weight: 700;
+ color: inherit;
+ text-decoration: underline;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: none;
+ color: inherit;
+ }
+ }
+
+ p {
+ margin-bottom: 15px;
+ }
+
+ .oauth-code {
+ outline: 0;
+ box-sizing: border-box;
+ display: block;
+ width: 100%;
+ border: 0;
+ padding: 10px;
+ font-family: $font-monospace, monospace;
+ background: var(--color-bg-secondary);
+ color: var(--color-text-primary);
+ font-size: 14px;
+ margin: 0;
+
+ &::-moz-focus-inner {
+ border: 0;
+ }
+
+ &::-moz-focus-inner,
+ &:focus,
+ &:active {
+ outline: 0 !important;
+ }
+
+ &:focus {
+ background: var(--color-bg-brand-softer);
+ }
+ }
+
+ strong {
+ font-weight: 500;
+
+ @each $lang in $cjk-langs {
+ &:lang(#{$lang}) {
+ font-weight: 700;
+ }
+ }
+ }
+
+ @media screen and (440px < width <= 740px) {
+ margin-top: 40px;
+ }
+
+ &.translation-prompt {
+ text-align: unset;
+ color: unset;
+
+ a {
+ text-decoration: underline;
+ }
+ }
+}
+
+.flash-message-stack {
+ margin-bottom: 30px;
+
+ .flash-message {
+ border-radius: 0;
+ margin-bottom: 0;
+ border-top-width: 0;
+
+ &:first-child {
+ border-radius: 4px 4px 0 0;
+ border-top-width: 1px;
+ }
+
+ &:last-child {
+ border-radius: 0 0 4px 4px;
+
+ &:first-child {
+ border-radius: 4px;
+ }
+ }
+ }
+}
+
+.form-footer {
+ margin-top: 30px;
+ text-align: center;
+
+ a {
+ color: var(--color-text-secondary);
+ text-decoration: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+}
+
+.quick-nav {
+ list-style: none;
+ margin-bottom: 25px;
+ font-size: 14px;
+
+ li {
+ display: inline-block;
+ margin-inline-end: 10px;
+ }
+
+ a {
+ color: var(--color-text-brand);
+ text-transform: uppercase;
+ text-decoration: none;
+ font-weight: 700;
+
+ &:hover,
+ &:focus,
+ &:active {
+ color: var(--color-text-brand-soft);
+ }
+ }
+}
+
+.oauth-prompt,
+.follow-prompt {
+ margin-bottom: 30px;
+ color: var(--color-text-secondary);
+
+ h2 {
+ font-size: 16px;
+ margin-bottom: 30px;
+ text-align: center;
+ }
+
+ strong {
+ color: var(--color-text-primary);
+ font-weight: 500;
+
+ @each $lang in $cjk-langs {
+ &:lang(#{$lang}) {
+ font-weight: 700;
+ }
+ }
+ }
+}
+
+.oauth-prompt {
+ h3 {
+ color: var(--color-text-primary);
+ font-size: 17px;
+ line-height: 22px;
+ font-weight: 500;
+ margin-bottom: 30px;
+ }
+
+ p {
+ font-size: 14px;
+ line-height: 18px;
+ margin-bottom: 30px;
+ }
+
+ .permissions-list {
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+ background: var(--color-bg-secondary);
+ margin-bottom: 30px;
+ }
+
+ .actions {
+ margin: 0 -10px;
+ display: flex;
+
+ form {
+ box-sizing: border-box;
+ padding: 0 10px;
+ flex: 1 1 auto;
+ min-height: 1px;
+ width: 50%;
+ }
+ }
+}
+
+.qr-wrapper {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: flex-start;
+}
+
+.qr-code {
+ flex: 0 0 auto;
+ background: white;
+ padding: 4px;
+ margin: 0 10px 20px 0;
+ box-shadow: 0 0 15px var(--color-shadow-primary);
+ display: inline-block;
+
+ svg {
+ display: block;
+ margin: 0;
+ }
+}
+
+.qr-alternative {
+ margin-bottom: 20px;
+ color: var(--color-text-primary);
+ flex: 150px;
+
+ samp {
+ display: block;
+ font-size: 14px;
+ }
+}
+
+.action-pagination {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+
+ .actions,
+ .pagination {
+ flex: 1 1 auto;
+ }
+
+ .actions {
+ padding: 30px 0;
+ padding-inline-end: 20px;
+ flex: 0 0 auto;
+ }
+}
+
+.post-follow-actions {
+ text-align: center;
+ color: var(--color-text-secondary);
+
+ div {
+ margin-bottom: 4px;
+ }
+}
+
+.alternative-login {
+ margin-top: 20px;
+ margin-bottom: 20px;
+
+ h4 {
+ font-size: 16px;
+ color: var(--color-text-primary);
+ text-align: center;
+ margin-bottom: 20px;
+ border: 0;
+ padding: 0;
+ }
+
+ .button {
+ display: block;
+ }
+}
+
+.scope-danger {
+ color: var(--color-text-error);
+}
+
+.form_admin_settings_site_short_description,
+.form_admin_settings_site_description,
+.form_admin_settings_site_extended_description,
+.form_admin_settings_site_terms,
+.form_admin_settings_custom_css,
+.form_admin_settings_closed_registrations_message {
+ textarea {
+ font-family: $font-monospace, monospace;
+ }
+}
+
+.input-copy {
+ color: var(--color-text-primary);
+ background: var(--color-bg-secondary);
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+ display: flex;
+ align-items: center;
+ padding-inline-end: 4px;
+ position: relative;
+ top: 1px;
+ transition: border-color 300ms linear;
+
+ &__wrapper {
+ flex: 1 1 auto;
+ }
+
+ input[type='text'] {
+ background: transparent;
+ border: 0;
+ padding: 10px;
+ font-size: 14px;
+ font-family: $font-monospace, monospace;
+ }
+
+ button {
+ flex: 0 0 auto;
+ margin: 4px;
+ text-transform: none;
+ font-weight: 400;
+ font-size: 14px;
+ padding: 7px 18px;
+ padding-bottom: 6px;
+ width: auto;
+ transition: background 300ms linear;
+ }
+
+ &.copied {
+ border-color: var(--color-text-success);
+ transition: none;
+
+ button {
+ background: var(--color-bg-success-base);
+ transition: none;
+ }
+ }
+}
+
+.input.user_confirm_password,
+.input.user_website {
+ &:not(.field_with_errors) {
+ display: none;
+ }
+}
+
+.simple_form .h-captcha {
+ display: flex;
+ justify-content: center;
+ margin-bottom: 30px;
+}
+
+.permissions-list {
+ &__item {
+ padding: 15px;
+ color: var(--color-text-primary);
+ border-bottom: 1px solid var(--color-border-primary);
+ display: flex;
+ align-items: center;
+
+ &__text {
+ flex: 1 1 auto;
+
+ &__title {
+ font-weight: 500;
+ }
+
+ &__type {
+ color: var(--color-text-secondary);
+ overflow-wrap: anywhere;
+ }
+ }
+
+ &__icon {
+ flex: 0 0 auto;
+ font-size: 18px;
+ width: 30px;
+ color: var(--color-text-success);
+ display: flex;
+ align-items: center;
+ }
+
+ &:last-child {
+ border-bottom: 0;
+ }
+ }
+}
+
+// Only remove padding when listing applications, to prevent styling issues on
+// the Authorization page.
+.applications-list {
+ .permissions-list__item:last-child {
+ padding-bottom: 0;
+ }
+}
+
+.keywords-table {
+ thead {
+ th {
+ white-space: nowrap;
+ }
+
+ th:first-child {
+ width: 100%;
+ }
+ }
+
+ tfoot {
+ td {
+ border: 0;
+ }
+ }
+
+ .input.string {
+ margin-bottom: 0;
+ }
+
+ .label_input__wrapper {
+ margin-top: 10px;
+ }
+
+ .table-action-link {
+ margin-top: 10px;
+ white-space: nowrap;
+ }
+}
+
+.progress-tracker {
+ display: flex;
+ align-items: center;
+ padding-bottom: 30px;
+ margin-bottom: 30px;
+
+ li {
+ flex: 0 0 auto;
+ position: relative;
+ }
+
+ .separator {
+ height: 2px;
+ background: var(--color-border-primary);
+ flex: 1 1 auto;
+
+ &.completed {
+ background: var(--color-text-brand);
+ }
+ }
+
+ .circle {
+ box-sizing: border-box;
+ position: relative;
+ width: 30px;
+ height: 30px;
+ border-radius: 50%;
+ border: 2px solid var(--color-border-primary);
+ flex: 0 0 auto;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ svg {
+ width: 16px;
+ }
+ }
+
+ .label {
+ position: absolute;
+ font-size: 14px;
+ font-weight: 500;
+ color: var(--color-text-primary);
+ padding-top: 10px;
+ text-align: center;
+ width: 100px;
+ left: 50%;
+ transform: translateX(-50%);
+ }
+
+ li:first-child .label {
+ inset-inline-start: 0;
+ inset-inline-end: auto;
+ text-align: start;
+ transform: none;
+ }
+
+ li:last-child .label {
+ inset-inline-start: auto;
+ inset-inline-end: 0;
+ text-align: end;
+ transform: none;
+ }
+
+ .active .circle {
+ border-color: var(--color-text-brand);
+
+ &::before {
+ content: '';
+ width: 10px;
+ height: 10px;
+ border-radius: 50%;
+ background: var(--color-text-brand);
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ transform: translate(-50%, -50%);
+ }
+ }
+
+ .completed .circle {
+ border-color: var(--color-text-brand);
+ background: var(--color-text-brand);
+ }
+}
+
+.app-form {
+ padding: 16px;
+
+ &__avatar-input,
+ &__header-input {
+ display: block;
+ border-radius: 8px;
+ background: var(--color-bg-secondary);
+ position: relative;
+ cursor: pointer;
+
+ &:hover {
+ background-color: var(--color-bg-brand-softer);
+ }
+
+ img {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ border-radius: 8px;
+ z-index: 0;
+ }
+
+ .icon {
+ position: absolute;
+ inset-inline-start: 50%;
+ top: 50%;
+ transform: translate(-50%, -50%);
+ color: var(--color-text-secondary);
+ z-index: 3;
+ }
+
+ &.selected .icon {
+ color: var(--color-text-primary);
+ transform: none;
+ inset-inline-start: auto;
+ inset-inline-end: 8px;
+ top: auto;
+ bottom: 8px;
+ }
+
+ &.invalid img {
+ outline: 1px solid var(--color-text-error);
+ outline-offset: -1px;
+ }
+
+ &.invalid::before {
+ display: block;
+ content: '';
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ background: var(--color-bg-error-softer);
+ z-index: 2;
+ border-radius: 8px;
+ }
+ }
+
+ &__avatar-input {
+ width: 80px;
+ height: 80px;
+ }
+
+ &__header-input {
+ aspect-ratio: 580/193;
+ }
+
+ &__toggle {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+ color: var(--color-text-secondary);
+ font-size: 14px;
+ line-height: 20px;
+
+ .icon {
+ flex: 0 0 auto;
+ }
+
+ .icon {
+ width: 24px;
+ height: 24px;
+ }
+
+ &__label {
+ flex: 1 1 auto;
+
+ strong {
+ color: var(--color-text-primary);
+ font-weight: 600;
+ }
+
+ .hint {
+ display: block;
+ font-size: 14px;
+ color: var(--color-text-secondary);
+ }
+
+ .recommended {
+ position: absolute;
+ margin: 0 4px;
+ margin-top: -2px;
+ }
+ }
+
+ &__toggle {
+ flex: 0 0 auto;
+ display: flex;
+ align-items: center;
+ }
+
+ &__toggle > div {
+ display: flex;
+ border-inline-start: 1px solid var(--color-border-primary);
+ padding-inline-start: 16px;
+ }
+ }
+
+ &__link {
+ display: flex;
+ gap: 16px;
+ padding: 8px 0;
+ align-items: center;
+ text-decoration: none;
+ color: var(--color-text-primary);
+ margin-bottom: 16px;
+
+ &__text {
+ flex: 1 1 auto;
+ font-size: 14px;
+ line-height: 20px;
+ color: var(--color-text-secondary);
+
+ strong {
+ font-weight: 600;
+ display: block;
+ color: var(--color-text-primary);
+ }
+
+ .icon {
+ vertical-align: -5px;
+ width: 20px;
+ height: 20px;
+ }
+ }
+ }
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/glitch/doodle.scss b/app/javascript/flavours/glitch/styles_new/mastodon/glitch/doodle.scss
new file mode 100644
index 0000000000..eb053c14db
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/glitch/doodle.scss
@@ -0,0 +1,86 @@
+$doodle-background: #d9e1e8;
+
+.doodle-modal {
+ width: unset;
+}
+
+.doodle-modal__container {
+ background: $doodle-background;
+ text-align: center;
+ line-height: 0; // remove weird gap under canvas
+ canvas {
+ border: 5px solid $doodle-background;
+ }
+}
+
+.doodle-modal__action-bar {
+ .filler {
+ flex-grow: 1;
+ margin: 0;
+ padding: 0;
+ }
+
+ .doodle-toolbar {
+ line-height: 1;
+ display: flex;
+ flex-direction: column;
+ flex-grow: 0;
+ justify-content: space-around;
+
+ &.with-inputs {
+ label {
+ display: inline-block;
+ width: 70px;
+ text-align: end;
+ margin-inline-end: 2px;
+ }
+
+ input[type='number'],
+ input[type='text'] {
+ width: 40px;
+ }
+
+ span.val {
+ display: inline-block;
+ text-align: start;
+ width: 50px;
+ }
+ }
+ }
+
+ .doodle-palette {
+ padding-inline-end: 0 !important;
+ border: 1px solid black;
+ line-height: 0.2rem;
+ flex-grow: 0;
+ background: white;
+
+ button {
+ appearance: none;
+ width: 1rem;
+ height: 1rem;
+ margin: 0;
+ padding: 0;
+ text-align: center;
+ color: black;
+ text-shadow: 0 0 1px white;
+ cursor: pointer;
+ box-shadow: inset 0 0 1px rgba(white, 0.5);
+ border: 1px solid black;
+ outline-offset: -1px;
+
+ &.foreground {
+ outline: 1px dashed white;
+ }
+
+ &.background {
+ outline: 1px dashed red;
+ }
+
+ &.foreground.background {
+ outline: 1px dashed red;
+ border-color: white;
+ }
+ }
+ }
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/glitch/local_settings.scss b/app/javascript/flavours/glitch/styles_new/mastodon/glitch/local_settings.scss
new file mode 100644
index 0000000000..c016428da2
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/glitch/local_settings.scss
@@ -0,0 +1,174 @@
+@use '../variables' as *;
+
+.glitch.local-settings {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ border-radius: 16px;
+ background: var(--color-bg-primary);
+ backdrop-filter: $backdrop-blur-filter;
+ border: 1px solid var(--color-border-primary);
+ height: 80vh;
+ width: 80vw;
+ max-width: 740px;
+ max-height: 450px;
+ overflow: hidden;
+
+ label,
+ legend {
+ display: block;
+ font-size: 14px;
+ }
+
+ .boolean label,
+ .radio_buttons label {
+ position: relative;
+ padding-inline-start: 28px;
+ padding-top: 3px;
+
+ input {
+ position: absolute;
+ inset-inline-start: 0;
+ top: 0;
+ }
+ }
+
+ span.hint {
+ display: block;
+ color: var(--color-text-secondary);
+ }
+
+ h1 {
+ font-size: 18px;
+ font-weight: 500;
+ line-height: 24px;
+ margin-bottom: 20px;
+ }
+
+ h2 {
+ font-size: 15px;
+ font-weight: 500;
+ line-height: 20px;
+ margin-top: 20px;
+ margin-bottom: 10px;
+ }
+}
+
+.glitch.local-settings__navigation__item {
+ display: flex;
+ gap: 5px;
+ align-items: center;
+ padding: 15px 20px;
+ color: inherit;
+ background: var(--color-bg-secondary);
+ border: 0;
+ border-bottom: 1px var(--color-border-on-bg-secondary) solid;
+ cursor: pointer;
+ text-decoration: none;
+ outline: none;
+ box-sizing: border-box;
+ width: 100%;
+ text-align: start;
+ font-size: inherit;
+
+ .text-icon-button {
+ color: inherit;
+ transition: unset;
+ unicode-bidi: embed;
+ }
+
+ &:hover {
+ background: var(--color-bg-brand-soft);
+ color: var(--color-text-on-brand-base);
+ }
+
+ &.active {
+ background: var(--color-bg-brand-base);
+ color: var(--color-text-on-brand-base);
+ }
+
+ &.close,
+ &.close:hover {
+ color: var(--color-text-on-error-base);
+ background-color: var(--color-bg-error-base);
+ }
+}
+
+.glitch.local-settings__navigation {
+ background: var(--color-bg-secondary);
+ width: 212px;
+ font-size: 15px;
+ line-height: 20px;
+ overflow-y: auto;
+}
+
+.glitch.local-settings__page {
+ display: block;
+ flex: auto;
+ padding: 15px 20px;
+ width: 360px;
+ overflow-y: auto;
+}
+
+.glitch.local-settings__page__item {
+ margin-bottom: 2px;
+
+ .hint a {
+ color: var(--color-text-secondary);
+ font-weight: 500;
+ text-decoration: underline;
+
+ &:active,
+ &:focus,
+ &:hover {
+ text-decoration: none;
+ }
+ }
+}
+
+.glitch.local-settings__page__item.string,
+.glitch.local-settings__page__item.radio_buttons {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+@media screen and (width <= 630px) {
+ .glitch.local-settings__navigation {
+ width: 40px;
+ flex-shrink: 0;
+ }
+
+ .glitch.local-settings__navigation__item {
+ padding: 10px;
+
+ span:last-of-type {
+ display: none;
+ }
+ }
+}
+
+.deprecated-settings-label {
+ white-space: nowrap;
+}
+
+.deprecated-settings-info {
+ text-align: start;
+
+ ul {
+ padding: 10px;
+ margin-inline-start: 12px;
+ list-style: disc inside;
+ }
+
+ a {
+ color: var(--color-text-secondary);
+ font-weight: 500;
+ text-decoration: underline;
+
+ &:active,
+ &:focus,
+ &:hover {
+ text-decoration: none;
+ }
+ }
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/lists.scss b/app/javascript/flavours/glitch/styles_new/mastodon/lists.scss
new file mode 100644
index 0000000000..6019cd8002
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/lists.scss
@@ -0,0 +1,19 @@
+.no-list {
+ list-style: none;
+
+ li {
+ display: inline-block;
+ margin: 0 5px;
+ }
+}
+
+.recovery-codes {
+ list-style: none;
+ margin: 0 auto;
+
+ li {
+ font-size: 125%;
+ line-height: 1.5;
+ letter-spacing: 1px;
+ }
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/modal.scss b/app/javascript/flavours/glitch/styles_new/mastodon/modal.scss
new file mode 100644
index 0000000000..6af2a182b6
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/modal.scss
@@ -0,0 +1,53 @@
+@use 'variables' as *;
+
+.modal-layout {
+ background: var(--color-bg-brand-softer);
+ display: flex;
+ flex-direction: column;
+ height: 100vh;
+ padding: 0;
+}
+
+.modal-layout__mastodon {
+ display: flex;
+ flex: 1;
+ flex-direction: column;
+ justify-content: flex-end;
+
+ > div {
+ flex: 1;
+ max-height: 235px;
+ position: relative;
+
+ img {
+ max-height: 100%;
+ max-width: 100%;
+ height: 100%;
+ position: absolute;
+ bottom: 0;
+ inset-inline-start: 0;
+ }
+ }
+}
+
+@media screen and (width <= 600px) {
+ .account-header {
+ margin-top: 0;
+ }
+}
+
+.with-zig-zag-decoration {
+ &::after {
+ content: '';
+ position: absolute;
+ inset: auto 0 0;
+ height: 32px;
+ background-color: var(--color-bg-brand-softer);
+
+ /* Decorative zig-zag pattern at the bottom of the page */
+ mask-image: url('data:image/svg+xml;utf8,');
+ mask-position: bottom;
+ mask-repeat: repeat-x;
+ z-index: -1;
+ }
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/polls.scss b/app/javascript/flavours/glitch/styles_new/mastodon/polls.scss
new file mode 100644
index 0000000000..19fb8dd505
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/polls.scss
@@ -0,0 +1,232 @@
+@use 'sass:color';
+@use 'variables' as *;
+
+.poll {
+ margin-top: 16px;
+ font-size: 14px;
+
+ li {
+ margin-bottom: 10px;
+ position: relative;
+ }
+
+ &__chart {
+ border-radius: 4px;
+ display: block;
+ background: rgb(from var(--color-text-brand) r g b / 60%);
+ height: 5px;
+ min-width: 1%;
+
+ &.leading {
+ background: var(--color-text-brand);
+ }
+ }
+
+ progress {
+ border: 0;
+ display: block;
+ width: 100%;
+ height: 5px;
+ appearance: none;
+ background: transparent;
+
+ &::-webkit-progress-bar {
+ background: transparent;
+ }
+
+ // Those rules need to be entirely separate or they won't work, hence the
+ // duplication
+ &::-moz-progress-bar {
+ border-radius: 4px;
+ background: rgb(from var(--color-text-brand) r g b / 60%);
+ }
+
+ &::-webkit-progress-value {
+ border-radius: 4px;
+ background: rgb(from var(--color-text-brand) r g b / 60%);
+ }
+ }
+
+ &__option {
+ position: relative;
+ display: flex;
+ align-items: flex-start;
+ gap: 8px;
+ padding: 6px 0;
+ line-height: 18px;
+ cursor: default;
+ overflow: hidden;
+
+ &__text {
+ display: inline-block;
+ overflow-wrap: break-word;
+ max-width: calc(100% - 45px - 25px);
+ }
+
+ input[type='radio'],
+ input[type='checkbox'] {
+ display: none;
+ }
+
+ .autosuggest-input {
+ flex: 1 1 auto;
+ }
+
+ input[type='text'] {
+ display: block;
+ box-sizing: border-box;
+ width: 100%;
+ font-size: 14px;
+ color: var(--color-text-primary);
+ outline: 0;
+ font-family: inherit;
+ background: var(--color-bg-primary);
+ border: 1px solid var(--color-text-secondary);
+ border-radius: 4px;
+ padding: 8px 12px;
+
+ &:focus {
+ border-color: var(--color-text-brand);
+ }
+
+ @media screen and (width <= 600px) {
+ font-size: 16px;
+ line-height: 24px;
+ letter-spacing: 0.5px;
+ }
+ }
+
+ &.selectable {
+ cursor: pointer;
+ }
+
+ &.editable,
+ &.disabled {
+ align-items: center;
+ overflow: visible;
+ }
+ }
+
+ &__input {
+ display: block;
+ position: relative;
+ border: 1px solid var(--color-text-secondary);
+ box-sizing: border-box;
+ width: 17px;
+ height: 17px;
+ border-radius: 50%;
+ flex: 0 0 auto;
+
+ &.checkbox {
+ border-radius: 4px;
+ }
+
+ &:active,
+ &:focus,
+ &:hover {
+ border-color: var(--color-text-success);
+ border-width: 4px;
+ }
+
+ &.active {
+ background-color: var(--color-bg-success-base);
+ border-color: var(--color-text-success);
+ }
+
+ &::-moz-focus-inner {
+ outline: 0 !important;
+ border: 0;
+ }
+
+ &:focus,
+ &:active {
+ outline: 0 !important;
+ }
+
+ &.disabled {
+ border-color: var(--color-text-disabled);
+
+ &.active {
+ background: var(--color-text-disabled);
+ }
+
+ &:active,
+ &:focus,
+ &:hover {
+ border-color: var(--color-text-disabled);
+ border-width: 1px;
+ }
+ }
+ }
+
+ &__option.editable &__input,
+ &__option.disabled &__input {
+ &:active,
+ &:focus,
+ &:hover {
+ border-color: var(--color-text-primary);
+ border-width: 1px;
+ }
+ }
+
+ &__number {
+ display: inline-block;
+ width: 45px;
+ font-weight: 700;
+ flex: 0 0 45px;
+ }
+
+ &__voted {
+ padding: 0 5px;
+ display: inline-block;
+
+ &__mark {
+ font-size: 18px;
+ }
+ }
+
+ &__footer {
+ padding-top: 6px;
+ padding-bottom: 5px;
+ color: var(--color-text-tertiary);
+ }
+
+ &__link {
+ display: inline;
+ background: transparent;
+ padding: 0;
+ margin: 0;
+ border: 0;
+ color: var(--color-text-tertiary);
+ text-decoration: underline;
+ font-size: inherit;
+
+ &:hover {
+ text-decoration: none;
+ }
+
+ &:active,
+ &:focus {
+ background-color: var(--color-bg-secondary);
+ }
+ }
+
+ .button {
+ height: 36px;
+ padding: 0 16px;
+ margin-inline-end: 10px;
+ font-size: 14px;
+ }
+}
+
+.muted .poll {
+ color: var(--color-text-tertiary);
+
+ &__chart {
+ background: rgb(from var(--color-text-brand) r g b / 40%);
+
+ &.leading {
+ background: rgb(from var(--color-text-brand) r g b / 60%);
+ }
+ }
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/reset.scss b/app/javascript/flavours/glitch/styles_new/mastodon/reset.scss
new file mode 100644
index 0000000000..3644b94cdf
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/reset.scss
@@ -0,0 +1,58 @@
+/* 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;
+}
+
+html:has(body.custom-scrollbars) {
+ scrollbar-color: var(--color-text-secondary) var(--color-bg-secondary);
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/rich_text.scss b/app/javascript/flavours/glitch/styles_new/mastodon/rich_text.scss
new file mode 100644
index 0000000000..25342b560a
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/rich_text.scss
@@ -0,0 +1,151 @@
+.status__content__text,
+.e-content,
+.edit-indicator__content,
+.reply-indicator__content {
+ code {
+ background: var(--rich-text-container-color);
+ padding: 4px;
+ border-radius: 4px;
+ color: var(--rich-text-text-color);
+ font-size: 0.85em;
+ }
+
+ pre {
+ background: var(--rich-text-container-color);
+ padding: 8px;
+ border-radius: 4px;
+ color: var(--rich-text-text-color);
+
+ code {
+ padding: 0;
+ background: transparent;
+ }
+ }
+
+ pre,
+ blockquote {
+ margin-bottom: 22px;
+ white-space: pre-wrap;
+ unicode-bidi: plaintext;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ blockquote {
+ padding-inline-start: 32px;
+ color: var(--rich-text-text-color);
+ white-space: normal;
+ position: relative;
+
+ &::before {
+ display: block;
+ content: '';
+ width: 24px;
+ height: 20px;
+ mask-image: url('@/images/quote.svg');
+ background-color: var(--rich-text-decorations-color);
+ position: absolute;
+ inset-inline-start: 0;
+ top: 0;
+ }
+
+ blockquote {
+ margin-top: 4px;
+ border-inline-start: 3px solid var(--rich-text-decorations-color);
+ padding-inline-start: 16px;
+
+ &::before {
+ display: none;
+ }
+ }
+
+ p:last-of-type {
+ margin-bottom: 0;
+ }
+ }
+
+ & > ul,
+ & > ol {
+ margin-bottom: 22px;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ h1,
+ h2,
+ h3,
+ h4,
+ h5 {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ }
+
+ h1,
+ h2 {
+ font-weight: 700;
+ font-size: 1.2em;
+ }
+
+ h2 {
+ font-size: 1.1em;
+ }
+
+ h3,
+ h4,
+ h5 {
+ font-weight: 500;
+ }
+
+ b,
+ strong {
+ font-weight: 700;
+ }
+
+ em,
+ i {
+ font-style: italic;
+ }
+
+ sub {
+ font-size: smaller;
+ vertical-align: sub;
+ }
+
+ sup {
+ font-size: smaller;
+ vertical-align: super;
+ }
+
+ ul,
+ ol {
+ padding-inline-start: 24px;
+
+ li {
+ padding-inline-start: 8px;
+
+ &::marker {
+ text-align: end;
+ }
+ }
+
+ p {
+ margin: 0;
+ }
+ }
+
+ ul {
+ list-style-type: '•';
+
+ li::marker {
+ text-align: start;
+ }
+ }
+
+ ol {
+ list-style-type: decimal;
+ }
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/rtl.scss b/app/javascript/flavours/glitch/styles_new/mastodon/rtl.scss
new file mode 100644
index 0000000000..0a9ff38baf
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/rtl.scss
@@ -0,0 +1,89 @@
+@use 'variables' as *;
+
+body.rtl {
+ direction: rtl;
+
+ .reactions-bar {
+ direction: rtl;
+ }
+
+ .announcements__mastodon,
+ .drawer__inner__mastodon > img {
+ transform: scaleX(-1);
+ }
+
+ .boost-modal__status-time {
+ float: left;
+ }
+
+ .compose-form .autosuggest-textarea__textarea {
+ padding-right: 10px;
+ padding-left: 10px + 22px;
+ }
+
+ .columns-area {
+ direction: rtl;
+ }
+
+ .account__avatar-wrapper {
+ float: right;
+ }
+
+ .column-header__setting-arrows {
+ float: left;
+ }
+
+ .setting-meta__label {
+ float: left;
+ }
+
+ .status__info .status__display-name {
+ padding-left: 25px;
+ padding-right: 0;
+ }
+
+ .account__header__tabs__buttons > .icon-button {
+ margin-right: 0;
+ margin-left: 8px;
+ }
+
+ .status__relative-time {
+ float: left;
+ text-align: left;
+ }
+
+ .status__action-bar-button {
+ float: right;
+ }
+
+ .status__action-bar-dropdown {
+ float: right;
+ }
+
+ .detailed-status__display-name .display-name {
+ text-align: right;
+ }
+
+ .detailed-status__display-avatar {
+ float: right;
+ }
+
+ .admin-wrapper {
+ direction: rtl;
+ }
+
+ .react-swipeable-view-container > * {
+ direction: rtl;
+ }
+
+ .column-back-button__icon {
+ transform: scale(-1, 1);
+ }
+
+ .dismissable-banner,
+ .warning-banner {
+ &__action {
+ float: left;
+ }
+ }
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/tables.scss b/app/javascript/flavours/glitch/styles_new/mastodon/tables.scss
new file mode 100644
index 0000000000..8e303aff68
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/tables.scss
@@ -0,0 +1,375 @@
+@use 'variables' as *;
+
+.table {
+ width: 100%;
+ max-width: 100%;
+ border-spacing: 0;
+ border-collapse: collapse;
+
+ th,
+ td {
+ padding: 8px;
+ line-height: 18px;
+ vertical-align: top;
+ border-bottom: 1px solid var(--color-border-primary);
+ text-align: start;
+ background: var(--color-bg-primary);
+
+ &.critical {
+ font-weight: 700;
+ color: var(--color-text-warning);
+ }
+ }
+
+ & > thead > tr > th {
+ vertical-align: bottom;
+ font-weight: 500;
+ }
+
+ & > tbody > tr > th {
+ font-weight: 500;
+ }
+
+ & > tbody > tr:nth-child(odd) > td,
+ & > tbody > tr:nth-child(odd) > th {
+ background: var(--color-bg-primary);
+ }
+
+ & > tbody > tr:last-child > td,
+ & > tbody > tr:last-child > th {
+ border-bottom: 0;
+ }
+
+ a {
+ color: var(--color-text-secondary);
+ text-decoration: none;
+
+ &:hover {
+ color: var(--color-text-brand);
+ }
+ }
+
+ strong {
+ font-weight: 500;
+
+ @each $lang in $cjk-langs {
+ &:lang(#{$lang}) {
+ font-weight: 700;
+ }
+ }
+ }
+
+ &.inline-table {
+ & > tbody > tr:nth-child(odd) {
+ & > td,
+ & > th {
+ background: transparent;
+ }
+ }
+
+ & > tbody > tr:first-child {
+ & > td,
+ & > th {
+ border-top: 0;
+ }
+ }
+ }
+
+ &.horizontal-table {
+ border-collapse: collapse;
+ border-style: hidden;
+
+ & > tbody > tr > th,
+ & > tbody > tr > td {
+ padding: 11px 10px;
+ background: transparent;
+ border: 1px solid var(--color-border-primary);
+ color: var(--color-text-primary);
+ }
+
+ & > tbody > tr > th {
+ color: var(--color-text-secondary);
+ font-weight: 600;
+ }
+ }
+
+ &.batch-table {
+ & > thead > tr > th {
+ background: var(--color-bg-primary);
+ border-top: 1px solid var(--color-border-primary);
+ border-bottom: 1px solid var(--color-border-primary);
+
+ &:first-child {
+ border-radius: 4px 0 0;
+ border-inline-start: 1px solid var(--color-border-primary);
+ }
+
+ &:last-child {
+ border-radius: 0 4px 0 0;
+ border-inline-end: 1px solid var(--color-border-primary);
+ }
+ }
+ }
+
+ &--invites tbody td {
+ vertical-align: middle;
+ }
+}
+
+.table-wrapper {
+ overflow: auto;
+ margin-bottom: 20px;
+}
+
+samp {
+ font-family: $font-monospace, monospace;
+}
+
+button.table-action-link {
+ background: transparent;
+ border: 0;
+ font: inherit;
+}
+
+button.table-action-link,
+a.table-action-link {
+ text-decoration: none;
+ display: inline-block;
+ margin-inline-end: 5px;
+ padding: 0 10px;
+ color: var(--color-text-secondary);
+ font-weight: 500;
+ white-space: nowrap;
+
+ &:hover {
+ color: var(--color-text-brand);
+ }
+
+ &:first-child {
+ padding-inline-start: 0;
+ }
+}
+
+.batch-table {
+ &--no-toolbar {
+ .batch-table__toolbar {
+ position: static;
+ height: 4px;
+ border-bottom: none;
+ }
+ }
+
+ &__toolbar,
+ &__row {
+ display: flex;
+
+ &__select {
+ box-sizing: border-box;
+ padding: 8px 16px;
+ cursor: pointer;
+ min-height: 100%;
+
+ input {
+ margin-top: 8px;
+ }
+
+ &--aligned {
+ display: flex;
+ align-items: center;
+
+ input {
+ margin-top: 0;
+ }
+ }
+ }
+
+ &__actions,
+ &__content {
+ padding: 8px 0;
+ padding-inline-end: 16px;
+ flex: 1 1 auto;
+ }
+ }
+
+ &__toolbar {
+ position: sticky;
+ top: 0;
+ z-index: 200;
+ border: 1px solid var(--color-border-primary);
+ background: var(--color-bg-primary);
+ border-radius: 4px 4px 0 0;
+ height: 47px;
+ align-items: center;
+
+ &__actions {
+ text-align: end;
+ padding-inline-end: 16px - 5px;
+
+ .table-action-link {
+ padding: 0;
+ }
+ }
+ }
+
+ &__select-all {
+ background: var(--color-bg-primary);
+ height: 47px;
+ align-items: center;
+ justify-content: center;
+ border: 1px solid var(--color-border-primary);
+ border-top: 0;
+ color: var(--color-text-primary);
+ display: none;
+
+ &.active {
+ display: flex;
+ }
+
+ .selected,
+ .not-selected {
+ display: none;
+
+ &.active {
+ display: block;
+ }
+ }
+
+ strong {
+ font-weight: 700;
+ }
+
+ span {
+ padding: 8px;
+ display: inline-block;
+ }
+
+ button {
+ background: transparent;
+ border: 0;
+ font: inherit;
+ color: var(--color-text-brand);
+ border-radius: 4px;
+ font-weight: 700;
+ padding: 8px;
+
+ &:hover,
+ &:focus,
+ &:active {
+ background: var(--color-bg-secondary);
+ }
+ }
+ }
+
+ &__form {
+ padding: 16px;
+ border: 1px solid var(--color-border-primary);
+ border-top: 0;
+ background: var(--color-bg-primary);
+
+ .fields-row {
+ padding-top: 0;
+ margin-bottom: 0;
+ }
+ }
+
+ &__row {
+ border: 1px solid var(--color-border-primary);
+ border-top: 0;
+ background: var(--color-bg-primary);
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ .optional &:first-child {
+ border-top: 1px solid var(--color-border-primary);
+ }
+ }
+
+ &:last-child {
+ border-radius: 0 0 4px 4px;
+ }
+
+ &__content {
+ padding-top: 12px;
+ padding-bottom: 16px;
+ overflow: hidden;
+
+ &--unpadded {
+ padding: 0;
+ }
+
+ &--padded {
+ padding: 12px 16px 16px;
+ }
+
+ &--with-image {
+ display: flex;
+ align-items: center;
+ }
+
+ &__image {
+ flex: 0 0 auto;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ margin-inline-end: 10px;
+
+ .emojione {
+ width: 32px;
+ height: 32px;
+ }
+ }
+
+ &__text {
+ flex: 1 1 auto;
+ }
+
+ &__quote {
+ padding: 12px;
+ padding-top: 0;
+ }
+
+ &__extra {
+ flex: 0 0 auto;
+ text-align: end;
+ color: var(--color-text-secondary);
+ font-weight: 500;
+ }
+ }
+
+ .directory__tag {
+ margin: 0;
+ width: 100%;
+
+ a {
+ background: transparent;
+ border-radius: 0;
+ }
+ }
+ }
+
+ &.optional .batch-table__toolbar,
+ &.optional .batch-table__row__select {
+ @media screen and (max-width: $no-gap-breakpoint) {
+ display: none;
+ }
+ }
+
+ // Reset the status card to not have borders, background or padding when
+ // inline in the table of statuses
+ .batch-table__row__content > .status__card {
+ border: none;
+ background: none;
+ padding: 0;
+ }
+
+ @media screen and (width <= 870px) {
+ .accounts-table tbody td.optional {
+ display: none;
+ }
+ }
+}
+
+.one-liner {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
diff --git a/app/javascript/flavours/glitch/styles_new/mastodon/widgets.scss b/app/javascript/flavours/glitch/styles_new/mastodon/widgets.scss
new file mode 100644
index 0000000000..69c79cd1e6
--- /dev/null
+++ b/app/javascript/flavours/glitch/styles_new/mastodon/widgets.scss
@@ -0,0 +1,178 @@
+@use 'sass:color';
+@use 'variables' as *;
+
+.directory {
+ &__tag {
+ box-sizing: border-box;
+ margin-bottom: 10px;
+
+ & > a,
+ & > div {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ border: 1px solid var(--color-border-primary);
+ border-radius: 4px;
+ padding: 15px;
+ text-decoration: none;
+ color: inherit;
+ box-shadow: 0 0 15px var(--color-shadow-primary);
+ }
+
+ & > a {
+ &:hover,
+ &:active,
+ &:focus {
+ background: var(--color-bg-primary);
+ }
+ }
+
+ &.active > a {
+ background: var(--color-bg-brand-base);
+ cursor: default;
+ }
+
+ &.disabled > div {
+ opacity: 0.5;
+ cursor: default;
+ }
+
+ h4 {
+ flex: 1 1 auto;
+ font-size: 18px;
+ font-weight: 700;
+ color: var(--color-text-primary);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+
+ small {
+ display: block;
+ font-weight: 400;
+ font-size: 15px;
+ margin-top: 8px;
+ color: var(--color-text-secondary);
+ }
+ }
+
+ &.active h4 {
+ &,
+ small,
+ .trends__item__current {
+ color: var(--color-text-primary);
+ }
+ }
+
+ .avatar-stack {
+ flex: 0 0 auto;
+ width: (36px + 4px) * 3;
+ }
+
+ &.active .avatar-stack .account__avatar {
+ border-color: var(--color-text-brand);
+ }
+
+ .trends__item__current {
+ padding-inline-end: 0;
+ }
+ }
+}
+
+.accounts-table {
+ width: 100%;
+
+ .account {
+ max-width: calc(56px + 30ch);
+ padding: 0;
+ border: 0;
+ }
+
+ strong {
+ font-weight: 700;
+ }
+
+ thead th {
+ text-align: center;
+ text-transform: uppercase;
+ color: var(--color-text-secondary);
+ font-weight: 700;
+ padding: 10px;
+
+ &:first-child {
+ text-align: start;
+ }
+ }
+
+ tbody td {
+ padding: 15px 0;
+ vertical-align: middle;
+ border-bottom: 1px solid var(--color-border-primary);
+ }
+
+ tbody tr:last-child td {
+ border-bottom: 0;
+ }
+
+ &__count {
+ width: 120px;
+ text-align: center;
+ font-size: 15px;
+ font-weight: 500;
+ color: var(--color-text-primary);
+
+ small {
+ display: block;
+ color: var(--color-text-secondary);
+ font-weight: 400;
+ font-size: 14px;
+ }
+ }
+
+ tbody td.accounts-table__extra {
+ width: 120px;
+ text-align: end;
+ color: var(--color-text-secondary);
+ padding-inline-end: 16px;
+
+ a {
+ text-decoration: none;
+ color: inherit;
+
+ &:focus,
+ &:hover,
+ &:active {
+ color: var(--color-text-brand);
+ }
+ }
+ }
+
+ &__comment {
+ width: 50%;
+ vertical-align: initial !important;
+ }
+
+ tbody td.accounts-table__interrelationships {
+ width: 21px;
+ padding-inline-end: 16px;
+ }
+
+ .icon {
+ &.active {
+ color: var(--color-text-brand);
+ }
+
+ &.passive {
+ color: var(--color-text-warning);
+ }
+
+ &.active.passive {
+ color: var(--color-text-success);
+ }
+ }
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ tbody td.optional {
+ display: none;
+ }
+ }
+}
diff --git a/app/javascript/skins/glitch/contrast_new/common.scss b/app/javascript/skins/glitch/contrast_new/common.scss
new file mode 100644
index 0000000000..7389e70a18
--- /dev/null
+++ b/app/javascript/skins/glitch/contrast_new/common.scss
@@ -0,0 +1 @@
+@use '@/flavours/glitch/styles_new/contrast';
diff --git a/app/javascript/skins/glitch/contrast_new/names.yml b/app/javascript/skins/glitch/contrast_new/names.yml
new file mode 100644
index 0000000000..061e1d5c7f
--- /dev/null
+++ b/app/javascript/skins/glitch/contrast_new/names.yml
@@ -0,0 +1,4 @@
+en:
+ skins:
+ glitch:
+ contrast_new: Experimental High contrast
diff --git a/app/javascript/skins/glitch/default_new/common.scss b/app/javascript/skins/glitch/default_new/common.scss
new file mode 100644
index 0000000000..187e12c0b6
--- /dev/null
+++ b/app/javascript/skins/glitch/default_new/common.scss
@@ -0,0 +1 @@
+@use '@/flavours/glitch/styles_new/application';
diff --git a/app/javascript/skins/glitch/default_new/names.yml b/app/javascript/skins/glitch/default_new/names.yml
new file mode 100644
index 0000000000..e947dbdddf
--- /dev/null
+++ b/app/javascript/skins/glitch/default_new/names.yml
@@ -0,0 +1,4 @@
+en:
+ skins:
+ glitch:
+ default_new: Experimental Mastodon (default)
diff --git a/app/javascript/skins/glitch/mastodon-light_new/common.scss b/app/javascript/skins/glitch/mastodon-light_new/common.scss
new file mode 100644
index 0000000000..73abfe2b95
--- /dev/null
+++ b/app/javascript/skins/glitch/mastodon-light_new/common.scss
@@ -0,0 +1 @@
+@use '@/flavours/glitch/styles_new/mastodon-light';
diff --git a/app/javascript/skins/glitch/mastodon-light_new/names.yml b/app/javascript/skins/glitch/mastodon-light_new/names.yml
new file mode 100644
index 0000000000..cd29903332
--- /dev/null
+++ b/app/javascript/skins/glitch/mastodon-light_new/names.yml
@@ -0,0 +1,4 @@
+en:
+ skins:
+ glitch:
+ mastodon-light_new: Experimental Mastodon (light)
diff --git a/stylelint.config.js b/stylelint.config.js
index 67a59cdac9..202c23321b 100644
--- a/stylelint.config.js
+++ b/stylelint.config.js
@@ -4,6 +4,7 @@ module.exports = {
'app/javascript/styles/mastodon/reset.scss',
'app/javascript/styles_new/mastodon/reset.scss',
'app/javascript/flavours/glitch/styles/reset.scss',
+ 'app/javascript/flavours/glitch/styles_new/mastodon/reset.scss',
'app/javascript/styles/win95.scss',
'coverage/**/*',
'node_modules/**/*',