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.

979 lines
17 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. .recommended {
  68. position: absolute;
  69. margin: 0 4px;
  70. margin-top: -2px;
  71. }
  72. }
  73. }
  74. .row {
  75. display: flex;
  76. margin: 0 -5px;
  77. .input {
  78. box-sizing: border-box;
  79. flex: 1 1 auto;
  80. width: 50%;
  81. padding: 0 5px;
  82. }
  83. }
  84. .hint {
  85. color: $darker-text-color;
  86. a {
  87. color: $highlight-text-color;
  88. }
  89. code {
  90. border-radius: 3px;
  91. padding: 0.2em 0.4em;
  92. background: darken($ui-base-color, 12%);
  93. }
  94. li {
  95. list-style: disc;
  96. margin-left: 18px;
  97. }
  98. }
  99. ul.hint {
  100. margin-bottom: 15px;
  101. }
  102. span.hint {
  103. display: block;
  104. font-size: 12px;
  105. margin-top: 4px;
  106. }
  107. p.hint {
  108. margin-bottom: 15px;
  109. color: $darker-text-color;
  110. &.subtle-hint {
  111. text-align: center;
  112. font-size: 12px;
  113. line-height: 18px;
  114. margin-top: 15px;
  115. margin-bottom: 0;
  116. }
  117. }
  118. .otp-hint {
  119. margin-bottom: 25px;
  120. }
  121. .card {
  122. margin-bottom: 15px;
  123. }
  124. strong {
  125. font-weight: 500;
  126. @each $lang in $cjk-langs {
  127. &:lang(#{$lang}) {
  128. font-weight: 700;
  129. }
  130. }
  131. }
  132. .input.with_floating_label {
  133. .label_input {
  134. display: flex;
  135. & > label {
  136. font-family: inherit;
  137. font-size: 14px;
  138. color: $primary-text-color;
  139. font-weight: 500;
  140. min-width: 150px;
  141. flex: 0 0 auto;
  142. }
  143. input,
  144. select {
  145. flex: 1 1 auto;
  146. }
  147. }
  148. &.select .hint {
  149. margin-top: 6px;
  150. margin-left: 150px;
  151. }
  152. }
  153. .input.with_label {
  154. .label_input > label {
  155. font-family: inherit;
  156. font-size: 14px;
  157. color: $primary-text-color;
  158. display: block;
  159. margin-bottom: 8px;
  160. word-wrap: break-word;
  161. font-weight: 500;
  162. }
  163. .hint {
  164. margin-top: 6px;
  165. }
  166. ul {
  167. flex: 390px;
  168. }
  169. }
  170. .input.with_block_label {
  171. max-width: none;
  172. & > label {
  173. font-family: inherit;
  174. font-size: 16px;
  175. color: $primary-text-color;
  176. display: block;
  177. font-weight: 500;
  178. padding-top: 5px;
  179. }
  180. .hint {
  181. margin-bottom: 15px;
  182. }
  183. ul {
  184. columns: 2;
  185. }
  186. }
  187. .input.datetime .label_input select {
  188. display: inline-block;
  189. width: auto;
  190. flex: 0;
  191. }
  192. .required abbr {
  193. text-decoration: none;
  194. color: lighten($error-value-color, 12%);
  195. }
  196. .fields-group {
  197. margin-bottom: 25px;
  198. .input:last-child {
  199. margin-bottom: 0;
  200. }
  201. }
  202. .fields-row {
  203. display: flex;
  204. margin: 0 -10px;
  205. padding-top: 5px;
  206. margin-bottom: 25px;
  207. .input {
  208. max-width: none;
  209. }
  210. &__column {
  211. box-sizing: border-box;
  212. padding: 0 10px;
  213. flex: 1 1 auto;
  214. min-height: 1px;
  215. &-6 {
  216. max-width: 50%;
  217. }
  218. .actions {
  219. margin-top: 27px;
  220. }
  221. }
  222. .fields-group:last-child,
  223. .fields-row__column.fields-group {
  224. margin-bottom: 0;
  225. }
  226. @media screen and (max-width: $no-columns-breakpoint) {
  227. display: block;
  228. margin-bottom: 0;
  229. &__column {
  230. max-width: none;
  231. }
  232. .fields-group:last-child,
  233. .fields-row__column.fields-group,
  234. .fields-row__column {
  235. margin-bottom: 25px;
  236. }
  237. }
  238. .fields-group.invited-by {
  239. margin-bottom: 30px;
  240. .hint {
  241. text-align: center;
  242. }
  243. }
  244. }
  245. .input.radio_buttons .radio label {
  246. margin-bottom: 5px;
  247. font-family: inherit;
  248. font-size: 14px;
  249. color: $primary-text-color;
  250. display: block;
  251. width: auto;
  252. }
  253. .check_boxes {
  254. .checkbox {
  255. label {
  256. font-family: inherit;
  257. font-size: 14px;
  258. color: $primary-text-color;
  259. display: inline-block;
  260. width: auto;
  261. position: relative;
  262. padding-top: 5px;
  263. padding-left: 25px;
  264. flex: 1 1 auto;
  265. }
  266. input[type=checkbox] {
  267. position: absolute;
  268. left: 0;
  269. top: 5px;
  270. margin: 0;
  271. }
  272. }
  273. }
  274. .input.static .label_input__wrapper {
  275. font-size: 16px;
  276. padding: 10px;
  277. border: 1px solid $dark-text-color;
  278. border-radius: 4px;
  279. }
  280. input[type=text],
  281. input[type=number],
  282. input[type=email],
  283. input[type=password],
  284. textarea {
  285. box-sizing: border-box;
  286. font-size: 16px;
  287. color: $primary-text-color;
  288. display: block;
  289. width: 100%;
  290. outline: 0;
  291. font-family: inherit;
  292. resize: vertical;
  293. background: darken($ui-base-color, 10%);
  294. border: 1px solid darken($ui-base-color, 14%);
  295. border-radius: 4px;
  296. padding: 10px;
  297. &::placeholder {
  298. color: lighten($darker-text-color, 4%);
  299. }
  300. &:invalid {
  301. box-shadow: none;
  302. }
  303. &:focus:invalid:not(:placeholder-shown) {
  304. border-color: lighten($error-red, 12%);
  305. }
  306. &:required:valid {
  307. border-color: $valid-value-color;
  308. }
  309. &:hover {
  310. border-color: darken($ui-base-color, 20%);
  311. }
  312. &:active,
  313. &:focus {
  314. border-color: $highlight-text-color;
  315. background: darken($ui-base-color, 8%);
  316. }
  317. }
  318. .input.field_with_errors {
  319. label {
  320. color: lighten($error-red, 12%);
  321. }
  322. input[type=text],
  323. input[type=number],
  324. input[type=email],
  325. input[type=password],
  326. textarea,
  327. select {
  328. border-color: lighten($error-red, 12%);
  329. }
  330. .error {
  331. display: block;
  332. font-weight: 500;
  333. color: lighten($error-red, 12%);
  334. margin-top: 4px;
  335. }
  336. }
  337. .input.disabled {
  338. opacity: 0.5;
  339. }
  340. .actions {
  341. margin-top: 30px;
  342. display: flex;
  343. &.actions--top {
  344. margin-top: 0;
  345. margin-bottom: 30px;
  346. }
  347. }
  348. button,
  349. .button,
  350. .block-button {
  351. display: block;
  352. width: 100%;
  353. border: 0;
  354. border-radius: 4px;
  355. background: $ui-highlight-color;
  356. color: $primary-text-color;
  357. font-size: 18px;
  358. line-height: inherit;
  359. height: auto;
  360. padding: 10px;
  361. text-transform: uppercase;
  362. text-decoration: none;
  363. text-align: center;
  364. box-sizing: border-box;
  365. cursor: pointer;
  366. font-weight: 500;
  367. outline: 0;
  368. margin-bottom: 10px;
  369. margin-right: 10px;
  370. &:last-child {
  371. margin-right: 0;
  372. }
  373. &:hover {
  374. background-color: lighten($ui-highlight-color, 5%);
  375. }
  376. &:active,
  377. &:focus {
  378. background-color: darken($ui-highlight-color, 5%);
  379. }
  380. &:disabled:hover {
  381. background-color: $ui-primary-color;
  382. }
  383. &.negative {
  384. background: $error-value-color;
  385. &:hover {
  386. background-color: lighten($error-value-color, 5%);
  387. }
  388. &:active,
  389. &:focus {
  390. background-color: darken($error-value-color, 5%);
  391. }
  392. }
  393. }
  394. select {
  395. appearance: none;
  396. box-sizing: border-box;
  397. font-size: 16px;
  398. color: $primary-text-color;
  399. display: block;
  400. width: 100%;
  401. outline: 0;
  402. font-family: inherit;
  403. resize: vertical;
  404. 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;
  405. border: 1px solid darken($ui-base-color, 14%);
  406. border-radius: 4px;
  407. padding-left: 10px;
  408. padding-right: 30px;
  409. height: 41px;
  410. }
  411. h4 {
  412. margin-bottom: 15px !important;
  413. }
  414. .label_input {
  415. &__wrapper {
  416. position: relative;
  417. }
  418. &__append {
  419. position: absolute;
  420. right: 3px;
  421. top: 1px;
  422. padding: 10px;
  423. padding-bottom: 9px;
  424. font-size: 16px;
  425. color: $dark-text-color;
  426. font-family: inherit;
  427. pointer-events: none;
  428. cursor: default;
  429. max-width: 140px;
  430. white-space: nowrap;
  431. overflow: hidden;
  432. &::after {
  433. content: '';
  434. display: block;
  435. position: absolute;
  436. top: 0;
  437. right: 0;
  438. bottom: 1px;
  439. width: 5px;
  440. background-image: linear-gradient(to right, rgba(darken($ui-base-color, 10%), 0), darken($ui-base-color, 10%));
  441. }
  442. }
  443. }
  444. &__overlay-area {
  445. position: relative;
  446. &__blurred form {
  447. filter: blur(2px);
  448. }
  449. &__overlay {
  450. position: absolute;
  451. top: 0;
  452. left: 0;
  453. width: 100%;
  454. height: 100%;
  455. display: flex;
  456. justify-content: center;
  457. align-items: center;
  458. background: rgba($ui-base-color, 0.65);
  459. border-radius: 4px;
  460. margin-left: -4px;
  461. margin-top: -4px;
  462. padding: 4px;
  463. &__content {
  464. text-align: center;
  465. &.rich-formatting {
  466. &,
  467. p {
  468. color: $primary-text-color;
  469. }
  470. }
  471. }
  472. }
  473. }
  474. }
  475. .block-icon {
  476. display: block;
  477. margin: 0 auto;
  478. margin-bottom: 10px;
  479. font-size: 24px;
  480. }
  481. .flash-message {
  482. background: lighten($ui-base-color, 8%);
  483. color: $darker-text-color;
  484. border-radius: 4px;
  485. padding: 15px 10px;
  486. margin-bottom: 30px;
  487. text-align: center;
  488. &.notice {
  489. border: 1px solid rgba($valid-value-color, 0.5);
  490. background: rgba($valid-value-color, 0.25);
  491. color: $valid-value-color;
  492. }
  493. &.alert {
  494. border: 1px solid rgba($error-value-color, 0.5);
  495. background: rgba($error-value-color, 0.25);
  496. color: $error-value-color;
  497. }
  498. a {
  499. display: inline-block;
  500. color: $darker-text-color;
  501. text-decoration: none;
  502. &:hover {
  503. color: $primary-text-color;
  504. text-decoration: underline;
  505. }
  506. }
  507. p {
  508. margin-bottom: 15px;
  509. }
  510. .oauth-code {
  511. outline: 0;
  512. box-sizing: border-box;
  513. display: block;
  514. width: 100%;
  515. border: 0;
  516. padding: 10px;
  517. font-family: $font-monospace, monospace;
  518. background: $ui-base-color;
  519. color: $primary-text-color;
  520. font-size: 14px;
  521. margin: 0;
  522. &::-moz-focus-inner {
  523. border: 0;
  524. }
  525. &::-moz-focus-inner,
  526. &:focus,
  527. &:active {
  528. outline: 0 !important;
  529. }
  530. &:focus {
  531. background: lighten($ui-base-color, 4%);
  532. }
  533. }
  534. strong {
  535. font-weight: 500;
  536. @each $lang in $cjk-langs {
  537. &:lang(#{$lang}) {
  538. font-weight: 700;
  539. }
  540. }
  541. }
  542. @media screen and (max-width: 740px) and (min-width: 441px) {
  543. margin-top: 40px;
  544. }
  545. &.translation-prompt {
  546. text-align: unset;
  547. color: unset;
  548. a {
  549. text-decoration: underline;
  550. }
  551. }
  552. }
  553. .form-footer {
  554. margin-top: 30px;
  555. text-align: center;
  556. a {
  557. color: $darker-text-color;
  558. text-decoration: none;
  559. &:hover {
  560. text-decoration: underline;
  561. }
  562. }
  563. }
  564. .quick-nav {
  565. list-style: none;
  566. margin-bottom: 25px;
  567. font-size: 14px;
  568. li {
  569. display: inline-block;
  570. margin-right: 10px;
  571. }
  572. a {
  573. color: $highlight-text-color;
  574. text-transform: uppercase;
  575. text-decoration: none;
  576. font-weight: 700;
  577. &:hover,
  578. &:focus,
  579. &:active {
  580. color: lighten($highlight-text-color, 8%);
  581. }
  582. }
  583. }
  584. .oauth-prompt,
  585. .follow-prompt {
  586. margin-bottom: 30px;
  587. color: $darker-text-color;
  588. h2 {
  589. font-size: 16px;
  590. margin-bottom: 30px;
  591. text-align: center;
  592. }
  593. strong {
  594. color: $secondary-text-color;
  595. font-weight: 500;
  596. @each $lang in $cjk-langs {
  597. &:lang(#{$lang}) {
  598. font-weight: 700;
  599. }
  600. }
  601. }
  602. @media screen and (max-width: 740px) and (min-width: 441px) {
  603. margin-top: 40px;
  604. }
  605. }
  606. .qr-wrapper {
  607. display: flex;
  608. flex-wrap: wrap;
  609. align-items: flex-start;
  610. }
  611. .qr-code {
  612. flex: 0 0 auto;
  613. background: $simple-background-color;
  614. padding: 4px;
  615. margin: 0 10px 20px 0;
  616. box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
  617. display: inline-block;
  618. svg {
  619. display: block;
  620. margin: 0;
  621. }
  622. }
  623. .qr-alternative {
  624. margin-bottom: 20px;
  625. color: $secondary-text-color;
  626. flex: 150px;
  627. samp {
  628. display: block;
  629. font-size: 14px;
  630. }
  631. }
  632. .table-form {
  633. p {
  634. margin-bottom: 15px;
  635. strong {
  636. font-weight: 500;
  637. @each $lang in $cjk-langs {
  638. &:lang(#{$lang}) {
  639. font-weight: 700;
  640. }
  641. }
  642. }
  643. }
  644. }
  645. .simple_form,
  646. .table-form {
  647. .warning {
  648. box-sizing: border-box;
  649. background: rgba($error-value-color, 0.5);
  650. color: $primary-text-color;
  651. text-shadow: 1px 1px 0 rgba($base-shadow-color, 0.3);
  652. box-shadow: 0 2px 6px rgba($base-shadow-color, 0.4);
  653. border-radius: 4px;
  654. padding: 10px;
  655. margin-bottom: 15px;
  656. a {
  657. color: $primary-text-color;
  658. text-decoration: underline;
  659. &:hover,
  660. &:focus,
  661. &:active {
  662. text-decoration: none;
  663. }
  664. }
  665. strong {
  666. font-weight: 600;
  667. display: block;
  668. margin-bottom: 5px;
  669. @each $lang in $cjk-langs {
  670. &:lang(#{$lang}) {
  671. font-weight: 700;
  672. }
  673. }
  674. .fa {
  675. font-weight: 400;
  676. }
  677. }
  678. }
  679. }
  680. .action-pagination {
  681. display: flex;
  682. flex-wrap: wrap;
  683. align-items: center;
  684. .actions,
  685. .pagination {
  686. flex: 1 1 auto;
  687. }
  688. .actions {
  689. padding: 30px 0;
  690. padding-right: 20px;
  691. flex: 0 0 auto;
  692. }
  693. }
  694. .post-follow-actions {
  695. text-align: center;
  696. color: $darker-text-color;
  697. div {
  698. margin-bottom: 4px;
  699. }
  700. }
  701. .alternative-login {
  702. margin-top: 20px;
  703. margin-bottom: 20px;
  704. h4 {
  705. font-size: 16px;
  706. color: $primary-text-color;
  707. text-align: center;
  708. margin-bottom: 20px;
  709. border: 0;
  710. padding: 0;
  711. }
  712. .button {
  713. display: block;
  714. }
  715. }
  716. .scope-danger {
  717. color: $warning-red;
  718. }
  719. .form_admin_settings_site_short_description,
  720. .form_admin_settings_site_description,
  721. .form_admin_settings_site_extended_description,
  722. .form_admin_settings_site_terms,
  723. .form_admin_settings_custom_css,
  724. .form_admin_settings_closed_registrations_message {
  725. textarea {
  726. font-family: $font-monospace, monospace;
  727. }
  728. }
  729. .input-copy {
  730. background: darken($ui-base-color, 10%);
  731. border: 1px solid darken($ui-base-color, 14%);
  732. border-radius: 4px;
  733. display: flex;
  734. align-items: center;
  735. padding-right: 4px;
  736. position: relative;
  737. top: 1px;
  738. transition: border-color 300ms linear;
  739. &__wrapper {
  740. flex: 1 1 auto;
  741. }
  742. input[type=text] {
  743. background: transparent;
  744. border: 0;
  745. padding: 10px;
  746. font-size: 14px;
  747. font-family: $font-monospace, monospace;
  748. }
  749. button {
  750. flex: 0 0 auto;
  751. margin: 4px;
  752. text-transform: none;
  753. font-weight: 400;
  754. font-size: 14px;
  755. padding: 7px 18px;
  756. padding-bottom: 6px;
  757. width: auto;
  758. transition: background 300ms linear;
  759. }
  760. &.copied {
  761. border-color: $valid-value-color;
  762. transition: none;
  763. button {
  764. background: $valid-value-color;
  765. transition: none;
  766. }
  767. }
  768. }
  769. .connection-prompt {
  770. margin-bottom: 25px;
  771. .fa-link {
  772. background-color: darken($ui-base-color, 4%);
  773. border-radius: 100%;
  774. font-size: 24px;
  775. padding: 10px;
  776. }
  777. &__column {
  778. align-items: center;
  779. display: flex;
  780. flex: 1;
  781. flex-direction: column;
  782. flex-shrink: 1;
  783. max-width: 50%;
  784. &-sep {
  785. align-self: center;
  786. flex-grow: 0;
  787. overflow: visible;
  788. position: relative;
  789. z-index: 1;
  790. }
  791. p {
  792. word-break: break-word;
  793. }
  794. }
  795. .account__avatar {
  796. margin-bottom: 20px;
  797. }
  798. &__connection {
  799. background-color: lighten($ui-base-color, 8%);
  800. box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
  801. border-radius: 4px;
  802. padding: 25px 10px;
  803. position: relative;
  804. text-align: center;
  805. &::after {
  806. background-color: darken($ui-base-color, 4%);
  807. content: '';
  808. display: block;
  809. height: 100%;
  810. left: 50%;
  811. position: absolute;
  812. top: 0;
  813. width: 1px;
  814. }
  815. }
  816. &__row {
  817. align-items: flex-start;
  818. display: flex;
  819. flex-direction: row;
  820. }
  821. }