/* ============================================================ BASE.CSS — Classless Foundation Semantic HTML-Elemente erhalten hier ihr Basis-Styling. Keine Klassen nötig für sauberes Markup. ============================================================ */ /* ---------------------------------------------------------- BOX MODEL & RESET ---------------------------------------------------------- */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } /* ---------------------------------------------------------- ROOT & BODY ---------------------------------------------------------- */ html { font-size: 16px; -webkit-text-size-adjust: 100%; scroll-behavior: smooth; color-scheme: light dark; } body { font-family: var(--font-sans); font-size: var(--text-base); font-weight: var(--weight-normal); line-height: var(--leading-normal); color: var(--text); background-color: var(--bg); min-height: 100dvh; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; transition: background-color var(--transition), color var(--transition); } /* ---------------------------------------------------------- TYPOGRAPHY — Headings ---------------------------------------------------------- */ h1, h2, h3, h4, h5, h6 { font-weight: var(--weight-semibold); line-height: var(--leading-tight); letter-spacing: var(--tracking-tight); color: var(--text); } h1 { font-size: var(--text-4xl); } h2 { font-size: var(--text-3xl); } h3 { font-size: var(--text-2xl); } h4 { font-size: var(--text-xl); } h5 { font-size: var(--text-lg); } h6 { font-size: var(--text-base); font-weight: var(--weight-medium); } /* ---------------------------------------------------------- TYPOGRAPHY — Body Text ---------------------------------------------------------- */ p { line-height: var(--leading-relaxed); color: var(--text); } p+p { margin-top: var(--space-4); } /* Inline Elements */ a { color: var(--accent); text-decoration: underline; text-decoration-color: transparent; text-underline-offset: 3px; transition: color var(--transition), text-decoration-color var(--transition); } a:hover { color: var(--accent-hover); text-decoration-color: currentColor; } a:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: var(--radius-sm); } strong, b { font-weight: var(--weight-semibold); } em, i { font-style: italic; } small { font-size: var(--text-sm); color: var(--text-muted); } mark { background-color: var(--accent-muted); color: var(--text); padding: 0 var(--space-1); border-radius: var(--radius-sm); } abbr[title] { text-decoration: underline dotted; cursor: help; } /* ---------------------------------------------------------- TYPOGRAPHY — Lists ---------------------------------------------------------- */ ul, ol { padding-left: var(--space-6); display: flex; flex-direction: column; gap: var(--space-1); } ul { list-style-type: disc; } ol { list-style-type: decimal; } ul ul, ol ol, ul ol, ol ul { margin-top: var(--space-1); } li { line-height: var(--leading-relaxed); } /* Definition Lists */ dl { display: grid; gap: var(--space-2); } dt { font-weight: var(--weight-medium); color: var(--text); } dd { color: var(--text-muted); padding-left: var(--space-4); } /* ---------------------------------------------------------- CODE & PRE ---------------------------------------------------------- */ code { font-family: var(--font-mono); font-size: 0.875em; background: var(--bg-muted); color: var(--accent); padding: 0.1em 0.35em; border-radius: var(--radius-sm); border: 1px solid var(--border); } pre { font-family: var(--font-mono); font-size: var(--text-sm); background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: var(--space-5) var(--space-6); overflow-x: auto; line-height: var(--leading-relaxed); } pre code { background: none; border: none; padding: 0; color: inherit; font-size: inherit; } kbd { font-family: var(--font-mono); font-size: var(--text-xs); background: var(--surface-raised); border: 1px solid var(--border-strong); border-bottom-width: 2px; border-radius: var(--radius-sm); padding: 0.1em 0.4em; color: var(--text-muted); } /* ---------------------------------------------------------- BLOCKQUOTE & HR ---------------------------------------------------------- */ blockquote { border-left: 3px solid var(--accent); padding: var(--space-3) var(--space-5); background: var(--accent-subtle); border-radius: 0 var(--radius-md) var(--radius-md) 0; color: var(--text-muted); font-style: italic; } blockquote cite { display: block; margin-top: var(--space-2); font-size: var(--text-sm); font-style: normal; font-weight: var(--weight-medium); color: var(--text-muted); } hr { border: none; border-top: 1px solid var(--border); margin: var(--space-8) 0; } /* ---------------------------------------------------------- FORMS — Classless Base Alle Standard-Inputs erhalten ein konsistentes Styling ohne dass Klassen benötigt werden. ---------------------------------------------------------- */ label { display: block; font-size: var(--text-sm); font-weight: var(--weight-medium); color: var(--text); margin-bottom: var(--space-2); cursor: pointer; } input, textarea, select { display: block; width: 100%; font-family: inherit; font-size: var(--text-sm); font-weight: var(--weight-normal); line-height: var(--leading-normal); color: var(--text); background: var(--surface); border: 1px solid var(--border-strong); border-radius: var(--radius-md); padding: var(--space-2) var(--space-3); transition: border-color var(--transition), box-shadow var(--transition), background-color var(--transition); outline: none; -webkit-appearance: none; appearance: none; } input::placeholder, textarea::placeholder { color: var(--text-subtle); } input:hover, textarea:hover, select:hover { border-color: var(--border-focus); } input:focus, textarea:focus, select:focus { border-color: var(--border-focus); box-shadow: var(--shadow-focus); } input:disabled, textarea:disabled, select:disabled { opacity: 0.5; cursor: not-allowed; background: var(--bg-muted); } /* Native Darstellung zurückholen: die input-Regel oben setzt appearance: none, ohne eigenen :checked-Stil wäre der Haken sonst unsichtbar. accent-color färbt ihn. */ input[type="checkbox"], input[type="radio"] { display: inline-block; flex: none; width: 1rem; height: 1rem; margin: 0; padding: 0; cursor: pointer; -webkit-appearance: auto; appearance: auto; accent-color: var(--accent); } input[type="range"] { padding: 0; border: none; box-shadow: none; accent-color: var(--accent); } input[type="color"] { padding: var(--space-1); height: 2.25rem; cursor: pointer; } input[type="file"] { padding: var(--space-2); cursor: pointer; background: var(--bg-subtle); } input[type="file"]::file-selector-button { margin-right: var(--space-3); padding: var(--space-2) var(--space-3); border: 0; border-radius: var(--radius-sm); background: var(--surface-raised); color: var(--text); font: inherit; font-weight: var(--weight-medium); box-shadow: inset 0 0 0 1px var(--border-strong); cursor: pointer; } input[type="file"]:hover::file-selector-button, input[type="file"]:focus::file-selector-button { background: var(--accent-subtle); color: var(--accent); } select { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236c757d' d='M6 8L1 3h10z'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right var(--space-3) center; padding-right: var(--space-8); } textarea { resize: vertical; min-height: 6rem; } fieldset { border: 1px solid var(--border); border-radius: var(--radius-lg); padding: var(--space-5) var(--space-6); } legend { font-size: var(--text-sm); font-weight: var(--weight-semibold); padding: 0 var(--space-2); color: var(--text-muted); } /* ---------------------------------------------------------- TABLES — Classless Base ---------------------------------------------------------- */ table { width: 100%; border-collapse: collapse; font-size: var(--text-sm); } thead { border-bottom: 2px solid var(--border); } th { text-align: left; font-weight: var(--weight-semibold); font-size: var(--text-xs); letter-spacing: var(--tracking-wider); text-transform: uppercase; color: var(--text-muted); padding: var(--space-3) var(--space-4); background: var(--bg-subtle); } td { padding: var(--space-3) var(--space-4); color: var(--text); border-bottom: 1px solid var(--border); } tbody tr:last-child td { border-bottom: none; } tbody tr:hover td { background: var(--bg-subtle); } tfoot td { font-weight: var(--weight-medium); color: var(--text-muted); border-top: 1px solid var(--border); padding: var(--space-3) var(--space-4); } /* ---------------------------------------------------------- MEDIA ---------------------------------------------------------- */ img, video, canvas, svg { display: block; max-width: 100%; } img { height: auto; } figure { display: flex; flex-direction: column; gap: var(--space-3); } figcaption { font-size: var(--text-sm); color: var(--text-muted); text-align: center; } /* ---------------------------------------------------------- DETAILS / SUMMARY ---------------------------------------------------------- */ details { border: 1px solid var(--border); border-radius: var(--radius-lg); padding: var(--space-4) var(--space-5); } summary { font-weight: var(--weight-medium); cursor: pointer; list-style: none; display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); } summary::-webkit-details-marker { display: none; } summary::after { content: "›"; font-size: var(--text-lg); color: var(--text-muted); transform: rotate(90deg); transition: transform var(--transition); } details[open] summary::after { transform: rotate(270deg); } details[open] summary { margin-bottom: var(--space-4); } /* ---------------------------------------------------------- SCROLLBAR (Custom, subtil) ---------------------------------------------------------- */ ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: var(--radius-full); } ::-webkit-scrollbar-thumb:hover { background: var(--text-subtle); } /* ---------------------------------------------------------- SELECTION ---------------------------------------------------------- */ ::selection { background: var(--accent-muted); color: var(--text); } /* ---------------------------------------------------------- FOCUS VISIBLE (Global) ---------------------------------------------------------- */ :focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: var(--radius-sm); }