/* ==========================================================================
   COPPERPOT — Cover art & kitchen motion
   Shared by the library app and the sales pages. Everything here is either
   a line drawing or a small, slow animation; nothing loads over the network.
   ========================================================================== */

.art { display: block; width: 100%; height: 100%; overflow: visible; }

/* ---------- steam ---------- */
@keyframes cp-wisp {
  0%   { opacity: 0;   transform: translateY(5px)  scaleY(.62); }
  18%  { opacity: .95; }
  62%  { opacity: .45; }
  100% { opacity: 0;   transform: translateY(-11px) scaleY(1.2); }
}
.art__wisp {
  opacity: 0;
  transform-box: fill-box;
  transform-origin: 50% 100%;
  animation: cp-wisp 3.6s ease-in-out infinite;
  animation-delay: var(--d, 0s);
}

/* a slow bob, for the drawing as a whole */
@keyframes cp-bob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-4px); } }

/* ==========================================================================
   The art layer inside a cover
   Line drawing by default. Add a data-photo and it becomes a photograph with
   the drawing dropped — the type sits on a scrim either way.
   ========================================================================== */
.artlayer {
  position: absolute;
  inset: 0;
  pointer-events: none;
  overflow: hidden;
}
.artlayer::before {
  content: '';
  position: absolute; inset: 0;
  background: radial-gradient(58% 46% at 72% 26%, var(--copper-wash), transparent 70%);
}
.artlayer > * {
  position: absolute;
  right: -6%;
  top: 8%;
  width: 62%;
  aspect-ratio: 1;
  color: var(--copper);
  opacity: .22;
  animation: cp-bob 7s ease-in-out infinite;
}

/* ---------- photograph ---------- */
.shot {
  position: absolute; inset: 0;
  overflow: hidden;
  pointer-events: none;
  background: var(--pot-1);
}
.shot img {
  width: 100%; height: 100%;
  object-fit: cover;
  display: block;
  filter: saturate(.88) contrast(1.04) brightness(.92);
  transition: transform .5s cubic-bezier(.2,.7,.3,1), filter var(--t);
}
/* the type has to stay readable, so the picture is walked down into the dark */
.shot::after {
  content: '';
  position: absolute; inset: 0;
  background:
    linear-gradient(180deg, rgba(12,10,9,.62) 0%, rgba(12,10,9,.08) 30%, rgba(12,10,9,.68) 62%, rgba(12,10,9,.95) 100%),
    linear-gradient(76deg, rgba(12,10,9,.5), transparent 62%);
}
/* the kicker sits on the brightest part of most plates */
.volcard b, .cover__k, .vol__num { text-shadow: 0 1px 8px rgba(12,10,9,.85); }
.volcard h3, .cover__t, .cover__s, .vol__title, .vol__sub { text-shadow: 0 1px 10px rgba(12,10,9,.7); }
.volcard:hover .shot img,
.vol:hover .shot img { transform: scale(1.045); filter: saturate(.95) contrast(1.05) brightness(1); }

/* ==========================================================================
   Sales hero cover — the big 3:4 book object
   ========================================================================== */
.cover .shot::after {
  background:
    linear-gradient(180deg, rgba(12,10,9,.24) 0%, rgba(12,10,9,0) 30%, rgba(12,10,9,.66) 58%, rgba(12,10,9,.95) 100%),
    linear-gradient(74deg, rgba(12,10,9,.6), transparent 60%);
}
.cover .shot img { filter: saturate(.9) contrast(1.05) brightness(.94); }

.cover__art { position: absolute; inset: 0; pointer-events: none; }
.cover__art::before {
  content: '';
  position: absolute; inset: 0;
  background:
    radial-gradient(64% 44% at 74% 22%, rgba(224,144,77,.20), transparent 72%),
    radial-gradient(90% 60% at 20% 100%, rgba(224,144,77,.07), transparent 70%);
}
.cover__art > span {
  position: absolute; right: -8%; top: 6%;
  width: 66%; aspect-ratio: 1;
  color: var(--copper);
  opacity: .26;
  animation: cp-bob 8s ease-in-out infinite;
}
.cover__badge {
  position: absolute; right: -.08em; bottom: -.3em;
  font-size: 10rem; font-weight: 600; line-height: .72;
  letter-spacing: -.06em; color: rgba(246,242,236,.05);
  pointer-events: none; user-select: none;
}

/* ==========================================================================
   Library app — art behind the volume card
   ========================================================================== */
.vol__art { position: absolute; inset: 0; pointer-events: none; }
.vol__art::before {
  content: '';
  position: absolute; inset: 0;
  background: radial-gradient(60% 44% at 76% 24%, rgba(224,144,77,.16), transparent 72%);
}
.vol__art > span {
  position: absolute; right: -9%; top: 5%;
  width: 62%; aspect-ratio: 1;
  color: var(--copper);
  opacity: .24;
}
.vol:hover .vol__art > span { opacity: .34; }
.vol--locked .vol__art > span { color: var(--fg-3); opacity: .1; }
.vol--locked .vol__art::before { background: none; }

/* a shelf you have not bought reads as greyed-out stock */
.vol--locked .shot img { filter: saturate(.12) brightness(.5) contrast(1.05); }
.vol--locked .shot::after { background: linear-gradient(180deg, rgba(12,10,9,.5), rgba(12,10,9,.86) 55%, rgba(12,10,9,.97)); }

/* the detail sheet, with the plate behind the title */
.sheet__hero--shot { padding-top: 12rem; }
.sheet__hero--shot .shot::after {
  background:
    linear-gradient(180deg, rgba(20,17,16,.25) 0%, rgba(20,17,16,.55) 40%, rgba(20,17,16,.94) 82%, var(--pot-1) 100%),
    linear-gradient(90deg, rgba(20,17,16,.8), transparent 70%);
}
.sheet__hero--shot::before { display: none; }

/* the collection glyph next to a shelf title */
.row__art {
  flex: none; align-self: flex-start;
  width: 38px; height: 38px; margin-top: .1rem;
  color: var(--copper); opacity: .85;
}
.row--locked .row__art { color: var(--fg-3); opacity: .5; }

@media (prefers-reduced-motion: reduce) {
  .art__wisp { animation: none; opacity: .5; }
  .artlayer > *, .cover__art > span { animation: none; }
}
