<!–
Nolvyn long description for top.gg (Edit bot → Long description, HTML).
Before pasting: replace every https://nolvyn.top with the real site URL, 1565365170480357587 with the bot’s ID,
and https://nolvyn.top/invite with the support server invite.
top.gg allows <style> but no scripts, so all interaction is CSS (:hover, <details>).
Selectors use .nv:not(#) so top.gg’s own styles cannot override them.
–>
<style>
@import url(‘https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600&family=Geist+Mono:wght@500&display=swap’);
.nv:not(#){–bg:#111214;–s1:#16171a;–s2:#1b1c20;–s3:#232428;–line:#2c2e33;–v:#7c5cff;–v-btn:#6a48f5;–v-hover:#5a39e0;–v-text:#9a85ff;–fg:#ececf1;–muted:#93959f;–warn:#f5b84b;
container:nv / inline-size;font-family:‘Geist’,system-ui,-apple-system,‘Segoe UI’,sans-serif;font-size:15px;line-height:1.6;color:var(–fg);text-align:left;-webkit-font-smoothing:antialiased;background:var(–bg);border-radius:24px;padding:40px 28px;border:1px solid var(–line)}
.nv:not(#) *{box-sizing:border-box}
.nv:not(#) :where(h2,h3,h4,p,ul,li,dl,dd,dt,figure){margin:0;padding:0;border:0;font:inherit;color:inherit;background:none;list-style:none}
.nv:not(#) a{color:inherit;text-decoration:none}
.nv:not(#) b{font-weight:600;color:var(–fg)}
.nv:not(#) .mono{font-family:‘Geist Mono’,ui-monospace,Consolas,monospace;font-size:13px;color:var(–muted)}
.nv:not(#) .sec{margin-top:72px}
.nv:not(#) .h1{font-size:44px;line-height:1.04;font-weight:500;letter-spacing:-.035em;margin-top:14px;max-width:640px}
.nv:not(#) .h2{font-size:28px;line-height:1.15;font-weight:500;letter-spacing:-.025em;margin-top:6px}
.nv:not(#) .lead{margin-top:14px;color:var(–muted);font-size:17px;max-width:560px}
.nv:not(#) .sub{margin-top:8px;color:var(–muted);max-width:560px}
.nv:not(#) .logo{display:flex;align-items:center;gap:10px;font-weight:600;font-size:17px;letter-spacing:-.01em}
.nv:not(#) .btns{display:flex;flex-wrap:wrap;gap:12px;margin-top:28px}
.nv:not(#) .btn{display:inline-flex;align-items:center;gap:8px;height:44px;padding:0 20px;border-radius:10px;font-size:14px;font-weight:500;transition:background-color .2s,transform .2s}
.nv:not(#) .btn:active{transform:scale(.97)}
.nv:not(#) .btn-p{background:var(–v-btn);color:#fff}
.nv:not(#) .btn-p:hover{background:var(–v-hover)}
.nv:not(#) .btn-s{border:1px solid var(–line);color:var(–fg)}
.nv:not(#) .btn-s:hover{background:var(–s3)}
.nv:not(#) .btn .arr{transition:transform .2s}
.nv:not(#) .btn:hover .arr{transform:translateX(3px)}
.nv:not(#) .stats{display:flex;flex-wrap:wrap;gap:10px 32px;margin-top:32px}
.nv:not(#) .stat b{display:block;font-size:24px;font-weight:500;letter-spacing:-.02em}
.nv:not(#) .stat span{font-size:13px;color:var(–muted)}
.nv:not(#) .groups{display:grid;gap:36px 40px;margin-top:32px;grid-template-columns:1fr}
.nv:not(#) .group h3{font-size:13px;color:var(–muted)}
.nv:not(#) .mods{margin-top:10px;border-top:1px solid var(–line)}
.nv:not(#) .mod{display:block;padding:12px 10px;margin:0 -10px;border-bottom:1px solid var(–line);border-radius:8px;transition:background-color .2s}
.nv:not(#) .mod:hover{background:var(–s2)}
.nv:not(#) .mod b{font-weight:500}
.nv:not(#) .mod span{display:block;font-size:14px;color:var(–muted)}
.nv:not(#) .mod .tag{display:inline;margin-left:8px;font-size:12px;color:var(–v-text)}
.nv:not(#) .shots{display:grid;gap:20px;margin-top:32px;grid-template-columns:1fr}
.nv:not(#) .win{background:var(–s1);border:1px solid var(–line);border-radius:16px;overflow:hidden;transition:transform .3s cubic-bezier(.2,.8,.2,1),border-color .3s}
.nv:not(#) .win:hover{transform:translateY(-4px);border-color:#3a3c43}
.nv:not(#) .bar{display:flex;gap:8px;padding:11px 16px;border-bottom:1px solid var(–line);font-size:14px;font-weight:500}
.nv:not(#) .bar i{font-style:normal;color:var(–muted)}
.nv:not(#) .body{padding:16px}
.nv:not(#) .msg{display:flex;gap:12px}
.nv:not(#) .msg+.msg{margin-top:14px}
.nv:not(#) .grow{flex:1;min-width:0}
.nv:not(#) .av{flex:none;width:36px;height:36px;border-radius:50%}
.nv:not(#) .av-u{display:grid;place-items:center;background:var(–s3);color:var(–muted);font-size:12px;font-weight:600}
.nv:not(#) .who{font-size:14px;display:flex;align-items:center;gap:8px}
.nv:not(#) .app{background:var(–v-btn);color:#fff;font-size:10px;font-weight:600;border-radius:4px;padding:1px 4px}
.nv:not(#) .time{font-size:12px;color:var(–muted)}
.nv:not(#) .txt{font-size:14px;color:#dcdce2;margin-top:2px}
.nv:not(#) .men{background:rgba(124,92,255,.2);color:var(–v-text);border-radius:4px;padding:0 2px}
.nv:not(#) .emb{margin-top:8px;background:var(–s2);border-left:4px solid var(–v);border-radius:6px;padding:12px;font-size:14px;max-width:360px}
.nv:not(#) .emb.warn-c{border-left-color:var(–warn)}
.nv:not(#) .emb .t{font-weight:600}
.nv:not(#) .emb .d{margin-top:6px;color:#d6d6dc}
.nv:not(#) .emb .f{margin-top:8px;font-size:12px;color:var(–muted)}
.nv:not(#) .fields{display:grid;grid-template-columns:1fr 1fr;gap:8px 16px;margin-top:8px}
.nv:not(#) .fields dt{font-size:12px;font-weight:600;color:var(–muted)}
.nv:not(#) .fields .wide{grid-column:span 2}
.nv:not(#) .cbtns{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.nv:not(#) .cb{display:inline-flex;align-items:center;height:32px;padding:0 12px;border-radius:6px;font-size:14px;font-weight:500;background:var(–s3)}
.nv:not(#) .cb-p{background:var(–v-btn);color:#fff}
.nv:not(#) .rank{display:flex;align-items:center;gap:14px;margin-top:8px;max-width:360px;background:var(–s1);border:1px solid var(–line);border-radius:12px;padding:14px}
.nv:not(#) .rank .av{width:52px;height:52px}
.nv:not(#) .rank .top{display:flex;justify-content:space-between;gap:8px;font-size:14px}
.nv:not(#) .rank .lv{font-size:12px;font-weight:600;color:var(–muted)}
.nv:not(#) .rank .lv em{font-style:normal;color:var(–v-text)}
.nv:not(#) .track{height:10px;border-radius:99px;background:var(–line);margin-top:8px;overflow:hidden}
.nv:not(#) .track div{height:100%;width:61%;border-radius:99px;background:var(–v)}
.nv:not(#) .xp{text-align:right;font-size:12px;color:var(–muted);margin-top:4px}
.nv:not(#) .points{display:grid;gap:24px;margin-top:32px;grid-template-columns:1fr}
.nv:not(#) .pt{border-top:1px solid var(–line);padding-top:16px}
.nv:not(#) .pt p{margin-top:4px;color:var(–muted);font-size:14px}
.nv:not(#) .plans{display:grid;gap:16px;margin-top:32px;grid-template-columns:1fr}
.nv:not(#) .plan{background:var(–s2);border:1px solid var(–line);border-radius:16px;padding:28px}
.nv:not(#) .plan .price{font-size:32px;font-weight:500;letter-spacing:-.025em;margin-top:6px}
.nv:not(#) .plan ul{margin-top:18px}
.nv:not(#) .plan li{position:relative;padding-left:18px;font-size:14px;color:#dcdce2}
.nv:not(#) .plan li+li{margin-top:9px}
.nv:not(#) .plan li::before{content:"";position:absolute;left:0;top:.62em;width:6px;height:6px;border-radius:50%;background:var(–muted)}
.nv:not(#) .warn{color:var(–warn)}
.nv:not(#) .faq{margin-top:24px;border-top:1px solid var(–line)}
.nv:not(#) details{border-bottom:1px solid var(–line)}
.nv:not(#) summary{cursor:pointer;list-style:none;display:flex;justify-content:space-between;gap:16px;padding:16px 0;font-weight:500}
.nv:not(#) summary::-webkit-details-marker{display:none}
.nv:not(#) summary::after{content:"+";color:var(–muted);font-weight:400;transition:transform .25s}
.nv:not(#) details[open] summary::after{transform:rotate(45deg)}
.nv:not(#) details p{padding:0 0 16px;color:var(–muted);font-size:14px;max-width:620px}
.nv:not(#) .cta{margin-top:72px;background:var(–s2);border:1px solid var(–line);border-radius:20px;padding:36px 24px;text-align:center}
.nv:not(#) .cta .sub{margin-left:auto;margin-right:auto}
.nv:not(#) .cta .btns{justify-content:center}
.nv:not(#) .foot{display:flex;flex-wrap:wrap;gap:8px 22px;justify-content:center;margin-top:28px;font-size:14px;color:var(–muted)}
.nv:not(#) .foot a:hover{color:var(–fg)}
@container nv (min-width:640px){
.nv:not(#){padding:56px 48px}
.nv:not(#) .h1{font-size:56px}
.nv:not(#) .h2{font-size:34px}
.nv:not(#) .groups,.nv:not(#) .shots,.nv:not(#) .points,.nv:not(#) .plans{grid-template-columns:1fr 1fr}
}
@media (prefers-reduced-motion:reduce){.nv:not(#_) *{transition:none!important}}
</style>
<div class=“nv”>
<div class=“logo”>
<svg viewBox=“0 0 64 64” width=“32” height=“32” aria-hidden=“true”><rect width=“64” height=“64” rx=“16” fill="#7C5CFF"/><rect x=“38” y=“16” width=“10” height=“32” rx=“2” fill="#fff" fill-opacity=“0.5”/><rect x=“16” y=“16” width=“10” height=“32” rx=“2” fill="#fff"/><path d=“M16 18a2 2 0 0 1 2-2h6.2a2 2 0 0 1 1.7.95L48 46a2 2 0 0 1-2 2h-6.2a2 2 0 0 1-1.7-.95L16 18z” fill="#fff"/></svg>
Nolvyn
</div>
<h2 class=“h1”>Moderation, levels and tickets for your Discord server.</h2>
<p class=“lead”>Switch on the features you need from a web dashboard and leave the rest off. Every core feature is free.</p>
<div class=“btns”>
<a class=“btn btn-p” href=“https://nolvyn.top/invite”>Add to Discord <span class=“arr”>→</span></a>
<a class=“btn btn-s” href=“https://nolvyn.top/dashboard”>Open the dashboard</a>
</div>
<div class=“stats”>
<div class=“stat”><b>15</b><span>modules</span></div>
<div class=“stat”><b>24</b><span>slash commands</span></div>
<div class=“stat”><b>€0</b><span>for every core feature</span></div>
</div>
<div class=“sec”>
<p class=“mono”># features</p>
<h2 class=“h2”>What Nolvyn does</h2>
<p class=“sub”>Each module has its own settings and its own switch. Turn on only what your server needs.</p>
<div class=“groups”>
<div class=“group”>
<h3>Keep it safe</h3>
<div class=“mods”>
<a class=“mod” href=“https://nolvyn.top/docs/moderation”><b>Moderation</b><span>Bans, kicks, timeouts and warnings, each one written down as a numbered case.</span></a>
<a class=“mod” href=“https://nolvyn.top/docs/automod”><b>AutoMod and raid protection</b><span>Catches spam, junk links and raids while your moderators are asleep.</span></a>
</div>
<h3 style=“margin-top:28px”>Support and voice</h3>
<div class=“mods”>
<a class=“mod” href=“https://nolvyn.top/docs/tickets”><b>Tickets</b><span>Private support channels, opened with one click and saved when they close.</span></a>
<a class=“mod” href=“https://nolvyn.top/docs/temp-voice”><b>Temp Voice</b><span>Join one channel, get a voice room of your own. Rename, lock or limit it with /room.</span></a>
</div>
</div>
<div class=“group”>
<h3>Grow the community</h3>
<div class=“mods”>
<a class=“mod” href=“https://nolvyn.top/docs/welcome”><b>Welcome</b><span>Say hello to new members, give them their first roles, and notice when people leave.</span></a>
<a class=“mod” href=“https://nolvyn.top/docs/leveling”><b>Leveling</b><span>Members earn XP for taking part, level up, and unlock roles along the way.</span></a>
<a class=“mod” href=“https://nolvyn.top/docs/reaction-roles”><b>Reaction Roles</b><span>Let members pick their own roles with buttons, a menu or reactions.</span></a>
<a class=“mod” href=“https://nolvyn.top/docs/giveaways”><b>Giveaways</b><span>Free-entry giveaways with an Enter button. Winners are drawn on their own.</span></a>
<a class=“mod” href=“https://nolvyn.top/docs/voice”><b>Voice Tracking<span class=“tag”>Premium</span></b><span>Counts time spent in voice, with a leaderboard for your regulars.</span></a>
</div>
</div>
<div class=“group”>
<h3>Automate</h3>
<div class=“mods”>
<a class=“mod” href=“https://nolvyn.top/docs/custom-commands”><b>Custom Commands</b><span>Your own slash commands for the answers you keep typing.</span></a>
<a class=“mod” href=“https://nolvyn.top/docs/automations”><b>Automations<span class=“tag”>Premium</span></b><span>When something happens, check a few things, then do something. No code.</span></a>
<a class=“mod” href=“https://nolvyn.top/docs/scheduled”><b>Scheduled Messages</b><span>Post something once at a set time, or on a repeat.</span></a>
</div>
</div>
<div class=“group”>
<h3>Stay in the loop</h3>
<div class=“mods”>
<a class=“mod” href=“https://nolvyn.top/docs/social”><b>Social Notifications</b><span>YouTube, Twitch, Kick, Bluesky and RSS alerts in your server.</span></a>
<a class=“mod” href=“https://nolvyn.top/docs/stat-channels”><b>Stat Channels</b><span>Live counts in your channel list, like “Members: 1,284”.</span></a>
<a class=“mod” href=“https://nolvyn.top/docs/utility”><b>Utility and reminders</b><span>The small everyday commands, plus reminders.</span></a>
</div>
</div>
</div>
</div>
<div class=“sec”>
<p class=“mono”># in-your-server</p>
<h2 class=“h2”>What it looks like in Discord</h2>
<p class=“sub”>Messages Nolvyn posts, shown with example names.</p>
<div class=“shots”>
<figure class=“win”>
<div class=“bar”><i>#</i>support</div>
<div class=“body”>
<div class=“msg”><svg class=“av” viewBox=“0 0 64 64” aria-hidden=“true”><rect width=“64” height=“64” rx=“32” fill="#7C5CFF"/><rect x=“38” y=“16” width=“10” height=“32” rx=“2” fill="#fff" fill-opacity=“0.5”/><rect x=“16” y=“16” width=“10” height=“32” rx=“2” fill="#fff"/><path d=“M16 18a2 2 0 0 1 2-2h6.2a2 2 0 0 1 1.7.95L48 46a2 2 0 0 1-2 2h-6.2a2 2 0 0 1-1.7-.95L16 18z” fill="#fff"/></svg>
<div class=“grow”><p class=“who”><b>Nolvyn</b><span class=“app”>APP</span><span class=“time”>Today at 09:00</span></p>
<div class=“emb”><p class=“t”>Need help?</p><p class=“d”>Click a button below to open a private ticket with our staff.</p></div>
<div class=“cbtns”><span class=“cb cb-p”>🎫 Support</span><span class=“cb”>🚩 Report</span></div></div></div>
</div>
</figure>
<figure class=“win”>
<div class=“bar”><i>#</i>level-ups</div>
<div class=“body”>
<div class=“msg”><span class=“av av-u”>NO</span><div class=“grow”><p class=“who”><b>nova</b><span class=“time”>Today at 19:12</span></p><p class=“txt”>/rank</p></div></div>
<div class=“msg”><svg class=“av” viewBox=“0 0 64 64” aria-hidden=“true”><rect width=“64” height=“64” rx=“32” fill="#7C5CFF"/><rect x=“38” y=“16” width=“10” height=“32” rx=“2” fill="#fff" fill-opacity=“0.5”/><rect x=“16” y=“16” width=“10” height=“32” rx=“2” fill="#fff"/><path d=“M16 18a2 2 0 0 1 2-2h6.2a2 2 0 0 1 1.7.95L48 46a2 2 0 0 1-2 2h-6.2a2 2 0 0 1-1.7-.95L16 18z” fill="#fff"/></svg>
<div class=“grow”><p class=“who”><b>Nolvyn</b><span class=“app”>APP</span><span class=“time”>Today at 19:12</span></p>
<div class=“rank”><span class=“av av-u”>NO</span><div class=“grow”><div class=“top”><b>nova</b><span class=“lv”><em>RANK #2</em> LEVEL 12</span></div><div class=“track”><div></div></div><p class=“xp”>860 / 1,420 XP</p></div></div></div></div>
</div>
</figure>
<figure class=“win”>
<div class=“bar”><i>#</i>mod-log</div>
<div class=“body”>
<div class=“msg”><svg class=“av” viewBox=“0 0 64 64” aria-hidden=“true”><rect width=“64” height=“64” rx=“32” fill="#7C5CFF"/><rect x=“38” y=“16” width=“10” height=“32” rx=“2” fill="#fff" fill-opacity=“0.5”/><rect x=“16” y=“16” width=“10” height=“32” rx=“2” fill="#fff"/><path d=“M16 18a2 2 0 0 1 2-2h6.2a2 2 0 0 1 1.7.95L48 46a2 2 0 0 1-2 2h-6.2a2 2 0 0 1-1.7-.95L16 18z” fill="#fff"/></svg>
<div class=“grow”><p class=“who”><b>Nolvyn</b><span class=“app”>APP</span><span class=“time”>Today at 20:44</span></p>
<div class=“emb warn-c”><p class=“t”>Case #128 · Timeout</p>
<dl class=“fields”><div><dt>Member</dt><dd><span class=“men”>@nova</span></dd></div><div><dt>Moderator</dt><dd>AutoMod</dd></div><div><dt>Duration</dt><dd>10m</dd></div><div class=“wide”><dt>Reason</dt><dd>AutoMod: Invite link</dd></div></dl></div></div></div>
</div>
</figure>
<figure class=“win”>
<div class=“bar”><i>#</i>giveaways</div>
<div class=“body”>
<div class=“msg”><svg class=“av” viewBox=“0 0 64 64” aria-hidden=“true”><rect w