@@ -1152,20 +1152,24 @@ sub app_html {
|
||
| 1152 | 1152 |
/* ── Login screen ── */ |
| 1153 | 1153 |
#login-screen {
|
| 1154 | 1154 |
display: flex; |
| 1155 |
- align-items: center; |
|
| 1155 |
+ align-items: flex-start; |
|
| 1156 | 1156 |
justify-content: center; |
| 1157 | 1157 |
min-height: 100dvh; |
| 1158 |
- padding: 24px; |
|
| 1158 |
+ padding: clamp(48px, 10vh, 96px) 24px clamp(140px, 20vh, 220px); |
|
| 1159 | 1159 |
background: #13182a; |
| 1160 |
+ overflow: auto; |
|
| 1160 | 1161 |
} |
| 1161 | 1162 |
.login-card {
|
| 1163 |
+ --otp-size: 48px; |
|
| 1164 |
+ --otp-gap: 8px; |
|
| 1165 |
+ --login-form-width: calc((var(--otp-size) * 6) + (var(--otp-gap) * 5)); |
|
| 1162 | 1166 |
background: #fff; |
| 1163 | 1167 |
border-radius: 16px; |
| 1164 |
- padding: 44px 36px 36px; |
|
| 1168 |
+ padding: 48px 36px 44px; |
|
| 1165 | 1169 |
width: 100%; |
| 1166 |
- max-width: 380px; |
|
| 1170 |
+ max-width: 424px; |
|
| 1167 | 1171 |
display: grid; |
| 1168 |
- gap: 24px; |
|
| 1172 |
+ gap: 26px; |
|
| 1169 | 1173 |
box-shadow: 0 8px 40px rgba(0,0,0,.28); |
| 1170 | 1174 |
} |
| 1171 | 1175 |
.login-card .brand { text-align: center; display: grid; gap: 6px; }
|
@@ -1177,12 +1181,22 @@ sub app_html {
|
||
| 1177 | 1181 |
.login-card .brand .icon svg { width: 26px; height: 26px; fill: var(--accent); }
|
| 1178 | 1182 |
.login-card .brand h1 { margin: 0; font-size: 22px; font-weight: 700; color: var(--ink); }
|
| 1179 | 1183 |
.login-card .brand p { margin: 0; color: var(--muted); font-size: 13px; }
|
| 1180 |
- .login-card form { display: grid; gap: 16px; }
|
|
| 1184 |
+ .login-card form {
|
|
| 1185 |
+ display: grid; |
|
| 1186 |
+ gap: 16px; |
|
| 1187 |
+ width: min(100%, var(--login-form-width)); |
|
| 1188 |
+ justify-self: center; |
|
| 1189 |
+ } |
|
| 1181 | 1190 |
.login-card .field-label { font-size: 13px; font-weight: 600; color: var(--ink); }
|
| 1182 | 1191 |
/* 6 separate OTP digit boxes */ |
| 1183 |
- .otp-row { display: flex; gap: 8px; justify-content: center; }
|
|
| 1192 |
+ .otp-row {
|
|
| 1193 |
+ display: flex; |
|
| 1194 |
+ gap: var(--otp-gap); |
|
| 1195 |
+ justify-content: center; |
|
| 1196 |
+ margin-bottom: clamp(92px, 13vh, 132px); |
|
| 1197 |
+ } |
|
| 1184 | 1198 |
.otp-row input {
|
| 1185 |
- width: 48px; height: 56px; border: 1.5px solid #dde2ec; border-radius: 10px; |
|
| 1199 |
+ width: var(--otp-size); height: 56px; border: 1.5px solid #dde2ec; border-radius: 10px; |
|
| 1186 | 1200 |
font-size: 22px; font-weight: 600; text-align: center; color: var(--ink); |
| 1187 | 1201 |
background: #f8fafc; caret-color: transparent; outline: none; |
| 1188 | 1202 |
transition: border-color .15s, background .15s; |
@@ -1201,6 +1215,21 @@ sub app_html {
|
||
| 1201 | 1215 |
color: var(--bad); font-size: 13px; text-align: center; |
| 1202 | 1216 |
min-height: 18px; margin-top: -8px; |
| 1203 | 1217 |
} |
| 1218 |
+ @media (max-width: 430px) {
|
|
| 1219 |
+ #login-screen { padding: 24px 16px 120px; }
|
|
| 1220 |
+ .login-card {
|
|
| 1221 |
+ --otp-size: 42px; |
|
| 1222 |
+ --otp-gap: 6px; |
|
| 1223 |
+ padding: 36px 22px 34px; |
|
| 1224 |
+ } |
|
| 1225 |
+ .otp-row input { height: 52px; }
|
|
| 1226 |
+ .otp-row { margin-bottom: 88px; }
|
|
| 1227 |
+ } |
|
| 1228 |
+ @media (max-height: 720px) {
|
|
| 1229 |
+ #login-screen { padding-top: 28px; padding-bottom: 96px; }
|
|
| 1230 |
+ .login-card { padding-top: 34px; padding-bottom: 34px; gap: 20px; }
|
|
| 1231 |
+ .otp-row { margin-bottom: 72px; }
|
|
| 1232 |
+ } |
|
| 1204 | 1233 |
|
| 1205 | 1234 |
/* ── App shell (hidden until authenticated) ── */ |
| 1206 | 1235 |
#app { display: none; }
|