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.
 
 
 
 
 

433 regels
9.9 KiB

  1. @use '../atoms/variables' as *;
  2. @use '../atoms/mixins' as *;
  3. // ─── Page ─────────────────────────────────────────────────────────────────────
  4. .account-page {
  5. @include page-shell;
  6. }
  7. // ─── Header ──────────────────────────────────────────────────────────────────
  8. .account-header {
  9. @include section-header;
  10. padding: $space-6;
  11. @include tablet {
  12. flex-direction: column;
  13. align-items: stretch;
  14. gap: $space-3;
  15. }
  16. }
  17. .account-header__title {
  18. font-size: $font-size-xl;
  19. font-weight: $font-weight-bold;
  20. color: var(--header-text);
  21. }
  22. // ─── Tab-Navigation (Pill im Header) ─────────────────────────────────────────
  23. .account-tabs {
  24. display: flex;
  25. background: var(--header-overlay);
  26. border-radius: $radius-pill;
  27. padding: 3px;
  28. gap: $space-1;
  29. backdrop-filter: blur(6px);
  30. -webkit-backdrop-filter: blur(6px);
  31. @include tablet {
  32. width: 100%;
  33. }
  34. }
  35. .account-tab {
  36. display: inline-flex;
  37. align-items: center;
  38. padding: $space-2 $space-5;
  39. @include tablet {
  40. flex: 1;
  41. justify-content: center;
  42. }
  43. font-size: $font-size-sm;
  44. font-weight: $font-weight-medium;
  45. color: var(--header-text-muted);
  46. text-decoration: none;
  47. border-radius: $radius-pill;
  48. transition: background $transition-fast, color $transition-fast;
  49. white-space: nowrap;
  50. &:hover:not(.account-tab--active) {
  51. color: var(--header-text);
  52. background: var(--header-overlay);
  53. }
  54. &--active {
  55. color: $color-text-dark;
  56. background: $color-white;
  57. font-weight: $font-weight-bold;
  58. }
  59. }
  60. // ─── Content ─────────────────────────────────────────────────────────────────
  61. .account-content {
  62. flex: 1;
  63. max-width: 680px;
  64. width: 100%;
  65. margin: $space-8 auto;
  66. padding: 0 $space-6;
  67. display: flex;
  68. flex-direction: column;
  69. gap: $space-6;
  70. @include tablet {
  71. padding: 0 $space-4;
  72. }
  73. }
  74. // ─── Karte ───────────────────────────────────────────────────────────────────
  75. .account-card {
  76. @include card;
  77. padding: $space-8;
  78. @include tablet { padding: $space-6 $space-5; }
  79. }
  80. // ─── Formular-Grid ───────────────────────────────────────────────────────────
  81. .account-form__grid {
  82. display: grid;
  83. grid-template-columns: 160px 1fr;
  84. gap: $space-4 $space-6;
  85. align-items: start;
  86. @include tablet {
  87. grid-template-columns: 1fr;
  88. gap: $space-3;
  89. }
  90. }
  91. .account-form__label {
  92. @include form-label;
  93. font-weight: $font-weight-medium;
  94. padding-top: 7px;
  95. @include tablet {
  96. text-align: left;
  97. padding-right: 0;
  98. padding-top: 0;
  99. }
  100. }
  101. .account-form__field {
  102. display: flex;
  103. flex-direction: column;
  104. gap: $space-2;
  105. }
  106. .account-form__hint {
  107. font-size: $font-size-xs;
  108. color: $color-text-muted;
  109. &--owner {
  110. font-size: $font-size-sm;
  111. line-height: 1.55;
  112. margin-top: $space-1;
  113. }
  114. }
  115. .account-form__link {
  116. font-size: $font-size-sm;
  117. color: $color-text-muted;
  118. text-decoration: none;
  119. &:hover { color: $color-text-dark; text-decoration: underline; }
  120. }
  121. .account-form__key-status {
  122. display: flex;
  123. align-items: center;
  124. gap: $space-3;
  125. padding: $space-2 0;
  126. }
  127. .account-form__key-mask {
  128. font-size: $font-size-base;
  129. color: $color-text-muted;
  130. letter-spacing: 0.1em;
  131. }
  132. // ─── Farbfeld ─────────────────────────────────────────────────────────────────
  133. .account-color-field {
  134. display: flex;
  135. align-items: center;
  136. gap: $space-3;
  137. }
  138. .account-color-field__swatch {
  139. width: 40px;
  140. height: 40px;
  141. border: 1px solid $color-input-border;
  142. border-radius: $radius-sm;
  143. padding: 2px;
  144. cursor: pointer;
  145. background: none;
  146. flex-shrink: 0;
  147. }
  148. .account-color-field__hex {
  149. width: 110px;
  150. font-family: monospace;
  151. letter-spacing: 0.04em;
  152. }
  153. // ─── Passwort-Sektion (toggle) ────────────────────────────────────────────────
  154. .account-form__pw-section {
  155. display: contents;
  156. }
  157. // ─── Actions ─────────────────────────────────────────────────────────────────
  158. .account-form__actions {
  159. grid-column: 1 / -1;
  160. display: flex;
  161. align-items: center;
  162. gap: $space-4;
  163. margin-top: $space-2;
  164. padding-top: $space-4;
  165. border-top: 1px solid $color-border;
  166. @include tablet {
  167. flex-direction: column;
  168. .btn { width: 100%; }
  169. }
  170. }
  171. // ─── Import-Sektion ──────────────────────────────────────────────────────
  172. .import-section__title {
  173. font-size: $font-size-lg;
  174. font-weight: $font-weight-bold;
  175. color: $color-text-dark;
  176. margin-bottom: $space-2;
  177. }
  178. .import-section__desc {
  179. font-size: $font-size-sm;
  180. color: $color-text-muted;
  181. line-height: 1.55;
  182. margin-bottom: $space-6;
  183. }
  184. .import-upload__area {
  185. display: flex;
  186. flex-direction: column;
  187. align-items: center;
  188. justify-content: center;
  189. gap: $space-2;
  190. padding: $space-8 $space-6;
  191. border: 2px dashed $color-input-border;
  192. border-radius: $radius-md;
  193. cursor: pointer;
  194. transition: border-color $transition-fast, background $transition-fast;
  195. &:hover,
  196. &--dragover {
  197. border-color: var(--color-primary, $color-primary);
  198. background: rgba(var(--color-primary-rgb, 58, 123, 191), 0.04);
  199. }
  200. }
  201. .import-upload__icon {
  202. color: $color-text-muted;
  203. }
  204. .import-upload__text {
  205. font-size: $font-size-sm;
  206. font-weight: $font-weight-medium;
  207. color: $color-text-dark;
  208. }
  209. .import-upload__hint {
  210. font-size: $font-size-xs;
  211. color: $color-text-muted;
  212. }
  213. .import-upload__file-info {
  214. display: flex;
  215. align-items: center;
  216. gap: $space-3;
  217. margin-top: $space-3;
  218. padding: $space-3 $space-4;
  219. background: $color-bg;
  220. border-radius: $radius-sm;
  221. font-size: $font-size-sm;
  222. color: $color-text-dark;
  223. }
  224. .import-upload__remove {
  225. margin-left: auto;
  226. background: none;
  227. border: none;
  228. font-size: $font-size-lg;
  229. color: $color-text-muted;
  230. cursor: pointer;
  231. padding: 0 $space-2;
  232. line-height: 1;
  233. &:hover { color: $color-error; }
  234. }
  235. .import-actions {
  236. margin-top: $space-5;
  237. display: flex;
  238. gap: $space-4;
  239. &--preview {
  240. padding-top: $space-5;
  241. border-top: 1px solid $color-border;
  242. }
  243. }
  244. // ─── Import-Vorschau ─────────────────────────────────────────────────────
  245. .import-preview__stats {
  246. display: grid;
  247. grid-template-columns: auto 1fr;
  248. gap: $space-2 $space-6;
  249. font-size: $font-size-sm;
  250. dt {
  251. color: $color-text-muted;
  252. font-weight: $font-weight-medium;
  253. }
  254. dd {
  255. color: $color-text-dark;
  256. font-weight: $font-weight-bold;
  257. margin: 0;
  258. }
  259. &--result dd {
  260. color: $color-text-dark;
  261. font-weight: $font-weight-regular;
  262. strong {
  263. color: var(--color-primary, $color-primary);
  264. font-weight: $font-weight-bold;
  265. }
  266. }
  267. }
  268. .import-preview__subtitle {
  269. font-size: $font-size-sm;
  270. font-weight: $font-weight-bold;
  271. color: $color-text-dark;
  272. margin-top: $space-5;
  273. margin-bottom: $space-2;
  274. }
  275. .import-preview__users {
  276. list-style: none;
  277. padding: 0;
  278. margin: 0;
  279. display: flex;
  280. flex-direction: column;
  281. gap: $space-2;
  282. li {
  283. font-size: $font-size-sm;
  284. color: $color-text-dark;
  285. line-height: 1.6;
  286. }
  287. }
  288. .import-preview__email {
  289. color: $color-text-muted;
  290. }
  291. .import-user-options {
  292. display: flex;
  293. gap: $space-4;
  294. margin-top: $space-1;
  295. }
  296. .import-user-option {
  297. display: inline-flex;
  298. align-items: center;
  299. gap: $space-1;
  300. font-size: $font-size-xs;
  301. color: $color-text-muted;
  302. cursor: pointer;
  303. input[type="radio"] {
  304. margin: 0;
  305. accent-color: var(--color-primary, $color-primary);
  306. }
  307. }
  308. .import-badge {
  309. display: inline-block;
  310. font-size: $font-size-xs;
  311. padding: 1px $space-2;
  312. border-radius: $radius-pill;
  313. font-weight: $font-weight-medium;
  314. &--matched {
  315. background: rgba(34, 197, 94, 0.12);
  316. color: #15803d;
  317. }
  318. &--fallback {
  319. background: rgba(234, 179, 8, 0.15);
  320. color: #a16207;
  321. }
  322. }
  323. .import-preview__warnings {
  324. list-style: none;
  325. padding: 0;
  326. margin: 0;
  327. display: flex;
  328. flex-direction: column;
  329. gap: $space-1;
  330. li {
  331. font-size: $font-size-sm;
  332. color: $color-text-muted;
  333. padding-left: $space-4;
  334. position: relative;
  335. &::before {
  336. content: '⚠';
  337. position: absolute;
  338. left: 0;
  339. font-size: $font-size-xs;
  340. }
  341. }
  342. }
  343. .import-result {
  344. border-left: 3px solid var(--color-primary, $color-primary);
  345. }
  346. // ─── Toast ───────────────────────────────────────────────────────────────────
  347. .account-toast {
  348. position: fixed;
  349. bottom: $space-6;
  350. right: $space-6;
  351. background: $color-text-dark;
  352. color: $color-white;
  353. padding: $space-3 $space-5;
  354. border-radius: $radius-md;
  355. font-size: $font-size-sm;
  356. opacity: 0;
  357. transform: translateY(8px);
  358. transition: opacity $transition-base, transform $transition-base;
  359. pointer-events: none;
  360. z-index: 9999;
  361. &--visible {
  362. opacity: 1;
  363. transform: translateY(0);
  364. }
  365. &--error { background: $color-error; }
  366. }