/* ============================================================
   beindie — "paper arcade" public design system
   Editorial print layout, pixel accents used sparingly.
   Light default; dark via <html data-theme="dark">.
   ============================================================ */

/* ---------- 1. Tokens ---------- */
:root{
  /* logo palette — fixed, never themed */
  --red:#ff2d2d;
  --orange:#ff8a00;
  --yellow:#ffd400;
  --green:#3ddc3d;
  --blue:#00b2ff;

  /* light theme surface + ink */
  --paper:#f4f1ea;
  --paper-2:#fbf9f4;
  --paper-3:#ffffff;
  --ink:#141414;
  --ink-soft:#3a3630;
  --muted:#6b6558;
  --line:#d9d4c7;
  --line-strong:#bdb6a5;
  --shade:rgba(20,20,20,.05);

  /* the one interface accent */
  --ui:var(--yellow);
  --on-ui:#141414;

  /* per-item accent (overridden by .accent-*) */
  --accent:var(--yellow);
  --on-accent:#141414;

  /* type */
  --display:"Space Grotesk","Archivo Black","Arial Black",system-ui,sans-serif;
  --body:"Instrument Sans","Segoe UI",system-ui,-apple-system,sans-serif;
  --pixel:"Press Start 2P","Courier New",monospace;

  /* rhythm */
  --wrap:1240px;
  --gutter:clamp(20px,4.5vw,48px);
  --section:clamp(72px,10vw,140px);
}

/* Dark is neutral black, not a warm grey: the paper tint stays in the ink only.
   (The first warm-grey dark theme read as brown on real screens.) */
:root[data-theme="dark"]{
  --paper:#080808;
  --paper-2:#101010;
  --paper-3:#171717;
  --ink:#f1ede4;
  --ink-soft:#d4d2cd;
  --muted:#8e8c88;
  --line:#262626;
  --line-strong:#3d3d3d;
  --shade:rgba(241,237,228,.06);
}

