/* ============================================================
   A. LILY PHOTOGRAPHY — core stylesheet
   Brand: glitch / Y2K / alt. Magenta, acid yellow, plum black.
   Edit colours in :root below and the whole site follows.
   ============================================================ */

:root{
  /* every value below is sampled off the business card */
  --ink:      #0d0007;   /* near black */
  --ink-2:    #1a0010;
  --plum:     #280018;   /* the card's deep plum */
  --plum-2:   #45002c;
  --plum-3:   #650040;

  --fuchsia:  #f800f8;   /* the brightest pink on the card */
  --mag:      #e008b0;
  --pink:     #f80080;   /* the dominant hot pink */
  --coral:    #f80050;   /* the red-pink in the moth */
  --pink-lt:  #f860f8;
  --mag-deep: #b1006f;
  --mag-hot:  #ff7ae0;

  --yel:      #f8f878;   /* the card's acid yellow */
  --yel-hot:  #ffe94a;

  --white:    #ffffff;
  --muted:    #efbde6;
  --muted-dim:#c383b6;

  --f-display: "Anton", "Arial Narrow", Impact, sans-serif;
  --f-body:    "Archivo", system-ui, -apple-system, sans-serif;
  --f-mono:    "Space Mono", ui-monospace, "Courier New", monospace;

  --pad: clamp(1.15rem, 4vw, 3.25rem);
  --maxw: 1320px;
  --rule: 1px solid color-mix(in srgb, var(--pink) 55%, transparent);
}

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

html{ scroll-behavior:smooth; }
@media (prefers-reduced-motion: reduce){ html{ scroll-behavior:auto; } }

body{
  margin:0;
  background:
    radial-gradient(85% 55% at 10% -4%,  rgba(248,0,248,.34), transparent 62%),
    radial-gradient(75% 50% at 94% 18%,  rgba(248,0,128,.34), transparent 60%),
    radial-gradient(60% 45% at 52% 46%,  rgba(248,248,120,.09), transparent 62%),
    radial-gradient(80% 55% at 34% 104%, rgba(224,8,176,.28), transparent 66%),
    var(--ink);
  background-attachment:fixed;
  color:var(--white);
  font-family:var(--f-body);
  font-size:clamp(15px,0.55vw + 13.6px,17px);
  line-height:1.65;
  overflow-x:hidden;
  -webkit-font-smoothing:antialiased;
}

/* ---- page texture: halftone + scanlines ---- */
/* Texture, scanlines and halftone all live on ONE fixed layer at z-index 0,
   underneath every photo, so nothing is ever laid over the work itself. */
body::before{
  content:""; position:fixed; inset:0; z-index:0; pointer-events:none;
  background-image:
    repeating-linear-gradient(to bottom, rgba(0,0,0,.30) 0 1px, transparent 1px 3px),
    radial-gradient(circle at center, rgba(248,0,168,.30) 1.1px, transparent 1.6px),
    url("../img/tex-grime.jpg");
  background-size:100% 3px, 10px 10px, 620px 620px;
  background-repeat:repeat, repeat, repeat;
  mix-blend-mode:screen;
  opacity:.85;
}

main,header,footer{ position:relative; z-index:1; }

img{ max-width:100%; display:block; }
a{ color:var(--yel); text-decoration:none; }
a:hover{ color:var(--mag-hot); }
:focus-visible{ outline:3px solid var(--yel); outline-offset:3px; }

.wrap{ width:100%; max-width:var(--maxw); margin-inline:auto; padding-inline:var(--pad); }
.sr-only{ position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; border:0; }

