*,
::after,
::before {
    box-sizing: border-box;
}

:where(html) {
    -webkit-text-size-adjust: none;
    color-scheme: dark light;
    tab-size: 2;
}

:where(body) {
    -webkit-font-smoothing: antialiased;
	text-rendering: optimizeSpeed;
    min-height: 100vh;
}

/* === Formulare === */
:where(button) {
	all: unset;
}

:where(input, button, textarea, select) {
	font: inherit;
	color: inherit;
}

:where(textarea) {
	resize: vertical;
	resize: block;
}

:where(button, label, select, summary, [role='button'], [role='option']) {
	cursor: pointer;
}

:where(:disabled) {
	cursor: not-allowed;
}

:where(label:has(> input:disabled), label:has(+ input:disabled)) {
	cursor: not-allowed;
}

/* ========== */
:where(a) {
    color: currentColor;
	text-underline-offset: 0.2ex;
}

/* 
    barrierefreies Entfernen der Marker, auch für Voice Over
    https://matuzo.at/blog/2023/removing-list-styles-without-affecting-semantics
*/
:where(ul, ol)[class], :where(ul, ol)[role="list"] {
    list-style-type: "";
    padding-left: 0;
}

/* ==== Medien ==== */

:where(img, svg, video, canvas, audio, iframe, embed, object) {
	display: block;
}

:where(img, picture, svg, video) {
	max-width: 100%;
	height: auto;
}

/* SVG's without a fill attribute */
:where(svg):where(:not([fill])) {
	/* Remove fill and set stroke colour to the inherited font colour */
	stroke: currentColor;
	fill: none;
	/* Rounded stroke */
	stroke-linecap: round;
	stroke-linejoin: round;
}

/* Set a size for SVG's without a width attribute */
:where(svg):where(:not([width])) {
	inline-size: 5rem;
}


/* ==== Headlines ======= */

:where(h1, h2, h3, h4, h5, h6) {
    text-wrap: balance;
    overflow-wrap: break-word; /* auch für p??? */
}

/* ================ */

:where(hr) {
	border: none;
	border-block-start: 1px solid;
	color: inherit;
	block-size: 0;
	overflow: visible;
}

/* ================ */

:where(:focus-visible) {
	outline: 3px solid CanvasText;
	box-shadow: 0 0 0 5px Canvas;
	outline-offset: 1px;
}

:where(:focus-visible, :target) {
	scroll-margin-block: 8vh;
}

/* ===== .visually-hidden ===== */
:where(.visually-hidden:not(:focus-within, :active)) {
	clip-path: inset(50%) !important;
	height: 1px !important;
	width: 1px !important;
	overflow: hidden !important;
	position: absolute !important;
	white-space: nowrap !important;
	border: 0 !important;
}

/* ============ prefers-reduced-motion ======================= */

@media (prefers-reduced-motion: no-preference) {
	:where(html:focus-within) {
		scroll-behavior: smooth;
	}
}

/*
Remove decorative motion for users who don’t want them. [...] The one thing of note here is that these don’t set transitions and animations to none, rather they shorten the durations a super short interval. This way, they’re impossible to perceive, but they still run; browser events like transitionend will fire as normal and any code depending on those events won’t break.

https://keithjgrant.com/posts/2024/01/my-css-resets/

*/
@media (prefers-reduced-motion: reduce) {
	*,
	*::before,
	*::after {
	  animation-duration: 0.01ms !important;
	  animation-iteration-count: 1 !important;
	  transition-duration: 0.01ms !important;
	  scroll-behavior: auto !important;
	}
}

/* ======================================================= */

html {
    font-size: 16px;
}

body {
    font-size: 1rem;
    font-family: system-ui, sans-serif;
    -webkit-font-smoothing: antialiased;
    line-height: 1.5;
}