.hero{padding:72px 24px 40px}
.hero h1{font-size:clamp(48px,11vw,150px)}
.hero p{max-width:none;margin-top:18px;color:var(--muted)}
.label.pad{padding:0 24px 12px}

/* series index: a grid of colored cards, one big cover photo each */
#index{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;padding:0 24px 48px}
.row{display:flex;flex-direction:column;background:var(--c);color:var(--fg,#141414);cursor:pointer;padding:0;transition:transform .2s,box-shadow .2s;outline:none}
.row:hover,.row:focus-visible{transform:translateY(-3px);box-shadow:0 10px 24px #0002}
.row.on{box-shadow:0 0 0 4px var(--ink)}
.row .strip{display:block;aspect-ratio:4/5;padding:8px 8px 0;background:var(--c)}
.row .strip img{width:100%;height:100%;object-fit:cover;display:block}
.row .strip img+img{display:none}
.row > div:first-child{order:2;padding:14px 16px 16px}
.row h2{font-size:clamp(20px,2vw,28px);line-height:1}
.row .meta{margin-top:8px;font-size:12px;letter-spacing:.08em;text-transform:uppercase;opacity:.85}
.solo #index,.solo .label.pad{display:none}

/* open series */
.project{padding:64px 24px 80px;background:var(--ink);color:#fff}
.project .top{display:flex;flex-wrap:wrap;gap:16px 40px;align-items:end;justify-content:space-between;margin-bottom:36px}
.project h2{font-size:clamp(40px,8vw,110px);color:var(--c)}
.project p{max-width:460px;color:#bdb9b1}
/* rows that keep the original order; each piece keeps its own shape (--r = width/height) */
.grid{display:flex;flex-wrap:wrap;gap:12px}
.grid::after{content:"";flex-grow:999}
.grid figure{position:relative;margin:0;flex:calc(var(--r,1)*230px) 1 calc(var(--r,1)*230px);max-width:calc(var(--r,1)*420px)}
@media (max-width:700px){.grid figure{flex-basis:calc(var(--r,1)*130px)}}
.grid img{width:100%;display:block;cursor:zoom-in;outline:3px solid transparent;outline-offset:3px;transition:outline-color .2s}
.grid img:hover{outline-color:var(--c)}
.grid .avail{position:absolute;left:8px;bottom:8px;background:var(--c);color:var(--fg,#141414);font-size:11px;letter-spacing:.1em;text-transform:uppercase;padding:3px 8px}

/* viewer */
.lb{position:fixed;inset:0;z-index:10;background:#0d0d0de8;display:none;align-items:center;justify-content:center;flex-direction:column;gap:14px;padding:24px}
.lb.open{display:flex}
.lb img{max-width:min(92vw,1100px);max-height:76vh;object-fit:contain;box-shadow:0 0 0 6px var(--c)}
.lb .cap{color:#fff;font-size:13px;letter-spacing:.08em;text-transform:uppercase;display:flex;gap:16px;align-items:center;flex-wrap:wrap;justify-content:center}
.lb .buy{background:var(--c);color:var(--fg,#141414);padding:8px 16px;font-weight:500}
.lb button{position:absolute;top:50%;background:none;border:0;color:#fff;font-size:42px;cursor:pointer;padding:12px}
.lb .prev{left:12px}.lb .next{right:12px}.lb .x{top:16px;right:16px;font-size:28px}
@media (max-width:700px){#index{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:0 16px 32px}.row h2{font-size:17px}.row .strip{padding:5px 5px 0}}
button.row{width:100%;border:0;font:inherit;text-align:left}
.project .top p a{text-decoration:underline}
.project .top p{white-space:normal}
.lb .text{max-width:640px;max-height:22vh;overflow:auto;color:#ccc;font-size:14px;line-height:1.55;text-align:left}
.lb .text b{color:#fff;font-weight:500}
.grid img{aspect-ratio:var(--r,1);object-fit:cover;background:#2a2a2a}

/* Story layout for projects with more text: big numbers, short paragraphs beside a photo, a pull quote */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:2px;margin:6px 0 28px;max-width:900px}
.stats div{background:var(--c);color:var(--fg,#141414);padding:16px 16px 14px}
.stats b{display:block;font:800 clamp(28px,3.4vw,44px)/1 Archivo,sans-serif;font-stretch:125%}
.stats span{display:block;margin-top:8px;font-size:12px;letter-spacing:.06em;text-transform:uppercase;opacity:.85}
.story{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:28px;align-items:start;max-width:1100px}
.story p{color:#d8d4cc;margin-bottom:14px;max-width:none}
.story figure{margin:0}.story figure img{width:100%;display:block}
.story figcaption{font-size:12px;color:#9a968e;margin-top:6px}
.pull{font:800 clamp(22px,2.6vw,34px)/1.15 Archivo,sans-serif;font-stretch:110%;color:var(--c);border-left:4px solid var(--c);padding-left:16px;margin:8px 0 22px}
.links{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}
.links a{border:1.5px solid var(--c);color:#fff;padding:6px 12px;font-size:12px;letter-spacing:.06em;text-transform:uppercase;text-decoration:none!important}
.links a:hover{background:var(--c);color:var(--fg,#141414)}
.project .top:has(.stats){display:block}
@media (max-width:760px){.story{grid-template-columns:1fr}}

/* Listing cards for The Artist Experience, styled like an online art store */
.listings{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:20px;margin-top:24px}
.listing{background:#f1efea;color:#141414;display:flex;flex-direction:column}
.listing .ph{position:relative;border:0;padding:16px;background:#e6e3dc;cursor:zoom-in;aspect-ratio:1;display:grid;place-items:center}
.listing .ph img{max-width:100%;max-height:100%;object-fit:contain;box-shadow:0 4px 14px #0003}
.listing .sold{position:absolute;top:12px;left:12px;background:#c0392b;color:#fff;font-size:11px;letter-spacing:.1em;text-transform:uppercase;padding:3px 8px}
.listing .info{padding:14px 16px;flex:1}
.listing h3{font:italic 400 19px/1.2 Georgia,"Times New Roman",serif;margin-bottom:6px}
.listing .info p{color:#444;font-size:13px;margin:2px 0;max-width:none}
.listing .info .by{color:#c0392b}
.listing .buybar{display:flex;align-items:center;justify-content:space-between;gap:10px;background:#2b2b2b;color:#fff;padding:10px 12px 10px 16px}
.listing .buybar span{font:400 22px Georgia,serif}
.listing .buybar a{background:#d9441e;color:#fff;font-size:13px;font-weight:500;padding:9px 14px;text-decoration:none!important}
.listing .buybar a:hover{background:#b8381a}
.project.listing-mode #pgrid{display:none}
.project .top:has(.listings){display:block}.project .top:has(.listings) #pdesc{max-width:none}.project .top:has(.listings) #pdesc>p{max-width:640px;margin-top:12px}

.solo #ptitle{display:none}
.solo .project{padding-top:24px}
.story>div:only-child{grid-column:1/-1;max-width:720px}

/* Fact boxes: wide enough that names like "Happy's Birthday" never get cut off */
.stats{grid-template-columns:repeat(auto-fit,minmax(210px,1fr));max-width:none}
.stats b{font-size:clamp(22px,2.3vw,32px);font-stretch:100%;line-height:1.05;overflow-wrap:break-word;hyphens:auto}
/* Text runs wide and readable, lined up with the title and photos */
.story>div:only-child{max-width:860px}
.story p{font-size:18px;line-height:1.6}
.project .top:has(.stats) #pdesc,.project .top:has(.story) #pdesc{max-width:none;width:100%}
/* A strip of extra photos under a story, e.g. exhibition views */
.shots{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:8px;margin-top:20px;max-width:1100px}
.shots img{width:100%;aspect-ratio:3/4;object-fit:cover;display:block}
.show{margin-top:48px;max-width:1100px}.show p{color:#d8d4cc;font-size:18px;line-height:1.6;max-width:860px}
/* Phones: one-word titles like #heartsinSF and EXPERIENCE never run off the edge. */
@media (max-width:700px){.row h2{font-size:16px;overflow-wrap:anywhere}.project h2{font-size:clamp(30px,10vw,110px);overflow-wrap:anywhere}}

/* Artist Experience: each piece large, with its description always showing */
.listings{grid-template-columns:1fr;gap:28px;max-width:1200px}
.listing{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.25fr);grid-template-rows:1fr auto}
.listing .ph{grid-row:1/3;aspect-ratio:auto;min-height:440px;padding:24px}
.listing .info{padding:24px 28px}
.listing h3{font-size:clamp(24px,2.6vw,34px);margin-bottom:10px}
.listing .info p{font-size:14px}
.listing .info .blurb{font-size:16px;line-height:1.6;color:#222;margin-top:14px}
.listing .ph img{max-height:560px}
@media (max-width:760px){.listing{grid-template-columns:1fr;grid-template-rows:none}.listing .ph{grid-row:auto;min-height:0}.listing .info{padding:18px 16px}}

/* Numbered steps from first idea to finished work */
.steps{display:grid;gap:44px;margin-top:40px;max-width:1200px}
.step{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr);gap:28px;align-items:center}
.step:nth-child(even){grid-template-columns:minmax(0,2fr) minmax(0,1fr)}
.step:nth-child(even) .say{order:2}
.steps .num{font:800 clamp(56px,8vw,110px)/.9 Archivo,sans-serif;font-stretch:125%;color:var(--c)}
.steps h3{font:800 clamp(20px,2.2vw,28px)/1.1 Archivo,sans-serif;font-stretch:110%;text-transform:uppercase;margin:10px 0 8px;color:#fff}
.steps p{font-size:17px;line-height:1.55;color:#d8d4cc;max-width:none}
.step img{width:100%;display:block;cursor:zoom-in}
@media (max-width:760px){.step,.step:nth-child(even){grid-template-columns:1fr;gap:12px}.step:nth-child(even) .say{order:0}}
.mosaic{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;margin-top:16px;max-width:1200px}
.mosaic img{width:100%;height:100%;aspect-ratio:3/2;object-fit:cover;display:block;cursor:zoom-in;grid-column:span 2}
.mosaic img:first-child{grid-column:span 6;aspect-ratio:16/8}
.mosaic img:nth-child(2),.mosaic img:nth-child(3){grid-column:span 3}
@media (max-width:760px){.mosaic img,.mosaic img:nth-child(2),.mosaic img:nth-child(3){grid-column:span 3}.mosaic img:first-child{grid-column:span 6}}

/* Drag to compare two photos */
.ba{--p:50%;position:relative;aspect-ratio:16/9;overflow:hidden;background:#000}
.ba img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;cursor:ew-resize}
.ba img+img{clip-path:inset(0 calc(100% - var(--p)) 0 0)}
.ba::after{content:"";position:absolute;top:0;bottom:0;left:var(--p);width:3px;background:var(--c);pointer-events:none}
.ba input{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:ew-resize}
.ba .tag{position:absolute;top:10px;background:#000c;color:#fff;font-size:11px;letter-spacing:.1em;text-transform:uppercase;padding:4px 8px;pointer-events:none;z-index:1}
.ba .l{left:10px}.ba .r{right:10px}

/* The Jar: a flashlight over the dark set */
.spot{--x:50%;--y:50%;position:relative;margin-top:32px;max-width:1200px;overflow:hidden;touch-action:pan-y}
.spot img{width:100%;display:block}
.spot::after{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(circle 240px at var(--x) var(--y),transparent 45%,#000e 100%)}
.spot span{position:absolute;left:12px;bottom:12px;z-index:1;background:#000c;color:#fff;font-size:11px;letter-spacing:.1em;text-transform:uppercase;padding:4px 8px;pointer-events:none}
.stills{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:8px;max-width:1200px}
.stills figure{margin:0}.stills img{width:100%;display:block;cursor:zoom-in}
.stills figcaption{font-size:13px;color:#9a968e;margin-top:6px}
@media (max-width:760px){.stills{grid-template-columns:1fr}}

/* Interpretive Dance: a strip of film for each location */
.reelhead{font:800 clamp(20px,2.2vw,28px)/1.1 Archivo,sans-serif;font-stretch:110%;text-transform:uppercase;color:var(--c);margin:36px 0 10px}
.film{display:flex;gap:6px;overflow-x:auto;scroll-snap-type:x proximity;padding:22px 8px;background:#000;
  background-image:repeating-linear-gradient(90deg,#fff3 0 14px,transparent 14px 32px),repeating-linear-gradient(90deg,#fff3 0 14px,transparent 14px 32px);
  background-size:100% 10px;background-position:0 6px,0 calc(100% - 6px);background-repeat:no-repeat}
.film img{height:clamp(170px,26vw,340px);aspect-ratio:1.9;width:auto;object-fit:cover;flex:none;display:block;scroll-snap-align:start;cursor:zoom-in}

/* My Dead Dad: turn the reel like a ViewMaster */
.reelbox{display:grid;gap:12px;justify-items:center;text-align:center}
.reelbox .reel{width:100%;max-width:440px;aspect-ratio:1;object-fit:cover;border-radius:50%;transition:transform .45s cubic-bezier(.3,1.3,.5,1)}
.reelbox .tabs{display:flex;flex-wrap:wrap;gap:6px;justify-content:center}
.reelbox button{background:none;border:1.5px solid var(--c);color:#fff;font:inherit;font-size:12px;letter-spacing:.06em;text-transform:uppercase;padding:6px 10px;cursor:pointer}
.reelbox button.on,.reelbox .adv{background:var(--c);color:var(--fg,#141414)}
.reelbox .adv{padding:10px 18px;font-weight:500}

/* Community Guidelines: the screen a platform puts over a photo */
.sens{position:relative;margin:0;overflow:hidden;cursor:pointer}
.sens img{width:100%;display:block;filter:blur(26px);transform:scale(1.08);transition:filter .3s}
.sens .cover{position:absolute;inset:0;display:flex;flex-direction:column;gap:8px;align-items:center;justify-content:center;text-align:center;padding:16px;color:#fff;background:#0007;transition:opacity .3s}
.sens .cover b{font-size:18px;font-weight:500}
.sens .cover u{margin-top:6px;text-decoration:none;border-top:1px solid #fff6;padding-top:10px;font-size:14px}
.sens.seen{cursor:default}.sens.seen img{filter:none;transform:none}.sens.seen .cover{opacity:0;pointer-events:none}

/* Fact boxes: the same gap on every page, side to side and row to row */
.stats{gap:12px}
.stats:has(div:nth-child(6)){grid-template-columns:repeat(3,minmax(0,1fr))}
@media (max-width:700px){.stats:has(div:nth-child(6)){grid-template-columns:1fr}}
