@import url('https://fonts.googleapis.com/css2?family=Creepster&family=Special+Elite&display=swap');
*{box-sizing:border-box}body{margin:0;background:#0b0b16;color:#e5e7eb;font:13px/1.4 ui-monospace,Menlo,Consolas,monospace}
a{color:#7dd3fc}header{position:sticky;top:0;z-index:5;background:#141428;border-bottom:2px solid #2a2a4a;padding:8px 12px;display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center}
header h1{font-size:16px;margin:0;color:#f43f5e;letter-spacing:2px;margin-right:auto;text-shadow:0 0 8px #f43f5e}header h1 a{color:inherit;text-decoration:none}
main{max-width:1300px;margin:auto;padding:12px}.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.room{position:relative;background:#11111f;border:3px solid var(--c,#f43f5e);box-shadow:0 0 12px var(--c,#f43f5e),inset 0 0 18px rgba(0,0,0,.6);border-radius:4px;padding:8px;display:flex;flex-direction:column;gap:6px}
.room h2{margin:0;font-size:14px;color:var(--c,#f43f5e)}.room p{margin:0;color:#9ca3af;font-size:12px}a.room{text-decoration:none;color:inherit}
canvas{width:100%;background:#000;border:1px solid #222;aspect-ratio:400/190;display:block}
.btn,button{background:#f43f5e;color:#fff;border:0;padding:7px 12px;font:inherit;cursor:pointer;border-radius:3px;text-decoration:none;display:inline-block}
.btn.g,button.g{background:#2a2a4a}input,select,textarea{width:100%;background:#0f0f1d;color:#e5e7eb;border:1px solid #3b3b55;padding:7px;font:inherit;border-radius:3px}
label{display:block;margin:8px 0 3px;color:#9ca3af;font-size:11px}.card{background:#141428;border:1px solid #2a2a4a;padding:14px;border-radius:4px;max-width:520px;margin:12px auto}
.items{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:12px}.item{background:#141428;border:1px solid #2a2a4a;border-radius:4px;overflow:hidden;display:flex;flex-direction:column}
.item img{width:100%;aspect-ratio:1;object-fit:cover;background:#000}.item .b{padding:8px;display:flex;flex-direction:column;gap:4px;flex:1}.item .pr{color:#4ade80;font-weight:bold}
.tag{font-size:10px;border:1px solid #a855f7;color:#c4b5fd;padding:0 5px;align-self:flex-start}.muted{color:#9ca3af}.err{color:#f87171}.ok{color:#4ade80}
.av{width:28px;height:28px;border-radius:50%;object-fit:cover;vertical-align:middle;border:1px solid #444}
@media(max-width:900px){.grid{grid-template-columns:1fr 1fr}.items{grid-template-columns:1fr 1fr 1fr}}@media(max-width:600px){.grid{grid-template-columns:1fr}.items{grid-template-columns:1fr 1fr}}

/* town map: Hangout in the middle, shops in rings */
.townwrap{overflow:auto;-webkit-overflow-scrolling:touch;padding:6px 2px 10px}.town{--n:3;--cw:minmax(220px,1fr);display:grid;grid-template-columns:repeat(var(--n),var(--cw));gap:12px;min-width:min-content}
.room.hang{text-align:center;justify-content:center;align-items:center;background:radial-gradient(circle at 50% 40%,#123040,#0b0b18 70%);border-width:4px;box-shadow:0 0 22px var(--c),0 0 46px rgba(34,211,238,.35),inset 0 0 22px rgba(0,0,0,.6);animation:hangpulse 3s ease-in-out infinite}
.room.hang h2{font-size:18px}.hangart{font-size:40px;line-height:1.2}.hangtag{font-size:10px;letter-spacing:.12em;color:#22d3ee;border:1px solid #22d3ee;border-radius:3px;padding:2px 6px}
@keyframes hangpulse{50%{box-shadow:0 0 30px var(--c),0 0 70px rgba(34,211,238,.5),inset 0 0 22px rgba(0,0,0,.6)}}.townhint{font-size:12px;text-align:center;margin-top:4px}
@media(max-width:600px){.town{--cw:minmax(108px,1fr);gap:6px}.town .room{padding:5px}.town .room h2{font-size:12px}.town .room p{font-size:10px}.room.hang h2{font-size:15px}.hangart{font-size:30px}.room.hang p.muted{display:none}}

.flt{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0}.chip{background:#11111f;border:1px solid #3b3b55;color:#d1d5db;border-radius:999px;padding:4px 10px;font-size:12px;cursor:pointer}.chip.on{border-color:#f43f5e;color:#fff;background:#3f0d1a}
/* ---- brand: header logo ---- */
header h1 a{font-family:Creepster,Impact,sans-serif;font-weight:400;letter-spacing:2px;color:#e11d48;-webkit-text-stroke:1px #1b1430;text-shadow:0 0 10px rgba(244,63,94,.55);display:inline-flex;align-items:center;gap:8px}
header h1 a .moon{width:20px;height:20px;border-radius:50%;box-shadow:inset -6px 2px 0 0 #fbbf24;filter:drop-shadow(0 0 5px #fbbf24);transform:rotate(-20deg)}
/* ---- homepage banner ---- */
.bn{position:relative;min-height:340px;overflow:hidden;border:3px solid #f43f5e;box-shadow:0 0 18px #f43f5e;border-radius:4px;background:linear-gradient(#1a0a24,#3b0d1f 55%,#0a0a14);margin-bottom:14px}
.bn svg.sc{position:absolute;inset:0;width:100%;height:100%}.bn .fog{position:absolute;left:-20%;right:-20%;bottom:-20px;height:150px;background:radial-gradient(ellipse at 30% 60%,rgba(200,200,230,.26),transparent 60%),radial-gradient(ellipse at 75% 70%,rgba(200,200,230,.2),transparent 55%);filter:blur(6px);animation:hvdr 18s linear infinite alternate;pointer-events:none}
@keyframes hvdr{to{transform:translateX(12%)}}.bn .bl{animation:hvflick 5s infinite}
.bn .tx{position:relative;padding:44px 6% 30px;max-width:620px}.bn h1{font:78px/.95 Creepster,Impact,sans-serif;color:#e11d48;-webkit-text-stroke:3px #1b1430;text-shadow:0 0 18px rgba(244,63,94,.6);margin:0}
.bn p{font:17px 'Special Elite',monospace;color:#fde68a;margin:12px 0 18px;text-shadow:0 1px 2px #000}.bn .cta{display:inline-block;background:#e11d48;color:#fff;padding:10px 16px;font:bold 14px monospace;border:3px solid #1b1430;box-shadow:4px 4px 0 #1b1430;text-decoration:none;margin:0 8px 8px 0}.bn .cta.g{background:#22d3ee;color:#0a0a14}.bn .cta.k{background:#1f1b2e;color:#fde68a}
@media(max-width:600px){.bn{min-height:0}.bn .tx{padding:22px 16px 14px}.bn h1{font-size:46px;-webkit-text-stroke:2px #1b1430}.bn p{font-size:13px;margin:8px 0 12px}.bn .cta{padding:8px 10px;font-size:12px;margin:0 4px 6px 0}.bn svg.sc{opacity:.55}}
/* ---- town street: cobbles, fog, lamps ---- */
.townwrap.street{position:relative;border-radius:6px;padding:20px;background:radial-gradient(circle at 25% 30%,#3a3646 0 5px,transparent 6px) 0 0/22px 18px,radial-gradient(circle at 75% 75%,#34303f 0 6px,transparent 7px) 0 0/22px 18px,radial-gradient(circle at 60% 20%,#2e2a38 0 4px,transparent 5px) 0 0/16px 14px,#1a1722}
.street .town{gap:40px;position:relative;z-index:1}.street .town .room{background:#11111f;position:relative}
.street .fogl{position:absolute;inset:0;pointer-events:none;z-index:3;background:radial-gradient(ellipse 40% 18% at 20% 30%,rgba(210,210,235,.15),transparent),radial-gradient(ellipse 45% 20% at 80% 65%,rgba(210,210,235,.13),transparent),radial-gradient(ellipse 50% 22% at 45% 95%,rgba(210,210,235,.16),transparent);filter:blur(8px);animation:hvfog 20s ease-in-out infinite alternate}
.street .fogl.two{animation-duration:31s;animation-direction:alternate-reverse;opacity:.8}@keyframes hvfog{to{transform:translateX(6%) translateY(-2%)}}
.lamp{position:absolute;z-index:2;pointer-events:none;width:calc(var(--gs)*.45);height:calc(var(--gs)*.45);max-width:16px;max-height:16px;transform:translate(-50%,-50%);border-radius:50%;background:#fde68a;box-shadow:0 0 12px 4px rgba(253,230,138,.55),0 0 50px 22px rgba(253,230,138,.1);animation:hvflick 4s infinite}
.lamp.b{animation-duration:6.5s}.lamp.c{animation-duration:3.2s;animation-delay:1s}@keyframes hvflick{0%,18%,22%,62%,64%,100%{opacity:1}20%,63%{opacity:.25}}
.neon{position:absolute;top:-12px;right:10px;z-index:5;font:900 14px/1 Impact,'Arial Black',sans-serif;letter-spacing:2px;color:#fff;padding:4px 8px 3px;border:2px solid #f472b6;border-radius:6px;background:rgba(20,0,20,.85);text-shadow:0 0 4px #fff,0 0 10px #f472b6,0 0 20px #ec4899;box-shadow:0 0 10px #ec4899,inset 0 0 8px #ec4899;animation:hvneon 5s infinite}
@keyframes hvneon{0%,8%,10%,55%,57%,100%{opacity:1}9%,56%{opacity:.35}}
@media(max-width:600px){.townwrap.street{padding:10px}.street .town{gap:16px;--cw:minmax(100px,1fr)}.neon{font-size:10px;top:-9px;right:4px;padding:2px 5px}}
.street .town .room.hang{background:radial-gradient(circle at 50% 40%,#123040,#0b0b18 70%)}
.phs{display:flex;gap:8px;flex-wrap:wrap;margin:6px 0}.pht{position:relative;width:96px;border:2px solid #3b3b55;border-radius:4px;background:#0a0a14;cursor:grab}.pht:first-child{border-color:#fbbf24;box-shadow:0 0 8px rgba(251,191,36,.5)}
.pht img{width:100%;height:96px;object-fit:cover;display:block}.pht .cov,.pht .num{position:absolute;top:3px;left:3px;font:bold 10px monospace;padding:1px 5px;border-radius:3px;background:#fbbf24;color:#111}.pht .num{background:rgba(0,0,0,.7);color:#fff}
.pht .pb{display:flex;justify-content:space-between}.pht .pb button{padding:2px 7px;font-size:12px;min-height:0}.pht .pb button:disabled{opacity:.3}
.phw{position:relative;cursor:zoom-in}.phw img{width:100%}.phn{position:absolute;right:6px;bottom:8px;background:rgba(0,0,0,.75);color:#fde68a;font:bold 11px monospace;padding:2px 6px;border-radius:3px}
.gal{position:fixed;inset:0;z-index:100;background:rgba(5,5,12,.92);display:flex;align-items:center;justify-content:center;padding:12px}.gbox{position:relative;width:min(900px,100%);display:flex;flex-direction:column;gap:8px}
.gmain{position:relative;display:flex;align-items:center;justify-content:center;background:#000;border:3px solid #f43f5e;box-shadow:0 0 18px #f43f5e;height:min(70vh,640px)}.gmain img{max-width:100%;max-height:100%;object-fit:contain;touch-action:pan-y}
.gp,.gn{position:absolute;top:50%;transform:translateY(-50%);font-size:28px;padding:4px 12px;z-index:2}.gp{left:6px}.gn{right:6px}.gx{position:absolute;right:0;top:-40px}.gcap{color:#fde68a;font:13px monospace;text-align:center}
.gth{display:flex;gap:6px;overflow-x:auto;justify-content:center}.gth img{width:64px;height:64px;object-fit:cover;border:2px solid #3b3b55;cursor:pointer;opacity:.7}.gth img.on{border-color:#fbbf24;opacity:1}
@media(max-width:600px){.gmain{height:60vh}.gp,.gn{display:none}.gth{justify-content:flex-start}.gth img{width:52px;height:52px}}
.dz{border:2px dashed #3b3b55;border-radius:6px;padding:14px;text-align:center;display:flex;gap:8px;flex-wrap:wrap;justify-content:center;align-items:center}.dz.on{border-color:#fbbf24;background:rgba(251,191,36,.08)}.dz button{min-height:44px;padding:8px 14px;font-size:14px}
.pht .bar{position:absolute;left:4px;right:4px;top:84px;height:6px;background:rgba(0,0,0,.6);border-radius:3px;overflow:hidden}.pht .bar i{display:block;height:100%;background:#22c55e;transition:width .2s}.pht .perr{position:absolute;left:0;right:0;top:36px;background:#7f1d1d;color:#fff;font:bold 10px monospace;text-align:center;padding:2px}
.pht .cropb{position:absolute;left:3px;right:3px;top:58px;font:bold 10px monospace;padding:3px 2px;min-height:0;background:rgba(0,0,0,.75);color:#fbbf24;border:1px solid #fbbf24}.pht .cropd{position:absolute;right:3px;top:3px;font:bold 9px monospace;background:#22c55e;color:#04210f;padding:1px 4px;border-radius:3px}
.cropq{background:#1f1b2e;border:1px solid #fbbf24;border-radius:4px;padding:6px 8px;font-size:12px}.cropq button{padding:4px 8px;font-size:12px;min-height:0}
.crop{position:fixed;inset:0;z-index:110;background:rgba(5,5,12,.94);display:flex;align-items:center;justify-content:center;padding:10px}.cbox{width:min(720px,100%);display:flex;flex-direction:column;gap:8px}.cbox h3{margin:0;color:#fbbf24}
.cstage{height:min(62vh,560px);background:#000;border:2px solid #3b3b55}.cstage canvas{display:block}.crow{display:flex;gap:12px;flex-wrap:wrap;align-items:center}.crow label{display:flex;gap:6px;align-items:center;font-size:13px}.crow input[type=range]{width:180px}
/* interests & neighborhoods */
.ipick .ig{margin:8px 0}.ipick .ig b{display:block;font-size:12px;color:#fbbf24;margin-bottom:4px}.chip{background:#14142a;border:1px solid #3b3b5c;color:#d1d5db;border-radius:999px;padding:5px 11px;margin:3px;font-size:12px;cursor:pointer;min-height:32px}.chip.on{background:#f43f5e;border-color:#f43f5e;color:#fff}.chip:focus-visible{outline:2px solid #fbbf24}
.imod .gbox{overflow:auto;max-height:90vh}
.district{border:2px dashed var(--c);border-radius:14px;background:radial-gradient(circle at 50% 50%,color-mix(in srgb,var(--c) 14%,transparent),transparent 75%);margin:-14px;z-index:0;pointer-events:none}
.street .town .room{z-index:1}.room.hoodsign{text-align:center;justify-content:center;align-items:center;background:#0b0b18!important;border-style:double;border-width:5px}.room.hoodsign h2{font-size:17px;letter-spacing:.04em}
.room.vacant{opacity:.55;border-style:dashed;justify-content:center;text-align:center;--c:#6b7280}.room.vacant:hover{opacity:.9}
.newtag{position:absolute;top:-10px;left:6px;background:#fbbf24;color:#111;font-size:10px;font-weight:700;border-radius:3px;padding:2px 6px;z-index:2}
.heart{position:absolute;top:6px;right:6px;background:rgba(0,0,0,.55);border:1px solid #f43f5e;color:#f43f5e;border-radius:50%;width:32px;height:32px;padding:0;font-size:17px;line-height:1;cursor:pointer;z-index:3}.heart.on{background:#f43f5e;color:#fff}
.room .heart{top:30px}.itags{font-size:10px!important;color:#fbbf24!important;opacity:.85}
.pick{margin:14px 0}.pkh{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.pkh h2{margin:0;color:#fbbf24;font-size:18px}#sf{flex:1;min-width:180px;max-width:360px}#sf input{margin:0}#pkm{font-size:11px;flex-basis:100%}
.prow{display:flex;gap:10px;overflow-x:auto;padding:12px 2px 8px;-webkit-overflow-scrolling:touch;scroll-snap-type:x proximity}
.pcard{position:relative;flex:0 0 150px;scroll-snap-align:start;background:#11111f;border:2px solid #2b2b45;border-radius:6px;padding:6px;display:flex;flex-direction:column;gap:3px;color:inherit;text-decoration:none;font-size:12px}.pcard:hover{border-color:#f43f5e}.pcard img{width:100%;aspect-ratio:13/18;object-fit:cover;border-radius:3px;background:#0a0a14}.pcard b{font-size:12px;line-height:1.2;max-height:2.4em;overflow:hidden}.pcard .muted{font-size:11px}
.item{position:relative}.stags{margin:4px 0}
@media(max-width:600px){.pcard{flex-basis:124px}.room .heart{top:22px;width:28px;height:28px;font-size:15px}.room.hoodsign h2{font-size:13px}.district{margin:-7px}.itags{display:none}}
