Files
ClaudeandClaude Sonnet 5.5 92d7d247e9 Kundenansicht neu E-Fix F3a: Fokusring der Shell-Reiter liegt innen und ist sichtbar
.kn [tabindex]:focus-visible (module.css, 0-3-0, später geladen) und .kn button:focus-visible setzten outline-offset +2px und schlugen
.kn-t:focus-visible und .kn-reiter-t:focus-visible (0-2-0). Der Ring lag außerhalb und wurde von Balken und Reiterzeile abgeschnitten.
Jetzt .kn .kn-t[role="tab"] und .kn .kn-reiter-t[role="tab"] (0-4-0) mit Versatz -2px; der aktive Reiter auf dem schwarzen Gleiter
bekommt vom Gleiter einen hellen Innenring (Rückfall ohne Overlay: weißer Ring am Reiter). Pin in test/knEfixCss.test.js.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 21:30:06 +00:00

158 lines
9.5 KiB
CSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* Kundenansicht neu: Basis und Bausteine im weißen Stil (Maße des Ticketsystems, global.css).
Die Grundregeln gelten am Desktop; die Handy-Abfrage am Dateiende überschreibt für das Handy. */
/* ---------- Grundlage (Spezifität 0, damit Bausteinklassen gewinnen) ---------- */
:where(.kn) { margin: 0; font-family: var(--kn-font); font-size: 14px; line-height: 20px; color: var(--kn-text); background: var(--kn-bg); -webkit-font-smoothing: antialiased; }
:where(.kn) *, :where(.kn) *::before, :where(.kn) *::after { box-sizing: border-box; }
:where(.kn) a { color: inherit; text-decoration: none; }
:where(.kn) a:not([class]) { text-decoration: underline; text-decoration-color: var(--kn-line-strong); text-underline-offset: 3px; }
:where(.kn) a:not([class]):hover { text-decoration-color: currentColor; }
:where(.kn) button { font: inherit; color: inherit; background: none; border: 0; padding: 0; cursor: pointer; }
:where(.kn) input, :where(.kn) select, :where(.kn) textarea { font: inherit; color: inherit; }
:where(.kn) h1, :where(.kn) h2, :where(.kn) h3, :where(.kn) p { margin: 0; }
:where(.kn) :focus-visible { outline: 2px solid #111; outline-offset: 2px; }
:where(.kn) :disabled { opacity: .55; cursor: not-allowed; }
:where(.kn) [readonly] { background: var(--kn-bg-subtle); }
.kn [hidden] { display: none !important; }
.kn-num { font-variant-numeric: tabular-nums; }
/* ---------- Überschriften ---------- */
.kn-titel { font-size: 28px; line-height: 34px; font-weight: 700; letter-spacing: -.02em; }
.kn-abschnitt { display: flex; justify-content: space-between; align-items: baseline; gap: 16px; margin: 36px 0 12px; font-size: 16px; line-height: 24px; font-weight: 600; }
/* ---------- Knöpfe und Links ---------- */
.kn-knopf, .kn-knopf-primaer, .kn-knopf-zweit, .kn-textknopf {
display: inline-flex; align-items: center; justify-content: center; gap: 6px;
height: 32px; padding: 0 12px; border-radius: var(--kn-radius);
font-weight: 500; white-space: nowrap; text-decoration: none; color: var(--kn-text);
background: var(--kn-bg); box-shadow: var(--kn-ring); cursor: pointer;
transition: background-color .12s, box-shadow .12s;
}
.kn-knopf:hover, .kn-knopf-zweit:hover { background: var(--kn-bg-hover); }
.kn-knopf-primaer { background: var(--kn-accent); color: #fff; box-shadow: var(--kn-shadow-btn); }
.kn-knopf-primaer:hover { background: var(--kn-accent-hover); }
.kn-textknopf { box-shadow: none; color: var(--kn-text-2); padding: 0 8px; background: none; }
.kn-textknopf:hover { color: var(--kn-text); background: none; }
.kn-link-danger { color: var(--kn-danger); font-weight: 500; cursor: pointer; }
.kn-link-danger:hover { text-decoration: underline; text-underline-offset: 3px; }
/* ---------- Felder ---------- */
.kn-feld { display: flex; flex-direction: column; gap: 6px; }
.kn-feld > label { font-weight: 500; }
.kn-feld-hinweis { font-size: 13px; color: var(--kn-text-2); }
.kn-input, .kn-select, .kn-textarea {
height: 32px; min-width: 0; padding: 0 10px; border: 0; border-radius: var(--kn-radius);
background: var(--kn-bg); box-shadow: var(--kn-ring); outline: none; transition: box-shadow .12s;
}
.kn-textarea { height: auto; min-height: 96px; padding: 8px 10px; resize: vertical; line-height: 20px; }
.kn-select {
padding-right: 28px; appearance: none; -webkit-appearance: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%235e6678' stroke-width='1.5'/%3E%3C/svg%3E");
background-repeat: no-repeat; background-position: right 10px center;
}
.kn-input:focus, .kn-select:focus, .kn-textarea:focus { box-shadow: 0 0 0 1px var(--kn-accent), 0 0 0 4px var(--kn-accent-ring); }
.kn-input[aria-invalid="true"], .kn-select[aria-invalid="true"], .kn-textarea[aria-invalid="true"] { box-shadow: 0 0 0 1px var(--kn-danger), 0 0 0 4px var(--kn-danger-ring); }
.kn-input::placeholder, .kn-textarea::placeholder { color: var(--kn-text-3); }
.kn-check { display: inline-flex; align-items: center; gap: 8px; color: var(--kn-text-2); cursor: pointer; user-select: none; }
.kn-check input { accent-color: var(--kn-accent); width: 15px; height: 15px; margin: 0; }
/* ---------- Unterstrich-Reiter ---------- */
.kn-reiter { display: flex; gap: 24px; border-bottom: 1px solid var(--kn-line); margin-bottom: 16px; overflow-x: auto; scrollbar-width: none; }
.kn-reiter::-webkit-scrollbar { display: none; }
.kn-reiter-t {
padding: 8px 0 10px; margin-bottom: -1px; color: var(--kn-text-2); font-weight: 500; white-space: nowrap;
border-bottom: 2px solid transparent; font-variant-numeric: tabular-nums; cursor: pointer;
}
.kn-reiter-t:hover { color: var(--kn-text); }
.kn .kn-reiter-t[role="tab"]:focus-visible { outline-offset: -2px; } /* 0-4-0: .kn [tabindex]:focus-visible in module.css (0-3-0, später geladen) setzt sonst +2px */
.kn-reiter-t.aktiv, .kn-reiter-t[aria-selected="true"] { color: var(--kn-accent); border-bottom-color: var(--kn-accent); font-weight: 600; }
/* ---------- Status-Pillen ---------- */
.kn-pille {
display: inline-flex; align-items: center; height: 20px; padding: 0 6px; border-radius: 4px;
font-size: 12px; font-weight: 500; white-space: nowrap; font-variant-numeric: tabular-nums;
background: var(--kn-grau-bg); color: var(--kn-grau-fg);
}
.kn-pille-grau { background: var(--kn-grau-bg); color: var(--kn-grau-fg); }
.kn-pille-blau { background: var(--kn-blau-bg); color: var(--kn-blau-fg); }
.kn-pille-orange { background: var(--kn-orange-bg); color: var(--kn-orange-fg); }
.kn-pille-violett { background: var(--kn-violett-bg); color: var(--kn-violett-fg); }
.kn-pille-gruen { background: var(--kn-gruen-bg); color: var(--kn-gruen-fg); }
.kn-pille-rot { background: var(--kn-rot-bg); color: var(--kn-rot-fg); }
.kn-pille-schlicht { background: none; color: var(--kn-text-2); padding: 0; }
/* ---------- Listen: Haarlinien statt Karten ---------- */
.kn-liste { list-style: none; margin: 0; padding: 0; }
.kn-zeile { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 12px 0; border-bottom: 1px solid var(--kn-line); }
.kn-zeile:first-child { border-top: 1px solid var(--kn-line); }
.kn-zeile-titel { font-weight: 500; min-width: 0; overflow-wrap: anywhere; }
.kn-zeile-sub { font-size: 13px; color: var(--kn-text-2); }
.kn-zeile-link { color: inherit; text-decoration: none; cursor: pointer; }
.kn-zeile-link:hover .kn-zeile-titel { color: var(--kn-accent); }
/* ---------- Dialog und Sheet (schließen nur per × und Esc) ---------- */
.kn-ueberlagerung {
position: fixed; inset: 0; z-index: 50; display: flex; align-items: flex-start; justify-content: center;
padding: 10vh 16px 16px; background: var(--kn-overlay); animation: kn-einblenden .12s ease-out;
}
.kn-dialog, .kn-sheet {
display: flex; flex-direction: column; width: 100%; max-width: 520px; max-height: 84vh;
background: var(--kn-bg); border-radius: var(--kn-radius-lg); box-shadow: var(--kn-shadow-pop);
animation: kn-aufpoppen .14s ease-out;
}
.kn-dialog:focus, .kn-sheet:focus { outline: none; }
.kn-dialog-kopf { display: flex; align-items: center; justify-content: space-between; padding: 20px 24px 4px; }
.kn-dialog-kopf h3 { font-size: 18px; line-height: 26px; font-weight: 600; }
.kn-dialog-zu { width: 28px; height: 28px; border-radius: var(--kn-radius); color: var(--kn-text-2); font-size: 20px; line-height: 1; }
.kn-dialog-zu:hover { background: var(--kn-bg-hover); color: var(--kn-text); }
.kn-dialog-inhalt { display: flex; flex-direction: column; gap: 16px; padding: 16px 24px 8px; overflow-y: auto; }
.kn-dialog-fuss { display: flex; align-items: center; gap: 8px; padding: 16px 24px 20px; }
@keyframes kn-einblenden { from { opacity: 0; } }
@keyframes kn-aufpoppen { from { opacity: 0; transform: translateY(4px) scale(.985); } }
/* ---------- Leerzustände und Meldungen (ohne Kasten, Text) ---------- */
.kn-leer { padding: 56px 0; text-align: center; color: var(--kn-text-2); }
.kn-leer strong { display: block; margin-bottom: 4px; color: var(--kn-text); font-weight: 600; }
.kn-meldung { font-size: 13px; }
.kn-meldung-ok { color: var(--kn-gruen-fg); }
.kn-meldung-warn { color: var(--kn-orange-fg); }
.kn-fehler { font-size: 13px; color: var(--kn-rot-fg); }
/* ---------- Reduzierte Bewegung: höchstens kurzes Überblenden ---------- */
@media (prefers-reduced-motion: reduce) {
.kn-ueberlagerung { animation-duration: .12s; }
.kn-dialog, .kn-sheet { animation: kn-einblenden .12s ease-out; }
.kn-knopf, .kn-knopf-primaer, .kn-knopf-zweit, .kn-textknopf, .kn-input, .kn-select, .kn-textarea { transition: none; }
}
/* ---------- Handy: Tap-Ziele 44 px, Textfelder 16 px, Dialoge unten verankert ---------- */
@media (max-width: 880px), (pointer: coarse) and (max-height: 500px) {
.kn-titel { font-size: 24px; line-height: 30px; }
.kn-knopf, .kn-knopf-primaer, .kn-knopf-zweit, .kn-textknopf { height: auto; min-height: 44px; padding-left: 16px; padding-right: 16px; }
.kn-textknopf { padding-left: 12px; padding-right: 12px; }
.kn-link-danger { display: inline-flex; align-items: center; min-height: 44px; }
.kn-input, .kn-select, .kn-textarea { height: auto; min-height: 44px; font-size: 16px; }
.kn-textarea { min-height: 96px; }
.kn-check { min-height: 44px; }
.kn-check input { width: 20px; height: 20px; }
.kn-reiter-t { display: inline-flex; align-items: center; min-height: 44px; padding-top: 0; padding-bottom: 0; }
.kn-zeile-link { min-height: 44px; }
.kn-dialog-zu { width: 44px; height: 44px; }
.kn-ueberlagerung { align-items: flex-end; padding: 16px; }
.kn-dialog, .kn-sheet { max-height: 92vh; padding-bottom: env(safe-area-inset-bottom, 0px); }
}