/* =====================================================================
   Project cards (16:9, 3 per row, 2 on smaller screens) + the project pop-up.
   Pop-up content is plain HTML from each project folder (popup.php). The .pp-* classes
   at the end are ready-made building blocks that work in light and dark.
   ===================================================================== */

/* ---------- the section + grid ---------- */
.projects{padding:15vh clamp(16px,5vw,80px) 17vh}
.pj-wrap{max-width:1240px;margin:0 auto}
.pj-head{margin:0 0 clamp(22px,3.5vw,40px)}
.pj-kick{margin:0 0 10px;font:600 12px/1 var(--f-head);letter-spacing:.2em;text-transform:uppercase;opacity:.6}
.pj-head h2{margin:0;font:700 clamp(34px,4.6vw,62px)/1 var(--f-head);letter-spacing:-.035em}
.pj-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(18px,2.4vw,32px) clamp(14px,2vw,26px)}
@media (max-width:900px){.pj-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:480px){.pj-grid{gap:16px 10px}}

/* ---------- a card: picture + name ---------- */
.pj-card{all:unset;box-sizing:border-box;display:flex;flex-direction:column;gap:10px;cursor:pointer;color:inherit;min-width:0;-webkit-tap-highlight-color:transparent}
.pj-art{position:relative;display:block;aspect-ratio:16/9;border-radius:10px;overflow:hidden;background:#0d0f16;
  box-shadow:0 14px 30px -18px rgba(0,0,0,.55),0 0 0 1px color-mix(in srgb,var(--ink,#000) 10%,transparent);
  transition:transform .4s cubic-bezier(.2,.9,.25,1),box-shadow .4s}
.pj-art img{display:block;width:100%;height:100%;object-fit:cover;transition:transform 1.2s cubic-bezier(.2,.7,.2,1)}
.pj-card:hover .pj-art,.pj-card:focus-visible .pj-art{transform:translateY(-4px) scale(1.025);box-shadow:0 26px 44px -20px rgba(0,0,0,.6),0 0 0 1px color-mix(in srgb,var(--ink,#000) 14%,transparent)}
.pj-card:hover .pj-art img{transform:scale(1.06)}
.pj-card:focus-visible .pj-art{outline:3px solid var(--a);outline-offset:3px}
.pj-card.ghost .pj-art{visibility:hidden}
.pj-name{font:600 clamp(15px,1.45vw,19px)/1.2 var(--f-head);letter-spacing:-.01em;padding:0 2px}
.pj-badges{position:absolute;left:10px;top:10px;display:flex;gap:6px;flex-wrap:wrap;z-index:2}
.pj-badge{display:inline-block;font:700 10.5px/1 var(--f-body);letter-spacing:.07em;text-transform:uppercase;padding:5px 8px;border-radius:99px;color:#fff;
  background:rgba(12,14,22,.62);box-shadow:inset 0 0 0 1px rgba(255,255,255,.22);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.pj-badge.live{background:rgba(16,150,98,.92);box-shadow:none}
.pj-badge.live::before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:#bff5dc;margin-right:6px;vertical-align:1px;animation:pjPulse 2s ease-in-out infinite}
.pj-badge.beta{background:rgba(222,130,30,.95);box-shadow:none}
@keyframes pjPulse{50%{opacity:.35}}
@media (max-width:480px){.pj-badges{left:7px;top:7px;gap:4px}.pj-badge{font-size:9px;padding:4px 6px}}

/* generated cover (until the folder has a picture) */
.pj-gen{position:absolute;inset:0;display:block;overflow:hidden;color:#fff;
  background:radial-gradient(120% 130% at 85% 0%,color-mix(in srgb,var(--a) 65%,#fff) 0%,var(--a) 42%,color-mix(in srgb,var(--a) 45%,#000) 100%)}
.pj-gen::before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(135deg,rgba(255,255,255,.08) 0 1px,transparent 1px 14px)}
.pj-mono{position:absolute;right:-.06em;bottom:-.24em;font:800 clamp(80px,13vw,190px)/1 var(--f-head);letter-spacing:-.06em;opacity:.2}
.pj-wm{position:absolute;left:7%;bottom:12%;right:30%;font:700 clamp(17px,2.2vw,32px)/1.02 var(--f-head);letter-spacing:-.03em;text-shadow:0 2px 12px rgba(0,0,0,.25)}
.pp-art .pj-wm{display:none}
.pp-art .pj-mono{font-size:clamp(160px,30vw,380px)}

/* ---------- the pop-up ---------- */
.pp{position:fixed;inset:0;z-index:200;overflow-y:auto;overscroll-behavior:contain;display:none;
  --pp-bg:#fbfaf7;--pp-ink:#15161d;--pp-mut:#5b5f6e;--pp-line:rgba(20,22,32,.12);--pp-chip:rgba(20,22,32,.06)}
[data-theme=dark] .pp{--pp-bg:#13151c;--pp-ink:#ececf3;--pp-mut:#a2a6b7;--pp-line:rgba(255,255,255,.11);--pp-chip:rgba(255,255,255,.07)}
.pp.on{display:block}
.pp-bk{position:fixed;inset:0;background:rgba(5,7,13,.62);backdrop-filter:blur(8px) saturate(1.1);-webkit-backdrop-filter:blur(8px) saturate(1.1)}
.pp-dl{position:relative;width:min(980px,calc(100vw - 40px));margin:40px auto 60px;background:var(--pp-bg);color:var(--pp-ink);border-radius:16px;overflow:hidden;
  box-shadow:0 40px 100px -24px rgba(0,0,0,.7);font-family:var(--f-body);--pp-card:color-mix(in srgb,var(--a) 8%,var(--pp-bg));--pp-acc:color-mix(in srgb,var(--a) 78%,var(--pp-ink))}
.pp-x{position:fixed;top:54px;right:max(16px,calc(50% - 490px + 14px));z-index:5;width:40px;height:40px;border-radius:50%;border:0;cursor:pointer;
  background:rgba(10,11,16,.72);color:#fff;font-size:17px;line-height:1;backdrop-filter:blur(6px);transition:transform .25s,background .2s}
.pp-x:hover{transform:rotate(90deg);background:rgba(10,11,16,.9)}
.pp-nav{position:fixed;top:50%;z-index:5;width:46px;height:46px;margin-top:-23px;border-radius:50%;border:0;cursor:pointer;font-size:22px;color:#fff;
  background:rgba(255,255,255,.14);backdrop-filter:blur(6px);transition:background .2s,transform .2s}
.pp-nav:hover{background:rgba(255,255,255,.28);transform:scale(1.08)}
.pp-nav.l{left:max(12px,calc(50% - 490px - 66px))}.pp-nav.r{right:max(12px,calc(50% - 490px - 66px))}
@media (max-width:1140px){.pp-nav{display:none}}

.pp-hero{position:relative;aspect-ratio:16/9;overflow:hidden;transform-origin:0 0}
.pp-art{position:absolute;inset:0}
.pp-art img{width:100%;height:100%;object-fit:cover;display:block}
.pp-hero::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(0deg,var(--pp-bg) 0%,var(--pp-bg) 14%,color-mix(in srgb,var(--pp-bg) 82%,transparent) 34%,color-mix(in srgb,var(--pp-bg) 35%,transparent) 56%,transparent 78%)}
.pp-cap{position:absolute;left:40px;right:40px;bottom:26px;z-index:2}
.pp-kick{margin:0 0 8px;font:600 11.5px/1 var(--f-head);letter-spacing:.18em;text-transform:uppercase;color:var(--pp-mut)}
.pp-cap h2{margin:0 0 12px;font:700 clamp(30px,4.8vw,56px)/1 var(--f-head);letter-spacing:-.035em}
.pp-meta{display:flex;gap:6px;flex-wrap:wrap}
.pp-meta .pj-badge{backdrop-filter:none}
.pp-meta .pj-badge.tag{background:var(--pp-chip);color:var(--pp-ink);box-shadow:inset 0 0 0 1px var(--pp-line)}
.pp-acts{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}
.pp-btn{display:inline-flex;align-items:center;gap:8px;padding:11px 18px;border-radius:8px;font:700 14.5px/1 var(--f-body);text-decoration:none;transition:filter .2s,transform .2s}
.pp-btn.pri{background:var(--pp-ink);color:var(--pp-bg)}
.pp-btn.sec{background:var(--pp-chip);color:var(--pp-ink);box-shadow:inset 0 0 0 1px var(--pp-line)}
.pp-btn:hover{transform:translateY(-1px);filter:brightness(1.08)}
.pp-body{padding:10px 40px 44px;font-size:16px;line-height:1.6}

/* phones: the pop-up takes the whole screen */
@media (max-width:700px){
  .pp-dl{width:100%;margin:0;min-height:100vh;min-height:100dvh;border-radius:0}
  .pp-x{top:12px;right:12px}
  .pp-hero{aspect-ratio:4/3}
  .pp-cap{left:18px;right:18px;bottom:16px}
  .pp-body{padding:6px 18px 36px;font-size:15.5px}
}

/* ---------- building blocks for pop-up content (popup.php) ---------- */
.pp-body > *:first-child{margin-top:0}
.pp-body h3{font:700 clamp(20px,2.2vw,26px)/1.15 var(--f-head);letter-spacing:-.02em;margin:34px 0 12px}
.pp-body h4{font:700 16px/1.25 var(--f-head);margin:0 0 6px}
.pp-body p{margin:0 0 14px}
.pp-body a{color:var(--pp-acc)}
.pp-body img,.pp-body video{max-width:100%;height:auto;border-radius:10px}
.pp-mut{color:var(--pp-mut)}
.pp-lead{font:500 clamp(18px,1.9vw,22px)/1.45 var(--f-head);letter-spacing:-.01em;margin:0 0 20px}
.pp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px;margin:0 0 18px}
.pp-card{background:var(--pp-card);border:1px solid color-mix(in srgb,var(--a) 22%,transparent);border-radius:12px;padding:15px 16px}
.pp-card p{margin:0;font-size:14px;line-height:1.5;color:var(--pp-mut)}
.pp-k{display:block;margin:0 0 6px;font:700 10.5px/1 var(--f-head);letter-spacing:.15em;text-transform:uppercase;color:var(--pp-acc)}
.pp-cols{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:32px;margin:0 0 18px}
.pp-cols.even{grid-template-columns:1fr 1fr}
@media (max-width:700px){.pp-cols,.pp-cols.even{grid-template-columns:1fr;gap:14px}}
.pp-side{font-size:14px;color:var(--pp-mut)}
.pp-side dt{font:700 10.5px/1 var(--f-head);letter-spacing:.14em;text-transform:uppercase;color:var(--pp-ink);margin:12px 0 4px}
.pp-side dt:first-child{margin-top:0}
.pp-side dd{margin:0}
.pp-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:12px;margin:0 0 20px}
.pp-stat{border-top:2px solid var(--a);padding-top:10px}
.pp-stat b{display:block;font:700 clamp(26px,3.4vw,40px)/1 var(--f-head);letter-spacing:-.03em}
.pp-stat span{display:block;margin-top:6px;font-size:13px;color:var(--pp-mut);line-height:1.35}
.pp-steps{list-style:none;counter-reset:s;padding:0;margin:0 0 18px;display:grid;gap:10px}
.pp-steps li{counter-increment:s;position:relative;padding:2px 0 2px 44px}
.pp-steps li::before{content:counter(s);position:absolute;left:0;top:0;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;
  font:700 13px/1 var(--f-head);background:var(--a);color:#fff}
.pp-tags{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 16px;padding:0;list-style:none}
.pp-tags li,.pp-tags span{font:500 12.5px/1 var(--f-body);padding:6px 10px;border-radius:99px;background:var(--pp-chip);box-shadow:inset 0 0 0 1px var(--pp-line)}
.pp-shot{margin:0 0 20px}
.pp-shot img,.pp-shot video{display:block;width:100%;border-radius:12px;box-shadow:0 0 0 1px var(--pp-line)}
.pp-shot figcaption{margin-top:8px;font-size:13px;color:var(--pp-mut)}
.pp-quote{margin:0 0 20px;padding:4px 0 4px 18px;border-left:3px solid var(--a);font:500 18px/1.45 var(--f-head);font-style:italic}
.pp-note{padding:12px 14px;border-radius:10px;background:var(--pp-chip);font-size:14px;color:var(--pp-mut);margin:0 0 16px}
.pp-hr{border:0;border-top:1px solid var(--pp-line);margin:26px 0}

/* comic mode */
[data-site-mode=comic] .pj-art{border:3px solid #1b1a22;box-shadow:6px 6px 0 #1b1a22;border-radius:12px}
[data-site-mode=comic] .pj-card:hover .pj-art{box-shadow:9px 9px 0 #1b1a22}
[data-site-mode=comic] .pj-name{font-weight:400;font-size:clamp(18px,1.7vw,23px);letter-spacing:.02em}
[data-site-mode=comic] .pp-dl{border:3px solid #1b1a22;box-shadow:12px 12px 0 rgba(0,0,0,.6)}
[data-site-mode=comic] .pp-cap h2,[data-site-mode=comic] .pj-head h2{font-weight:400;letter-spacing:.02em}
@media (max-width:700px){[data-site-mode=comic] .pp-dl{border:0;box-shadow:none}}

/* Topic badges next to Live/Beta in the pop-up (section.json "topics"; colour per topic from site.json projects.topics) */
.pp-meta .pj-badge.topic,.pj-badges .pj-badge.topic{background:color-mix(in srgb,var(--t) 86%,#000);color:#fff;box-shadow:inset 0 0 0 1px rgba(255,255,255,.18)}

/* project icon before the title (section.json "icon"): height follows the title font size */
.pj-ico{display:inline-block;height:.78em;width:auto;margin-right:.32em;vertical-align:-.04em;border-radius:0;flex:none}
.pp-cap h2 .pj-ico{height:.72em;margin-right:.28em;vertical-align:.02em}

/* ---------- the pop-up's scrollbar = the prism's white beam (2026-10-04) ---------- */
.pp::-webkit-scrollbar{width:14px}
.pp::-webkit-scrollbar-track{background:transparent}
.pp::-webkit-scrollbar-thumb{border-radius:99px;border:4px solid transparent;background-clip:padding-box;
  background-image:linear-gradient(90deg,rgba(150,195,255,.35),#fff 38%,#fff 62%,rgba(150,195,255,.35));
  box-shadow:inset 0 0 6px rgba(120,175,255,.9)}
.pp::-webkit-scrollbar-thumb:hover{border-width:3px;box-shadow:inset 0 0 8px rgba(120,175,255,1)}
@supports not selector(::-webkit-scrollbar){.pp{scrollbar-width:thin;scrollbar-color:#fff transparent}}
/* a link to another website: its address under the button */
.pp-link{display:inline-flex;flex-direction:column;align-items:flex-end;gap:5px}
.pp-url{font:500 12px/1 var(--f-body);letter-spacing:.02em;opacity:.78;padding-right:4px}

