/* GameLinks Pro - public theme
   Colours come from :root variables that Settings > Appearance writes inline. */

:root{
  --brand:#7c5cff;
  --accent:#00d4a0;
  --cols:4;

  --bg:#0c0e14;
  --bg-2:#11141d;
  --card:#161a25;
  --card-2:#1c2130;
  --line:#242a3a;
  --text:#e8eaf2;
  --muted:#8b90a3;
  --shadow:0 12px 30px rgba(0,0,0,.35);
  --radius:14px;
}

:root[data-theme="light"]{
  --bg:#f5f6fa;
  --bg-2:#ffffff;
  --card:#ffffff;
  --card-2:#f0f2f7;
  --line:#e2e5ee;
  --text:#161a25;
  --muted:#666d80;
  --shadow:0 8px 24px rgba(22,26,37,.08);
}

@media (prefers-color-scheme: light){
  :root[data-theme="auto"]{
    --bg:#f5f6fa; --bg-2:#fff; --card:#fff; --card-2:#f0f2f7;
    --line:#e2e5ee; --text:#161a25; --muted:#666d80;
    --shadow:0 8px 24px rgba(22,26,37,.08);
  }
}

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

html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}

body{
  margin:0;
  background:var(--bg);
  color:var(--text);
  font:16px/1.65 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;            /* nothing should ever scroll the page sideways */
}

/* A display rule further down would otherwise beat the hidden attribute, and
   the countdown button is hidden that way. Keep this first. */
[hidden]{display:none !important}

img{max-width:100%;display:block}
a{color:inherit;text-decoration:none;-webkit-tap-highlight-color:transparent}
h1,h2,h3,h4{line-height:1.25;margin:0;overflow-wrap:break-word}
button,input,select,textarea{font-family:inherit}

@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.01ms !important;transition-duration:.01ms !important}
}

.wrap{width:100%;max-width:1280px;margin:0 auto;padding:0 18px}

/* ---------- announcement ---------- */
.announce{background:linear-gradient(90deg,var(--brand),var(--accent));color:#fff;font-size:14px;font-weight:600}
.announce .wrap{padding:9px 18px;text-align:center}
.announce a{text-decoration:underline}

/* ---------- header ---------- */
.site-head{position:sticky;top:0;z-index:50;background:rgba(12,14,20,.94);
  -webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);
  border-bottom:1px solid var(--line);box-shadow:0 4px 16px rgba(0,0,0,.28)}
:root[data-theme="light"] .site-head{background:rgba(255,255,255,.94);box-shadow:0 4px 16px rgba(22,26,37,.06)}
.head-inner{display:flex;align-items:center;gap:18px;min-height:68px}

