:root {
  --bg: #fbf8f4;
  --fg: #2b2622;
  --muted: #7a716a;
  --accent: #a8843c;
  --line: #e6ded5;
  --serif: "Cormorant Garamond", Georgia, serif;
  --sans: "Jost", system-ui, sans-serif;
}

* { box-sizing: border-box; }
/* Reserve scrollbar space so short and long pages have the same content width. */
html { scrollbar-gutter: stable; }
body { margin: 0; background: var(--bg); color: var(--fg); font: 300 17px/1.6 var(--sans); }
img { display: block; max-width: 100%; }
a { color: inherit; }
h1, h2, h3 { font-family: var(--serif); font-weight: 400; line-height: 1.15; }
h1 { font-size: clamp(2rem, 5vw, 3.2rem); margin: 0 0 .5rem; }
h2 { font-size: clamp(1.6rem, 3.5vw, 2.3rem); text-align: center; margin: 0 0 2rem; }

.site-header { display: flex; flex-wrap: wrap; gap: 1rem 2rem; align-items: center; justify-content: space-between; padding: 1.2rem clamp(16px, 4vw, 48px); border-bottom: 1px solid var(--line); }
.logo { font-family: var(--serif); font-size: 1.7rem; text-decoration: none; }
nav { display: flex; flex-wrap: wrap; gap: .4rem 1.4rem; }
nav a { text-decoration: none; font-size: .85rem; letter-spacing: .12em; text-transform: uppercase; }
nav a:hover { color: var(--accent); }

.hero { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: center; gap: clamp(2rem, 5vw, 4rem); max-width: 1200px; margin: 0 auto; padding: clamp(2rem, 6vw, 4rem) clamp(16px, 4vw, 48px); }
.hero img { width: 100%; max-height: 80vh; object-fit: contain; }
.hero-text p { color: var(--muted); }
@media (max-width: 760px) { .hero { grid-template-columns: 1fr; } }

.section { padding: clamp(3rem, 7vw, 5rem) clamp(16px, 4vw, 48px); max-width: 1280px; margin: 0 auto; }
.section.narrow { max-width: 720px; text-align: center; }
.section > h1 { text-align: center; }
.lead { text-align: center; color: var(--muted); margin: 0 0 2.5rem; }

.button { display: inline-block; margin-top: 1rem; padding: .9rem 2.4rem; background: var(--fg); color: var(--bg); text-decoration: none; font-size: .8rem; letter-spacing: .16em; text-transform: uppercase; border: 1px solid var(--fg); }
.button:hover { background: var(--accent); border-color: var(--accent); }
.button.secondary { background: transparent; color: var(--fg); }

.collections { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 1.5rem; }
.collection { position: relative; display: block; aspect-ratio: 4 / 5; overflow: hidden; text-decoration: none; }
.collection img { width: 100%; height: 100%; object-fit: cover; transition: transform .6s; }
.collection:hover img { transform: scale(1.04); }
.collection span { position: absolute; left: 0; right: 0; bottom: 1.5rem; text-align: center; font-family: var(--serif); font-size: 2rem; }

.grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 280px)); justify-content: center; gap: 2.5rem 1.5rem; }
.card { text-decoration: none; text-align: center; }
.card-img { aspect-ratio: 4 / 5; overflow: hidden; background: var(--line); }
.card-img img { width: 100%; height: 100%; object-fit: cover; transition: transform .6s; }
.card:hover .card-img img { transform: scale(1.04); }
.card h3 { font-size: 1.35rem; margin: 1rem 0 .2rem; }
.price { margin: 0; color: var(--muted); letter-spacing: .05em; }
.available { color: var(--accent); text-transform: uppercase; font-size: .8rem; letter-spacing: .15em; }

.product { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); gap: clamp(2rem, 5vw, 4rem); max-width: 1200px; margin: 0 auto; padding: clamp(2rem, 6vw, 4rem) clamp(16px, 4vw, 48px); }
.product-img img { width: 100%; }
.product-info .price { font-size: 1.2rem; margin-bottom: 1.5rem; }
dl { display: grid; grid-template-columns: auto 1fr; gap: .3rem 1.2rem; margin: 1.5rem 0; }
dt { color: var(--muted); font-size: .8rem; letter-spacing: .12em; text-transform: uppercase; padding-top: .2rem; }
dd { margin: 0; }
.note { color: var(--muted); font-size: .9rem; }
@media (max-width: 760px) { .product { grid-template-columns: 1fr; } }

.site-footer { border-top: 1px solid var(--line); padding: 2rem 16px; text-align: center; color: var(--muted); font-size: .9rem; }
.site-footer p { margin: .2rem 0; }

/* Koi pond: a layer behind the content covering the whole document, so the fish scroll
   with the page. Fish are small images moved by static/pond.js with transform-only Web
   Animations, so swimming runs on the compositor without repaints. */
html { position: relative; }
.pond { position: absolute; inset: 0; z-index: -1; pointer-events: none; overflow: hidden; }
.koi { position: absolute; left: 0; top: 0; width: clamp(110px, 11vw, 170px); aspect-ratio: 186 / 92;
  transform-origin: 0 0; opacity: .65; will-change: transform; }
.koi img { position: absolute; inset: 0; width: 100%; height: 100%; }
.koi-tail { transform-origin: var(--tail-origin); animation: wag 1.6s ease-in-out infinite alternate; }
.koi:nth-child(3n+2) .koi-tail { animation-duration: 1.9s; }
.koi:nth-child(3n+3) .koi-tail { animation-duration: 1.4s; }
.koi:nth-child(5n+4) .koi-tail { animation-duration: 2.1s; }
@keyframes wag { from { transform: rotate(-20deg); } to { transform: rotate(20deg); } }
@media (prefers-reduced-motion: reduce) { .koi-tail { animation: none; } }

/* Cross-document view transitions: page navigations animate like an SPA.
   Artwork images carry view-transition-name: art-<slug> (set in build.mjs),
   so a card thumbnail morphs into the product image and back. A name must be
   unique per page, which is why hero and collection covers have none. */
@view-transition { navigation: auto; }
.site-header { view-transition-name: site-header; }
/* Keep the UA cross-fade for root: its plus-lighter blending keeps the page
   opaque throughout, whereas custom staggered fades let the background flash. */
::view-transition-group(*) { animation-duration: 320ms; animation-timing-function: cubic-bezier(.2, .8, .2, 1); }
@media (prefers-reduced-motion: reduce) {
  @view-transition { navigation: none; }
}
