bifroest/app/static/css-framework/base.css
2026-10-27 08:34:17 +01:00

545 lines
No EOL
11 KiB
CSS
Raw 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.

/* ============================================================
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);
}