.brand{display:flex;align-items:center;gap:10px;font-weight:800;font-size:18px;flex-shrink:0}
.brand-mark{width:34px;height:34px;border-radius:10px;background:linear-gradient(135deg,var(--brand),var(--accent));
  color:#fff;display:grid;place-items:center;font-size:14px;letter-spacing:.5px}
.brand-text{white-space:nowrap}

.head-search{flex:1;max-width:460px;min-width:0;display:flex;background:var(--card);
  border:1px solid var(--line);border-radius:12px;overflow:hidden;
  transition:border-color .15s,box-shadow .15s}
.head-search:focus-within{border-color:var(--brand);box-shadow:0 0 0 3px rgba(124,92,255,.18)}
.head-search input{flex:1;background:none;border:0;color:var(--text);padding:11px 15px;
  font-size:14px;outline:none;min-width:0;text-overflow:ellipsis}
.head-search input::placeholder{color:var(--muted)}
.head-search button{background:var(--brand);color:#fff;border:0;padding:0 17px;font-weight:600;
  cursor:pointer;font-size:14px;flex-shrink:0;display:flex;align-items:center;gap:7px}
.head-search button svg{width:17px;height:17px;flex-shrink:0}
.head-search button:hover{filter:brightness(1.1)}

.head-nav{display:flex;align-items:center;gap:4px;margin-left:auto}
.head-nav>a,.drop-btn{padding:8px 13px;border-radius:9px;font-size:14px;font-weight:600;color:var(--muted);
  background:none;border:0;cursor:pointer;font-family:inherit;white-space:nowrap}
.head-nav>a:hover,.drop-btn:hover,.head-nav>a.on{color:var(--text);background:var(--card)}

.drop{position:relative}
.drop-menu{position:absolute;right:0;top:calc(100% + 8px);min-width:220px;background:var(--card);
  border:1px solid var(--line);border-radius:12px;padding:6px;box-shadow:var(--shadow);display:none;z-index:60}
.drop.open .drop-menu{display:block}
.drop-menu a{display:flex;justify-content:space-between;gap:12px;padding:8px 12px;border-radius:8px;font-size:14px}
.drop-menu a:hover{background:var(--card-2)}
.drop-menu a span{color:var(--muted);font-size:12px}
.drop-all{border-top:1px solid var(--line);margin-top:4px;padding-top:10px !important;color:var(--brand);font-weight:600}

.nav-toggle{display:none;width:44px;height:44px;flex-shrink:0;border:1px solid var(--line);
  background:var(--card);border-radius:12px;cursor:pointer;padding:12px 11px;
  flex-direction:column;justify-content:space-between;transition:border-color .15s}
.nav-toggle span{display:block;height:2px;background:var(--text);border-radius:2px}
.nav-toggle:hover,.nav-toggle[aria-expanded="true"]{border-color:var(--brand)}
.nav-toggle[aria-expanded="true"] span{background:var(--brand)}

/* ---------- shared bits ---------- */
/* Side padding is left to .wrap so the header, the content and the footer all
   line up on the same gutter at every width. */
.site-main{padding-top:26px;padding-bottom:60px;min-height:52vh}

.block{margin:36px 0}
.block-head,.hero-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px}
.block-head h2,.hero-head h1{font-size:20px;letter-spacing:-.2px}
.see-all{font-size:13px;font-weight:600;color:var(--brand)}
.see-all:hover{text-decoration:underline}

.page-head{margin-bottom:22px}
.page-head.slim{margin-bottom:14px}
.page-head h1{font-size:26px;margin:10px 0 6px;letter-spacing:-.4px}
.lead{color:var(--muted);margin:0;font-size:15px}

.crumbs{display:flex;flex-wrap:wrap;gap:7px;font-size:13px;color:var(--muted)}
.crumbs a:hover{color:var(--brand)}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 18px;border-radius:10px;
  background:var(--brand);color:#fff;font-weight:700;font-size:14px;border:0;cursor:pointer;font-family:inherit;
  transition:filter .15s,transform .15s}
.btn:hover{filter:brightness(1.1)}
.btn:active{transform:translateY(1px)}
.btn-ghost{background:var(--card);color:var(--text);border:1px solid var(--line)}
.btn-big{padding:15px 34px;font-size:16px;border-radius:12px}

.chip{display:inline-flex;align-items:center;padding:4px 10px;border-radius:7px;background:var(--card-2);
  color:var(--muted);font-size:12px;font-weight:600}
.chip-soft{background:transparent;border:1px solid var(--line)}
.chip-soft:hover{border-color:var(--brand);color:var(--brand)}

/* Chips row. No scrollbar here - a purple bar under the chips reads like a
   broken underline. The right edge fades instead, which says "keep swiping". */
.cat-rail,.pill-row{display:flex;gap:9px;overflow-x:auto}
.cat-rail{scrollbar-width:none;padding-bottom:2px}
.cat-rail::-webkit-scrollbar{display:none}
.pill-row{flex-wrap:wrap;overflow:visible}

.cat-pill{flex-shrink:0;padding:8px 16px;border-radius:999px;background:var(--card);
  border:1px solid var(--line);font-size:13px;font-weight:600;white-space:nowrap;
  transition:border-color .15s,color .15s,background .15s}
