/*
Theme Name:  Roidplay
Theme URI:   https://roidplay.com
Author:      Roidplay
Description: Complete APKPure-style WordPress theme for Android APK downloads. APKPure layout, dark mode, hero slider, ranking pages, interactive ratings, AI-powered FAQ and What's New, permission explainer, safety badges, QR codes, download countdown, all SEO schema. Built for Google ranking.
Version:     6.3.3
Requires at least: 6.0
Tested up to: 6.7
Requires PHP: 7.4
License:     GPL-2.0+
Text Domain: roidplay
Tags: apk, android, apps, games, download, dark-mode, mobile-first
*/

/* ═══════════════════════════════════════════════════
   DESIGN TOKENS  — light + dark
═══════════════════════════════════════════════════ */
:root{
  --green:         #2ecc71;
  --green-dk:      #27ae60;
  --green-bg:      rgba(46,204,113,.12);
  /* v6.3 Phase 3 a11y: --green at #2ecc71 is only 2.5:1 contrast on white,
     fails WCAG AA for text (needs 4.5:1). Use --green-text (#16a34a → 4.6:1)
     for any colored text against light backgrounds. --green still works for
     buttons, backgrounds, icons (which have larger size or are decorative). */
  --green-text:    #16a34a;
  --page-bg:       #f0f2f5;
  --card-bg:       #ffffff;
  --header-bg:     #1a1a2e;
  --subnav-bg:     #16213e;
  --input-bg:      #f8f9fa;
  --tx-primary:    #1a1a2e;
  --tx-secondary:  #5f6368;
  --tx-muted:      #9aa0a6;
  --tx-green:      #1b5e20;
  --border:        #d1d5db;        /* v6.2.7: was #e0e0e0 — slight bump for visibility */
  --border-lt:     #e5e7eb;        /* v6.2.7: was #f0f0f0 — was nearly invisible on white */
  /* v6.2.6: Layered shadows — small contact shadow + larger ambient shadow.
     Two layers read more naturally than one big blur. Dark-mode overrides
     below use higher alpha because solid black on near-black is invisible.
     v6.2.7: light-mode alphas bumped for white-on-white visibility. */
  --shadow-sm:     0 1px 2px rgba(0,0,0,.07), 0 1px 3px rgba(0,0,0,.13);
  --shadow-md:     0 2px 4px rgba(0,0,0,.10), 0 6px 16px rgba(0,0,0,.18);
  --shadow-lg:     0 4px 8px rgba(0,0,0,.12), 0 12px 32px rgba(0,0,0,.24);
  /* Fluid header heights - stay fixed, good as-is */
  --header-h:      64px;  /* unified single-bar height */
  --subnav-h:      0px;   /* no second nav bar — zeroed */
  --nav-h:         64px;  /* alias for clarity */
  /* Fluid sidebar: clamps between 240px (small desktop) and 300px (large) */
  --sidebar-w:     clamp(240px, 22vw, 300px);
  /* Fluid max-width */
  --max-w:         min(1220px, 95vw);
  --r:             8px;
  --r-lg:          12px;
  /* Fluid gap: scales from 12px (mobile) to 20px (desktop) */
  --gap:           clamp(12px, 2vw, 20px);
  --t:             .18s ease;
  /* Fluid font scale */
  --fs-xs:         clamp(9px,  1.2vw, 11px);
  --fs-sm:         clamp(11px, 1.4vw, 13px);
  --fs-base:       clamp(13px, 1.6vw, 15px);
  --fs-md:         clamp(14px, 1.8vw, 16px);
  --fs-lg:         clamp(16px, 2.2vw, 20px);
  --fs-xl:         clamp(18px, 2.8vw, 24px);
  --fs-2xl:        clamp(20px, 3.5vw, 28px);
}
[data-theme="dark"]{
  --page-bg:    #0d1117;
  --card-bg:    #161b22;
  --header-bg:  #010409;
  --subnav-bg:  #0d1117;
  --input-bg:   #21262d;
  --tx-primary: #e6edf3;
  --tx-secondary:#8b949e;
  --tx-muted:   #6e7681;
  --tx-green:   #56d364;
  --border:     #30363d;
  --border-lt:  #21262d;
  /* v6.3: lighter green-text for dark mode (matches existing --tx-green) */
  --green-text: #56d364;
  /* v6.2.6: dark-mode shadow tokens — higher alpha so depth is visible
     on near-black backgrounds where rgba(0,0,0,.10) reads as invisible. */
  --shadow-sm:  0 1px 2px rgba(0,0,0,.30), 0 1px 3px rgba(0,0,0,.40);
  --shadow-md:  0 2px 4px rgba(0,0,0,.35), 0 6px 16px rgba(0,0,0,.50);
  --shadow-lg:  0 4px 8px rgba(0,0,0,.40), 0 12px 32px rgba(0,0,0,.60);
}

/* ═══════════════════════════════════════════════════
   RESET
═══════════════════════════════════════════════════ */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{font-size:14px;scroll-behavior:smooth}
body{
  font-family:'Roboto',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
  background:var(--page-bg);color:var(--tx-primary);
  line-height:1.6;transition:background var(--t),color var(--t);
}
a{color:var(--green-text);text-decoration:none;transition:color var(--t)}
a:hover{color:var(--green-dk)}
img{max-width:100%;height:auto;display:block}
ul,ol{list-style:none}

/* ═══════════════════════════════════════════════════════════════════════
   v6.3.1: CONTENT TYPOGRAPHY
   The theme's global reset (margin:0;padding:0 on *) strips spacing from
   ALL elements, which is correct for theme UI but breaks user-written
   post content. This block restores readable defaults — but only inside
   content wrappers, never globally.

   Scope: .article-body (article posts), .desc-text (app/game descriptions),
          .entry-content (safety net for any pages/posts).

   All rules:
   - No !important (would override editor preview unnecessarily)
   - Use existing theme CSS variables (dark mode auto-works)
   - Target both bare HTML and Gutenberg's block classnames
   - No effect on theme UI elements outside content wrappers
═══════════════════════════════════════════════════════════════════════ */

/* ── 1. Paragraphs ── */
.article-body p,
.desc-text p,
.entry-content p{
  margin:0 0 1em;
}

/* ── 2. Headings (bare HTML + Gutenberg's wp-block-heading) ── */
.article-body h2,.article-body .wp-block-heading,
.desc-text h2,.desc-text .wp-block-heading,
.entry-content h2,.entry-content .wp-block-heading{
  font-size:1.6em;
  font-weight:700;
  line-height:1.3;
  color:var(--tx-primary);
  margin:1.6em 0 .6em;
}
.article-body h3,.desc-text h3,.entry-content h3{
  font-size:1.3em;
  font-weight:700;
  line-height:1.3;
  color:var(--tx-primary);
  margin:1.4em 0 .5em;
}
.article-body h4,.desc-text h4,.entry-content h4{
  font-size:1.15em;
  font-weight:600;
  line-height:1.4;
  color:var(--tx-primary);
  margin:1.3em 0 .5em;
}
.article-body h5,.desc-text h5,.entry-content h5{
  font-size:1.05em;
  font-weight:600;
  color:var(--tx-primary);
  margin:1.2em 0 .4em;
}
.article-body h6,.desc-text h6,.entry-content h6{
  font-size:1em;
  font-weight:600;
  color:var(--tx-secondary);
  text-transform:uppercase;
  letter-spacing:.05em;
  margin:1.2em 0 .4em;
}
/* First heading in a content area shouldn't add huge top space */
.article-body > h2:first-child,.article-body > h3:first-child,
.desc-text > h2:first-child,.desc-text > h3:first-child,
.entry-content > h2:first-child,.entry-content > h3:first-child{
  margin-top:0;
}

/* ── 3. Blockquote (bare + Gutenberg's wp-block-quote) ── */
.article-body blockquote,.article-body .wp-block-quote,
.desc-text blockquote,.desc-text .wp-block-quote,
.entry-content blockquote,.entry-content .wp-block-quote{
  margin:1.2em 0;
  padding:.8em 1.2em;
  border-left:4px solid var(--green);
  background:var(--green-bg);
  border-radius:0 var(--r) var(--r) 0;
  font-style:italic;
  color:var(--tx-secondary);
}
.article-body blockquote p,.article-body .wp-block-quote p,
.desc-text blockquote p,.desc-text .wp-block-quote p,
.entry-content blockquote p,.entry-content .wp-block-quote p{
  margin-bottom:.4em;
}
.article-body blockquote p:last-child,.article-body .wp-block-quote p:last-child,
.desc-text blockquote p:last-child,.desc-text .wp-block-quote p:last-child,
.entry-content blockquote p:last-child,.entry-content .wp-block-quote p:last-child{
  margin-bottom:0;
}
.article-body blockquote cite,.article-body .wp-block-quote cite,
.desc-text blockquote cite,.desc-text .wp-block-quote cite,
.entry-content blockquote cite,.entry-content .wp-block-quote cite{
  display:block;
  margin-top:.4em;
  font-size:.9em;
  color:var(--tx-muted);
  font-style:normal;
}
.article-body blockquote cite::before,.article-body .wp-block-quote cite::before,
.desc-text blockquote cite::before,.desc-text .wp-block-quote cite::before,
.entry-content blockquote cite::before,.entry-content .wp-block-quote cite::before{
  content:"— ";
}

/* ── 4. Tables (bare + Gutenberg's wp-block-table figure wrapper) ── */
.article-body .wp-block-table,
.desc-text .wp-block-table,
.entry-content .wp-block-table{
  margin:1.2em 0;
  overflow-x:auto;             /* mobile: horizontal scroll instead of squish */
}
.article-body table,
.desc-text table,
.entry-content table{
  width:100%;
  border-collapse:collapse;
  margin:1.2em 0;
  font-size:.95em;
}
.article-body .wp-block-table table,
.desc-text .wp-block-table table,
.entry-content .wp-block-table table{
  margin:0;                    /* figure handles outer margin */
}
.article-body th,.article-body td,
.desc-text th,.desc-text td,
.entry-content th,.entry-content td{
  padding:10px 14px;
  border:1px solid var(--border-lt);
  text-align:left;
  vertical-align:top;
}
.article-body th,
.desc-text th,
.entry-content th{
  background:var(--input-bg);
  font-weight:600;
  color:var(--tx-primary);
}
.article-body tbody tr:nth-child(even),
.desc-text tbody tr:nth-child(even),
.entry-content tbody tr:nth-child(even){
  background:var(--input-bg);  /* zebra striping for readability */
}
.article-body table caption,
.desc-text table caption,
.entry-content table caption{
  caption-side:bottom;
  font-size:.85em;
  color:var(--tx-muted);
  padding:.4em 0;
  font-style:italic;
}

/* ── 5. Code blocks (bare pre + Gutenberg's wp-block-code) ── */
.article-body pre,.article-body .wp-block-code,.article-body .wp-block-preformatted,
.desc-text pre,.desc-text .wp-block-code,.desc-text .wp-block-preformatted,
.entry-content pre,.entry-content .wp-block-code,.entry-content .wp-block-preformatted{
  margin:1.2em 0;
  padding:1em 1.2em;
  background:var(--input-bg);
  border:1px solid var(--border-lt);
  border-radius:var(--r);
  overflow-x:auto;             /* long lines scroll instead of breaking layout */
  font-family:ui-monospace,'SF Mono',Menlo,Monaco,Consolas,'Courier New',monospace;
  font-size:.9em;
  line-height:1.5;
  color:var(--tx-primary);
  white-space:pre;
}
.article-body pre code,.article-body .wp-block-code code,
.desc-text pre code,.desc-text .wp-block-code code,
.entry-content pre code,.entry-content .wp-block-code code{
  background:none;
  border:none;
  padding:0;
  font-size:inherit;
  color:inherit;
}

/* ── 6. Inline code (NOT inside pre/code-block) ── */
.article-body :not(pre) > code,
.desc-text :not(pre) > code,
.entry-content :not(pre) > code{
  background:var(--input-bg);
  border:1px solid var(--border-lt);
  border-radius:4px;
  padding:.1em .4em;
  font-family:ui-monospace,'SF Mono',Menlo,Monaco,Consolas,'Courier New',monospace;
  font-size:.9em;
  color:var(--tx-primary);
}

/* ── 7. Horizontal rule (bare + Gutenberg's wp-block-separator) ── */
.article-body hr,.article-body .wp-block-separator,
.desc-text hr,.desc-text .wp-block-separator,
.entry-content hr,.entry-content .wp-block-separator{
  border:0;
  border-top:1px solid var(--border-lt);
  margin:2em 0;
  height:0;
}

