Files
Schmacko-napf/assets/site.css
T
NotPika69andClaude Opus 5.5 e368a0b2cc Website fertig: lokale Bilder und Schrift, Über mich, Datenschutz, 404, SEO
- Logo, Fotos und Questrial liegen lokal (WebP, zwei Größen) – keine Drittanbieter mehr
- Neue Seiten: Über mich (Aus- und Weiterbildungen), Datenschutz, 404
- Impressum nach DDG mit Aufsichtsbehörde (§ 11 TierSchG)
- Favicon, Apple-Icon, Vorschaubild, Canonical/Open Graph, robots.txt, sitemap.xml, .htaccess
- tools/optimize_images.py erzeugt die Web-Bilder aus tools/originals/

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 10:53:55 +02:00

581 lines
21 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.
/* ===== Schrift (lokal, Questrial – SIL Open Font License) ===== */
@font-face {
font-family: "Questrial";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("fonts/questrial-latin.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Questrial";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("fonts/questrial-latin-ext.woff2") format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* ===== Farben – aus dem Schmacko-Napf-Branding ===== */
:root {
--bg: #fcfaf4; /* Creme */
--surface: #f2eee0; /* dunkleres Creme für Flächen */
--ink: #194242; /* Petrol-Grün (Logo) */
--ink-2: #0f2e2e;
--muted: #4a6866;
--sage: #d0e6a5; /* Salbeigrün */
--sage-soft: #e6f0d0;
--line: rgba(25, 66, 66, .14);
--on-image: #ffffff;
--radius: 22px;
--gap: 14px;
--pad: clamp(16px, 2.2vw, 28px);
--ease: cubic-bezier(.22, .61, .36, 1);
}
*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; scroll-padding-top: 96px; }
html, body { margin: 0; }
body {
background: var(--bg);
color: var(--ink);
font-family: "Questrial", "Century Gothic", system-ui, sans-serif;
font-size: 19px;
line-height: 1.55;
-webkit-font-smoothing: antialiased;
overflow-x: hidden;
}
a { color: inherit; text-decoration: none; }
img { display: block; max-width: 100%; }
h1, h2, h3 { font-weight: 400; line-height: 1.05; letter-spacing: -.025em; margin: 0; }
p { margin: 0; }
svg { flex: none; }
/* Tastatur: direkt zum Inhalt */
.skip {
position: fixed; left: 16px; top: 16px; z-index: 100;
padding: 12px 20px; border-radius: 999px;
background: var(--ink); color: var(--bg);
transform: translateY(-200%);
}
.skip:focus { transform: none; }
/* ===== Header: Logo und Menü als zwei schwebende Elemente ===== */
.site-header {
position: sticky; top: 0; z-index: 50;
pointer-events: none; /* Fläche zwischen Logo und Menü bleibt klickbar */
}
.header-inner {
display: flex; align-items: center; gap: 24px;
height: 88px;
padding: 0 var(--pad);
}
.brand, .nav, .burger {
pointer-events: auto;
background: color-mix(in srgb, var(--bg) 90%, transparent);
backdrop-filter: blur(14px);
-webkit-backdrop-filter: blur(14px);
box-shadow: 0 10px 30px rgba(25, 66, 66, .12);
}
.brand {
width: 72px; height: 72px;
border-radius: 50%;
display: grid; place-items: center;
}
.brand img { width: 68px; height: 68px; transition: transform .5s var(--ease); }
.brand:hover img { transform: rotate(-6deg); }
.nav {
display: flex; gap: 4px;
margin-left: auto;
padding: 8px;
border-radius: var(--radius);
}
.nav a {
padding: 12px 20px;
border-radius: 14px;
font-size: 1.05rem;
transition: background .25s var(--ease);
}
.nav a:hover, .nav a[aria-current="page"] { background: var(--sage-soft); }
.burger {
display: none;
width: 60px; height: 60px;
margin-left: auto;
border: 0;
border-radius: 50%;
color: var(--ink);
cursor: pointer;
place-items: center;
}
.burger svg { width: 22px; height: 22px; }
/* Startseite: Header erst nach dem Hero einblenden */
.is-home .site-header {
position: fixed; left: 0; right: 0;
transform: translateY(-120%);
transition: transform .45s var(--ease);
}
.is-home.scrolled .site-header, .is-home.menu-open .site-header { transform: none; }
/* ===== Buttons ===== */
.btn {
display: inline-flex; align-items: center; justify-content: center; gap: 12px;
height: 60px; padding: 0 28px;
border-radius: 999px;
font-size: 1.12rem;
border: 1px solid transparent;
transition: background .3s var(--ease), color .3s var(--ease), border-color .3s var(--ease);
white-space: nowrap;
}
.btn svg { width: 22px; height: 22px; }
.btn--sage { background: var(--sage); color: var(--ink); }
.btn--sage:hover { background: #c2dc8f; }
.btn--ink { background: var(--ink); color: var(--bg); }
.btn--ink:hover { background: var(--ink-2); }
.btn--line { border-color: rgba(255, 255, 255, .3); color: var(--bg); }
.btn--line:hover { border-color: var(--bg); }
.btn-row { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 36px; }
/* ===== Hero / Kacheln ===== */
.hero {
height: 100svh;
min-height: 600px;
display: flex;
padding: var(--pad);
}
.tiles {
flex: 1;
position: relative;
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: 1fr 1fr;
gap: var(--gap);
}
.tile {
position: relative;
overflow: hidden;
border-radius: var(--radius);
background: var(--surface);
isolation: isolate;
opacity: 0;
transform: translateY(14px);
animation: rise .8s var(--ease) forwards;
transition: opacity .4s var(--ease), filter .4s var(--ease);
}
.tile:nth-of-type(2) { animation-delay: .08s; }
.tile:nth-of-type(3) { animation-delay: .16s; }
.tile:nth-of-type(4) { animation-delay: .24s; }
@keyframes rise { to { opacity: 1; transform: none; } }
.tile img {
position: absolute; inset: 0;
width: 100%; height: 100%;
object-fit: cover;
z-index: -2;
transition: transform 1s var(--ease);
}
.tile::after {
content: "";
position: absolute; inset: 0;
z-index: -1;
background: linear-gradient(to top, rgba(10, 18, 14, .62) 0%, rgba(10, 18, 14, .12) 45%, rgba(10, 18, 14, 0) 70%);
}
.tile-foot {
position: absolute;
left: clamp(18px, 2.4vw, 32px);
right: clamp(18px, 2.4vw, 32px);
bottom: clamp(18px, 2.4vw, 30px);
display: flex;
align-items: flex-end;
gap: 16px;
color: var(--on-image);
}
/* rechte Spalte: Beschriftung an die Außenkante */
.tile:nth-of-type(even) .tile-foot { flex-direction: row-reverse; text-align: right; }
.tile-label {
font-size: clamp(1.7rem, 2.8vw, 2.7rem);
line-height: 1.1;
letter-spacing: -.01em;
}
.tile-label small {
display: block;
margin-top: 6px;
font-size: .48em;
letter-spacing: .02em;
opacity: .85;
}
.tile-arrow {
flex: none;
width: 54px; height: 54px;
border-radius: 50%;
background: rgba(255, 255, 255, .18);
border: 1px solid rgba(255, 255, 255, .45);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
color: var(--on-image);
display: grid; place-items: center;
transition: background .4s var(--ease), color .4s var(--ease), border-color .4s var(--ease);
}
.tile-arrow svg { width: 20px; height: 20px; transition: transform .5s var(--ease); }
@media (hover: hover) {
.tiles:has(.tile:hover) .tile:not(:hover) { filter: saturate(.75) brightness(.92); }
.tile:hover img { transform: scale(1.05); }
.tile:hover .tile-arrow { background: var(--sage); border-color: var(--sage); color: var(--ink); }
.tile:hover .tile-arrow svg { transform: rotate(-45deg); }
}
.tile:focus-visible, .btn:focus-visible, .nav a:focus-visible { outline: 3px solid var(--sage); outline-offset: 3px; }
/* Logo-Siegel in der Mitte */
.seal {
position: absolute;
left: 50%; top: 50%;
z-index: 5;
width: clamp(220px, 21vw, 300px);
aspect-ratio: 1;
margin: 0;
border-radius: 50%;
background: var(--bg);
display: grid; place-items: center;
transform: translate(-50%, -50%) scale(.9);
opacity: 0;
animation: seal .9s .35s var(--ease) forwards;
}
.seal img { width: 94%; height: 94%; object-fit: contain; }
@keyframes seal { to { opacity: 1; transform: translate(-50%, -50%) scale(1); } }
/* Ring um das Siegel mit runden Übergängen in die Kachel-Lücken (Form kommt aus site.js) */
.seal-joint {
position: absolute;
left: 50%; top: 50%;
z-index: 4;
transform: translate(-50%, -50%);
fill: var(--bg);
pointer-events: none;
opacity: 0;
animation: fade .9s .35s var(--ease) forwards;
}
@keyframes fade { to { opacity: 1; } }
.scroll-hint {
position: absolute;
left: 50%; bottom: calc(var(--pad) + 14px);
transform: translateX(-50%);
z-index: 6;
width: 44px; height: 44px;
border-radius: 50%;
background: var(--bg);
display: grid; place-items: center;
box-shadow: 0 8px 24px rgba(25, 66, 66, .18);
animation: bob 2.4s var(--ease) infinite;
}
.scroll-hint svg { width: 18px; height: 18px; }
@keyframes bob { 50% { transform: translate(-50%, 6px); } }
/* ===== Mosaik aus Flächen (gleicher Stil wie die Kacheln) ===== */
.mosaic {
display: grid;
gap: var(--gap);
padding: 0 var(--pad) var(--pad);
}
.row { display: grid; gap: var(--gap); grid-template-columns: 1fr 1fr; }
.row--3 { grid-template-columns: repeat(3, 1fr); }
.row--wide { grid-template-columns: 1.25fr 1fr; }
.row--wide-r { grid-template-columns: 1fr 1.25fr; }
.panel {
position: relative;
overflow: hidden;
isolation: isolate;
border-radius: var(--radius);
padding: clamp(28px, 4.2vw, 72px);
min-height: min(82svh, 820px);
display: flex; flex-direction: column; justify-content: flex-end;
background: var(--surface);
}
.panel--auto { min-height: 0; }
.panel--mid { min-height: min(62svh, 620px); }
.panel--center { justify-content: center; }
.panel--ink { background: var(--ink); color: var(--bg); }
.panel--sage { background: var(--sage); }
.panel--cream { background: var(--surface); }
.panel--plain { background: transparent; }
/* Foto-Fläche */
.panel--photo { color: var(--on-image); background: var(--ink); }
.panel--photo > img {
position: absolute; inset: 0;
width: 100%; height: 100%;
object-fit: cover;
z-index: -2;
transition: transform 1.2s var(--ease);
}
.panel--photo::after {
content: ""; position: absolute; inset: 0; z-index: -1;
background: linear-gradient(to top, rgba(10, 22, 20, .72) 0%, rgba(10, 22, 20, .25) 40%, rgba(10, 22, 20, 0) 65%);
}
.panel--photo.plain::after { display: none; }
a.panel--photo:hover > img { transform: scale(1.04); }
/* Typografie in Flächen */
.kicker {
display: block;
font-size: 1rem;
letter-spacing: .2em;
text-transform: uppercase;
margin-bottom: 22px;
opacity: .75;
}
.panel--ink .kicker, .panel--photo .kicker { color: var(--sage); opacity: 1; }
.display { font-size: clamp(2.8rem, 6.2vw, 6.4rem); }
.title { font-size: clamp(2.2rem, 4.2vw, 4rem); }
.big {
font-size: clamp(1.25rem, 1.8vw, 1.65rem);
line-height: 1.45;
max-width: 32ch;
margin-top: 24px;
}
.panel--cream .big, .panel--sage .big { color: var(--muted); }
.panel--sage .big { color: var(--ink); opacity: .85; }
.panel--ink .big { color: color-mix(in srgb, var(--bg) 80%, transparent); }
.panel--photo .big { color: rgba(255, 255, 255, .9); }
/* Pfeil oben rechts in verlinkten Flächen */
.panel-arrow {
position: absolute;
top: clamp(20px, 2.6vw, 36px); right: clamp(20px, 2.6vw, 36px);
width: 64px; height: 64px;
border-radius: 50%;
display: grid; place-items: center;
background: rgba(255, 255, 255, .18);
border: 1px solid rgba(255, 255, 255, .45);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
color: var(--on-image);
transition: background .4s var(--ease), color .4s var(--ease), border-color .4s var(--ease);
}
.panel-arrow svg { width: 24px; height: 24px; transition: transform .5s var(--ease); }
a.panel:hover .panel-arrow { background: var(--sage); border-color: var(--sage); color: var(--ink); }
a.panel:hover .panel-arrow svg { transform: rotate(-45deg); }
.panel-arrow--ink { background: var(--ink); border-color: var(--ink); }
/* Kurze Fakten als Pillen */
.facts { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 30px; }
.fact {
padding: 12px 22px;
border-radius: 999px;
font-size: 1.12rem;
background: rgba(255, 255, 255, .16);
border: 1px solid rgba(255, 255, 255, .35);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
}
.panel--cream .fact, .panel--sage .fact { background: var(--bg); border-color: transparent; }
.panel--ink .fact { background: rgba(208, 230, 165, .12); border-color: transparent; }
/* Großes Zitat */
.statement {
font-size: clamp(2rem, 4.6vw, 4.6rem);
line-height: 1.12;
letter-spacing: -.025em;
max-width: 22ch;
margin: 0 auto;
text-align: center;
}
.statement-by { display: block; text-align: center; margin-top: 28px; font-size: 1.15rem; opacity: .7; }
/* 5 Säulen als große Wörter */
.words { list-style: none; padding: 0; margin: 10px 0 0; }
.words li {
display: flex; align-items: baseline; gap: clamp(16px, 2vw, 32px);
padding: clamp(10px, 1.4vw, 18px) 0;
border-bottom: 1px solid rgba(255, 255, 255, .12);
font-size: clamp(2.4rem, 6vw, 6rem);
line-height: 1;
letter-spacing: -.03em;
transition: color .3s var(--ease), padding .4s var(--ease);
}
.words li:hover { color: var(--sage); padding-left: 12px; }
.words small { font-size: 1rem; letter-spacing: .1em; color: var(--sage); width: 2.2em; flex: none; }
.words span { font-size: clamp(1.05rem, 1.4vw, 1.3rem); letter-spacing: 0; color: color-mix(in srgb, var(--bg) 70%, transparent); margin-left: auto; text-align: right; max-width: 26ch; line-height: 1.35; }
/* Qualifikationen (auf dunkler Fläche) */
.quals { list-style: none; padding: 0; margin: 10px 0 0; }
.quals li {
display: grid; grid-template-columns: 9em 1fr auto; align-items: baseline; gap: 12px 32px;
padding: clamp(18px, 2vw, 28px) 0;
border-bottom: 1px solid rgba(255, 255, 255, .12);
}
.quals small { font-size: 1rem; letter-spacing: .06em; color: var(--sage); }
.quals strong { font-weight: 400; font-size: clamp(1.6rem, 3.2vw, 3rem); line-height: 1.05; letter-spacing: -.02em; }
.quals span { color: color-mix(in srgb, var(--bg) 70%, transparent); font-size: clamp(1.05rem, 1.4vw, 1.25rem); text-align: right; }
/* Liste mit Jahreszahl (auf heller Fläche) */
.list-big { list-style: none; padding: 0; margin: 10px 0 0; columns: 2; column-gap: clamp(32px, 5vw, 80px); }
.list-big li {
break-inside: avoid;
display: flex; gap: 20px; align-items: baseline;
padding: 18px 0;
border-bottom: 1px solid var(--line);
font-size: clamp(1.15rem, 1.6vw, 1.4rem);
line-height: 1.35;
}
.list-big small { flex: none; width: 3em; font-size: 1rem; color: var(--muted); }
/* Schritte */
.steps { list-style: none; padding: 0; margin: 40px 0 0; display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--gap); }
.steps li { border-top: 1px solid rgba(255, 255, 255, .2); padding-top: 22px; }
.steps b { display: block; font-weight: 400; font-size: clamp(2.6rem, 4vw, 3.6rem); color: var(--sage); line-height: 1; }
.steps strong { display: block; font-weight: 400; font-size: clamp(1.4rem, 2vw, 1.8rem); margin-top: 18px; }
.steps span { display: block; margin-top: 10px; font-size: 1.12rem; color: color-mix(in srgb, var(--bg) 75%, transparent); }
/* Preise */
.price-big { margin-top: 30px; }
.price-big strong { display: block; font-weight: 400; font-size: clamp(3rem, 5vw, 4.8rem); line-height: 1; letter-spacing: -.03em; }
.price-big span { display: block; margin-top: 10px; font-size: 1.15rem; opacity: .75; }
.price-rows { margin-top: 36px; }
.price-rows div {
display: flex; justify-content: space-between; align-items: baseline; gap: 20px;
padding: 22px 0;
border-bottom: 1px solid var(--line);
font-size: clamp(1.3rem, 2vw, 1.8rem);
}
.price-rows div:first-child { border-top: 1px solid var(--line); }
.price-rows small { display: block; font-size: 1.05rem; color: var(--muted); margin-top: 6px; letter-spacing: 0; }
.price-rows strong { font-weight: 400; white-space: nowrap; font-size: clamp(1.6rem, 2.6vw, 2.4rem); }
/* Icon in Flächen */
.panel-icon {
width: 76px; height: 76px;
border-radius: 50%;
background: var(--bg);
display: grid; place-items: center;
margin-bottom: auto;
}
.panel-icon svg { width: 34px; height: 34px; }
.panel--ink .panel-icon { background: rgba(208, 230, 165, .14); color: var(--sage); }
/* BARF-Teller */
.plate-panel { align-items: center; justify-content: center; }
.plate-panel img { width: min(82%, 560px); filter: drop-shadow(0 34px 46px rgba(25, 66, 66, .25)); }
/* Kontakt */
.contact-links { display: grid; gap: 12px; margin-top: 40px; max-width: 520px; }
.contact-links a {
display: flex; align-items: center; gap: 18px;
padding: 20px 24px;
border-radius: 18px;
background: rgba(255, 255, 255, .07);
font-size: clamp(1.15rem, 1.6vw, 1.4rem);
transition: background .3s var(--ease);
}
.contact-links a:hover { background: rgba(208, 230, 165, .18); }
.contact-links svg { width: 28px; height: 28px; color: var(--sage); }
.contact-links a > span:last-child { margin-left: auto; opacity: .5; }
.contact-links a > span:last-child svg { width: 22px; height: 22px; color: currentColor; }
/* Footer */
.site-footer {
border-radius: var(--radius);
background: var(--ink-2);
color: color-mix(in srgb, var(--bg) 75%, transparent);
padding: clamp(28px, 3.4vw, 48px);
display: flex; align-items: center; justify-content: space-between; gap: 28px; flex-wrap: wrap;
font-size: 1.05rem;
}
.footer-brand { display: flex; align-items: center; gap: 22px; }
.footer-logo { width: 96px; height: 96px; border-radius: 50%; background: var(--bg); display: grid; place-items: center; flex: none; }
.footer-logo img { width: 92%; }
.footer-links { display: flex; flex-wrap: wrap; gap: 8px 26px; }
.footer-links a:hover { color: var(--bg); }
.footer-meta { width: 100%; display: flex; justify-content: space-between; flex-wrap: wrap; gap: 10px; padding-top: 22px; border-top: 1px solid rgba(255, 255, 255, .1); font-size: .95rem; opacity: .75; }
/* Unterseiten-Hero */
.page-hero { min-height: calc(100svh - 88px - var(--pad)); }
.page-hero h1 { font-size: clamp(3.2rem, 8vw, 8rem); letter-spacing: -.035em; line-height: .98; }
/* Text-Seite (Impressum) */
.legal { font-size: clamp(1.1rem, 1.4vw, 1.3rem); line-height: 1.6; max-width: 46em; margin-top: 48px; }
.legal h2 { font-size: clamp(1.5rem, 2.2vw, 2rem); margin: 52px 0 16px; letter-spacing: -.015em; }
.legal a { text-decoration: underline; text-underline-offset: 3px; }
.legal p + p { margin-top: 28px; }
.legal b { font-weight: 400; display: block; font-size: 1rem; letter-spacing: .16em; text-transform: uppercase; opacity: .7; margin-bottom: 6px; }
/* ===== Scroll-Animationen ===== */
.reveal { opacity: 0; transform: translateY(28px); transition: opacity 1s var(--ease), transform 1s var(--ease); }
.reveal.in { opacity: 1; transform: none; }
.d1 { transition-delay: .1s; }
.d2 { transition-delay: .2s; }
.tile:focus-visible, .btn:focus-visible, .nav a:focus-visible, a.panel:focus-visible { outline: 3px solid var(--sage); outline-offset: 3px; }
/* ===== Responsive ===== */
@media (max-width: 1100px) {
.steps { grid-template-columns: repeat(2, 1fr); row-gap: 34px; }
.nav a { padding: 10px 12px; font-size: 1rem; }
}
@media (max-width: 980px) {
.nav { display: none; }
.burger { display: grid; }
.menu-open .nav {
display: flex; flex-direction: column; gap: 4px;
position: fixed; top: 88px; left: var(--pad); right: var(--pad);
padding: 10px;
background: var(--bg);
}
.menu-open .nav a { padding: 16px 18px; font-size: 1.35rem; }
.row, .row--3, .row--wide, .row--wide-r { grid-template-columns: 1fr; }
.panel { min-height: 0; }
.panel--photo { min-height: 64svh; }
.panel--photo.tall { min-height: 80svh; }
.plate-panel { min-height: 0; padding-block: 56px; }
.words span { display: none; }
.quals li { grid-template-columns: 1fr; gap: 6px; }
.quals span { text-align: left; }
.list-big { columns: 1; }
}
@media (max-width: 767px) {
body { font-size: 18px; }
.header-inner { height: 76px; }
.brand { width: 62px; height: 62px; }
.brand img { width: 58px; height: 58px; }
.burger { width: 54px; height: 54px; }
.menu-open .nav { top: 76px; }
.hero { height: auto; min-height: 0; display: block; padding: 0 16px 16px; }
.tiles { grid-template-columns: 1fr; grid-template-rows: none; gap: 12px; }
.tile { height: 44svh; min-height: 260px; }
.tile:nth-of-type(even) .tile-foot { flex-direction: row; text-align: left; }
.tile-arrow { width: 50px; height: 50px; }
.seal {
position: static;
width: 210px;
margin: 4px auto -6px;
transform: scale(.9);
}
@keyframes seal { to { opacity: 1; transform: none; } }
.seal-joint { display: none; }
.scroll-hint { display: none; }
.mosaic { gap: 12px; padding: 0 16px 16px; }
.row { gap: 12px; }
.panel { padding: 30px 24px; }
.panel-arrow { width: 54px; height: 54px; }
.steps { grid-template-columns: 1fr; }
.contact-links a { padding: 18px 18px; }
.page-hero { min-height: calc(100svh - 76px - 16px); }
.footer-brand { flex-direction: column; align-items: flex-start; }
}
@media (prefers-reduced-motion: reduce) {
html { scroll-behavior: auto; }
.tile, .seal, .seal-joint { animation: none; opacity: 1; }
.tile { transform: none; }
.seal { transform: translate(-50%, -50%); }
.scroll-hint { animation: none; }
.reveal { opacity: 1; transform: none; transition: none; }
}
@media (prefers-reduced-motion: reduce) and (max-width: 767px) {
.seal { transform: none; }
}