{"id":10,"date":"2026-07-26T15:27:02","date_gmt":"2026-07-26T09:57:02","guid":{"rendered":"https:\/\/pikachoo.in\/?page_id=10"},"modified":"2026-07-26T16:26:44","modified_gmt":"2026-07-26T10:56:44","slug":"home","status":"publish","type":"page","link":"https:\/\/pikachoo.in\/","title":{"rendered":"Home"},"content":{"rendered":"\n<style>\n\/* ===== CSS VARIABLES & THEMES ===== *\/\n:root {\n  --bg-primary: #0a0a0f;\n  --bg-secondary: #0f0f1a;\n  --bg-card: rgba(255,255,255,0.04);\n  --bg-card-hover: rgba(255,255,255,0.08);\n  --accent: #7c3aed;\n  --accent2: #a855f7;\n  --accent3: #06b6d4;\n  --neon: #7c3aed;\n  --neon-glow: 0 0 20px rgba(124,58,237,0.6), 0 0 40px rgba(124,58,237,0.3);\n  --text-primary: #f1f5f9;\n  --text-secondary: #94a3b8;\n  --text-muted: #475569;\n  --border: rgba(124,58,237,0.3);\n  --border-hover: rgba(124,58,237,0.7);\n  --glass: rgba(124,58,237,0.08);\n  --shadow: 0 8px 32px rgba(0,0,0,0.5);\n  --radius: 16px;\n  --radius-sm: 8px;\n  --gradient: linear-gradient(135deg, #7c3aed, #06b6d4);\n  --gradient-btn: linear-gradient(135deg, #7c3aed 0%, #a855f7 50%, #06b6d4 100%);\n  --font: 'Segoe UI', system-ui, -apple-system, sans-serif;\n  --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n[data-theme=\"dark\"]{--bg-primary:#080808;--bg-secondary:#111;--accent:#888;--accent2:#aaa;--neon:#888;--gradient:linear-gradient(135deg,#444,#888);--gradient-btn:linear-gradient(135deg,#333,#666,#999);--border:rgba(200,200,200,0.2);--neon-glow:0 0 20px rgba(150,150,150,0.4);--glass:rgba(200,200,200,0.05)}\n[data-theme=\"black\"]{--bg-primary:#000;--bg-secondary:#050505;--accent:#e0e0e0;--accent2:#fff;--neon:#fff;--gradient:linear-gradient(135deg,#222,#fff);--gradient-btn:linear-gradient(135deg,#111,#444,#eee);--border:rgba(255,255,255,0.2);--neon-glow:0 0 20px rgba(255,255,255,0.3);--glass:rgba(255,255,255,0.04)}\n[data-theme=\"purple\"]{--bg-primary:#0d0014;--bg-secondary:#120019;--accent:#c026d3;--accent2:#e879f9;--neon:#c026d3;--gradient:linear-gradient(135deg,#7e22ce,#c026d3);--gradient-btn:linear-gradient(135deg,#6b21a8,#c026d3,#e879f9);--border:rgba(192,38,211,0.4);--neon-glow:0 0 20px rgba(192,38,211,0.7),0 0 40px rgba(192,38,211,0.3);--glass:rgba(192,38,211,0.08)}\n[data-theme=\"red\"]{--bg-primary:#0f0000;--bg-secondary:#150000;--accent:#dc2626;--accent2:#ef4444;--neon:#dc2626;--gradient:linear-gradient(135deg,#7f1d1d,#dc2626);--gradient-btn:linear-gradient(135deg,#991b1b,#dc2626,#f87171);--border:rgba(220,38,38,0.4);--neon-glow:0 0 20px rgba(220,38,38,0.7),0 0 40px rgba(220,38,38,0.3);--glass:rgba(220,38,38,0.08)}\n[data-theme=\"blue\"]{--bg-primary:#00050f;--bg-secondary:#000815;--accent:#2563eb;--accent2:#3b82f6;--neon:#2563eb;--gradient:linear-gradient(135deg,#1e3a8a,#2563eb);--gradient-btn:linear-gradient(135deg,#1e40af,#2563eb,#60a5fa);--border:rgba(37,99,235,0.4);--neon-glow:0 0 20px rgba(37,99,235,0.7),0 0 40px rgba(37,99,235,0.3);--glass:rgba(37,99,235,0.08)}\n[data-theme=\"neon\"]{--bg-primary:#000f00;--bg-secondary:#001500;--accent:#16a34a;--accent2:#4ade80;--neon:#00ff41;--gradient:linear-gradient(135deg,#14532d,#16a34a);--gradient-btn:linear-gradient(135deg,#15803d,#22c55e,#4ade80);--border:rgba(0,255,65,0.3);--neon-glow:0 0 20px rgba(0,255,65,0.8),0 0 60px rgba(0,255,65,0.3);--glass:rgba(0,255,65,0.05)}\n[data-theme=\"cyber\"]{--bg-primary:#060012;--bg-secondary:#0a001a;--accent:#f59e0b;--accent2:#fbbf24;--neon:#f59e0b;--gradient:linear-gradient(135deg,#78350f,#f59e0b);--gradient-btn:linear-gradient(135deg,#92400e,#f59e0b,#fde68a);--border:rgba(245,158,11,0.4);--neon-glow:0 0 20px rgba(245,158,11,0.7),0 0 40px rgba(245,158,11,0.3);--glass:rgba(245,158,11,0.08)}\n\n\/* ===== RESET & BASE ===== *\/\n*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}\nhtml{scroll-behavior:smooth;font-size:16px}\nbody, .gng-app{font-family:var(--font);background:var(--bg-primary);color:var(--text-primary);min-height:100vh;overflow-x:hidden;line-height:1.6;position:relative;width:100%}\nbutton{cursor:pointer;border:none;outline:none;font-family:inherit}\ninput,select{font-family:inherit;outline:none;border:none}\nul{list-style:none}\na{text-decoration:none;color:inherit}\n\n\/* ===== SCROLLBAR ===== *\/\n::-webkit-scrollbar{width:6px}\n::-webkit-scrollbar-track{background:var(--bg-secondary)}\n::-webkit-scrollbar-thumb{background:var(--accent);border-radius:3px}\n\n\/* ===== PARTICLES BG ===== *\/\n#particles-canvas{position:fixed;top:0;left:0;width:100%;height:100%;z-index:0;pointer-events:none;opacity:0.35}\n\n\/* ===== LAYOUT ===== *\/\n.container{max-width:1280px;margin:0 auto;padding:0 20px;position:relative;z-index:1}\n\n\/* ===== HEADER ===== *\/\nheader{position:relative;z-index:10;padding:18px 0;border-bottom:1px solid var(--border);backdrop-filter:blur(20px);background:rgba(10,10,15,0.8)}\n.header-inner{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px}\n.logo{display:flex;align-items:center;gap:12px}\n.logo-icon{width:46px;height:46px;background:var(--gradient);border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:22px;box-shadow:var(--neon-glow);animation:float 3s ease-in-out infinite}\n.logo-text{font-size:1.4rem;font-weight:900;background:var(--gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}\n.logo-sub{font-size:.68rem;color:var(--text-secondary);letter-spacing:2px;text-transform:uppercase}\n.header-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}\n.theme-select{background:var(--bg-card);border:1px solid var(--border);color:var(--text-primary);padding:8px 14px;border-radius:var(--radius-sm);font-size:.8rem;cursor:pointer;backdrop-filter:blur(10px);transition:var(--transition)}\n.theme-select:hover{border-color:var(--accent)}\n.kb-hint{font-size:.7rem;color:var(--text-muted);background:var(--bg-card);padding:5px 12px;border-radius:20px;border:1px solid var(--border)}\n\n\/* ===== HERO ===== *\/\n.hero{text-align:center;padding:56px 0 36px}\n.hero-badge{display:inline-flex;align-items:center;gap:6px;background:var(--glass);border:1px solid var(--border);padding:7px 18px;border-radius:20px;font-size:.78rem;color:var(--accent2);margin-bottom:22px;animation:pulse-badge 2.5s ease-in-out infinite}\n@keyframes pulse-badge{0%,100%{box-shadow:none}50%{box-shadow:var(--neon-glow)}}\n.hero h1{font-size:clamp(2rem,6vw,4rem);font-weight:900;line-height:1.1;margin-bottom:16px;letter-spacing:-1px}\n.hero h1 span{background:var(--gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}\n.hero-sub{font-size:clamp(.9rem,2vw,1.1rem);color:var(--text-secondary);max-width:620px;margin:0 auto 36px}\n.typing-text{color:var(--accent2);border-right:2px solid var(--accent2);padding-right:3px;animation:blink 0.75s infinite}\n@keyframes blink{0%,100%{border-color:transparent}50%{border-color:var(--accent2)}}\n\n\/* ===== COUNTER BAR ===== *\/\n.counter-bar{display:flex;justify-content:center;gap:32px;flex-wrap:wrap;padding:22px 32px;background:var(--bg-card);border-radius:var(--radius);border:1px solid var(--border);margin-bottom:32px;backdrop-filter:blur(16px);box-shadow:var(--shadow)}\n.counter-item{text-align:center}\n.counter-num{font-size:1.9rem;font-weight:900;background:var(--gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;line-height:1}\n.counter-label{font-size:.7rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:1.5px;margin-top:4px}\n\n\/* ===== INPUT SECTION ===== *\/\n.input-section{background:var(--bg-card);backdrop-filter:blur(24px);border:1px solid var(--border);border-radius:var(--radius);padding:28px;margin-bottom:24px;box-shadow:var(--shadow)}\n.input-row{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end}\n.input-wrap{flex:1;min-width:180px;display:flex;flex-direction:column;gap:8px}\n.input-label{font-size:.76rem;color:var(--text-secondary);text-transform:uppercase;letter-spacing:1px;font-weight:600}\n.name-input{background:rgba(255,255,255,0.06);border:1.5px solid var(--border);color:var(--text-primary);padding:14px 18px;border-radius:var(--radius-sm);font-size:1.05rem;transition:var(--transition);width:100%}\n.name-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(124,58,237,0.12)}\n.name-input::placeholder{color:var(--text-muted)}\n.nick-select{width:100%;background:rgba(255,255,255,0.06);border:1.5px solid var(--border);color:var(--text-primary);padding:14px 18px;border-radius:var(--radius-sm);font-size:.95rem;cursor:pointer;transition:var(--transition)}\n.nick-select:focus{border-color:var(--accent)}\n.btn-wrap{flex:0;display:flex;flex-direction:column;gap:8px}\n.generate-btn{background:var(--gradient-btn);color:#fff;padding:14px 32px;border-radius:var(--radius-sm);font-size:1rem;font-weight:700;letter-spacing:.5px;transition:var(--transition);position:relative;overflow:hidden;white-space:nowrap;box-shadow:var(--neon-glow)}\n.generate-btn:hover{transform:translateY(-2px);box-shadow:var(--neon-glow),0 12px 28px rgba(0,0,0,0.4)}\n.generate-btn:active{transform:translateY(0)}\n.ripple{position:absolute;border-radius:50%;background:rgba(255,255,255,0.3);transform:scale(0);animation:ripple-anim 0.6s linear;pointer-events:none}\n@keyframes ripple-anim{to{transform:scale(4);opacity:0}}\n.lucky-btn{background:transparent;border:1.5px solid var(--accent);color:var(--accent2);padding:14px 24px;border-radius:var(--radius-sm);font-size:.95rem;font-weight:600;transition:var(--transition);white-space:nowrap}\n.lucky-btn:hover{background:var(--glass);box-shadow:var(--neon-glow);transform:translateY(-2px)}\n\n\/* ===== FILTER BAR ===== *\/\n.filter-bar{margin-bottom:20px}\n.filter-label{font-size:.74rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:1px;margin-bottom:10px;font-weight:600}\n.chips{display:flex;gap:7px;flex-wrap:wrap}\n.chip{padding:6px 14px;border-radius:20px;font-size:.78rem;font-weight:600;border:1px solid var(--border);background:var(--bg-card);color:var(--text-secondary);cursor:pointer;transition:var(--transition)}\n.chip:hover,.chip.active{background:var(--gradient-btn);color:#fff;border-color:transparent;box-shadow:0 0 12px rgba(124,58,237,0.4)}\n\n\/* ===== SEARCH ===== *\/\n.search-bar{position:relative;margin-bottom:20px}\n.search-icon{position:absolute;left:16px;top:50%;transform:translateY(-50%);color:var(--text-muted);pointer-events:none}\n.search-input{width:100%;background:var(--bg-card);border:1.5px solid var(--border);color:var(--text-primary);padding:12px 18px 12px 44px;border-radius:var(--radius-sm);font-size:.95rem;transition:var(--transition);backdrop-filter:blur(10px)}\n.search-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(124,58,237,0.1)}\n\n\/* ===== TOOLBAR ===== *\/\n.toolbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:20px;justify-content:space-between}\n.toolbar-left,.toolbar-right{display:flex;gap:8px;flex-wrap:wrap;align-items:center}\n.tool-btn{background:var(--bg-card);border:1px solid var(--border);color:var(--text-secondary);padding:8px 16px;border-radius:var(--radius-sm);font-size:.78rem;font-weight:600;transition:var(--transition);display:flex;align-items:center;gap:5px;white-space:nowrap}\n.tool-btn:hover{border-color:var(--accent);color:var(--accent2);background:var(--glass)}\n.results-count{font-size:.82rem;color:var(--text-muted)}\n\n\/* ===== PROGRESS ===== *\/\n.progress-bar{height:3px;background:rgba(255,255,255,0.06);border-radius:2px;margin-bottom:20px;overflow:hidden}\n.progress-fill{height:100%;background:var(--gradient);border-radius:2px;transition:width 0.5s ease;width:0%}\n\n\/* ===== TABS ===== *\/\n.tabs{display:flex;gap:3px;background:var(--bg-card);border-radius:var(--radius-sm);padding:4px;margin-bottom:24px;border:1px solid var(--border);overflow-x:auto}\n.tab{flex:1;padding:9px 14px;border-radius:6px;font-size:.8rem;font-weight:700;color:var(--text-muted);transition:var(--transition);text-align:center;cursor:pointer;background:transparent;border:none;white-space:nowrap;min-width:80px}\n.tab.active{background:var(--gradient-btn);color:#fff;box-shadow:var(--neon-glow)}\n\n\/* ===== NAMES GRID ===== *\/\n.names-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:12px;margin-bottom:32px}\n.name-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:16px 18px;display:flex;align-items:center;justify-content:space-between;gap:10px;transition:var(--transition);backdrop-filter:blur(10px);animation:card-in 0.35s ease forwards;opacity:0;position:relative;overflow:hidden;cursor:pointer;user-select:none}\n.name-card::before{content:'';position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,0.04),transparent);transition:0.6s}\n.name-card:hover::before{left:100%}\n.name-card:hover{border-color:var(--border-hover);transform:translateY(-3px);box-shadow:var(--neon-glow),var(--shadow);background:var(--bg-card-hover)}\n.name-card:active{transform:scale(0.98)}\n@keyframes card-in{from{opacity:0;transform:translateY(18px) scale(0.97)}to{opacity:1;transform:translateY(0) scale(1)}}\n.name-text{font-size:1rem;font-weight:600;word-break:break-all;flex:1;line-height:1.5;cursor:pointer}\n.card-actions{display:flex;gap:5px;flex-shrink:0}\n.card-btn{width:34px;height:34px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:.85rem;transition:var(--transition);background:rgba(255,255,255,0.05);border:1px solid var(--border);color:var(--text-secondary)}\n.card-btn:hover{background:var(--gradient-btn);color:#fff;border-color:transparent;transform:scale(1.12)}\n.card-btn.fav-active{background:linear-gradient(135deg,#f59e0b,#ef4444);color:#fff;border-color:transparent}\n.card-tag{position:absolute;top:8px;right:8px;font-size:.58rem;padding:2px 8px;border-radius:10px;background:var(--gradient);color:#fff;font-weight:800;letter-spacing:.8px;text-transform:uppercase}\n\n\/* ===== EMPTY STATE ===== *\/\n.empty-state{text-align:center;padding:56px 20px;color:var(--text-muted);grid-column:1\/-1}\n.empty-icon{font-size:3.5rem;margin-bottom:16px;opacity:0.5;animation:float 3s ease-in-out infinite}\n.empty-state h3{font-size:1.2rem;margin-bottom:8px;color:var(--text-secondary);font-weight:700}\n\n\/* ===== LOADING ===== *\/\n.loading-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.75);z-index:9000;align-items:center;justify-content:center;backdrop-filter:blur(8px)}\n.loading-overlay.show{display:flex}\n.loader{width:58px;height:58px;border-radius:50%;border:3px solid var(--border);border-top-color:var(--accent);animation:spin 0.75s linear infinite}\n@keyframes spin{to{transform:rotate(360deg)}}\n\n\/* ===== TOAST ===== *\/\n.toast-container{position:fixed;bottom:24px;right:24px;z-index:9999;display:flex;flex-direction:column;gap:10px;pointer-events:none}\n.toast{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px 20px;font-size:.85rem;font-weight:600;display:flex;align-items:center;gap:10px;min-width:220px;box-shadow:var(--shadow);animation:slide-up 0.3s ease;backdrop-filter:blur(20px);pointer-events:all}\n@keyframes slide-up{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}\n.toast.success{border-color:#22c55e;color:#4ade80}\n.toast.error{border-color:#ef4444;color:#f87171}\n.toast.info{border-color:var(--accent);color:var(--accent2)}\n\n\/* ===== SYMBOL PALETTE ===== *\/\n.symbol-section{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:20px;margin-bottom:20px;backdrop-filter:blur(10px)}\n.symbol-section h3{font-size:.82rem;color:var(--text-secondary);margin-bottom:14px;text-transform:uppercase;letter-spacing:1px;font-weight:700}\n.symbol-grid{display:flex;flex-wrap:wrap;gap:7px}\n.sym-btn{width:38px;height:38px;background:var(--bg-card);border:1px solid var(--border);border-radius:8px;font-size:1rem;color:var(--text-primary);transition:var(--transition);display:flex;align-items:center;justify-content:center;cursor:pointer}\n.sym-btn:hover{background:var(--gradient-btn);border-color:transparent;transform:scale(1.2);box-shadow:var(--neon-glow)}\n\n\/* ===== FONT GRID ===== *\/\n.font-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}\n.font-item{background:var(--bg-card);border:1px solid var(--border);border-radius:10px;padding:14px;cursor:pointer;transition:var(--transition)}\n.font-item:hover{border-color:var(--accent);background:var(--glass);transform:translateY(-2px)}\n.font-name{font-size:.68rem;color:var(--text-muted);margin-bottom:6px;text-transform:uppercase;letter-spacing:.5px;font-weight:600}\n.font-sample{font-size:1rem;color:var(--text-primary);word-break:break-all;line-height:1.5}\n\n\/* ===== HISTORY \/ FAVS ===== *\/\n.history-chips{display:flex;flex-wrap:wrap;gap:8px}\n.hist-chip{padding:6px 14px;background:var(--glass);border:1px solid var(--border);border-radius:14px;font-size:.8rem;color:var(--accent2);cursor:pointer;transition:var(--transition);font-weight:600}\n.hist-chip:hover{background:var(--gradient-btn);color:#fff;border-color:transparent}\n\n\/* ===== SECTION HEADER ===== *\/\n.section-header{display:flex;align-items:center;gap:12px;margin-bottom:20px}\n.section-header h2{font-size:1.1rem;font-weight:800;background:var(--gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;white-space:nowrap}\n.section-line{flex:1;height:1px;background:var(--border)}\n\n\/* ===== FOOTER ===== *\/\nfooter{border-top:1px solid var(--border);padding:28px 0;text-align:center;color:var(--text-muted);font-size:.82rem;margin-top:40px}\nfooter .accent{color:var(--accent2)}\n\n\/* ===== ANIMATIONS ===== *\/\n@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}\n\n\/* ===== KBD ===== *\/\nkbd{background:var(--bg-card);border:1px solid var(--border);border-radius:4px;padding:2px 7px;font-size:.7rem;color:var(--text-muted)}\n\n\/* ===== RESPONSIVE ===== *\/\n\n\/* --- Tablet landscape (\u2264900px) --- *\/\n@media(max-width:900px){\n  .names-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}\n  .font-grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}\n  .counter-bar{gap:22px;padding:18px 24px}\n}\n\n\/* --- Tablet portrait \/ large phone (\u2264680px) --- *\/\n@media(max-width:680px){\n  \/* Layout *\/\n  .container{padding:0 14px}\n\n  \/* Header *\/\n  header{padding:14px 0;position:sticky;top:0;z-index:100}\n  .header-inner{justify-content:space-between;gap:8px}\n  .logo-text{font-size:1.1rem}\n  .logo-sub{display:none}\n  .logo-icon{width:38px;height:38px;font-size:18px}\n  .theme-select{padding:7px 10px;font-size:.75rem}\n  .kb-hint{display:none}\n\n  \/* Hero *\/\n  .hero{padding:28px 0 18px}\n  .hero h1{font-size:1.75rem;letter-spacing:-0.5px}\n  .hero-sub{font-size:.88rem;margin-bottom:24px}\n  .hero-badge{font-size:.72rem;padding:5px 14px}\n\n  \/* Counter bar *\/\n  .counter-bar{gap:14px;padding:14px 16px;margin-bottom:20px}\n  .counter-num{font-size:1.35rem}\n  .counter-label{font-size:.62rem;letter-spacing:1px}\n\n  \/* Input section *\/\n  .input-section{padding:18px 14px;margin-bottom:16px}\n  .input-row{flex-direction:column;gap:10px}\n  .input-wrap{min-width:100%}\n  .btn-wrap{flex-direction:row;gap:8px}\n  .generate-btn{flex:1;padding:13px 16px;font-size:.92rem}\n  .lucky-btn{flex:1;padding:13px 16px;font-size:.92rem}\n\n  \/* Tabs *\/\n  .tabs{padding:3px;gap:2px;margin-bottom:16px}\n  .tab{padding:8px 10px;font-size:.72rem;min-width:60px}\n\n  \/* Filters *\/\n  .filter-bar{margin-bottom:14px}\n  .chip{padding:5px 11px;font-size:.72rem}\n\n  \/* Search *\/\n  .search-input{font-size:.88rem;padding:11px 16px 11px 40px}\n\n  \/* Toolbar *\/\n  .toolbar{flex-direction:column;align-items:stretch;gap:8px;margin-bottom:14px}\n  .toolbar-left{justify-content:center}\n  .toolbar-right{justify-content:center;flex-wrap:wrap;gap:6px}\n  .tool-btn{padding:7px 12px;font-size:.72rem}\n  .results-count{text-align:center;font-size:.78rem}\n\n  \/* Names grid *\/\n  .names-grid{grid-template-columns:1fr;gap:10px;margin-bottom:20px}\n  .name-card{padding:14px 14px}\n  .name-text{font-size:.95rem}\n  .card-btn{width:36px;height:36px;font-size:.85rem}\n\n  \/* Font grid *\/\n  .font-grid{grid-template-columns:1fr 1fr}\n\n  \/* Symbol grid *\/\n  .sym-btn{width:36px;height:36px;font-size:.9rem}\n\n  \/* Section headers *\/\n  .section-header h2{font-size:.95rem}\n\n  \/* Toast *\/\n  .toast-container{left:10px;right:10px;bottom:10px}\n  .toast{min-width:auto;font-size:.8rem;padding:10px 14px}\n\n  \/* Footer *\/\n  footer{padding:20px 0;font-size:.75rem}\n}\n\n\/* --- Large phone (\u2264480px) --- *\/\n@media(max-width:480px){\n  .hero h1{font-size:1.5rem}\n  .hero-badge{font-size:.68rem}\n  .counter-bar{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:14px}\n  .counter-num{font-size:1.25rem}\n  .input-section{padding:14px 12px}\n  .generate-btn,.lucky-btn{font-size:.85rem;padding:13px 12px}\n  .names-grid{gap:8px}\n  .name-card{padding:12px 12px}\n  .name-text{font-size:.9rem}\n  .tabs{border-radius:8px}\n  .tab{padding:7px 8px;font-size:.68rem;min-width:52px}\n  .chips{gap:5px}\n  .chip{padding:5px 10px;font-size:.7rem}\n  .font-grid{grid-template-columns:1fr}\n  .symbol-section{padding:14px}\n  .sym-btn{width:34px;height:34px;font-size:.85rem}\n  .history-chips{gap:6px}\n  .hist-chip{padding:5px 11px;font-size:.75rem}\n}\n\n\/* --- Small phone (\u2264380px) --- *\/\n@media(max-width:380px){\n  .container{padding:0 10px}\n  .logo-text{font-size:1rem}\n  .logo-icon{width:34px;height:34px;font-size:16px;border-radius:9px}\n  .header-inner{gap:6px}\n  .hero h1{font-size:1.3rem}\n  .hero-sub{font-size:.82rem}\n  .counter-bar{grid-template-columns:1fr 1fr;gap:10px;padding:12px}\n  .counter-num{font-size:1.1rem}\n  .input-section{padding:12px 10px}\n  .name-input,.nick-select{padding:12px 14px;font-size:.9rem}\n  .generate-btn,.lucky-btn{padding:12px 10px;font-size:.8rem}\n  .tab{padding:7px 6px;font-size:.65rem;min-width:46px}\n  .chip{padding:4px 9px;font-size:.68rem}\n  .name-card{padding:11px 10px;gap:8px}\n  .name-text{font-size:.85rem}\n  .card-btn{width:32px;height:32px;font-size:.78rem}\n  .card-tag{font-size:.52rem;padding:2px 5px}\n  .tool-btn{padding:6px 10px;font-size:.68rem}\n  .toast{font-size:.75rem;padding:9px 12px}\n}\n<\/style>\n\n\n\n<style>\n\/* ===== CSS VARIABLES & THEMES ===== *\/\n:root {\n  --bg-primary: #0a0a0f;\n  --bg-secondary: #0f0f1a;\n  --bg-card: rgba(255,255,255,0.04);\n  --bg-card-hover: rgba(255,255,255,0.08);\n  --accent: #7c3aed;\n  --accent2: #a855f7;\n  --accent3: #06b6d4;\n  --neon: #7c3aed;\n  --neon-glow: 0 0 20px rgba(124,58,237,0.6), 0 0 40px rgba(124,58,237,0.3);\n  --text-primary: #f1f5f9;\n  --text-secondary: #94a3b8;\n  --text-muted: #475569;\n  --border: rgba(124,58,237,0.3);\n  --border-hover: rgba(124,58,237,0.7);\n  --glass: rgba(124,58,237,0.08);\n  --shadow: 0 8px 32px rgba(0,0,0,0.5);\n  --radius: 16px;\n  --radius-sm: 8px;\n  --gradient: linear-gradient(135deg, #7c3aed, #06b6d4);\n  --gradient-btn: linear-gradient(135deg, #7c3aed 0%, #a855f7 50%, #06b6d4 100%);\n  --font: 'Segoe UI', system-ui, -apple-system, sans-serif;\n  --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n[data-theme=\"dark\"]{--bg-primary:#080808;--bg-secondary:#111;--accent:#888;--accent2:#aaa;--neon:#888;--gradient:linear-gradient(135deg,#444,#888);--gradient-btn:linear-gradient(135deg,#333,#666,#999);--border:rgba(200,200,200,0.2);--neon-glow:0 0 20px rgba(150,150,150,0.4);--glass:rgba(200,200,200,0.05)}\n[data-theme=\"black\"]{--bg-primary:#000;--bg-secondary:#050505;--accent:#e0e0e0;--accent2:#fff;--neon:#fff;--gradient:linear-gradient(135deg,#222,#fff);--gradient-btn:linear-gradient(135deg,#111,#444,#eee);--border:rgba(255,255,255,0.2);--neon-glow:0 0 20px rgba(255,255,255,0.3);--glass:rgba(255,255,255,0.04)}\n[data-theme=\"purple\"]{--bg-primary:#0d0014;--bg-secondary:#120019;--accent:#c026d3;--accent2:#e879f9;--neon:#c026d3;--gradient:linear-gradient(135deg,#7e22ce,#c026d3);--gradient-btn:linear-gradient(135deg,#6b21a8,#c026d3,#e879f9);--border:rgba(192,38,211,0.4);--neon-glow:0 0 20px rgba(192,38,211,0.7),0 0 40px rgba(192,38,211,0.3);--glass:rgba(192,38,211,0.08)}\n[data-theme=\"red\"]{--bg-primary:#0f0000;--bg-secondary:#150000;--accent:#dc2626;--accent2:#ef4444;--neon:#dc2626;--gradient:linear-gradient(135deg,#7f1d1d,#dc2626);--gradient-btn:linear-gradient(135deg,#991b1b,#dc2626,#f87171);--border:rgba(220,38,38,0.4);--neon-glow:0 0 20px rgba(220,38,38,0.7),0 0 40px rgba(220,38,38,0.3);--glass:rgba(220,38,38,0.08)}\n[data-theme=\"blue\"]{--bg-primary:#00050f;--bg-secondary:#000815;--accent:#2563eb;--accent2:#3b82f6;--neon:#2563eb;--gradient:linear-gradient(135deg,#1e3a8a,#2563eb);--gradient-btn:linear-gradient(135deg,#1e40af,#2563eb,#60a5fa);--border:rgba(37,99,235,0.4);--neon-glow:0 0 20px rgba(37,99,235,0.7),0 0 40px rgba(37,99,235,0.3);--glass:rgba(37,99,235,0.08)}\n[data-theme=\"neon\"]{--bg-primary:#000f00;--bg-secondary:#001500;--accent:#16a34a;--accent2:#4ade80;--neon:#00ff41;--gradient:linear-gradient(135deg,#14532d,#16a34a);--gradient-btn:linear-gradient(135deg,#15803d,#22c55e,#4ade80);--border:rgba(0,255,65,0.3);--neon-glow:0 0 20px rgba(0,255,65,0.8),0 0 60px rgba(0,255,65,0.3);--glass:rgba(0,255,65,0.05)}\n[data-theme=\"cyber\"]{--bg-primary:#060012;--bg-secondary:#0a001a;--accent:#f59e0b;--accent2:#fbbf24;--neon:#f59e0b;--gradient:linear-gradient(135deg,#78350f,#f59e0b);--gradient-btn:linear-gradient(135deg,#92400e,#f59e0b,#fde68a);--border:rgba(245,158,11,0.4);--neon-glow:0 0 20px rgba(245,158,11,0.7),0 0 40px rgba(245,158,11,0.3);--glass:rgba(245,158,11,0.08)}\n\/* ===== RESET & BASE ===== *\/\n*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}\nhtml{scroll-behavior:smooth;font-size:16px}\nbody, .gng-app{font-family:var(--font);background:var(--bg-primary);color:var(--text-primary);min-height:100vh;overflow-x:hidden;line-height:1.6;position:relative;width:100%}\nbutton{cursor:pointer;border:none;outline:none;font-family:inherit}\ninput,select{font-family:inherit;outline:none;border:none}\nul{list-style:none}\na{text-decoration:none;color:inherit}\n\/* ===== SCROLLBAR ===== *\/\n::-webkit-scrollbar{width:6px}\n::-webkit-scrollbar-track{background:var(--bg-secondary)}\n::-webkit-scrollbar-thumb{background:var(--accent);border-radius:3px}\n\/* ===== PARTICLES BG ===== *\/\n#particles-canvas{position:fixed;top:0;left:0;width:100%;height:100%;z-index:0;pointer-events:none;opacity:0.35}\n\/* ===== LAYOUT ===== *\/\n.container{max-width:1280px;margin:0 auto;padding:0 20px;position:relative;z-index:1}\n\/* ===== HEADER ===== *\/\nheader{position:relative;z-index:10;padding:18px 0;border-bottom:1px solid var(--border);backdrop-filter:blur(20px);background:rgba(10,10,15,0.8)}\n.header-inner{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px}\n.logo{display:flex;align-items:center;gap:12px}\n.logo-icon{width:46px;height:46px;background:var(--gradient);border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:22px;box-shadow:var(--neon-glow);animation:float 3s ease-in-out infinite}\n.logo-text{font-size:1.4rem;font-weight:900;background:var(--gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}\n.logo-sub{font-size:.68rem;color:var(--text-secondary);letter-spacing:2px;text-transform:uppercase}\n.header-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}\n.theme-select{background:var(--bg-card);border:1px solid var(--border);color:var(--text-primary);padding:8px 14px;border-radius:var(--radius-sm);font-size:.8rem;cursor:pointer;backdrop-filter:blur(10px);transition:var(--transition)}\n.theme-select:hover{border-color:var(--accent)}\n.kb-hint{font-size:.7rem;color:var(--text-muted);background:var(--bg-card);padding:5px 12px;border-radius:20px;border:1px solid var(--border)}\n\/* ===== HERO ===== *\/\n.hero{text-align:center;padding:56px 0 36px}\n.hero-badge{display:inline-flex;align-items:center;gap:6px;background:var(--glass);border:1px solid var(--border);padding:7px 18px;border-radius:20px;font-size:.78rem;color:var(--accent2);margin-bottom:22px;animation:pulse-badge 2.5s ease-in-out infinite}\n@keyframes pulse-badge{0%,100%{box-shadow:none}50%{box-shadow:var(--neon-glow)}}\n.hero h1{font-size:clamp(2rem,6vw,4rem);font-weight:900;line-height:1.1;margin-bottom:16px;letter-spacing:-1px}\n.hero h1 span{background:var(--gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}\n.hero-sub{font-size:clamp(.9rem,2vw,1.1rem);color:var(--text-secondary);max-width:620px;margin:0 auto 36px}\n.typing-text{color:var(--accent2);border-right:2px solid var(--accent2);padding-right:3px;animation:blink 0.75s infinite}\n@keyframes blink{0%,100%{border-color:transparent}50%{border-color:var(--accent2)}}\n\/* ===== COUNTER BAR ===== *\/\n.counter-bar{display:flex;justify-content:center;gap:32px;flex-wrap:wrap;padding:22px 32px;background:var(--bg-card);border-radius:var(--radius);border:1px solid var(--border);margin-bottom:32px;backdrop-filter:blur(16px);box-shadow:var(--shadow)}\n.counter-item{text-align:center}\n.counter-num{font-size:1.9rem;font-weight:900;background:var(--gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;line-height:1}\n.counter-label{font-size:.7rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:1.5px;margin-top:4px}\n\/* ===== INPUT SECTION ===== *\/\n.input-section{background:var(--bg-card);backdrop-filter:blur(24px);border:1px solid var(--border);border-radius:var(--radius);padding:28px;margin-bottom:24px;box-shadow:var(--shadow)}\n.input-row{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end}\n.input-wrap{flex:1;min-width:180px;display:flex;flex-direction:column;gap:8px}\n.input-label{font-size:.76rem;color:var(--text-secondary);text-transform:uppercase;letter-spacing:1px;font-weight:600}\n.name-input{background:rgba(255,255,255,0.06);border:1.5px solid var(--border);color:var(--text-primary);padding:14px 18px;border-radius:var(--radius-sm);font-size:1.05rem;transition:var(--transition);width:100%}\n.name-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(124,58,237,0.12)}\n.name-input::placeholder{color:var(--text-muted)}\n.nick-select{width:100%;background:rgba(255,255,255,0.06);border:1.5px solid var(--border);color:var(--text-primary);padding:14px 18px;border-radius:var(--radius-sm);font-size:.95rem;cursor:pointer;transition:var(--transition)}\n.nick-select:focus{border-color:var(--accent)}\n.btn-wrap{flex:0;display:flex;flex-direction:column;gap:8px}\n.generate-btn{background:var(--gradient-btn);color:#fff;padding:14px 32px;border-radius:var(--radius-sm);font-size:1rem;font-weight:700;letter-spacing:.5px;transition:var(--transition);position:relative;overflow:hidden;white-space:nowrap;box-shadow:var(--neon-glow)}\n.generate-btn:hover{transform:translateY(-2px);box-shadow:var(--neon-glow),0 12px 28px rgba(0,0,0,0.4)}\n.generate-btn:active{transform:translateY(0)}\n.ripple{position:absolute;border-radius:50%;background:rgba(255,255,255,0.3);transform:scale(0);animation:ripple-anim 0.6s linear;pointer-events:none}\n@keyframes ripple-anim{to{transform:scale(4);opacity:0}}\n.lucky-btn{background:transparent;border:1.5px solid var(--accent);color:var(--accent2);padding:14px 24px;border-radius:var(--radius-sm);font-size:.95rem;font-weight:600;transition:var(--transition);white-space:nowrap}\n.lucky-btn:hover{background:var(--glass);box-shadow:var(--neon-glow);transform:translateY(-2px)}\n\/* ===== FILTER BAR ===== *\/\n.filter-bar{margin-bottom:20px}\n.filter-label{font-size:.74rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:1px;margin-bottom:10px;font-weight:600}\n.chips{display:flex;gap:7px;flex-wrap:wrap}\n.chip{padding:6px 14px;border-radius:20px;font-size:.78rem;font-weight:600;border:1px solid var(--border);background:var(--bg-card);color:var(--text-secondary);cursor:pointer;transition:var(--transition)}\n.chip:hover,.chip.active{background:var(--gradient-btn);color:#fff;border-color:transparent;box-shadow:0 0 12px rgba(124,58,237,0.4)}\n\/* ===== SEARCH ===== *\/\n.search-bar{position:relative;margin-bottom:20px}\n.search-icon{position:absolute;left:16px;top:50%;transform:translateY(-50%);color:var(--text-muted);pointer-events:none}\n.search-input{width:100%;background:var(--bg-card);border:1.5px solid var(--border);color:var(--text-primary);padding:12px 18px 12px 44px;border-radius:var(--radius-sm);font-size:.95rem;transition:var(--transition);backdrop-filter:blur(10px)}\n.search-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(124,58,237,0.1)}\n\/* ===== TOOLBAR ===== *\/\n.toolbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:20px;justify-content:space-between}\n.toolbar-left,.toolbar-right{display:flex;gap:8px;flex-wrap:wrap;align-items:center}\n.tool-btn{background:var(--bg-card);border:1px solid var(--border);color:var(--text-secondary);padding:8px 16px;border-radius:var(--radius-sm);font-size:.78rem;font-weight:600;transition:var(--transition);display:flex;align-items:center;gap:5px;white-space:nowrap}\n.tool-btn:hover{border-color:var(--accent);color:var(--accent2);background:var(--glass)}\n.results-count{font-size:.82rem;color:var(--text-muted)}\n\/* ===== PROGRESS ===== *\/\n.progress-bar{height:3px;background:rgba(255,255,255,0.06);border-radius:2px;margin-bottom:20px;overflow:hidden}\n.progress-fill{height:100%;background:var(--gradient);border-radius:2px;transition:width 0.5s ease;width:0%}\n\/* ===== TABS ===== *\/\n.tabs{display:flex;gap:3px;background:var(--bg-card);border-radius:var(--radius-sm);padding:4px;margin-bottom:24px;border:1px solid var(--border);overflow-x:auto}\n.tab{flex:1;padding:9px 14px;border-radius:6px;font-size:.8rem;font-weight:700;color:var(--text-muted);transition:var(--transition);text-align:center;cursor:pointer;background:transparent;border:none;white-space:nowrap;min-width:80px}\n.tab.active{background:var(--gradient-btn);color:#fff;box-shadow:var(--neon-glow)}\n\/* ===== NAMES GRID ===== *\/\n.names-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:12px;margin-bottom:32px}\n.name-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:16px 18px;display:flex;align-items:center;justify-content:space-between;gap:10px;transition:var(--transition);backdrop-filter:blur(10px);animation:card-in 0.35s ease forwards;opacity:0;position:relative;overflow:hidden;cursor:pointer;user-select:none}\n.name-card::before{content:'';position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,0.04),transparent);transition:0.6s}\n.name-card:hover::before{left:100%}\n.name-card:hover{border-color:var(--border-hover);transform:translateY(-3px);box-shadow:var(--neon-glow),var(--shadow);background:var(--bg-card-hover)}\n.name-card:active{transform:scale(0.98)}\n@keyframes card-in{from{opacity:0;transform:translateY(18px) scale(0.97)}to{opacity:1;transform:translateY(0) scale(1)}}\n.name-text{font-size:1rem;font-weight:600;word-break:break-all;flex:1;line-height:1.5;cursor:pointer}\n.card-actions{display:flex;gap:5px;flex-shrink:0}\n.card-btn{width:34px;height:34px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:.85rem;transition:var(--transition);background:rgba(255,255,255,0.05);border:1px solid var(--border);color:var(--text-secondary)}\n.card-btn:hover{background:var(--gradient-btn);color:#fff;border-color:transparent;transform:scale(1.12)}\n.card-btn.fav-active{background:linear-gradient(135deg,#f59e0b,#ef4444);color:#fff;border-color:transparent}\n.card-tag{position:absolute;top:8px;right:8px;font-size:.58rem;padding:2px 8px;border-radius:10px;background:var(--gradient);color:#fff;font-weight:800;letter-spacing:.8px;text-transform:uppercase}\n\/* ===== EMPTY STATE ===== *\/\n.empty-state{text-align:center;padding:56px 20px;color:var(--text-muted);grid-column:1\/-1}\n.empty-icon{font-size:3.5rem;margin-bottom:16px;opacity:0.5;animation:float 3s ease-in-out infinite}\n.empty-state h3{font-size:1.2rem;margin-bottom:8px;color:var(--text-secondary);font-weight:700}\n\/* ===== LOADING ===== *\/\n.loading-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.75);z-index:9000;align-items:center;justify-content:center;backdrop-filter:blur(8px)}\n.loading-overlay.show{display:flex}\n.loader{width:58px;height:58px;border-radius:50%;border:3px solid var(--border);border-top-color:var(--accent);animation:spin 0.75s linear infinite}\n@keyframes spin{to{transform:rotate(360deg)}}\n\/* ===== TOAST ===== *\/\n.toast-container{position:fixed;bottom:24px;right:24px;z-index:9999;display:flex;flex-direction:column;gap:10px;pointer-events:none}\n.toast{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px 20px;font-size:.85rem;font-weight:600;display:flex;align-items:center;gap:10px;min-width:220px;box-shadow:var(--shadow);animation:slide-up 0.3s ease;backdrop-filter:blur(20px);pointer-events:all}\n@keyframes slide-up{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}\n.toast.success{border-color:#22c55e;color:#4ade80}\n.toast.error{border-color:#ef4444;color:#f87171}\n.toast.info{border-color:var(--accent);color:var(--accent2)}\n\/* ===== SYMBOL PALETTE ===== *\/\n.symbol-section{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:20px;margin-bottom:20px;backdrop-filter:blur(10px)}\n.symbol-section h3{font-size:.82rem;color:var(--text-secondary);margin-bottom:14px;text-transform:uppercase;letter-spacing:1px;font-weight:700}\n.symbol-grid{display:flex;flex-wrap:wrap;gap:7px}\n.sym-btn{width:38px;height:38px;background:var(--bg-card);border:1px solid var(--border);border-radius:8px;font-size:1rem;color:var(--text-primary);transition:var(--transition);display:flex;align-items:center;justify-content:center;cursor:pointer}\n.sym-btn:hover{background:var(--gradient-btn);border-color:transparent;transform:scale(1.2);box-shadow:var(--neon-glow)}\n\/* ===== FONT GRID ===== *\/\n.font-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}\n.font-item{background:var(--bg-card);border:1px solid var(--border);border-radius:10px;padding:14px;cursor:pointer;transition:var(--transition)}\n.font-item:hover{border-color:var(--accent);background:var(--glass);transform:translateY(-2px)}\n.font-name{font-size:.68rem;color:var(--text-muted);margin-bottom:6px;text-transform:uppercase;letter-spacing:.5px;font-weight:600}\n.font-sample{font-size:1rem;color:var(--text-primary);word-break:break-all;line-height:1.5}\n\/* ===== HISTORY \/ FAVS ===== *\/\n.history-chips{display:flex;flex-wrap:wrap;gap:8px}\n.hist-chip{padding:6px 14px;background:var(--glass);border:1px solid var(--border);border-radius:14px;font-size:.8rem;color:var(--accent2);cursor:pointer;transition:var(--transition);font-weight:600}\n.hist-chip:hover{background:var(--gradient-btn);color:#fff;border-color:transparent}\n\/* ===== SECTION HEADER ===== *\/\n.section-header{display:flex;align-items:center;gap:12px;margin-bottom:20px}\n.section-header h2{font-size:1.1rem;font-weight:800;background:var(--gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;white-space:nowrap}\n.section-line{flex:1;height:1px;background:var(--border)}\n\/* ===== FOOTER ===== *\/\nfooter{border-top:1px solid var(--border);padding:28px 0;text-align:center;color:var(--text-muted);font-size:.82rem;margin-top:40px}\nfooter .accent{color:var(--accent2)}\n\/* ===== ANIMATIONS ===== *\/\n@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}\n\/* ===== KBD ===== *\/\nkbd{background:var(--bg-card);border:1px solid var(--border);border-radius:4px;padding:2px 7px;font-size:.7rem;color:var(--text-muted)}\n\/* ===== RESPONSIVE ===== *\/\n\/* --- Tablet landscape (\u2264900px) --- *\/\n@media(max-width:900px){\n  .names-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}\n  .font-grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}\n  .counter-bar{gap:22px;padding:18px 24px}\n}\n\/* --- Tablet portrait \/ large phone (\u2264680px) --- *\/\n@media(max-width:680px){\n  \/* Layout *\/\n  .container{padding:0 14px}\n  \/* Header *\/\n  header{padding:14px 0;position:sticky;top:0;z-index:100}\n  .header-inner{justify-content:space-between;gap:8px}\n  .logo-text{font-size:1.1rem}\n  .logo-sub{display:none}\n  .logo-icon{width:38px;height:38px;font-size:18px}\n  .theme-select{padding:7px 10px;font-size:.75rem}\n  .kb-hint{display:none}\n  \/* Hero *\/\n  .hero{padding:28px 0 18px}\n  .hero h1{font-size:1.75rem;letter-spacing:-0.5px}\n  .hero-sub{font-size:.88rem;margin-bottom:24px}\n  .hero-badge{font-size:.72rem;padding:5px 14px}\n  \/* Counter bar *\/\n  .counter-bar{gap:14px;padding:14px 16px;margin-bottom:20px}\n  .counter-num{font-size:1.35rem}\n  .counter-label{font-size:.62rem;letter-spacing:1px}\n  \/* Input section *\/\n  .input-section{padding:18px 14px;margin-bottom:16px}\n  .input-row{flex-direction:column;gap:10px}\n  .input-wrap{min-width:100%}\n  .btn-wrap{flex-direction:row;gap:8px}\n  .generate-btn{flex:1;padding:13px 16px;font-size:.92rem}\n  .lucky-btn{flex:1;padding:13px 16px;font-size:.92rem}\n  \/* Tabs *\/\n  .tabs{padding:3px;gap:2px;margin-bottom:16px}\n  .tab{padding:8px 10px;font-size:.72rem;min-width:60px}\n  \/* Filters *\/\n  .filter-bar{margin-bottom:14px}\n  .chip{padding:5px 11px;font-size:.72rem}\n  \/* Search *\/\n  .search-input{font-size:.88rem;padding:11px 16px 11px 40px}\n  \/* Toolbar *\/\n  .toolbar{flex-direction:column;align-items:stretch;gap:8px;margin-bottom:14px}\n  .toolbar-left{justify-content:center}\n  .toolbar-right{justify-content:center;flex-wrap:wrap;gap:6px}\n  .tool-btn{padding:7px 12px;font-size:.72rem}\n  .results-count{text-align:center;font-size:.78rem}\n  \/* Names grid *\/\n  .names-grid{grid-template-columns:1fr;gap:10px;margin-bottom:20px}\n  .name-card{padding:14px 14px}\n  .name-text{font-size:.95rem}\n  .card-btn{width:36px;height:36px;font-size:.85rem}\n  \/* Font grid *\/\n  .font-grid{grid-template-columns:1fr 1fr}\n  \/* Symbol grid *\/\n  .sym-btn{width:36px;height:36px;font-size:.9rem}\n  \/* Section headers *\/\n  .section-header h2{font-size:.95rem}\n  \/* Toast *\/\n  .toast-container{left:10px;right:10px;bottom:10px}\n  .toast{min-width:auto;font-size:.8rem;padding:10px 14px}\n  \/* Footer *\/\n  footer{padding:20px 0;font-size:.75rem}\n}\n\/* --- Large phone (\u2264480px) --- *\/\n@media(max-width:480px){\n  .hero h1{font-size:1.5rem}\n  .hero-badge{font-size:.68rem}\n  .counter-bar{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:14px}\n  .counter-num{font-size:1.25rem}\n  .input-section{padding:14px 12px}\n  .generate-btn,.lucky-btn{font-size:.85rem;padding:13px 12px}\n  .names-grid{gap:8px}\n  .name-card{padding:12px 12px}\n  .name-text{font-size:.9rem}\n  .tabs{border-radius:8px}\n  .tab{padding:7px 8px;font-size:.68rem;min-width:52px}\n  .chips{gap:5px}\n  .chip{padding:5px 10px;font-size:.7rem}\n  .font-grid{grid-template-columns:1fr}\n  .symbol-section{padding:14px}\n  .sym-btn{width:34px;height:34px;font-size:.85rem}\n  .history-chips{gap:6px}\n  .hist-chip{padding:5px 11px;font-size:.75rem}\n}\n\/* --- Small phone (\u2264380px) --- *\/\n@media(max-width:380px){\n  .container{padding:0 10px}\n  .logo-text{font-size:1rem}\n  .logo-icon{width:34px;height:34px;font-size:16px;border-radius:9px}\n  .header-inner{gap:6px}\n  .hero h1{font-size:1.3rem}\n  .hero-sub{font-size:.82rem}\n  .counter-bar{grid-template-columns:1fr 1fr;gap:10px;padding:12px}\n  .counter-num{font-size:1.1rem}\n  .input-section{padding:12px 10px}\n  .name-input,.nick-select{padding:12px 14px;font-size:.9rem}\n  .generate-btn,.lucky-btn{padding:12px 10px;font-size:.8rem}\n  .tab{padding:7px 6px;font-size:.65rem;min-width:46px}\n  .chip{padding:4px 9px;font-size:.68rem}\n  .name-card{padding:11px 10px;gap:8px}\n  .name-text{font-size:.85rem}\n  .card-btn{width:32px;height:32px;font-size:.78rem}\n  .card-tag{font-size:.52rem;padding:2px 5px}\n  .tool-btn{padding:6px 10px;font-size:.68rem}\n  .toast{font-size:.75rem;padding:9px 12px}\n}\n<\/style>\n<div class=\"gng-app\">\n<canvas id=\"particles-canvas\" aria-hidden=\"true\"><\/canvas>\n<div class=\"loading-overlay\" id=\"loadingOverlay\" role=\"status\" aria-label=\"Generating names\"><div class=\"loader\"><\/div><\/div>\n<div class=\"toast-container\" id=\"toastContainer\" aria-live=\"polite\"><\/div>\n<!-- HEADER -->\n<header role=\"banner\">\n  <div class=\"container\">\n    <div class=\"header-inner\">\n      <div class=\"logo\">\n        <div class=\"logo-icon\" aria-hidden=\"true\">\u2694\ufe0f<\/div>\n        <div>\n          <div class=\"logo-text\">pikachoo.in<\/div>\n          <div class=\"logo-sub\">Stylish Name Generator<\/div>\n        <\/div>\n      <\/div>\n      <div class=\"header-actions\">\n        <select class=\"theme-select\" id=\"themeSelect\" aria-label=\"Select color theme\">\n          <option value=\"\">\ud83c\udfa8 Default (Violet)<\/option>\n          <option value=\"dark\">\u26ab Dark<\/option>\n          <option value=\"black\">\ud83d\udda4 Black<\/option>\n          <option value=\"purple\">\ud83d\udc9c Purple<\/option>\n          <option value=\"red\">\u2764\ufe0f Red<\/option>\n          <option value=\"blue\">\ud83d\udc99 Blue<\/option>\n          <option value=\"neon\">\ud83d\udc9a Neon Green<\/option>\n          <option value=\"cyber\">\ud83d\udc9b Cyberpunk<\/option>\n        <\/select>\n        <span class=\"kb-hint\"><kbd>G<\/kbd> Generate &nbsp;<kbd>L<\/kbd> Lucky &nbsp;<kbd>Ctrl+F<\/kbd> Search<\/span>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/header>\n<!-- MAIN -->\n<main role=\"main\">\n  <div class=\"container\">\n    <!-- Hero -->\n    <section class=\"hero\" aria-label=\"Introduction\">\n      <div class=\"hero-badge\">\u26a1 Premium Gaming Name Generator \u2014 100% Free<\/div>\n      <h1>Create Your <span>Legendary<\/span><br>Gaming Identity<\/h1>\n      <p class=\"hero-sub\">Generate <strong>100+ unique stylish names<\/strong> for PUBG, Free Fire, BGMI &amp; all games.<br><span class=\"typing-text\" id=\"typingText\">Symbols \u00b7 Fonts \u00b7 Themes \u00b7 One Click Copy<\/span><\/p>\n    <\/section>\n    <!-- Counter Bar -->\n    <div class=\"counter-bar\" role=\"region\" aria-label=\"Usage statistics\">\n      <div class=\"counter-item\"><div class=\"counter-num\" id=\"cntTotal\">0<\/div><div class=\"counter-label\">Names Generated<\/div><\/div>\n      <div class=\"counter-item\"><div class=\"counter-num\" id=\"cntSession\">0<\/div><div class=\"counter-label\">This Session<\/div><\/div>\n      <div class=\"counter-item\"><div class=\"counter-num\" id=\"cntFavs\">0<\/div><div class=\"counter-label\">Favourites<\/div><\/div>\n      <div class=\"counter-item\"><div class=\"counter-num\">100+<\/div><div class=\"counter-label\">Font Styles<\/div><\/div>\n      <div class=\"counter-item\"><div class=\"counter-num\">200+<\/div><div class=\"counter-label\">Symbols<\/div><\/div>\n    <\/div>\n    <!-- Input Section -->\n    <section class=\"input-section\" aria-label=\"Name generator controls\">\n      <div class=\"input-row\">\n        <div class=\"input-wrap\" style=\"flex:2\">\n          <label class=\"input-label\" for=\"nameInput\">Your Name \/ Gamertag<\/label>\n          <input type=\"text\" class=\"name-input\" id=\"nameInput\" placeholder=\"e.g. AKASH, Shadow, Dragon, King...\" maxlength=\"20\" aria-label=\"Enter your name or gamertag\" autocomplete=\"off\">\n        <\/div>\n        <div class=\"input-wrap\">\n          <label class=\"input-label\" for=\"nickType\">Nickname Style<\/label>\n          <select class=\"nick-select\" id=\"nickType\" aria-label=\"Select nickname style\">\n            <option value=\"all\">\ud83c\udfae All Styles<\/option>\n            <option value=\"solo\">\ud83d\udc64 Solo Gamer<\/option>\n            <option value=\"clan\">\u2694\ufe0f Clan Name<\/option>\n            <option value=\"duo\">\ud83d\udc65 Duo Names<\/option>\n            <option value=\"esports\">\ud83c\udfc6 Esports Pro<\/option>\n            <option value=\"pro\">\ud83d\udc8e Pro Gamer<\/option>\n            <option value=\"streamer\">\ud83d\udcfa Streamer<\/option>\n          <\/select>\n        <\/div>\n        <div class=\"btn-wrap\">\n          <label class=\"input-label\">&nbsp;<\/label>\n          <button class=\"generate-btn\" id=\"generateBtn\" aria-label=\"Generate gaming names (keyboard shortcut G)\">\u26a1 Generate Names<\/button>\n        <\/div>\n        <div class=\"btn-wrap\">\n          <label class=\"input-label\">&nbsp;<\/label>\n          <button class=\"lucky-btn\" id=\"luckyBtn\" aria-label=\"Generate a lucky random name (keyboard shortcut L)\">\ud83c\udfb2 Lucky!<\/button>\n        <\/div>\n      <\/div>\n    <\/section>\n    <!-- Tabs -->\n    <nav class=\"tabs\" role=\"tablist\" aria-label=\"Content tabs\">\n      <button class=\"tab active\" role=\"tab\" aria-selected=\"true\" data-tab=\"results\" id=\"tab-results\">\ud83c\udfae Results<\/button>\n      <button class=\"tab\" role=\"tab\" aria-selected=\"false\" data-tab=\"favorites\" id=\"tab-favorites\">\u2764\ufe0f Favourites<\/button>\n      <button class=\"tab\" role=\"tab\" aria-selected=\"false\" data-tab=\"fonts\" id=\"tab-fonts\">\ud83d\udd24 Fonts<\/button>\n      <button class=\"tab\" role=\"tab\" aria-selected=\"false\" data-tab=\"symbols\" id=\"tab-symbols\">\u2726 Symbols<\/button>\n      <button class=\"tab\" role=\"tab\" aria-selected=\"false\" data-tab=\"history\" id=\"tab-history\">\ud83d\udd50 History<\/button>\n    <\/nav>\n    <!-- RESULTS PANEL -->\n    <div id=\"panel-results\">\n      <!-- Filters -->\n      <div class=\"filter-bar\" role=\"region\" aria-label=\"Style filters\">\n        <div class=\"filter-label\">Filter by Style<\/div>\n        <div class=\"chips\" role=\"group\">\n          <button class=\"chip active\" data-filter=\"all\" aria-pressed=\"true\">All<\/button>\n          <button class=\"chip\" data-filter=\"cute\" aria-pressed=\"false\">\ud83c\udf38 Cute<\/button>\n          <button class=\"chip\" data-filter=\"dark\" aria-pressed=\"false\">\ud83c\udf11 Dark<\/button>\n          <button class=\"chip\" data-filter=\"pro\" aria-pressed=\"false\">\ud83d\udc8e Pro<\/button>\n          <button class=\"chip\" data-filter=\"hacker\" aria-pressed=\"false\">\ud83d\udcbb Hacker<\/button>\n          <button class=\"chip\" data-filter=\"demon\" aria-pressed=\"false\">\ud83d\ude08 Demon<\/button>\n          <button class=\"chip\" data-filter=\"devil\" aria-pressed=\"false\">\ud83d\udc79 Devil<\/button>\n          <button class=\"chip\" data-filter=\"royal\" aria-pressed=\"false\">\ud83d\udc51 Royal<\/button>\n          <button class=\"chip\" data-filter=\"samurai\" aria-pressed=\"false\">\u2694\ufe0f Samurai<\/button>\n          <button class=\"chip\" data-filter=\"ninja\" aria-pressed=\"false\">\ud83e\udd77 Ninja<\/button>\n          <button class=\"chip\" data-filter=\"anime\" aria-pressed=\"false\">\ud83c\udf38 Anime<\/button>\n          <button class=\"chip\" data-filter=\"fire\" aria-pressed=\"false\">\ud83d\udd25 Fire<\/button>\n          <button class=\"chip\" data-filter=\"ice\" aria-pressed=\"false\">\u2744\ufe0f Ice<\/button>\n          <button class=\"chip\" data-filter=\"shadow\" aria-pressed=\"false\">\ud83c\udf2b\ufe0f Shadow<\/button>\n          <button class=\"chip\" data-filter=\"dragon\" aria-pressed=\"false\">\ud83d\udc09 Dragon<\/button>\n          <button class=\"chip\" data-filter=\"space\" aria-pressed=\"false\">\ud83d\ude80 Space<\/button>\n          <button class=\"chip\" data-filter=\"mythical\" aria-pressed=\"false\">\ud83d\udd2e Mythical<\/button>\n        <\/div>\n      <\/div>\n      <!-- Search -->\n      <div class=\"search-bar\" role=\"search\">\n        <span class=\"search-icon\" aria-hidden=\"true\">\ud83d\udd0d<\/span>\n        <input type=\"search\" class=\"search-input\" id=\"searchInput\" placeholder=\"Live search through generated names...\" aria-label=\"Search generated names\">\n      <\/div>\n      <!-- Toolbar -->\n      <div class=\"toolbar\" role=\"toolbar\">\n        <div class=\"toolbar-left\"><span class=\"results-count\" id=\"resultsCount\" aria-live=\"polite\">Enter a name above to generate 100+ stylish names<\/span><\/div>\n        <div class=\"toolbar-right\">\n          <button class=\"tool-btn\" id=\"exportBtn\" aria-label=\"Export names as TXT\">\ud83d\udcc4 Export TXT<\/button>\n          <button class=\"tool-btn\" id=\"printBtn\" aria-label=\"Print names\">\ud83d\udda8\ufe0f Print<\/button>\n          <button class=\"tool-btn\" id=\"shareBtn\" aria-label=\"Share this page\">\ud83d\udd17 Share<\/button>\n          <button class=\"tool-btn\" id=\"copyAllBtn\" aria-label=\"Copy all names to clipboard\">\ud83d\udccb Copy All<\/button>\n          <button class=\"tool-btn\" id=\"moreBtn\" aria-label=\"Generate more names\">\u267e\ufe0f More<\/button>\n        <\/div>\n      <\/div>\n      <div class=\"progress-bar\" aria-hidden=\"true\"><div class=\"progress-fill\" id=\"progressFill\"><\/div><\/div>\n      <!-- Names Grid -->\n      <div class=\"names-grid\" id=\"namesGrid\" role=\"region\" aria-label=\"Generated gaming names\">\n        <div class=\"empty-state\">\n          <div class=\"empty-icon\">\u2694\ufe0f<\/div>\n          <h3>Ready to Generate!<\/h3>\n          <p>Enter your name above and click <strong>Generate Names<\/strong><br>to see 100+ unique stylish gaming names.<\/p>\n        <\/div>\n      <\/div>\n    <\/div>\n    <!-- FAVOURITES PANEL -->\n    <div id=\"panel-favorites\" style=\"display:none\">\n      <div class=\"section-header\">\n        <h2>\u2764\ufe0f Your Favourite Names<\/h2>\n        <div class=\"section-line\"><\/div>\n        <button class=\"tool-btn\" id=\"clearFavsBtn\">\ud83d\uddd1\ufe0f Clear All<\/button>\n      <\/div>\n      <div class=\"names-grid\" id=\"favsGrid\" role=\"region\" aria-label=\"Favourite gaming names\">\n        <div class=\"empty-state\"><div class=\"empty-icon\">\u2764\ufe0f<\/div><h3>No Favourites Yet<\/h3><p>Click \u2764 on any generated name to save it here.<\/p><\/div>\n      <\/div>\n    <\/div>\n    <!-- FONTS PANEL -->\n    <div id=\"panel-fonts\" style=\"display:none\">\n      <div class=\"section-header\"><h2>\ud83d\udd24 Unicode Font Styles<\/h2><div class=\"section-line\"><\/div><\/div>\n      <div class=\"font-grid\" id=\"fontGrid\" role=\"region\" aria-label=\"Font style previews\"><\/div>\n    <\/div>\n    <!-- SYMBOLS PANEL -->\n    <div id=\"panel-symbols\" style=\"display:none\">\n      <div class=\"section-header\"><h2>\u2726 Symbol Library<\/h2><div class=\"section-line\"><\/div><\/div>\n      <div class=\"symbol-section\"><h3>\ud83d\udd30 Gaming Symbols<\/h3><div class=\"symbol-grid\" id=\"symGrid1\"><\/div><\/div>\n      <div class=\"symbol-section\"><h3>\u2b50 Stars &amp; Decorative<\/h3><div class=\"symbol-grid\" id=\"symGrid2\"><\/div><\/div>\n      <div class=\"symbol-section\"><h3>\u2694\ufe0f Battle &amp; Combat<\/h3><div class=\"symbol-grid\" id=\"symGrid3\"><\/div><\/div>\n      <div class=\"symbol-section\"><h3>\ud83c\udf38 Anime &amp; Cute<\/h3><div class=\"symbol-grid\" id=\"symGrid4\"><\/div><\/div>\n      <div class=\"symbol-section\"><h3>\ud83d\udd2e Mystic &amp; Fantasy<\/h3><div class=\"symbol-grid\" id=\"symGrid5\"><\/div><\/div>\n    <\/div>\n    <!-- HISTORY PANEL -->\n    <div id=\"panel-history\" style=\"display:none\">\n      <div class=\"section-header\">\n        <h2>\ud83d\udd50 Search History<\/h2>\n        <div class=\"section-line\"><\/div>\n        <button class=\"tool-btn\" id=\"clearHistBtn\">\ud83d\uddd1\ufe0f Clear<\/button>\n      <\/div>\n      <div class=\"history-chips\" id=\"historyChips\"><p style=\"color:var(--text-muted);font-size:.85rem\">No history yet. Generate some names!<\/p><\/div>\n    <\/div>\n  <\/div>\n<\/main>\n<footer role=\"contentinfo\">\n  <div class=\"container\">\n    <p>\u26a1 <span class=\"accent\">pikachoo.in<\/span> \u2014 100+ Stylish Gaming Names &nbsp;\u00b7&nbsp; PUBG &nbsp;\u00b7&nbsp; Free Fire &nbsp;\u00b7&nbsp; BGMI &nbsp;\u00b7&nbsp; Esports<\/p>\n    <p style=\"margin-top:8px\">Press <kbd>G<\/kbd> to Generate &nbsp;\u00b7&nbsp; <kbd>L<\/kbd> for Lucky Name &nbsp;\u00b7&nbsp; <kbd>Ctrl+F<\/kbd> to Search<\/p>\n  <\/div>\n<\/footer>\n<script>\n(function() {\n'use strict';\n\/* ============================================================\n   FONT CONVERTER MAPS\n   ============================================================ *\/\nconst FONTS = [\n  {name:'Fullwidth',     f:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',t:'\uff21\uff22\uff23\uff24\uff25\uff26\uff27\uff28\uff29\uff2a\uff2b\uff2c\uff2d\uff2e\uff2f\uff30\uff31\uff32\uff33\uff34\uff35\uff36\uff37\uff38\uff39\uff3a\uff41\uff42\uff43\uff44\uff45\uff46\uff47\uff48\uff49\uff4a\uff4b\uff4c\uff4d\uff4e\uff4f\uff50\uff51\uff52\uff53\uff54\uff55\uff56\uff57\uff58\uff59\uff5a\uff10\uff11\uff12\uff13\uff14\uff15\uff16\uff17\uff18\uff19'},\n  {name:'Bold Serif',    f:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',t:'\ud835\udc00\ud835\udc01\ud835\udc02\ud835\udc03\ud835\udc04\ud835\udc05\ud835\udc06\ud835\udc07\ud835\udc08\ud835\udc09\ud835\udc0a\ud835\udc0b\ud835\udc0c\ud835\udc0d\ud835\udc0e\ud835\udc0f\ud835\udc10\ud835\udc11\ud835\udc12\ud835\udc13\ud835\udc14\ud835\udc15\ud835\udc16\ud835\udc17\ud835\udc18\ud835\udc19\ud835\udc1a\ud835\udc1b\ud835\udc1c\ud835\udc1d\ud835\udc1e\ud835\udc1f\ud835\udc20\ud835\udc21\ud835\udc22\ud835\udc23\ud835\udc24\ud835\udc25\ud835\udc26\ud835\udc27\ud835\udc28\ud835\udc29\ud835\udc2a\ud835\udc2b\ud835\udc2c\ud835\udc2d\ud835\udc2e\ud835\udc2f\ud835\udc30\ud835\udc31\ud835\udc32\ud835\udc33'},\n  {name:'Italic Serif',  f:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',t:'\ud835\udc34\ud835\udc35\ud835\udc36\ud835\udc37\ud835\udc38\ud835\udc39\ud835\udc3a\ud835\udc3b\ud835\udc3c\ud835\udc3d\ud835\udc3e\ud835\udc3f\ud835\udc40\ud835\udc41\ud835\udc42\ud835\udc43\ud835\udc44\ud835\udc45\ud835\udc46\ud835\udc47\ud835\udc48\ud835\udc49\ud835\udc4a\ud835\udc4b\ud835\udc4c\ud835\udc4d\ud835\udc4e\ud835\udc4f\ud835\udc50\ud835\udc51\ud835\udc52\ud835\udc53\ud835\udc54\u210e\ud835\udc56\ud835\udc57\ud835\udc58\ud835\udc59\ud835\udc5a\ud835\udc5b\ud835\udc5c\ud835\udc5d\ud835\udc5e\ud835\udc5f\ud835\udc60\ud835\udc61\ud835\udc62\ud835\udc63\ud835\udc64\ud835\udc65\ud835\udc66\ud835\udc67'},\n  {name:'Bold Italic',   f:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',t:'\ud835\udc68\ud835\udc69\ud835\udc6a\ud835\udc6b\ud835\udc6c\ud835\udc6d\ud835\udc6e\ud835\udc6f\ud835\udc70\ud835\udc71\ud835\udc72\ud835\udc73\ud835\udc74\ud835\udc75\ud835\udc76\ud835\udc77\ud835\udc78\ud835\udc79\ud835\udc7a\ud835\udc7b\ud835\udc7c\ud835\udc7d\ud835\udc7e\ud835\udc7f\ud835\udc80\ud835\udc81\ud835\udc82\ud835\udc83\ud835\udc84\ud835\udc85\ud835\udc86\ud835\udc87\ud835\udc88\ud835\udc89\ud835\udc8a\ud835\udc8b\ud835\udc8c\ud835\udc8d\ud835\udc8e\ud835\udc8f\ud835\udc90\ud835\udc91\ud835\udc92\ud835\udc93\ud835\udc94\ud835\udc95\ud835\udc96\ud835\udc97\ud835\udc98\ud835\udc99\ud835\udc9a\ud835\udc9b'},\n  {name:'Script',        f:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',t:'\ud835\udc9c\u212c\ud835\udc9e\ud835\udc9f\u2130\u2131\ud835\udca2\u210b\u2110\ud835\udca5\ud835\udca6\u2112\u2133\ud835\udca9\ud835\udcaa\ud835\udcab\ud835\udcac\u211b\ud835\udcae\ud835\udcaf\ud835\udcb0\ud835\udcb1\ud835\udcb2\ud835\udcb3\ud835\udcb4\ud835\udcb5\ud835\udcb6\ud835\udcb7\ud835\udcb8\ud835\udcb9\u212f\ud835\udcbb\u210a\ud835\udcbd\ud835\udcbe\ud835\udcbf\ud835\udcc0\ud835\udcc1\ud835\udcc2\ud835\udcc3\u2134\ud835\udcc5\ud835\udcc6\ud835\udcc7\ud835\udcc8\ud835\udcc9\ud835\udcca\ud835\udccb\ud835\udccc\ud835\udccd\ud835\udcce\ud835\udccf'},\n  {name:'Bold Script',   f:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',t:'\ud835\udcd0\ud835\udcd1\ud835\udcd2\ud835\udcd3\ud835\udcd4\ud835\udcd5\ud835\udcd6\ud835\udcd7\ud835\udcd8\ud835\udcd9\ud835\udcda\ud835\udcdb\ud835\udcdc\ud835\udcdd\ud835\udcde\ud835\udcdf\ud835\udce0\ud835\udce1\ud835\udce2\ud835\udce3\ud835\udce4\ud835\udce5\ud835\udce6\ud835\udce7\ud835\udce8\ud835\udce9\ud835\udcea\ud835\udceb\ud835\udcec\ud835\udced\ud835\udcee\ud835\udcef\ud835\udcf0\ud835\udcf1\ud835\udcf2\ud835\udcf3\ud835\udcf4\ud835\udcf5\ud835\udcf6\ud835\udcf7\ud835\udcf8\ud835\udcf9\ud835\udcfa\ud835\udcfb\ud835\udcfc\ud835\udcfd\ud835\udcfe\ud835\udcff\ud835\udd00\ud835\udd01\ud835\udd02\ud835\udd03'},\n  {name:'Fraktur',       f:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',t:'\ud835\udd04\ud835\udd05\u212d\ud835\udd07\ud835\udd08\ud835\udd09\ud835\udd0a\u210c\u2111\ud835\udd0d\ud835\udd0e\ud835\udd0f\ud835\udd10\ud835\udd11\ud835\udd12\ud835\udd13\ud835\udd14\u211c\ud835\udd16\ud835\udd17\ud835\udd18\ud835\udd19\ud835\udd1a\ud835\udd1b\ud835\udd1c\u2128\ud835\udd1e\ud835\udd1f\ud835\udd20\ud835\udd21\ud835\udd22\ud835\udd23\ud835\udd24\ud835\udd25\ud835\udd26\ud835\udd27\ud835\udd28\ud835\udd29\ud835\udd2a\ud835\udd2b\ud835\udd2c\ud835\udd2d\ud835\udd2e\ud835\udd2f\ud835\udd30\ud835\udd31\ud835\udd32\ud835\udd33\ud835\udd34\ud835\udd35\ud835\udd36\ud835\udd37'},\n  {name:'Bold Fraktur',  f:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',t:'\ud835\udd6c\ud835\udd6d\ud835\udd6e\ud835\udd6f\ud835\udd70\ud835\udd71\ud835\udd72\ud835\udd73\ud835\udd74\ud835\udd75\ud835\udd76\ud835\udd77\ud835\udd78\ud835\udd79\ud835\udd7a\ud835\udd7b\ud835\udd7c\ud835\udd7d\ud835\udd7e\ud835\udd7f\ud835\udd80\ud835\udd81\ud835\udd82\ud835\udd83\ud835\udd84\ud835\udd85\ud835\udd86\ud835\udd87\ud835\udd88\ud835\udd89\ud835\udd8a\ud835\udd8b\ud835\udd8c\ud835\udd8d\ud835\udd8e\ud835\udd8f\ud835\udd90\ud835\udd91\ud835\udd92\ud835\udd93\ud835\udd94\ud835\udd95\ud835\udd96\ud835\udd97\ud835\udd98\ud835\udd99\ud835\udd9a\ud835\udd9b\ud835\udd9c\ud835\udd9d\ud835\udd9e\ud835\udd9f'},\n  {name:'Double Struck', f:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',t:'\ud835\udd38\ud835\udd39\u2102\ud835\udd3b\ud835\udd3c\ud835\udd3d\ud835\udd3e\u210d\ud835\udd40\ud835\udd41\ud835\udd42\ud835\udd43\ud835\udd44\u2115\ud835\udd46\u2119\u211a\u211d\ud835\udd4a\ud835\udd4b\ud835\udd4c\ud835\udd4d\ud835\udd4e\ud835\udd4f\ud835\udd50\u2124\ud835\udd52\ud835\udd53\ud835\udd54\ud835\udd55\ud835\udd56\ud835\udd57\ud835\udd58\ud835\udd59\ud835\udd5a\ud835\udd5b\ud835\udd5c\ud835\udd5d\ud835\udd5e\ud835\udd5f\ud835\udd60\ud835\udd61\ud835\udd62\ud835\udd63\ud835\udd64\ud835\udd65\ud835\udd66\ud835\udd67\ud835\udd68\ud835\udd69\ud835\udd6a\ud835\udd6b\ud835\udfd8\ud835\udfd9\ud835\udfda\ud835\udfdb\ud835\udfdc\ud835\udfdd\ud835\udfde\ud835\udfdf\ud835\udfe0\ud835\udfe1'},\n  {name:'Monospace',     f:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',t:'\ud835\ude70\ud835\ude71\ud835\ude72\ud835\ude73\ud835\ude74\ud835\ude75\ud835\ude76\ud835\ude77\ud835\ude78\ud835\ude79\ud835\ude7a\ud835\ude7b\ud835\ude7c\ud835\ude7d\ud835\ude7e\ud835\ude7f\ud835\ude80\ud835\ude81\ud835\ude82\ud835\ude83\ud835\ude84\ud835\ude85\ud835\ude86\ud835\ude87\ud835\ude88\ud835\ude89\ud835\ude8a\ud835\ude8b\ud835\ude8c\ud835\ude8d\ud835\ude8e\ud835\ude8f\ud835\ude90\ud835\ude91\ud835\ude92\ud835\ude93\ud835\ude94\ud835\ude95\ud835\ude96\ud835\ude97\ud835\ude98\ud835\ude99\ud835\ude9a\ud835\ude9b\ud835\ude9c\ud835\ude9d\ud835\ude9e\ud835\ude9f\ud835\udea0\ud835\udea1\ud835\udea2\ud835\udea3\ud835\udff6\ud835\udff7\ud835\udff8\ud835\udff9\ud835\udffa\ud835\udffb\ud835\udffc\ud835\udffd\ud835\udffe\ud835\udfff'},\n  {name:'Sans Serif',    f:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',t:'\ud835\udda0\ud835\udda1\ud835\udda2\ud835\udda3\ud835\udda4\ud835\udda5\ud835\udda6\ud835\udda7\ud835\udda8\ud835\udda9\ud835\uddaa\ud835\uddab\ud835\uddac\ud835\uddad\ud835\uddae\ud835\uddaf\ud835\uddb0\ud835\uddb1\ud835\uddb2\ud835\uddb3\ud835\uddb4\ud835\uddb5\ud835\uddb6\ud835\uddb7\ud835\uddb8\ud835\uddb9\ud835\uddba\ud835\uddbb\ud835\uddbc\ud835\uddbd\ud835\uddbe\ud835\uddbf\ud835\uddc0\ud835\uddc1\ud835\uddc2\ud835\uddc3\ud835\uddc4\ud835\uddc5\ud835\uddc6\ud835\uddc7\ud835\uddc8\ud835\uddc9\ud835\uddca\ud835\uddcb\ud835\uddcc\ud835\uddcd\ud835\uddce\ud835\uddcf\ud835\uddd0\ud835\uddd1\ud835\uddd2\ud835\uddd3'},\n  {name:'Bold Sans',     f:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',t:'\ud835\uddd4\ud835\uddd5\ud835\uddd6\ud835\uddd7\ud835\uddd8\ud835\uddd9\ud835\uddda\ud835\udddb\ud835\udddc\ud835\udddd\ud835\uddde\ud835\udddf\ud835\udde0\ud835\udde1\ud835\udde2\ud835\udde3\ud835\udde4\ud835\udde5\ud835\udde6\ud835\udde7\ud835\udde8\ud835\udde9\ud835\uddea\ud835\uddeb\ud835\uddec\ud835\udded\ud835\uddee\ud835\uddef\ud835\uddf0\ud835\uddf1\ud835\uddf2\ud835\uddf3\ud835\uddf4\ud835\uddf5\ud835\uddf6\ud835\uddf7\ud835\uddf8\ud835\uddf9\ud835\uddfa\ud835\uddfb\ud835\uddfc\ud835\uddfd\ud835\uddfe\ud835\uddff\ud835\ude00\ud835\ude01\ud835\ude02\ud835\ude03\ud835\ude04\ud835\ude05\ud835\ude06\ud835\ude07'},\n  {name:'Italic Sans',   f:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',t:'\ud835\ude08\ud835\ude09\ud835\ude0a\ud835\ude0b\ud835\ude0c\ud835\ude0d\ud835\ude0e\ud835\ude0f\ud835\ude10\ud835\ude11\ud835\ude12\ud835\ude13\ud835\ude14\ud835\ude15\ud835\ude16\ud835\ude17\ud835\ude18\ud835\ude19\ud835\ude1a\ud835\ude1b\ud835\ude1c\ud835\ude1d\ud835\ude1e\ud835\ude1f\ud835\ude20\ud835\ude21\ud835\ude22\ud835\ude23\ud835\ude24\ud835\ude25\ud835\ude26\ud835\ude27\ud835\ude28\ud835\ude29\ud835\ude2a\ud835\ude2b\ud835\ude2c\ud835\ude2d\ud835\ude2e\ud835\ude2f\ud835\ude30\ud835\ude31\ud835\ude32\ud835\ude33\ud835\ude34\ud835\ude35\ud835\ude36\ud835\ude37\ud835\ude38\ud835\ude39\ud835\ude3a\ud835\ude3b'},\n  {name:'Bold Italic Sans',f:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',t:'\ud835\ude3c\ud835\ude3d\ud835\ude3e\ud835\ude3f\ud835\ude40\ud835\ude41\ud835\ude42\ud835\ude43\ud835\ude44\ud835\ude45\ud835\ude46\ud835\ude47\ud835\ude48\ud835\ude49\ud835\ude4a\ud835\ude4b\ud835\ude4c\ud835\ude4d\ud835\ude4e\ud835\ude4f\ud835\ude50\ud835\ude51\ud835\ude52\ud835\ude53\ud835\ude54\ud835\ude55\ud835\ude56\ud835\ude57\ud835\ude58\ud835\ude59\ud835\ude5a\ud835\ude5b\ud835\ude5c\ud835\ude5d\ud835\ude5e\ud835\ude5f\ud835\ude60\ud835\ude61\ud835\ude62\ud835\ude63\ud835\ude64\ud835\ude65\ud835\ude66\ud835\ude67\ud835\ude68\ud835\ude69\ud835\ude6a\ud835\ude6b\ud835\ude6c\ud835\ude6d\ud835\ude6e\ud835\ude6f'},\n  {name:'Small Caps',    f:'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',t:'\u1d00\u0299\u1d04\u1d05\u1d07\ua730\u0262\u029c\u026a\u1d0a\u1d0b\u029f\u1d0d\u0274\u1d0f\u1d18\u01eb\u0280\ua731\u1d1b\u1d1c\u1d20\u1d21x\u028f\u1d22ABCDEFGHIJKLMNOPQRSTUVWXYZ'},\n  {name:'Superscript',   f:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',t:'\u1d2c\u1d2e\u1d9c\u1d30\u1d31\u1da0\u1d33\u1d34\u1d35\u1d36\u1d37\u1d38\u1d39\u1d3a\u1d3c\u1d3eQ\u1d3f\u02e2\u1d40\u1d41\u1d5b\u1d42\u02e3\u02b8\u1dbb\u1d43\u1d47\u1d9c\u1d48\u1d49\u1da0\u1d4d\u02b0\u2071\u02b2\u1d4f\u02e1\u1d50\u207f\u1d52\u1d56q\u02b3\u02e2\u1d57\u1d58\u1d5b\u02b7\u02e3\u02b8\u1dbb\u2070\u00b9\u00b2\u00b3\u2074\u2075\u2076\u2077\u2078\u2079'},\n  {name:'Circled',       f:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',t:'\u24b6\u24b7\u24b8\u24b9\u24ba\u24bb\u24bc\u24bd\u24be\u24bf\u24c0\u24c1\u24c2\u24c3\u24c4\u24c5\u24c6\u24c7\u24c8\u24c9\u24ca\u24cb\u24cc\u24cd\u24ce\u24cf\u24b6\u24b7\u24b8\u24b9\u24ba\u24bb\u24bc\u24bd\u24be\u24bf\u24c0\u24c1\u24c2\u24c3\u24c4\u24c5\u24c6\u24c7\u24c8\u24c9\u24ca\u24cb\u24cc\u24cd\u24ce\u24cf'},\n  {name:'Neg.Circled',   f:'ABCDEFGHIJKLMNOPQRSTUVWXYZ',t:'\ud83c\udd50\ud83c\udd51\ud83c\udd52\ud83c\udd53\ud83c\udd54\ud83c\udd55\ud83c\udd56\ud83c\udd57\ud83c\udd58\ud83c\udd59\ud83c\udd5a\ud83c\udd5b\ud83c\udd5c\ud83c\udd5d\ud83c\udd5e\ud83c\udd5f\ud83c\udd60\ud83c\udd61\ud83c\udd62\ud83c\udd63\ud83c\udd64\ud83c\udd65\ud83c\udd66\ud83c\udd67\ud83c\udd68\ud83c\udd69'},\n  {name:'Squared',       f:'ABCDEFGHIJKLMNOPQRSTUVWXYZ',t:'\ud83c\udd30\ud83c\udd31\ud83c\udd32\ud83c\udd33\ud83c\udd34\ud83c\udd35\ud83c\udd36\ud83c\udd37\ud83c\udd38\ud83c\udd39\ud83c\udd3a\ud83c\udd3b\ud83c\udd3c\ud83c\udd3d\ud83c\udd3e\ud83c\udd3f\ud83c\udd40\ud83c\udd41\ud83c\udd42\ud83c\udd43\ud83c\udd44\ud83c\udd45\ud83c\udd46\ud83c\udd47\ud83c\udd48\ud83c\udd49'},\n  {name:'Neg.Squared',   f:'ABCDEFGHIJKLMNOPQRSTUVWXYZ',t:'\ud83c\udd70\ud83c\udd71\ud83c\udd72\ud83c\udd73\ud83c\udd74\ud83c\udd75\ud83c\udd76\ud83c\udd77\ud83c\udd78\ud83c\udd79\ud83c\udd7a\ud83c\udd7b\ud83c\udd7c\ud83c\udd7d\ud83c\udd7e\ud83c\udd7f\ud83c\udd80\ud83c\udd81\ud83c\udd82\ud83c\udd83\ud83c\udd84\ud83c\udd85\ud83c\udd86\ud83c\udd87\ud83c\udd88\ud83c\udd89'},\n  {name:'Parenthesized', f:'abcdefghijklmnopqrstuvwxyz',t:'\u249c\u249d\u249e\u249f\u24a0\u24a1\u24a2\u24a3\u24a4\u24a5\u24a6\u24a7\u24a8\u24a9\u24aa\u24ab\u24ac\u24ad\u24ae\u24af\u24b0\u24b1\u24b2\u24b3\u24b4\u24b5'},\n  {name:'Medieval',      f:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',t:'\u5342\u4e43\u531a\u15ea\u4e47\u5343\ua7a0\u5344\u4e28\u4e01\u16d5\u4e5a\u722a\u51e0\u53e3\u5c38\u024a\u5c3a\u4e02\u3112\u3129\u142f\u5c71\u4e42\u311a\u4e59\u5342\u4e43\u531a\u15ea\u4e47\u5343\ua7a0\u5344\u4e28\u4e01\u16d5\u4e5a\u722a\u51e0\u53e3\u5c38\u024a\u5c3a\u4e02\u3112\u3129\u142f\u5c71\u4e42\u311a\u4e59'},\n  {name:'Cyber\/Glitch',  f:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',t:'\ua2eb\ua0c3\ua3f8\ua055\ua3c2\ua2b0\ua04d\ua479\ua091\ua02d\ua017\ua489\ua0b5\ua079\ua117\ua263\ua079\ua2ea\ua326\ua2eb\ua308\ua061\ua3fe\ua297\ua6a4\ua04a\ua2eb\ua0c3\ua3f8\ua055\ua3c2\ua2b0\ua04d\ua479\ua091\ua02d\ua017\ua489\ua0b5\ua079\ua117\ua263\ua079\ua2ea\ua326\ua2eb\ua308\ua061\ua3fe\ua297\ua6a4\ua04a'},\n];\nfunction applyFont(text, font) {\n  if (!font || !font.f) return text;\n  const fromChars = [...font.f];\n  const toChars   = [...font.t];\n  return [...text].map(c => {\n    const i = fromChars.indexOf(c);\n    return (i >= 0 && toChars[i]) ? toChars[i] : c;\n  }).join('');\n}\n\/* ============================================================\n   SYMBOL LIBRARIES\n   ============================================================ *\/\nconst SYMS_GAMING  = ['\u4e97','\u4e48','\u4e42','\u30c4','\u5f61','\u0f12','\ua9c1','\ua9c2','\u2620','\u26a1','\u2623','\u2622','\u2605','\u273f','\u2726','\u2727','\u262f','\u265b','\u272a','\u2756','\u0e5b','\u0fd0','\u2718','\u262c','\u25e5','\u25e4','\u2af7','\u2af8','\u534d','\u5350','\u0994\u09e3','\ua52a','\ua74a','\u4ea6','\u211c','\u039e','\u039b','\u03a9','\u03a8','\ua4b0','\ua4b1','\u221e','\u0489','\u0488','\u22b1','\u22b0','\u1d33\u1d52\u1d48'];\nconst SYMS_STARS   = ['\u2605','\u2606','\u2726','\u2727','\u2729','\u272a','\u272b','\u272c','\u272d','\u272e','\u272f','\u2730','\u2b50','\ud83c\udf1f','\ud83d\udcab','\u269d','\u2728','\ud83c\udf20','\u22c6','\u02da','\u2735','\u2736','\u2737','\u2738','\u2739','\u273a','\u274b','\u274a','\u2749','\u2748'];\nconst SYMS_BATTLE  = ['\u2694','\ud83d\udde1','\ud83d\udee1','\ud83d\udd31','\u2656','\u2657','\u2658','\u2659','\u265a','\u265b','\u265c','\u265d','\u265e','\u265f','\u2692','\ud83c\udff9','\u2694','\u2622','\u2623','\u26a0','\ud83d\udca3','\ud83d\udd30','\u26a1','\ud83d\udca5','\ud83d\udd25','\u2744','\ud83c\udf2a','\u26e9','\ud83d\uddfb'];\nconst SYMS_ANIME   = ['\u2601','\ud83c\udf38','\u273f','\u2740','\ud83c\udf3a','\ud83d\udcae','\ud83c\udf3c','\ud83c\udf3b','\ud83c\udf39','\ud83c\udf37','\ud83c\udf40','\ud83c\udf3f','\ud83c\udf43','\ud83c\udf0a','\u2744','\ud83c\udf19','\u26e9','\u2728','\ud83d\udcab','\ud83c\udf08','\ud83e\udd8b','\ud83d\udc09','\ud83e\udd8a','\ud83d\udc3a','\ud83d\udc41','\ud83c\udf11'];\nconst SYMS_MYSTIC  = ['\ud83d\udd2e','\ud83d\udc8e','\ud83c\udf00','\ud83c\udf0c','\ud83d\udd2f','\u269c','\ud83c\udfdb','\ud83d\udddd','\ud83d\udc80','\ud83d\udc41','\ud83d\udc0d','\ud83e\udd85','\ud83e\udd81','\ud83d\udc32','\ud83d\udd3a','\ud83d\udd3b','\ud83c\udf0a','\u2697','\ud83e\uddff','\ud83e\udeac','\ud83c\udf19','\u2600','\u269b','\ud83e\uddf2','\ud83c\udfad','\ud83c\udccf'];\nconst SYM_PRE = ['\u4e97','\u4e48','\u4e42','\u2620','\u26a1','\u2605','\u273f','\u262f','\u265b','\u272a','\u25e5\u25e4','\ua9c1','\u5f61','\u0f12','\u2718','\u0994\u09e3','\u534d','\ua52a','\u0e56\u06e3\u06dc','\u2022','\u300e','\u3010','\u3016','\u22b1','\ua4b0','\u221e','\u0489','\u1d33\u1d52\u1d48','\u5350','\u4ea6','\u039e','\u039b','\u03a9','\u03a8','\u2af7','\u2726','\u262c','\u211c','\u2694','\ud83d\udd31','\ud83d\udc8e','\ud83c\udf11','\u5f61','\u22c6','\u02da','\u2735','\u265c','\u26e9','\ud83d\udd2e','\ud83d\udc41','\ud83d\udc32','\ud83c\udf0a','\ud83c\udf19','\ud83e\udd81','\ud83d\udcab'];\nconst SYM_SUF = ['\u4e97','\u30e1','\u5f61','\u2620','\u26a1','\u2605','\u273f','\u262f','\u265b','\u25e4','\ua9c2','\u30c4','\u0f12','\u2718','\u0994\u09e3','\u534d','\ua52a','\u300f','\u3011','\u3017','\u22b0','\ua4b1','\u221e','\u0488','\u1d52\u1d48','\u1d3f','\u5350','\u4ea6','\u039e','\u039b','\u03a9','\u03a8','\u2af8','\u2727','\u262c','\u211b','\ud83d\udde1','\ud83d\udd31','\ud83d\udc8e','\ud83c\udf15','\ud83c\udf11','\ud83c\udf0a','\ud83d\udd25','\u2744','\ud83c\udf38','\u2728','\u2b50','\ud83c\udfad','\ud83c\udccf','\ud83d\udcab','\ud83d\udc09','\ud83e\udd8a','\ud83c\udf19'];\n\/* ============================================================\n   NAME TEMPLATES  (functions: name => stylish string)\n   ============================================================ *\/\nconst TEMPLATES = [\n  \/* === 0-9: Classic bracket\/frame styles === *\/\n  n=>`\u4e97${n}\u4e97`,       n=>`\u4e42${n}\u30e1`,         n=>`\u25e5\ua9c1${n}\ua9c2\u25e4`,   n=>`\u2605${n}\u2605`,\n  n=>`\u30c4${n}\u30c4`,       n=>`\u0e56\u06e3\u06dc${n}`,          n=>`${n}\u26a1`,       n=>`\u2620${n}\u2620`,\n  n=>`${n}\u0fd0`,         n=>`\u0e5b${n}`,\n  \/* === 10-19: Symbol wraps === *\/\n  n=>`\u5f61${n}\u5f61`,       n=>`\u0f12${n}\u0f12`,           n=>`\ua9c1${n}\ua9c2`,     n=>`\u2022${n}\u2022`,\n  n=>`\u2718${n}\u2718`,         n=>`\u3010${n}\u3011`,          n=>`\u3016${n}\u3017`,     n=>`\u0994\u09e3${n}\u0994\u09e3`,\n  n=>`\u534d${n}\u534d`,       n=>`\ua52a${n}\ua52a`,\n  \/* === 20-29: Power symbols === *\/\n  n=>`\u265b${n}\u265b`,         n=>`\u272a${n}\u272a`,           n=>`\u2756${n}\u2756`,     n=>`\u262f${n}\u262f`,\n  n=>`\u2af7${n}\u2af8`,         n=>`\u2726${n}\u2726`,           n=>`\u262c${n}\u262c`,     n=>`\u0489${n}\u0488`,\n  n=>`\u039e${n}\u039e`,         n=>`\u03a9${n}\u03a9`,\n  \/* === 30-39: Geometric frames === *\/\n  n=>`\u25c7${n}\u25c6`,         n=>`\u25b7${n}\u25c1`,           n=>`\u27e8${n}\u27e9`,     n=>`\u300a${n}\u300b`,\n  n=>`\u300e${n}\u300f`,       n=>`\u3014${n}\u3015`,          n=>`\u272f${n}\u272f`,     n=>`\ud83d\udc8e${n}\ud83d\udc8e`,\n  n=>`\ud83d\udd25${n}\ud83d\udd25`,       n=>`\u2744${n}\u2744`,\n  \/* === 40-49: Emoji styles === *\/\n  n=>`\ud83c\udf38${n}\ud83c\udf38`,       n=>`\u2694${n}\u2694`,           n=>`\ud83d\udd31${n}\ud83d\udd31`,   n=>`\ud83c\udf11${n}\ud83c\udf15`,\n  n=>`\ud83d\udc09${n}\ud83d\udc09`,       n=>`\ud83d\udcab${n}\ud83d\udcab`,          n=>`\ud83c\udf0a${n}\ud83c\udf0a`,   n=>`\ud83d\udc41${n}\ud83d\udc41`,\n  n=>`\ud83d\udd2e${n}\ud83d\udd2e`,       n=>`\ud83e\udd81${n}\ud83e\udd81`,\n  \/* === 50-69: Pure font styles === *\/\n  n=>applyFont(n,FONTS[0]),   n=>applyFont(n,FONTS[1]),   n=>applyFont(n,FONTS[2]),\n  n=>applyFont(n,FONTS[3]),   n=>applyFont(n,FONTS[4]),   n=>applyFont(n,FONTS[5]),\n  n=>applyFont(n,FONTS[6]),   n=>applyFont(n,FONTS[7]),   n=>applyFont(n,FONTS[8]),\n  n=>applyFont(n,FONTS[9]),   n=>applyFont(n,FONTS[10]),  n=>applyFont(n,FONTS[11]),\n  n=>applyFont(n,FONTS[12]),  n=>applyFont(n,FONTS[13]),  n=>applyFont(n,FONTS[14]),\n  n=>applyFont(n,FONTS[15]),  n=>applyFont(n,FONTS[16]),  n=>applyFont(n,FONTS[17]),\n  n=>applyFont(n,FONTS[18]),  n=>applyFont(n,FONTS[19]),\n  \/* === 70-89: Font + symbol combos === *\/\n  n=>`\u4e97${applyFont(n,FONTS[0])}\u4e97`,   n=>`\u5f61${applyFont(n,FONTS[1])}\u5f61`,\n  n=>`\ua9c1${applyFont(n,FONTS[2])}\ua9c2`,   n=>`\u2605${applyFont(n,FONTS[3])}\u2605`,\n  n=>`\u2620${applyFont(n,FONTS[4])}\u2620`,    n=>`\u265b${applyFont(n,FONTS[5])}\u265b`,\n  n=>`\u0f12${applyFont(n,FONTS[6])}\u0f12`,   n=>`\u534d${applyFont(n,FONTS[7])}\u534d`,\n  n=>`\u2718${applyFont(n,FONTS[8])}\u2718`,    n=>`\u26a1${applyFont(n,FONTS[9])}\u26a1`,\n  n=>`\u3010${applyFont(n,FONTS[10])}\u3011`, n=>`\u25e5\u25e4${applyFont(n,FONTS[11])}\u25e4\u25e5`,\n  n=>`\u2726${applyFont(n,FONTS[12])}\u2726`,  n=>`\ud83d\udd31${applyFont(n,FONTS[13])}\ud83d\udd31`,\n  n=>`\u2756${applyFont(n,FONTS[14])}\u2756`,  n=>`\ud83d\udc8e${applyFont(n,FONTS[15])}\ud83d\udc8e`,\n  n=>`\ud83d\udd25${applyFont(n,FONTS[16])}\ud83d\udd25`, n=>`\ud83c\udf38${applyFont(n,FONTS[17])}\ud83c\udf38`,\n  n=>`\ud83d\udc09${applyFont(n,FONTS[18])}\ud83d\udc09`, n=>`\u03a9${applyFont(n,FONTS[19])}\u03a9`,\n  \/* === 90-99: Multi-symbol combos === *\/\n  n=>`\u4e97${n}\u30e1\u5f61`,   n=>`\u25e5\ua9c1${n}\ua9c2\u25e4`,   n=>`\u0e56\u06e3\u06dc\ua9c1${n}\ua9c2`,  n=>`\u4e97\u4e42${n}\u4e42\u4e97`,\n  n=>`\u2620\ua9c1${n}\ua9c2\u2620`,  n=>`\u2605\u5f61${n}\u5f61\u2605`,   n=>`\u0f12\u262c${n}\u262c\u0f12`,   n=>`\u265b\u3010${n}\u3011\u265b`,\n  n=>`\u26a1\u4e97${n}\u4e97\u26a1`, n=>`\u5f61\u262f${n}\u262f\u5f61`,\n  \/* === 100-109: Special deco === *\/\n  n=>`\ua4b0${n}\ua4b1`,  n=>`\u22b1${n}\u22b0`,  n=>`\u221e${n}\u221e`,  n=>`\u0489${n}\u0489`,\n  n=>`\u1d33\u1d52\u1d48${n}`,  n=>`${n}\u1d3f`,   n=>`\u1d40\u1d34\u1d31${n}`, n=>`x${n}x`,\n  n=>`\u300c${n}\u300d`,  n=>`\uff62${n}\uff63`,\n  \/* === 110-119: Nickname type prefixes === *\/\n  n=>`-\u02e2\u1d52\u02e1\u1d52-${n}`, n=>`[\u1d04\u029f\u1d00\u0274]${n}`, n=>`[\u1d18\u0280\u1d0f]${n}`, n=>`\u1d07s\u1d18.${n}`,\n  n=>`s\u1d1b\u0280\u1d07\u1d00\u1d0d_${n}`, n=>`${n}_\u0262\u1d52\u1d48`,  n=>`${n}\u1d52\u0262`,     n=>`\u1d05\u1d1c\u1d0f_${n}`,\n  n=>`${n}\u30c3`,         n=>`\u1d3f\u1d2c\u1d3f\u1d31_${n}`,\n  \/* === 120-129: PUBG\/FF\/BGMI specific === *\/\n  n=>`\ua9c1\u0f3a${n}\u0f3b\ua9c2`,  n=>`\ua9c1\u0f12${n}\u0f12\ua9c2`,  n=>`\ua9c1\u4e97${n}\u4e97\ua9c2`, n=>`\ua9c1\u4e42${n}\u4e42\ua9c2`,\n  n=>`\ua9c1\u2605${n}\u2605\ua9c2`,  n=>`\ua9c1\u2620${n}\u2620\ua9c2`,  n=>`\ua9c1\u26a1${n}\u26a1\ua9c2`, n=>`\ua9c1\u273f${n}\u273f\ua9c2`,\n  n=>`\ua9c1\u5f61${n}\u5f61\ua9c2`, n=>`\ua9c1\u0f12\u262c${n}\u262c\u0f12\ua9c2`,\n];\n\/* ============================================================\n   STYLE CATEGORY INDEX SETS\n   ============================================================ *\/\nconst STYLE_IDX = {\n  cute:    new Set([36,37,38,39,40,80,81,82,83,84,85,100,101,108,109]),\n  dark:    new Set([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,19,26,90,91,92,93,94,95,96,97,98,99,120,121,122,123,124,125,126,127,128,129]),\n  pro:     new Set([20,21,22,23,24,25,26,27,28,29,57,58,59,60,61,62,100,101,102,103,104,105,106,107,108]),\n  hacker:  new Set([50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,110,111,112]),\n  demon:   new Set([6,7,8,9,17,18,19,36,37,44,45,121,122,125,129]),\n  devil:   new Set([6,7,8,17,18,19,37,44,121,122,125]),\n  royal:   new Set([15,20,21,22,23,24,25,30,31,32,33,34,35,37,70,71,72,73,74,75,80,81,82,83,84]),\n  samurai: new Set([0,1,2,3,4,5,10,11,27,90,91,92,94,95,96]),\n  ninja:   new Set([0,1,2,3,4,5,13,14,101,102,110,111]),\n  anime:   new Set([40,42,80,81,82,83,84,85,86,87,88,89,108,109]),\n  fire:    new Set([6,7,8,37,38,43,44,45,95,96,97,98]),\n  ice:     new Set([36,39,41,42,43,44,45,86,87,88,89]),\n  shadow:  new Set([0,1,2,4,5,6,7,8,9,91,92,93,94,95]),\n  dragon:  new Set([43,44,48,49,77,78,88,89,121,122,123,129]),\n  space:   new Set([41,42,43,44,45,46,47,55,56,57,58,59]),\n  mythical:new Set([48,49,50,51,52,53,54,62,63,84,85,86,87]),\n};\nconst NICK_PRFX = {\n  all:['',''], solo:['Solo_','[S]'], clan:['[CLAN]','|CLN|'], duo:['[DUO]','Duo_'],\n  esports:['[ESL]','[PRO]'], pro:['PRO_','[VIP]'], streamer:['LIVE_','[YT]']\n};\n\/* ============================================================\n   STATE\n   ============================================================ *\/\nlet allNames   = [];\nlet shownNames = [];\nlet favorites  = JSON.parse(localStorage.getItem('gng_favs') || '[]');\nlet history    = JSON.parse(localStorage.getItem('gng_hist') || '[]');\nlet totalGen   = parseInt(localStorage.getItem('gng_total') || '0');\nlet sessionGen = 0;\nlet curFilter  = 'all';\nlet curTab     = 'results';\n\/* ============================================================\n   DOM REFS (DYNAMIC & NULL SAFE FOR WORDPRESS BLOCKS)\n   ============================================================ *\/\nconst _id  = id => document.getElementById(id);\nconst _all = sel => document.querySelectorAll(sel);\n\n\/* ============================================================\n   PARTICLES\n   ============================================================ *\/\nfunction initParticles() {\n  const c = _id('particles-canvas');\n  if (!c) return;\n  const ctx = c.getContext('2d');\n  let pts = [];\n  function resize() { c.width = innerWidth; c.height = innerHeight; }\n  resize();\n  addEventListener('resize', resize);\n  for (let i = 0; i < 70; i++) pts.push({\n    x: Math.random() * innerWidth, y: Math.random() * innerHeight,\n    r: Math.random() * 1.8 + 0.4,\n    vx: (Math.random() - 0.5) * 0.35, vy: (Math.random() - 0.5) * 0.35,\n    a: Math.random()\n  });\n  function draw() {\n    ctx.clearRect(0, 0, c.width, c.height);\n    pts.forEach(p => {\n      p.x += p.vx; p.y += p.vy;\n      if (p.x < 0) p.x = c.width; if (p.x > c.width) p.x = 0;\n      if (p.y < 0) p.y = c.height; if (p.y > c.height) p.y = 0;\n      ctx.beginPath(); ctx.arc(p.x, p.y, p.r, 0, Math.PI * 2);\n      ctx.fillStyle = `rgba(124,58,237,${0.35 + p.a * 0.25})`;\n      ctx.fill();\n    });\n    requestAnimationFrame(draw);\n  }\n  draw();\n}\n\n\/* ============================================================\n   TYPING ANIMATION\n   ============================================================ *\/\nfunction initTyping() {\n  const el = _id('typingText');\n  if (!el) return;\n  const txts = ['Symbols \u00b7 Fonts \u00b7 Themes \u00b7 One Click Copy','PUBG \u00b7 Free Fire \u00b7 BGMI \u00b7 Esports','100+ Unique Names Every Click!','Pro \u00b7 Solo \u00b7 Clan \u00b7 Streamer Styles','No Signup \u00b7 No Ads \u00b7 Totally Free'];\n  let ti = 0, ci = 0, del = false;\n  function type() {\n    const t = txts[ti];\n    if (!del) { el.textContent = t.slice(0, ++ci); if (ci >= t.length) { del = true; setTimeout(type, 2000); return; } }\n    else { el.textContent = t.slice(0, --ci); if (ci === 0) { del = false; ti = (ti + 1) % txts.length; } }\n    setTimeout(type, del ? 38 : 75);\n  }\n  type();\n}\n\n\/* ============================================================\n   THEME\n   ============================================================ *\/\nfunction setTheme(val) {\n  document.documentElement.setAttribute('data-theme', val);\n  const app = document.querySelector('.gng-app');\n  if (app) app.setAttribute('data-theme', val);\n}\n\n\/* ============================================================\n   COUNTER ANIMATION\n   ============================================================ *\/\nfunction animCount(el, target) {\n  if (!el) return;\n  const start = parseInt(el.textContent.replace(\/,\/g, '')) || 0;\n  if (start === target) return;\n  const diff = target - start, steps = 28;\n  let i = 0;\n  const t = setInterval(() => {\n    i++;\n    el.textContent = Math.round(start + diff * (i \/ steps)).toLocaleString();\n    if (i >= steps) { el.textContent = target.toLocaleString(); clearInterval(t); }\n  }, 18);\n}\nfunction updateCounters() {\n  animCount(_id('cntTotal'), totalGen);\n  animCount(_id('cntSession'), sessionGen);\n  animCount(_id('cntFavs'), favorites.length);\n}\n\n\/* ============================================================\n   TOAST\n   ============================================================ *\/\nfunction toast(msg, type = 'info', dur = 2600) {\n  const tc = _id('toastContainer');\n  if (!tc) return;\n  const el = document.createElement('div');\n  el.className = `toast ${type}`;\n  el.innerHTML = `<span>${{success:'\u2705',error:'\u274c',info:'\u2139\ufe0f'}[type]||'\u2139\ufe0f'}<\/span><span>${msg}<\/span>`;\n  tc.appendChild(el);\n  setTimeout(() => { el.style.opacity='0'; el.style.transform='translateY(10px)'; el.style.transition='0.3s'; setTimeout(() => el.remove(), 320); }, dur);\n}\n\n\/* ============================================================\n   CLIPBOARD\n   ============================================================ *\/\nfunction copyText(text) {\n  const txt = text.replace(\/<[^>]*>\/g, '');\n  if (navigator.clipboard) {\n    if (navigator.clipboard.writeText) {\n      navigator.clipboard.writeText(txt).then(() => toast('Copied! ' + txt.slice(0, 30), 'success')).catch(() => fallback(txt));\n      return;\n    }\n  }\n  fallback(txt);\n}\nfunction fallback(text) {\n  const ta = document.createElement('textarea');\n  ta.value = text; ta.style.cssText = 'position:fixed;opacity:0;top:0;left:0';\n  document.body.appendChild(ta); ta.select(); document.execCommand('copy');\n  document.body.removeChild(ta); toast('Copied! ' + text.slice(0, 30), 'success');\n}\n\n\/* ============================================================\n   GENERATE\n   ============================================================ *\/\nfunction generateNames(forceInput) {\n  const nameInput = _id('nameInput');\n  const nickType  = _id('nickType');\n  const loadingOvl = _id('loadingOverlay');\n  const progressFill = _id('progressFill');\n\n  const raw = (forceInput || (nameInput ? nameInput.value : '') || '').trim();\n  if (!raw) { toast('Please enter a name!', 'error'); if(nameInput) nameInput.focus(); return; }\n  const name = raw.toUpperCase();\n\n  \/\/ History\n  if (!history.includes(name)) { history.unshift(name); if (history.length > 25) history.pop(); }\n  localStorage.setItem('gng_hist', JSON.stringify(history));\n\n  if (loadingOvl) loadingOvl.classList.add('show');\n  if (progressFill) progressFill.style.width = '0%';\n\n  setTimeout(() => {\n    const type = nickType ? nickType.value : 'all';\n    const prfArr = NICK_PRFX[type] || [''];\n    const set = new Set();\n\n    \/\/ Apply all templates\n    TEMPLATES.forEach(fn => {\n      try {\n        let n = fn(name);\n        if (type !== 'all') {\n          if (Math.random() > 0.55) {\n            n = prfArr[Math.floor(Math.random() * prfArr.length)] + n;\n          }\n        }\n        if (n) {\n          if (n !== name) set.add(n);\n        }\n      } catch (e) {}\n    });\n\n    \/\/ Ensure 100+ via random prefix\/suffix combos\n    for (let i = 0; i < 80; i++) {\n      if (set.size >= 130) break;\n      const p  = SYM_PRE[Math.floor(Math.random() * SYM_PRE.length)];\n      const s  = SYM_SUF[Math.floor(Math.random() * SYM_SUF.length)];\n      const fi = Math.floor(Math.random() * FONTS.length);\n      set.add(`${p}${applyFont(name, FONTS[fi])}${s}`);\n    }\n    \/\/ Double-symbol combos\n    for (let i = 0; i < 50; i++) {\n      if (set.size >= 160) break;\n      const p1 = SYM_PRE[Math.floor(Math.random() * SYM_PRE.length)];\n      const p2 = SYM_PRE[Math.floor(Math.random() * SYM_PRE.length)];\n      const s1 = SYM_SUF[Math.floor(Math.random() * SYM_SUF.length)];\n      set.add(`${p1}${p2}${name}${s1}`);\n    }\n    \/\/ Extra emoji combos\n    for (let i = 0; i < 30; i++) {\n      if (set.size >= 180) break;\n      const fi = Math.floor(Math.random() * FONTS.length);\n      const p  = SYM_PRE[Math.floor(Math.random() * SYM_PRE.length)];\n      set.add(`${p}${applyFont(name, FONTS[fi])}`);\n    }\n\n    allNames = [...set].filter(n => {\n      if (!n) return false;\n      return n !== name;\n    });\n    totalGen += allNames.length; sessionGen += allNames.length;\n    localStorage.setItem('gng_total', totalGen);\n    updateCounters();\n\n    if (progressFill) progressFill.style.width = '100%';\n    setTimeout(() => { if (progressFill) progressFill.style.width = '0%'; }, 700);\n    if (loadingOvl) loadingOvl.classList.remove('show');\n\n    curFilter = 'all';\n    _all('.chip').forEach(c => { c.classList.remove('active'); c.setAttribute('aria-pressed', 'false'); });\n    const allChip = document.querySelector('.chip[data-filter=\"all\"]');\n    if (allChip) { allChip.classList.add('active'); allChip.setAttribute('aria-pressed', 'true'); }\n    const searchInput = _id('searchInput');\n    if (searchInput) searchInput.value = '';\n\n    shownNames = allNames;\n    renderNames(shownNames);\n    toast(`Generated ${allNames.length} unique names! \ud83c\udfae`, 'success');\n    if (curTab !== 'results') switchTab('results');\n  }, 380);\n}\n\n\/* ============================================================\n   RENDER NAMES\n   ============================================================ *\/\nconst TAGS = ['PRO','HOT','COOL','DARK','CUTE','ROYAL','EPIC','RARE','FIRE','\ud83d\udd25'];\nfunction renderNames(list) {\n  const namesGrid = _id('namesGrid');\n  const resultsCount = _id('resultsCount');\n  if (!namesGrid) return;\n  if (!list.length) {\n    namesGrid.innerHTML = `<div class=\"empty-state\"><div class=\"empty-icon\">\ud83d\udd0d<\/div><h3>No names match<\/h3><p>Try a different filter or search term.<\/p><\/div>`;\n    if (resultsCount) resultsCount.textContent = 'No names found'; return;\n  }\n  if (resultsCount) resultsCount.textContent = `${list.length} names generated`;\n  namesGrid.innerHTML = list.map((n, i) => {\n    const fav = favorites.includes(n);\n    const tag = i < 10 ? TAGS[i] : (i % 19 === 0 ? 'RARE' : (i % 13 === 0 ? 'HOT' : ''));\n    return `<article class=\"name-card\" data-name=\"${escH(n)}\" title=\"Click to copy name\" style=\"animation-delay:${Math.min(i * 0.018, 0.9)}s\" aria-label=\"Gaming name: ${escH(n)}\">\n      ${tag ? `<span class=\"card-tag\">${tag}<\/span>` : ''}\n      <span class=\"name-text\">${escH(n)}<\/span>\n      <div class=\"card-actions\">\n        <button class=\"card-btn fav-btn${fav ? ' fav-active' : ''}\" aria-label=\"${fav ? 'Remove from' : 'Add to'} favourites\" title=\"${fav ? 'Remove favourite' : 'Add favourite'}\">\u2764<\/button>\n        <button class=\"card-btn copy-btn\" aria-label=\"Copy name\" title=\"Copy\">\ud83d\udccb<\/button>\n      <\/div>\n    <\/article>`;\n  }).join('');\n}\nfunction escH(s) {\n  return String(s).replace(new RegExp('&', 'g'),'&amp;').replace(new RegExp('<', 'g'),'&lt;').replace(new RegExp('>', 'g'),'&gt;').replace(new RegExp('\"', 'g'),'&quot;');\n}\n\n\/* ============================================================\n   FAVOURITES\n   ============================================================ *\/\nfunction toggleFav(btn, name) {\n  const idx = favorites.indexOf(name);\n  if (idx >= 0) {\n    favorites.splice(idx, 1);\n    btn.classList.remove('fav-active');\n    toast('Removed from favourites', 'info');\n  } else {\n    favorites.push(name);\n    btn.classList.add('fav-active');\n    toast('Saved to favourites \u2764\ufe0f', 'success');\n  }\n  localStorage.setItem('gng_favs', JSON.stringify(favorites));\n  updateCounters();\n  if (curTab === 'favorites') renderFavs();\n}\n\nfunction renderFavs() {\n  const favsGrid = _id('favsGrid');\n  if (!favsGrid) return;\n  if (!favorites.length) {\n    favsGrid.innerHTML = `<div class=\"empty-state\"><div class=\"empty-icon\">\u2764\ufe0f<\/div><h3>No Favourites Yet<\/h3><p>Click \u2764 on any name to save it here.<\/p><\/div>`; return;\n  }\n  favsGrid.innerHTML = favorites.map(n => `<article class=\"name-card\" data-name=\"${escH(n)}\" title=\"Click to copy name\" aria-label=\"Favourite: ${escH(n)}\">\n    <span class=\"name-text\">${escH(n)}<\/span>\n    <div class=\"card-actions\">\n      <button class=\"card-btn fav-btn fav-active\" aria-label=\"Remove from favourites\" title=\"Remove favourite\">\u2764<\/button>\n      <button class=\"card-btn copy-btn\" aria-label=\"Copy name\" title=\"Copy\">\ud83d\udccb<\/button>\n    <\/div>\n  <\/article>`).join('');\n}\n\nfunction handleGridClick(e) {\n  const favBtn = e.target.closest('.fav-btn');\n  if (favBtn) {\n    const card = favBtn.closest('.name-card');\n    const name = card ? card.querySelector('.name-text')?.textContent || '' : '';\n    if (name) toggleFav(favBtn, name);\n    return;\n  }\n  const card = e.target.closest('.name-card');\n  if (card) {\n    const name = card.querySelector('.name-text')?.textContent || '';\n    if (name) copyText(name);\n  }\n}\n\n\/* ============================================================\n   FILTER & SEARCH\n   ============================================================ *\/\nfunction applyFilter() {\n  let list = allNames;\n  if (curFilter !== 'all') {\n    const idxSet = STYLE_IDX[curFilter];\n    if (idxSet) {\n      list = allNames.filter((_, i) => idxSet.has(i % TEMPLATES.length) || Math.random() > 0.72);\n      if (list.length < 8) list = allNames.slice(0, 40);\n    }\n  }\n  const searchInput = _id('searchInput');\n  const q = searchInput ? searchInput.value.trim().toLowerCase() : '';\n  if (q) list = list.filter(n => n.toLowerCase().includes(q) || n.includes(q));\n  shownNames = list;\n  renderNames(shownNames);\n}\n\n\/* ============================================================\n   TABS\n   ============================================================ *\/\nfunction switchTab(tab) {\n  curTab = tab;\n  _all('.tab').forEach(t => { t.classList.remove('active'); t.setAttribute('aria-selected', 'false'); });\n  document.querySelectorAll('[id^=\"panel-\"]').forEach(p => p.style.display = 'none');\n  const tabEl = document.querySelector(`[data-tab=\"${tab}\"]`);\n  if (tabEl) { tabEl.classList.add('active'); tabEl.setAttribute('aria-selected', 'true'); }\n  const panel = _id(`panel-${tab}`);\n  if (panel) panel.style.display = '';\n  if (tab === 'favorites') renderFavs();\n  if (tab === 'fonts') renderFontGrid();\n  if (tab === 'symbols') renderSymbols();\n  if (tab === 'history') renderHistory();\n}\n\n\/* ============================================================\n   FONT GRID\n   ============================================================ *\/\nfunction renderFontGrid() {\n  const fontGrid = _id('fontGrid');\n  if (!fontGrid) return;\n  const nameInput = _id('nameInput');\n  const sample = ((nameInput ? nameInput.value : '') || 'GAMING').trim().toUpperCase();\n  fontGrid.innerHTML = FONTS.map(f => {\n    const fontVal = applyFont(sample, f);\n    return `<div class=\"font-item\" data-text=\"${escH(fontVal)}\" role=\"button\" tabindex=\"0\" aria-label=\"Font: ${f.name}, click to copy\">\n      <div class=\"font-name\">${f.name}<\/div>\n      <div class=\"font-sample\">${escH(fontVal)}<\/div>\n    <\/div>`;\n  }).join('');\n}\n\n\/* ============================================================\n   SYMBOL GRIDS\n   ============================================================ *\/\nfunction symBtn(s) {\n  return `<button class=\"sym-btn\" data-sym=\"${escH(s)}\" title=\"Copy ${s}\" aria-label=\"Copy ${s}\">${escH(s)}<\/button>`;\n}\nfunction renderSymbols() {\n  const grids = { symGrid1: SYMS_GAMING, symGrid2: SYMS_STARS, symGrid3: SYMS_BATTLE, symGrid4: SYMS_ANIME, symGrid5: SYMS_MYSTIC };\n  for (const [id, arr] of Object.entries(grids)) {\n    const el = _id(id);\n    if (el) el.innerHTML = arr.map(symBtn).join('');\n  }\n}\n\n\/* ============================================================\n   HISTORY\n   ============================================================ *\/\nfunction renderHistory() {\n  const el = _id('historyChips');\n  if (!el) return;\n  if (!history.length) { el.innerHTML = '<p style=\"color:var(--text-muted);font-size:.85rem\">No history yet.<\/p>'; return; }\n  el.innerHTML = history.map(h =>\n    `<button class=\"hist-chip\" data-hist=\"${escH(h)}\" aria-label=\"Search again for ${h}\">${escH(h)}<\/button>`\n  ).join('');\n}\n\n\/* ============================================================\n   INIT APP (SAFE FOR WORDPRESS GUTENBERG & ALL THEMES)\n   ============================================================ *\/\nfunction initGngApp() {\n  initParticles();\n  initTyping();\n\n  const themeSelect = _id('themeSelect');\n  if (themeSelect) {\n    themeSelect.addEventListener('change', function () {\n      setTheme(this.value);\n      localStorage.setItem('gng_theme', this.value);\n    });\n    const storedTheme = localStorage.getItem('gng_theme') || '';\n    setTheme(storedTheme);\n    themeSelect.value = storedTheme;\n  }\n\n  const namesGrid = _id('namesGrid');\n  const favsGrid  = _id('favsGrid');\n  if (namesGrid) namesGrid.addEventListener('click', handleGridClick);\n  if (favsGrid)  favsGrid.addEventListener('click', handleGridClick);\n\n  _all('.chip').forEach(chip => {\n    chip.addEventListener('click', function () {\n      _all('.chip').forEach(c => { c.classList.remove('active'); c.setAttribute('aria-pressed', 'false'); });\n      this.classList.add('active'); this.setAttribute('aria-pressed', 'true');\n      curFilter = this.dataset.filter; applyFilter();\n    });\n  });\n\n  const searchInput = _id('searchInput');\n  if (searchInput) searchInput.addEventListener('input', applyFilter);\n\n  const luckyBtn = _id('luckyBtn');\n  if (luckyBtn) {\n    luckyBtn.addEventListener('click', () => {\n      const nameInput = _id('nameInput');\n      const raw = (nameInput ? nameInput.value : '').trim() || 'LEGEND';\n      const name = raw.toUpperCase();\n      const p  = SYM_PRE[Math.floor(Math.random() * SYM_PRE.length)];\n      const s  = SYM_SUF[Math.floor(Math.random() * SYM_SUF.length)];\n      const fi = Math.floor(Math.random() * FONTS.length);\n      const lucky = `${p}${applyFont(name, FONTS[fi])}${s}`;\n      toast('\ud83c\udfb2 Lucky: ' + lucky, 'success', 4000);\n      copyText(lucky);\n    });\n  }\n\n  const generateBtn = _id('generateBtn');\n  if (generateBtn) {\n    generateBtn.addEventListener('click', function (e) {\n      const r = document.createElement('span');\n      r.className = 'ripple';\n      const rect = this.getBoundingClientRect();\n      const size = 100;\n      r.style.width = r.style.height = size + 'px';\n      r.style.left = `${e.clientX - rect.left - size \/ 2}px`;\n      r.style.top  = `${e.clientY - rect.top - size \/ 2}px`;\n      this.appendChild(r); setTimeout(() => r.remove(), 600);\n      generateNames();\n    });\n  }\n\n  const nameInput = _id('nameInput');\n  if (nameInput) {\n    nameInput.addEventListener('keydown', e => { if (e.key === 'Enter') generateNames(); });\n  }\n\n  const exportBtn  = _id('exportBtn');\n  const printBtn   = _id('printBtn');\n  const shareBtn   = _id('shareBtn');\n  const copyAllBtn = _id('copyAllBtn');\n  const moreBtn    = _id('moreBtn');\n\n  if (exportBtn) {\n    exportBtn.addEventListener('click', () => {\n      if (!allNames.length) { toast('Generate names first!', 'error'); return; }\n      const blob = new Blob([allNames.join('\\n')], { type: 'text\/plain;charset=utf-8' });\n      const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = 'gaming-names.txt'; a.click(); URL.revokeObjectURL(a.href);\n      toast('Downloaded gaming-names.txt', 'success');\n    });\n  }\n\n  if (printBtn) {\n    printBtn.addEventListener('click', () => {\n      if (!allNames.length) { toast('Generate names first!', 'error'); return; }\n      const w = window.open('', '_blank');\n      w.document.write(`<!DOCTYPE html><html><head><title>Gaming Names<\/title><style>body{font-family:sans-serif;padding:30px;background:#fff}h1{margin-bottom:20px;color:#333}p{margin:6px 0;font-size:14px;padding:6px;border-bottom:1px solid #eee}<\/style><\/head><body><h1>My Gaming Names<\/h1>${allNames.map(n => `<p>${n}<\/p>`).join('')}<\/body><\/html>`);\n      w.print();\n    });\n  }\n\n  if (shareBtn) {\n    shareBtn.addEventListener('click', () => {\n      const url = location.href;\n      if (navigator.share) { navigator.share({ title: 'Gaming Name Generator', url }).catch(() => {}); }\n      else { copyText(url); toast('Page URL copied!', 'success'); }\n    });\n  }\n\n  if (copyAllBtn) {\n    copyAllBtn.addEventListener('click', () => {\n      if (!allNames.length) { toast('Generate names first!', 'error'); return; }\n      copyText(allNames.join('\\n'));\n      toast(`All ${allNames.length} names copied!`, 'success');\n    });\n  }\n\n  if (moreBtn) {\n    moreBtn.addEventListener('click', () => {\n      const nameInput = _id('nameInput');\n      if (!nameInput || !nameInput.value.trim()) { toast('Enter a name first!', 'error'); return; }\n      generateNames();\n    });\n  }\n\n  _all('.tab').forEach(t => t.addEventListener('click', () => switchTab(t.dataset.tab)));\n\n  const fontGridEl = _id('fontGrid');\n  if (fontGridEl) {\n    fontGridEl.addEventListener('click', e => {\n      const item = e.target.closest('.font-item');\n      if (item) {\n        const text = item.dataset.text || item.querySelector('.font-sample')?.textContent || '';\n        if (text) copyText(text);\n      }\n    });\n  }\n\n  const symPanelEl = _id('panel-symbols');\n  if (symPanelEl) {\n    symPanelEl.addEventListener('click', e => {\n      const btn = e.target.closest('.sym-btn');\n      if (btn) {\n        const sym = btn.dataset.sym || btn.textContent.trim();\n        if (sym) copyText(sym);\n      }\n    });\n  }\n\n  const historyChipsEl = _id('historyChips');\n  if (historyChipsEl) {\n    historyChipsEl.addEventListener('click', e => {\n      const chip = e.target.closest('.hist-chip');\n      if (chip) {\n        const h = chip.dataset.hist || chip.textContent.trim();\n        if (h) {\n          const nameInput = _id('nameInput');\n          if (nameInput) nameInput.value = h;\n          generateNames(h);\n        }\n      }\n    });\n  }\n\n  const clearHistBtn = _id('clearHistBtn');\n  if (clearHistBtn) {\n    clearHistBtn.addEventListener('click', () => {\n      history = []; localStorage.setItem('gng_hist', '[]'); renderHistory(); toast('History cleared', 'info');\n    });\n  }\n\n  const clearFavsBtn = _id('clearFavsBtn');\n  if (clearFavsBtn) {\n    clearFavsBtn.addEventListener('click', () => {\n      if (!favorites.length) { toast('No favourites to clear', 'info'); return; }\n      if (!confirm('Clear all favourites?')) return;\n      favorites = []; localStorage.setItem('gng_favs', '[]');\n      renderFavs(); updateCounters(); toast('Favourites cleared', 'info');\n    });\n  }\n\n  document.addEventListener('keydown', e => {\n    const nameInput = _id('nameInput');\n    const searchInput = _id('searchInput');\n    if (document.activeElement === nameInput || document.activeElement === searchInput) return;\n    if (e.ctrlKey || e.metaKey) {\n      if (e.key.toLowerCase() === 'f') {\n        e.preventDefault(); if (searchInput) searchInput.focus(); switchTab('results'); return;\n      }\n    }\n    if (!e.ctrlKey) {\n      if (!e.metaKey) {\n        if (!e.altKey) {\n          if (e.key.toLowerCase() === 'g') generateNames();\n          if (e.key.toLowerCase() === 'l') { const luckyBtn = _id('luckyBtn'); if (luckyBtn) luckyBtn.click(); }\n        }\n      }\n    }\n  });\n\n  updateCounters();\n  renderHistory();\n  renderFontGrid();\n  renderSymbols();\n}\n\nif (document.readyState === 'complete' || document.readyState === 'interactive') {\n  setTimeout(initGngApp, 1);\n} else {\n  document.addEventListener('DOMContentLoaded', initGngApp);\n}\n})();\n<\/script>\n<\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>\u2694\ufe0f pikachoo.in Stylish Name Generator \ud83c\udfa8 Default (Violet)\u26ab Dark\ud83d\udda4 Black\ud83d\udc9c Purple\u2764\ufe0f Red\ud83d\udc99 Blue\ud83d\udc9a Neon Green\ud83d\udc9b Cyberpunk G Generate &nbsp;L Lucky &nbsp;Ctrl+F Search \u26a1 Premium Gaming Name Generator \u2014 100% Free Create Your LegendaryGaming Identity Generate 100+ unique stylish names for PUBG, Free Fire, BGMI &amp; all games.Symbols \u00b7 Fonts \u00b7 Themes \u00b7 One Click Copy &#8230; <a title=\"Home\" class=\"read-more\" href=\"https:\/\/pikachoo.in\/\" aria-label=\"Read more about Home\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-10","page","type-page","status-publish"],"_links":{"self":[{"href":"https:\/\/pikachoo.in\/index.php?rest_route=\/wp\/v2\/pages\/10","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pikachoo.in\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/pikachoo.in\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/pikachoo.in\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pikachoo.in\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10"}],"version-history":[{"count":5,"href":"https:\/\/pikachoo.in\/index.php?rest_route=\/wp\/v2\/pages\/10\/revisions"}],"predecessor-version":[{"id":22,"href":"https:\/\/pikachoo.in\/index.php?rest_route=\/wp\/v2\/pages\/10\/revisions\/22"}],"wp:attachment":[{"href":"https:\/\/pikachoo.in\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}