You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

912 lines
16 KiB

Add Keybase integration (#10297) * create account_identity_proofs table * add endpoint for keybase to check local proofs * add async task to update validity and liveness of proofs from keybase * first pass keybase proof CRUD * second pass keybase proof creation * clean up proof list and add badges * add avatar url to keybase api * Always highlight the “Identity Proofs” navigation item when interacting with proofs. * Update translations. * Add profile URL. * Reorder proofs. * Add proofs to bio. * Update settings/identity_proofs front-end. * Use `link_to`. * Only encode query params if they exist. URLs without params had a trailing `?`. * Only show live proofs. * change valid to active in proof list and update liveness before displaying * minor fixes * add keybase config at well-known path * extremely naive feature flagging off the identity proof UI * fixes for rubocop * make identity proofs page resilient to potential keybase issues * normalize i18n * tweaks for brakeman * remove two unused translations * cleanup and add more localizations * make keybase_contacts an admin setting * fix ExternalProofService my_domain * use Addressable::URI in identity proofs * use active model serializer for keybase proof config * more cleanup of keybase proof config * rename proof is_valid and is_live to proof_valid and proof_live * cleanup * assorted tweaks for more robust communication with keybase * Clean up * Small fixes * Display verified identity identically to verified links * Clean up unused CSS * Add caching for Keybase avatar URLs * Remove keybase_contacts setting
5 years ago
Add Keybase integration (#10297) * create account_identity_proofs table * add endpoint for keybase to check local proofs * add async task to update validity and liveness of proofs from keybase * first pass keybase proof CRUD * second pass keybase proof creation * clean up proof list and add badges * add avatar url to keybase api * Always highlight the “Identity Proofs” navigation item when interacting with proofs. * Update translations. * Add profile URL. * Reorder proofs. * Add proofs to bio. * Update settings/identity_proofs front-end. * Use `link_to`. * Only encode query params if they exist. URLs without params had a trailing `?`. * Only show live proofs. * change valid to active in proof list and update liveness before displaying * minor fixes * add keybase config at well-known path * extremely naive feature flagging off the identity proof UI * fixes for rubocop * make identity proofs page resilient to potential keybase issues * normalize i18n * tweaks for brakeman * remove two unused translations * cleanup and add more localizations * make keybase_contacts an admin setting * fix ExternalProofService my_domain * use Addressable::URI in identity proofs * use active model serializer for keybase proof config * more cleanup of keybase proof config * rename proof is_valid and is_live to proof_valid and proof_live * cleanup * assorted tweaks for more robust communication with keybase * Clean up * Small fixes * Display verified identity identically to verified links * Clean up unused CSS * Add caching for Keybase avatar URLs * Remove keybase_contacts setting
5 years ago
Add Keybase integration (#10297) * create account_identity_proofs table * add endpoint for keybase to check local proofs * add async task to update validity and liveness of proofs from keybase * first pass keybase proof CRUD * second pass keybase proof creation * clean up proof list and add badges * add avatar url to keybase api * Always highlight the “Identity Proofs” navigation item when interacting with proofs. * Update translations. * Add profile URL. * Reorder proofs. * Add proofs to bio. * Update settings/identity_proofs front-end. * Use `link_to`. * Only encode query params if they exist. URLs without params had a trailing `?`. * Only show live proofs. * change valid to active in proof list and update liveness before displaying * minor fixes * add keybase config at well-known path * extremely naive feature flagging off the identity proof UI * fixes for rubocop * make identity proofs page resilient to potential keybase issues * normalize i18n * tweaks for brakeman * remove two unused translations * cleanup and add more localizations * make keybase_contacts an admin setting * fix ExternalProofService my_domain * use Addressable::URI in identity proofs * use active model serializer for keybase proof config * more cleanup of keybase proof config * rename proof is_valid and is_live to proof_valid and proof_live * cleanup * assorted tweaks for more robust communication with keybase * Clean up * Small fixes * Display verified identity identically to verified links * Clean up unused CSS * Add caching for Keybase avatar URLs * Remove keybase_contacts setting
5 years ago
Add Keybase integration (#10297) * create account_identity_proofs table * add endpoint for keybase to check local proofs * add async task to update validity and liveness of proofs from keybase * first pass keybase proof CRUD * second pass keybase proof creation * clean up proof list and add badges * add avatar url to keybase api * Always highlight the “Identity Proofs” navigation item when interacting with proofs. * Update translations. * Add profile URL. * Reorder proofs. * Add proofs to bio. * Update settings/identity_proofs front-end. * Use `link_to`. * Only encode query params if they exist. URLs without params had a trailing `?`. * Only show live proofs. * change valid to active in proof list and update liveness before displaying * minor fixes * add keybase config at well-known path * extremely naive feature flagging off the identity proof UI * fixes for rubocop * make identity proofs page resilient to potential keybase issues * normalize i18n * tweaks for brakeman * remove two unused translations * cleanup and add more localizations * make keybase_contacts an admin setting * fix ExternalProofService my_domain * use Addressable::URI in identity proofs * use active model serializer for keybase proof config * more cleanup of keybase proof config * rename proof is_valid and is_live to proof_valid and proof_live * cleanup * assorted tweaks for more robust communication with keybase * Clean up * Small fixes * Display verified identity identically to verified links * Clean up unused CSS * Add caching for Keybase avatar URLs * Remove keybase_contacts setting
5 years ago
Add Keybase integration (#10297) * create account_identity_proofs table * add endpoint for keybase to check local proofs * add async task to update validity and liveness of proofs from keybase * first pass keybase proof CRUD * second pass keybase proof creation * clean up proof list and add badges * add avatar url to keybase api * Always highlight the “Identity Proofs” navigation item when interacting with proofs. * Update translations. * Add profile URL. * Reorder proofs. * Add proofs to bio. * Update settings/identity_proofs front-end. * Use `link_to`. * Only encode query params if they exist. URLs without params had a trailing `?`. * Only show live proofs. * change valid to active in proof list and update liveness before displaying * minor fixes * add keybase config at well-known path * extremely naive feature flagging off the identity proof UI * fixes for rubocop * make identity proofs page resilient to potential keybase issues * normalize i18n * tweaks for brakeman * remove two unused translations * cleanup and add more localizations * make keybase_contacts an admin setting * fix ExternalProofService my_domain * use Addressable::URI in identity proofs * use active model serializer for keybase proof config * more cleanup of keybase proof config * rename proof is_valid and is_live to proof_valid and proof_live * cleanup * assorted tweaks for more robust communication with keybase * Clean up * Small fixes * Display verified identity identically to verified links * Clean up unused CSS * Add caching for Keybase avatar URLs * Remove keybase_contacts setting
5 years ago
Add Keybase integration (#10297) * create account_identity_proofs table * add endpoint for keybase to check local proofs * add async task to update validity and liveness of proofs from keybase * first pass keybase proof CRUD * second pass keybase proof creation * clean up proof list and add badges * add avatar url to keybase api * Always highlight the “Identity Proofs” navigation item when interacting with proofs. * Update translations. * Add profile URL. * Reorder proofs. * Add proofs to bio. * Update settings/identity_proofs front-end. * Use `link_to`. * Only encode query params if they exist. URLs without params had a trailing `?`. * Only show live proofs. * change valid to active in proof list and update liveness before displaying * minor fixes * add keybase config at well-known path * extremely naive feature flagging off the identity proof UI * fixes for rubocop * make identity proofs page resilient to potential keybase issues * normalize i18n * tweaks for brakeman * remove two unused translations * cleanup and add more localizations * make keybase_contacts an admin setting * fix ExternalProofService my_domain * use Addressable::URI in identity proofs * use active model serializer for keybase proof config * more cleanup of keybase proof config * rename proof is_valid and is_live to proof_valid and proof_live * cleanup * assorted tweaks for more robust communication with keybase * Clean up * Small fixes * Display verified identity identically to verified links * Clean up unused CSS * Add caching for Keybase avatar URLs * Remove keybase_contacts setting
5 years ago
  1. $no-columns-breakpoint: 600px;
  2. code {
  3. font-family: $font-monospace, monospace;
  4. font-weight: 400;
  5. }
  6. .form-container {
  7. max-width: 400px;
  8. padding: 20px;
  9. margin: 0 auto;
  10. }
  11. .simple_form {
  12. .input {
  13. margin-bottom: 15px;
  14. overflow: hidden;
  15. &.hidden {
  16. margin: 0;
  17. }
  18. &.radio_buttons {
  19. .radio {
  20. margin-bottom: 15px;
  21. &:last-child {
  22. margin-bottom: 0;
  23. }
  24. }
  25. .radio > label {
  26. position: relative;
  27. padding-left: 28px;
  28. input {
  29. position: absolute;
  30. top: -2px;
  31. left: 0;
  32. }
  33. }
  34. }
  35. &.boolean {
  36. position: relative;
  37. margin-bottom: 0;
  38. .label_input > label {
  39. font-family: inherit;
  40. font-size: 14px;
  41. padding-top: 5px;
  42. color: $primary-text-color;
  43. display: block;
  44. width: auto;
  45. }
  46. .label_input,
  47. .hint {
  48. padding-left: 28px;
  49. }
  50. .label_input__wrapper {
  51. position: static;
  52. }
  53. label.checkbox {
  54. position: absolute;
  55. top: 2px;
  56. left: 0;
  57. }
  58. label a {
  59. color: $highlight-text-color;
  60. text-decoration: underline;
  61. &:hover,
  62. &:active,
  63. &:focus {
  64. text-decoration: none;
  65. }
  66. }
  67. }
  68. }
  69. .row {
  70. display: flex;
  71. margin: 0 -5px;
  72. .input {
  73. box-sizing: border-box;
  74. flex: 1 1 auto;
  75. width: 50%;
  76. padding: 0 5px;
  77. }
  78. }
  79. .hint {
  80. color: $darker-text-color;
  81. a {
  82. color: $highlight-text-color;
  83. }
  84. code {
  85. border-radius: 3px;
  86. padding: 0.2em 0.4em;
  87. background: darken($ui-base-color, 12%);
  88. }
  89. }
  90. span.hint {
  91. display: block;
  92. font-size: 12px;
  93. margin-top: 4px;
  94. }
  95. p.hint {
  96. margin-bottom: 15px;
  97. color: $darker-text-color;
  98. &.subtle-hint {
  99. text-align: center;
  100. font-size: 12px;
  101. line-height: 18px;
  102. margin-top: 15px;
  103. margin-bottom: 0;
  104. }
  105. }
  106. .card {
  107. margin-bottom: 15px;
  108. }
  109. strong {
  110. font-weight: 500;
  111. @each $lang in $cjk-langs {
  112. &:lang(#{$lang}) {
  113. font-weight: 700;
  114. }
  115. }
  116. }
  117. .input.with_floating_label {
  118. .label_input {
  119. display: flex;
  120. & > label {
  121. font-family: inherit;
  122. font-size: 14px;
  123. color: $primary-text-color;
  124. font-weight: 500;
  125. min-width: 150px;
  126. flex: 0 0 auto;
  127. }
  128. input,
  129. select {
  130. flex: 1 1 auto;
  131. }
  132. }
  133. &.select .hint {
  134. margin-top: 6px;
  135. margin-left: 150px;
  136. }
  137. }
  138. .input.with_label {
  139. .label_input > label {
  140. font-family: inherit;
  141. font-size: 14px;
  142. color: $primary-text-color;
  143. display: block;
  144. margin-bottom: 8px;
  145. word-wrap: break-word;
  146. font-weight: 500;
  147. }
  148. .hint {
  149. margin-top: 6px;
  150. }
  151. ul {
  152. flex: 390px;
  153. }
  154. }
  155. .input.with_block_label {
  156. max-width: none;
  157. & > label {
  158. font-family: inherit;
  159. font-size: 16px;
  160. color: $primary-text-color;
  161. display: block;
  162. font-weight: 500;
  163. padding-top: 5px;
  164. }
  165. .hint {
  166. margin-bottom: 15px;
  167. }
  168. ul {
  169. columns: 2;
  170. }
  171. }
  172. .required abbr {
  173. text-decoration: none;
  174. color: lighten($error-value-color, 12%);
  175. }
  176. .fields-group {
  177. margin-bottom: 25px;
  178. .input:last-child {
  179. margin-bottom: 0;
  180. }
  181. }
  182. .fields-row {
  183. display: flex;
  184. margin: 0 -10px;
  185. padding-top: 5px;
  186. margin-bottom: 25px;
  187. .input {
  188. max-width: none;
  189. }
  190. &__column {
  191. box-sizing: border-box;
  192. padding: 0 10px;
  193. flex: 1 1 auto;
  194. min-height: 1px;
  195. &-6 {
  196. max-width: 50%;
  197. }
  198. }
  199. .fields-group:last-child,
  200. .fields-row__column.fields-group {
  201. margin-bottom: 0;
  202. }
  203. @media screen and (max-width: $no-columns-breakpoint) {
  204. display: block;
  205. margin-bottom: 0;
  206. &__column {
  207. max-width: none;
  208. }
  209. .fields-group:last-child,
  210. .fields-row__column.fields-group,
  211. .fields-row__column {
  212. margin-bottom: 25px;
  213. }
  214. }
  215. }
  216. .input.radio_buttons .radio label {
  217. margin-bottom: 5px;
  218. font-family: inherit;
  219. font-size: 14px;
  220. color: $primary-text-color;
  221. display: block;
  222. width: auto;
  223. }
  224. .check_boxes {
  225. .checkbox {
  226. label {
  227. font-family: inherit;
  228. font-size: 14px;
  229. color: $primary-text-color;
  230. display: inline-block;
  231. width: auto;
  232. position: relative;
  233. padding-top: 5px;
  234. padding-left: 25px;
  235. flex: 1 1 auto;
  236. }
  237. input[type=checkbox] {
  238. position: absolute;
  239. left: 0;
  240. top: 5px;
  241. margin: 0;
  242. }
  243. }
  244. }
  245. input[type=text],
  246. input[type=number],
  247. input[type=email],
  248. input[type=password],
  249. textarea {
  250. box-sizing: border-box;
  251. font-size: 16px;
  252. color: $primary-text-color;
  253. display: block;
  254. width: 100%;
  255. outline: 0;
  256. font-family: inherit;
  257. resize: vertical;
  258. background: darken($ui-base-color, 10%);
  259. border: 1px solid darken($ui-base-color, 14%);
  260. border-radius: 4px;
  261. padding: 10px;
  262. &:invalid {
  263. box-shadow: none;
  264. }
  265. &:focus:invalid:not(:placeholder-shown) {
  266. border-color: lighten($error-red, 12%);
  267. }
  268. &:required:valid {
  269. border-color: $valid-value-color;
  270. }
  271. &:hover {
  272. border-color: darken($ui-base-color, 20%);
  273. }
  274. &:active,
  275. &:focus {
  276. border-color: $highlight-text-color;
  277. background: darken($ui-base-color, 8%);
  278. }
  279. }
  280. .input.field_with_errors {
  281. label {
  282. color: lighten($error-red, 12%);
  283. }
  284. input[type=text],
  285. input[type=number],
  286. input[type=email],
  287. input[type=password],
  288. textarea,
  289. select {
  290. border-color: lighten($error-red, 12%);
  291. }
  292. .error {
  293. display: block;
  294. font-weight: 500;
  295. color: lighten($error-red, 12%);
  296. margin-top: 4px;
  297. }
  298. }
  299. .input.disabled {
  300. opacity: 0.5;
  301. }
  302. .actions {
  303. margin-top: 30px;
  304. display: flex;
  305. &.actions--top {
  306. margin-top: 0;
  307. margin-bottom: 30px;
  308. }
  309. }
  310. button,
  311. .button,
  312. .block-button {
  313. display: block;
  314. width: 100%;
  315. border: 0;
  316. border-radius: 4px;
  317. background: $ui-highlight-color;
  318. color: $primary-text-color;
  319. font-size: 18px;
  320. line-height: inherit;
  321. height: auto;
  322. padding: 10px;
  323. text-transform: uppercase;
  324. text-decoration: none;
  325. text-align: center;
  326. box-sizing: border-box;
  327. cursor: pointer;
  328. font-weight: 500;
  329. outline: 0;
  330. margin-bottom: 10px;
  331. margin-right: 10px;
  332. &:last-child {
  333. margin-right: 0;
  334. }
  335. &:hover {
  336. background-color: lighten($ui-highlight-color, 5%);
  337. }
  338. &:active,
  339. &:focus {
  340. background-color: darken($ui-highlight-color, 5%);
  341. }
  342. &:disabled:hover {
  343. background-color: $ui-primary-color;
  344. }
  345. &.negative {
  346. background: $error-value-color;
  347. &:hover {
  348. background-color: lighten($error-value-color, 5%);
  349. }
  350. &:active,
  351. &:focus {
  352. background-color: darken($error-value-color, 5%);
  353. }
  354. }
  355. }
  356. select {
  357. appearance: none;
  358. box-sizing: border-box;
  359. font-size: 16px;
  360. color: $primary-text-color;
  361. display: block;
  362. width: 100%;
  363. outline: 0;
  364. font-family: inherit;
  365. resize: vertical;
  366. background: darken($ui-base-color, 10%) url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14.933 18.467' height='19.698' width='15.929'><path d='M3.467 14.967l-3.393-3.5H14.86l-3.392 3.5c-1.866 1.925-3.666 3.5-4 3.5-.335 0-2.135-1.575-4-3.5zm.266-11.234L7.467 0 11.2 3.733l3.733 3.734H0l3.733-3.734z' fill='#{hex-color(lighten($ui-base-color, 12%))}'/></svg>") no-repeat right 8px center / auto 16px;
  367. border: 1px solid darken($ui-base-color, 14%);
  368. border-radius: 4px;
  369. padding-left: 10px;
  370. padding-right: 30px;
  371. height: 41px;
  372. }
  373. .label_input {
  374. &__wrapper {
  375. position: relative;
  376. }
  377. &__append {
  378. position: absolute;
  379. right: 3px;
  380. top: 1px;
  381. padding: 10px;
  382. padding-bottom: 9px;
  383. font-size: 16px;
  384. color: $dark-text-color;
  385. font-family: inherit;
  386. pointer-events: none;
  387. cursor: default;
  388. max-width: 140px;
  389. white-space: nowrap;
  390. overflow: hidden;
  391. &::after {
  392. content: '';
  393. display: block;
  394. position: absolute;
  395. top: 0;
  396. right: 0;
  397. bottom: 1px;
  398. width: 5px;
  399. background-image: linear-gradient(to right, rgba(darken($ui-base-color, 10%), 0), darken($ui-base-color, 10%));
  400. }
  401. }
  402. }
  403. &__overlay-area {
  404. position: relative;
  405. &__overlay {
  406. position: absolute;
  407. top: 0;
  408. left: 0;
  409. width: 100%;
  410. height: 100%;
  411. display: flex;
  412. justify-content: center;
  413. align-items: center;
  414. background: rgba($ui-base-color, 0.65);
  415. backdrop-filter: blur(2px);
  416. border-radius: 4px;
  417. &__content {
  418. text-align: center;
  419. &.rich-formatting {
  420. &,
  421. p {
  422. color: $primary-text-color;
  423. }
  424. }
  425. }
  426. }
  427. }
  428. }
  429. .block-icon {
  430. display: block;
  431. margin: 0 auto;
  432. margin-bottom: 10px;
  433. font-size: 24px;
  434. }
  435. .flash-message {
  436. background: lighten($ui-base-color, 8%);
  437. color: $darker-text-color;
  438. border-radius: 4px;
  439. padding: 15px 10px;
  440. margin-bottom: 30px;
  441. text-align: center;
  442. &.notice {
  443. border: 1px solid rgba($valid-value-color, 0.5);
  444. background: rgba($valid-value-color, 0.25);
  445. color: $valid-value-color;
  446. }
  447. &.alert {
  448. border: 1px solid rgba($error-value-color, 0.5);
  449. background: rgba($error-value-color, 0.25);
  450. color: $error-value-color;
  451. }
  452. a {
  453. display: inline-block;
  454. color: $darker-text-color;
  455. text-decoration: none;
  456. &:hover {
  457. color: $primary-text-color;
  458. text-decoration: underline;
  459. }
  460. }
  461. p {
  462. margin-bottom: 15px;
  463. }
  464. .oauth-code {
  465. outline: 0;
  466. box-sizing: border-box;
  467. display: block;
  468. width: 100%;
  469. border: 0;
  470. padding: 10px;
  471. font-family: $font-monospace, monospace;
  472. background: $ui-base-color;
  473. color: $primary-text-color;
  474. font-size: 14px;
  475. margin: 0;
  476. &::-moz-focus-inner {
  477. border: 0;
  478. }
  479. &::-moz-focus-inner,
  480. &:focus,
  481. &:active {
  482. outline: 0 !important;
  483. }
  484. &:focus {
  485. background: lighten($ui-base-color, 4%);
  486. }
  487. }
  488. strong {
  489. font-weight: 500;
  490. @each $lang in $cjk-langs {
  491. &:lang(#{$lang}) {
  492. font-weight: 700;
  493. }
  494. }
  495. }
  496. @media screen and (max-width: 740px) and (min-width: 441px) {
  497. margin-top: 40px;
  498. }
  499. }
  500. .form-footer {
  501. margin-top: 30px;
  502. text-align: center;
  503. a {
  504. color: $darker-text-color;
  505. text-decoration: none;
  506. &:hover {
  507. text-decoration: underline;
  508. }
  509. }
  510. }
  511. .quick-nav {
  512. list-style: none;
  513. margin-bottom: 25px;
  514. font-size: 14px;
  515. li {
  516. display: inline-block;
  517. margin-right: 10px;
  518. }
  519. a {
  520. color: $highlight-text-color;
  521. text-transform: uppercase;
  522. text-decoration: none;
  523. font-weight: 700;
  524. &:hover,
  525. &:focus,
  526. &:active {
  527. color: lighten($highlight-text-color, 8%);
  528. }
  529. }
  530. }
  531. .oauth-prompt,
  532. .follow-prompt {
  533. margin-bottom: 30px;
  534. color: $darker-text-color;
  535. h2 {
  536. font-size: 16px;
  537. margin-bottom: 30px;
  538. text-align: center;
  539. }
  540. strong {
  541. color: $secondary-text-color;
  542. font-weight: 500;
  543. @each $lang in $cjk-langs {
  544. &:lang(#{$lang}) {
  545. font-weight: 700;
  546. }
  547. }
  548. }
  549. @media screen and (max-width: 740px) and (min-width: 441px) {
  550. margin-top: 40px;
  551. }
  552. }
  553. .qr-wrapper {
  554. display: flex;
  555. flex-wrap: wrap;
  556. align-items: flex-start;
  557. }
  558. .qr-code {
  559. flex: 0 0 auto;
  560. background: $simple-background-color;
  561. padding: 4px;
  562. margin: 0 10px 20px 0;
  563. box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
  564. display: inline-block;
  565. svg {
  566. display: block;
  567. margin: 0;
  568. }
  569. }
  570. .qr-alternative {
  571. margin-bottom: 20px;
  572. color: $secondary-text-color;
  573. flex: 150px;
  574. samp {
  575. display: block;
  576. font-size: 14px;
  577. }
  578. }
  579. .table-form {
  580. p {
  581. margin-bottom: 15px;
  582. strong {
  583. font-weight: 500;
  584. @each $lang in $cjk-langs {
  585. &:lang(#{$lang}) {
  586. font-weight: 700;
  587. }
  588. }
  589. }
  590. }
  591. }
  592. .simple_form,
  593. .table-form {
  594. .warning {
  595. box-sizing: border-box;
  596. background: rgba($error-value-color, 0.5);
  597. color: $primary-text-color;
  598. text-shadow: 1px 1px 0 rgba($base-shadow-color, 0.3);
  599. box-shadow: 0 2px 6px rgba($base-shadow-color, 0.4);
  600. border-radius: 4px;
  601. padding: 10px;
  602. margin-bottom: 15px;
  603. a {
  604. color: $primary-text-color;
  605. text-decoration: underline;
  606. &:hover,
  607. &:focus,
  608. &:active {
  609. text-decoration: none;
  610. }
  611. }
  612. strong {
  613. font-weight: 600;
  614. display: block;
  615. margin-bottom: 5px;
  616. @each $lang in $cjk-langs {
  617. &:lang(#{$lang}) {
  618. font-weight: 700;
  619. }
  620. }
  621. .fa {
  622. font-weight: 400;
  623. }
  624. }
  625. }
  626. }
  627. .action-pagination {
  628. display: flex;
  629. flex-wrap: wrap;
  630. align-items: center;
  631. .actions,
  632. .pagination {
  633. flex: 1 1 auto;
  634. }
  635. .actions {
  636. padding: 30px 0;
  637. padding-right: 20px;
  638. flex: 0 0 auto;
  639. }
  640. }
  641. .post-follow-actions {
  642. text-align: center;
  643. color: $darker-text-color;
  644. div {
  645. margin-bottom: 4px;
  646. }
  647. }
  648. .alternative-login {
  649. margin-top: 20px;
  650. margin-bottom: 20px;
  651. h4 {
  652. font-size: 16px;
  653. color: $primary-text-color;
  654. text-align: center;
  655. margin-bottom: 20px;
  656. border: 0;
  657. padding: 0;
  658. }
  659. .button {
  660. display: block;
  661. }
  662. }
  663. .scope-danger {
  664. color: $warning-red;
  665. }
  666. .form_admin_settings_site_short_description,
  667. .form_admin_settings_site_description,
  668. .form_admin_settings_site_extended_description,
  669. .form_admin_settings_site_terms,
  670. .form_admin_settings_custom_css,
  671. .form_admin_settings_closed_registrations_message {
  672. textarea {
  673. font-family: $font-monospace, monospace;
  674. }
  675. }
  676. .input-copy {
  677. background: darken($ui-base-color, 10%);
  678. border: 1px solid darken($ui-base-color, 14%);
  679. border-radius: 4px;
  680. display: flex;
  681. align-items: center;
  682. padding-right: 4px;
  683. position: relative;
  684. top: 1px;
  685. transition: border-color 300ms linear;
  686. &__wrapper {
  687. flex: 1 1 auto;
  688. }
  689. input[type=text] {
  690. background: transparent;
  691. border: 0;
  692. padding: 10px;
  693. font-size: 14px;
  694. font-family: $font-monospace, monospace;
  695. }
  696. button {
  697. flex: 0 0 auto;
  698. margin: 4px;
  699. text-transform: none;
  700. font-weight: 400;
  701. font-size: 14px;
  702. padding: 7px 18px;
  703. padding-bottom: 6px;
  704. width: auto;
  705. transition: background 300ms linear;
  706. }
  707. &.copied {
  708. border-color: $valid-value-color;
  709. transition: none;
  710. button {
  711. background: $valid-value-color;
  712. transition: none;
  713. }
  714. }
  715. }
  716. .connection-prompt {
  717. margin-bottom: 25px;
  718. .fa-link {
  719. background-color: darken($ui-base-color, 4%);
  720. border-radius: 100%;
  721. font-size: 24px;
  722. padding: 10px;
  723. }
  724. &__column {
  725. align-items: center;
  726. display: flex;
  727. flex: 1;
  728. flex-direction: column;
  729. flex-shrink: 1;
  730. max-width: 50%;
  731. &-sep {
  732. align-self: center;
  733. flex-grow: 0;
  734. overflow: visible;
  735. position: relative;
  736. z-index: 1;
  737. }
  738. p {
  739. word-break: break-word;
  740. }
  741. }
  742. .account__avatar {
  743. margin-bottom: 20px;
  744. }
  745. &__connection {
  746. background-color: lighten($ui-base-color, 8%);
  747. box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
  748. border-radius: 4px;
  749. padding: 25px 10px;
  750. position: relative;
  751. text-align: center;
  752. &::after {
  753. background-color: darken($ui-base-color, 4%);
  754. content: '';
  755. display: block;
  756. height: 100%;
  757. left: 50%;
  758. position: absolute;
  759. top: 0;
  760. width: 1px;
  761. }
  762. }
  763. &__row {
  764. align-items: flex-start;
  765. display: flex;
  766. flex-direction: row;
  767. }
  768. }