:root{
  --bg:#07030f; --bg2:#12061f; --panel:rgba(20,8,36,.74); --line:rgba(255,70,190,.28);
  --pink:#ff46be; --cyan:#22e6ff; --gold:#ffcc33; --text:#f4ecff; --muted:#c3b3df;
  --a1:var(--pink); --a2:var(--cyan);
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{background:var(--bg);color:var(--text);font-family:Inter,system-ui,sans-serif;overflow-x:hidden;line-height:1.55}
a{color:inherit}
img{max-width:100%;height:auto;display:block}

/* ---------- moving background: sky, sun, perspective grid, particles, scanlines ---------- */
#sky{position:fixed;inset:0;z-index:-4;background:linear-gradient(180deg,#0b0220 0%,#2a0845 45%,#6a0f5b 70%,#ff4f8b 100%);background-size:100% 200%;animation:sky 18s ease-in-out infinite alternate}
@keyframes sky{to{background-position:0 100%}}
#sun{position:fixed;left:50%;top:52vh;width:52vmin;height:52vmin;transform:translateX(-50%);z-index:-3;border-radius:50%;opacity:.45;
  background:linear-gradient(180deg,#ffe56b 0%,#ff9a3c 45%,#ff2f9a 100%);
  -webkit-mask:repeating-linear-gradient(180deg,#000 0 14px,transparent 14px 20px);mask:repeating-linear-gradient(180deg,#000 0 14px,transparent 14px 20px);
  filter:drop-shadow(0 0 60px #ff46be);animation:pulse 5s ease-in-out infinite}
@keyframes pulse{50%{filter:drop-shadow(0 0 110px #ff46be)}}
#grid{position:fixed;left:-50%;right:-50%;bottom:-10vh;height:62vh;z-index:-2;transform:perspective(320px) rotateX(62deg);transform-origin:50% 0;
  background-image:linear-gradient(var(--cyan) 2px,transparent 2px),linear-gradient(90deg,var(--cyan) 2px,transparent 2px);
  background-size:70px 70px;opacity:.5;animation:grid 1.6s linear infinite;
  -webkit-mask:linear-gradient(180deg,transparent,#000 30%);mask:linear-gradient(180deg,transparent,#000 30%)}
@keyframes grid{to{background-position:0 70px}}
#fx{position:fixed;inset:0;z-index:-1;pointer-events:none}
.scan{position:fixed;inset:0;z-index:50;pointer-events:none;background:repeating-linear-gradient(0deg,rgba(0,0,0,.1) 0 1px,transparent 1px 3px);mix-blend-mode:multiply}
/* police pages: red/blue light bar sweeping the top of the screen */
body.fx-police #sky{background:linear-gradient(180deg,#02040f 0%,#0a1440 55%,#1a0820 100%);background-size:100% 200%}
body.fx-police #sun{display:none}
body.fx-police #grid{background-image:linear-gradient(#2f6bff 2px,transparent 2px),linear-gradient(90deg,#2f6bff 2px,transparent 2px)}
.lightbar{position:fixed;top:0;left:0;right:0;height:100vh;z-index:-1;pointer-events:none;
  background:radial-gradient(60% 40% at 15% 0%,rgba(255,30,50,.55),transparent 70%),radial-gradient(60% 40% at 85% 0%,rgba(40,90,255,.55),transparent 70%);
  animation:siren 1s steps(1) infinite}
@keyframes siren{0%{background:radial-gradient(60% 40% at 15% 0%,rgba(255,30,50,.6),transparent 70%)}50%{background:radial-gradient(60% 40% at 85% 0%,rgba(40,90,255,.6),transparent 70%)}}
body.fx-springfield #sky{background:linear-gradient(180deg,#4fa6ff 0%,#7fc4ff 50%,#ffe38a 100%)}
body.fx-springfield #grid{background-image:linear-gradient(#ffd90f 2px,transparent 2px),linear-gradient(90deg,#ffd90f 2px,transparent 2px);opacity:.35}
body.fx-springfield #sun{opacity:.6}
body.fx-gold #sky{background:linear-gradient(180deg,#0a0503 0%,#2b0b08 55%,#5a0b14 100%)}
body.fx-gold #grid{background-image:linear-gradient(#ffcc33 2px,transparent 2px),linear-gradient(90deg,#ffcc33 2px,transparent 2px);opacity:.35}
body.fx-fire #sky{background:linear-gradient(180deg,#0a0300 0%,#3a0a00 50%,#b52a00 100%)}
body.fx-fire #grid{background-image:linear-gradient(#ff6a00 2px,transparent 2px),linear-gradient(90deg,#ff6a00 2px,transparent 2px)}
/* ---------- project scenes ---------- */
/* the project's own screenshots, cross-fading and slowly zooming behind the page */
#scenes{position:fixed;inset:0;z-index:-3;overflow:hidden}
#scenes div{position:absolute;inset:-6%;background-size:cover;background-position:center;opacity:0;transition:opacity 2.5s ease;animation:kb 16s ease-in-out infinite alternate}
#scenes div.on{opacity:.38}
body.has-gifs #scenes div.on{opacity:.5}
#scenes::after{content:"";position:absolute;inset:0;background:var(--tint,linear-gradient(180deg,rgba(7,3,15,.55),rgba(7,3,15,.85)))}
@keyframes kb{from{transform:scale(1) translate(0,0)}to{transform:scale(1.14) translate(-2%,-2%)}}

/* Vice City: neon sunset, swaying palms, shimmering ocean */
body.fx-vice{--tint:linear-gradient(180deg,rgba(40,6,60,.45) 0%,rgba(255,60,140,.22) 55%,rgba(7,3,15,.85) 100%)}
body.fx-vice #sky{background:linear-gradient(180deg,#120330 0%,#4a0a6b 35%,#ff3c8c 68%,#ff9d4d 85%,#ffd36b 100%);animation:none}
body.fx-vice #sun{top:46vh;opacity:.75;width:60vmin;height:60vmin}
body.fx-vice #grid{display:none}
.ocean{position:fixed;left:0;right:0;bottom:0;height:24vh;z-index:-2;pointer-events:none;
  background:repeating-linear-gradient(180deg,rgba(255,120,190,0) 0 10px,rgba(255,170,220,.35) 10px 12px),linear-gradient(180deg,#3a0d5c,#12061f);
  animation:shimmer 3s ease-in-out infinite alternate}
@keyframes shimmer{to{background-position:0 8px,0 0;filter:brightness(1.25)}}
.palm{position:fixed;bottom:12vh;z-index:-1;pointer-events:none;width:clamp(180px,26vw,380px);aspect-ratio:1/1.25;transform-origin:50% 100%;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 250'%3E%3Cg fill='%23140320'%3E%3Cpath d='M98 250c-6-60-2-120 10-160l9 2c-10 42-12 100-6 158z'/%3E%3Cpath d='M112 92C90 60 50 52 8 70c36-4 66 4 90 30z'/%3E%3Cpath d='M112 92c-6-38-34-66-80-80 34 18 54 44 64 84z'/%3E%3Cpath d='M112 92c14-40 46-62 86-64-36 12-60 34-74 70z'/%3E%3Cpath d='M112 92c30-20 66-18 88 4-30-8-56-4-80 14z'/%3E%3Cpath d='M112 92c-30-10-62 2-82 30 24-16 50-22 78-14z'/%3E%3Cpath d='M112 92c26 4 48 26 52 58-12-24-32-40-56-44z'/%3E%3Ccircle cx='110' cy='96' r='7'/%3E%3C/g%3E%3C/svg%3E") no-repeat bottom/contain;
  animation:sway 6s ease-in-out infinite alternate}
.palm.l{left:-3vw}
.palm.r{right:-4vw;transform:scaleX(-1);animation-name:swayR;animation-duration:7s;width:clamp(150px,21vw,320px)}
.palm.l2{left:14vw;width:clamp(110px,13vw,200px);opacity:.85;animation-duration:8s}
@keyframes sway{from{transform:rotate(-2.5deg)}to{transform:rotate(2deg)}}
@keyframes swayR{from{transform:scaleX(-1) rotate(-2deg)}to{transform:scaleX(-1) rotate(2.5deg)}}
body.fx-police .ocean{background:repeating-linear-gradient(180deg,transparent 0 10px,rgba(120,160,255,.3) 10px 12px),linear-gradient(180deg,#0a1440,#02040f)}
body.fx-police .palm{filter:brightness(.7)}

/* Springfield: the big blue sky with puffy clouds drifting by */
body.fx-springfield{--tint:linear-gradient(180deg,rgba(60,140,255,.25),rgba(7,3,15,.75) 85%)}
body.fx-springfield #sky{background:linear-gradient(180deg,#1f6fe0 0%,#4ea3ff 50%,#a9d8ff 100%);animation:none}
body.fx-springfield #sun,body.fx-springfield #grid{display:none}
.clouds{position:fixed;inset:0;z-index:-2;pointer-events:none;overflow:hidden}
.cloud{position:absolute;left:-40vw;width:22vw;min-width:180px;aspect-ratio:3/1;background:#fff;border-radius:999px;opacity:.95;
  box-shadow:inset -10px -14px 0 rgba(170,205,255,.6);animation:drift linear infinite}
.cloud::before,.cloud::after{content:"";position:absolute;background:#fff;border-radius:50%;box-shadow:inset -8px -6px 0 rgba(170,205,255,.45)}
.cloud::before{width:46%;aspect-ratio:1;left:14%;bottom:30%}
.cloud::after{width:34%;aspect-ratio:1;left:50%;bottom:36%}
@keyframes drift{to{transform:translateX(150vw)}}
body.fx-springfield .clouds{opacity:.55;filter:blur(1px)}
body.fx-springfield p,body.fx-springfield .feat h3,body.fx-springfield .kicker{text-shadow:0 1px 3px #000,0 0 12px rgba(0,0,0,.8)}
body.fx-springfield .scan{display:none}
body.fx-springfield h2{text-shadow:0 3px 0 #1b1b1b,0 0 18px rgba(255,217,15,.5)}
@media (prefers-reduced-motion:reduce){.palm,.cloud,.ocean,#scenes div{animation:none!important}}

/* Family Guy page: Quahog sky with drifting clouds, cartoon type, yellow / red / blue */
body.fx-familyguy{--a1:#ffd400;--a2:#d7263d;--line:rgba(255,212,0,.35)}
body.fx-familyguy #sky{background:linear-gradient(180deg,#2b7de9 0%,#69b3ff 55%,#bfe3ff 100%);animation:none}
body.fx-familyguy #sun,body.fx-familyguy #grid{display:none}
body.fx-familyguy #sky::before,body.fx-familyguy #sky::after{content:"";position:absolute;width:420px;height:120px;border-radius:120px;background:#fff;opacity:.9;
  box-shadow:120px -40px 0 10px #fff,240px 0 0 -10px #fff,-90px 10px 0 -20px #fff;animation:cloud 60s linear infinite}
body.fx-familyguy #sky::before{top:12%;left:-500px}
body.fx-familyguy #sky::after{top:38%;left:-500px;transform:scale(.7);animation-duration:85s;animation-delay:-30s}
@keyframes cloud{to{left:110%}}
body.fx-familyguy .phero h1,body.fx-familyguy h2{font-family:"Luckiest Guy",Bungee;letter-spacing:2px;-webkit-text-stroke:2px #1b1b1b;text-shadow:4px 4px 0 #1b1b1b}
body.fx-familyguy .phero h1{background:none;color:#ffd400;filter:none}
body.fx-familyguy h2{color:#ffd400}
body.fx-familyguy .kicker{color:#fff;text-shadow:0 2px 6px rgba(0,0,0,.6)}
body.fx-familyguy .card,body.fx-familyguy .feat,body.fx-familyguy .step{background:rgba(20,40,90,.85);border-color:rgba(255,212,0,.5)}
body.fx-familyguy .scan{display:none}
/* playable game frame */
.player{position:relative;border-radius:22px;overflow:hidden;border:3px solid var(--a1);box-shadow:0 0 60px color-mix(in srgb,var(--a1) 50%,transparent);background:#000;aspect-ratio:16/9}
.player iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.player .start{position:absolute;inset:0;display:grid;place-items:center;background-size:cover;background-position:center;cursor:pointer;border:0;width:100%}
.player .start span{font-family:Bungee;font-size:clamp(20px,3vw,32px);padding:18px 32px;border-radius:18px;background:linear-gradient(90deg,var(--a1),var(--a2));color:#fff;box-shadow:0 10px 40px rgba(0,0,0,.5);animation:bob 1.6s ease-in-out infinite}
@keyframes bob{50%{transform:translateY(-6px) scale(1.04)}}
.arcade{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:22px}
.arcade .game{background:var(--panel);border:1px solid var(--line);border-radius:20px;overflow:hidden;cursor:pointer;transition:transform .25s,box-shadow .25s;text-align:left;color:inherit;font:inherit;padding:0}
.arcade .game:hover{transform:translateY(-6px);box-shadow:0 20px 60px rgba(34,230,255,.35)}
.arcade .game .t{aspect-ratio:16/10;background-size:cover;background-position:center;position:relative}
.arcade .game .t::after{content:"▶ PLAY";position:absolute;inset:0;display:grid;place-items:center;font-family:Bungee;font-size:26px;background:rgba(7,3,15,.55);opacity:0;transition:.25s}
.arcade .game:hover .t::after{opacity:1}
.arcade .game b{display:block;padding:14px 16px 4px;font-size:18px}
.arcade .game span{display:block;padding:0 16px 16px;color:var(--muted);font-size:14px}
@media (prefers-reduced-motion:reduce){#sky,#sun,#grid,.lightbar,.ticker span,.glitch::before,.glitch::after{animation:none!important}}

/* ---------- nav + footer ---------- */
nav{position:sticky;top:0;z-index:40;display:flex;align-items:center;gap:18px;padding:14px max(16px,4vw);background:rgba(7,3,15,.66);backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
nav .logo{font-family:Bungee;font-size:20px;letter-spacing:1px;text-decoration:none;background:linear-gradient(90deg,var(--pink),var(--cyan));-webkit-background-clip:text;background-clip:text;color:transparent;white-space:nowrap}
nav .links{margin-left:auto;display:flex;gap:4px;flex-wrap:wrap;align-items:center}
nav .links a,nav .drop>button{padding:8px 12px;border-radius:10px;text-decoration:none;font-weight:600;font-size:14px;color:var(--muted);transition:.2s;background:none;border:0;font-family:inherit;cursor:pointer}
nav .links a:hover,nav .links a.on,nav .drop>button:hover{color:#fff;background:rgba(255,70,190,.18)}
nav .drop{position:relative}
nav .drop .menu{position:absolute;right:0;top:calc(100% + 8px);min-width:260px;background:rgba(14,6,26,.97);border:1px solid var(--line);border-radius:14px;padding:8px;display:none;box-shadow:0 20px 50px rgba(0,0,0,.5)}
nav .drop:hover .menu,nav .drop:focus-within .menu{display:block}
nav .drop .menu a{display:block;padding:9px 12px;color:var(--text)}
nav .burger{display:none;margin-left:auto;background:none;border:1px solid var(--line);color:#fff;border-radius:10px;padding:8px 12px;font-size:18px;cursor:pointer}
nav .acct{display:flex;align-items:center;gap:6px;margin-left:8px}
nav .links .acct a.login{background:linear-gradient(90deg,var(--pink),#ff7a59);color:#fff}
nav .links .acct a.admin-btn{background:linear-gradient(90deg,var(--gold),#ff9a3c);color:#1a0b00;font-weight:800}
nav .links .acct a.me{display:flex;align-items:center;gap:8px;color:#fff;padding:4px 10px 4px 4px;border:1px solid var(--line)}
nav .acct .avatar{border-radius:9px;font-size:13px}
footer{padding:50px max(16px,6vw);text-align:center;color:var(--muted);border-top:1px solid var(--line);background:rgba(7,3,15,.75)}
footer .big{font-family:Monoton;font-size:clamp(34px,6vw,64px);color:#fff;text-shadow:0 0 20px var(--pink);margin-bottom:10px}
footer .flinks{display:flex;gap:16px;justify-content:center;flex-wrap:wrap;margin:14px 0}
footer .flinks a{color:var(--text);text-decoration:none;font-weight:700}

/* ---------- shared blocks ---------- */
section{padding:90px max(16px,6vw);position:relative}
.wrap{max-width:1180px;margin:0 auto}
h2{font-family:Bungee;font-size:clamp(28px,5vw,48px);margin-bottom:10px;text-shadow:0 0 18px rgba(255,70,190,.6)}
.kicker{color:var(--cyan);font-weight:800;letter-spacing:3px;font-size:13px;text-transform:uppercase}
.sub{color:var(--muted);max-width:660px;margin-bottom:40px}
.reveal{opacity:0;transform:translateY(40px);transition:opacity .8s ease,transform .8s ease}
.reveal.in{opacity:1;transform:none}
.card{background:var(--panel);border:1px solid var(--line);border-radius:22px;padding:28px;backdrop-filter:blur(8px)}
.btns{display:flex;gap:12px;flex-wrap:wrap}
.btn{display:inline-flex;align-items:center;gap:8px;padding:14px 22px;border-radius:14px;font-weight:800;text-decoration:none;border:0;cursor:pointer;font-size:15px;transition:transform .2s,box-shadow .2s;font-family:inherit;color:#fff}
.btn.pink{background:linear-gradient(90deg,var(--a1),#ff7a59);box-shadow:0 8px 30px rgba(255,70,190,.45)}
.btn.ghost{background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.22)}
.btn:hover{transform:translateY(-3px);box-shadow:0 12px 40px rgba(34,230,255,.4)}
.badge{display:inline-block;padding:5px 12px;border-radius:999px;font-size:12px;font-weight:800;letter-spacing:1px;text-transform:uppercase;background:rgba(34,230,255,.15);color:var(--cyan);border:1px solid rgba(34,230,255,.4);margin:0 6px 8px 0}
.badge.pink{background:rgba(255,70,190,.15);color:var(--pink);border-color:rgba(255,70,190,.4)}
.glitch{position:relative;display:inline-block;color:#fff;text-shadow:0 0 12px var(--pink),0 0 40px var(--pink)}
.glitch::before,.glitch::after{content:attr(data-text);position:absolute;inset:0}
.glitch::before{color:var(--cyan);animation:g1 3s infinite steps(1);clip-path:inset(0 0 60% 0)}
.glitch::after{color:var(--pink);animation:g2 2.6s infinite steps(1);clip-path:inset(55% 0 0 0)}
@keyframes g1{0%,92%{transform:none}93%{transform:translate(-4px,-2px)}96%{transform:translate(3px,1px)}}
@keyframes g2{0%,88%{transform:none}90%{transform:translate(4px,2px)}94%{transform:translate(-3px,0)}}
.ticker{overflow:hidden;border-block:1px solid var(--line);background:rgba(255,70,190,.08);padding:14px 0;white-space:nowrap}
.ticker span{display:inline-block;padding-left:100%;animation:tick 32s linear infinite;font-family:Bungee;font-size:18px;color:var(--gold)}
.ticker b{color:var(--cyan);margin:0 18px}
@keyframes tick{to{transform:translateX(-100%)}}

/* ---------- home ---------- */
.hero{min-height:calc(100vh - 60px);display:grid;grid-template-columns:1.1fr .9fr;gap:40px;align-items:center}
.hero h1{font-family:Monoton;font-weight:400;font-size:clamp(48px,9vw,120px);line-height:1;letter-spacing:2px}
.hero p.lead{font-size:clamp(17px,2vw,21px);color:#fff;margin:22px 0 30px;max-width:560px;text-shadow:0 2px 12px #000,0 0 2px #000}
.hero .kicker{text-shadow:0 2px 10px #000}
.portrait{position:relative;justify-self:center;width:min(460px,100%)}
.portrait .frame{border-radius:26px;overflow:hidden;border:2px solid transparent;background:linear-gradient(var(--bg2),var(--bg2)) padding-box,linear-gradient(135deg,var(--pink),var(--cyan),var(--gold)) border-box;box-shadow:0 0 60px rgba(255,70,190,.5);transform:rotate(-2deg);transition:transform .5s}
.portrait:hover .frame{transform:rotate(0) scale(1.02)}
.about{display:grid;grid-template-columns:1fr 1fr;gap:28px}
.facts{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}
.fact{background:rgba(255,255,255,.04);border-radius:16px;padding:18px;border:1px solid rgba(255,255,255,.07)}
.fact b{display:block;font-family:Bungee;font-size:26px;color:var(--cyan)}
.fact span{color:var(--muted);font-size:14px}
/* big alternating project rows */
.showcase{display:flex;flex-direction:column;gap:40px}
.show{display:grid;grid-template-columns:1.15fr 1fr;border-radius:28px;overflow:hidden;border:1px solid var(--line);background:var(--panel);text-decoration:none;transition:transform .3s,box-shadow .3s}
.show:nth-child(even){grid-template-columns:1fr 1.15fr}
.show:nth-child(even) .img{order:2}
.show:hover{transform:translateY(-6px);box-shadow:0 30px 80px color-mix(in srgb,var(--sa1) 45%,transparent)}
.show .img{min-height:330px;background-size:cover;background-position:center;transition:transform .6s}
.show:hover .img{transform:scale(1.04)}
.show .txt{padding:38px;display:flex;flex-direction:column;justify-content:center;gap:12px;position:relative}
.show h3{font-family:Bungee;font-size:clamp(24px,3.4vw,36px);line-height:1.1;background:linear-gradient(90deg,var(--sa1),var(--sa2));-webkit-background-clip:text;background-clip:text;color:transparent}
.show p{color:var(--muted)}
.show .go{font-weight:800;color:#fff}
.video{border-radius:22px;overflow:hidden;border:1px solid var(--line);box-shadow:0 0 60px rgba(34,230,255,.25);aspect-ratio:16/9;background:#000}
.video iframe{width:100%;height:100%;border:0}
.plats{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:18px}
.plat{display:flex;align-items:center;gap:14px;padding:20px;border-radius:18px;text-decoration:none;background:var(--panel);border:1px solid var(--line);transition:transform .2s,border-color .2s}
.plat:hover{transform:translateY(-4px) rotate(-1deg);border-color:var(--cyan)}
.plat .ico{width:48px;height:48px;border-radius:14px;display:grid;place-items:center;font-family:Bungee;font-size:20px;color:#fff;flex:none}
.plat b{display:block}
.plat span{color:var(--muted);font-size:13px}

/* ---------- project page ---------- */
.phero{min-height:88vh;display:flex;align-items:flex-end;padding:0;position:relative;overflow:hidden}
.phero .bg{position:absolute;inset:-40px;background-size:cover;background-position:center;filter:saturate(1.15);transform:scale(1.08);will-change:transform}
.phero::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(7,3,15,.2) 0%,rgba(7,3,15,.55) 55%,var(--bg) 100%)}
.phero .wrap{position:relative;z-index:1;width:100%;padding:0 max(16px,6vw) 70px}
.phero h1{font-family:Bungee;font-size:clamp(32px,6.2vw,88px);line-height:1;overflow-wrap:anywhere;padding-right:.1em;margin:10px 0 14px;background:linear-gradient(90deg,var(--a1),var(--a2));-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 4px 24px rgba(0,0,0,.8))}
.phero .tag{font-size:clamp(18px,2.4vw,24px);max-width:720px;text-shadow:0 2px 14px #000;margin-bottom:26px}
.phero .badge{background:rgba(0,0,0,.55);color:#fff;border-color:var(--a2)}
.cols{display:grid;grid-template-columns:1.3fr 1fr;gap:28px;align-items:start}
.cols p{font-size:18px;margin-bottom:14px}
.cols p+p{color:var(--muted);font-size:16px}
.feats{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:18px}
.feat{background:var(--panel);border:1px solid var(--line);border-radius:20px;padding:24px;transition:transform .25s,border-color .25s}
.feat:hover{transform:translateY(-6px);border-color:var(--a2)}
.feat .i{font-size:34px;margin-bottom:10px;display:inline-block;transition:transform .4s}
.feat:hover .i{transform:scale(1.25) rotate(-8deg)}
.feat h3{font-size:18px;margin-bottom:6px}
.feat p{color:var(--muted);font-size:15px}
.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px}
.gallery button{border:0;padding:0;border-radius:16px;overflow:hidden;cursor:zoom-in;background:#000;aspect-ratio:16/10}
.gallery img{width:100%;height:100%;object-fit:cover;transition:transform .5s,filter .5s}
.gallery button:hover img{transform:scale(1.07);filter:brightness(1.15)}
.lightbox{position:fixed;inset:0;z-index:100;background:rgba(0,0,0,.92);display:none;align-items:center;justify-content:center;padding:20px;cursor:zoom-out}
.lightbox.open{display:flex}
.lightbox img{max-height:90vh;border-radius:12px;box-shadow:0 0 80px rgba(255,70,190,.4)}
.steps{counter-reset:s;display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:18px}
.step{background:var(--panel);border:1px solid var(--line);border-radius:20px;padding:24px 24px 24px 76px;position:relative;min-height:90px;display:flex;align-items:center}
.step::before{counter-increment:s;content:counter(s);position:absolute;left:20px;top:50%;transform:translateY(-50%);width:42px;height:42px;border-radius:12px;display:grid;place-items:center;font-family:Bungee;font-size:20px;background:linear-gradient(135deg,var(--a1),var(--a2))}
.keys{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px}
.key{display:flex;align-items:center;gap:12px;background:rgba(0,0,0,.35);border:1px solid rgba(255,255,255,.1);border-radius:14px;padding:12px 14px}
.key kbd{min-width:44px;padding:6px 10px;border-radius:9px;text-align:center;font-family:Bungee;font-size:14px;background:linear-gradient(180deg,#2a1f3d,#140c22);border:1px solid rgba(255,255,255,.25);box-shadow:0 3px 0 rgba(0,0,0,.6)}
.dlbox{display:flex;flex-direction:column;gap:12px}
.dlbox .btn{justify-content:center}
.req{margin-top:18px;padding:16px;border-radius:14px;background:rgba(255,204,51,.08);border:1px solid rgba(255,204,51,.3);color:#ffe7a3;font-size:14px}
.embed{display:inline-block;border-radius:14px;overflow:hidden;border:1px solid var(--line);background:rgba(0,0,0,.4);padding:10px;transition:transform .2s}
.embed:hover{transform:translateY(-4px) scale(1.02)}
.more{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px}
.mini{border-radius:16px;overflow:hidden;border:1px solid var(--line);background:var(--panel);text-decoration:none;transition:transform .2s}
.mini:hover{transform:translateY(-5px)}
.mini div{aspect-ratio:315/200;background-size:cover;background-position:center}
.mini b{display:block;padding:12px 14px}

/* ---------- downloads page ---------- */
.dl-row{display:grid;grid-template-columns:200px 1fr auto;gap:22px;align-items:center;background:var(--panel);border:1px solid var(--line);border-radius:22px;padding:16px;margin-bottom:16px;transition:transform .2s,border-color .2s}
.dl-row:hover{transform:translateX(6px);border-color:var(--cyan)}
.dl-row .t{aspect-ratio:315/250;border-radius:14px;background-size:cover;background-position:center}
.dl-row h3{font-size:20px}
.dl-row h3 a{text-decoration:none}
.dl-row p{color:var(--muted);font-size:14px;margin:4px 0 8px}
.dl-row .b{display:flex;flex-direction:column;gap:8px;min-width:190px}
.dl-row .b a{font-size:14px;padding:10px 14px;border-radius:11px;text-decoration:none;font-weight:800;text-align:center;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.16)}
.dl-row .b a.main{background:linear-gradient(90deg,var(--pink),#ff7a59);border:0}
.dl-row .b a:hover{filter:brightness(1.2)}
.filters{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:26px}
.filters button{background:rgba(255,255,255,.06);color:var(--muted);border:1px solid rgba(255,255,255,.15);padding:9px 16px;border-radius:999px;font-weight:700;cursor:pointer;font-family:inherit}
.filters button.on{background:var(--pink);color:#fff;border-color:var(--pink)}

/* ---------- forum ---------- */
.forum{display:grid;grid-template-columns:300px 1fr;gap:22px;align-items:start}
.forum .side .card{padding:22px}
.forum label{display:block;font-size:12px;font-weight:800;letter-spacing:1px;color:var(--muted);text-transform:uppercase;margin:12px 0 6px}
.forum input,.forum textarea,.forum select{width:100%;background:rgba(0,0,0,.35);border:1px solid rgba(255,255,255,.15);color:#fff;border-radius:12px;padding:11px 12px;font:inherit;font-size:15px}
.forum textarea{min-height:120px;resize:vertical}
.forum input:focus,.forum textarea:focus,.forum select:focus{outline:2px solid var(--pink);border-color:transparent}
.cats{display:flex;flex-direction:column;gap:6px}
.cats button{text-align:left;background:transparent;border:0;color:var(--muted);padding:9px 12px;border-radius:10px;font:inherit;font-weight:700;cursor:pointer}
.cats button.on,.cats button:hover{background:rgba(255,70,190,.16);color:#fff}
.threads{display:flex;flex-direction:column;gap:10px}
.thread{display:flex;gap:14px;align-items:center;padding:16px 18px;background:var(--panel);border:1px solid var(--line);border-radius:16px;cursor:pointer;transition:transform .15s,border-color .15s}
.thread:hover{transform:translateX(4px);border-color:var(--cyan)}
.avatar{width:40px;height:40px;border-radius:12px;flex:none;display:grid;place-items:center;font-weight:800;color:#fff}
.thread .meta{color:var(--muted);font-size:13px}
.thread .count{margin-left:auto;text-align:center;font-family:Bungee;color:var(--cyan);min-width:54px}
.thread .count small{display:block;font-family:Inter;font-size:11px;color:var(--muted)}
.post{display:flex;gap:14px;padding:18px;background:var(--panel);border:1px solid var(--line);border-radius:16px;margin-bottom:10px}
.post .content{flex:1;min-width:0}
.post .who{font-weight:800}
.post .who small{color:var(--muted);font-weight:400;margin-left:8px}
.post .text{white-space:pre-wrap;word-wrap:break-word;margin-top:6px;color:#eadfff}
.del{background:none;border:1px solid rgba(255,80,80,.5);color:#ff8080;border-radius:8px;padding:4px 8px;cursor:pointer;font-size:12px;height:fit-content}
.err{color:#ff8a8a;font-weight:600;margin-top:10px;min-height:1.2em}
.empty{padding:40px;text-align:center;color:var(--muted);border:1px dashed var(--line);border-radius:16px}

@media (max-width:1000px){ .hero{grid-template-columns:1fr} .portrait{width:min(420px,100%)} }
@media (max-width:900px){
  .hero,.about,.forum,.cols,.show,.show:nth-child(even){grid-template-columns:1fr}
  .show:nth-child(even) .img{order:0}
  .show .img{min-height:220px}
  .hero{padding-top:40px;min-height:auto}
  nav .links{display:none;position:absolute;top:100%;left:0;right:0;flex-direction:column;align-items:stretch;background:rgba(10,4,20,.97);padding:10px;border-bottom:1px solid var(--line)}
  nav.open .links{display:flex}
  nav .burger{display:block}
  nav .drop .menu{position:static;display:block;box-shadow:none;border:0;padding:0 0 0 12px;background:none}
  section{padding:70px 16px}
  .dl-row{grid-template-columns:1fr}
  .dl-row .t{max-width:none}
}

/* Family Guy Online page: "Who's playing" (live rooms + recent joins) */
.live{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:18px;margin-top:18px}
.live-h{margin:0 0 14px;font-size:19px}
.live-room{padding:10px 0;border-top:1px solid var(--line)}
.live-room:first-of-type{border-top:none}
.live-count{float:right;color:var(--muted);font-weight:700}
.live-names{margin-top:6px;display:flex;flex-wrap:wrap;gap:6px}
.live-chip{padding:3px 10px;border-radius:999px;background:rgba(34,230,255,.12);border:1px solid rgba(34,230,255,.35);color:var(--text);text-decoration:none;font-size:14px}
.live-none,.live-empty{color:var(--muted);font-size:14px}
.live-row{display:flex;align-items:center;gap:12px;padding:8px 0;border-top:1px solid var(--line)}
.live-row:first-child{border-top:none}
.live-row b{display:block}
.live-row small{color:var(--muted)}
.live-t{margin-left:auto;color:var(--muted);font-size:13px;white-space:nowrap}
.live-av{width:36px;height:36px;flex:0 0 36px;border-radius:50%;object-fit:cover;display:inline-flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,var(--pink),var(--cyan));color:#fff;font-weight:800}

/* home page: Family Guy Online spotlight */
.fgo-spot{padding:10px 0 50px}
.fgo-spot-in{position:relative;overflow:hidden;border-radius:28px;display:grid;grid-template-columns:1.1fr 1fr;align-items:end;gap:10px;min-height:400px;
  background:radial-gradient(60% 50% at 80% 100%,#7dcf4f 0 60%,transparent 61%),radial-gradient(90% 40% at 30% 112%,#5fb83b 0 60%,transparent 61%),linear-gradient(#3aa3ea,#9ad8fb 70%,#d4f0ff);
  box-shadow:0 30px 70px rgba(0,0,0,.45),inset 0 0 0 1px rgba(255,255,255,.25)}
.fgo-spot-in::before,.fgo-spot-in::after{content:"";position:absolute;background:#fff;border-radius:40px;opacity:.9;width:120px;height:34px;box-shadow:40px -18px 0 6px #fff,80px 0 0 -2px #fff;animation:fgospotdrift 60s linear infinite}
.fgo-spot-in::before{top:40px;left:-160px} .fgo-spot-in::after{top:110px;left:-160px;transform:scale(.7);animation-duration:90s;animation-delay:-40s}
@keyframes fgospotdrift{to{left:110%}}
.fgo-spot-txt{position:relative;z-index:1;padding:34px 0 38px 40px;color:#14304f}
.fgo-spot-tag{display:inline-block;font:800 12px Inter,sans-serif;letter-spacing:2px;color:#fff;background:#d7263d;padding:6px 12px;border-radius:999px;box-shadow:0 4px 12px rgba(215,38,61,.4)}
.fgo-spot-logo{display:block;width:210px;height:auto;margin:14px 0 6px;filter:drop-shadow(0 6px 10px rgba(0,0,0,.25))}
.fgo-spot-txt p{font-size:17px;line-height:1.5;max-width:460px;margin:0 0 14px;color:#173a5e}
.fgo-spot-live{display:inline-flex;align-items:center;gap:8px;font:700 14px Inter,sans-serif;color:#14304f;background:rgba(255,255,255,.75);padding:7px 14px;border-radius:999px;margin-bottom:16px}
.fgo-spot-live i{width:9px;height:9px;border-radius:50%;background:#8a99aa} .fgo-spot-live.on i{background:#22c55e;box-shadow:0 0 0 4px rgba(34,197,94,.25);animation:fgospotpulse 1.6s infinite}
@keyframes fgospotpulse{50%{box-shadow:0 0 0 8px rgba(34,197,94,0)}}
.fgo-spot .btns{margin:0}
.fgo-spot-play{background:linear-gradient(#ffb347,#f06d1a);color:#fff;border:2px solid #fff;box-shadow:0 8px 22px rgba(240,109,26,.45);font-family:"Luckiest Guy",Inter,sans-serif;font-size:20px;letter-spacing:1px}
.fgo-spot-more{background:rgba(255,255,255,.85);color:#14304f;border:2px solid #fff}
.fgo-spot-cast{position:relative;z-index:1;height:100%;min-height:360px}
.fgo-spot-cast img{position:absolute;bottom:0;filter:drop-shadow(0 14px 14px rgba(0,0,0,.3));transition:transform .3s}
.fgo-spot-cast .c1{height:330px;left:2%} .fgo-spot-cast .c2{height:250px;left:37%;z-index:2} .fgo-spot-cast .c3{height:225px;right:-1%;z-index:3}
.fgo-spot-in:hover .c1{transform:translateY(-6px) rotate(-2deg)} .fgo-spot-in:hover .c3{transform:translateY(-6px) rotate(2deg)}
@media (max-width:820px){.fgo-spot-in{grid-template-columns:1fr}.fgo-spot-txt{padding:28px 22px 0}.fgo-spot-cast{min-height:240px}.fgo-spot-cast .c1{height:230px}.fgo-spot-cast .c2{height:180px}.fgo-spot-cast .c3{height:160px}}

/* how-to-play guide */
.guide-hero{padding-top:30px}
.guide-banner{min-height:360px}
.guide-banner .btns{flex-wrap:wrap}
.k{display:inline-block;padding:2px 9px;border-radius:7px;background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.22);border-bottom-width:3px;font:800 13px Inter,sans-serif;letter-spacing:.5px;color:#fff;white-space:nowrap}
.fgo-spot .k,.guide-banner .k{background:rgba(20,48,79,.1);color:#14304f;border-color:rgba(20,48,79,.3)}
.guide-steps{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-top:22px}
.gstep{background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:20px}
.gstep>b{display:inline-flex;width:38px;height:38px;border-radius:50%;align-items:center;justify-content:center;background:linear-gradient(135deg,#ffb347,#f06d1a);color:#fff;font:400 20px "Luckiest Guy",Inter,sans-serif}
.gstep h3{margin:12px 0 6px} .gstep p{color:var(--muted);margin:0;line-height:1.55}
.guide-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px;margin-top:22px}
.gcard{background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:22px}
.gcard h3{margin:0 0 12px} .gcard p{color:var(--muted);margin:0;line-height:1.6}
.krow{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:8px 0;border-top:1px solid var(--line)} .krow:first-of-type{border-top:none}
.krow span:last-child{color:var(--muted);text-align:right;font-size:14px}
.guide-modes{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:22px}
.gmode{border-radius:20px;padding:24px;border:1px solid var(--line);background:var(--panel)}
.gmode .tag{display:inline-block;font:800 12px Inter,sans-serif;letter-spacing:2px;padding:5px 11px;border-radius:999px;margin-bottom:10px}
.gmode.walk .tag{background:rgba(34,230,255,.15);color:#7fe9ff} .gmode.shoot .tag{background:rgba(255,59,48,.18);color:#ff8a80}
.gmode.shoot{border-color:rgba(255,59,48,.35);box-shadow:inset 0 0 0 1px rgba(255,59,48,.12)}
.gmode h3{margin:0 0 10px} .gmode ul{margin:0;padding-left:20px;color:var(--muted);line-height:1.8}
.guide-weapons{margin-top:22px;border:1px solid var(--line);border-radius:18px;overflow:hidden}
.gw{display:grid;grid-template-columns:1.1fr .5fr .6fr .9fr .8fr 1.7fr;gap:10px;padding:14px 18px;border-top:1px solid var(--line);align-items:center;color:var(--muted)}
.gw b{color:#fff} .gw.head{border-top:none;background:rgba(255,255,255,.05);font:800 12px Inter,sans-serif;letter-spacing:1.5px;text-transform:uppercase;color:#fff}
.home-howto{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:20px}
.home-howto .gcard h3{display:flex;align-items:center;gap:8px}
@media (max-width:900px){.guide-steps{grid-template-columns:1fr 1fr}.guide-modes{grid-template-columns:1fr}.home-howto{grid-template-columns:1fr 1fr}}
@media (max-width:640px){.guide-steps,.home-howto{grid-template-columns:1fr}.gw{grid-template-columns:1fr 1fr;row-gap:4px}.gw.head{display:none}}

/* home page: community news */
.cnews{display:grid;grid-template-columns:1.1fr 1fr;gap:18px;margin-top:22px}
.cnews-main{position:relative;overflow:hidden;border-radius:22px;padding:28px;background:linear-gradient(135deg,rgba(255,70,190,.22),rgba(34,230,255,.12));border:1px solid var(--line)}
.cnews-main::after{content:"FRIDAY";position:absolute;right:-10px;bottom:-26px;font:400 110px Bungee,Inter,sans-serif;color:rgba(255,255,255,.05);pointer-events:none}
.cnews-tag{display:inline-block;font:800 12px Inter,sans-serif;letter-spacing:2px;padding:5px 12px;border-radius:999px;background:#ff3b30;color:#fff;margin-bottom:12px;box-shadow:0 0 0 4px rgba(255,59,48,.18)}
.cnews-main h3{font-size:28px;margin:0 0 10px} .cnews-main p{color:var(--muted);line-height:1.6;margin:0 0 18px;max-width:520px}
.cnews-list{display:flex;flex-direction:column;gap:10px}
.cnews-item{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:14px 18px}
.cnews-item span{display:block;font:800 11px Inter,sans-serif;letter-spacing:1.5px;color:var(--cyan);text-transform:uppercase}
.cnews-item b{display:block;margin:4px 0 2px} .cnews-item p{margin:0;color:var(--muted);font-size:14px;line-height:1.5}
@media (max-width:900px){.cnews{grid-template-columns:1fr}}

/* live "N playing" badge in the nav */
.nav-live{display:inline-flex!important;align-items:center;gap:6px;font-weight:800;color:#7ff0ad!important}
.nav-live i{width:8px;height:8px;border-radius:50%;background:#22c55e;box-shadow:0 0 0 3px rgba(34,197,94,.25);animation:fgospotpulse 1.6s infinite}
.nav-live.none{color:var(--muted)!important} .nav-live.none i{background:#8a99aa;box-shadow:none;animation:none}

/* important news (leaving gd.games) */
.imp-news{position:relative;border-radius:22px;padding:30px 32px;background:linear-gradient(135deg,rgba(255,59,48,.18),rgba(0,0,0,.25));border:2px solid rgba(255,59,48,.6);box-shadow:0 0 40px rgba(255,59,48,.15)}
.imp-tag{display:inline-block;font:800 12px Inter,sans-serif;letter-spacing:2px;padding:5px 12px;border-radius:999px;background:#ff3b30;color:#fff;margin-bottom:12px}
.imp-news h2{margin:0 0 14px}
.imp-news p{color:var(--muted);line-height:1.7;margin:0 0 12px;max-width:820px} .imp-news p b{color:#fff}
.imp-news a{color:#ff8a80}
.imp-sign{margin-top:16px;font-weight:800;color:#fff;opacity:.85}
@media (max-width:600px){.imp-news{padding:22px 18px}}
.imp-banner-sec{padding-top:10px;padding-bottom:10px}
.imp-banner{display:flex;flex-wrap:wrap;align-items:center;gap:14px;padding:16px 22px;border-radius:16px;border:2px solid rgba(255,59,48,.6);background:rgba(255,59,48,.12);color:#fff;text-decoration:none}
.imp-banner .imp-tag{margin:0} .imp-banner b{font-size:18px} .imp-more{margin-left:auto;color:#ff8a80;font-weight:800}
.imp-banner:hover{background:rgba(255,59,48,.2)}
.news-page{margin-top:18px}
