// ──────────────────────────────────────────────────────────────── // Komponente · Formularfelder // // `.field` = Label + Control + Hinweis/Fehler. Roh-Elemente // (`.input`, `.textarea`, `.select`) sind auch einzeln nutzbar. // ──────────────────────────────────────────────────────────────── .field { display: flex; flex-direction: column; gap: var(--sp-2); } .field__label { font-size: var(--fs-sm); font-weight: var(--fw-medium); letter-spacing: .06em; text-transform: uppercase; color: var(--dim); } .field__hint { font-size: var(--fs-sm); color: var(--muted); } .field__error { font-size: var(--fs-sm); color: var(--off); } .input, .textarea, .select { width: 100%; padding: 9px var(--sp-3); font-family: var(--font-sans); font-size: var(--fs-base); line-height: 1.4; color: var(--fg); background: var(--bg); border: 1px solid var(--line); border-radius: var(--r-md); transition: border-color var(--dur-fast) var(--ease), box-shadow var(--dur-fast) var(--ease); } .input::placeholder, .textarea::placeholder { color: var(--faint); } .input:hover, .textarea:hover, .select:hover { border-color: color-mix(in srgb, var(--accent) 35%, var(--line)); } .input:focus, .textarea:focus, .select:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); } .input:disabled, .textarea:disabled, .select:disabled { opacity: .55; cursor: not-allowed; } .textarea { min-height: 96px; resize: vertical; } // Fehlerzustand (Wrapper oder Element) .field--invalid .input, .field--invalid .textarea, .field--invalid .select, .input[aria-invalid="true"], .textarea[aria-invalid="true"], .select[aria-invalid="true"] { border-color: var(--off); box-shadow: 0 0 0 3px color-mix(in srgb, var(--off) 22%, transparent); } // Feldgruppen .form-row { display: grid; gap: var(--sp-4); grid-template-columns: 1fr; } @media (min-width: 620px) { .form-row--2 { grid-template-columns: 1fr 1fr; } } // Eingabe mit vorangestelltem Icon/Kuerzel .input-group { display: flex; align-items: center; gap: var(--sp-2); padding: 0 var(--sp-3); background: var(--bg); border: 1px solid var(--line); border-radius: var(--r-md); &:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); } .input { padding-left: 0; padding-right: 0; border: 0; border-radius: 0; background: transparent; &:focus { box-shadow: none; } } &__addon { flex: 0 0 auto; color: var(--muted); font-size: var(--fs-sm); } }