.page-grid{display:grid;grid-template-columns:1fr min(var(--max-content),100%) 1fr;align-items:start;}
.page-grid>main{grid-column:2;}
.side-banner-slot{grid-column:1/2;position:sticky;top:120px;align-self:start;justify-self:center;z-index:5;}
.side-banner-slot.right{grid-column:3/4;}
.ad-frame{width:160px;height:600px;border:1px solid rgba(255,42,18,.35);border-radius:10px;background:linear-gradient(180deg,rgba(23,27,36,.66),rgba(3,4,7,.86));box-shadow:0 0 12px rgba(255,42,18,.14),inset 0 0 20px rgba(0,200,255,.05);display:flex;align-items:center;justify-content:center;padding:16px;opacity:.58;transition:opacity .3s ease,box-shadow .3s ease;}
.ad-frame-blue{border-color:rgba(0,200,255,.35);box-shadow:0 0 12px rgba(0,200,255,.14),inset 0 0 20px rgba(255,42,18,.05);}
.ad-frame:hover{opacity:.86;box-shadow:0 0 24px rgba(255,122,0,.18),inset 0 0 22px rgba(255,255,255,.04);}
.ad-frame span{font-family:var(--font-mono);font-size:.65rem;letter-spacing:.12em;color:var(--text-dim);text-align:center;text-transform:uppercase;writing-mode:vertical-rl;transform:rotate(180deg);}
footer{padding:34px 24px 40px;text-align:center;border-top:1px solid rgba(255,255,255,.06);background:linear-gradient(180deg,var(--bg-void-2),var(--bg-void));}
.footer-row{display:flex;flex-wrap:wrap;justify-content:center;gap:18px;align-items:center;font-size:.82rem;color:var(--text-faint);}
.blog-link{display:inline-flex;align-items:center;gap:6px;color:var(--text-dim);border:1px solid rgba(255,255,255,.08);padding:6px 12px;border-radius:6px;font-family:var(--font-mono);font-size:.75rem;transition:border-color .2s ease,color .2s ease;}
.blog-link:hover{border-color:var(--sky-blue);color:var(--sky-blue);}
.term-dot{width:6px;height:6px;border-radius:50%;background:var(--safe-green);box-shadow:0 0 6px var(--safe-green);}


/* R17 — UNIFIED ARCADE AD EFFECTS (BLOG / ARCADES / OFFICIAL GATE) */
.ad-frame{position:relative;overflow:hidden;perspective:900px;opacity:.96;background:radial-gradient(circle at 50% 8%,rgba(255,84,28,.34),transparent 34%),radial-gradient(circle at 50% 92%,rgba(0,200,255,.12),transparent 30%),linear-gradient(180deg,rgba(1,19,40,.94),rgba(0,4,12,.98));box-shadow:0 0 16px rgba(255,78,28,.34),0 0 36px rgba(0,200,255,.12),inset 0 0 20px rgba(76,201,255,.10),inset 0 0 48px rgba(0,0,0,.74);}
.ad-frame::before{content:'';position:absolute;inset:0;pointer-events:none;opacity:.46;background:repeating-linear-gradient(to bottom,rgba(255,255,255,.055) 0 1px,rgba(0,0,0,.18) 1px 4px),linear-gradient(90deg,rgba(255,78,28,.18),transparent 28%,transparent 72%,rgba(76,201,255,.18));animation:adScanPulse 4.8s linear infinite;}
.ad-frame::after{content:'';position:absolute;inset:6px;border:1px solid rgba(255,238,102,.42);border-radius:8px;pointer-events:none;box-shadow:inset 0 0 14px rgba(255,238,102,.10),0 0 12px rgba(255,176,32,.08);}
.ad-frame:hover{opacity:1;box-shadow:0 0 24px rgba(255,122,0,.28),0 0 42px rgba(0,200,255,.18),inset 0 0 24px rgba(255,255,255,.04);}
.side-ad-creative{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:space-between;padding:18px 12px;opacity:0;visibility:hidden;transform:translateY(18px) scale(.96);filter:brightness(1.5) blur(2px);transition:opacity .7s ease,transform .85s cubic-bezier(.18,.88,.22,1),filter .75s ease,visibility 0s linear .85s;z-index:2;text-align:center;}
.side-ad-creative.is-active{opacity:1;visibility:visible;transform:translateY(0) scale(1);filter:brightness(1) blur(0);transition-delay:0s;animation:sideAdFlickerIn 1.15s steps(8,end) both;}
.side-ad-kicker{font-family:var(--font-mono);font-size:.55rem;letter-spacing:.12em;color:var(--sky-blue);text-shadow:0 0 8px rgba(0,200,255,.72);}
.side-ad-creative strong{font-family:var(--font-display);font-size:.72rem;letter-spacing:.12em;color:#ffe566;text-shadow:0 0 10px rgba(255,176,32,.8);writing-mode:vertical-rl;transform:rotate(180deg);font-weight:700;}
.side-ad-creative small{font-family:var(--font-mono);font-size:.54rem;letter-spacing:.10em;color:var(--reactor-red);text-shadow:0 0 8px rgba(255,42,18,.7);}
.ad-frame-blue .side-ad-kicker{color:#8de8ff}.ad-frame-blue .side-ad-creative small{color:#9affc2}.ad-frame-blue .side-ad-creative strong{color:#fff0a6}
@keyframes sideAdFlickerIn{0%{opacity:0;filter:brightness(2.4) saturate(1.8)}18%{opacity:.28}28%{opacity:.95}36%{opacity:.25}48%{opacity:1}62%{opacity:.48}76%,100%{opacity:1;filter:brightness(1) saturate(1)}}
@keyframes adScanPulse{0%{transform:translateY(-20%);opacity:.22}50%{opacity:.5}100%{transform:translateY(20%);opacity:.22}}