.cat-pill span{color:var(--muted);font-size:11px;margin-left:4px}
.cat-pill:hover{border-color:var(--brand);color:var(--brand)}
.cat-pill.on{background:linear-gradient(135deg,var(--brand),var(--accent));border-color:transparent;
  color:#fff;box-shadow:0 4px 14px rgba(124,92,255,.3)}
.cat-pill.on span{color:rgba(255,255,255,.8)}

/* ---------- cards ---------- */
/* minmax(0,...) everywhere - a 1fr track refuses to shrink under its content
   otherwise, which is what pushes a grid past the edge of a phone screen. */
.grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(165px,1fr))}
@media (min-width:1100px){ .grid{grid-template-columns:repeat(var(--cols),minmax(0,1fr))} }
.grid-ad{grid-column:1/-1}

.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;
  display:flex;flex-direction:column;transition:transform .18s,border-color .18s,box-shadow .18s}
.card:hover{transform:translateY(-3px);border-color:var(--brand);box-shadow:var(--shadow)}

.card-art{position:relative;display:block;aspect-ratio:1/1;background:var(--card-2)}
.card-art img{width:100%;height:100%;object-fit:cover}

.tag{position:absolute;top:8px;left:8px;padding:3px 8px;border-radius:6px;font-size:10px;font-weight:800;
  letter-spacing:.6px;color:#fff;background:var(--brand)}
.tag-hot{background:var(--accent);color:#04211a;left:auto;right:8px}
.card-size{position:absolute;bottom:8px;right:8px;padding:3px 8px;border-radius:6px;font-size:11px;
  font-weight:700;background:rgba(0,0,0,.72);color:#fff}

.card-body{padding:12px;display:flex;flex-direction:column;gap:9px;flex:1}
/* two lines are always reserved, so a one line title does not make its tile
   shorter than the one beside it */
.card-title{font-size:14px;font-weight:700;line-height:1.35;min-height:2.7em}
.card-title a,.card-title span{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.card-title a:hover{color:var(--brand)}
.card-meta{display:flex;flex-wrap:wrap;gap:6px}
.card-foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:4px 8px;
  margin-top:auto;font-size:11px;color:var(--muted);min-width:0}
.card-cat{color:var(--accent);font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.card-stats{display:flex;gap:8px;white-space:nowrap;flex-shrink:0}
.btn-get{width:100%;padding:8px;font-size:13px;letter-spacing:.4px}
.btn-get.is-soon{background:var(--card-2);color:var(--muted);cursor:default}
.card-soon{opacity:.72}

/* extra files on a card - OBB, a mirror - each one click of its own */
.card-extra{display:flex;flex-wrap:wrap;gap:6px}
.extra-pill{flex:1;min-width:0;text-align:center;padding:6px 8px;border-radius:8px;font-size:11px;
  font-weight:700;background:var(--card-2);border:1px solid var(--line);color:var(--muted);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.extra-pill:hover{border-color:var(--accent);color:var(--accent)}

/* ---------- scrollbars ----------
   Windows draws a chunky grey bar by default, which looks broken against a
   dark theme. Everything that scrolls gets a thin brand coloured line.

   Note: setting scrollbar-width makes Chrome fall back to its own thin bar,
   which carries a stepper arrow at each end and ignores everything below.
   So the standard properties are kept for Firefox only. */
::-webkit-scrollbar{width:10px;height:8px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--line);border-radius:99px;
  border:2px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:var(--brand);background-clip:content-box}
::-webkit-scrollbar-button{display:none;width:0;height:0}
::-webkit-scrollbar-corner{background:transparent}

/* the side scrolling rows get an even slimmer bar */
.scroller::-webkit-scrollbar{height:4px}
.scroller::-webkit-scrollbar-track{background:var(--card-2);border-radius:99px}
.scroller::-webkit-scrollbar-thumb{background:var(--brand);border:0;border-radius:99px}

@supports (-moz-appearance:none){
  html{scrollbar-width:thin;scrollbar-color:var(--line) transparent}
  .scroller{scrollbar-width:thin;scrollbar-color:var(--brand) transparent}
}

/* ---------- horizontal rail ---------- */
.rail{display:grid;gap:14px;grid-auto-flow:column;grid-auto-columns:minmax(170px,1fr);
  overflow-x:auto;padding-bottom:10px;
  scroll-snap-type:x proximity;scroll-padding-inline:2px;-webkit-overflow-scrolling:touch}
.rail-item{min-width:0;scroll-snap-align:start;display:flex}
/* every tile in a row ends at the same height, so the buttons line up */
.rail-item > .card{flex:1;height:100%}

/* ---------- filters ---------- */
.filters{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:22px;padding:14px;background:var(--card);
  border:1px solid var(--line);border-radius:12px}
.filters label{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--muted);font-weight:600}
.filters select{background:var(--bg-2);border:1px solid var(--line);color:var(--text);padding:8px 12px;
  border-radius:8px;font-size:14px;font-family:inherit;min-width:150px}

/* ---------- game page ---------- */
.game-top{display:grid;grid-template-columns:200px 1fr;gap:24px;padding:20px;background:var(--card);
  border:1px solid var(--line);border-radius:var(--radius);margin-bottom:24px}
.game-art{position:relative;border-radius:12px;overflow:hidden;background:var(--card-2)}
.game-art img{width:100%;aspect-ratio:1/1;object-fit:cover}
.game-head h1{font-size:24px;margin-bottom:12px;letter-spacing:-.4px}
.game-chips{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:14px}
.game-lead{color:var(--muted);font-size:15px;margin:0 0 16px}
.game-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:12px;margin:0}
.game-facts div{min-width:0}
.game-facts dt{font-size:11px;text-transform:uppercase;letter-spacing:.7px;color:var(--muted);margin-bottom:2px}
.game-facts dd{margin:0;font-size:14px;font-weight:600}

.dl-box{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:22px;margin-bottom:26px}
.dl-box h2{font-size:18px;margin-bottom:16px}
.dl-empty{color:var(--muted);margin:0}
.dl-list{display:grid;gap:11px}
.dl-list.wide{max-width:720px;margin:0 auto}

.dl-btn{display:grid;grid-template-columns:auto 1fr auto auto;align-items:center;gap:14px;padding:14px 16px;
  background:var(--card-2);border:1px solid var(--line);border-radius:12px;transition:border-color .15s,background .15s}
.dl-btn:hover{border-color:var(--accent);background:var(--card)}
.dl-type{padding:4px 9px;border-radius:6px;background:var(--brand);color:#fff;font-size:11px;font-weight:800;
  letter-spacing:.4px;white-space:nowrap}
.dl-label{font-weight:700;font-size:15px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dl-meta{display:flex;flex-direction:column;align-items:flex-end;font-size:11px;color:var(--muted);text-align:right}
.dl-meta b{font-size:12px;color:var(--text)}
.dl-meta i{font-style:normal}
.dl-go{padding:8px 16px;border-radius:9px;background:var(--accent);color:#04211a;font-weight:800;font-size:13px;white-space:nowrap}
.dl-note{margin:-4px 0 0;font-size:12px;color:var(--muted);padding-left:4px}
.dl-disclaimer{margin:16px 0 0;font-size:12px;color:var(--muted);border-top:1px solid var(--line);padding-top:14px}

.shots{display:grid;gap:12px;grid-auto-flow:column;grid-auto-columns:minmax(220px,1fr);overflow-x:auto;padding-bottom:8px}
.shot{border-radius:10px;overflow:hidden;border:1px solid var(--line)}
.shot img{width:100%;aspect-ratio:16/9;object-fit:cover}

.prose{color:var(--text);font-size:15px;line-height:1.8}
.prose p{margin:0 0 14px}
.prose h2,.prose h3{margin:22px 0 10px;font-size:18px}
.prose ul,.prose ol{padding-left:22px;margin:0 0 14px}
.prose a{color:var(--brand);text-decoration:underline}
.prose img{border-radius:10px;margin:14px 0}
.prose-page{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:26px}

.tag-row{display:flex;flex-wrap:wrap;gap:8px;margin:22px 0}

/* ---------- download gate ---------- */
.gate{max-width:620px;margin:20px auto 0}
.gate-card{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:34px 26px;text-align:center}
.gate-art{width:92px;height:92px;border-radius:18px;object-fit:cover;margin:0 auto 16px}
.gate-card h1{font-size:21px;margin-bottom:6px}
.gate-sub{color:var(--muted);font-size:13px;margin:0 0 26px}
.gate-action{min-height:130px;display:grid;place-items:center}

.ring{width:76px;height:76px;border-radius:50%;display:grid;place-items:center;margin:0 auto 12px;
  border:3px solid var(--line);border-top-color:var(--brand);animation:spin 1s linear infinite;
  font-size:24px;font-weight:800}
@keyframes spin{to{transform:rotate(360deg)}}
.ring span{animation:spin 1s linear infinite reverse}
.gate-wait p{color:var(--muted);font-size:14px;margin:0}
.gate-ready{animation:pop .3s ease}
@keyframes pop{from{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}

.gate-note{margin:18px 0 0;font-size:13px;color:var(--accent)}
.gate-fine{margin:14px 0 0;font-size:12px;color:var(--muted)}

.gate-others{margin-top:24px;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px}
.gate-others h3{font-size:14px;margin-bottom:12px;color:var(--muted)}
.gate-other{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:11px 14px;
  border-radius:10px;background:var(--card-2);margin-bottom:8px;font-size:14px;font-weight:600}
.gate-other:hover{color:var(--brand)}
.gate-other em{font-style:normal;font-size:12px;color:var(--muted);font-weight:500}
.gate-back{display:block;text-align:center;margin-top:20px;font-size:14px;color:var(--muted)}
.gate-back:hover{color:var(--brand)}

/* ---------- categories page ---------- */
.cat-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}
.cat-card{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--card-tint,var(--brand));
  border-radius:12px;padding:18px;transition:transform .15s,border-color .15s}
.cat-card:hover{transform:translateY(-2px);border-color:var(--brand)}
.cat-card strong{display:block;font-size:16px;margin-bottom:3px}
.cat-card span{font-size:12px;color:var(--accent);font-weight:600}
.cat-card p{margin:8px 0 0;font-size:13px;color:var(--muted)}

/* ---------- empty / errors ---------- */
.empty{text-align:center;padding:56px 20px;background:var(--card);border:1px dashed var(--line);border-radius:var(--radius)}
.empty.tall{padding:80px 20px}
.empty h1,.empty h3{font-size:20px;margin-bottom:8px}
.empty p{color:var(--muted);margin:0 0 18px}
.empty-actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.big-code{font-size:64px;font-weight:900;margin:0;line-height:1;
  background:linear-gradient(135deg,var(--brand),var(--accent));-webkit-background-clip:text;
  background-clip:text;color:transparent}

/* ---------- pagination ---------- */
.pager{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;align-items:center;margin-top:30px}
.pager-num,.pager-step,.pager-gap{padding:8px 13px;border-radius:9px;font-size:14px;font-weight:600;
  border:1px solid var(--line);background:var(--card);color:var(--text)}
.pager-gap{border-color:transparent;background:none;color:var(--muted)}
.pager-num:hover,.pager-step:hover{border-color:var(--brand);color:var(--brand)}
.pager-num.on{background:var(--brand);border-color:var(--brand);color:#fff}
.pager-step.is-off{opacity:.4;pointer-events:none}

/* ---------- ads ---------- */
.ad-block{margin:18px 0;text-align:center;overflow:hidden}
.ad-block:empty{display:none}
.ad-header{margin:0;padding:12px 18px;max-width:1280px;margin-inline:auto}
.float-ad{position:fixed;left:0;right:0;bottom:0;z-index:70;background:var(--card);border-top:1px solid var(--line);
  padding:8px;text-align:center}
.float-close{position:absolute;right:6px;top:-13px;width:26px;height:26px;border-radius:50%;border:1px solid var(--line);
  background:var(--card);color:var(--text);font-size:16px;line-height:1;cursor:pointer}

/* ---------- footer ---------- */
.site-foot{background:var(--bg-2);border-top:1px solid var(--line);padding:40px 0 24px;margin-top:40px}
.foot-grid{display:grid;gap:28px;grid-template-columns:2fr 1fr 1fr 1fr}
.foot-col h4{font-size:13px;text-transform:uppercase;letter-spacing:.8px;color:var(--muted);margin-bottom:14px}
.foot-col a{display:block;font-size:14px;color:var(--muted);padding:4px 0}
.foot-col a:hover{color:var(--brand)}
.foot-about p{font-size:14px;color:var(--muted);margin:12px 0 16px;max-width:380px}
.foot-about .brand{margin-bottom:0}
.socials{display:flex;flex-wrap:wrap;gap:8px}
.socials a{padding:6px 13px;border-radius:8px;background:var(--card);border:1px solid var(--line);font-size:12px;font-weight:600}
.foot-bottom{border-top:1px solid var(--line);margin-top:30px;padding-top:20px;text-align:center}
.disclaimer{font-size:12px;color:var(--muted);margin:0 0 8px}
.copy{font-size:13px;color:var(--muted);margin:0}

.to-top{position:fixed;right:18px;bottom:18px;width:42px;height:42px;border-radius:12px;background:var(--brand);
  color:#fff;display:grid;place-items:center;font-size:18px;opacity:0;pointer-events:none;transition:opacity .2s;z-index:65}
.to-top.show{opacity:1;pointer-events:auto}

/* ---------- in-app browser prompt ---------- */
.inapp-bar{position:fixed;left:12px;right:12px;bottom:12px;z-index:90;
  background:var(--card);border:1px solid var(--line);border-radius:14px;
  padding:16px 42px 16px 16px;box-shadow:0 18px 40px rgba(0,0,0,.5);
  animation:inappUp .25s ease}
@keyframes inappUp{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
.inapp-bar p{margin:0 0 12px;font-size:14px;line-height:1.5}
.inapp-actions{display:flex;gap:9px;flex-wrap:wrap}
.inapp-actions button{flex:1 1 auto;padding:11px 16px;border-radius:10px;border:0;cursor:pointer;
  font:inherit;font-size:14px;font-weight:700;background:var(--brand);color:#fff}
.inapp-actions button.ghost{background:var(--card-2);color:var(--text);border:1px solid var(--line)}
.inapp-x{position:absolute;top:8px;right:8px;width:28px;height:28px;border-radius:8px;
  border:0;background:none;color:var(--muted);font-size:20px;line-height:1;cursor:pointer}
.inapp-x:hover{color:var(--text)}
@media (min-width:640px){
  .inapp-bar{left:auto;right:18px;bottom:18px;max-width:380px}
}

/* =========================================================
   Responsive. Phone first priority: most visitors to a site
   like this are on a phone, so nothing may overflow sideways
   and every tappable thing stays finger sized.
   ========================================================= */

@media (max-width:1100px){
  .wrap{padding:0 16px}
}

@media (max-width:980px){
  .foot-grid{grid-template-columns:1fr 1fr;gap:24px}
  .game-top{grid-template-columns:160px 1fr;gap:18px}
}

/* ---- below the desktop nav ----
   Logo, search and the menu button stay on ONE compact row all the way down.
   Only padding-block is set here; the side gutter belongs to .wrap. */
@media (max-width:820px){
  .head-inner{flex-wrap:wrap;gap:10px;padding-top:9px;padding-bottom:9px;min-height:58px}
  .brand{font-size:16px;gap:9px;min-width:0}
  .brand-mark{width:34px;height:34px;border-radius:11px;font-size:13px}

  .nav-toggle{display:flex;order:3;width:40px;height:40px;padding:11px 10px;border-radius:11px}
  /* basis 0, not auto: with auto the search claims its content width first and
     pushes the menu button onto a second line */
  .head-search{order:2;flex:1 1 0;max-width:none;min-width:0}
  .head-search input{font-size:16px;padding:10px 14px}   /* 16px stops iOS zooming in */

  /* The menu drops out of the header as its own panel instead of growing the
     header, so the bar stays 58px and the page below does not jump. */
  .head-nav{display:none;position:absolute;top:100%;left:0;right:0;z-index:55;
    flex-direction:column;align-items:stretch;gap:2px;margin:0;
    background:var(--bg-2);border-bottom:1px solid var(--line);
    box-shadow:0 20px 44px rgba(0,0,0,.5);
    padding:10px 16px 14px;max-height:72vh;overflow-y:auto;
    animation:navDrop .16s ease}
  .head-nav.open{display:flex}
  @keyframes navDrop{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:none}}

  .head-nav>a,.drop-btn{display:flex;align-items:center;justify-content:space-between;
    text-align:left;width:100%;padding:13px 14px;font-size:15px;border-radius:11px;color:var(--text)}
  .head-nav>a:hover,.head-nav>a.on{background:var(--card);color:var(--text)}
  .head-nav>a.on{box-shadow:inset 3px 0 0 var(--brand)}

  .drop{width:100%}
  .drop-btn{color:var(--text)}
  .drop-btn::after{content:"";width:8px;height:8px;flex-shrink:0;
    border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);
    transform:rotate(45deg) translate(-2px,-2px);transition:transform .18s}
  .drop.open .drop-btn{color:var(--brand)}
  .drop.open .drop-btn::after{border-color:var(--brand);transform:rotate(-135deg) translate(-2px,-2px)}

  /* the category list reads as a branch of the button above it */
  .drop-menu{position:static;border:0;box-shadow:none;background:none;border-radius:0;
    margin:2px 0 6px 16px;padding:0 0 0 12px;border-left:2px solid var(--line);min-width:0}
  .drop-menu a{padding:11px 12px;border-radius:9px;font-size:14.5px;color:var(--muted)}
  .drop-menu a:hover{background:var(--card);color:var(--text)}
  /* needs the same weight as the rule above it, or the muted colour wins */
  .drop-menu a.drop-all{border-top:0;margin-top:2px;padding-top:11px !important;
    color:var(--brand);font-weight:700}
  .drop-menu a.drop-all::after{content:"\2192";color:var(--brand)}

  .site-main{padding-top:18px;padding-bottom:44px}
  .block{margin:26px 0}
  .block-head,.hero-head{margin-bottom:13px}
}

/* ---- phones: drop the wordmark so the search keeps the row to itself ---- */
@media (max-width:560px){
  .brand-text{display:none}
  .head-search button{padding:0 13px}
  .head-search button span{display:none}
  .head-inner{gap:9px}

  /* tells the eye there is more to swipe past the last chip */
  .cat-rail{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent);
    mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent)}
}

/* ---- phones ---- */
@media (max-width:640px){
  /* Tiles size themselves: two per row on a narrow phone, three once there is
     room. Keeps them small like an app store listing instead of two giant
     cards filling the screen. */
  .grid{grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:10px}
  .rail{grid-auto-columns:minmax(132px,40vw);gap:10px}
  .card-cat{flex:1 1 auto}

  /* The cover is about 60% of a tile, so it is the one thing worth shrinking.
     4:3 with object-fit:cover suits the wide key art these games use and
     nothing gets stretched. Change this back to 1/1 for square covers.
     min-height:0 is required: as a flex item it otherwise refuses to go
     below the image's own square height and the ratio is ignored. */
  .card-art{aspect-ratio:4/3;min-height:0}
  .card-art img{min-height:0}

  /* everything inside the tile tightens up to match */
  .card{border-radius:11px}
  .card-body{padding:8px 8px 9px;gap:6px}
  .card-title{font-size:12.5px;line-height:1.32;min-height:2.64em}
  .card-meta{gap:5px}
  .card-meta .chip{padding:2px 7px;font-size:10.5px;border-radius:6px}
  .card-foot{font-size:10px;gap:2px 6px}
  .card-stats{gap:6px}
  .btn-get{padding:8px;font-size:12px;border-radius:9px}
  .tag{font-size:9px;padding:2px 6px;top:6px;left:6px;letter-spacing:.4px}
  .tag-hot{right:6px;left:auto}
  .card-size{font-size:10px;padding:2px 6px;bottom:6px;right:6px}
  .extra-pill{padding:6px 5px;font-size:10px}

  .block-head h2{font-size:17px}
  .page-head h1{font-size:21px}
  .lead{font-size:14px}

  /* Filters sit side by side instead of three full width rows. The first
     option of each select already says what it is, so the labels can go. */
  .filters{display:grid;grid-template-columns:1fr 1fr;gap:9px;padding:11px}
  /* an odd last filter takes the whole row instead of leaving a gap */
  .filters label:last-of-type:nth-of-type(odd){grid-column:1/-1}
  .filters label{width:auto;gap:0;min-width:0}
  .filters label>span{display:none}
  .filters select{width:100%;min-width:0;padding:11px 12px;font-size:16px}

  .cat-rail{margin-inline:-16px;padding-inline:16px}
  .cat-pill{padding:9px 15px}

  /* game page */
  .game-top{grid-template-columns:1fr;padding:16px;gap:16px}
  .game-art{max-width:150px;margin:0 auto}
  .game-head h1{font-size:20px;text-align:center}
  .game-chips{justify-content:center}
  .game-lead{text-align:center}
  .game-facts{grid-template-columns:repeat(2,1fr);gap:14px 10px}

  .dl-box{padding:16px}
  .dl-btn{grid-template-columns:1fr auto;gap:8px 12px;padding:13px}
  .dl-type{grid-column:1;justify-self:start}
  .dl-label{grid-column:1/-1;white-space:normal;font-size:14px}
  .dl-meta{grid-column:1;align-items:flex-start;text-align:left;flex-direction:row;gap:10px}
  .dl-go{grid-column:2;grid-row:3;align-self:end;padding:10px 16px}

  .shots{grid-auto-columns:minmax(200px,1fr);margin-inline:-16px;padding-inline:16px}
  .prose{font-size:14.5px}
  .prose-page{padding:18px 16px}

  /* download gate */
  .gate-card{padding:26px 18px;border-radius:14px}
  .gate-art{width:78px;height:78px}
  .gate-card h1{font-size:18px}
  .btn-big{padding:15px 22px;font-size:15px;width:100%}
  .gate-others{padding:15px}

  .foot-grid{grid-template-columns:1fr;gap:22px}
  .site-foot{padding:30px 0 20px}
  .socials a{padding:9px 14px}

  .pager-num,.pager-step{padding:10px 14px}
  .to-top{right:14px;bottom:14px;width:44px;height:44px}
  .empty{padding:40px 16px}
  .empty.tall{padding:56px 16px}
  .big-code{font-size:52px}
}

/* ---- small phones ---- */
@media (max-width:380px){
  .wrap{padding:0 12px}
  .site-main{padding-top:14px;padding-bottom:36px}
  .grid{gap:9px}
  .brand-text{max-width:130px;overflow:hidden;text-overflow:ellipsis}
  .game-facts{grid-template-columns:1fr}
}