/* per-item accents */
.accent-red{--accent:var(--red);--on-accent:#141414}
.accent-orange{--accent:var(--orange);--on-accent:#141414}
.accent-yellow{--accent:var(--yellow);--on-accent:#141414}
.accent-green{--accent:var(--green);--on-accent:#141414}
.accent-blue{--accent:var(--blue);--on-accent:#141414}

/* ---------- 2. Reset & base ---------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}
}
body{
  margin:0;
  background:var(--paper);
  color:var(--ink);
  font-family:var(--body);
  font-size:17px;
  line-height:1.6;
  font-weight:400;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
img,svg,video{max-width:100%;display:block}
img{height:auto}
h1,h2,h3,h4,h5{
  font-family:var(--display);
  font-weight:700;
  letter-spacing:-.03em;
  line-height:1.02;
  margin:0;
  text-wrap:balance;
}
p{margin:0}
a{color:inherit}
ul,ol{margin:0}
hr{border:0;border-top:1px solid var(--line);margin:0}
button,input,select,textarea{font:inherit;color:inherit}
::selection{background:var(--yellow);color:#141414}

:focus-visible{
  outline:3px solid var(--yellow);
  outline-offset:2px;
}
.btn-primary:focus-visible,.pitch-band :focus-visible{outline-color:var(--ink)}

/* ---------- 3. Layout primitives ---------- */
.wrap{width:100%;max-width:var(--wrap);margin-inline:auto;padding-inline:var(--gutter)}
.wrap-narrow{max-width:860px}
main{display:block}
.section{padding-block:var(--section)}
.section--tight{padding-block:clamp(48px,6vw,80px)}
.g12{display:grid;grid-template-columns:repeat(12,1fr);gap:clamp(20px,3vw,40px)}
.stack{display:grid;gap:14px}
.rule{border:0;border-top:1px solid var(--line);margin:0}
.rule--strong{border-top-color:var(--line-strong)}
.hide{display:none!important}
.skip-link{
  position:absolute;left:12px;top:-60px;z-index:200;
  background:var(--yellow);color:#141414;
  border:2px solid #141414;padding:10px 16px;
  font-weight:600;text-decoration:none;
  transition:top .15s ease;
}
.skip-link:focus{top:12px}
.vh{
  position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;
}

/* ---------- 4. Type utilities ---------- */
.eyebrow{
  font-family:var(--pixel);
  font-size:10px;
  line-height:1.8;
  letter-spacing:.06em;
  text-transform:uppercase;
  color:var(--muted);
  display:inline-flex;align-items:center;gap:10px;
  margin:0;
}
.eyebrow .idx{color:var(--ink)}
.eyebrow::before{
  content:"";width:9px;height:9px;flex:none;
  background:var(--accent);border:1px solid var(--ink);
}
.eyebrow--bare::before{display:none}
.display-xl{font-size:clamp(2.9rem,7.2vw,5.1rem);line-height:.94;letter-spacing:-.04em}
.display-l{font-size:clamp(2.2rem,4.6vw,3.4rem);line-height:.98;letter-spacing:-.035em}
.display-m{font-size:clamp(1.7rem,3vw,2.3rem);line-height:1.04}
.display-s{font-size:1.3rem;line-height:1.15;letter-spacing:-.02em}
.lead{font-size:clamp(1.05rem,1.5vw,1.28rem);line-height:1.5;color:var(--ink-soft);max-width:46ch}
.dek{color:var(--muted);max-width:52ch;font-size:1.02rem}
.muted{color:var(--muted)}
.meta{font-size:13px;letter-spacing:.02em;color:var(--muted)}
.micro{
  font-family:var(--pixel);font-size:10px;line-height:1.8;
  letter-spacing:.06em;text-transform:uppercase;color:var(--muted);
}
.link{
  color:inherit;text-decoration:none;
  background-image:linear-gradient(var(--yellow),var(--yellow));
  background-repeat:no-repeat;background-position:0 100%;
  background-size:100% 2px;
  padding-bottom:1px;
  transition:background-size .18s ease;
}
.link:hover{background-size:100% 42%}
/* .link on a <button> (in-sentence actions) must not inherit button chrome */
button.link{
  border:0;padding:0 0 1px;margin:0;font:inherit;cursor:pointer;
  -webkit-appearance:none;appearance:none;background-color:transparent;
}
.arrow-link{
  font-weight:600;font-size:13px;letter-spacing:.04em;text-transform:uppercase;
  text-decoration:none;display:inline-flex;align-items:center;gap:8px;color:var(--ink);
  border-bottom:2px solid var(--yellow);padding-bottom:3px;
}
.arrow-link:hover{gap:12px}

/* section header */
.sec-head{display:grid;gap:16px;margin-bottom:clamp(28px,4vw,52px)}
.sec-head__row{display:flex;align-items:flex-end;justify-content:space-between;gap:32px;flex-wrap:wrap}
.sec-head__row .dek{flex:1 1 340px;max-width:46ch}

/* ---------- 5. Buttons ---------- */
.btn{
  --btn-bg:transparent;
  display:inline-flex;align-items:center;justify-content:center;gap:9px;
  font-family:var(--body);font-weight:600;font-size:13px;
  letter-spacing:.04em;text-transform:uppercase;
  padding:13px 22px;border:2px solid var(--ink);
  background:var(--btn-bg);color:var(--ink);
  text-decoration:none;cursor:pointer;
  transition:transform .14s ease,box-shadow .14s ease,background-color .14s ease,color .14s ease;
}
.btn-primary{
  --btn-bg:var(--yellow);
  color:#141414;
  box-shadow:4px 4px 0 var(--ink);
}
.btn-primary:hover{transform:translate(-2px,-2px);box-shadow:6px 6px 0 var(--ink)}
.btn-primary:active{transform:translate(2px,2px);box-shadow:1px 1px 0 var(--ink)}
.btn-secondary:hover{background:var(--ink);color:var(--paper)}
.btn-quiet{border-color:transparent;padding-inline:0;color:var(--muted)}
.btn-quiet:hover{color:var(--ink);border-bottom-color:var(--yellow)}
.btn-sm{padding:9px 15px;font-size:12px}
.btn-block{width:100%}
.btn[disabled]{opacity:.45;pointer-events:none}
.btn-row{display:flex;flex-wrap:wrap;gap:14px;align-items:center}

.icon-btn{
  width:40px;height:40px;flex:none;
  display:grid;place-items:center;
  background:transparent;border:1px solid var(--line-strong);
  color:var(--ink);cursor:pointer;
  transition:border-color .14s ease,background-color .14s ease;
}
.icon-btn:hover{border-color:var(--ink);background:var(--shade)}
.icon-btn svg{width:17px;height:17px}

/* theme toggle icon swap */
.theme-toggle .i-moon{display:none}
:root[data-theme="dark"] .theme-toggle .i-moon{display:block}
:root[data-theme="dark"] .theme-toggle .i-sun{display:none}

/* ---------- 6. Pills, tags, chips ---------- */
.pill{
  display:inline-flex;align-items:center;gap:7px;
  font-size:11.5px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;
  border:1px solid var(--line-strong);
  padding:3px 9px;color:var(--ink-soft);background:var(--paper-2);
  white-space:nowrap;
}
.pill::before{content:"";width:6px;height:6px;flex:none;background:var(--accent);border:1px solid var(--ink)}
.pill--plain::before{display:none}
.pill--genre{background:transparent;text-transform:none;letter-spacing:0;font-weight:500;color:var(--muted)}
/* hero sale chip: only rendered while a title has a live Steam discount */
.pill--sale{
  text-transform:none;letter-spacing:0;font-size:.92rem;font-weight:600;white-space:normal;
  padding:8px 12px;border:1px solid var(--ink);color:var(--ink);text-decoration:none;
  transition:transform .16s ease,box-shadow .16s ease;
}
.pill--sale::before{background:var(--yellow)}
.pill--sale:hover,.pill--sale:focus-visible{transform:translate(-2px,-2px);box-shadow:3px 3px 0 var(--ink);outline:0}
.tag{
  font-family:var(--pixel);font-size:10px;letter-spacing:.06em;text-transform:uppercase;
  color:var(--ink);display:inline-flex;align-items:center;gap:8px;text-decoration:none;
}
.tag::before{content:"";width:8px;height:8px;flex:none;background:var(--accent);border:1px solid var(--ink)}
.chips{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.chip{
  display:inline-flex;align-items:center;gap:8px;
  font-size:13px;font-weight:500;letter-spacing:.01em;
  text-decoration:none;color:var(--ink-soft);
  border:1px solid var(--line-strong);padding:7px 14px;background:transparent;
  transition:border-color .14s ease,background-color .14s ease,color .14s ease;
}
.chip:hover{border-color:var(--ink);color:var(--ink)}
.chip[aria-current="true"],.chip.is-on{
  background:var(--yellow);border-color:var(--ink);color:#141414;font-weight:600;
}
.platforms{display:inline-flex;gap:9px;align-items:center;color:var(--muted)}
.platforms svg{width:16px;height:16px;fill:currentColor}

/* ---------- 7. Cards ---------- */
.card{
  display:flex;flex-direction:column;
  background:var(--paper-2);
  border:1px solid var(--line);
  text-decoration:none;color:inherit;
  transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease;
}
a.card:hover,a.card:focus-visible{
  transform:translate(-2px,-2px);
  box-shadow:4px 4px 0 var(--ink);
  border-color:var(--ink);
}
.card__media{
  position:relative;aspect-ratio:460/215;overflow:hidden;
  background:var(--accent);border-bottom:1px solid var(--line);
}
.card__media img{width:100%;height:100%;object-fit:cover}
.tile{width:100%;height:100%;display:grid;place-items:center;background:var(--accent)}
.tile span{
  font-family:var(--display);font-weight:700;
  font-size:clamp(2rem,4vw,3.1rem);letter-spacing:-.04em;
  color:var(--on-accent);opacity:.92;
}
.card__body{padding:18px 20px 20px;display:flex;flex-direction:column;gap:14px;flex:1;justify-content:space-between}
.card__top{display:flex;align-items:center;justify-content:space-between;gap:12px}
.card__pills{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}
/* "N online": Steam's live player count, a green square like the status dots */
.live-now{display:inline-flex;align-items:center;gap:6px;color:var(--ink);white-space:nowrap}
.live-now::before{content:"";width:7px;height:7px;flex:none;background:var(--green);border:1px solid var(--ink)}
.card__lead{display:grid;gap:8px}
.card__dek{color:var(--muted);font-size:15px;line-height:1.45}
.card__title{font-family:var(--display);font-weight:700;font-size:1.3rem;letter-spacing:-.025em;line-height:1.1}
.card__foot{
  padding-top:12px;border-top:1px solid var(--line);
  display:flex;align-items:center;justify-content:space-between;gap:12px;
}
.card--wide .card__title{font-size:clamp(1.6rem,2.6vw,2.1rem)}
.card--wide .card__body{padding:26px 28px 26px;gap:22px}
.card--wide .card__dek{font-size:1.08rem;line-height:1.5;max-width:38ch}
.card__desc{
  color:var(--ink-soft);font-size:.98rem;line-height:1.55;max-width:56ch;
  display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden;
}
/* compact list item: capsule left at its own ratio, title and facts right */
.card--row{flex-direction:row;align-items:center}
.card--row .card__media{flex:0 0 42%;max-width:240px;align-self:center;border-bottom:0}
.card--row .card__body{padding:12px 16px 13px;gap:8px;justify-content:center;min-width:0;flex:1 1 auto}
.card--row .card__title{font-size:1.08rem}
.card--row .card__foot{padding-top:8px;flex-wrap:wrap;gap:4px 12px}
/* spotlight card: three 16:9 screenshots under the blurb, foot pinned to the bottom */
.card__shots{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.card__shots img{display:block;width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;border:1px solid var(--line)}

/* post card */
.card--post .band{height:5px;background:var(--accent)}
.card--post .card__body{padding:20px 22px 22px}
.card--post .card__title{font-size:1.22rem}

/* grids */
.grid-cards{display:grid;gap:clamp(16px,2vw,26px);grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}
.grid-3{display:grid;gap:clamp(16px,2vw,26px);grid-template-columns:repeat(3,1fr)}
.grid-2{display:grid;gap:clamp(16px,2vw,26px);grid-template-columns:repeat(2,1fr)}
@media (max-width:900px){.grid-3{grid-template-columns:repeat(2,1fr)}}
@media (max-width:620px){.grid-3,.grid-2{grid-template-columns:1fr}}

/* spotlight row: 1 large card + the rest of the catalogue as compact rows.
   Capsules keep their ratio; the large card's body absorbs any height gap and
   the rows share the column evenly. */
.feature-row{display:grid;grid-template-columns:7fr 5fr;gap:clamp(16px,2vw,26px);align-items:stretch}
.feature-row__side{display:grid;gap:14px;grid-auto-rows:1fr}
.feature-row .card--wide .card__body{gap:18px;justify-content:flex-start}
.feature-row .card--wide .card__foot{margin-top:auto}
@media (max-width:900px){
  .feature-row{grid-template-columns:1fr}
  .feature-row__side{grid-auto-rows:auto}
}

/* ---------- 8. Nav ---------- */
.nav{
  position:sticky;top:0;z-index:60;
  background:var(--paper);
  border-bottom:1px solid var(--line);
}
.nav__in{display:flex;align-items:center;gap:clamp(16px,3vw,40px);height:68px}
.nav__logo{display:flex;align-items:center;flex:none}
.nav__logo img{height:26px;width:auto}
.nav__links{display:flex;align-items:center;gap:clamp(16px,2.2vw,30px);margin-right:auto}
.nav__links a{
  text-decoration:none;font-size:15px;font-weight:500;color:var(--ink-soft);
  padding:6px 0;border-bottom:2px solid transparent;
}
.nav__links a:hover{color:var(--ink);border-bottom-color:var(--line-strong)}
.nav__links a[aria-current="page"]{color:var(--ink);font-weight:600;border-bottom-color:var(--yellow)}
.nav__right{display:flex;align-items:center;gap:10px;margin-left:auto}
.nav__burger{display:none}
.nav__mobile-cta{display:none}

@media (max-width:840px){
  .nav__in{height:60px}
  .nav__burger{display:grid}
  .nav__links{
    position:fixed;left:0;right:0;top:60px;
    flex-direction:column;align-items:stretch;gap:0;
    background:var(--paper);border-bottom:1px solid var(--line);
    padding:8px var(--gutter) 24px;margin:0;
    max-height:calc(100dvh - 60px);overflow:auto;
    display:none;
  }
  .nav.is-open .nav__links{display:flex}
  .nav__links a{
    padding:16px 0;border-bottom:1px solid var(--line);
    font-size:1.35rem;font-family:var(--display);font-weight:700;letter-spacing:-.02em;
  }
  .nav__links a[aria-current="page"]{border-bottom-color:var(--yellow)}
  .nav__cta{display:none}
  .nav__mobile-cta{display:block;color:var(--ink)}
}
@media (max-width:420px){.nav__logo img{height:22px}}

/* ---------- 9. Footer ---------- */
.footer{border-top:1px solid var(--line);margin-top:0;background:var(--paper-2)}
.pitch-band + .footer{margin-top:0;border-top:0}
.sep{opacity:.45}
.footer__top{
  display:grid;grid-template-columns:minmax(240px,1.15fr) 2.6fr;
  gap:clamp(28px,5vw,72px);padding-block:clamp(48px,6vw,72px);
}
.footer__brand img{height:28px;width:auto}
.footer__cols{display:grid;grid-template-columns:repeat(4,1fr);gap:28px}
.footer__col{display:grid;gap:10px;align-content:start}
.footer__col b{
  font-family:var(--pixel);font-size:10px;letter-spacing:.06em;
  text-transform:uppercase;color:var(--ink);font-weight:400;margin-bottom:4px;
}
.footer__col a{color:var(--muted);text-decoration:none;font-size:15px}
.footer__col a:hover{color:var(--ink);text-decoration:underline;text-underline-offset:3px}
.footer__bottom{
  border-top:1px solid var(--line);
  padding-block:20px 26px;
  display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap;
}
.footer__swatches{display:flex;gap:5px;margin-top:14px}
.footer__swatches i{width:14px;height:14px;border:1px solid var(--ink);display:block}
@media (max-width:900px){
  .footer__top{grid-template-columns:1fr}
  .footer__cols{grid-template-columns:repeat(2,1fr);gap:26px 20px}
}

/* ---------- 10. Hero ---------- */
/* text left 7 cols, the numbers stacked right 4 cols with rule 06 stamped
   under them; on narrow screens the aside drops below the text. */
.hero{padding-block:clamp(56px,9vw,116px) clamp(48px,7vw,96px)}
.hero__text{grid-column:1/8}
.hero__aside{grid-column:9/13;align-self:end;padding-bottom:6px}
.hero h1{margin-top:20px}
.hero .lead{margin-top:22px}
.hero .btn-row{margin-top:32px}
.stat{padding-block:18px;border-top:1px solid var(--line)}
.stat:first-child{border-top:0;padding-top:0}
.stat:last-of-type{padding-bottom:0}
.stat__num{
  font-family:var(--display);font-weight:700;
  font-size:clamp(2.1rem,3.4vw,2.9rem);line-height:1;letter-spacing:-.04em;display:block;
}
.stat__label{
  font-family:var(--pixel);font-size:10px;line-height:1.7;letter-spacing:.05em;
  text-transform:uppercase;color:var(--muted);display:block;margin-top:10px;max-width:21ch;
}
/* house rule 06, stamped under the numbers; flattens on hover */
.hero__stamp{
  display:block;width:max-content;max-width:22ch;margin:26px 0 0 auto;
  font-family:var(--pixel);font-size:9px;line-height:1.8;letter-spacing:.06em;text-transform:uppercase;
  color:var(--ink);text-decoration:none;text-align:center;
  padding:10px 12px 9px;border:2px solid var(--ink);opacity:.92;
  transform:rotate(-3deg);transition:transform .16s ease,background-color .16s ease,opacity .16s ease;
}
.hero__stamp-label{display:block;color:var(--muted);font-size:8px;margin-bottom:5px}
.hero__stamp:hover,.hero__stamp:focus-visible{transform:rotate(0);opacity:1;background:var(--yellow);color:#141414;outline:0}
.hero__stamp:hover .hero__stamp-label,.hero__stamp:focus-visible .hero__stamp-label{color:#141414}
@media (prefers-reduced-motion:reduce){.hero__stamp{transition:none}}
@media (max-width:900px){
  .hero__text{grid-column:1/-1}
  .hero__aside{grid-column:1/-1;margin-top:44px;padding-top:0}
  .stat:first-child{border-top:1px solid var(--line);padding-top:18px}
  .hero__stamp{margin:22px 0 0;transform:rotate(-2deg)}
}
@media (max-width:460px){.eyebrow__place{display:none}}

/* ---------- 11. Pitch band ---------- */
.pitch-band{background:var(--yellow);color:#141414;border-block:1px solid #141414}
.pitch-band .wrap{
  display:grid;grid-template-columns:1.05fr 1fr;gap:clamp(32px,6vw,80px);
  padding-block:clamp(48px,7vw,88px);
}
.pitch-band .eyebrow{color:#141414}
.pitch-band .eyebrow::before{background:#141414;border-color:#141414}
.pitch-band h2{margin-top:16px}
.pitch-band p{margin-top:18px;max-width:40ch;font-size:1.08rem}
.pitch-band .btn{border-color:#141414;color:#141414}
.pitch-band .btn-primary{background:#141414;color:var(--yellow);box-shadow:4px 4px 0 rgba(20,20,20,.3)}
.pitch-band .btn-primary:hover{box-shadow:6px 6px 0 rgba(20,20,20,.3)}
.pitch-band .btn-secondary:hover{background:#141414;color:var(--yellow)}
.steps{list-style:none;padding:0;margin:0;display:grid;align-content:center}
.steps li{
  display:grid;grid-template-columns:auto 1fr;gap:16px;align-items:baseline;
  padding-block:16px;border-top:1px solid rgba(20,20,20,.3);
}
.steps li:first-child{border-top:0;padding-top:0}
.steps b{font-family:var(--pixel);font-size:10px;font-weight:400;letter-spacing:.05em}
.steps span{font-size:1rem;line-height:1.5}
@media (max-width:820px){.pitch-band .wrap{grid-template-columns:1fr}}

/* ---------- 12. Tool list (home + hub) ---------- */
.tool-list{display:grid;border-top:1px solid var(--line)}
.tool-row{
  display:grid;grid-template-columns:auto 1fr auto;gap:clamp(16px,3vw,32px);
  align-items:center;padding:22px 4px;
  border-bottom:1px solid var(--line);
  text-decoration:none;color:inherit;
  transition:padding .16s ease,background-color .16s ease;
}
.tool-row:hover{background:var(--shade);padding-left:14px}
.tool-row__idx{font-family:var(--pixel);font-size:10px;color:var(--muted);letter-spacing:.05em}
.tool-row__idx::before{content:"";display:block;width:10px;height:10px;background:var(--accent);border:1px solid var(--ink);margin-bottom:10px}
.tool-row h3{font-size:1.22rem}
.tool-row p{color:var(--muted);font-size:15px;margin-top:5px;max-width:60ch}
.tool-row__go{font-family:var(--pixel);font-size:10px;color:var(--ink);letter-spacing:.05em;white-space:nowrap}
@media (max-width:620px){
  .tool-row{grid-template-columns:auto 1fr;gap:16px}
  .tool-row__go{display:none}
}

/* ---------- 13. Prose ---------- */
.prose{max-width:720px;font-size:1.06rem;line-height:1.68}
.prose > * + *{margin-top:1.25em}
.prose h2{font-size:1.75rem;margin-top:2em;letter-spacing:-.025em}
.prose h3{font-size:1.3rem;margin-top:1.8em}
.prose h4{font-size:1.1rem;margin-top:1.6em}
.prose p{color:var(--ink-soft)}
.prose a{color:var(--ink);text-decoration:underline;text-decoration-color:var(--yellow);text-decoration-thickness:2px;text-underline-offset:3px}
.prose a:hover{background:var(--yellow);color:#141414;text-decoration-color:transparent}
.prose ul,.prose ol{padding-left:1.3em;color:var(--ink-soft);display:grid;gap:.5em}
.prose li::marker{color:var(--muted)}
.prose blockquote{
  margin-left:0;margin-right:0;padding:4px 0 4px 24px;
  border-left:3px solid var(--accent);
  font-family:var(--display);font-weight:700;font-size:1.4rem;line-height:1.24;
  letter-spacing:-.02em;color:var(--ink);
}
.prose blockquote p{color:inherit;font-size:inherit}
.prose code{
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size:.86em;background:var(--shade);border:1px solid var(--line);padding:1px 5px;
}
.prose pre{
  background:var(--paper-3);border:1px solid var(--line);padding:18px 20px;
  overflow-x:auto;font-size:.86rem;line-height:1.5;
}
.prose pre code{background:none;border:0;padding:0}
.prose img{border:1px solid var(--line)}
.prose figure{margin:2em 0}
.prose figcaption{font-size:13px;color:var(--muted);margin-top:10px}
.prose hr{margin-block:2.4em;border-top:1px solid var(--line)}
.prose table{width:100%;border-collapse:collapse;font-size:.95rem}
.prose th,.prose td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--line)}
.prose th{
  font-family:var(--pixel);font-size:10px;font-weight:400;letter-spacing:.05em;
  text-transform:uppercase;color:var(--muted);border-bottom-color:var(--line-strong);
}

/* stat block that can appear inside post body_html */
.kpi{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));
  border:1px solid var(--line);border-left:3px solid var(--accent);
  background:var(--paper-2);margin-block:2em;
}
.kpi > div{padding:18px 20px;border-left:1px solid var(--line)}
.kpi > div:first-child{border-left:0}
.kpi b,.kpi strong{
  display:block;font-family:var(--display);font-weight:700;
  font-size:1.7rem;letter-spacing:-.03em;line-height:1;
}
.kpi span,.kpi em{
  display:block;margin-top:8px;font-family:var(--pixel);font-style:normal;
  font-size:10px;line-height:1.7;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);
}
@media (max-width:520px){
  .kpi > div{border-left:0;border-top:1px solid var(--line)}
  .kpi > div:first-child{border-top:0}
}

/* ---------- 14. Panels, notices, callouts ---------- */
.panel{background:var(--paper-2);border:1px solid var(--line);padding:clamp(20px,3vw,28px)}
.panel--flat{background:transparent}
.notice{
  border:1px solid var(--line-strong);border-left:3px solid var(--ui);
  background:var(--paper-2);padding:14px 18px;font-size:15px;color:var(--ink-soft);
}
.notice--success{border-left-color:var(--green)}
.notice--error{border-left-color:var(--red)}
.notice--info{border-left-color:var(--blue)}
.callout{
  border:1px solid var(--line);border-left:3px solid var(--accent);
  background:var(--paper-2);padding:16px 18px;font-size:15px;line-height:1.55;color:var(--ink-soft);
}
.callout b{color:var(--ink)}
.callout--green{border-left-color:var(--green)}
.callout--blue{border-left-color:var(--blue)}
.callout--red{border-left-color:var(--red)}
.callout--yellow{border-left-color:var(--yellow)}
.flash-wrap{padding-top:20px}

/* ---------- 15. Forms ---------- */
.field{display:grid;gap:7px;align-content:start}
/* form labels are sans, not pixel: the pixel face is reserved for micro-labels */
.field > label:not(.checkbox),.label{
  font-size:11.5px;font-weight:600;line-height:1.5;letter-spacing:.07em;
  text-transform:uppercase;color:var(--muted);
}
.field > label .req{color:var(--red);margin-left:2px}
.field small,.hint{font-size:13px;color:var(--muted);line-height:1.45}
input[type=text],input[type=email],input[type=url],input[type=number],input[type=date],input[type=password],select,textarea{
  width:100%;
  background:var(--paper-3);
  border:1px solid var(--line-strong);
  color:var(--ink);
  padding:11px 13px;
  font-size:16px;
  transition:border-color .14s ease;
}
textarea{resize:vertical;line-height:1.55;min-height:96px}
input:hover,select:hover,textarea:hover{border-color:var(--ink)}
input:focus,select:focus,textarea:focus{border-color:var(--ink);outline:3px solid var(--yellow);outline-offset:1px}
input::placeholder,textarea::placeholder{color:var(--muted);opacity:.75}
select{
  appearance:none;
  background-image:linear-gradient(45deg,transparent 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,transparent 50%);
  background-position:calc(100% - 19px) 55%,calc(100% - 13px) 55%;
  background-size:6px 6px,6px 6px;background-repeat:no-repeat;
  padding-right:40px;
}
.field-error{font-size:13px;color:var(--red);font-weight:600;display:flex;gap:7px;align-items:baseline}
.field-error::before{content:"";width:6px;height:6px;background:var(--red);flex:none;transform:translateY(-1px)}
.field.is-invalid input,.field.is-invalid select,.field.is-invalid textarea{border-color:var(--red)}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.form-grid .span-2{grid-column:1/-1}
@media (max-width:620px){.form-grid{grid-template-columns:1fr}}

.checkbox{display:grid;grid-template-columns:auto 1fr;gap:13px;align-items:start;cursor:pointer}
.checkbox input[type=checkbox],.checkbox input[type=radio]{
  appearance:none;width:20px;height:20px;flex:none;margin:2px 0 0;
  border:2px solid var(--ink);background:var(--paper-3);cursor:pointer;display:grid;place-items:center;
}
.checkbox input[type=radio]{border-radius:50%}
.checkbox input:checked{background:var(--yellow)}
.checkbox input[type=checkbox]:checked::after{
  content:"";width:10px;height:6px;border:2px solid #141414;border-top:0;border-right:0;
  transform:rotate(-45deg) translate(1px,-2px);
}
.checkbox input[type=radio]:checked::after{content:"";width:8px;height:8px;border-radius:50%;background:#141414}
.checkbox .t{font-size:15px;line-height:1.45;color:var(--ink)}
.checkbox .d{font-size:13px;color:var(--muted);display:block;margin-top:3px}

input[type=range]{
  -webkit-appearance:none;appearance:none;width:100%;background:transparent;padding:0;border:0;height:24px;
}
input[type=range]::-webkit-slider-runnable-track{height:4px;background:var(--line-strong)}
input[type=range]::-moz-range-track{height:4px;background:var(--line-strong)}
input[type=range]::-webkit-slider-thumb{
  -webkit-appearance:none;width:18px;height:18px;background:var(--yellow);
  border:2px solid var(--ink);margin-top:-7px;cursor:pointer;
}
input[type=range]::-moz-range-thumb{width:14px;height:14px;background:var(--yellow);border:2px solid var(--ink);cursor:pointer;border-radius:0}
.unit{display:grid;grid-template-columns:1fr auto;gap:14px;align-items:center}
.unit output,.unit .val{
  font-family:var(--pixel);font-size:10px;letter-spacing:.05em;color:var(--ink);
  min-width:46px;text-align:right;
}
fieldset{border:0;padding:0;margin:0}
legend{padding:0}

/* honeypot */
.hp{position:absolute!important;left:-9999px;width:1px;height:1px;overflow:hidden}

/* ---------- 16. Two-column layout ---------- */
.split{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:clamp(28px,4vw,56px);align-items:start}
.split--wide-aside{grid-template-columns:minmax(0,1fr) 380px}
.split--narrow-aside{grid-template-columns:minmax(0,1fr) 300px}
.sticky{position:sticky;top:92px;display:grid;gap:20px}
@media (max-width:959px){
  .split,.split--wide-aside,.split--narrow-aside{grid-template-columns:1fr}
  .sticky{position:static}
}

/* result panel */
.result{border:1px solid var(--ink);background:var(--paper-2);display:grid}
.result__row{padding:16px 20px;border-top:1px solid var(--line)}
.result__row:first-child{border-top:0}
.result__lbl{
  font-family:var(--pixel);font-size:10px;line-height:1.7;letter-spacing:.05em;
  text-transform:uppercase;color:var(--muted);display:block;
}
.result__big{
  font-family:var(--display);font-weight:700;letter-spacing:-.03em;
  font-size:clamp(1.8rem,3vw,2.4rem);line-height:1.05;margin-top:6px;display:block;
}
.result__foot{padding:14px 20px;border-top:1px solid var(--line);display:flex;gap:10px;flex-wrap:wrap}
.c-green{color:#1f8f2b}
.c-red{color:#c81f1f}
.c-blue{color:#0a7fb5}
.c-orange{color:#a85d00}
:root[data-theme="dark"] .c-green{color:var(--green)}
:root[data-theme="dark"] .c-red{color:#ff6a6a}
:root[data-theme="dark"] .c-blue{color:var(--blue)}
:root[data-theme="dark"] .c-orange{color:var(--orange)}

/* segmented control */
.seg{display:inline-flex;border:1px solid var(--line-strong);flex-wrap:wrap}
.seg button{
  background:transparent;border:0;border-left:1px solid var(--line-strong);
  padding:9px 14px;font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;
  cursor:pointer;color:var(--muted);
}
.seg button:first-child{border-left:0}
.seg button:hover{color:var(--ink);background:var(--shade)}
.seg button.is-on{background:var(--yellow);color:#141414}

/* progress bar */
.progress{height:8px;background:var(--line);border:1px solid var(--line-strong)}
.progress i{display:block;height:100%;background:var(--yellow);transition:width .25s ease}
.bar{height:6px;background:var(--line);position:relative;overflow:hidden}
.bar i{display:block;height:100%;background:var(--accent)}

/* ---------- 17. Breadcrumbs + page head ---------- */
.crumbs{display:flex;gap:9px;align-items:center;font-size:12px;color:var(--muted);flex-wrap:wrap}
.crumbs a{color:var(--muted);text-decoration:none}
.crumbs a:hover{color:var(--ink);text-decoration:underline;text-underline-offset:3px}
.crumbs .sep{opacity:.5}
.page-head{padding-block:clamp(40px,6vw,72px) clamp(28px,4vw,44px);border-bottom:1px solid var(--line)}
.page-head h1{margin-top:18px}
.page-head .lead{margin-top:18px}
.page-head__meta{display:flex;gap:18px;flex-wrap:wrap;align-items:center;margin-top:22px}

/* ---------- 18. Game detail ---------- */
.game-hero__media{
  position:relative;width:100%;aspect-ratio:1920/620;min-height:200px;max-height:460px;
  overflow:hidden;background:var(--accent);border-bottom:1px solid var(--ink);
}
.game-hero__media img{width:100%;height:100%;object-fit:cover}
/* A banner narrower than the band is shown whole instead of cropped: the
   store capsule is 2.14:1 against a band that is 3:1 or flatter, and the
   crop takes the game's logo with it. Games with real 1920x620 key art are
   untouched and still bleed edge to edge. */
.game-hero__media--plate{background:var(--paper-2)}
.game-hero__media--plate img{object-fit:contain}
.game-hero__media .tile span{font-size:clamp(3rem,9vw,7rem)}
.game-hero__title{
  position:relative;margin-top:-40px;
  display:inline-block;background:var(--paper);
  border:1px solid var(--ink);
  padding:20px 26px 18px;max-width:min(100%,860px);
}
.game-hero__title h1{font-size:clamp(2rem,5vw,3.4rem);line-height:.98;letter-spacing:-.04em}
.game-hero__title .eyebrow{margin-bottom:12px}
.game-meta-line{display:flex;gap:10px 20px;flex-wrap:wrap;align-items:center;margin-top:16px;color:var(--muted);font-size:15px}
@media (max-width:620px){
  /* The art's own shape, handed down as --band-ar by game.ejs. A phone is
     narrow enough that a fixed 16/9 band would centre-crop a 3:1 banner to
     57% of its width; min-height has to go with it or it forces the crop
     back. Art we could not measure keeps the old 16/9. */
  .game-hero__media{aspect-ratio:var(--band-ar,16/9);min-height:0}
  .game-hero__title{margin-top:-26px;padding:16px 18px 14px;display:block}
}

.factpanel{border:1px solid var(--ink);background:var(--paper-2)}
.factpanel__sec{padding:18px 20px;border-top:1px solid var(--line)}
.factpanel__sec:first-child{border-top:0}
.fact{display:grid;grid-template-columns:auto 1fr;gap:9px 16px;align-items:baseline;margin:0}
.fact dt{
  font-family:var(--pixel);font-size:10px;line-height:1.8;letter-spacing:.05em;
  text-transform:uppercase;color:var(--muted);
}
.fact dd{margin:0;font-size:15px;text-align:right;color:var(--ink)}
.store-btns{display:grid;gap:9px}
.store-btn{
  display:flex;align-items:center;gap:11px;
  border:1px solid var(--line-strong);padding:11px 14px;
  text-decoration:none;font-size:14px;font-weight:500;color:var(--ink);
  transition:border-color .14s ease,background-color .14s ease;
}
.store-btn svg{width:16px;height:16px;fill:currentColor;flex:none}
.store-btn:hover{border-color:var(--ink);background:var(--shade)}
.store-btn .go{margin-left:auto;font-size:11px;color:var(--muted)}
.price{font-family:var(--display);font-weight:700;font-size:1.9rem;letter-spacing:-.03em;line-height:1}
.price .was{font-size:.9rem;font-weight:400;font-family:var(--body);color:var(--muted);text-decoration:line-through;margin-left:8px}
.discount{background:var(--green);color:#141414;font-weight:600;font-size:12px;padding:2px 6px;margin-left:8px;border:1px solid var(--ink)}
.reviewbar{margin-top:12px}
.reviewbar .bar{margin-bottom:9px}
.genre-pills{display:flex;flex-wrap:wrap;gap:7px}

.shots{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:20px}
.shots button{
  padding:0;border:1px solid var(--line);background:var(--paper-2);cursor:pointer;
  aspect-ratio:16/9;overflow:hidden;transition:border-color .14s ease,transform .14s ease,box-shadow .14s ease;
}
.shots button:hover{border-color:var(--ink);transform:translate(-2px,-2px);box-shadow:4px 4px 0 var(--ink)}
.shots img{width:100%;height:100%;object-fit:cover}
@media (max-width:620px){.shots{grid-template-columns:repeat(2,1fr)}}

.embed{position:relative;aspect-ratio:16/9;border:1px solid var(--line);background:#000;margin-top:20px}
.embed iframe,.embed video{position:absolute;inset:0;width:100%;height:100%;border:0}

dialog.lightbox{
  border:0;padding:0;background:transparent;
  max-width:100vw;max-height:100vh;width:100%;height:100%;
}
dialog.lightbox::backdrop{background:rgba(10,10,10,.92)}
.lightbox__in{width:100%;height:100%;display:grid;grid-template-rows:1fr auto;gap:14px;padding:20px}
.lightbox__stage{display:grid;place-items:center;min-height:0}
.lightbox__stage img{max-width:100%;max-height:100%;object-fit:contain;border:1px solid rgba(255,255,255,.2)}
.lightbox__bar{display:flex;align-items:center;justify-content:center;gap:14px;color:#f1ede4}
.lightbox__bar .micro{color:rgba(241,237,228,.72)}
.lightbox__bar button{
  background:transparent;border:1px solid rgba(241,237,228,.4);color:#f1ede4;
  width:40px;height:40px;display:grid;place-items:center;cursor:pointer;
}
.lightbox__bar button:hover{background:rgba(241,237,228,.12)}
.lightbox__bar svg{width:16px;height:16px;fill:currentColor}

/* ---------- 19. Blog ---------- */
.post-head{max-width:720px}
.post-head h1{font-size:clamp(2.1rem,4.6vw,3.3rem);margin-top:20px}
.post-meta{display:flex;gap:10px 16px;flex-wrap:wrap;align-items:center;font-size:13px;color:var(--muted)}
.post-meta .sep{opacity:.5}
.byline{display:flex;align-items:center;gap:14px;padding-top:22px;border-top:1px solid var(--line);margin-top:48px;max-width:720px}
.byline .avatar{
  width:40px;height:40px;flex:none;background:var(--accent);border:1px solid var(--ink);
  display:grid;place-items:center;font-family:var(--display);font-weight:700;color:var(--on-accent);font-size:15px;
}

/* ---------- 20. Manifesto / audiences (about) ---------- */
.rules{list-style:none;counter-reset:r;padding:0;margin:0;border-top:1px solid var(--line)}
.rules li{
  counter-increment:r;
  display:grid;grid-template-columns:88px 1fr;gap:clamp(16px,3vw,40px);
  padding-block:28px;border-bottom:1px solid var(--line);align-items:start;
}
.rules li::before{
  /* the word comes from the markup (data-label) so it can be translated */
  content:attr(data-label) " " counter(r,decimal-leading-zero);
  font-family:var(--pixel);font-size:10px;line-height:1.8;letter-spacing:.05em;
  text-transform:uppercase;color:var(--muted);padding-top:5px;
}
.rules h3{font-size:1.32rem;letter-spacing:-.02em}
.rules p{color:var(--muted);margin-top:9px;max-width:62ch}
@media (max-width:620px){
  .rules li{grid-template-columns:1fr;gap:10px;padding-block:22px}
  .rules li::before{padding-top:0}
}
.audiences{display:grid;grid-template-columns:1fr 1fr;border-top:1px solid var(--line)}
.audience{padding:28px 0;border-bottom:1px solid var(--line);display:grid;gap:10px;align-content:start}
.audience:nth-child(odd){padding-right:clamp(20px,4vw,56px)}
.audience:nth-child(even){padding-left:clamp(20px,4vw,56px);border-left:1px solid var(--line)}
.audience h3{font-size:1.28rem}
.audience p{color:var(--muted);font-size:15.5px}
@media (max-width:760px){
  .audiences{grid-template-columns:1fr}
  .audience,.audience:nth-child(odd),.audience:nth-child(even){padding-inline:0;border-left:0}
}

/* ---------- 21. Checklist tool ---------- */
.check-group{border:1px solid var(--line);background:var(--paper-2);margin-bottom:14px}
.check-group summary{
  list-style:none;cursor:pointer;padding:15px 18px;
  display:flex;align-items:center;justify-content:space-between;gap:14px;
  font-family:var(--display);font-weight:700;font-size:1.08rem;letter-spacing:-.02em;
}
.check-group summary::-webkit-details-marker{display:none}
.check-group summary:hover{background:var(--shade)}
.check-group summary .lhs{display:flex;align-items:center;gap:11px}
.check-group summary .sw{width:11px;height:11px;flex:none;border:1px solid var(--ink)}
.check-group .count{font-family:var(--pixel);font-size:10px;letter-spacing:.05em;color:var(--muted);font-weight:400}
.check{
  display:grid;grid-template-columns:auto 1fr;gap:13px;align-items:start;
  padding:14px 18px;border-top:1px solid var(--line);cursor:pointer;
}
.check:hover{background:var(--shade)}
.check.done .t{color:var(--muted);text-decoration:line-through;text-decoration-color:var(--line-strong)}
.check .t{font-size:15px;line-height:1.45;display:block}
.check .d{font-size:13px;color:var(--muted);display:block;margin-top:4px}
.check input[type=checkbox]{
  appearance:none;width:19px;height:19px;flex:none;margin:1px 0 0;
  border:2px solid var(--ink);background:var(--paper-3);cursor:pointer;display:grid;place-items:center;
}
.check input:checked{background:var(--yellow)}
.check input:checked::after{
  content:"";width:9px;height:5px;border:2px solid #141414;border-top:0;border-right:0;
  transform:rotate(-45deg) translate(1px,-2px);
}

/* ---------- 22. Data table ---------- */
.table-wrap{overflow-x:auto;border:1px solid var(--line);background:var(--paper-2)}
table.data{width:100%;border-collapse:collapse;font-size:15px;min-width:640px}
table.data th{
  text-align:left;padding:12px 16px;border-bottom:1px solid var(--ink);
  font-family:var(--pixel);font-size:10px;font-weight:400;letter-spacing:.05em;
  text-transform:uppercase;color:var(--muted);white-space:nowrap;
}
table.data td{padding:13px 16px;border-bottom:1px solid var(--line);vertical-align:top}
table.data tr:last-child td{border-bottom:0}
table.data tbody tr:hover{background:var(--shade)}
table.data .num{font-variant-numeric:tabular-nums;white-space:nowrap}

/* ---------- 23. Asset cards ---------- */
.asset{border:1px solid var(--line);background:var(--paper-2);padding:16px;display:grid;gap:9px;align-content:start}
.asset__ratio{
  aspect-ratio:var(--r,3/2);
  /* keep the true ratio: cap the height at 150px by capping the width instead */
  width:min(100%,calc(150px * var(--ar,1.5)));
  border:1px dashed var(--line-strong);background:var(--shade);
  display:grid;place-items:center;
  font-family:var(--pixel);font-size:10px;color:var(--muted);letter-spacing:.05em;
}
.asset__name{font-family:var(--display);font-weight:700;font-size:1.05rem;letter-spacing:-.02em}
.asset__size{font-variant-numeric:tabular-nums;font-weight:600;font-size:15px}
.asset__note{font-size:13.5px;color:var(--muted);line-height:1.45}
.copy{
  margin-top:4px;justify-self:start;
  background:transparent;border:1px solid var(--line-strong);
  padding:7px 12px;font-size:11px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;
  cursor:pointer;color:var(--ink-soft);
}
.copy:hover{border-color:var(--ink);color:var(--ink);background:var(--shade)}
.copy.is-copied{background:var(--yellow);color:#141414;border-color:var(--ink)}

/* ---------- 24. Timeline ---------- */
.tl{display:grid;border-left:1px solid var(--line-strong);margin-left:6px}
.tl__item{position:relative;padding:0 0 26px 26px}
.tl__item::before{
  content:"";position:absolute;left:-5px;top:6px;width:9px;height:9px;
  background:var(--paper);border:1px solid var(--ink);
}
.tl__item.is-launch::before{background:var(--yellow);width:13px;height:13px;left:-7px}
.tl__item.is-past{opacity:.5}
.tl__when{font-family:var(--pixel);font-size:10px;letter-spacing:.05em;color:var(--muted)}
.tl__title{font-family:var(--display);font-weight:700;font-size:1.1rem;letter-spacing:-.02em;margin-top:7px}
.tl__item.is-launch .tl__title{font-size:1.5rem}
.tl__desc{font-size:14.5px;color:var(--muted);margin-top:5px;max-width:62ch;line-height:1.5}

/* ---------- 25. Pitch form ---------- */
.pitchform{max-width:680px}
.stepbar{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:40px}
.stepbar div{padding-top:11px;border-top:3px solid var(--line)}
.stepbar div.is-on{border-top-color:var(--yellow)}
.stepbar .n{font-family:var(--pixel);font-size:10px;letter-spacing:.05em;color:var(--muted);display:block}
.stepbar .t{font-size:14px;font-weight:600;display:block;margin-top:5px}
.fset{padding-block:34px;border-top:1px solid var(--line)}
.fset:first-of-type{border-top:0;padding-top:0}
.fset__head{display:grid;gap:6px;margin-bottom:24px}
.fset__head h2{font-size:1.5rem}
.counter{font-variant-numeric:tabular-nums}
.counter.is-near{color:var(--orange)}
.counter.is-over{color:var(--red)}

/* ---------- 26. Error pages ---------- */
.errpage{min-height:52vh;display:grid;align-content:center;gap:22px;padding-block:clamp(60px,10vw,120px)}
.errpage .code{
  font-family:var(--display);font-weight:700;letter-spacing:-.05em;
  font-size:clamp(5rem,17vw,11rem);line-height:.8;
}

/* ---------- 27. Misc ---------- */
.count-line{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:26px}
.count-line .rule{flex:1;min-width:40px}
.mt-1{margin-top:8px}.mt-2{margin-top:16px}.mt-3{margin-top:24px}.mt-4{margin-top:32px}.mt-5{margin-top:48px}

/* ---------- 28. Language switcher (CONTRACT-v3 §4) ---------- */
/* A <details>/<summary> dropdown: works with JavaScript off, closes on Escape
   because that is what <details> already does. */
.lang{position:relative;flex:none}
.lang > summary{
  display:flex;align-items:center;gap:7px;cursor:pointer;list-style:none;
  border:1px solid var(--line-strong);background:none;color:var(--muted);
  padding:7px 10px;font-family:var(--body);font-weight:600;font-size:12px;letter-spacing:.02em;
  min-height:36px;
}
.lang > summary::-webkit-details-marker{display:none}
.lang > summary:hover{color:var(--ink);background:var(--shade)}
.lang > summary:focus-visible{outline:3px solid var(--yellow);outline-offset:2px}
.lang__code{font-family:var(--pixel);font-size:9px;letter-spacing:.05em;line-height:1;color:var(--ink)}
.lang__label{white-space:nowrap}
.lang__chev{width:13px;height:13px;flex:none;transition:transform .15s ease}
.lang[open] > summary .lang__chev{transform:rotate(180deg)}
.lang[open] > summary{color:var(--ink);background:var(--shade)}

.lang__list{
  position:absolute;z-index:60;top:calc(100% + 6px);right:0;min-width:172px;
  margin:0;padding:6px 0;list-style:none;
  background:var(--paper-3);border:1px solid var(--line-strong);
  box-shadow:4px 4px 0 var(--ink);
}
.lang__list a{
  display:flex;align-items:center;gap:10px;padding:8px 13px;
  text-decoration:none;color:var(--ink-soft);font-size:14px;font-weight:500;
}
.lang__list a:hover{background:var(--shade);color:var(--ink)}
.lang__list a:focus-visible{outline:3px solid var(--yellow);outline-offset:-3px}
.lang__list a[aria-current="true"]{background:var(--yellow);color:#141414}
.lang__list a[aria-current="true"] .lang__code{color:#141414}
.lang__list .lang__code{min-width:20px;color:var(--muted)}

/* footer variant: opens upward, sits inline in the bottom row */
.lang--inline > summary{border-color:var(--line);padding:5px 9px;min-height:30px}
.lang--inline .lang__list{top:auto;bottom:calc(100% + 6px);left:0;right:auto;box-shadow:4px -4px 0 var(--ink)}

@media (max-width:900px){
  .lang__label{display:none}
  .lang > summary{padding:7px 8px}
}

.badge-en{
  font-family:var(--pixel);font-size:9px;letter-spacing:.05em;line-height:1;
  padding:6px 7px;border:1px solid var(--line-strong);color:var(--muted);white-space:nowrap;
}
/* Anything longer than a two-letter code, or in a script the pixel face has no
   glyphs for, takes the body face instead. */
.badge-en--text{
  font-family:var(--body);font-weight:500;font-size:12px;letter-spacing:0;line-height:1.4;
  padding:5px 9px;white-space:normal;
}

/* ---------- 29. Gamedev Pro Tip ---------- */
/* the pill cluster on the left of a split page-head meta row */
.page-head__pills{display:flex;align-items:center;gap:14px;flex-wrap:wrap}

.tip-list{display:grid;border-top:1px solid var(--line)}
.tip-card{
  display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:22px;align-items:center;
  padding:22px 0;border-bottom:1px solid var(--line);
  text-decoration:none;color:inherit;transition:background .15s ease,padding-left .15s ease;
}
.tip-card:hover{background:var(--shade);padding-left:14px}
.tip-card__num{
  font-family:var(--pixel);font-size:clamp(13px,1.7vw,17px);line-height:1;color:var(--ink);
  letter-spacing:.02em;min-width:66px;
}
.tip-card__main{display:grid;gap:9px;min-width:0}
.tip-card__title{
  font-family:var(--display);font-weight:700;font-size:clamp(1.12rem,2vw,1.42rem);
  letter-spacing:-.025em;line-height:1.15;display:block;
}
.tip-card__meta{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.tip-card__tags{display:flex;gap:7px;flex-wrap:wrap}
.tip-card__go{font-family:var(--pixel);font-size:10px;letter-spacing:.05em;color:var(--ink);white-space:nowrap}
.tip-card--compact{padding:18px 0}
.tip-card--compact .tip-card__title{font-size:1.12rem}
@media (max-width:620px){
  .tip-card{grid-template-columns:1fr;gap:10px;padding:18px 0}
  .tip-card__go{display:none}
  .tip-card__num{min-width:0}
}

.chip--static{pointer-events:none}
.chip__n{font-family:var(--pixel);font-size:9px;color:var(--muted);margin-left:6px}
.chip[aria-current="true"] .chip__n,.chip.is-on .chip__n{color:#141414}

.tip-head{display:flex;gap:clamp(18px,3vw,34px);align-items:flex-start}
.tip-head__num{
  font-family:var(--pixel);font-size:clamp(15px,2.4vw,22px);line-height:1;color:#141414;
  padding:14px 12px;border:1px solid var(--ink);background:var(--yellow);flex:none;
}
.tip-head__main{min-width:0}
.tip-head__main h1{margin-top:16px}
.tip-head__row{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:24px}
@media (max-width:620px){
  .tip-head{flex-direction:column;gap:16px}
}
.tip-figure{margin:36px 0 0}
.tip-figure img{width:100%;border:1px solid var(--line)}

.tip-nav{display:grid;grid-template-columns:1fr 1fr;gap:clamp(16px,2vw,26px)}
.tip-nav__side{
  display:grid;gap:9px;align-content:start;padding:20px 22px;
  border:1px solid var(--line);background:var(--paper-2);text-decoration:none;color:inherit;
  transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease;
}
a.tip-nav__side:hover{border-color:var(--ink);transform:translate(-2px,-2px);box-shadow:4px 4px 0 var(--ink)}
.tip-nav__side--next{text-align:right}
.tip-nav > .tip-nav__side:only-child{grid-column:1 / -1;text-align:left}
.tip-nav__side.is-off{opacity:.5;background:transparent;border-style:dashed}
.tip-nav__title{font-family:var(--display);font-weight:700;font-size:1.1rem;letter-spacing:-.02em;line-height:1.2}
@media (max-width:620px){
  .tip-nav{grid-template-columns:1fr}
  .tip-nav__side--next{text-align:left}
}


/* ---------- 30. The wire ---------- */
.wire{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:clamp(20px,3vw,40px);align-items:start}
.wire-col{min-width:0}
.wire-col__head{
  display:grid;gap:5px;padding-bottom:14px;margin-bottom:6px;
  border-bottom:2px solid var(--ink);
}
.wire-col__head h2{margin:0}
.wire-col__handle{
  font-family:var(--pixel);font-size:10px;letter-spacing:.05em;color:var(--muted);text-decoration:none;
  justify-self:start;
}
.wire-col__handle:hover{color:var(--ink)}
.wire-col__note{color:var(--muted)}
.wire-col__items{display:grid}

.wire-item{padding:20px 0;border-bottom:1px solid var(--line);display:grid;gap:10px;align-content:start}
.wire-item__top{display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;margin:0}
.wire-item__who{font-weight:600;font-size:14px}
.wire-item__handle,.wire-item__when{
  font-family:var(--pixel);font-size:9px;letter-spacing:.05em;color:var(--muted);
}
.wire-item__when{margin-left:auto;white-space:nowrap}
.wire-item__body{font-size:15.5px;line-height:1.55;color:var(--ink-soft);overflow-wrap:anywhere;margin:0}
.wire-item__body--plain{white-space:pre-line}
.wire-item__body p{margin:0}
.wire-item__body p + p{margin-top:.7em}
.wire-item__body a{color:var(--ink);text-decoration:underline;text-decoration-color:var(--yellow);text-decoration-thickness:2px;text-underline-offset:3px}
.wire-item__img{width:100%;border:1px solid var(--line);display:block}
.wire-item__foot{margin:0}
.wire-item__foot .arrow-link{font-size:12px}
.wire-item--compact .wire-item__body{font-size:15px}

.wire-strip{display:grid;grid-template-columns:repeat(3,1fr);gap:0 clamp(20px,3vw,40px);border-top:1px solid var(--line)}
@media (max-width:900px){.wire-strip{grid-template-columns:repeat(2,1fr)}}
@media (max-width:620px){.wire-strip{grid-template-columns:1fr}}

/* ---------- 31. Pagination ---------- */
.pager{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:clamp(32px,4vw,52px);padding-top:22px;border-top:1px solid var(--line)}
.pager__step{
  font-family:var(--body);font-weight:600;font-size:13px;letter-spacing:.04em;text-transform:uppercase;
  padding:10px 15px;border:1px solid var(--line-strong);color:var(--ink);text-decoration:none;white-space:nowrap;
}
a.pager__step:hover{border-color:var(--ink);background:var(--shade)}
.pager__step.is-off{opacity:.35}
.pager__nums{display:flex;gap:4px;align-items:center;margin-inline:auto;flex-wrap:wrap}
.pager__n{
  min-width:36px;padding:9px 8px;text-align:center;text-decoration:none;
  font-variant-numeric:tabular-nums;font-size:14px;color:var(--muted);border:1px solid transparent;
}
a.pager__n:hover{color:var(--ink);border-color:var(--line-strong)}
.pager__n.is-on{background:var(--yellow);color:#141414;border-color:var(--ink);font-weight:600}
.pager__gap{color:var(--muted);padding-inline:4px}
.pager__total{margin-top:12px}
@media (max-width:520px){
  .pager{gap:10px}
  .pager__nums{order:3;width:100%;justify-content:center;margin-inline:0}
}

/* ---------- 32. Preview banner ---------- */
.preview-bar{background:var(--orange);color:#141414;border-bottom:1px solid #141414}
.preview-bar__in{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding-block:11px}
.preview-bar p{margin:0;font-size:14.5px}
.preview-bar__flag{
  font-family:var(--pixel);font-size:9px;letter-spacing:.05em;
  padding:5px 7px;border:1px solid #141414;background:#141414;color:var(--orange);
}
.preview-bar .link{color:#141414;margin-left:auto}

/* ---------- 33. Tools hub ---------- */
.toolbar{display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap;margin-bottom:16px}
.toolbar__search{flex:0 1 300px;min-width:220px}
.tool-count{margin-bottom:26px}

.tool-group{margin-top:clamp(36px,5vw,60px);scroll-margin-top:96px}
.tool-group:first-child{margin-top:0}
.tool-group__head{display:flex;align-items:baseline;gap:16px;flex-wrap:wrap;padding-bottom:12px}
.tool-group__head h2{margin:0}
.tool-group__head .dek{flex:1 1 260px;font-size:15px;margin:0}
.tool-group__head .micro{
  font-family:var(--pixel);font-size:10px;color:var(--muted);
  border:1px solid var(--line-strong);padding:5px 8px;line-height:1;
}
.tool-group.is-hidden{display:none}
/* the per-category total would contradict the filter count, so drop it */
.is-filtering .tool-group__head .micro{display:none}
.tool-row.is-hidden{display:none}

.searchbox{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.searchbox input[type=search]{min-width:200px}
.searchbox__clear{font-size:13px}
.page-head__meta--split{justify-content:space-between}
@media (max-width:620px){
  .toolbar{flex-direction:column;align-items:stretch}
  .toolbar__search{flex:1 1 auto}
  .page-head__meta--split{align-items:stretch}
}

/* ---------- 34. CJK type (CONTRACT-v3 §4) ---------- */
/* Space Grotesk and Press Start 2P have no CJK glyphs. For ja/zh the Noto
   face (loaded conditionally in public-head) does display, body AND the pixel
   micro-labels, and the tight display tracking is released to 0. */
:root[lang="ja"]{
  --display:"Noto Sans JP","Instrument Sans","Hiragino Sans","Yu Gothic",system-ui,sans-serif;
  --body:"Instrument Sans","Noto Sans JP","Hiragino Sans","Yu Gothic",system-ui,sans-serif;
  --pixel:"Noto Sans JP","Hiragino Sans","Yu Gothic",system-ui,sans-serif;
}
:root[lang="zh"]{
  --display:"Noto Sans SC","Instrument Sans","PingFang SC","Microsoft YaHei",system-ui,sans-serif;
  --body:"Instrument Sans","Noto Sans SC","PingFang SC","Microsoft YaHei",system-ui,sans-serif;
  --pixel:"Noto Sans SC","PingFang SC","Microsoft YaHei",system-ui,sans-serif;
}
:root[lang="ja"] .display-xl,:root[lang="zh"] .display-xl,
:root[lang="ja"] .display-l,:root[lang="zh"] .display-l,
:root[lang="ja"] .display-m,:root[lang="zh"] .display-m,
:root[lang="ja"] .display-s,:root[lang="zh"] .display-s,
:root[lang="ja"] h1,:root[lang="zh"] h1,
:root[lang="ja"] h2,:root[lang="zh"] h2,
:root[lang="ja"] h3,:root[lang="zh"] h3,
:root[lang="ja"] .card__title,:root[lang="zh"] .card__title,
:root[lang="ja"] .tip-card__title,:root[lang="zh"] .tip-card__title{
  letter-spacing:0;font-weight:700;
}
/* the pixel face is 10px because its glyphs are 8px tall; Noto needs a real size */
:root[lang="ja"] .eyebrow,:root[lang="zh"] .eyebrow,
:root[lang="ja"] .micro,:root[lang="zh"] .micro,
:root[lang="ja"] .tag,:root[lang="zh"] .tag,
:root[lang="ja"] .stat__label,:root[lang="zh"] .stat__label,
:root[lang="ja"] .hero__stamp,:root[lang="zh"] .hero__stamp,
:root[lang="ja"] .hero__stamp-label,:root[lang="zh"] .hero__stamp-label,
:root[lang="ja"] .tool-row__idx,:root[lang="zh"] .tool-row__idx,
:root[lang="ja"] .tool-row__go,:root[lang="zh"] .tool-row__go,
:root[lang="ja"] .lang__code,:root[lang="zh"] .lang__code,
:root[lang="ja"] .badge-en,:root[lang="zh"] .badge-en{
  font-size:11px;letter-spacing:.04em;line-height:1.6;
}
/* CJK has no spaces to break on */
:root[lang="ja"] body,:root[lang="zh"] body{line-break:strict;overflow-wrap:anywhere}

/* ---------- 35. Also ours: external products ---------- */
.ext-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:22px}
.ext-card{
  position:relative;display:flex;flex-direction:column;gap:14px;
  border:1px solid var(--line);background:var(--paper-2);padding:26px 24px 24px;
}
.ext-card .band{position:absolute;inset:0 0 auto 0;height:5px;background:var(--accent)}
.ext-card__mark{display:flex;align-items:center;min-height:38px;margin-top:4px}
.ext-card__wordmark{max-height:34px;width:auto;max-width:100%;object-fit:contain;object-position:left center}
.ext-card__name{font-family:var(--display);font-weight:700;font-size:1.7rem;letter-spacing:-.03em;line-height:1}
.ext-card__tagline{font-weight:600;color:var(--ink);font-size:15px;margin:0}
.ext-card__blurb{color:var(--ink-soft);font-size:15px;line-height:1.55;margin:0;flex:1}
.ext-card__foot{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:6px 0 0}
.ext-card__go{display:inline-flex;align-items:center;gap:8px;margin-left:auto}
.ext-card__go svg{width:14px;height:14px;flex:none}
/* the wordmarks are ink-on-alpha PNGs: flip them on the dark paper */
:root[data-theme="dark"] .ext-card__wordmark,
:root[data-theme="dark"] .ext-strip__item img{filter:invert(1) brightness(1.15)}

.ext-strip{
  display:flex;align-items:center;gap:20px;flex-wrap:wrap;
  margin:26px 0 0;padding-top:20px;border-top:1px solid var(--line);
}
.ext-strip__lbl{flex:none}
.ext-strip__item{display:inline-flex;align-items:center;text-decoration:none;color:var(--ink);opacity:.75;transition:opacity .15s ease}
.ext-strip__item:hover{opacity:1}
/* Bound BOTH dimensions. These are wordmarks of very different lengths with
   different amounts of whitespace baked in, so normalising on height alone
   made the longest one (Dustpile) tower over the others. A max-width caps the
   long ones and object-fit keeps every one of them undistorted. */
.ext-strip__item img{
  height:auto;width:auto;max-height:20px;max-width:122px;
  object-fit:contain;object-position:left center;display:block;
}
.ext-strip__item span{font-family:var(--display);font-weight:700;font-size:.98rem;letter-spacing:-.02em}
@media (max-width:620px){
  .ext-strip{gap:14px 18px}
  .ext-strip__item img{max-height:17px;max-width:104px}
}

/* the tool-page "controls are in English" notice */
.tool-en-note{max-width:56ch}

@media (max-width:900px){
  .ext-grid{grid-template-columns:1fr}
}

/* ---------- 36. Featured card trailer ---------- */
/* <article class="card card--trailer"> instead of <a>: the media holds a muted
   <video> plus a sound button, so the whole card is made clickable with a
   stretched link and the button sits above it. */
.card--trailer{position:relative}
.card--trailer:hover,.card--trailer:focus-within{
  transform:translate(-2px,-2px);box-shadow:4px 4px 0 var(--ink);border-color:var(--ink);
}
.card--trailer .card__link{position:absolute;inset:0;z-index:1}
.card--trailer .card__link:focus-visible{outline:3px solid var(--yellow);outline-offset:-3px}
.card--trailer [hidden]{display:none!important}
.card__video{
  position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  background:#000;opacity:0;transition:opacity .45s ease;
}
.card--trailer.is-playing .card__video{opacity:1}
.card__badge{
  position:absolute;left:12px;top:12px;z-index:2;
  padding:6px 8px;background:rgba(20,20,20,.78);color:#f4f1ea;font-size:9px;letter-spacing:.08em;
}
.card__sound{
  position:absolute;right:12px;bottom:12px;z-index:2;
  width:38px;height:38px;display:grid;place-items:center;padding:0;
  border:2px solid #f4f1ea;background:rgba(20,20,20,.78);color:#f4f1ea;cursor:pointer;
}
.card__sound svg{width:18px;height:18px;fill:currentColor}
.card__sound[aria-pressed="true"] .i-muted{display:none}
.card__sound[aria-pressed="false"] .i-sound{display:none}
.card__sound:hover,.card__sound:focus-visible{background:var(--yellow);color:#141414;border-color:var(--yellow);outline:0}
@media (prefers-reduced-motion:reduce){.card__video{transition:none}}

/* ---------- 37. Site search bar (features/search) ---------- */
.nav__search{border-top:1px solid var(--line);background:var(--paper)}
.nav__search-in{display:flex;align-items:center;gap:10px;padding:10px 0}
.nav__search input{flex:1;min-width:0;padding:10px 12px;font:inherit;border:1px solid var(--ink);background:var(--paper-2);color:var(--ink)}
.nav__search input:focus{outline:3px solid var(--yellow);outline-offset:-1px}
.nav__search-hint{white-space:nowrap}
@media (max-width:900px){.nav__search-hint{display:none}}
.search-box{display:flex;gap:10px;align-items:stretch;max-width:520px;margin-top:22px}
.search-box__input{flex:1;min-width:0;padding:12px 14px;font:inherit;border:1px solid var(--ink);background:var(--paper-2);color:var(--ink)}
.search-box__input:focus{outline:3px solid var(--yellow);outline-offset:-1px}
