/* Core theme */
:root{
  --bg:#0b0b0c;--card:#141416;--muted:#a0a0a6;--text:#f2f2f5;
  --brand:#31d07a;--outline:#26262b;--ring:rgba(49,208,122,.35)
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;background:var(--bg);color:var(--text);
  font:16px/1.6 Inter,system-ui,-apple-system,Segoe UI,Roboto,Arial}
a{color:var(--text);text-decoration:none}
a:hover{opacity:.9}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0,0,1px,1px);white-space:nowrap;border:0}

/* NAV */
.nav{
  position:sticky;top:0;z-index:40;display:flex;gap:16px;align-items:center;
  justify-content:space-between;padding:14px 20px;border-bottom:1px solid var(--outline);
  backdrop-filter:saturate(1.2) blur(6px);background:rgba(11,11,12,.65)
}
.logo{
  width:40px;height:40px;border-radius:12px;display:grid;place-items:center;
  background:linear-gradient(135deg,#2a2a2f,#1a1a1e);font-weight:800;font-size:22px;
  border:1px solid var(--outline)
}
.nav nav{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.nav nav a{padding:10px 12px;border-radius:12px;border:1px solid transparent}
.nav nav a:hover{border-color:var(--outline)}
.btn{background:var(--brand);color:#0a0a0a;font-weight:700;padding:10px 14px;border-radius:14px;display:inline-block}
.btn.ghost{background:transparent;border:1px solid var(--outline);color:var(--text)}
.btn.xl{padding:14px 18px;border-radius:16px}

/* HERO */
.hero{
  padding:72px 18px 30px;border-bottom:1px solid var(--outline);
  background:radial-gradient(600px 180px at 60% -30%, rgba(49,208,122,.12), transparent)
}
.hero-wrap{max-width:1100px;margin:0 auto;text-align:center}
.hero h1{font-size:52px;line-height:1.05;margin:0 0 12px;letter-spacing:-.02em}
.lead{font-size:18px;color:var(--muted);max-width:880px;margin:0 auto}
.cta{display:flex;gap:12px;justify-content:center;margin:24px 0 10px}
.hero-meta{display:flex;gap:10px;justify-content:center;color:var(--muted);font-size:14px}
.hero-meta span{border:1px solid var(--outline);padding:6px 10px;border-radius:999px}

/* Sections */
.section{padding:56px 18px;border-bottom:1px solid var(--outline)}
.section-title{max-width:1100px;margin:0 auto 18px;font-size:28px;letter-spacing:-.01em}
.grid{max-width:1100px;margin:0 auto;display:grid;gap:16px;grid-template-columns:repeat(12,1fr)}

.features .card{grid-column: span 6;background:var(--card);padding:18px;border-radius:18px;border:1px solid var(--outline)}
.features .card h3{margin:0 0 6px}
.features .card p{margin:0;color:var(--muted)}
@media (max-width:880px){.features .card{grid-column: span 12}}

.muted{color:var(--muted)}
.center{text-align:center}

/* Gallery */
.gallery .shot{grid-column: span 3;background:var(--card);border:1px solid var(--outline);padding:10px;border-radius:16px;overflow:hidden}
.gallery picture img{width:100%;height:180px;object-fit:cover;border-radius:12px;display:block}
.gallery figcaption{font-size:13px;color:var(--muted);margin-top:8px}
@media (max-width:1100px){.gallery .shot{grid-column: span 4}}
@media (max-width:780px){.gallery .shot{grid-column: span 6}.gallery picture img{height:160px}}
@media (max-width:520px){.gallery .shot{grid-column: span 12}.gallery picture img{height:auto}}

/* Code cards */
.grid.two .card{grid-column: span 6;background:var(--card);padding:18px;border-radius:18px;border:1px solid var(--outline)}
.grid.two .card pre{margin:0;border:1px dashed var(--outline);padding:12px;border-radius:12px;background:#0e0e11;color:#c9ffd8;overflow:auto}
.grid.two .card h3{margin:0 0 8px}
@media (max-width:880px){.grid.two .card{grid-column: span 12}}

/* Steps */
.steps{max-width:900px;margin:0 auto;padding-left:18px}
.steps li{margin:6px 0}

/* Footer */
.footer{padding:28px 18px;text-align:center;color:var(--muted)}
.footer a{color:var(--muted);text-decoration:underline}

/* Lightbox (animated open/close) */
.lightbox{
  position:fixed; inset:0; background:rgba(3,3,4,.9);
  display:flex; align-items:center; justify-content:center; z-index:60;

  /* animation state */
  opacity:0; pointer-events:none; transition:opacity .22s ease;
}
.lightbox.open{ opacity:1; pointer-events:auto; }

.lb-img{max-width:92vw;max-height:80vh;border-radius:18px;border:1px solid var(--outline);box-shadow:0 10px 40px rgba(0,0,0,.6)}
.lb-cap{position:absolute;bottom:26px;left:50%;transform:translateX(-50%);color:#d2d2d8;background:rgba(20,20,24,.7);padding:8px 12px;border-radius:12px;border:1px solid var(--outline)}
.lightbox .close{position:absolute;top:16px;right:16px;font-size:34px;line-height:1;background:#1a1a1e;border:1px solid var(--outline);border-radius:12px;color:#fff;padding:6px 12px;cursor:pointer}
.lightbox .nav{position:absolute;top:50%;transform:translateY(-50%);background:#1a1a1e;border:1px solid var(--outline);border-radius:12px;color:#fff;font-size:42px;line-height:1;padding:6px 12px;cursor:pointer}
.lightbox .nav.prev{left:16px}
.lightbox .nav.next{right:16px}
.lightbox button:focus{outline:2px solid var(--ring);outline-offset:2px}

/* Release & Changelog */
.release-badge{display:flex;justify-content:center;margin:8px 0 0}
.badge{display:inline-flex;gap:8px;align-items:center;background:#1a1a1e;border:1px solid var(--outline);padding:6px 10px;border-radius:999px;font-weight:600}
.badge .dot{width:8px;height:8px;border-radius:50%;background:var(--brand)}
.badge .count{font-weight:400;opacity:.9}
.changelog{max-width:900px;margin:0 auto}
.changelog details{background:var(--card);border:1px solid var(--outline);border-radius:16px;margin:12px 0;padding:12px}
.changelog summary{cursor:pointer;font-weight:700;list-style:none}
.changelog .body{color:var(--muted);margin-top:8px}

/* README content */
.readme h1,.readme h2,.readme h3{margin:8px 0}
.readme p{color:var(--muted)}
.readme pre{background:#0e0e11;color:#c9ffd8;padding:12px;border-radius:12px;overflow:auto;border:1px dashed var(--outline)}
.readme code{background:#0e0e11;padding:1px 4px;border-radius:6px}
.readme ul{margin:8px 0 8px 20px}

/* Accessibility + reveal anims */
.skip-link{position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden}
.skip-link:focus{left:10px;top:10px;width:auto;height:auto;z-index:100;background:#000;color:#fff;padding:8px 10px;border-radius:8px}
.reveal{opacity:0;transform:translateY(16px);transition:opacity .5s ease, transform .6s ease}
.reveal.in{opacity:1;transform:none}
@media (prefers-reduced-motion: reduce){
  html:focus-within{scroll-behavior:auto}
  .reveal{transition:none}
}

/* Smooth scrolling */
html{scroll-behavior:smooth}

/* README clamp + controls */
.readme-toggle{position:relative;max-width:1100px;margin:0 auto}
.readme.card.clamp{max-height:360px;overflow:hidden;position:relative}
.readme.card.clamp:after{content:"";position:absolute;left:0;right:0;bottom:0;height:100px;background:linear-gradient(180deg, rgba(20,20,24,0), rgba(20,20,24,0.96))}
.readme-controls{margin-top:10px}
.readme-controls .btn{padding:8px 12px;border-radius:10px}

/* --- Animations for lightbox image swaps & README height --- */
@keyframes lb-pop{from{transform:scale(.975);opacity:0}to{transform:scale(1);opacity:1}}
@keyframes lb-swap-left{from{transform:translateX(24px);opacity:0}to{transform:translateX(0);opacity:1}}
@keyframes lb-swap-right{from{transform:translateX(-24px);opacity:0}to{transform:translateX(0);opacity:1}}
.lb-img.anim-pop{animation:lb-pop .22s ease}
.lb-img.swap-left{animation:lb-swap-left .22s ease}
.lb-img.swap-right{animation:lb-swap-right .22s ease}
.readme-anim{transition:height .30s ease}

@media (prefers-reduced-motion: reduce){
  .lightbox{transition:none}
  .lb-img,.lb-img.anim-pop,.lb-img.swap-left,.lb-img.swap-right{animation:none}
  .readme-anim{transition:none}
}