/* ── 8. Figures (image with caption) ── */
.article-body figure,.article-body .wp-block-image,
.desc-text figure,.desc-text .wp-block-image,
.entry-content figure,.entry-content .wp-block-image{
  margin:1.2em 0;
}
.article-body figcaption,
.desc-text figcaption,
.entry-content figcaption{
  margin-top:.5em;
  font-size:.85em;
  color:var(--tx-muted);
  font-style:italic;
  text-align:center;
}

/* ── 9. Inline highlight (<mark>) — uses theme green for brand consistency ── */
.article-body mark,
.desc-text mark,
.entry-content mark{
  background:var(--green-bg);
  color:var(--tx-primary);
  padding:.05em .25em;
  border-radius:3px;
}

/* ── 10. Definition lists (glossary-style content) ── */
.article-body dl,
.desc-text dl,
.entry-content dl{
  margin:1.2em 0;
}
.article-body dt,
.desc-text dt,
.entry-content dt{
  font-weight:600;
  color:var(--tx-primary);
  margin-top:.6em;
}
.article-body dd,
.desc-text dd,
.entry-content dd{
  margin-left:1.5em;
  margin-bottom:.4em;
  color:var(--tx-secondary);
}
/* ═══ END v6.3.1 CONTENT TYPOGRAPHY ═══ */

/* v6.3.1: Restore default list bullets/numbers inside user-written post
   content. The reset above is correct for theme UI (nav menus, footers,
   card stacks — all of which should have no bullets), but it was also
   stripping bullets from article body lists. We re-enable them only
   inside content wrappers: .article-body (article posts),
   .desc-text (app/game post descriptions), and .wp-block-list (any
   Gutenberg-built list block, which WordPress 5.9+ outputs). */
.article-body ul,
.desc-text ul,
.entry-content ul,
ul.wp-block-list{
  list-style:disc;
  padding-left:1.5em;
  margin:0 0 1em;
}
.article-body ol,
.desc-text ol,
.entry-content ol,
ol.wp-block-list{
  list-style:decimal;
  padding-left:1.5em;
  margin:0 0 1em;
}
.article-body ul ul,
.desc-text ul ul,
.entry-content ul ul,
ul.wp-block-list ul{
  list-style:circle;            /* nested unordered → hollow circle */
}
.article-body ul ul ul,
.desc-text ul ul ul,
.entry-content ul ul ul,
ul.wp-block-list ul ul{
  list-style:square;            /* triple-nested → square */
}
.article-body li,
.desc-text li,
.entry-content li,
.wp-block-list li{
  margin-bottom:.4em;
  line-height:1.7;
}
button{cursor:pointer;font-family:inherit;font-size:inherit}
input,select,textarea{font-family:inherit;font-size:inherit}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}

/* ═══════════════════════════════════════════════════
   WP ADMIN BAR OFFSET  — prevents header hiding
═══════════════════════════════════════════════════ */
.admin-bar #site-header{top:32px}
.admin-bar #cat-nav{top:calc(32px + var(--header-h))}
.admin-bar #page-body{padding-top:calc(32px + var(--header-h) + var(--subnav-h))}
@media(max-width:782px){
  .admin-bar #site-header{top:46px}
  .admin-bar #cat-nav{top:calc(46px + var(--header-h))}
  .admin-bar #page-body{padding-top:calc(46px + var(--header-h) + var(--subnav-h))}
}

/* ═══════════════════════════════════════════════════
   PAGE OFFSET
═══════════════════════════════════════════════════ */
#page-body{padding-top:calc(var(--header-h) + var(--subnav-h))}

/* ═══════════════════════════════════════════════════
   CONTAINERS
═══════════════════════════════════════════════════ */
.wrap{max-width:var(--max-w);margin:0 auto;padding:0 var(--gap)}
.wrap-fluid{max-width:1440px;margin:0 auto;padding:0 var(--gap)}

/* ═══════════════════════════════════════════════════
   HEADER
═══════════════════════════════════════════════════ */
#site-header{
  position:fixed;top:0;left:0;right:0;
  height:var(--header-h);
  background:var(--header-bg);
  border-bottom:2px solid var(--green);
  z-index:1000;
}
.hdr-inner{
  display:flex;align-items:center;gap:14px;
  height:100%;max-width:var(--max-w);
  margin:0 auto;padding:0 var(--gap);
}
.site-logo{flex-shrink:0;display:flex;align-items:center;gap:8px;text-decoration:none}
.logo-txt{font-size:20px;font-weight:700;color:#fff;letter-spacing:-.5px;white-space:nowrap}
.logo-txt em{color:var(--green);font-style:normal}
.hdr-search{flex:1;max-width:580px;position:relative}
.hdr-search form{display:flex}
.hdr-search input{
  flex:1;height:40px;padding:0 14px;
  background:#fff;border:2px solid transparent;
  border-radius:var(--r) 0 0 var(--r);
  font-size:13.5px;color:#222;outline:none;
  transition:border-color var(--t);
}
.hdr-search input:focus{border-color:var(--green)}
.hdr-search button{
  height:40px;padding:0 16px;
  background:var(--green);color:#fff;
  border:none;border-radius:0 var(--r) var(--r) 0;
  font-size:15px;transition:background var(--t);
}
.hdr-search button:hover{background:var(--green-dk)}
.search-drop{
  position:fixed;top:0;left:0;width:auto;
  background:var(--card-bg);border:1px solid var(--border);
  border-top:2px solid var(--green);
  border-radius:0 0 var(--r) var(--r);box-shadow:0 8px 28px rgba(0,0,0,.22);
  max-height:min(60vh,500px);overflow-y:auto;z-index:9999;display:none;
}
.search-drop.open{display:block}
.sdrop-item{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:pointer;transition:background var(--t)}
.sdrop-item:hover{background:var(--input-bg)}
.sdrop-item img{width:38px;height:38px;border-radius:8px;flex-shrink:0;object-fit:cover}
.sdrop-name{font-size:13px;font-weight:500;color:var(--tx-primary)}
.sdrop-cat{font-size:11px;color:var(--tx-muted)}
.hdr-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}
.hdr-btn{
  width:36px;height:36px;border-radius:50%;
  background:rgba(255,255,255,.1);border:none;color:#fff;
  display:flex;align-items:center;justify-content:center;
  transition:background var(--t);
}
.hdr-btn:hover{background:rgba(255,255,255,.2)}
.mob-menu-btn{display:none;background:none;border:none;color:#fff;padding:6px;font-size:18px}

/* ═══════════════════════════════════════════════════
   CATEGORY NAV BAR
═══════════════════════════════════════════════════ */
#cat-nav{
  position:fixed;top:var(--header-h);left:0;right:0;
  height:var(--subnav-h);
  background:var(--subnav-bg);
  border-bottom:1px solid rgba(255,255,255,.07);
  z-index:999;overflow:hidden;
}
#cat-nav,
.cat-nav{
  background:var(--card-bg);
  border-bottom:1px solid var(--border-lt);
  position:sticky;
  top:0;
  z-index:100;
  overflow-x:auto;
  -webkit-overflow-scrolling:touch;
}
.cat-nav-inner{
  display:flex;align-items:center;
  height:100%;max-width:var(--max-w);
  margin:0 auto;padding:0 var(--gap);
  overflow-x:auto;scrollbar-width:none;
}
.cat-nav-inner::-webkit-scrollbar{display:none}
.cat-link{
  display:flex;align-items:center;gap:5px;
  padding:0 13px;height:100%;
  color:rgba(255,255,255,.72);font-size:13px;font-weight:500;
  white-space:nowrap;border-bottom:2px solid transparent;
  text-decoration:none;transition:all var(--t);flex-shrink:0;
}
.cat-link:hover,.cat-link.active{color:var(--green);border-bottom-color:var(--green)}
.cat-link i{font-size:12px;opacity:.8}

/* ═══════════════════════════════════════════════════
   MAIN LAYOUT — 2-column: content + sidebar
═══════════════════════════════════════════════════ */
.layout{
  display:grid;
  grid-template-columns:1fr var(--sidebar-w);
  gap:var(--gap);
  padding:var(--gap) 0;
  align-items:start;
}
.layout.no-sidebar{grid-template-columns:1fr}
.main-col{min-width:0}
.side-col{min-width:0}

/* ═══════════════════════════════════════════════════
   SECTION BLOCKS  (.sec)
═══════════════════════════════════════════════════ */
.sec{
  background:var(--card-bg);border:1px solid var(--border-lt);
  border-radius:var(--r-lg);overflow:hidden;margin-bottom:var(--gap);
  /* v6.2.6: sections get a base shadow so they read as distinct cards
     against the page background. Was flat — now visibly elevated. */
  box-shadow:var(--shadow-sm);
}
.sec-hdr{
  display:flex;align-items:center;justify-content:space-between;
  padding:13px 16px;border-bottom:1px solid var(--border-lt);
}
.sec-title{
  font-size:15px;font-weight:700;color:var(--tx-primary);
  display:flex;align-items:center;gap:7px;margin:0;
}
.sec-title i{color:var(--green);font-size:14px}
.sec-more{font-size:12px;font-weight:500;color:var(--green-text);text-decoration:none}
.sec-more:hover{color:var(--green-dk)}
.sec-body{padding:14px 16px}

