
.v2x.apd{
  --accent:#3680ED; --accent-dark:#2060C0; --accent-light:#60A4F5;
  --accent-soft:#eef4fe; --accent-soft2:#f6f9ff;
  --ink:#0F0F12; --muted:#4A4A5A; --muted2:#8a8a9a;
  --line:#e7eaf1; --line-strong:#d8deea; --bg:#f6f8fc;
  --green:#16a34a; --green-soft:#e8f8ef; --amber:#F59E0B; --amber-soft:#fff5e6;
  --violet:#8B5CF6; --violet-soft:#f3eefe; --red:#EF4444; --sky:#0ea5e9;
  --grad:linear-gradient(135deg,#2060C0 0%,#3680ED 50%,#60A4F5 100%);
  --grad-soft:linear-gradient(135deg,#eef4fe,#f6f9ff);
  --r:16px; --r-lg:24px; --r-pill:999px;
  --sh-sm:0 1px 3px rgba(16,24,40,.06),0 1px 2px rgba(16,24,40,.04);
  --sh-md:0 6px 18px rgba(16,24,40,.08);
  --sh-lg:0 18px 50px rgba(16,24,40,.12);
  --sh-glow:0 12px 40px rgba(54,128,237,.18);
  --ease:cubic-bezier(.16,1,.3,1);
}
.v2x.apd{background:var(--bg);}
.v2x.apd .apd-shell{max-width:var(--seo-shell-max,1280px);margin:0 auto;padding:26px clamp(16px,4vw,40px) 60px;}
@media(min-width:1500px){.v2x.apd .apd-shell{max-width:1340px;}}

/* breadcrumb */
.v2x.apd .apd-crumb{display:flex;flex-wrap:wrap;align-items:center;gap:7px;font-size:.8rem;color:var(--muted2);margin-bottom:18px;}
.v2x.apd .apd-crumb a{color:var(--muted);} .v2x.apd .apd-crumb a:hover{color:var(--accent);text-decoration:none;}
.v2x.apd .apd-crumb .sep{opacity:.5;}

/* ── HERO ─────────────────────────────────────────────── */
.v2x.apd .apd-hero{position:relative;border-radius:var(--r-lg);overflow:hidden;background:
   radial-gradient(1200px 380px at 88% -10%,rgba(96,164,245,.16),transparent 60%),
   radial-gradient(900px 320px at 0% 0%,rgba(54,128,237,.10),transparent 55%),#fff;
   border:1px solid var(--line);box-shadow:var(--sh-md);padding:clamp(20px,3.4vw,40px);margin-bottom:26px;}
.v2x.apd .apd-hero-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(24px,3vw,48px);align-items:center;}
.v2x.apd .apd-badges{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px;}
.v2x.apd .apd-badge{display:inline-flex;align-items:center;gap:6px;font-size:.72rem;font-weight:600;letter-spacing:.01em;padding:5px 11px;border-radius:var(--r-pill);background:#f2f5fa;color:var(--muted);border:1px solid var(--line);}
.v2x.apd .apd-badge svg,.v2x.apd .apd-badge i{width:13px;height:13px;font-size:11px;}
.v2x.apd .apd-badge.is-featured{background:linear-gradient(135deg,#fff6e6,#fff);color:#b45309;border-color:#fde6bf;}
.v2x.apd .apd-badge.is-open{background:#eef9f1;color:var(--green);border-color:#cdeed9;}
.v2x.apd .apd-badge.is-free{background:var(--accent-soft);color:var(--accent-dark);border-color:#d6e4fc;}
.v2x.apd .apd-badge.is-trending{background:#fdeceb;color:#dc2626;border-color:#fbd5d2;}
.v2x.apd .apd-badge.is-level{background:var(--violet-soft);color:var(--violet);border-color:#e2d6fb;}
.v2x.apd .apd-badge.is-verified{background:var(--accent-soft);color:var(--accent);border-color:#d6e4fc;}
.v2x.apd .apd-h1{font-size:clamp(1.9rem,4vw,2.9rem);font-weight:800;letter-spacing:-.03em;line-height:1.06;margin:0 0 12px;color:var(--ink);}
.v2x.apd .apd-tagline{font-size:clamp(1rem,1.6vw,1.18rem);color:var(--accent-dark);font-weight:600;margin:0 0 12px;}
.v2x.apd .apd-desc{font-size:1rem;line-height:1.7;color:var(--muted);margin:0 0 18px;max-width:48ch;}
.v2x.apd .apd-techrow{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:20px;}
.v2x.apd .apd-techbadge{display:inline-flex;align-items:center;gap:6px;font-size:.74rem;font-weight:600;color:#334155;background:#fff;border:1px solid var(--line);border-radius:8px;padding:5px 10px;box-shadow:var(--sh-sm);transition:transform .15s var(--ease),border-color .15s var(--ease);}
.v2x.apd .apd-techbadge:hover{transform:translateY(-2px);border-color:var(--accent-light);text-decoration:none;}
.v2x.apd .apd-techbadge img{width:16px;height:16px;border-radius:4px;object-fit:contain;}
.v2x.apd .apd-techbadge.more{color:var(--accent);background:var(--accent-soft);border-color:#d6e4fc;}

/* hero stats */
.v2x.apd .apd-stats{display:flex;flex-wrap:wrap;gap:8px 26px;margin-bottom:22px;}
.v2x.apd .apd-stat{display:flex;flex-direction:column;}
.v2x.apd .apd-stat .v{font-size:1.4rem;font-weight:800;letter-spacing:-.02em;color:var(--ink);font-family:var(--font-mono);}
.v2x.apd .apd-stat .l{font-size:.74rem;color:var(--muted2);font-weight:500;}
.v2x.apd .apd-stat .v .ic{color:var(--amber);}

.v2x.apd .apd-cta-row{display:flex;flex-wrap:wrap;gap:10px;}

/* buttons */
.v2x.apd .apd-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-size:.9rem;font-weight:600;padding:11px 18px;border-radius:10px;border:1px solid transparent;cursor:pointer;transition:all .18s var(--ease);text-decoration:none;line-height:1;}
.v2x.apd .apd-btn svg,.v2x.apd .apd-btn i{width:17px;height:17px;font-size:15px;}
.v2x.apd .apd-btn-primary{background:var(--accent);color:#fff;box-shadow:0 2px 10px rgba(54,128,237,.32);}
.v2x.apd .apd-btn-primary:hover{background:var(--accent-dark);box-shadow:var(--sh-glow);transform:translateY(-1px);text-decoration:none;color:#fff;}
.v2x.apd .apd-btn-outline{background:#fff;color:var(--ink);border-color:var(--line-strong);}
.v2x.apd .apd-btn-outline:hover{border-color:var(--accent);color:var(--accent);text-decoration:none;}
.v2x.apd .apd-btn-ghost{background:#f3f6fb;color:var(--muted);}
.v2x.apd .apd-btn-ghost:hover{background:#e9eef6;color:var(--ink);text-decoration:none;}
.v2x.apd .apd-btn.on{background:var(--accent-soft);color:var(--accent);border-color:#d6e4fc;}
.v2x.apd .apd-btn-block{width:100%;}

/* hero showcase (right) */
.v2x.apd .apd-showcase{position:relative;}
.v2x.apd .apd-browser{border-radius:16px;overflow:hidden;background:#fff;border:1px solid var(--line);box-shadow:var(--sh-lg);}
.v2x.apd .apd-browser-bar{display:flex;align-items:center;gap:6px;padding:10px 13px;background:#f7f9fc;border-bottom:1px solid var(--line);}
.v2x.apd .apd-browser-bar .dot{width:10px;height:10px;border-radius:50%;background:#dfe4ec;}
.v2x.apd .apd-browser-bar .dot:nth-child(1){background:#ff5f57;}.v2x.apd .apd-browser-bar .dot:nth-child(2){background:#febc2e;}.v2x.apd .apd-browser-bar .dot:nth-child(3){background:#28c840;}
.v2x.apd .apd-browser-bar .url{margin-left:8px;flex:1;font-size:.7rem;color:var(--muted2);background:#fff;border:1px solid var(--line);border-radius:6px;padding:4px 9px;font-family:var(--font-mono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.v2x.apd .apd-browser-img{display:block;width:100%;height:auto;background:var(--grad-soft);}
.v2x.apd .apd-browser-ph{aspect-ratio:16/10;display:flex;align-items:center;justify-content:center;color:var(--accent);background:
   radial-gradient(400px 200px at 70% 20%,rgba(96,164,245,.25),transparent),var(--grad-soft);}
.v2x.apd .apd-browser-ph .lg{width:84px;height:84px;border-radius:22px;background:#fff;box-shadow:var(--sh-md);display:flex;align-items:center;justify-content:center;font-size:2.4rem;font-weight:800;color:var(--accent);}
.v2x.apd .apd-float{position:absolute;background:rgba(255,255,255,.82);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.7);box-shadow:var(--sh-md);border-radius:14px;padding:11px 14px;display:flex;align-items:center;gap:10px;}
.v2x.apd .apd-float .fic{width:34px;height:34px;border-radius:9px;display:flex;align-items:center;justify-content:center;background:var(--accent-soft);color:var(--accent);}
.v2x.apd .apd-float .fv{font-size:1rem;font-weight:800;color:var(--ink);line-height:1;}
.v2x.apd .apd-float .fl{font-size:.66rem;color:var(--muted2);}
.v2x.apd .apd-float.f1{top:-14px;left:-16px;} .v2x.apd .apd-float.f2{bottom:-16px;right:-12px;}
.v2x.apd .apd-float.f2 .fic{background:var(--green-soft);color:var(--green);}

/* ── body layout: main + sticky sidebar ─────────────── */
.v2x.apd .apd-wrap{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:28px;align-items:start;}

/* section card */
.v2x.apd .apd-section{background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-sm);padding:clamp(20px,2.4vw,30px);margin-bottom:24px;scroll-margin-top:88px;}
.v2x.apd .apd-sec-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:18px;flex-wrap:wrap;}
.v2x.apd .apd-sec-title{font-size:1.32rem;font-weight:800;letter-spacing:-.02em;color:var(--ink);margin:0;display:flex;align-items:center;gap:10px;}
.v2x.apd .apd-sec-title .tic{width:30px;height:30px;border-radius:9px;background:var(--accent-soft);color:var(--accent);display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;}
.v2x.apd .apd-sec-more{font-size:.84rem;font-weight:600;color:var(--accent);display:inline-flex;align-items:center;gap:5px;}
.v2x.apd .apd-sec-more:hover{text-decoration:none;gap:8px;}
.v2x.apd .apd-rich{color:var(--muted);line-height:1.75;font-size:.97rem;}
.v2x.apd .apd-rich p{margin:0 0 14px;} .v2x.apd .apd-rich h2,.v2x.apd .apd-rich h3{color:var(--ink);margin:22px 0 10px;font-weight:700;}
.v2x.apd .apd-rich ul{margin:0 0 14px;padding-left:20px;} .v2x.apd .apd-rich li{margin-bottom:6px;}

/* overview problem/solution cards */
.v2x.apd .apd-ov-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;margin-top:18px;}
.v2x.apd .apd-ov-card{border:1px solid var(--line);border-radius:14px;padding:16px;background:var(--accent-soft2);}
.v2x.apd .apd-ov-card .h{display:flex;align-items:center;gap:8px;font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--accent);margin-bottom:8px;}
.v2x.apd .apd-ov-card .h .i{width:26px;height:26px;border-radius:8px;background:#fff;color:var(--accent);display:inline-flex;align-items:center;justify-content:center;box-shadow:var(--sh-sm);}
.v2x.apd .apd-ov-card p{font-size:.87rem;color:var(--muted);line-height:1.55;margin:0;}

/* features grid */
.v2x.apd .apd-feats{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:14px;}
.v2x.apd .apd-feat{border:1px solid var(--line);border-radius:14px;padding:16px;background:#fff;transition:transform .18s var(--ease),box-shadow .18s var(--ease),border-color .18s var(--ease);}
.v2x.apd .apd-feat:hover{transform:translateY(-3px);box-shadow:var(--sh-md);border-color:var(--accent-light);}
.v2x.apd .apd-feat .fi{width:40px;height:40px;border-radius:11px;background:var(--grad-soft);color:var(--accent);display:inline-flex;align-items:center;justify-content:center;margin-bottom:11px;}
.v2x.apd .apd-feat h4{font-size:.95rem;font-weight:700;color:var(--ink);margin:0 0 5px;}
.v2x.apd .apd-feat p{font-size:.82rem;color:var(--muted);line-height:1.55;margin:0;}

/* how it works flow */
.v2x.apd .apd-flow{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;position:relative;}
.v2x.apd .apd-flow-step{border:1px solid var(--line);border-radius:14px;padding:16px;background:var(--accent-soft2);position:relative;}
.v2x.apd .apd-flow-step .n{width:28px;height:28px;border-radius:9px;background:var(--accent);color:#fff;font-weight:800;font-size:.85rem;display:inline-flex;align-items:center;justify-content:center;margin-bottom:10px;}
.v2x.apd .apd-flow-step h4{font-size:.9rem;font-weight:700;margin:0 0 5px;color:var(--ink);}
.v2x.apd .apd-flow-step p{font-size:.8rem;color:var(--muted);line-height:1.5;margin:0;}
.v2x.apd .apd-flow-step .arr{position:absolute;right:-13px;top:50%;transform:translateY(-50%);color:var(--accent-light);z-index:2;}
@media(max-width:680px){.v2x.apd .apd-flow-step .arr{display:none;}}

/* tech stack cards */
.v2x.apd .apd-tech{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:13px;}
.v2x.apd .apd-tech-card{border:1px solid var(--line);border-radius:14px;padding:15px;background:#fff;display:flex;gap:12px;transition:transform .18s var(--ease),box-shadow .18s var(--ease),border-color .18s var(--ease);}
.v2x.apd .apd-tech-card:hover{transform:translateY(-3px);box-shadow:var(--sh-glow);border-color:var(--accent-light);text-decoration:none;}
.v2x.apd .apd-tech-card .lg{width:42px;height:42px;border-radius:11px;flex:0 0 auto;background:var(--grad-soft);display:flex;align-items:center;justify-content:center;color:var(--accent);font-weight:800;overflow:hidden;}
.v2x.apd .apd-tech-card .lg img{width:100%;height:100%;object-fit:contain;padding:7px;}
.v2x.apd .apd-tech-card .nm{font-size:.92rem;font-weight:700;color:var(--ink);display:flex;align-items:center;gap:6px;}
.v2x.apd .apd-tech-card .ver{font-size:.66rem;font-weight:600;color:var(--accent);background:var(--accent-soft);border-radius:5px;padding:1px 6px;font-family:var(--font-mono);}
.v2x.apd .apd-tech-card .pp{font-size:.78rem;color:var(--muted);line-height:1.45;margin-top:3px;}

/* architecture vertical stack */
.v2x.apd .apd-arch{display:flex;flex-direction:column;align-items:center;gap:0;}
.v2x.apd .apd-arch-node{width:100%;max-width:440px;border:1px solid var(--line);border-radius:14px;padding:14px 18px;background:var(--accent-soft2);display:flex;align-items:center;gap:13px;}
.v2x.apd .apd-arch-node .i{width:38px;height:38px;border-radius:10px;background:#fff;color:var(--accent);display:flex;align-items:center;justify-content:center;flex:0 0 auto;box-shadow:var(--sh-sm);}
.v2x.apd .apd-arch-node .ti{font-size:.92rem;font-weight:700;color:var(--ink);}
.v2x.apd .apd-arch-node .de{font-size:.78rem;color:var(--muted);}
.v2x.apd .apd-arch-conn{width:2px;height:22px;background:linear-gradient(var(--accent-light),var(--accent));position:relative;}
.v2x.apd .apd-arch-conn::after{content:"";position:absolute;bottom:-1px;left:50%;transform:translateX(-50%);border-left:5px solid transparent;border-right:5px solid transparent;border-top:6px solid var(--accent);}

/* screenshots */
.v2x.apd .apd-shots{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px;}
.v2x.apd .apd-shot{border:1px solid var(--line);border-radius:14px;overflow:hidden;background:#fff;box-shadow:var(--sh-sm);transition:transform .18s var(--ease),box-shadow .18s var(--ease);cursor:pointer;}
.v2x.apd .apd-shot:hover{transform:translateY(-3px);box-shadow:var(--sh-md);}
.v2x.apd .apd-shot img{display:block;width:100%;height:160px;object-fit:cover;background:var(--grad-soft);}
.v2x.apd .apd-shot .cap{font-size:.78rem;color:var(--muted);padding:9px 12px;border-top:1px solid var(--line);}
.v2x.apd .apd-shot-big{grid-column:1/-1;}
.v2x.apd .apd-shot-big img{height:auto;aspect-ratio:16/9;}

/* source / repo card */
.v2x.apd .apd-repo{border:1px solid var(--line);border-radius:16px;padding:18px;background:linear-gradient(180deg,#fbfcfe,#fff);}
.v2x.apd .apd-repo-top{display:flex;align-items:center;gap:12px;margin-bottom:14px;}
.v2x.apd .apd-repo-top .ic{width:42px;height:42px;border-radius:11px;background:#0f1117;color:#fff;display:flex;align-items:center;justify-content:center;font-size:20px;flex:0 0 auto;}
.v2x.apd .apd-repo-top .nm{font-size:1rem;font-weight:700;color:var(--ink);font-family:var(--font-mono);}
.v2x.apd .apd-repo-top .badge{font-size:.68rem;font-weight:600;color:var(--green);background:var(--green-soft);border-radius:var(--r-pill);padding:3px 9px;}
.v2x.apd .apd-repo-stats{display:flex;flex-wrap:wrap;gap:10px 22px;margin:4px 0 16px;}
.v2x.apd .apd-repo-stat{display:flex;align-items:center;gap:7px;font-size:.84rem;color:var(--muted);}
.v2x.apd .apd-repo-stat b{color:var(--ink);font-weight:700;}
.v2x.apd .apd-repo-stat .dotlang{width:11px;height:11px;border-radius:50%;background:var(--accent);}
.v2x.apd .apd-repo-actions{display:flex;flex-wrap:wrap;gap:10px;}

/* metrics */
.v2x.apd .apd-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px;}
.v2x.apd .apd-metric{border:1px solid var(--line);border-radius:14px;padding:16px;background:#fff;}
.v2x.apd .apd-metric .l{display:flex;align-items:center;gap:7px;font-size:.76rem;color:var(--muted2);font-weight:600;margin-bottom:8px;}
.v2x.apd .apd-metric .v{font-size:1.7rem;font-weight:800;letter-spacing:-.02em;color:var(--ink);font-family:var(--font-mono);}
.v2x.apd .apd-metric .d{font-size:.74rem;font-weight:600;color:var(--green);margin-top:3px;}

/* learn tags */
.v2x.apd .apd-learn{display:flex;flex-wrap:wrap;gap:9px;}
.v2x.apd .apd-learn-tag{display:inline-flex;align-items:center;gap:7px;font-size:.84rem;font-weight:600;color:var(--accent-dark);background:var(--accent-soft);border:1px solid #d6e4fc;border-radius:10px;padding:8px 13px;}
.v2x.apd .apd-learn-tag svg{color:var(--accent);}

/* related cards */
.v2x.apd .apd-related{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;}
.v2x.apd .apd-rel-card{border:1px solid var(--line);border-radius:16px;padding:15px;background:#fff;transition:transform .18s var(--ease),box-shadow .18s var(--ease),border-color .18s var(--ease);display:block;}
.v2x.apd .apd-rel-card:hover{transform:translateY(-3px);box-shadow:var(--sh-md);border-color:var(--accent-light);text-decoration:none;}
.v2x.apd .apd-rel-top{display:flex;align-items:center;gap:11px;margin-bottom:9px;}
.v2x.apd .apd-rel-top .lg{width:42px;height:42px;border-radius:11px;flex:0 0 auto;background:var(--grad-soft);color:var(--accent);font-weight:800;display:flex;align-items:center;justify-content:center;overflow:hidden;}
.v2x.apd .apd-rel-top .lg img{width:100%;height:100%;object-fit:cover;}
.v2x.apd .apd-rel-card .nm{font-size:.94rem;font-weight:700;color:var(--ink);}
.v2x.apd .apd-rel-card .de{font-size:.8rem;color:var(--muted);line-height:1.5;margin:0 0 10px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.v2x.apd .apd-rel-meta{display:flex;align-items:center;gap:10px;font-size:.76rem;color:var(--muted2);}
.v2x.apd .apd-rel-meta .r{color:var(--amber);font-weight:700;display:inline-flex;align-items:center;gap:3px;}

/* reviews */
.v2x.apd .apd-rev-summary{display:grid;grid-template-columns:200px 1fr;gap:24px;align-items:center;margin-bottom:22px;padding-bottom:22px;border-bottom:1px solid var(--line);}
.v2x.apd .apd-rev-score{text-align:center;}
.v2x.apd .apd-rev-score .big{font-size:3.2rem;font-weight:800;line-height:1;color:var(--ink);letter-spacing:-.03em;}
.v2x.apd .apd-rev-score .stars{color:var(--amber);margin:6px 0 4px;}
.v2x.apd .apd-rev-score .cnt{font-size:.8rem;color:var(--muted2);}
.v2x.apd .apd-rev-bars{display:flex;flex-direction:column;gap:7px;}
.v2x.apd .apd-rev-bar{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--muted);}
.v2x.apd .apd-rev-bar .k{width:34px;display:flex;align-items:center;gap:3px;}
.v2x.apd .apd-rev-bar .track{flex:1;height:8px;border-radius:9px;background:#eef1f6;overflow:hidden;}
.v2x.apd .apd-rev-bar .fill{height:100%;border-radius:9px;background:var(--amber);}
.v2x.apd .apd-rev-bar .c{width:34px;text-align:right;color:var(--muted2);}
.v2x.apd .apd-rev-list{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
.v2x.apd .apd-rev-card{border:1px solid var(--line);border-radius:14px;padding:15px;background:#fff;}
.v2x.apd .apd-rev-card .top{display:flex;align-items:center;gap:10px;margin-bottom:8px;}
.v2x.apd .apd-rev-card .av{width:38px;height:38px;border-radius:50%;background:var(--grad);color:#fff;font-weight:700;display:flex;align-items:center;justify-content:center;flex:0 0 auto;}
.v2x.apd .apd-rev-card .nm{font-weight:700;font-size:.88rem;color:var(--ink);display:flex;align-items:center;gap:5px;}
.v2x.apd .apd-rev-card .ro{font-size:.74rem;color:var(--muted2);}
.v2x.apd .apd-rev-card .st{color:var(--amber);font-size:.78rem;margin-left:auto;}
.v2x.apd .apd-rev-card .bd{font-size:.86rem;color:var(--muted);line-height:1.6;margin:0 0 10px;}
.v2x.apd .apd-rev-card .ft{display:flex;align-items:center;gap:14px;font-size:.76rem;color:var(--muted2);}
.v2x.apd .apd-rev-card .ft button{background:none;border:0;color:var(--muted2);cursor:pointer;display:inline-flex;align-items:center;gap:5px;padding:0;}
.v2x.apd .apd-rev-card .ft button:hover{color:var(--accent);}
.v2x.apd .apd-rev-form{border:1px solid var(--line);border-radius:14px;padding:16px;background:var(--accent-soft2);margin-top:16px;}
.v2x.apd .apd-star-pick{display:inline-flex;gap:4px;cursor:pointer;}
.v2x.apd .apd-star-pick button{background:none;border:0;cursor:pointer;color:#d8deea;padding:0;}
.v2x.apd .apd-star-pick button.on{color:var(--amber);}
.v2x.apd .apd-input{width:100%;border:1px solid var(--line-strong);border-radius:10px;padding:11px 13px;font-size:.9rem;color:var(--ink);background:#fff;font-family:inherit;}
.v2x.apd .apd-input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(54,128,237,.16);}
.v2x.apd textarea.apd-input{min-height:90px;resize:vertical;}
.v2x.apd .apd-err{color:var(--red);font-size:.78rem;margin-top:5px;}
.v2x.apd .apd-note{background:var(--green-soft);color:var(--green);border-radius:10px;padding:11px 14px;font-size:.86rem;font-weight:600;}

/* FAQ */
.v2x.apd .apd-faq details{border:1px solid var(--line);border-radius:12px;margin-bottom:10px;background:#fff;overflow:hidden;transition:box-shadow .18s var(--ease),border-color .18s var(--ease);}
.v2x.apd .apd-faq details[open]{box-shadow:var(--sh-sm);border-color:var(--accent-light);}
.v2x.apd .apd-faq summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:15px 17px;font-weight:600;font-size:.93rem;color:var(--ink);}
.v2x.apd .apd-faq summary::-webkit-details-marker{display:none;}
.v2x.apd .apd-faq summary .pm{width:22px;height:22px;border-radius:7px;background:var(--accent-soft);color:var(--accent);display:flex;align-items:center;justify-content:center;flex:0 0 auto;transition:transform .2s var(--ease);}
.v2x.apd .apd-faq details[open] summary .pm{transform:rotate(45deg);}
.v2x.apd .apd-faq .ans{padding:0 17px 16px;color:var(--muted);font-size:.88rem;line-height:1.65;}

/* newsletter */
.v2x.apd .apd-news{border-radius:var(--r-lg);overflow:hidden;background:var(--grad);color:#fff;padding:clamp(24px,3vw,40px);position:relative;margin-bottom:24px;}
.v2x.apd .apd-news::after{content:"";position:absolute;inset:0;background:radial-gradient(600px 200px at 90% 0,rgba(255,255,255,.18),transparent);pointer-events:none;}
.v2x.apd .apd-news h3{color:#fff;font-size:1.5rem;font-weight:800;margin:0 0 6px;letter-spacing:-.02em;}
.v2x.apd .apd-news p{color:rgba(255,255,255,.9);font-size:.95rem;margin:0 0 16px;max-width:52ch;}
.v2x.apd .apd-news-form{display:flex;flex-wrap:wrap;gap:10px;position:relative;z-index:1;}
.v2x.apd .apd-news-form input{flex:1 1 200px;border:0;border-radius:10px;padding:12px 15px;font-size:.92rem;color:var(--ink);}
.v2x.apd .apd-news-form input:focus{outline:none;box-shadow:0 0 0 3px rgba(255,255,255,.4);}
.v2x.apd .apd-news-form button{background:#fff;color:var(--accent-dark);font-weight:700;border:0;border-radius:10px;padding:12px 22px;cursor:pointer;transition:transform .15s var(--ease);}
.v2x.apd .apd-news-form button:hover{transform:translateY(-1px);}
.v2x.apd .apd-news .trust{display:flex;flex-wrap:wrap;gap:16px;margin-top:14px;font-size:.78rem;color:rgba(255,255,255,.88);}
.v2x.apd .apd-news .trust span{display:inline-flex;align-items:center;gap:6px;}

/* ── sticky sidebar ─────────────────────────────────── */
.v2x.apd .apd-side{position:sticky;top:84px;display:flex;flex-direction:column;gap:16px;}
.v2x.apd .apd-side-card{background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:var(--sh-sm);padding:18px;}
.v2x.apd .apd-side-card h4{font-size:.92rem;font-weight:700;color:var(--ink);margin:0 0 13px;display:flex;align-items:center;gap:8px;}
.v2x.apd .apd-info-list{display:flex;flex-direction:column;gap:0;}
.v2x.apd .apd-info-list li{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 0;border-bottom:1px solid var(--line);font-size:.83rem;list-style:none;}
.v2x.apd .apd-info-list li:last-child{border-bottom:0;}
.v2x.apd .apd-info-list .k{color:var(--muted2);} .v2x.apd .apd-info-list .v{color:var(--ink);font-weight:600;text-align:right;}
.v2x.apd .apd-info-list .v.pill{background:var(--accent-soft);color:var(--accent-dark);border-radius:var(--r-pill);padding:2px 10px;font-size:.74rem;}
.v2x.apd .apd-actions{display:flex;flex-direction:column;gap:9px;}
.v2x.apd .apd-actions a{display:flex;align-items:center;gap:10px;font-size:.86rem;font-weight:600;color:var(--ink);padding:10px 12px;border:1px solid var(--line);border-radius:11px;transition:all .15s var(--ease);}
.v2x.apd .apd-actions a:hover{border-color:var(--accent);color:var(--accent);text-decoration:none;background:var(--accent-soft2);}
.v2x.apd .apd-actions a .ar{margin-left:auto;color:var(--muted2);}
.v2x.apd .apd-actions a.danger:hover{border-color:var(--red);color:var(--red);background:#fef2f2;}
.v2x.apd .apd-share{display:flex;gap:9px;flex-wrap:wrap;}
.v2x.apd .apd-share a,.v2x.apd .apd-share button{width:40px;height:40px;border-radius:11px;display:flex;align-items:center;justify-content:center;border:1px solid var(--line);background:#fff;color:var(--muted);cursor:pointer;transition:all .15s var(--ease);font-size:15px;}
.v2x.apd .apd-share a:hover,.v2x.apd .apd-share button:hover{color:#fff;border-color:transparent;transform:translateY(-2px);text-decoration:none;}
.v2x.apd .apd-share .s-tw:hover{background:#0f1419;} .v2x.apd .apd-share .s-li:hover{background:#0a66c2;}
.v2x.apd .apd-share .s-fb:hover{background:#1877f2;} .v2x.apd .apd-share .s-rd:hover{background:#ff4500;} .v2x.apd .apd-share .s-cp:hover{background:var(--accent);}
.v2x.apd .apd-tech-list{display:flex;flex-direction:column;gap:8px;}
.v2x.apd .apd-tech-list a{display:flex;align-items:center;gap:9px;font-size:.84rem;color:var(--ink);}
.v2x.apd .apd-tech-list a:hover{color:var(--accent);text-decoration:none;}
.v2x.apd .apd-tech-list .lg{width:26px;height:26px;border-radius:7px;background:var(--grad-soft);color:var(--accent);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.7rem;overflow:hidden;flex:0 0 auto;}
.v2x.apd .apd-tech-list .lg img{width:100%;height:100%;object-fit:contain;padding:4px;}
.v2x.apd .apd-love{background:var(--grad);color:#fff;border-radius:16px;padding:18px;text-align:center;}
.v2x.apd .apd-love h4{color:#fff;justify-content:center;margin-bottom:5px;}
.v2x.apd .apd-love p{font-size:.82rem;color:rgba(255,255,255,.9);margin:0 0 13px;}
.v2x.apd .apd-love a{display:inline-flex;align-items:center;gap:8px;background:#fff;color:var(--accent-dark);font-weight:700;font-size:.86rem;padding:10px 18px;border-radius:10px;}
.v2x.apd .apd-love a:hover{text-decoration:none;transform:translateY(-1px);}

/* ── responsive ─────────────────────────────────────── */
@media(max-width:991px){
  .v2x.apd .apd-wrap{grid-template-columns:1fr;}
  .v2x.apd .apd-side{position:static;}
  .v2x.apd .apd-hero-grid{grid-template-columns:1fr;}
  .v2x.apd .apd-showcase{order:-1;}
  .v2x.apd .apd-rev-list{grid-template-columns:1fr;}
}
@media(max-width:575px){
  .v2x.apd .apd-rev-summary{grid-template-columns:1fr;text-align:center;}
  .v2x.apd .apd-cta-row .apd-btn{flex:1 1 100%;}
  .v2x.apd .apd-float{display:none;}
}
@media(prefers-reduced-motion:reduce){
  .v2x.apd *{animation:none!important;transition:none!important;}
}

/* ── DARK MODE — follows body.theme-dark ── */
/* Remap this page's LOCAL tokens (it defines its own --ink/--muted/--line/…,
   not the shared --v2-* set) so every var()-based text/border/tint flips too. */
body.theme-dark .v2x.apd{
  --ink:#ECEDF3; --muted:#9CA2B3; --muted2:#7E8499; --line:#2A2D3A; --bg:#0E0F14;
  --accent-soft:rgba(54,128,237,.20); --accent-soft2:rgba(54,128,237,.10);
  --green-soft:rgba(34,197,94,.16); --amber-soft:rgba(245,158,11,.16); --violet-soft:rgba(139,92,246,.18);
}
body.theme-dark .v2x.apd .apd-hero{ background:radial-gradient(1200px 380px at 88% -10%,rgba(96,164,245,.20),transparent 60%),radial-gradient(900px 320px at 0% 0%,rgba(54,128,237,.14),transparent 55%),#171922; }
body.theme-dark .v2x.apd .apd-badge{ background:rgba(255,255,255,.06);color:#9CA2B3;border-color:#2A2D3A; }
body.theme-dark .v2x.apd .apd-badge.is-featured{ background:rgba(245,158,11,.16);color:#f4be60;border-color:rgba(245,158,11,.28); }
body.theme-dark .v2x.apd .apd-badge.is-open{ background:rgba(34,197,94,.16);color:#5fdd97;border-color:rgba(34,197,94,.28); }
body.theme-dark .v2x.apd .apd-badge.is-trending{ background:rgba(239,68,68,.16);color:#f87171;border-color:rgba(239,68,68,.28); }
body.theme-dark .v2x.apd .apd-techbadge{ background:#171922;color:#9CA2B3;border-color:#2A2D3A; }
body.theme-dark .v2x.apd .apd-btn-outline{ background:#171922; }
body.theme-dark .v2x.apd .apd-btn-ghost{ background:rgba(255,255,255,.06);color:#9CA2B3; }
body.theme-dark .v2x.apd .apd-btn-ghost:hover{ background:rgba(255,255,255,.10); }
body.theme-dark .v2x.apd .apd-browser{ background:#171922; }
body.theme-dark .v2x.apd .apd-browser-bar{ background:rgba(255,255,255,.04);border-bottom-color:#2A2D3A; }
body.theme-dark .v2x.apd .apd-browser-bar .dot{ background:#2A2D3A; }
body.theme-dark .v2x.apd .apd-browser-bar .url{ background:#171922;border-color:#2A2D3A; }
body.theme-dark .v2x.apd .apd-float{ background:rgba(23,25,34,.84);border-color:rgba(255,255,255,.10); }
body.theme-dark .v2x.apd .apd-section{ background:#171922;border-color:#2A2D3A; }
body.theme-dark .v2x.apd .apd-ov-card .h .i{ background:#171922; }
body.theme-dark .v2x.apd .apd-feat{ background:#171922;border-color:#2A2D3A; }
body.theme-dark .v2x.apd .apd-tech-card{ background:#171922;border-color:#2A2D3A; }
body.theme-dark .v2x.apd .apd-arch-node .i{ background:#171922; }
body.theme-dark .v2x.apd .apd-shot{ background:#171922;border-color:#2A2D3A; }
body.theme-dark .v2x.apd .apd-shot .cap{ border-top-color:#2A2D3A; }
body.theme-dark .v2x.apd .apd-repo{ background:linear-gradient(180deg,#191b26 0%,#0e0f14 72%);border-color:#2A2D3A; }
body.theme-dark .v2x.apd .apd-metric{ background:#171922;border-color:#2A2D3A; }
body.theme-dark .v2x.apd .apd-rev-bar .track{ background:rgba(255,255,255,.08); }
body.theme-dark .v2x.apd .apd-rev-card{ background:#171922;border-color:#2A2D3A; }
body.theme-dark .v2x.apd .apd-star-pick button{ color:#2A2D3A; }
body.theme-dark .v2x.apd .apd-input{ background:#171922;border-color:#2A2D3A;color:#e2e4ec; }
body.theme-dark .v2x.apd .apd-faq details{ background:#171922;border-color:#2A2D3A; }
body.theme-dark .v2x.apd .apd-side-card{ background:#171922;border-color:#2A2D3A; }
body.theme-dark .v2x.apd .apd-share a,
body.theme-dark .v2x.apd .apd-share button{ background:#171922;border-color:#2A2D3A; }
body.theme-dark .v2x.apd .apd-rel-card{ background:#171922;border-color:#2A2D3A; }
body.theme-dark .v2x.apd .apd-actions a.danger:hover{ background:rgba(239,68,68,.14); }