/* ============ TYPE ============ */
h1,h2,h3,.display{
  font-family:var(--f-display); font-weight:400; text-transform:uppercase;
  line-height:.88; letter-spacing:.01em; margin:0;
}
h1{ font-size:clamp(3.1rem,12vw,9.5rem); }
h2{ font-size:clamp(2.1rem,6.4vw,4.6rem); }
h3{ font-size:clamp(1.25rem,2.4vw,1.9rem); }
p{ margin:0 0 1.1em; }
p.lede{ font-size:clamp(1.05rem,1.5vw,1.32rem); color:#f3e2ef; max-width:62ch; }

.kicker{
  font-family:var(--f-mono); font-size:.72rem; letter-spacing:.34em;
  text-transform:uppercase; color:var(--mag-hot); margin:0 0 1.1rem;
  display:flex; align-items:center; gap:.8rem;
}
.kicker::after{ content:""; flex:1; height:2px; background:linear-gradient(90deg,var(--fuchsia),var(--coral) 40%,transparent); }

/* chromatic-aberration headline, matches the business card */
.chroma{
  color:var(--white);
  text-shadow:
    -.035em -.026em 0 var(--fuchsia),
     .035em  .026em 0 var(--yel),
     0 0 .4em rgba(248,0,168,.6);
}
.chroma-sm{ text-shadow:-.03em -.022em 0 var(--fuchsia), .03em .022em 0 var(--yel); }

.hilite{ background:var(--fuchsia); color:var(--white); padding:0 .18em; box-decoration-break:clone; -webkit-box-decoration-break:clone; }
.yell{ color:var(--yel); }
.mag{ color:var(--mag-hot); }

/* glitch hover for links + titles */
.glitch{ position:relative; display:inline-block; }
.glitch::before,.glitch::after{
  content:attr(data-text); position:absolute; inset:0; pointer-events:none;
  clip-path:inset(0 0 0 0); opacity:0; transition:opacity .12s;
}
.glitch::before{ color:var(--mag); }
.glitch::after{ color:var(--yel); }
.glitch:hover::before{ opacity:1; animation:gl-a .5s steps(2) infinite; }
.glitch:hover::after{ opacity:1; animation:gl-b .5s steps(2) infinite; }
@keyframes gl-a{ 0%{transform:translate(-4px,-2px)} 50%{transform:translate(3px,1px)} 100%{transform:translate(-2px,2px)} }
@keyframes gl-b{ 0%{transform:translate(4px,2px)} 50%{transform:translate(-3px,-1px)} 100%{transform:translate(2px,-2px)} }

/* ============ BUTTONS ============ */
.btn{
  display:inline-flex; align-items:center; gap:.6rem;
  font-family:var(--f-mono); font-size:.78rem; letter-spacing:.2em; text-transform:uppercase;
  padding:.95rem 1.6rem; border:2px solid var(--fuchsia); color:var(--white);
  background:transparent; cursor:pointer; transition:.18s; position:relative;
}
.btn:hover{ background:var(--fuchsia); color:var(--white); transform:translate(-2px,-2px); box-shadow:6px 6px 0 var(--yel); }
.btn--solid{ background:var(--pink); border-color:var(--white); box-shadow:5px 5px 0 var(--fuchsia); }
.btn--solid:hover{ background:var(--yel); color:var(--ink); border-color:var(--yel); box-shadow:6px 6px 0 var(--coral); }
.btn--ghost{ border-color:color-mix(in srgb,var(--white) 40%, transparent); }
.btn--ghost:hover{ border-color:var(--yel); background:transparent; color:var(--yel); box-shadow:5px 5px 0 var(--mag); }

/* ============ NAV ============ */
.nav{
  position:sticky; top:0; z-index:60;
  background:linear-gradient(180deg, rgba(40,0,24,.88), rgba(13,0,7,.86));
  backdrop-filter:blur(9px);
  border-bottom:var(--rule);
}
.nav__in{ display:flex; align-items:center; gap:1rem; justify-content:space-between; padding-block:.72rem; }
.brand{ display:flex; align-items:center; gap:.65rem; color:var(--white); }
.brand img{ width:38px; height:38px; object-fit:contain; filter:drop-shadow(0 0 8px rgba(255,15,155,.85)); }
.brand__txt{ font-family:var(--f-display); font-size:1.3rem; letter-spacing:.03em; line-height:1; text-transform:uppercase; }
.brand__txt span{ display:block; font-family:var(--f-mono); font-size:.52rem; letter-spacing:.28em; color:var(--mag-hot); margin-top:.22rem; }

.nav__links{ display:flex; align-items:center; gap:.35rem; list-style:none; margin:0; padding:0; }
.nav__links a{
  font-family:var(--f-mono); font-size:.74rem; letter-spacing:.2em; text-transform:uppercase;
  color:var(--muted); padding:.55rem .8rem; display:block; border:1px solid transparent;
}
.nav__links a:hover{ color:var(--white); border-color:var(--mag); }
.nav__links a[aria-current="page"]{ color:var(--ink); background:var(--yel); border-color:var(--yel); box-shadow:3px 3px 0 var(--fuchsia); }

.burger{ display:none; background:none; border:2px solid var(--mag); color:var(--white); padding:.5rem .7rem; font-family:var(--f-mono); font-size:.72rem; letter-spacing:.16em; cursor:pointer; }

@media (max-width:860px){
  .burger{ display:block; }
  .nav__links{
    position:absolute; left:0; right:0; top:100%; flex-direction:column; align-items:stretch; gap:0;
    background:var(--ink-2); border-bottom:var(--rule); padding:.4rem var(--pad) 1rem;
  }
  .nav__links[hidden]{ display:none; }
  .nav__links a{ padding:.9rem .2rem; border-bottom:1px solid rgba(255,15,155,.22); }
}

/* ============ MARQUEE ============ */
.marquee{
  border-block:var(--rule); background:var(--plum); overflow:hidden; padding:.55rem 0;
}
.marquee__track{ display:flex; gap:2.5rem; width:max-content; animation:slide 26s linear infinite; }
.marquee span{ font-family:var(--f-mono); font-size:.76rem; letter-spacing:.28em; text-transform:uppercase; color:var(--yel); white-space:nowrap; }
.marquee span::after{ content:" ✦"; color:var(--mag-hot); }
@keyframes slide{ to{ transform:translateX(-50%); } }
@media (prefers-reduced-motion: reduce){ .marquee__track{ animation:none; } }

/* ============ HERO ============ */
.hero{ position:relative; overflow:hidden; border-bottom:var(--rule);
  background:
    radial-gradient(120% 90% at 78% 42%, rgba(224,8,176,.45), transparent 60%),
    radial-gradient(90% 70% at 8% 8%, rgba(101,0,64,.75), transparent 70%),
    var(--ink);
}
.hero__moth{
  position:absolute; right:-6%; top:50%; translate:0 -50%;
  width:min(80vw,930px); opacity:1; pointer-events:none;
  filter:saturate(1.35) contrast(1.08) drop-shadow(0 0 70px rgba(248,0,168,.75));
}

/* scrim keeps headline + body copy readable wherever the moth lands */
.hero::after{
  content:""; position:absolute; inset:0; z-index:1; pointer-events:none;
  background:linear-gradient(100deg, rgba(13,0,7,.86) 6%, rgba(13,0,7,.55) 32%, rgba(13,0,7,.06) 62%, transparent 84%);
}

/* the magenta field from the business card, ragged edges and all.
   tex-splatter.png is lifted straight off the card and used as a mask. */
.hero__wash{
  position:absolute; z-index:2; pointer-events:none;
  left:-5%; top:-8%; width:min(78%,1090px); height:116%;
  background:linear-gradient(146deg, var(--fuchsia) 0%, var(--mag) 26%, var(--pink) 58%, var(--coral) 82%, var(--mag-deep) 100%);
  -webkit-mask-image:url("../img/mask-field.png"); mask-image:url("../img/mask-field.png");
  -webkit-mask-size:cover; mask-size:cover;
  -webkit-mask-position:left center; mask-position:left center;
  -webkit-mask-repeat:no-repeat; mask-repeat:no-repeat;
  opacity:1;
}
.hero__wash::after{
  content:""; position:absolute; inset:0;
  background-image:
    radial-gradient(circle at center, rgba(13,0,7,.30) 1.5px, transparent 2.1px),
    url("../img/tex-grime.jpg");
  background-size:11px 11px, 540px 540px;
  mix-blend-mode:multiply; opacity:.24;
}
.hero__in{ position:relative; z-index:4; padding-block:clamp(4rem,13vh,8.5rem) clamp(3.5rem,10vh,7rem); }
.hero h1{ margin:0 0 .4rem; text-shadow:none; line-height:1; }
.hero h1 .blk{
  display:block; width:fit-content; margin-bottom:.16em;
  line-height:1.18; padding:.01em .13em .04em;
  background:var(--fuchsia); color:var(--white);
  box-shadow:.07em .055em 0 var(--pink);
  text-shadow:-.028em -.02em 0 rgba(255,255,255,.92), .036em .028em 0 var(--yel);
}
.hero h1 .l2{ text-shadow:-.03em -.022em 0 var(--coral), .038em .03em 0 var(--yel), 0 0 .3em rgba(13,0,7,.6); }
.hero h1 .l2{ display:block; font-size:.44em; letter-spacing:.02em; margin-top:0; line-height:1.14; }
.hero__sub{
  font-family:var(--f-mono); font-size:clamp(.72rem,1.5vw,.95rem); letter-spacing:.22em;
  text-transform:uppercase; color:var(--white); margin:1.4rem 0 0;
}
.hero__sub b{
  border:2px solid var(--white); padding:.3em .6em; font-weight:400; display:inline-block;
  margin:.18rem .2rem .18rem 0; background:rgba(11,1,16,.18);
  text-shadow:0 2px 6px rgba(0,0,0,.5);
}
.hero .lede{ text-shadow:0 2px 10px rgba(11,1,16,.75); }
.hero__meta{ font-family:var(--f-mono); font-size:.72rem; letter-spacing:.2em; text-transform:uppercase; color:#f6cbe8; margin-top:1.6rem; }
.hero__cta{ display:flex; flex-wrap:wrap; gap:.8rem; margin-top:2.2rem; }

@media (max-width:760px){
  /* tighter padding buys the moth room inside the first screen */
  .hero__in{ padding-block:2.4rem 2rem; }
  .hero__moth{
    right:-18%; left:auto; top:auto; bottom:-2%; translate:0 0;
    opacity:.95; width:104vw; z-index:3;
    filter:saturate(1.4) contrast(1.12) drop-shadow(0 0 26px rgba(13,0,7,.9));
  }
  /* the moth sits in front of the field now, so the copy gets its own scrim */
  .hero__in::before{
    content:""; position:absolute; inset:-1.2rem -.6rem; z-index:-1;
    background:linear-gradient(180deg, rgba(13,0,7,.06) 0%, rgba(13,0,7,.40) 42%, rgba(13,0,7,.62) 100%);
  }
  .hero::after{ background:linear-gradient(180deg, rgba(13,0,7,.55), rgba(13,0,7,.32) 52%, rgba(13,0,7,.80)); }
  .hero__wash{
    left:-16%; width:132%; top:-8%; height:72%;
  }
  .hero h1 .blk{ margin-bottom:.34em; opacity:.92;
    -webkit-mask-position:center top; mask-position:center top;
  }
}

/* ============ SECTIONS ============ */
.sec{ padding-block:clamp(3.5rem,9vw,7rem); border-bottom:var(--rule); }
.sec--tight{ padding-block:clamp(2.5rem,6vw,4.5rem); }
.sec__head{ display:flex; flex-wrap:wrap; align-items:flex-end; justify-content:space-between; gap:1rem; margin-bottom:2.4rem; }

/* ============ WORK GRIDS ============ */
.grid{ display:grid; gap:clamp(.7rem,1.4vw,1.15rem); grid-template-columns:repeat(6,1fr); }
/* Abbie shoots mostly portrait, so the grid is portrait-first and only the
   last row is sized for landscape frames. */
.grid .card:nth-child(1){ grid-column:span 3; }
.grid .card:nth-child(2){ grid-column:span 3; }
.grid .card:nth-child(3){ grid-column:span 2; }
.grid .card:nth-child(4){ grid-column:span 2; }
.grid .card:nth-child(5){ grid-column:span 2; }
.grid .card:nth-child(6){ grid-column:span 3; }
.grid .card:nth-child(7){ grid-column:span 3; }
@media (max-width:820px){
  .grid{ grid-template-columns:repeat(2,1fr); }
  .grid .card,.grid .card:nth-child(n){ grid-column:span 1; }
  .grid .card:first-child{ grid-column:span 2; }
}

.card{ position:relative; display:block; overflow:hidden; background:var(--plum-2); border:1px solid rgba(255,15,155,.35); cursor:zoom-in; }
.card img{ width:100%; height:100%; object-fit:cover; aspect-ratio:4/5; transition:transform .5s cubic-bezier(.2,.7,.3,1), filter .3s; }
.grid .card:nth-child(6) img,.grid .card:nth-child(7) img{ aspect-ratio:3/2; }
.card:hover img{ transform:scale(1.05); filter:saturate(1.35) contrast(1.08); }
.card::after{
  content:""; position:absolute; inset:0; opacity:0; transition:opacity .3s;
  background:linear-gradient(180deg, rgba(248,0,248,.16), rgba(13,0,7,.68));
  mix-blend-mode:screen;
}
.card:hover::after{ opacity:1; }
.card__tag{ box-shadow:3px 3px 0 var(--fuchsia);
  position:absolute; left:.7rem; bottom:.7rem; z-index:2;
  font-family:var(--f-mono); font-size:.62rem; letter-spacing:.2em; text-transform:uppercase;
  background:var(--ink); color:var(--yel); padding:.32rem .6rem; border:1px solid var(--mag);
  opacity:0; transform:translateY(6px); transition:.25s;
}
.card:hover .card__tag,.card:focus-visible .card__tag{ box-shadow:3px 3px 0 var(--fuchsia); opacity:1; transform:none; }

/* masonry for the full portfolio */
.masonry{ columns:3; column-gap:clamp(.7rem,1.4vw,1.15rem); }
.masonry .card{ break-inside:avoid; margin-bottom:clamp(.7rem,1.4vw,1.15rem); }
.masonry .card img{ aspect-ratio:auto; height:auto; }
@media (max-width:980px){ .masonry{ columns:2; } }
@media (max-width:560px){ .masonry{ columns:1; } }

/* filters */
.filters{ display:flex; flex-wrap:wrap; gap:.5rem; margin-bottom:2rem; }
.filters button{
  font-family:var(--f-mono); font-size:.7rem; letter-spacing:.18em; text-transform:uppercase;
  background:transparent; color:var(--muted); border:1px solid rgba(255,15,155,.5);
  padding:.6rem 1rem; cursor:pointer; transition:.16s;
}
.filters button:hover{ color:var(--white); border-color:var(--mag); }
.filters button[aria-pressed="true"]{ background:var(--yel); color:var(--ink); border-color:var(--yel); }

/* ============ CATEGORY STRIP ============ */
.cats{ display:grid; grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); gap:1px; background:rgba(255,15,155,.4); border:1px solid rgba(255,15,155,.4); }
.cat{ background:var(--ink-2); padding:1.6rem 1.3rem; transition:.2s; }
.cat:hover{ background:rgba(101,0,64,.78); }
.cat b{ display:block; font-family:var(--f-display); font-size:1.4rem; text-transform:uppercase; color:var(--white); letter-spacing:.01em; }
.cat span{ font-family:var(--f-mono); font-size:.66rem; letter-spacing:.16em; text-transform:uppercase; color:var(--muted-dim); }
/* step cards carry a sentence, so they get readable body type instead */
.cat--step b{ color:var(--yel); font-size:1.25rem; margin-bottom:.5rem; }
.cat--step span{ font-family:var(--f-body); font-size:.94rem; letter-spacing:0; text-transform:none; line-height:1.6; color:var(--muted); }

/* ============ SPLIT (about) ============ */
.split{ display:grid; grid-template-columns:minmax(260px,.85fr) 1.15fr; gap:clamp(1.5rem,4vw,3.5rem); align-items:center; }
@media (max-width:820px){ .split{ grid-template-columns:1fr; } }
.frame{ position:relative; border:2px solid var(--fuchsia); }
.frame::before{ content:""; position:absolute; inset:10px -10px -10px 10px; border:2px solid var(--yel); z-index:-1; }
.frame img{ width:100%; aspect-ratio:4/5; object-fit:cover; }

.facts{ list-style:none; margin:1.6rem 0 0; padding:0; display:grid; gap:.55rem; }
.facts li{ font-family:var(--f-mono); font-size:.76rem; letter-spacing:.12em; text-transform:uppercase; color:var(--muted); padding-left:1.4rem; position:relative; }
.facts li::before{ content:"▚"; position:absolute; left:0; color:var(--mag-hot); }

/* ============ FORM ============ */
.form{ display:grid; gap:1.15rem; max-width:640px; }
.field label{ display:block; font-family:var(--f-mono); font-size:.7rem; letter-spacing:.22em; text-transform:uppercase; color:var(--yel); margin-bottom:.45rem; }
.field input,.field select,.field textarea{
  width:100%; background:var(--ink-2); border:1px solid rgba(255,15,155,.55); color:var(--white);
  font-family:var(--f-body); font-size:1rem; padding:.85rem .95rem; border-radius:0;
}
.field textarea{ min-height:170px; resize:vertical; }
.field input:focus,.field select:focus,.field textarea:focus{ outline:none; border-color:var(--yel); box-shadow:0 0 0 3px rgba(255,233,74,.22); }
.field ::placeholder{ color:var(--muted-dim); }
.hp{ position:absolute; left:-9999px; }

.contact-list{ list-style:none; margin:0; padding:0; display:grid; gap:1.15rem; }
.contact-list li{ border-left:2px solid var(--mag); padding-left:1rem; }
.contact-list b{ display:block; font-family:var(--f-mono); font-size:.66rem; letter-spacing:.24em; text-transform:uppercase; color:var(--muted-dim); font-weight:400; }
.contact-list a,.contact-list span{ font-family:var(--f-display); font-size:clamp(1.05rem,2.2vw,1.5rem); text-transform:uppercase; letter-spacing:.01em; color:var(--white); word-break:break-word; }
.contact-list a:hover{ color:var(--yel); }

/* ============ FOOTER ============ */
.foot{ background:linear-gradient(180deg, rgba(40,0,24,.85), rgba(13,0,7,.92)); padding-block:clamp(2.5rem,6vw,4rem) 2rem; }
.foot__grid{ display:grid; grid-template-columns:1.4fr 1fr 1fr; gap:2rem; }
@media (max-width:760px){ .foot__grid{ grid-template-columns:1fr; } }
.foot h3{ font-size:1.05rem; color:var(--yel); margin-bottom:.9rem; }
.foot ul{ list-style:none; margin:0; padding:0; display:grid; gap:.5rem; }
.foot a,.foot li{ font-family:var(--f-mono); font-size:.76rem; letter-spacing:.14em; text-transform:uppercase; color:var(--muted); }
.foot a:hover{ color:var(--yel); }
.foot__base{ margin-top:2.6rem; padding-top:1.2rem; border-top:var(--rule); display:flex; flex-wrap:wrap; gap:.6rem; justify-content:space-between; font-family:var(--f-mono); font-size:.66rem; letter-spacing:.16em; text-transform:uppercase; color:var(--muted-dim); }

/* ============ LIGHTBOX ============ */
.lb{ position:fixed; inset:0; z-index:9999; background:rgba(4,0,7,.96); display:grid; place-items:center; padding:clamp(1rem,4vw,3rem); }
.lb[hidden]{ display:none; }
.lb img{ max-width:100%; max-height:84vh; object-fit:contain; border:1px solid var(--mag); box-shadow:0 0 70px rgba(255,15,155,.35); }
.lb__bar{ position:absolute; top:0; left:0; right:0; display:flex; justify-content:space-between; align-items:center; padding:1rem clamp(1rem,4vw,2rem); font-family:var(--f-mono); font-size:.7rem; letter-spacing:.2em; text-transform:uppercase; color:var(--muted); }
.lb button{ background:none; border:1px solid var(--mag); color:var(--white); font-family:var(--f-mono); font-size:.72rem; letter-spacing:.16em; padding:.5rem .85rem; cursor:pointer; }
.lb button:hover{ background:var(--mag); }
.lb__nav{ position:absolute; bottom:clamp(1rem,4vw,2rem); display:flex; gap:.6rem; }

/* reveal on scroll */
.rise{ opacity:0; transform:translateY(22px); transition:opacity .6s ease, transform .6s cubic-bezier(.2,.7,.3,1); }
.rise.in{ opacity:1; transform:none; }
@media (prefers-reduced-motion: reduce){ .rise{ opacity:1; transform:none; transition:none; } }

/* ============ PROJECTS ============ */
.zines{ display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:clamp(1rem,2.2vw,1.9rem); }
.zine{ display:grid; gap:.9rem; }
.zine__cover{ position:relative; border:1px solid rgba(255,15,155,.45); overflow:hidden; background:var(--plum); }
.zine__cover img{ width:100%; aspect-ratio:3/4; object-fit:cover; transition:transform .5s cubic-bezier(.2,.7,.3,1), filter .3s; }
.zine:hover .zine__cover img{ transform:scale(1.04); filter:saturate(1.3); }
.zine__status{
  position:absolute; top:.65rem; right:.65rem; z-index:2;
  font-family:var(--f-mono); font-size:.58rem; letter-spacing:.18em; text-transform:uppercase;
  padding:.28rem .55rem; background:var(--ink); border:1px solid var(--yel); color:var(--yel);
}
.zine__status--wip{ border-color:var(--mag); color:var(--mag-hot); }
.zine h3{ font-size:1.35rem; color:var(--white); }
.zine p{ color:var(--muted); font-size:.92rem; margin:0; }

.tiles{ display:grid; grid-template-columns:repeat(auto-fit,minmax(280px,1fr)); gap:clamp(1rem,2.2vw,1.6rem); }
.tile{ position:relative; overflow:hidden; border:1px solid rgba(255,15,155,.4); background:var(--plum); }
.tile img{ width:100%; aspect-ratio:16/11; object-fit:cover; transition:transform .5s cubic-bezier(.2,.7,.3,1); }
.tile:hover img{ transform:scale(1.04); }
.tile__cap{ padding:1.05rem 1.15rem 1.25rem; }
.tile__cap b{ display:block; font-family:var(--f-display); font-size:1.25rem; text-transform:uppercase; letter-spacing:.01em; }
.tile__cap span{ font-family:var(--f-mono); font-size:.66rem; letter-spacing:.16em; text-transform:uppercase; color:var(--muted-dim); }

/* numbered list, used where the order is real (a sequence of steps) */
.steps{ list-style:none; margin:0; padding:0; display:grid; gap:1.05rem; counter-reset:s; }
.steps li{ counter-increment:s; padding-left:3.1rem; position:relative; color:var(--muted); }
.steps li::before{
  content:counter(s,decimal-leading-zero); position:absolute; left:0; top:-.1rem;
  font-family:var(--f-display); font-size:1.5rem; color:var(--mag-hot); line-height:1;
}
.steps b{ display:block; color:var(--white); font-family:var(--f-body); font-weight:600; margin-bottom:.15rem; }

/* plain credit list, no false ordering */
.credits{ list-style:none; margin:0; padding:0; display:grid; gap:.9rem; }
.credits li{ padding-left:1.5rem; position:relative; color:var(--muted); }
.credits li::before{ content:"▚"; position:absolute; left:0; color:var(--yel); }
.credits b{ color:var(--white); font-weight:600; }

.quote{
  border-left:3px solid var(--mag); padding:.2rem 0 .2rem 1.4rem; margin:0;
  font-size:clamp(1.05rem,1.7vw,1.35rem); color:#f3e2ef; max-width:56ch;
}

/* ---- zine cards: same cover height, captions on a shared baseline ---- */
.zine{ grid-template-rows:auto 1fr; align-content:start; }
.zine__cover{ aspect-ratio:3/4; }
.zine__cover img{ height:100%; aspect-ratio:auto; }
.zine h3{ text-wrap:balance; }

/* the framed poster is a supporting image, not the hero of its section */
.frame--sm{ max-width:380px; }

/* ============ CARD-FAITHFUL TRIMMINGS ============ */

/* torn magenta edge, used to break up long dark stretches */
.sec--torn{ position:relative; }
.sec--torn::before{
  content:""; position:absolute; left:0; right:0; top:-1px; height:70px;
  background:url("../img/tex-splatter.png") repeat-x top center;
  background-size:auto 70px; opacity:.75; pointer-events:none;
}

/* a hot magenta panel, like the block the card's type sits on */
.sec--hot{
  background:linear-gradient(158deg, rgba(248,0,248,.34), rgba(248,0,128,.26) 46%, rgba(224,8,176,.10) 78%, transparent);
}

/* the chibi moth off the business card, as a sticker */
.sticker{
  display:block; width:min(260px,60%); border:3px solid var(--white);
  box-shadow:8px 8px 0 var(--fuchsia), 0 0 40px rgba(248,0,168,.7);
  rotate:-4deg; margin:2.2rem 0 0;
}
.sticker--float{
  position:absolute; right:clamp(-.5rem,1vw,1.5rem); bottom:-2.4rem;
  width:clamp(170px,21vw,265px); rotate:5deg; margin:0; z-index:4;
}
@media (max-width:820px){ .sticker--float{ position:static; width:min(230px,62%); rotate:-4deg; margin:1.8rem 0 0; } }

/* photos get a touch more punch, in keeping with the brand */
.card img,.zine__cover img,.tile img,.frame img{ filter:saturate(1.18) contrast(1.05); }
.card:hover img{ filter:saturate(1.45) contrast(1.1); }

/* section rules pick up the magenta rather than sitting flat */
.sec{ border-bottom:1px solid color-mix(in srgb, var(--pink) 55%, transparent); }
.cats{ background:color-mix(in srgb, var(--pink) 62%, transparent); }
.cat{ background:rgba(26,0,16,.72); }
.cat:hover{ background:rgba(101,0,64,.78); }
.marquee{ background:linear-gradient(90deg, var(--fuchsia), var(--pink) 30%, var(--coral) 52%, var(--mag) 74%, var(--fuchsia)); }
.marquee span{ color:var(--white); }
.marquee span::after{ color:var(--yel); }

/* centred kickers drop the trailing rule, which only reads well left-aligned */
.kicker--c{ justify-content:center; }
.kicker--c::after{ display:none; }
