App.scss 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916
  1. // stylelint-disable rscss/class-format
  2. /* stylelint-disable no-descending-specificity */
  3. @import "./variables";
  4. @import "./panel";
  5. :root {
  6. --navbar-height: 3.5rem;
  7. --post-line-height: 1.4;
  8. // Z-Index stuff
  9. --ZI_media_modal: 9000;
  10. --ZI_modals_popovers: 8500;
  11. --ZI_modals: 8000;
  12. --ZI_navbar_popovers: 7500;
  13. --ZI_navbar: 7000;
  14. --ZI_popovers: 6000;
  15. }
  16. html {
  17. font-size: 14px;
  18. // overflow-x: clip causes my browser's tab to crash with SIGILL lul
  19. }
  20. body {
  21. font-family: sans-serif;
  22. font-family: var(--interfaceFont, sans-serif);
  23. margin: 0;
  24. color: $fallback--text;
  25. color: var(--text, $fallback--text);
  26. -webkit-font-smoothing: antialiased;
  27. -moz-osx-font-smoothing: grayscale;
  28. overscroll-behavior-y: none;
  29. overflow-x: clip;
  30. overflow-y: scroll;
  31. &.hidden {
  32. display: none;
  33. }
  34. }
  35. // ## Custom scrollbars
  36. // Only show custom scrollbars on devices which
  37. // have a cursor/pointer to operate them
  38. @media (any-pointer: fine) {
  39. * {
  40. scrollbar-color: var(--btn) transparent;
  41. &::-webkit-scrollbar {
  42. background: transparent;
  43. }
  44. &::-webkit-scrollbar-button,
  45. &::-webkit-scrollbar-thumb {
  46. background-color: var(--btn);
  47. box-shadow: var(--buttonShadow);
  48. border-radius: var(--btnRadius);
  49. }
  50. // horizontal/vertical/increment/decrement are webkit-specific stuff
  51. // that indicates whether we're affecting vertical scrollbar, increase button etc
  52. // stylelint-disable selector-pseudo-class-no-unknown
  53. &::-webkit-scrollbar-button {
  54. --___bgPadding: 2px;
  55. color: var(--btnText);
  56. background-repeat: no-repeat, no-repeat;
  57. &:horizontal {
  58. background-size: 50% calc(50% - var(--___bgPadding)), 50% calc(50% - var(--___bgPadding));
  59. &:increment {
  60. background-image:
  61. linear-gradient(45deg, var(--btnText) 50%, transparent 51%),
  62. linear-gradient(-45deg, transparent 50%, var(--btnText) 51%);
  63. background-position: top var(--___bgPadding) left 50%, right 50% bottom var(--___bgPadding);
  64. }
  65. &:decrement {
  66. background-image:
  67. linear-gradient(45deg, transparent 50%, var(--btnText) 51%),
  68. linear-gradient(-45deg, var(--btnText) 50%, transparent 51%);
  69. background-position: bottom var(--___bgPadding) right 50%, left 50% top var(--___bgPadding);
  70. }
  71. }
  72. &:vertical {
  73. background-size: calc(50% - var(--___bgPadding)) 50%, calc(50% - var(--___bgPadding)) 50%;
  74. &:increment {
  75. background-image:
  76. linear-gradient(-45deg, transparent 50%, var(--btnText) 51%),
  77. linear-gradient(45deg, transparent 50%, var(--btnText) 51%);
  78. background-position: right var(--___bgPadding) top 50%, left var(--___bgPadding) top 50%;
  79. }
  80. &:decrement {
  81. background-image:
  82. linear-gradient(-45deg, var(--btnText) 50%, transparent 51%),
  83. linear-gradient(45deg, var(--btnText) 50%, transparent 51%);
  84. background-position: left var(--___bgPadding) top 50%, right var(--___bgPadding) top 50%;
  85. }
  86. }
  87. }
  88. // stylelint-enable selector-pseudo-class-no-unknown
  89. }
  90. // Body should have background to scrollbar otherwise it will use white (body color?)
  91. html {
  92. scrollbar-color: var(--selectedMenu) var(--wallpaper);
  93. background: var(--wallpaper);
  94. }
  95. }
  96. a {
  97. text-decoration: none;
  98. color: $fallback--link;
  99. color: var(--link, $fallback--link);
  100. }
  101. h4 {
  102. margin: 0;
  103. }
  104. .iconLetter {
  105. display: inline-block;
  106. text-align: center;
  107. font-weight: 1000;
  108. }
  109. i[class*="icon-"],
  110. .svg-inline--fa,
  111. .iconLetter {
  112. color: $fallback--icon;
  113. color: var(--icon, $fallback--icon);
  114. }
  115. .button-unstyled:hover,
  116. a:hover {
  117. > i[class*="icon-"],
  118. > .svg-inline--fa,
  119. > .iconLetter {
  120. color: var(--text);
  121. }
  122. }
  123. nav {
  124. z-index: var(--ZI_navbar);
  125. background-color: $fallback--fg;
  126. background-color: var(--topBar, $fallback--fg);
  127. color: $fallback--faint;
  128. color: var(--faint, $fallback--faint);
  129. box-shadow: 0 0 4px rgb(0 0 0 / 60%);
  130. box-shadow: var(--topBarShadow);
  131. box-sizing: border-box;
  132. height: var(--navbar-height);
  133. position: fixed;
  134. }
  135. #sidebar {
  136. grid-area: sidebar;
  137. }
  138. #modal {
  139. position: absolute;
  140. z-index: var(--ZI_modals);
  141. }
  142. .column.-scrollable {
  143. top: var(--navbar-height);
  144. position: sticky;
  145. }
  146. #main-scroller {
  147. grid-area: content;
  148. position: relative;
  149. }
  150. #notifs-column {
  151. grid-area: notifs;
  152. }
  153. .app-bg-wrapper {
  154. position: fixed;
  155. height: 100%;
  156. top: var(--navbar-height);
  157. z-index: -1000;
  158. left: 0;
  159. right: -20px;
  160. background-size: cover;
  161. background-repeat: no-repeat;
  162. background-color: var(--wallpaper);
  163. background-image: var(--body-background-image);
  164. background-position: 50%;
  165. }
  166. .underlay {
  167. grid-column: 1 / span 3;
  168. grid-row: 1 / 1;
  169. pointer-events: none;
  170. background-color: rgb(0 0 0 / 15%);
  171. background-color: var(--underlay, rgb(0 0 0 / 15%));
  172. z-index: -1000;
  173. }
  174. .app-layout {
  175. --miniColumn: 25rem;
  176. --maxiColumn: 45rem;
  177. --columnGap: 1em;
  178. --status-margin: 0.75em;
  179. --effectiveSidebarColumnWidth: minmax(var(--miniColumn), var(--sidebarColumnWidth, var(--miniColumn)));
  180. --effectiveNotifsColumnWidth: minmax(var(--miniColumn), var(--notifsColumnWidth, var(--miniColumn)));
  181. --effectiveContentColumnWidth: minmax(var(--miniColumn), var(--contentColumnWidth, var(--maxiColumn)));
  182. position: relative;
  183. display: grid;
  184. grid-template-columns:
  185. var(--effectiveSidebarColumnWidth)
  186. var(--effectiveContentColumnWidth);
  187. grid-template-areas: "sidebar content";
  188. grid-template-rows: 1fr;
  189. box-sizing: border-box;
  190. margin: 0 auto;
  191. align-content: flex-start;
  192. flex-wrap: wrap;
  193. justify-content: center;
  194. min-height: 100vh;
  195. overflow-x: clip;
  196. .column {
  197. --___columnMargin: var(--columnGap);
  198. display: grid;
  199. grid-template-columns: 100%;
  200. box-sizing: border-box;
  201. grid-row: 1 / 1;
  202. margin: 0 calc(var(--___columnMargin) / 2);
  203. padding: calc(var(--___columnMargin)) 0;
  204. row-gap: var(--___columnMargin);
  205. align-content: start;
  206. &:not(.-scrollable) {
  207. margin-top: var(--navbar-height);
  208. }
  209. &:hover {
  210. z-index: 2;
  211. }
  212. &.-full-height {
  213. margin-bottom: 0;
  214. padding-top: 0;
  215. padding-bottom: 0;
  216. }
  217. &.-scrollable {
  218. --___paddingIncrease: calc(var(--columnGap) / 2);
  219. position: sticky;
  220. top: var(--navbar-height);
  221. max-height: calc(100vh - var(--navbar-height));
  222. overflow-y: auto;
  223. overflow-x: hidden;
  224. margin-left: calc(var(--___paddingIncrease) * -1);
  225. padding-left: calc(var(--___paddingIncrease) + var(--___columnMargin) / 2);
  226. // On browsers that don't support hiding scrollbars we enforce "show scrolbars" mode
  227. // might implement old style of hiding scrollbars later if there's demand
  228. @supports (scrollbar-width: none) or (-webkit-text-fill-color: initial) {
  229. &:not(.-show-scrollbar) {
  230. scrollbar-width: none;
  231. margin-right: calc(var(--___paddingIncrease) * -1);
  232. padding-right: calc(var(--___paddingIncrease) + var(--___columnMargin) / 2);
  233. &::-webkit-scrollbar {
  234. display: block;
  235. width: 0;
  236. }
  237. }
  238. }
  239. .panel-heading.-sticky {
  240. top: calc(var(--columnGap) / -1);
  241. }
  242. }
  243. }
  244. &.-has-new-post-button {
  245. .column {
  246. padding-bottom: 10rem;
  247. }
  248. }
  249. &.-no-sticky-headers {
  250. .column {
  251. .panel-heading.-sticky {
  252. position: relative;
  253. top: 0;
  254. }
  255. }
  256. }
  257. .column-inner {
  258. display: grid;
  259. grid-template-columns: 100%;
  260. box-sizing: border-box;
  261. row-gap: 1em;
  262. align-content: start;
  263. }
  264. &.-reverse:not(.-wide, .-mobile) {
  265. grid-template-columns:
  266. var(--effectiveContentColumnWidth)
  267. var(--effectiveSidebarColumnWidth);
  268. grid-template-areas: "content sidebar";
  269. }
  270. &.-wide {
  271. grid-template-columns:
  272. var(--effectiveSidebarColumnWidth)
  273. var(--effectiveContentColumnWidth)
  274. var(--effectiveNotifsColumnWidth);
  275. grid-template-areas: "sidebar content notifs";
  276. &.-reverse {
  277. grid-template-columns:
  278. var(--effectiveNotifsColumnWidth)
  279. var(--effectiveContentColumnWidth)
  280. var(--effectiveSidebarColumnWidth);
  281. grid-template-areas: "notifs content sidebar";
  282. }
  283. }
  284. &.-mobile {
  285. grid-template-columns: 100vw;
  286. grid-template-areas: "content";
  287. padding: 0;
  288. .column {
  289. padding-top: 0;
  290. margin: var(--navbar-height) 0 0 0;
  291. }
  292. .panel-heading,
  293. .panel-heading::after,
  294. .panel-heading::before,
  295. .panel,
  296. .panel::after {
  297. border-top-left-radius: 0;
  298. border-top-right-radius: 0;
  299. }
  300. #sidebar,
  301. #notifs-column {
  302. display: none;
  303. }
  304. }
  305. &.-normal {
  306. #notifs-column {
  307. display: none;
  308. }
  309. }
  310. }
  311. .text-center {
  312. text-align: center;
  313. }
  314. .button-default {
  315. user-select: none;
  316. color: $fallback--text;
  317. color: var(--btnText, $fallback--text);
  318. background-color: $fallback--fg;
  319. background-color: var(--btn, $fallback--fg);
  320. border: none;
  321. border-radius: $fallback--btnRadius;
  322. border-radius: var(--btnRadius, $fallback--btnRadius);
  323. cursor: pointer;
  324. box-shadow: $fallback--buttonShadow;
  325. box-shadow: var(--buttonShadow);
  326. font-size: 1em;
  327. font-family: sans-serif;
  328. font-family: var(--interfaceFont, sans-serif);
  329. &.-sublime {
  330. background: transparent;
  331. }
  332. i[class*="icon-"],
  333. .svg-inline--fa {
  334. color: $fallback--text;
  335. color: var(--btnText, $fallback--text);
  336. }
  337. &::-moz-focus-inner {
  338. border: none;
  339. }
  340. &:hover {
  341. box-shadow: 0 0 4px rgb(255 255 255 / 30%);
  342. box-shadow: var(--buttonHoverShadow);
  343. }
  344. &:active {
  345. box-shadow:
  346. 0 0 4px 0 rgb(255 255 255 / 30%),
  347. 0 1px 0 0 rgb(0 0 0 / 20%) inset,
  348. 0 -1px 0 0 rgb(255 255 255 / 20%) inset;
  349. box-shadow: var(--buttonPressedShadow);
  350. color: $fallback--text;
  351. color: var(--btnPressedText, $fallback--text);
  352. background-color: $fallback--fg;
  353. background-color: var(--btnPressed, $fallback--fg);
  354. svg,
  355. i {
  356. color: $fallback--text;
  357. color: var(--btnPressedText, $fallback--text);
  358. }
  359. }
  360. &:disabled {
  361. cursor: not-allowed;
  362. color: $fallback--text;
  363. color: var(--btnDisabledText, $fallback--text);
  364. background-color: $fallback--fg;
  365. background-color: var(--btnDisabled, $fallback--fg);
  366. svg,
  367. i {
  368. color: $fallback--text;
  369. color: var(--btnDisabledText, $fallback--text);
  370. }
  371. }
  372. &.toggled {
  373. color: $fallback--text;
  374. color: var(--btnToggledText, $fallback--text);
  375. background-color: $fallback--fg;
  376. background-color: var(--btnToggled, $fallback--fg);
  377. box-shadow:
  378. 0 0 4px 0 rgb(255 255 255 / 30%),
  379. 0 1px 0 0 rgb(0 0 0 / 20%) inset,
  380. 0 -1px 0 0 rgb(255 255 255 / 20%) inset;
  381. box-shadow: var(--buttonPressedShadow);
  382. svg,
  383. i {
  384. color: $fallback--text;
  385. color: var(--btnToggledText, $fallback--text);
  386. }
  387. }
  388. &.danger {
  389. // TODO: add better color variable
  390. color: $fallback--text;
  391. color: var(--alertErrorPanelText, $fallback--text);
  392. background-color: $fallback--alertError;
  393. background-color: var(--alertError, $fallback--alertError);
  394. }
  395. }
  396. .button-unstyled {
  397. background: none;
  398. border: none;
  399. outline: none;
  400. display: inline;
  401. text-align: initial;
  402. font-size: 100%;
  403. font-family: inherit;
  404. padding: 0;
  405. line-height: unset;
  406. cursor: pointer;
  407. box-sizing: content-box;
  408. color: inherit;
  409. &.-link {
  410. color: $fallback--link;
  411. color: var(--link, $fallback--link);
  412. }
  413. &.-fullwidth {
  414. width: 100%;
  415. }
  416. &.-hover-highlight {
  417. &:hover svg {
  418. color: $fallback--lightText;
  419. color: var(--lightText, $fallback--lightText);
  420. }
  421. }
  422. }
  423. input,
  424. textarea,
  425. .input {
  426. &.unstyled {
  427. border-radius: 0;
  428. background: none;
  429. box-shadow: none;
  430. height: unset;
  431. }
  432. --_padding: 0.5em;
  433. border: none;
  434. border-radius: $fallback--inputRadius;
  435. border-radius: var(--inputRadius, $fallback--inputRadius);
  436. box-shadow:
  437. 0 1px 0 0 rgb(0 0 0 / 20%) inset,
  438. 0 -1px 0 0 rgb(255 255 255 / 20%) inset,
  439. 0 0 2px 0 rgb(0 0 0 / 100%) inset;
  440. box-shadow: var(--inputShadow);
  441. background-color: $fallback--fg;
  442. background-color: var(--input, $fallback--fg);
  443. color: $fallback--lightText;
  444. color: var(--inputText, $fallback--lightText);
  445. font-family: sans-serif;
  446. font-family: var(--inputFont, sans-serif);
  447. font-size: 1em;
  448. margin: 0;
  449. box-sizing: border-box;
  450. display: inline-block;
  451. position: relative;
  452. line-height: 2;
  453. hyphens: none;
  454. padding: 0 var(--_padding);
  455. &:disabled,
  456. &[disabled="disabled"],
  457. &.disabled {
  458. cursor: not-allowed;
  459. opacity: 0.5;
  460. }
  461. &[type="range"] {
  462. background: none;
  463. border: none;
  464. margin: 0;
  465. box-shadow: none;
  466. flex: 1;
  467. }
  468. &[type="radio"] {
  469. display: none;
  470. &:checked + label::before {
  471. box-shadow: 0 0 2px black inset, 0 0 0 4px $fallback--fg inset;
  472. box-shadow: var(--inputShadow), 0 0 0 4px var(--fg, $fallback--fg) inset;
  473. background-color: var(--accent, $fallback--link);
  474. }
  475. &:disabled {
  476. &,
  477. & + label,
  478. & + label::before {
  479. opacity: 0.5;
  480. }
  481. }
  482. + label::before {
  483. flex-shrink: 0;
  484. display: inline-block;
  485. content: "";
  486. transition: box-shadow 200ms;
  487. width: 1.1em;
  488. height: 1.1em;
  489. border-radius: 100%; // Radio buttons should always be circle
  490. box-shadow: 0 0 2px black inset;
  491. box-shadow: var(--inputShadow);
  492. margin-right: 0.5em;
  493. background-color: $fallback--fg;
  494. background-color: var(--input, $fallback--fg);
  495. vertical-align: top;
  496. text-align: center;
  497. line-height: 1.1;
  498. font-size: 1.1em;
  499. box-sizing: border-box;
  500. color: transparent;
  501. overflow: hidden;
  502. }
  503. }
  504. &[type="checkbox"] {
  505. &:checked + label::before {
  506. color: $fallback--text;
  507. color: var(--inputText, $fallback--text);
  508. }
  509. &:disabled {
  510. &,
  511. & + label,
  512. & + label::before {
  513. opacity: 0.5;
  514. }
  515. }
  516. + label::before {
  517. flex-shrink: 0;
  518. display: inline-block;
  519. content: "✓";
  520. transition: color 200ms;
  521. width: 1.1em;
  522. height: 1.1em;
  523. border-radius: $fallback--checkboxRadius;
  524. border-radius: var(--checkboxRadius, $fallback--checkboxRadius);
  525. box-shadow: 0 0 2px black inset;
  526. box-shadow: var(--inputShadow);
  527. margin-right: 0.5em;
  528. background-color: $fallback--fg;
  529. background-color: var(--input, $fallback--fg);
  530. vertical-align: top;
  531. text-align: center;
  532. line-height: 1.1;
  533. font-size: 1.1em;
  534. box-sizing: border-box;
  535. color: transparent;
  536. overflow: hidden;
  537. }
  538. }
  539. &.resize-height {
  540. resize: vertical;
  541. }
  542. }
  543. // Textareas should have stock line-height + vertical padding instead of huge line-height
  544. textarea {
  545. padding: var(--_padding);
  546. line-height: var(--post-line-height);
  547. }
  548. option {
  549. color: $fallback--text;
  550. color: var(--text, $fallback--text);
  551. background-color: $fallback--bg;
  552. background-color: var(--bg, $fallback--bg);
  553. }
  554. .hide-number-spinner {
  555. appearance: textfield;
  556. &[type="number"]::-webkit-inner-spin-button,
  557. &[type="number"]::-webkit-outer-spin-button {
  558. opacity: 0;
  559. display: none;
  560. }
  561. }
  562. .cards-list {
  563. list-style: none;
  564. display: grid;
  565. grid-auto-flow: row dense;
  566. grid-template-columns: 1fr 1fr;
  567. li {
  568. border: 1px solid var(--border);
  569. border-radius: var(--inputRadius);
  570. padding: 0.5em;
  571. margin: 0.25em;
  572. }
  573. }
  574. .btn-block {
  575. display: block;
  576. width: 100%;
  577. }
  578. .btn-group {
  579. position: relative;
  580. display: inline-flex;
  581. vertical-align: middle;
  582. button,
  583. .button-dropdown {
  584. position: relative;
  585. flex: 1 1 auto;
  586. &:not(:last-child),
  587. &:not(:last-child) .button-default {
  588. border-top-right-radius: 0;
  589. border-bottom-right-radius: 0;
  590. }
  591. &:not(:first-child),
  592. &:not(:first-child) .button-default {
  593. border-top-left-radius: 0;
  594. border-bottom-left-radius: 0;
  595. }
  596. }
  597. }
  598. .fa {
  599. color: grey;
  600. }
  601. .mobile-shown {
  602. display: none;
  603. }
  604. .badge {
  605. box-sizing: border-box;
  606. display: inline-block;
  607. border-radius: 99px;
  608. max-width: 10em;
  609. min-width: 1.7em;
  610. height: 1.3em;
  611. padding: 0.15em;
  612. vertical-align: middle;
  613. font-weight: normal;
  614. font-style: normal;
  615. font-size: 0.9em;
  616. line-height: 1;
  617. text-align: center;
  618. white-space: nowrap;
  619. overflow: hidden;
  620. text-overflow: ellipsis;
  621. &.badge-notification {
  622. background-color: $fallback--cRed;
  623. background-color: var(--badgeNotification, $fallback--cRed);
  624. color: white;
  625. color: var(--badgeNotificationText, white);
  626. }
  627. }
  628. .alert {
  629. margin: 0 0.35em;
  630. padding: 0 0.25em;
  631. border-radius: $fallback--tooltipRadius;
  632. border-radius: var(--tooltipRadius, $fallback--tooltipRadius);
  633. &.error {
  634. background-color: $fallback--alertError;
  635. background-color: var(--alertError, $fallback--alertError);
  636. color: $fallback--text;
  637. color: var(--alertErrorText, $fallback--text);
  638. .panel-heading & {
  639. color: $fallback--text;
  640. color: var(--alertErrorPanelText, $fallback--text);
  641. }
  642. }
  643. &.warning {
  644. background-color: $fallback--alertWarning;
  645. background-color: var(--alertWarning, $fallback--alertWarning);
  646. color: $fallback--text;
  647. color: var(--alertWarningText, $fallback--text);
  648. .panel-heading & {
  649. color: $fallback--text;
  650. color: var(--alertWarningPanelText, $fallback--text);
  651. }
  652. }
  653. &.success {
  654. background-color: var(--alertSuccess, $fallback--alertWarning);
  655. color: var(--alertSuccessText, $fallback--text);
  656. .panel-heading & {
  657. color: var(--alertSuccessPanelText, $fallback--text);
  658. }
  659. }
  660. }
  661. .faint {
  662. color: $fallback--faint;
  663. color: var(--faint, $fallback--faint);
  664. }
  665. .faint-link {
  666. color: $fallback--faint;
  667. color: var(--faint, $fallback--faint);
  668. &:hover {
  669. text-decoration: underline;
  670. }
  671. }
  672. .visibility-notice {
  673. padding: 0.5em;
  674. border: 1px solid $fallback--faint;
  675. border: 1px solid var(--faint, $fallback--faint);
  676. border-radius: $fallback--inputRadius;
  677. border-radius: var(--inputRadius, $fallback--inputRadius);
  678. }
  679. .notice-dismissible {
  680. padding-right: 4rem;
  681. position: relative;
  682. .dismiss {
  683. position: absolute;
  684. top: 0;
  685. right: 0;
  686. padding: 0.5em;
  687. color: inherit;
  688. }
  689. }
  690. .fa-scale-110 {
  691. &.svg-inline--fa,
  692. &.iconLetter {
  693. font-size: 1.1em;
  694. }
  695. }
  696. .fa-old-padding {
  697. &.iconLetter,
  698. &.svg-inline--fa,
  699. &-layer {
  700. padding: 0 0.3em;
  701. }
  702. }
  703. .veryfaint {
  704. opacity: 0.25;
  705. }
  706. .login-hint {
  707. text-align: center;
  708. @media all and (min-width: 801px) {
  709. display: none;
  710. }
  711. a {
  712. display: inline-block;
  713. padding: 1em 0;
  714. width: 100%;
  715. }
  716. }
  717. .btn.button-default {
  718. min-height: 2em;
  719. }
  720. .new-status-notification {
  721. position: relative;
  722. font-size: 1.1em;
  723. z-index: 1;
  724. flex: 1;
  725. }
  726. @media all and (max-width: 800px) {
  727. .mobile-hidden {
  728. display: none;
  729. }
  730. }
  731. @keyframes spin {
  732. 0% {
  733. transform: rotate(0deg);
  734. }
  735. 100% {
  736. transform: rotate(359deg);
  737. }
  738. }
  739. @keyframes shakeError {
  740. 0% {
  741. transform: translateX(0);
  742. }
  743. 15% {
  744. transform: translateX(0.375rem);
  745. }
  746. 30% {
  747. transform: translateX(-0.375rem);
  748. }
  749. 45% {
  750. transform: translateX(0.375rem);
  751. }
  752. 60% {
  753. transform: translateX(-0.375rem);
  754. }
  755. 75% {
  756. transform: translateX(0.375rem);
  757. }
  758. 90% {
  759. transform: translateX(-0.375rem);
  760. }
  761. 100% {
  762. transform: translateX(0);
  763. }
  764. }
  765. // Vue transitions
  766. .fade-enter-active,
  767. .fade-leave-active {
  768. transition: opacity 0.3s;
  769. }
  770. .fade-enter-from,
  771. .fade-leave-active {
  772. opacity: 0;
  773. }
  774. /* stylelint-enable no-descending-specificity */
  775. .visible-for-screenreader-only {
  776. display: block;
  777. width: 1px;
  778. height: 1px;
  779. margin: -1px;
  780. overflow: hidden;
  781. visibility: visible;
  782. clip: rect(0 0 0 0);
  783. padding: 0;
  784. position: absolute;
  785. }