/* ═══════════════════════════════════════════════════
   APP CARD  (.app-card-wrap > .app-card > a)
═══════════════════════════════════════════════════ */
.app-card-wrap{position:relative}
.app-card{
  background:var(--card-bg);border:1px solid var(--border-lt);
  border-radius:var(--r);overflow:hidden;
  transition:box-shadow var(--t),transform var(--t);height:100%;
  /* v6.2.6: base shadow so cards visibly lift off the section panel.
     Cards previously had no resting shadow — they merged into the
     panel behind them. */
  box-shadow:var(--shadow-sm);
}
.app-card:hover{box-shadow:var(--shadow-lg);transform:translateY(-2px)}
.app-card>a{
  display:flex;flex-direction:column;align-items:center;
  padding:11px;text-decoration:none;color:inherit;height:100%;
}
.app-icon{
  width:72px;height:72px;border-radius:14px;
  object-fit:cover;margin-bottom:8px;
  background:var(--input-bg);flex-shrink:0;
}
.app-icon-ph{
  width:72px;height:72px;border-radius:14px;
  background:var(--input-bg);margin-bottom:8px;flex-shrink:0;
}
.app-name{
  font-size:12px;font-weight:500;color:var(--tx-primary);
  text-align:center;line-height:1.3;margin-bottom:4px;width:100%;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.app-stars{
  display:flex;align-items:center;justify-content:center;
  gap:1px;font-size:10px;color:#f4b400;margin-bottom:3px;
}
.app-stars .star-val{color:var(--tx-muted);margin-left:2px}
.app-cat{
  font-size:10px;color:var(--tx-muted);text-align:center;
  width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
/* v6.2.6: badges wrap in a fixed-height flex container so cards stay
   equal height regardless of badge count. Up to 2 rows of small badges;
   anything beyond is clipped with overflow:hidden.
   v6.2.8: scoped under .app-card — the unscoped selector was leaking into
   .app-badges on single-page app headers and clipping the meta-pill row. */
.app-card .app-badges{
  display:flex;
  flex-wrap:wrap;
  gap:3px;
  justify-content:center;
  max-height:38px;            /* ~2 rows of badges */
  overflow:hidden;
  margin-bottom:4px;
  width:100%;
}
.app-card .app-fresh,
.app-card .app-hot,
.app-card .app-editor,
.app-card .app-game,
.app-card .app-prereg-badge{
  margin-bottom:0 !important; /* container handles spacing via gap */
}
.app-fresh{font-size:9px;background:#e8f5e9;color:#1b5e20;padding:1px 5px;border-radius:8px;font-weight:700;display:inline-block}
.app-hot{font-size:9px;background:#fce4ec;color:#880e4f;padding:1px 5px;border-radius:8px;font-weight:700;display:inline-block}
.app-editor{font-size:9px;background:#ede7f6;color:#4527a0;padding:1px 5px;border-radius:8px;font-weight:700;display:inline-block}
/* Lazy load */
.lazy{opacity:0;transition:opacity .3s}
.lazy.loaded{opacity:1}
/* App grids */
.app-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(110px,1fr));
  gap:10px;
}
/* Horizontal scroll row */
.app-row{
  display:flex;gap:10px;
  overflow-x:auto;padding-bottom:6px;
  align-items:stretch;        /* v6.2.6: equal-height cards in this row */
  scrollbar-width:thin;scrollbar-color:var(--green) transparent;
}
.app-row::-webkit-scrollbar{height:4px}
.app-row::-webkit-scrollbar-thumb{background:var(--green);border-radius:2px}
.app-row .app-card-wrap{
  flex:0 0 110px;width:110px;
  /* v6.2.7: must be flex-column so .app-card{height:100%} actually fills
     the stretched row height. Was just display:flex which kept the card
     at content height. */
  display:flex;flex-direction:column;
}
.app-row .app-card{height:100%;width:100%}

/* v6.0-3d: horizontal scroll row for category archive sub-sections.
   Wider cards than .app-row, smooth scroll snapping on touch devices. */
.app-hrow{
  display:flex; gap:12px;
  overflow-x:auto; overflow-y:hidden; padding-bottom:10px;
  scrollbar-width:thin; scrollbar-color:var(--green) transparent;
  scroll-snap-type:x proximity;
  -webkit-overflow-scrolling:touch;
  align-items:stretch;          /* v6.2.7: equal-height cards */
}
.app-hrow::-webkit-scrollbar{height:6px}
.app-hrow::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}
.app-hrow::-webkit-scrollbar-thumb:hover{background:var(--green)}
.app-hrow .app-card-wrap,
.app-hrow > .app-card{
  flex:0 0 150px; width:150px;
  scroll-snap-align:start;
}
.app-hrow .app-card-wrap{display:flex;flex-direction:column}
.app-hrow .app-card-wrap .app-card{height:100%;width:100%}
@media (max-width:520px){
  .app-hrow .app-card-wrap,
  .app-hrow > .app-card{flex:0 0 128px; width:128px}
}

/* ═══════════════════════════════════════════════════
   v6.1 — APKPure-style compact card
   Used in horizontal scrolling rows with snap points.
   Width tuned so ~10 fit per row on desktop (120px each),
   ~5 fit per row on mobile (110px each). No background;
   the row itself provides the chrome, cards are bare.
═══════════════════════════════════════════════════ */
.apkv-cc{
  flex:0 0 120px; width:120px;
  display:block; text-decoration:none; color:inherit;
  scroll-snap-align:start;
  padding:6px 4px;
  border-radius:8px;
  transition:background .15s, transform .15s;
}
.apkv-cc:hover{
  background:var(--input-bg);
  transform:translateY(-2px);
}
.apkv-cc-icon{
  display:block;
  width:80px; height:80px;
  margin:0 auto 8px;
  border-radius:18px;          /* APKPure uses very rounded squircles */
  object-fit:cover;
  background:var(--input-bg);
  box-shadow:0 1px 3px rgba(0,0,0,.08);
}
.apkv-cc-icon--ph{
  display:flex; align-items:center; justify-content:center;
  font-size:32px; color:var(--tx-muted);
}
.apkv-cc-name{
  font-size:12px; line-height:1.35; font-weight:500;
  color:var(--tx-primary);
  text-align:center;
  display:-webkit-box;
  -webkit-line-clamp:2;
  -webkit-box-orient:vertical;
  overflow:hidden;
  min-height:32px;             /* reserve 2 lines so rows stay aligned */
}
.apkv-cc-rating{
  display:flex; align-items:center; justify-content:center; gap:4px;
  margin-top:4px;
  font-size:11px; font-weight:600;
  color:var(--tx-muted);
}
.apkv-cc-rating .fa-star{
  color:#f4b400;
  font-size:10px;
}
@media (max-width:520px){
  .apkv-cc{flex:0 0 96px; width:96px; padding:4px}
  .apkv-cc-icon{width:64px; height:64px; border-radius:14px}
  .apkv-cc-name{font-size:11px; min-height:28px}
}

/* ═══════════════════════════════════════════════════
   v6.1 — APKPure-style banner card (cover-art featured)
   Container is auto-grid 3-up on desktop, single column
   on mobile. Each card has cover image on top, app icon
   + name in a footer strip below.
═══════════════════════════════════════════════════ */
.apkv-banner-grid{
  display:grid;
  grid-template-columns:repeat(3, 1fr);
  gap:14px;
}
@media (max-width:860px){
  .apkv-banner-grid{grid-template-columns:repeat(2, 1fr)}
}
@media (max-width:520px){
  .apkv-banner-grid{grid-template-columns:1fr}
}
.apkv-cb{
  display:block;
  text-decoration:none; color:inherit;
  border-radius:10px;
  overflow:hidden;
  background:var(--card-bg);
  border:1px solid var(--border-lt);
  transition:transform .18s, box-shadow .18s;
}
.apkv-cb:hover{
  transform:translateY(-2px);
  box-shadow:0 6px 20px rgba(0,0,0,.12);
}
.apkv-cb-cover{
  position:relative;
  width:100%;
  aspect-ratio:16/9;
  background-size:cover;
  background-position:center;
  background-color:var(--input-bg);
}
.apkv-cb-cover--ph{
  background:linear-gradient(135deg,#1a1a2e 0%,#0f3460 50%,#16213e 100%);
  display:flex; align-items:center; justify-content:center;
}
.apkv-cb-cover-ph-icon{
  font-size:56px;
  color:rgba(255,255,255,.18);
}
.apkv-cb-overlay{
  position:absolute; inset:0;
  background:linear-gradient(to bottom, transparent 60%, rgba(0,0,0,.35) 100%);
}
.apkv-cb-foot{
  display:flex; align-items:center; gap:10px;
  padding:10px 12px;
  background:var(--card-bg);
}
.apkv-cb-icon{
  flex-shrink:0;
  width:44px; height:44px;
  border-radius:10px;
  object-fit:cover;
  background:var(--input-bg);
}
.apkv-cb-icon--ph{
  display:flex; align-items:center; justify-content:center;
  font-size:18px; color:var(--tx-muted);
}
.apkv-cb-meta{flex:1; min-width:0}
.apkv-cb-name{
  font-size:13px; font-weight:600;
  color:var(--tx-primary);
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.apkv-cb-rating{
  display:flex; align-items:center; gap:4px;
  font-size:11px; font-weight:600;
  color:var(--tx-muted);
  margin-top:2px;
}
.apkv-cb-rating .fa-star{color:#f4b400; font-size:10px}

/* ═══════════════════════════════════════════════════
   HERO SLIDER
═══════════════════════════════════════════════════ */
.hero{
  background:var(--card-bg);border:1px solid var(--border-lt);
  border-radius:var(--r-lg);overflow:hidden;
  margin-bottom:var(--gap);position:relative;
}
.hero-slide{
  display:none;align-items:center;gap:20px;
  padding:24px 24px 50px;min-height:180px;
  background:linear-gradient(135deg,#1a1a2e 0%,#0f3460 100%);
  color:#fff;
}
.hero-slide.active{display:flex}
.hero-slide-icon{
  width:96px;height:96px;border-radius:20px;
  flex-shrink:0;object-fit:cover;
  box-shadow:0 8px 24px rgba(0,0,0,.4);background:var(--input-bg);
}
.hero-info{flex:1;min-width:0}
.hero-name{font-size:22px;font-weight:700;margin-bottom:4px;line-height:1.2}
.hero-dev{font-size:13px;opacity:.75;margin-bottom:8px}
.hero-desc{
  font-size:13px;opacity:.85;line-height:1.5;margin-bottom:14px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.hero-dl-btn{
  display:inline-flex;align-items:center;gap:8px;
  background:var(--green);color:#fff;
  padding:10px 20px;border-radius:var(--r);
  font-size:14px;font-weight:600;text-decoration:none;
  border:none;transition:background var(--t);
}
.hero-dl-btn:hover{background:var(--green-dk);color:#fff}
.hero-dots{
  position:absolute;bottom:10px;left:50%;transform:translateX(-50%);
  display:flex;gap:5px;
}
.hero-dot{
  width:8px;height:8px;border-radius:50%;
  background:rgba(255,255,255,.4);cursor:pointer;border:none;
  transition:all var(--t);
}
.hero-dot.active{background:var(--green);width:20px;border-radius:4px}

/* ═══════════════════════════════════════════════════
   SIDEBAR WIDGETS  (.sw)
═══════════════════════════════════════════════════ */
.sw{
  background:var(--card-bg);border:1px solid var(--border-lt);
  border-radius:var(--r-lg);overflow:hidden;margin-bottom:var(--gap);
  box-shadow:var(--shadow-sm);  /* v6.2.6: match main sections */
}
.sw-title{
  font-size:12px;font-weight:700;color:var(--tx-primary);
  padding:10px 14px;border-bottom:1px solid var(--border-lt);
  text-transform:uppercase;letter-spacing:.06em;
  display:flex;align-items:center;gap:6px;
}
.sw-title i{color:var(--green);font-size:12px}
.sw-item{
  display:flex;align-items:center;gap:10px;
  padding:9px 14px;border-bottom:1px solid var(--border-lt);
  text-decoration:none;color:inherit;transition:background var(--t);
}
.sw-item:last-child{border-bottom:none}
.sw-item:hover{background:var(--input-bg)}
.sw-icon{
  width:44px;height:44px;border-radius:10px;
  flex-shrink:0;object-fit:cover;background:var(--input-bg);
}
.sw-info{flex:1;min-width:0}
.sw-name{font-size:13px;font-weight:500;color:var(--tx-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sw-meta{font-size:11px;color:var(--tx-muted)}
.sw-share{display:flex;gap:7px;padding:12px 14px;flex-wrap:wrap}
.sw-share-btn{
  display:inline-flex;align-items:center;gap:4px;
  padding:6px 11px;border-radius:var(--r);
  font-size:12px;font-weight:500;text-decoration:none;
  border:none;cursor:pointer;transition:opacity var(--t);
}
.sw-share-btn:hover{opacity:.85}
.ad-zone{
  background:var(--input-bg);border:1px dashed var(--border);
  border-radius:var(--r);display:flex;align-items:center;
  justify-content:center;font-size:12px;color:var(--tx-muted);
  text-align:center;margin-bottom:var(--gap);
}

/* ═══════════════════════════════════════════════════
   RANKING PAGES
═══════════════════════════════════════════════════ */
.rank-page-hdr{
  background:var(--card-bg);border:1px solid var(--border-lt);
  border-radius:var(--r-lg);padding:18px 20px;margin-bottom:var(--gap);
}
.rank-page-title{font-size:20px;font-weight:700;display:flex;align-items:center;gap:8px;margin-bottom:6px}
.rank-page-title i{color:var(--green)}
.rank-page-desc{font-size:13px;color:var(--tx-secondary)}
.rank-tabs{
  display:flex;border-bottom:1px solid var(--border-lt);
  margin-top:14px;overflow-x:auto;scrollbar-width:none;
}
.rank-tabs::-webkit-scrollbar{display:none}
.rank-tab{
  padding:8px 16px;font-size:13px;font-weight:500;
  color:var(--tx-secondary);text-decoration:none;
  border-bottom:2px solid transparent;white-space:nowrap;
  transition:all var(--t);
}
.rank-tab:hover,.rank-tab.active{color:var(--green);border-bottom-color:var(--green)}
.rank-list{display:flex;flex-direction:column}
.rank-item{
  display:flex;align-items:center;gap:14px;
  padding:12px 16px;border-bottom:1px solid var(--border-lt);
  transition:background var(--t);
}
.rank-item:last-child{border-bottom:none}
.rank-item:hover{background:var(--input-bg)}
.rank-num{width:26px;text-align:center;font-size:16px;font-weight:700;flex-shrink:0;color:var(--tx-muted)}
.rank-num.t1,.rank-num.top1{color:#FFD700}
.rank-num.t2,.rank-num.top2{color:#C0C0C0}
.rank-num.t3,.rank-num.top3{color:#CD7F32}
/* rank-page-header = alias for rank-page-hdr (used by _base-ranking.php) */
.rank-page-header,.rank-page-hdr{
  background:var(--card-bg);border:1px solid var(--border-lt);
  border-radius:var(--r-lg);margin-bottom:var(--gap);overflow:hidden;
}
.rank-icon{width:56px;height:56px;border-radius:12px;flex-shrink:0;object-fit:cover;background:var(--input-bg)}
.rank-info{flex:1;min-width:0}
.rank-name{font-size:14px;font-weight:600;color:var(--tx-primary);margin-bottom:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rank-meta{font-size:12px;color:var(--tx-muted);display:flex;gap:8px;flex-wrap:wrap}
.rank-dl-btn{
  flex-shrink:0;display:inline-flex;align-items:center;gap:5px;
  background:var(--green);color:#fff;
  padding:7px 13px;border-radius:20px;
  font-size:12px;font-weight:600;text-decoration:none;
  transition:background var(--t);
}
.rank-dl-btn:hover{background:var(--green-dk);color:#fff}

/* ═══════════════════════════════════════════════════
   SINGLE APP PAGE
═══════════════════════════════════════════════════ */
.app-hdr-card{
  background:var(--card-bg);border:1px solid var(--border-lt);
  border-radius:var(--r-lg);overflow:hidden;margin-bottom:12px;
}
.app-hdr-top{display:flex;gap:16px;align-items:flex-start;padding:20px 20px 14px}
.app-hdr-icon{
  width:96px;height:96px;border-radius:20px;
  flex-shrink:0;object-fit:cover;
  box-shadow:var(--shadow-md);background:var(--input-bg);
}
.app-hdr-info{flex:1;min-width:0}
.app-hdr-title{font-size:22px;font-weight:700;color:var(--tx-primary);margin-bottom:4px;line-height:1.2}
.app-dev-link{font-size:13px;color:var(--green);display:inline-flex;align-items:center;gap:4px;margin-bottom:8px;text-decoration:none}
.app-dev-plain{font-size:13px;color:var(--tx-secondary);margin-bottom:8px;display:flex;align-items:center;gap:4px}
.app-rating-row{display:flex;align-items:center;gap:10px;margin-bottom:8px;flex-wrap:wrap}
.stars-html{display:flex;align-items:center;gap:2px;color:#f4b400;font-size:15px}
.rating-val{font-weight:700;color:var(--tx-primary);font-size:15px}
.rating-cnt{color:var(--tx-muted);font-size:12px}
.app-badges{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.badge-item{
  display:inline-flex;align-items:center;gap:4px;
  background:var(--green-bg);color:var(--tx-green);
  border:1px solid rgba(46,204,113,.3);
  padding:4px 10px;border-radius:20px;font-size:11px;font-weight:500;
}
.badge-item i{font-size:11px}
.info-pills{
  display:flex;flex-wrap:wrap;gap:8px;
  padding:12px 20px;background:var(--input-bg);border-top:1px solid var(--border-lt);
}
.info-pill{
  display:flex;flex-direction:column;align-items:center;
  background:var(--card-bg);border:1px solid var(--border);
  border-radius:var(--r);padding:7px 13px;min-width:76px;text-align:center;
}
.pill-lbl{font-size:10px;color:var(--tx-muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:2px}
.pill-val{font-size:12px;font-weight:600;color:var(--tx-primary)}
.user-rating-box{padding:14px 20px;border-top:1px solid var(--border-lt);text-align:center}
.user-rating-box h4{font-size:13px;color:var(--tx-secondary);margin-bottom:8px}
.star-picker{display:flex;justify-content:center;gap:8px}
.star-pick{font-size:28px;color:#ddd;background:none;border:none;cursor:pointer;line-height:1;transition:color var(--t),transform var(--t)}
.star-pick:hover,.star-pick.lit{color:#f4b400;transform:scale(1.15)}
.rating-msg{font-size:12px;color:var(--green);margin-top:6px;min-height:18px}
.safety-badge{
  display:flex;align-items:center;gap:12px;
  background:#e8f5e9;border:1px solid #a5d6a7;
  border-radius:var(--r);padding:12px 16px;margin:12px 0;
}
[data-theme="dark"] .safety-badge{background:#1a3a2a;border-color:#2d6a3f}
.safety-icon{width:36px;height:36px;border-radius:50%;background:var(--green);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.safety-icon i{color:#fff;font-size:15px}
.safety-info{flex:1}
.safety-title{font-size:13px;font-weight:700;color:#1b5e20;margin-bottom:2px}
[data-theme="dark"] .safety-title{color:#56d364}
.safety-detail{font-size:11px;color:#2e7d32}
[data-theme="dark"] .safety-detail{color:#81c784}
.safety-score{font-size:18px;font-weight:700;color:var(--green)}
.dl-main{
  display:flex;align-items:center;justify-content:center;gap:10px;
  width:100%;padding:15px;
  background:var(--green);color:#fff;font-size:16px;font-weight:700;
  border:none;border-radius:var(--r-lg);text-decoration:none;
  cursor:pointer;transition:background var(--t);margin-bottom:8px;
}
.dl-main:hover{background:var(--green-dk);color:#fff}
.dl-main i{font-size:20px}
.dl-note{text-align:center;font-size:12px;color:var(--tx-muted);margin-bottom:12px}
.screenshots-wrap{background:var(--card-bg);border:1px solid var(--border-lt);border-radius:var(--r-lg);padding:16px 20px;margin-bottom:12px}
.screenshots-wrap h2{font-size:16px;font-weight:700;margin-bottom:12px;color:var(--tx-primary)}
.shots-track{display:flex;gap:9px;overflow-x:auto;padding-bottom:4px;scrollbar-width:thin;scrollbar-color:var(--green) transparent}
.shots-track::-webkit-scrollbar{height:4px}
.shots-track::-webkit-scrollbar-thumb{background:var(--green);border-radius:2px}
.shot-thumb{flex:0 0 140px;height:248px;border-radius:var(--r);object-fit:cover;cursor:zoom-in;background:var(--input-bg);transition:transform var(--t)}
.shot-thumb:hover{transform:scale(1.02)}
.app-sec{background:var(--card-bg);border:1px solid var(--border-lt);border-radius:var(--r-lg);padding:20px;margin-bottom:12px}
.app-sec-title{font-size:16px;font-weight:700;color:var(--tx-primary);margin-bottom:14px;padding-bottom:10px;border-bottom:1px solid var(--border-lt);display:flex;align-items:center;gap:7px}
.app-sec-title i{color:var(--green);font-size:15px}
.desc-body{font-size:14px;color:var(--tx-secondary);line-height:1.75}
.desc-text{max-height:120px;overflow:hidden;transition:max-height .4s ease}
/* v6.0 Session 3a: .open drops the max-height cap entirely.
   The old 2000px value truncated long articles mid-content. */
.desc-text.open{max-height:none;overflow:visible}
.read-more-btn{display:inline-flex;align-items:center;gap:4px;color:var(--green);font-size:13px;font-weight:500;background:none;border:none;cursor:pointer;padding:4px 0;margin-top:4px}
.whats-new-box{background:var(--input-bg);border-left:3px solid var(--green);border-radius:0 var(--r) var(--r) 0;padding:12px 16px;font-size:13px;color:var(--tx-secondary);line-height:1.7}
.perm-list{display:flex;flex-direction:column;gap:8px}
.perm-item{display:flex;align-items:flex-start;gap:12px;padding:10px 12px;background:var(--input-bg);border-radius:var(--r);border:1px solid var(--border-lt)}

/* v6.2.5: collapsible "Show all permissions" toggle (uses native <details>) */
.perm-more{margin-top:10px}
.perm-more > summary{
  list-style:none;
  cursor:pointer;
  display:inline-flex;
  align-items:center;
  gap:8px;
  padding:8px 14px;
  background:var(--input-bg);
  border:1px solid var(--border);
  border-radius:var(--r);
  font-size:13px;
  font-weight:500;
  color:var(--tx-secondary);
  user-select:none;
  transition:background .15s, color .15s, border-color .15s;
}
.perm-more > summary::-webkit-details-marker{display:none}
.perm-more > summary::marker{content:""}
.perm-more > summary:hover{background:var(--card-bg);color:var(--green);border-color:var(--green)}
.perm-more > summary > .fa-chevron-down{transition:transform .2s ease;font-size:11px}
.perm-more[open] > summary > .fa-chevron-down{transform:rotate(180deg)}
.perm-more .perm-more-hide{display:none}
.perm-more[open] .perm-more-show{display:none}
.perm-more[open] .perm-more-hide{display:inline}
.perm-icon{width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.perm-low{background:#e8f5e9;color:#2e7d32}
.perm-med{background:#fff8e1;color:#f57f17}
.perm-high{background:#fce4ec;color:#c62828}
.perm-icon i{font-size:14px}
.perm-info{flex:1}
.perm-name{font-size:13px;font-weight:600;color:var(--tx-primary);margin-bottom:2px}
.perm-desc{font-size:12px;color:var(--tx-secondary)}
.perm-risk{font-size:10px;font-weight:600;padding:2px 7px;border-radius:10px;align-self:flex-start;white-space:nowrap}
.risk-low{background:#e8f5e9;color:#2e7d32}
.risk-med{background:#fff8e1;color:#f57f17}
.risk-high{background:#fce4ec;color:#c62828}
.ver-table-wrap{overflow-x:auto}
.ver-table{width:100%;border-collapse:collapse;font-size:13px}
.ver-table th{padding:9px 12px;text-align:left;background:var(--input-bg);color:var(--tx-secondary);font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.05em;border-bottom:2px solid var(--border)}
.ver-table td{padding:10px 12px;border-bottom:1px solid var(--border-lt);color:var(--tx-primary)}
.ver-table tr:last-child td{border-bottom:none}
.ver-table tr:hover td{background:var(--input-bg)}
.ver-dl-btn{display:inline-flex;align-items:center;gap:4px;background:var(--green);color:#fff;padding:5px 12px;border-radius:20px;font-size:12px;font-weight:600;text-decoration:none;transition:background var(--t)}
.ver-dl-btn:hover{background:var(--green-dk);color:#fff}
.faq-list{display:flex;flex-direction:column}
.faq-item{border-bottom:1px solid var(--border-lt)}
.faq-item:last-child{border-bottom:none}
.faq-q{display:flex;justify-content:space-between;align-items:center;width:100%;padding:13px 0;background:none;border:none;cursor:pointer;text-align:left;gap:8px;font-size:14px;font-weight:600;color:var(--tx-primary)}
.faq-icon{font-size:18px;color:var(--green);flex-shrink:0;transition:transform .2s}
.faq-q[aria-expanded="true"] .faq-icon{transform:rotate(45deg)}
.faq-a{font-size:13px;color:var(--tx-secondary);line-height:1.7;padding-bottom:12px;display:none}
.share-row{display:flex;gap:8px;flex-wrap:wrap}
.share-btn{display:inline-flex;align-items:center;gap:5px;padding:7px 13px;border-radius:20px;font-size:12px;font-weight:600;text-decoration:none;border:none;cursor:pointer;transition:opacity var(--t)}
.share-btn:hover{opacity:.85}
.btn-wa{background:#25d366;color:#fff}
.btn-tg{background:#0088cc;color:#fff}
.btn-copy{background:var(--input-bg);color:var(--tx-primary);border:1px solid var(--border)}
.qr-wrap{display:flex;align-items:center;gap:14px;background:var(--input-bg);border-radius:var(--r);padding:12px;border:1px solid var(--border)}
.qr-info h4{font-size:13px;font-weight:600;margin-bottom:4px;color:var(--tx-primary)}
.qr-info p{font-size:12px;color:var(--tx-secondary)}
.related-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.dev-row{display:flex;flex-direction:column}
.dev-item{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--border-lt);text-decoration:none;color:inherit;transition:background var(--t)}
.dev-item:last-child{border-bottom:none}
.dev-item:hover{background:var(--input-bg);margin:0 -8px;padding-left:8px;padding-right:8px;border-radius:var(--r)}
.dev-icon{width:48px;height:48px;border-radius:10px;flex-shrink:0;object-fit:cover;background:var(--input-bg)}
.dev-info{flex:1;min-width:0}
.dev-name{font-size:13px;font-weight:500;color:var(--tx-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dev-meta{font-size:11px;color:var(--tx-muted)}
.compat-form{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px}
.compat-select{padding:8px 12px;border-radius:var(--r);border:1px solid var(--border);background:var(--input-bg);color:var(--tx-primary);font-size:13px}
.compat-result{font-size:13px;font-weight:600;margin-top:6px;min-height:20px}
.compat-ok{color:#27ae60}
.compat-no{color:#e74c3c}
#sticky-bar{display:none;position:fixed;bottom:0;left:0;right:0;background:var(--card-bg);border-top:1px solid var(--border);padding:9px var(--gap);z-index:998;align-items:center;gap:10px;box-shadow:0 -4px 12px rgba(0,0,0,.1)}
.apkv-lb{position:fixed;inset:0;background:rgba(0,0,0,.92);z-index:9999;display:flex;align-items:center;justify-content:center}
.apkv-lb img{max-width:90vw;max-height:90vh;object-fit:contain;border-radius:var(--r)}
.lb-close{position:absolute;top:14px;right:14px;background:rgba(255,255,255,.15);border:none;color:#fff;font-size:22px;width:44px;height:44px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center}
.read-bar{position:fixed;top:var(--header-h);left:0;width:0;height:2px;background:var(--green);z-index:9998;transition:width .1s linear}
#btt{position:fixed;bottom:80px;right:20px;width:40px;height:40px;border-radius:50%;background:var(--green);color:#fff;border:none;cursor:pointer;display:none;align-items:center;justify-content:center;z-index:997;box-shadow:var(--shadow-md);font-size:14px}

/* ═══════════════════════════════════════════════════
   BREADCRUMB
═══════════════════════════════════════════════════ */
.breadcrumb-nav{padding:8px 0;margin-bottom:10px}
.breadcrumb{display:flex;flex-wrap:wrap;gap:3px;align-items:center;font-size:12px;color:var(--tx-muted)}
.breadcrumb a{color:var(--green)}
.breadcrumb .sep{margin:0 2px}
.breadcrumb .current{color:var(--tx-secondary)}

/* ═══════════════════════════════════════════════════
   PAGINATION
═══════════════════════════════════════════════════ */
.nav-links{display:flex;justify-content:center;gap:6px;flex-wrap:wrap;margin:20px 0}
.page-numbers{display:inline-flex;align-items:center;justify-content:center;min-width:36px;height:36px;padding:0 10px;border-radius:var(--r);border:1px solid var(--border);background:var(--card-bg);color:var(--tx-secondary);font-size:13px;font-weight:500;text-decoration:none;transition:all var(--t)}
.page-numbers:hover{border-color:var(--green);color:var(--green)}
.page-numbers.current{background:var(--green);color:#fff;border-color:var(--green)}
.page-numbers.dots{border:none;background:none}

/* ═══════════════════════════════════════════════════
   FOOTER  — id="site-footer" dark
═══════════════════════════════════════════════════ */
#site-footer{
  background:var(--header-bg);
  color:rgba(255,255,255,.72);
  padding:48px 0 20px;
  margin-top:40px;
  border-top:2px solid var(--green);
}
.footer-inner{max-width:var(--max-w);margin:0 auto;padding:0 var(--gap)}
.footer-grid{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr 1fr;gap:28px;margin-bottom:32px}

/* v6.2.5: footer columns use <details> for native mobile-collapse behavior.
   On desktop we make the chevron + toggle invisible so the column reads as
   normal static content. On mobile we restore the toggle UX. */
.footer-col{display:block}
.footer-col > summary{
  list-style:none;
  cursor:default;            /* desktop: not a button */
  display:block;
}
.footer-col > summary::-webkit-details-marker{display:none}
.footer-col > summary::marker{content:""}
/* Desktop: force-show .footer-links regardless of [open] state.
   <details> default-hides children when not [open] — we override that
   above the mobile breakpoint so all 4 columns render side-by-side as
   they always have. The accordion behavior only kicks in below 480px. */
@media(min-width:481px){
  .footer-col > .footer-links{display:flex !important}
}
.footer-logo{font-size:22px;font-weight:700;color:#fff;margin-bottom:10px;display:block}
.footer-logo em{color:var(--green);font-style:normal}
.footer-about{font-size:13px;line-height:1.6;color:rgba(255,255,255,.6);margin-bottom:16px}
.footer-social{display:flex;gap:8px}
.social-a{width:34px;height:34px;background:rgba(255,255,255,.1);border-radius:8px;display:flex;align-items:center;justify-content:center;color:rgba(255,255,255,.8);text-decoration:none;transition:background var(--t)}
.social-a:hover{background:var(--green);color:#fff}
.footer-col-title{font-size:13px;font-weight:700;color:#fff;text-transform:uppercase;letter-spacing:.06em;margin-bottom:14px;padding-bottom:8px;border-bottom:1px solid rgba(255,255,255,.1)}
.footer-links{display:flex;flex-direction:column;gap:8px}
.footer-links a{font-size:13px;color:rgba(255,255,255,.6);text-decoration:none;transition:color var(--t)}
.footer-links a:hover{color:var(--green)}
.footer-bottom{border-top:1px solid rgba(255,255,255,.1);padding-top:18px;display:flex;justify-content:space-between;align-items:center;font-size:12px;color:rgba(255,255,255,.4);flex-wrap:wrap;gap:8px}

/* ═══════════════════════════════════════════════════
   MOBILE NAV
═══════════════════════════════════════════════════ */
#mob-nav{position:fixed;top:var(--header-h);left:0;right:0;background:var(--card-bg);z-index:997;border-bottom:1px solid var(--border);padding:16px;box-shadow:var(--shadow-md);display:none}
.admin-bar #mob-nav{top:calc(32px + var(--header-h))}
.mob-search{display:flex;margin-bottom:12px}
.mob-search input{flex:1;height:40px;padding:0 12px;border:1px solid var(--border);border-radius:var(--r) 0 0 var(--r);background:var(--input-bg);color:var(--tx-primary);font-size:13px}
.mob-search button{height:40px;padding:0 14px;background:var(--green);border:none;border-radius:0 var(--r) var(--r) 0;color:#fff}
.mob-nav-links{display:flex;flex-direction:column}
.mob-nav-links a{display:block;padding:10px 0;font-size:14px;color:var(--tx-primary);border-bottom:1px solid var(--border-lt);text-decoration:none}
.mob-nav-links a:hover{color:var(--green)}

/* ═══════════════════════════════════════════════════
   DISCOVER / PRE-REGISTER
═══════════════════════════════════════════════════ */
.discover-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px}
.discover-card{background:var(--card-bg);border:1px solid var(--border-lt);border-radius:var(--r-lg);overflow:hidden;text-decoration:none;color:inherit;display:block;transition:box-shadow var(--t)}
.discover-card:hover{box-shadow:var(--shadow-md)}
.discover-img{width:100%;height:120px;object-fit:cover;background:var(--input-bg)}
.discover-body{padding:12px}
.discover-icon-row{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.discover-icon-row img{width:44px;height:44px;border-radius:10px;flex-shrink:0;object-fit:cover;background:var(--input-bg)}
.discover-name{font-size:14px;font-weight:600;color:var(--tx-primary);margin-bottom:2px}
.discover-dev{font-size:12px;color:var(--tx-muted)}
.discover-desc{font-size:12px;color:var(--tx-secondary);line-height:1.5;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.prereg-badge{background:linear-gradient(135deg,#9c27b0,#673ab7);color:#fff;font-size:10px;font-weight:700;padding:2px 8px;border-radius:10px;display:inline-block;margin-bottom:6px}

/* ═══════════════════════════════════════════════════
   RESPONSIVE
═══════════════════════════════════════════════════ */
@media(max-width:1024px){
  .layout{grid-template-columns:1fr}
  .side-col{display:none}
  .footer-grid{grid-template-columns:1fr 1fr}
  .related-grid{grid-template-columns:repeat(3,1fr)}
}
@media(max-width:768px){
  :root{--header-h:58px;--subnav-h:0px}
  /* mob-menu-btn: shown by responsive CSS only */
  .app-hdr-title{font-size:18px}
  .app-hdr-icon{width:72px;height:72px}
  .hero-slide{flex-direction:column;text-align:center;padding:16px 16px 52px}
  .hero-slide-icon{width:72px;height:72px}
  .hero-name{font-size:18px}
  .footer-grid{grid-template-columns:1fr 1fr;gap:20px}
  .related-grid{grid-template-columns:repeat(2,1fr)}
  #sticky-bar{display:flex}
  .info-pills{overflow-x:auto;flex-wrap:nowrap}
  .discover-grid{grid-template-columns:1fr 1fr}
}
@media(max-width:480px){
  .footer-grid{grid-template-columns:1fr;gap:0}
  .discover-grid{grid-template-columns:1fr}
  .app-grid{grid-template-columns:repeat(auto-fill,minmax(96px,1fr))}
  .related-grid{grid-template-columns:repeat(2,1fr)}

  /* v6.2.5: mobile footer accordion — sub-cat lists were getting too long
     and dominating the page footer. Each column now collapses; user taps
     the title to expand the list they want. */
  .footer-col{
    border-bottom:1px solid rgba(255,255,255,.08);
  }
  .footer-col:last-of-type{border-bottom:0}
  .footer-col > summary{
    cursor:pointer;
    padding:14px 0;
    margin:0;
    border-bottom:0;
    display:flex;
    justify-content:space-between;
    align-items:center;
    position:relative;
  }
  /* Chevron via pseudo-element — keeps markup clean */
  .footer-col > summary::after{
    content:"\f078";                 /* fa-chevron-down */
    font-family:"Font Awesome 6 Free";
    font-weight:900;
    font-size:11px;
    color:rgba(255,255,255,.5);
    transition:transform .2s ease;
  }
  .footer-col[open] > summary::after{transform:rotate(180deg)}
  .footer-col[open] > summary{padding-bottom:6px}
  .footer-col .footer-links{padding:0 0 14px 0}
  .footer-col-title{margin-bottom:0;padding-bottom:0;border-bottom:0}
}

/* ═══ v5.0 ADDITIONS ═══════════════════════════════════
   Hero clickable areas, Dark mode fine-tuning,
   Review section, News card hover, is_game badge
═══════════════════════════════════════════════════ */

/* Hero clickable icon link */
.hero-app-link{
  display:block;flex-shrink:0;
  border-radius:20px;
  transition:transform var(--t),opacity var(--t);
}
.hero-app-link:hover{transform:scale(1.05);opacity:.9}

/* Hero "Details" info button */
.hero-info-btn{
  display:inline-flex;align-items:center;gap:6px;
  background:rgba(255,255,255,.15);color:#fff;
  padding:9px 16px;border-radius:var(--r);
  font-size:13px;font-weight:500;
  border:1px solid rgba(255,255,255,.25);
  transition:background var(--t);text-decoration:none;
}
.hero-info-btn:hover{background:rgba(255,255,255,.25);color:#fff}

/* Hero name link */
.hero-name-link{text-decoration:none;}
.hero-name-link:hover .hero-name{color:var(--green)}
.hero-name{transition:color var(--t)}

/* is_game badge */
.app-game{font-size:9px;background:#e3f2fd;color:#0d47a1;padding:1px 5px;border-radius:8px;font-weight:700;display:inline-block}
[data-theme="dark"] .app-game{background:#0d2137;color:#64b5f6}

/* Review / comment section */
.apkv-review{margin:0;padding:0}
.review-avatar{border-radius:50%;object-fit:cover}
.comment-form p{margin-bottom:10px}
.comment-form label{font-size:13px;font-weight:600;color:var(--tx-secondary);display:block;margin-bottom:4px}
.comment-form input[type="text"],
.comment-form input[type="email"],
.comment-form textarea{
  width:100%;padding:9px 12px;
  border:1px solid var(--border);
  border-radius:var(--r);
  background:var(--input-bg);color:var(--tx-primary);
  font-size:13px;font-family:inherit;
  transition:border-color var(--t);outline:none;
}
.comment-form input:focus,
.comment-form textarea:focus{border-color:var(--green)}
.comment-form textarea{min-height:100px;resize:vertical}
.comment-form .form-submit input{
  background:var(--green)!important;color:#fff!important;
  border:none!important;padding:10px 28px!important;
  border-radius:var(--r)!important;font-size:14px!important;
  font-weight:600!important;cursor:pointer!important;
  transition:background var(--t)!important;
}
.comment-form .form-submit input:hover{background:var(--green-dk)!important}

/* Ranking pages: card hover */
.rank-item a{color:inherit;text-decoration:none}
.rank-item:hover .rank-name{color:var(--green)}
.rank-item:hover{cursor:pointer}

/* Sidebar: Browse Rankings quick-nav */
.sw-nav-links{display:flex;flex-direction:column}
.sw-nav-link{
  display:flex;align-items:center;gap:8px;
  padding:8px 14px;border-bottom:1px solid var(--border-lt);
  text-decoration:none;color:var(--tx-secondary);
  font-size:12px;transition:all var(--t);
}
.sw-nav-link:last-child{border-bottom:none}
.sw-nav-link:hover{background:var(--input-bg);color:var(--green)}
.sw-nav-link i{width:14px;text-align:center;color:var(--green);font-size:12px}
.sw-nav-link .sw-count{margin-left:auto;font-size:10px;background:var(--input-bg);padding:1px 6px;border-radius:8px;color:var(--tx-muted)}

/* Footer: link hover underline */
.footer-links a:hover{text-decoration:underline}

/* News card hover */
a.news-card-link:hover{box-shadow:var(--shadow-md)!important}

/* Section transition animation */
.sec{animation:fadein .3s ease}
@keyframes fadein{from{opacity:.6;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}

/* Dark mode: comments */
[data-theme="dark"] .comment-form input,
[data-theme="dark"] .comment-form textarea{
  background:var(--input-bg);color:var(--tx-primary);border-color:var(--border);
}

/* ═══════════════════════════════════════════════════
   v5.1 — MOBILE EXCELLENCE + APP CARD ADDITIONS
═══════════════════════════════════════════════════ */

/* iOS momentum scrolling on all scroll containers */
.app-row,
.shots-track,
.cat-nav-inner,
.info-pills,
.rank-tabs {
  -webkit-overflow-scrolling: touch;
}

/* touch-action: manipulation removes 300ms tap delay on all interactive elements */
a, button, [role="button"],
input[type="submit"], input[type="button"],
.app-card, .rank-item, .sw-item, .hero-dl-btn,
.dl-main, .ver-dl-btn, .rank-dl-btn, .hero-app-link,
.cat-link, .sw-nav-link, .page-numbers {
  touch-action: manipulation;
}

/* Prevent body overflow on mobile (stops horizontal scroll bleed) */
html, body {
  overflow-x: hidden;
}

/* App card: version number */
.app-version {
  font-size: 10px;
  color: var(--green);
  font-weight: 600;
  margin-bottom: 2px;
  text-align: center;
}

/* Ensure all images never overflow */
img { max-width: 100%; }

/* Prevent text overflow in narrow layouts */
.app-name, .rank-name, .sw-name, .dev-name {
  word-break: break-word;
}

/* Larger tap targets on mobile for nav links */
@media (max-width: 768px) {
  .cat-link {
    padding: 0 10px;
    font-size: 12px;
  }
  .sw-nav-link {
    padding: 11px 14px;
  }
  .sw-item {
    padding: 10px 14px;
  }
  .rank-item {
    padding: 10px 12px;
  }
  .app-sec {
    padding: 14px;
  }
  .app-hdr-top {
    padding: 14px 14px 10px;
  }
  .info-pills {
    padding: 10px 14px;
  }
  .sec-hdr {
    padding: 10px 12px;
  }
  .sec-body {
    padding: 10px 12px;
  }
  /* Full-width download button on mobile */
  .dl-main {
    font-size: 15px;
    padding: 14px;
  }
  /* QR layout stacks on mobile */
  .qr-wrap {
    flex-direction: column;
    text-align: center;
  }
  /* Share row wraps nicely */
  .share-row {
    gap: 6px;
  }
  .share-btn {
    padding: 7px 10px;
    font-size: 11px;
  }
}

/* ─── Smooth scrollbar on desktop ──────────────── */
@media (min-width: 769px) {
  ::-webkit-scrollbar { width: 8px; height: 8px; }
  ::-webkit-scrollbar-track { background: var(--page-bg); }
  ::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }
  ::-webkit-scrollbar-thumb:hover { background: var(--green); }
}

/* ─── Focus styles (accessibility) ─────────────── */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible {
  outline: 2px solid var(--green);
  outline-offset: 2px;
}

/* ─── Print: hide interactive elements ─────────── */
@media print {
  #site-header, #cat-nav, #mob-nav, #sticky-bar, 
  #btt, .read-bar, .side-col, .hero-dots { display: none !important; }
  #page-body { padding-top: 0 !important; }
}

/* ── Missing classes found by audit ── */
.app-grid-lg {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
  gap: 12px;
}
.dl-main-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: var(--green);
  color: #fff;
  padding: 10px 22px;
  border-radius: var(--r);
  font-size: 14px;
  font-weight: 600;
  text-decoration: none;
  transition: background var(--t);
}
.dl-main-btn:hover { background: var(--green-dk); color: #fff; }

/* ── v5.3 Performance CSS ── */
/* content-visibility: auto for off-screen sections (massive render perf win) */
.sec,
.sw,
.app-sec,
.rank-page-hdr {
  content-visibility: auto;
  contain-intrinsic-size: 0 400px;
}
/* Exception: above-fold elements must NOT have content-visibility */
.hero,
.app-hdr-card,
#site-header,
#cat-nav {
  content-visibility: visible;
}
/* will-change only on animated elements */
.hero-slide { will-change: auto; }
.app-card:hover { will-change: transform; }

/* ═══════════════════════════════════════════════════════════════
   FLUID RESPONSIVE DESIGN v5.4
   Modern CSS: clamp(), aspect-ratio, fluid grids, full breakpoint
   coverage from 320px (small phone) to 1920px (large desktop)
═══════════════════════════════════════════════════════════════ */

/* ── Fluid typography using CSS custom properties ────────── */
body            { font-size: var(--fs-base); }
.app-name       { font-size: var(--fs-xs); }
.app-cat,
.app-version    { font-size: var(--fs-xs); }
.sec-title      { font-size: var(--fs-md); }
.sw-name        { font-size: var(--fs-sm); }
.sw-meta        { font-size: var(--fs-xs); }
.rank-name      { font-size: var(--fs-sm); }
.pill-val       { font-size: var(--fs-sm); }
.app-hdr-title  { font-size: var(--fs-xl); }
.hero-name      { font-size: var(--fs-2xl); }
.footer-logo    { font-size: var(--fs-xl); }
.app-sec-title  { font-size: var(--fs-lg); }

/* ── Aspect-ratio for images (prevents CLS) ─────────────── */
.app-icon,
.app-icon-ph {
  aspect-ratio: 1 / 1;
  width: clamp(60px, 10vw, 80px);
  height: auto; /* Let aspect-ratio control height */
}
.rank-icon {
  aspect-ratio: 1 / 1;
  width: clamp(44px, 7vw, 60px);
  height: auto;
}
.sw-icon {
  aspect-ratio: 1 / 1;
  width: clamp(36px, 6vw, 48px);
  height: auto;
}
.app-hdr-icon {
  aspect-ratio: 1 / 1;
  width: clamp(72px, 12vw, 104px);
  height: auto;
}
.hero-slide-icon {
  aspect-ratio: 1 / 1;
  width: clamp(72px, 12vw, 100px);
  height: auto;
}
/* Screenshots: use aspect-ratio instead of fixed height */
.shot-thumb {
  aspect-ratio: 9 / 16;
  width: clamp(110px, 20vw, 150px);
  height: auto;
  flex: 0 0 clamp(110px, 20vw, 150px);
}

/* ── Fluid app cards in horizontal scroll row ───────────── */
.app-row .app-card-wrap {
  flex: 0 0 clamp(96px, 15vw, 120px);
  width: clamp(96px, 15vw, 120px);
}

/* ── Fluid app-grid: fully responsive, no breakpoint needed ─ */
.app-grid {
  grid-template-columns: repeat(auto-fill, minmax(clamp(90px, 15vw, 120px), 1fr));
}
.app-grid-lg {
  grid-template-columns: repeat(auto-fill, minmax(clamp(130px, 18vw, 160px), 1fr));
}

/* ── Fluid layout gap ────────────────────────────────────── */
.layout { gap: var(--gap); padding: var(--gap) var(--gap); }
.sec-body { padding: var(--gap); }
.sec-hdr  { padding: calc(var(--gap) * 0.85) var(--gap); }

/* ── Fluid hero ──────────────────────────────────────────── */
.hero-slide {
  padding: clamp(16px, 3vw, 28px) clamp(16px, 3vw, 28px) clamp(50px, 8vw, 56px);
  min-height: clamp(160px, 25vw, 200px);
}
.hero-dl-btn {
  padding: clamp(8px, 1.5vw, 12px) clamp(14px, 2.5vw, 24px);
  font-size: var(--fs-base);
}

/* ── Fluid single app page ───────────────────────────────── */
.app-sec { padding: clamp(14px, 2.5vw, 22px); }
.app-hdr-top { padding: clamp(14px, 2.5vw, 22px); }
.info-pills { padding: clamp(10px, 2vw, 14px) clamp(14px, 2.5vw, 22px); }
.info-pill { min-width: clamp(60px, 10vw, 80px); }
.dl-main { font-size: var(--fs-md); padding: clamp(12px, 2.5vw, 16px); }

/* ── Fluid sidebar widgets ───────────────────────────────── */
.sw-item { padding: clamp(8px, 1.5vw, 11px) clamp(12px, 2vw, 16px); }

/* ══════════════════════════════════════════════════════════
   COMPLETE BREAKPOINT SYSTEM
   320px  — Small phones (iPhone SE, budget Android)
   375px  — Standard phones (iPhone 12/13/14, most Android)
   480px  — Large phones / phablets
   600px  — Small tablets / large phones landscape
   768px  — Tablets portrait (iPad mini, iPad)
   1024px — Tablets landscape / small laptops
   1280px — Standard laptops
   1440px — Large laptops / small desktops
   1920px — Full HD desktops
══════════════════════════════════════════════════════════ */

/* ── 1920px: Full HD desktops ────────────────────────────── */
@media (min-width: 1920px) {
  :root { --max-w: 1400px; --gap: 22px; }
  .app-grid { grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); }
}

/* ── 1440px: Large laptops / small desktops ─────────────── */
@media (min-width: 1440px) {
  :root { --max-w: 1280px; --sidebar-w: clamp(280px, 22vw, 320px); }
}

/* ── 1280px: Standard laptops ───────────────────────────── */
@media (max-width: 1280px) {
  :root { --sidebar-w: 260px; }
}

/* ── 1024px: Tablets landscape / small laptops ──────────── */
@media (max-width: 1024px) {
  .layout { grid-template-columns: 1fr; }
  .side-col { display: none; }
  .footer-grid { grid-template-columns: 1fr 1fr; }
  .related-grid { grid-template-columns: repeat(3, 1fr); }
}

/* ── 768px: Tablets portrait ────────────────────────────── */
@media (max-width: 768px) {
  :root { --header-h: 58px; --subnav-h: 0px; }
  .mob-menu-btn { display: flex; }
  .footer-grid { grid-template-columns: 1fr 1fr; gap: clamp(14px, 3vw, 22px); }
  .related-grid { grid-template-columns: repeat(2, 1fr); }
  #sticky-bar { display: flex; }
  .info-pills { overflow-x: auto; flex-wrap: nowrap; -webkit-overflow-scrolling: touch; }
  .discover-grid { grid-template-columns: 1fr 1fr; }
  .hero-slide {
    flex-direction: column;
    text-align: center;
    padding: clamp(14px, 3vw, 18px) clamp(14px, 3vw, 18px) clamp(50px, 9vw, 56px);
    align-items: center;
  }
  .hero-info-btn { display: none; } /* Clean up hero on mobile */
  .qr-wrap { display: none; } /* QR useless on mobile - user is already on mobile */
}

/* ── 600px: Large phones / phablets ─────────────────────── */
@media (max-width: 600px) {
  .app-grid {
    grid-template-columns: repeat(auto-fill, minmax(clamp(80px, 22vw, 100px), 1fr));
    gap: clamp(6px, 2vw, 10px);
  }
  .rank-item { gap: 10px; padding: 10px; }
  .rank-icon { width: 44px; }
  .app-hdr-top { gap: 12px; }
  .app-badges { gap: 4px; }
  .badge-item { font-size: 10px; padding: 3px 8px; }
  .share-row { gap: 6px; }
  .share-btn { padding: 6px 10px; font-size: 11px; }
}

/* ── 480px: Standard phones ──────────────────────────────── */
@media (max-width: 480px) {
  :root { --header-h: 52px; --subnav-h: 0px; }
  .footer-grid { grid-template-columns: 1fr; }
  .discover-grid { grid-template-columns: 1fr; }
  .related-grid { grid-template-columns: repeat(2, 1fr); }
  .hero-name { font-size: clamp(16px, 5vw, 20px); }
  .dl-main { padding: clamp(11px, 3vw, 14px); font-size: clamp(14px, 4vw, 16px); }
  .info-pill { min-width: clamp(55px, 18vw, 70px); padding: 6px 8px; }
  .pill-lbl { font-size: 9px; }
  .pill-val { font-size: 11px; }
  .app-sec { padding: clamp(12px, 3vw, 16px); }
  .faq-q { font-size: clamp(13px, 3.5vw, 15px); }
  /* Stack hero buttons vertically on very small screens */
  .hero-slide > div > div[style*="flex"] { flex-direction: column; align-items: center; }

  /* v6.2.8: Single-page app header restructure for phones.
     Old layout: icon (96px fixed) on left, all info stacked vertically on
     its right. Pills column was tall while icon was short → ugly white
     space below icon.
     New layout: 2-column grid where icon spans rows 1-3 (title/dev/rating)
     and meta-pills row spans both columns on row 4. No white space, pills
     get full-width room. Pattern matches APKPure / Play Store mobile. */
  .app-hdr-info { display: contents; }
  .app-hdr-top {
    display: grid;
    grid-template-columns: auto 1fr;
    column-gap: 14px;
    row-gap: 4px;
    align-items: start;
  }
  /* Icon spans the title/dev/rating rows so they sit beside it */
  .app-hdr-icon {
    grid-column: 1;
    grid-row: 1 / span 3;
    align-self: start;
  }
  .app-hdr-title,
  .app-dev-link,
  .app-dev-plain,
  .app-rating-unified {
    grid-column: 2;
  }
  .app-hdr-title  { grid-row: 1; margin-bottom: 0; }
  .app-dev-link,
  .app-dev-plain  { grid-row: 2; margin-bottom: 0; }
  .app-rating-unified { grid-row: 3; margin-top: 4px; }
  /* Meta pills + info-grid span full width on row 4 */
  .app-hdr-info > .app-badges,
  .app-hdr-info > .app-info-grid {
    grid-column: 1 / -1;
    grid-row: 4;
    margin-top: 10px;
  }
  .app-hdr-info > .app-badges { margin-bottom: 4px; }
  .app-hdr-info > .app-info-grid { grid-row: 5; margin-top: 4px; }
}

/* ── 375px: Standard smartphones (most common size) ─────── */
@media (max-width: 375px) {
  :root { --gap: 10px; }
  .hdr-inner { padding: 0 10px; }
  .cat-nav-inner { padding: 0 10px; }
  .wrap { padding: 0 10px; }
  .app-row { gap: 8px; }
  .app-row .app-card-wrap { flex: 0 0 clamp(86px, 23vw, 96px); width: clamp(86px, 23vw, 96px); }
  .app-icon, .app-icon-ph { width: clamp(54px, 15vw, 64px); }
  .app-name { font-size: clamp(9px, 2.5vw, 11px); }
  .sec-hdr { padding: 10px 10px; }
  .sec-body { padding: 10px; }
}

/* ── 320px: Smallest phones (iPhone SE 1st gen, budget phones) ─ */
@media (max-width: 320px) {
  :root { --gap: 8px; --header-h: 48px; --subnav-h: 0px; }
  .hdr-search { display: none; } /* Too narrow for search, use mobile menu */
  .app-row .app-card-wrap { flex: 0 0 80px; width: 80px; }
  .app-icon, .app-icon-ph { width: 52px; }
  .app-name { font-size: 9px; }
  .logo-txt { font-size: 16px; }
  .dl-main { font-size: 14px; }
}

/* ── Landscape mode on phones ────────────────────────────── */
@media (max-height: 500px) and (orientation: landscape) {
  #site-header { height: 46px; }
  #cat-nav { display: none; } /* Hide category nav in landscape to save vertical space */
  #page-body { padding-top: 46px; }
  .hero-slide { min-height: 140px; padding-bottom: 40px; }
  .admin-bar #site-header { top: 32px; }
  .admin-bar #page-body { padding-top: calc(32px + 46px); }
}

/* ── Large screens: prevent content from getting too wide ── */
@media (min-width: 1024px) {
  .app-sec-title { font-size: var(--fs-lg); }
  .app-hdr-title { font-size: var(--fs-xl); }
}

/* ── High-DPI / Retina screens ───────────────────────────── */
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
  /* Sharpen borders on retina */
  .app-card, .sec, .sw, .app-sec, .app-hdr-card {
    border-width: 0.5px;
  }
}

/* ── Reduced motion (accessibility) ─────────────────────── */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
  .hero-slide { transition: none; }
}

/* ── Dark mode system preference (respects OS setting) ──── */
/* Note: Our JS-based dark mode takes priority, this is fallback */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --page-bg: #0d1117;
    --card-bg: #161b22;
    --header-bg: #010409;
    --subnav-bg: #0d1117;
    --input-bg: #21262d;
    --tx-primary: #e6edf3;
    --tx-secondary: #8b949e;
    --tx-muted: #6e7681;
    --border: #30363d;
    --border-lt: #21262d;
  }
}

/* ── Print styles ────────────────────────────────────────── */
@media print {
  #site-header, #cat-nav, #mob-nav, #sticky-bar,
  #btt, .read-bar, .side-col, .hero-dots,
  .share-row, .qr-wrap, #report-btn,
  .user-rating-box { display: none !important; }
  #page-body { padding-top: 0 !important; }
  .app-hdr-card, .app-sec { box-shadow: none; border: 1px solid #ccc; }
  a[href]::after { content: " (" attr(href) ")"; font-size: 10px; }
}

/* ═══════════════════════════════════════════════
   v5.5 NEW COMPONENTS
═══════════════════════════════════════════════ */

/* ── Nav: category dropdown ───────────────── */
.cat-dropdown{position:relative;display:inline-flex}
.cat-dropdown-btn{background:none;border:none;cursor:pointer;font-family:inherit;font-size:inherit;color:inherit;padding:0}
.cat-dropdown-menu{
  display:none;position:absolute;top:calc(100% + 4px);left:0;
  min-width:220px;max-height:380px;overflow-y:auto;
  background:var(--card-bg);border:1px solid var(--border);
  border-radius:var(--r);box-shadow:0 4px 20px rgba(0,0,0,.12);
  z-index:9999;padding:4px 0
}
.cat-drop-item{
  display:flex;align-items:center;justify-content:space-between;
  padding:8px 14px;font-size:13px;color:var(--tx-secondary);
  text-decoration:none;transition:background var(--t);white-space:nowrap
}
.cat-drop-item:hover,.cat-drop-item.active{background:var(--input-bg);color:var(--green)}
.cat-drop-count{
  font-size:10px;background:var(--input-bg);color:var(--tx-muted);
  border-radius:10px;padding:1px 6px;margin-left:8px;flex-shrink:0
}
@media(max-width:600px){.cat-dropdown-menu{left:auto;right:0}}

/* ── Sidebar: view-all link ───────────────── */
.sw-viewall{
  display:block;text-align:center;padding:9px 14px;font-size:12px;
  font-weight:600;color:var(--green);border-top:1px solid var(--border-lt);
  text-decoration:none;transition:background var(--t)
}
.sw-viewall:hover{background:var(--input-bg)}

/* ── Sidebar: follow buttons ──────────────── */
.sw-follow{display:flex;flex-wrap:wrap;gap:6px;padding:10px 14px 14px}

/* ── Sidebar: category chips ─────────────── */
.sw-cats-grid{display:flex;flex-wrap:wrap;gap:6px;padding:10px 14px 14px}
.sw-cat-chip{
  display:inline-block;padding:5px 11px;
  background:var(--input-bg);border:1px solid var(--border-lt);
  border-radius:20px;font-size:12px;font-weight:500;
  color:var(--tx-secondary);text-decoration:none;
  transition:all var(--t);white-space:nowrap
}
.sw-cat-chip:hover,.sw-cat-chip.active{
  background:var(--green);border-color:var(--green);color:#fff
}

/* ── Pre-register badge ───────────────────── */
.app-prereg-badge{
  display:inline-block;
  background:linear-gradient(135deg,#7c3aed,#a78bfa);
  color:#fff;font-size:9px;font-weight:700;
  padding:2px 7px;border-radius:10px;
  text-transform:uppercase;letter-spacing:.4px;white-space:nowrap
}

/* ── Version history (APKPure-style) ─────── */
.ver-history-wrap{display:flex;flex-direction:column;gap:0}
.ver-history-row{
  display:flex;align-items:center;gap:12px;
  padding:12px 4px;border-bottom:1px solid var(--border-lt);
  transition:background var(--t)
}
.ver-history-row:last-child{border-bottom:none}
.ver-history-row:hover{background:var(--input-bg);border-radius:var(--r);padding-left:10px;padding-right:10px}
.ver-history-row.current-version{
  background:var(--green-bg,rgba(0,200,83,.06));
  border-radius:var(--r);padding:12px 10px
}
.ver-h-icon{width:44px;height:44px;border-radius:var(--r);flex-shrink:0;object-fit:cover}
.ver-h-info{flex:1;min-width:0}
.ver-h-num{
  font-size:14px;font-weight:600;color:var(--tx-primary);
  display:flex;align-items:center;gap:8px;flex-wrap:wrap
}
.ver-h-latest{
  font-size:10px;font-weight:700;background:var(--green);
  color:#fff;padding:2px 8px;border-radius:10px;text-transform:uppercase
}
.ver-h-meta{
  font-size:12px;color:var(--tx-muted);
  display:flex;gap:10px;flex-wrap:wrap;margin-top:2px
}
.ver-h-dl{
  flex-shrink:0;display:inline-flex;align-items:center;gap:6px;
  padding:10px 16px;background:var(--green);color:#fff;
  border-radius:var(--r);font-size:13px;font-weight:600;
  text-decoration:none;transition:background var(--t);white-space:nowrap;
  min-height:44px;            /* v6.3 a11y: WCAG 2.5.5 minimum touch target */
}
.ver-h-dl:hover{opacity:.88;color:#fff}
@media(max-width:480px){
  .ver-history-row{flex-wrap:wrap}
  .ver-h-dl{width:100%;justify-content:center}
}

/* ── Update style version ─────────────────── */

/* ── v5.5 fixes ── */
/* rank-dl-txt — text label inside download button on ranking pages */
.rank-dl-txt { display:inline; }
@media(max-width:480px) { .rank-dl-txt { display:none; } }

/* ver-row — version history repeater row in admin meta box */
.ver-row { transition:box-shadow var(--t); }
.ver-row:hover { box-shadow:0 2px 8px rgba(0,0,0,.08); }

/* app-meta — metadata line in download-redirect page */
.app-meta { font-size:13px;color:#888;margin-bottom:22px; }

/* dl-btn / dl-btn-secondary — download redirect page buttons */
.dl-btn { display:flex;align-items:center;justify-content:center;gap:10px;
    width:100%;padding:14px;background:#2ecc71;color:#fff;border:none;
    border-radius:12px;font-size:16px;font-weight:700;text-decoration:none;
    cursor:pointer;margin-bottom:10px;transition:background .18s; }
.dl-btn:hover { background:#27ae60; }
.dl-btn-secondary { display:inline-block;font-size:13px;color:#888;margin-bottom:20px; }



/* ═══════════════════════════════════════════════════════════
   v5.5  UNIFIED HEADER + ALL NEW COMPONENTS
   Single authoritative block — no conflicts, no duplicates
═══════════════════════════════════════════════════════════ */

/* ── 0. Kill the old second nav bar completely ─────────── */
#cat-nav, .cat-nav { display: none !important; }

/* ── 1. HEADER: one bar, overflow:hidden, fixed position ─ */
/* 
   KEY ARCHITECTURE:
   - #site-header has overflow:hidden — nothing escapes the 64px bar
   - The dropdown uses position:FIXED (not absolute) — fixed positioning
     breaks out of overflow:hidden, so it floats freely below the bar
   - This is how APKPure and every professional nav works
*/
#site-header {
    /* v6.0: overflow:hidden removed — dropdowns now use position:absolute
       and need to escape the header bounds. Children are still height-constrained
       via the .hdr-inner { height:100% } flex layout, so no visual overflow occurs. */
    overflow: visible;
}

/* ── 2. hdr-inner: single-row flex, NO wrapping ever ───── */
.hdr-inner {
    display: flex;
    align-items: center;       /* vertical center — cleaner than stretch */
    flex-wrap: nowrap;         /* NEVER wrap */
    gap: 0;
    height: 100%;
    max-width: var(--max-w);
    margin: 0 auto;
    padding: 0 var(--gap);
}

/* ── 3. Logo: fixed size, never shrinks ─────────────────── */
.site-logo {
    flex-shrink: 0;
    margin-right: 8px;
}

/* ── 4. Nav wrapper: fixed size, never shrinks ──────────── */
.hdr-nav {
    display: flex;
    align-items: center;
    flex-shrink: 0;
    gap: 0;
    height: 100%;
}

/* ── 5. Each nav link ────────────────────────────────────── */
.nav-lnk {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 0 14px;
    height: 100%;
    font-size: 13px;
    font-weight: 600;
    color: rgba(255,255,255,.82);
    text-decoration: none;
    white-space: nowrap;
    border-bottom: 3px solid transparent;
    background: none;
    border-top: none;
    border-left: none;
    border-right: none;
    cursor: pointer;
    font-family: inherit;
    transition: color .15s, border-color .15s;
    flex-shrink: 0;
}
.nav-lnk:hover,
.nav-lnk.active {
    color: #fff;
    border-bottom-color: var(--green);
}
.nav-lnk i { font-size: 12px; opacity: .9; }
.nav-caret { font-size: 9px; margin-left: 3px; opacity: .6; }

/* ── 6. Categories dropdown ─────────────────────────────── */
.hdr-cat-wrap {
    display: inline-flex;
    align-items: center;
    height: 100%;
    position: relative;   /* v6.0: relative so the dropdown can anchor to each nav item */
}

/*
   v6.0: Each Games/Apps/Articles nav item has its own dropdown.
   Uses position:absolute relative to .hdr-cat-wrap for per-item alignment.
   Opens on :hover (desktop) and on .is-open class (mobile/tap + JS-driven).
   Transition provides the 200ms delay so mouse can drift without flicker.
*/
.nav-cat-menu {
    display: block;
    position: absolute;
    top: 100%;
    left: 0;
    min-width: 240px;
    max-height: 70vh;
    overflow-y: auto;
    background: var(--card-bg);
    border: 1px solid var(--border);
    border-top: 2px solid var(--green);
    border-radius: 0 0 var(--r-lg) var(--r-lg);
    box-shadow: 0 8px 28px rgba(0,0,0,.22);
    z-index: 9999;
    padding: 6px 0;
    opacity: 0;
    visibility: hidden;
    transform: translateY(-4px);
    transition: opacity .18s ease, transform .18s ease, visibility .18s;
}
/* Desktop: hover opens (200ms of mouse tolerance via the transition delay) */
@media (hover: hover) and (pointer: fine) {
  .hdr-cat-wrap:hover > .nav-cat-menu,
  .hdr-cat-wrap:focus-within > .nav-cat-menu {
      opacity: 1;
      visibility: visible;
      transform: translateY(0);
  }
}
/* Tap/JS-driven "open" state — used by mobile and keyboard */
.hdr-cat-wrap.is-open > .nav-cat-menu {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
}
.nav-cat-item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 10px 18px;
    font-size: 13px;
    color: var(--tx-secondary);
    text-decoration: none;
    white-space: nowrap;
    transition: background .12s;
    gap: 12px;
}
.nav-cat-item:hover,
.nav-cat-item.active {
    background: var(--input-bg);
    color: var(--green);
}
.nav-cat-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.nav-cat-cnt {
    font-size: 11px;
    font-weight: 700;
    background: var(--green-bg);
    color: var(--green-dk);
    border-radius: 10px;
    padding: 1px 8px;
    flex-shrink: 0;
}
/* Mobile: dropdowns become full-width when the hamburger menu is open */
@media (max-width: 900px) {
    .nav-cat-menu {
        position: static;
        box-shadow: none;
        border-radius: 0;
        border: 0;
        border-top: 1px solid var(--border-lt);
        padding: 0;
        max-height: none;
        min-width: 0;
    }
    .nav-cat-menu {
        /* On mobile, closed by default; JS .is-open controls visibility */
        display: none;
        opacity: 1; visibility: visible; transform: none;
    }
    .hdr-cat-wrap.is-open > .nav-cat-menu { display: block; }
    .nav-cat-item { padding-left: 32px; font-size: 13px; }
}

/* ── 6b. APKPure-style chip/pill rows (sub-category browser) ─── */
.apkv-chip {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 10px 16px;
    border-radius: 20px;
    font-size: 13px;
    font-weight: 600;
    line-height: 1.2;
    white-space: nowrap;
    text-decoration: none;
    color: var(--tx-secondary);
    background: var(--card-bg);
    border: 1px solid var(--border);
    transition: background .15s, color .15s, border-color .15s;
    min-height: 44px;            /* v6.3 a11y: WCAG 2.5.5 touch target */
    box-sizing: border-box;
}
.apkv-chip:hover {
    color: var(--green);
    border-color: var(--green);
}
.apkv-chip.is-active {
    background: var(--green);
    color: #fff;
    border-color: var(--green);
}
.apkv-chip-n {
    display: inline-block;
    font-size: 10px;
    font-weight: 700;
    background: var(--green-bg);
    color: var(--green-dk);
    border-radius: 10px;
    padding: 1px 7px;
    margin-left: 2px;
}
.apkv-chip.is-active .apkv-chip-n {
    background: rgba(255,255,255,.25);
    color: #fff;
}
.apkv-chips {
    scrollbar-width: thin;
}
.apkv-chips::-webkit-scrollbar { height: 6px; }
.apkv-chips::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }

/* ── 7. Search: flex:1 fills remaining space ─────────────── */
.hdr-search {
    flex: 1;
    min-width: 120px;      /* can compress but has a minimum */
    max-width: 720px;      /* v6.0-3a: raised from 580px — less empty space */
    margin: 0 10px;
}

/* ── 8. Actions: fixed size, hug right edge ──────────────── */
.hdr-actions {
    flex-shrink: 0;
    margin-left: auto;     /* v6.0-3a: push to right edge */
    display: flex;
    align-items: center;
    gap: 4px;
}

/* ── 9. Hamburger + responsive nav ───────────────────────
   v6.0 Session 3a: rather than hiding the whole nav on mobile,
   show compact icon-only tabs on narrow viewports so users have
   direct access to Games/Apps/Articles without opening the drawer.
   Text labels hide progressively as viewport shrinks.
*/
.mob-menu-btn { display: none; }
@media (max-width: 860px) {
    /* Tablet zone: keep nav, hide text labels, compact padding, show icons */
    .hdr-nav .nav-lnk-txt { display: none; }
    .hdr-nav .nav-cat-btn { padding-left: 10px; padding-right: 8px; }
    .hdr-nav .nav-caret   { display: none; }  /* no room for caret */
    .mob-menu-btn { display: flex; }
    .hdr-search   { margin: 0 6px; }
}
@media (max-width: 520px) {
    /* v6.1.1 #8: Hide inline search bar on phones — was overlapping the dark
       mode toggle and hamburger button. Search is still accessible via the
       hamburger drawer, which has its own search input. Phone-zone header is
       now: [logo] [spacer] [theme toggle] [hamburger]. */
    .hdr-nav      { display: none; }
    .hdr-search   { display: none; }
    .hdr-btn      { width: 36px; height: 36px; }  /* slightly bigger touch target */
    .mob-menu-btn { width: 36px; height: 36px; }
}

/* v6.2.1: Mobile search icon button — visible only on phone-zone (≤520px). */
.hdr-mob-search-btn { display: none; }
@media (max-width: 520px) {
    .hdr-mob-search-btn { display: flex; }
}

/* v6.2.1: Mobile search overlay — slides over the header bar when icon tapped.
   Sits absolutely inside #site-header so it inherits the header background
   and doesn't push other content. */
.mob-search-overlay {
    position: absolute;
    inset: 0;
    background: var(--header-bg, #16a085);
    display: none;
    z-index: 100;
    padding: 0 12px;
}
.mob-search-overlay.is-open { display: flex; align-items: center; }
.mob-search-overlay form {
    display: flex;
    width: 100%;
    align-items: center;
    gap: 6px;
}
.mob-search-overlay input[type="search"] {
    flex: 1;
    height: 38px;
    padding: 0 12px;
    border: 0;
    border-radius: var(--r);
    background: rgba(255,255,255,.95);
    color: #222;
    font-size: 14px;
    -webkit-appearance: none;
    appearance: none;
}
.mob-search-overlay input[type="search"]:focus {
    outline: 2px solid var(--green);
    outline-offset: 0;
}
.mob-search-overlay button {
    width: 38px;
    height: 38px;
    flex-shrink: 0;
    background: rgba(255,255,255,.15);
    border: 0;
    border-radius: var(--r);
    color: #fff;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}
.mob-search-overlay button:hover {
    background: rgba(255,255,255,.25);
}
.mob-search-close {
    /* Close button is the leading control */
}

/* ── 10. Mobile nav drawer position ─────────────────────── */
#mob-nav {
    position: fixed;
    top: var(--header-h);   /* directly under header — no subnav gap */
}
.admin-bar #mob-nav {
    top: calc(32px + var(--header-h));
}
@media (max-width: 782px) {
    .admin-bar #mob-nav { top: calc(46px + var(--header-h)); }
}

/* ── 11. Page body offset ────────────────────────────────── */
/* subnav-h is 0px so calc gives just header-h = 64px */
#page-body { padding-top: var(--header-h); }
.admin-bar #page-body { padding-top: calc(32px + var(--header-h)); }
@media (max-width: 782px) {
    .admin-bar #page-body { padding-top: calc(46px + var(--header-h)); }
}

/* ── 12. Read bar position ───────────────────────────────── */
.read-bar { top: var(--header-h); }

/* ── 13. Dark mode: admin bar offset ────────────────────── */
.admin-bar #site-header { top: 32px; }
@media (max-width: 782px) {
    .admin-bar #site-header { top: 46px; }
}

/* ── 14. Landscape phone: reduce header height ───────────── */
@media (max-height: 500px) and (orientation: landscape) {
    :root { --header-h: 48px; }
}

/* ═══════════════════════════════════════════════════════════
   UNIFIED APP INFO CARD (no repetition, no old rating box)
═══════════════════════════════════════════════════════════ */
/* Hide the old standalone rating box */
.user-rating-box { display: none !important; }

/* Unified rating row: shows current rating + tap to rate */
.app-rating-unified {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    margin: 8px 0 10px;
}
.app-rating-unified .star-picker {
    display: flex;
    gap: 2px;
    cursor: pointer;
}
.app-rating-unified .star-pick {
    font-size: 24px;
    color: #ddd;
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
    line-height: 1;
    transition: color .1s, transform .1s;
}
.app-rating-unified .star-pick.lit      { color: #f4b400; }
.app-rating-unified .star-pick.half-lit { color: #f4b400; opacity: .55; }
.app-rating-unified .star-pick:hover    { transform: scale(1.2); color: #f4b400; }
.rating-tap-hint {
    font-size: 11px;
    color: var(--tx-muted);
    font-style: italic;
    transition: opacity .3s;
}
.rating-tap-hint.hidden { opacity: 0; pointer-events: none; }

/* App info chips row */
.app-info-grid {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: 8px;
}
.info-chip {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: 11px;
    color: var(--tx-muted);
    background: var(--input-bg);
    border-radius: 4px;
    padding: 3px 9px;
    white-space: nowrap;
}
.info-chip strong { color: var(--tx-secondary); font-weight: 600; }

/* ═══════════════════════════════════════════════════════════
   SIDEBAR: LATEST ARTICLES + CATEGORIES LIST
═══════════════════════════════════════════════════════════ */
.sw-article-item {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 10px 14px;
    text-decoration: none;
    color: inherit;
    border-bottom: 1px solid var(--border-lt);
    transition: background .12s;
}
.sw-article-item:last-of-type { border-bottom: none; }
.sw-article-item:hover { background: var(--input-bg); }
.sw-article-thumb {
    width: 52px;
    height: 52px;
    border-radius: var(--r);
    object-fit: cover;
    flex-shrink: 0;
    background: var(--input-bg);
}
.sw-article-no-img {
    width: 52px;
    height: 52px;
    border-radius: var(--r);
    background: var(--input-bg);
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--tx-muted);
    font-size: 18px;
    flex-shrink: 0;
}
.sw-article-info { flex: 1; min-width: 0; }
.sw-article-title {
    font-size: 12px;
    font-weight: 600;
    color: var(--tx-primary);
    line-height: 1.5;
    margin-bottom: 3px;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.sw-article-date { font-size: 11px; color: var(--tx-muted); }

/* Categories list */
.sw-cat-list { list-style: none; margin: 0; padding: 0; }
.sw-cat-list-item { border-bottom: 1px solid var(--border-lt); }
.sw-cat-list-item:last-child { border-bottom: none; }
.sw-cat-list-link {
    display: flex;
    align-items: center;
    padding: 9px 16px;
    font-size: 13px;
    color: var(--tx-secondary);
    text-decoration: none;
    transition: background .12s, color .12s;
    gap: 0;
}
.sw-cat-list-link:hover,
.sw-cat-list-link.active {
    background: var(--input-bg);
    color: var(--green);
    font-weight: 600;
}
.sw-cat-arrow {
    color: var(--green);
    font-size: 11px;
    margin-right: 8px;
    transition: transform .12s;
    flex-shrink: 0;
}
.sw-cat-list-link:hover .sw-cat-arrow { transform: translateX(3px); }
.sw-cat-list-name { flex: 1; }
.sw-cat-list-count {
    font-size: 11px;
    font-weight: 700;
    background: var(--input-bg);
    color: var(--tx-muted);
    border-radius: 10px;
    padding: 1px 8px;
    flex-shrink: 0;
    margin-left: 8px;
}
.sw-cat-list-link:hover .sw-cat-list-count,
.sw-cat-list-link.active .sw-cat-list-count {
    background: rgba(46,204,113,.15);
    color: var(--green);
}

/* Sidebar rank number */
.sw-rank {
    color: var(--tx-muted);
    font-size: 13px;
    font-weight: 700;
    width: 22px;
    text-align: center;
    flex-shrink: 0;
}
.sw-rank-top { color: #f4b400; }

/* ── Misc fixes ─────────────────────────────────────────── */
.rank-dl-txt { display: inline; }
@media (max-width: 480px) { .rank-dl-txt { display: none; } }
.ver-row:hover { box-shadow: 0 2px 8px rgba(0,0,0,.08); }
