login.scss 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. @use 'sass:math';
  2. $bg: #f2f2f7;
  3. $text: #1c1c1e;
  4. $muted: #8e8e93;
  5. $primary: #007aff;
  6. $card: #ffffff;
  7. $border: #e5e5ea;
  8. $shadow: 0 8px 30px rgba(0,0,0,0.06);
  9. .login-container {
  10. min-height: 100vh;
  11. display: grid;
  12. place-items: center;
  13. background: linear-gradient(180deg, #f5f7fb, #eef1f7);
  14. padding: 24px;
  15. }
  16. .login-card {
  17. width: min(960px, 100%);
  18. background: $card;
  19. border-radius: 24px;
  20. border: 1px solid $border;
  21. box-shadow: $shadow;
  22. padding: clamp(20px, 4vw, 40px);
  23. display: grid;
  24. grid-template-rows: auto auto auto auto;
  25. gap: 24px;
  26. }
  27. .brand {
  28. text-align: center;
  29. .logo {
  30. font-family: 'SF Pro Display', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', 'Apple Color Emoji', 'Segoe UI Emoji';
  31. font-size: 42px;
  32. margin-bottom: 4px;
  33. }
  34. h1 { font-size: clamp(20px, 2vw, 26px); color: $text; margin: 0; }
  35. p { color: $muted; margin: 6px 0 0; }
  36. }
  37. .form {
  38. display: grid;
  39. grid-template-columns: 1fr 1fr;
  40. gap: 16px 20px;
  41. .form-row {
  42. display: grid;
  43. gap: 8px;
  44. label { color: $text; font-weight: 600; }
  45. input {
  46. height: 44px;
  47. border: 1px solid $border;
  48. border-radius: 12px;
  49. padding: 0 14px;
  50. font-size: 16px;
  51. outline: none;
  52. background: $card;
  53. transition: box-shadow .2s ease, border-color .2s ease;
  54. &:focus {
  55. border-color: $primary;
  56. box-shadow: 0 0 0 4px color-mix(in srgb, $primary 12%, transparent);
  57. }
  58. }
  59. }
  60. .ios-primary {
  61. grid-column: 1 / -1;
  62. height: 46px;
  63. border: none;
  64. border-radius: 14px;
  65. background: $primary;
  66. color: white;
  67. font-weight: 600;
  68. letter-spacing: .3px;
  69. cursor: pointer;
  70. transition: transform .04s ease, filter .2s ease;
  71. &:active { transform: scale(.998); }
  72. &:disabled { filter: grayscale(.2) opacity(.8); cursor: not-allowed; }
  73. }
  74. }
  75. .quick-roles {
  76. .divider {
  77. display: grid;
  78. grid-template-columns: 1fr auto 1fr;
  79. align-items: center;
  80. gap: 12px;
  81. color: $muted;
  82. &::before, &::after {
  83. content: '';
  84. height: 1px;
  85. background: $border;
  86. display: block;
  87. }
  88. span { padding: 2px 8px; border-radius: 999px; background: #f7f7fa; font-size: 12px; }
  89. }
  90. .roles-grid {
  91. margin-top: 12px;
  92. display: grid;
  93. grid-template-columns: repeat(6, 1fr);
  94. gap: 10px;
  95. .role-btn {
  96. height: 64px;
  97. border-radius: 14px;
  98. border: 1px solid $border;
  99. background: white;
  100. display: grid;
  101. grid-template-columns: auto 1fr;
  102. align-items: center;
  103. gap: 8px;
  104. padding: 0 12px;
  105. cursor: pointer;
  106. transition: box-shadow .2s ease, transform .04s ease, border-color .2s ease;
  107. .icon { font-size: 18px; }
  108. span:last-child { font-weight: 600; color: $text; }
  109. &:hover { border-color: color-mix(in srgb, $primary 20%, $border); box-shadow: 0 6px 18px rgba(0,0,0,.04); }
  110. &:active { transform: translateY(1px); }
  111. }
  112. }
  113. }
  114. .footer {
  115. display: flex;
  116. gap: 12px;
  117. align-items: center;
  118. justify-content: center;
  119. color: $muted;
  120. font-size: 12px;
  121. a { color: inherit; text-decoration: none; }
  122. }
  123. @media (max-width: 920px) {
  124. .form { grid-template-columns: 1fr; }
  125. .roles-grid { grid-template-columns: repeat(3, 1fr) !important; }
  126. }
  127. @media (max-width: 520px) {
  128. .roles-grid { grid-template-columns: repeat(2, 1fr) !important; }
  129. }