Compare commits

..
2 Commits
Author SHA1 Message Date
Eric WagonerandClaude Fable 5 33e57b81a6 Add Dip announcement post
"I built Diplomacy for the browser. Come play." — the story of thirty
years with the game and the launch of dip.kestrelsnest.social, with
screenshots and the Chromatic board as the Open Graph image.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-30 00:30:50 -04:00
Eric WagonerandClaude Opus 5.5 ed75f77859 Kestrel's Hall has moved to its own host; the blog's copy points there
The share image stays, for previews that already link to it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-26 12:17:59 -04:00
17 changed files with 74 additions and 281 deletions

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 536 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

@@ -0,0 +1,67 @@
---
title: "I built Diplomacy for the browser. Come play."
date: 2026-09-30T00:07:00-04:00
draft: false
description: "Dip is free browser Diplomacy with no accounts: play with friends at any pace, or against house players who negotiate in plain English, remember every promise, and sometimes break them."
images:
- /posts/2026-09-30-i-built-diplomacy-for-the-browser/dip-chromatic-board.png
tags:
- projects
- games
- diplomacy
- programming
---
*Dip is free, runs in your browser, and needs no account: **[dip.kestrelsnest.social](https://dip.kestrelsnest.social)**. Play it with friends, or against house players who negotiate, remember your promises, and sometimes break them. Here's why I made it.*
{{< img src="dip-uv6g-final-board.png" alt="The final board of a Dip game: Austria's red armies and fleets stretch from Norway and St Petersburg across Warsaw, Munich and Vienna down through the Balkans, Turkey and southern Italy, while France holds the west and England clings to Britain and Sweden." caption="The final board of my last game. Red is me: Austria, 19 centers, from Norway to Smyrna." >}}
## My history with Diplomacy
**High school.** Ryan, one of my closest friends, made contact with a similar friend group two towns over who played this game called *Diplomacy*. No dice, no luck, just seven people sitting around a map making deals while trying to take over Europe. It can take a whole day to play. So he worked out a time, and he and I and our mutual best friend Scott drove over to play. It felt so grown up to go to another town on our own to play games, and the game itself captivated me from the first turn. I don't remember who won (but I do, weirdly enough, remember stopping for lunch and getting sandwiches from Subway, which seemed so urban; there was no sandwich shop within a half hour's drive of my very rural house at the time), but I'd had my first taste of the game and I was hooked. I think we played a couple more times, but I can't even be sure of that. By the following year I had moved across the country for college, so I never got to develop my skills with Scott and Ryan, much less the folks from two towns over.
**College.** My friend group loved board games. Our go-to was Wiz-War, brought by Jason from California, because we could fly through two or three games in thirty minutes and have a riotous good time doing it. Our college (and the town it was in) was very small and the nearest game shop was about two hours away, so we founded a gaming club and landed a budget from the student association to stock a closet full of games. Diplomacy was one of the first I bought (along with Civilization, another all-day affair that was much more complicated, with tons of fiddly bits). I don't know how we found time for all the gaming we did, but we probably played hundreds of games of Diplomacy. The obsession never let go, and… I got quite good. I'm an introverted autistic fellow, but something about the coordination and talking and planning and strategy and execution complemented my brain and personality exceptionally well.
My school, New Mexico Tech, was one of the country's premier research universities, and its location in central New Mexico (including being home to the Very Large Array radio telescope, the thing that brought me to the school) put it right on the backbone of the young internet. Newsgroups (essentially single-topic bulletin boards) caught my attention, and one I spent the most time in was dedicated to Diplomacy. There was a whole world of folks who loved the game as much as I did (and some so much more), and I soaked up analysis of strategy, discussions of alliances and gambits, and virtually met a ton of people who loved the game, but sadly I could never play them.
Except I could! Of course there were people running play-by-mail games, but I'm a horrific pen pal and that kind of dedication was out of the question. But Ken Lowe, a programmer in Washington State, had written software that could automatically process emailed orders, coordinate communication between players, and adjudicate turns: a "judge." It ran on Unix systems just like the one at our school, and his system needed to wind down, so a handful of other judges were being set up around the world to pick up the slack. I happened to get hired at the computer center and had enough access to install and set up the software, so in March of 1993, USNM went live as the fifth or sixth judge. I was its maintainer (and learned the basics of sysops and Unix programming that keep me employed to this day) while I played countless games on the others. At one point I was playing a dozen games at once, which wasn't all that hard considering most had 48 hours between turns. The software supported variants of the game on all sorts of maps and settings, including one I helped get running on my judge that became my favorite: Chromatic, five Italys arranged around a central Switzerland like spokes on a wheel. Of all the maps, it was the only one I printed out and laminated to a board so my local group could play in person. I wasn't just playing a game I loved; I was contributing to a worldwide hobby in a way that was brand new to me.
{{< img src="dip-chromatic-board.png" alt="The Chromatic board in Dip: a circular map where five colored, Italy-shaped peninsulas radiate like spokes from a shared center, ringed by seas and small island supply centers, with red armies spread through the middle of the wheel." caption="Chromatic, the map I once laminated to a board, now in the browser." >}}
One fun anecdote: my judge only ever hosted fifty or so games at any given time. It was one of the smaller judges, and I kept it that way on purpose. It had a reputation for being maybe the fastest to process mail, thanks to our spot on the backbone, and positions in games there were highly sought after. I wasn't a system administrator, but I did have maybe more access than my help desk position warranted, and I didn't exactly ask permission to install the judge. Surely one little program that just sends and receives email could fly under the radar, right? One day word got back to me that some friends who *were* system administrators were trying to track down some unusual traffic on the network, and they'd traced it to my judge. I went to let them know it was harmless and just running Diplomacy games (I'm certain every one of them had played with me at a real table more than once), and they were fine with the concept but incredulous at the amount of email it was consuming and sending. I don't recall the number they threw at me, and it didn't seem like all that much, until they told me it accounted for 10% of all the email going in and out of the university. That put it into perspective, and I limited the games it could host even more. A few years later, as I graduated and lost the access I had, I spun it down altogether.
In 1997, I moved to Athens, Georgia. The night before I drove the moving truck out of town, I was with a big group of folks at one of our regular bar hangouts, and one of the craziest things happened. A fellow came up to me, someone I recognized but hadn't seen in years. He told me he'd been living and working near Albuquerque since leaving Socorro. All that was going well, but he was excited to tell me about a gaming group he'd started. He'd introduced these folks to Diplomacy, and they'd been playing it regularly for a year or two. He was training them, he said, to really understand the game, to get them ready for one goal he had. And now, he thought, they were really good, and they were ready. They were ready, he said, to play me. Now, he had to be pulling my leg. Had to have. Sure, I may have been obsessed, but it's not like I always won; I wasn't some Diplomacy champion. His whole setup remains one of the most absurd things I've ever heard, but he told it dead straight. I had to break it to him that in just a few hours I was driving with all my things to Athens for good, and he acted like I'd mortally wounded him. It had to be a setup, it had to be, but it was one of the best acting jobs I've ever seen. And if it wasn't? Just incredible.
I expected to keep right on playing when I landed in Georgia, but for whatever reason, it never happened. Even though Athens is something like a hundred times the size of Socorro, I never could find a gaming group to get in with. I didn't have a car for my first few years, my social outlets became community theater and live music, and to this day I have never played another in-person game of Diplomacy. I have a box of the game on the shelf, and a few years ago I finally threw away my handmade Chromatic board.
That's not to say I haven't played at all. Every now and again I would get on a judge and play a game, but one by one they went offline. A few successor systems with live map interfaces instead of email are here and there, but I drifted away. In 1999, Avalon Hill released a PC version of the game, touting both "hot seat" multiplayer and computer personalities you could play against, negotiations and all. Its release date was Black Friday, and even though I had pledged to honor Buy Nothing Day, I caved, found a way to the mall that housed the town's only software store, and bought it so I could play all weekend. I felt guilty doing it, and the guilt only grew with my disappointment in how absolutely terrible the computer players were. I didn't have any humans to play with, and I was so hopeful this was my chance at challenging solo play, but it was just awful. I don't know that I ever played it again after that weekend.
So that's my history with the game: a decade-long obsession in which I inserted myself into the inner circle of a global hobby, followed by decades of barely playing at all. I love it, it remains my favorite game, and I miss it.
## So I sat down and built one
It's called Dip, and it's at **[dip.kestrelsnest.social](https://dip.kestrelsnest.social)**. It's free, it runs in your browser, and there's no account to make. Your seat lives in your browser, and if you want to pick up a game on another device, it gives you four words to carry it over.
You can play the way I first learned: send a link or a four-letter code to six friends and settle in. There are no deadlines. A turn resolves the moment everyone has submitted, so a game can take an evening or a month. Talk can be public, or private to any power you choose, and anyone with the link can sit in the Peanut Gallery and watch. You write orders by clicking units on the map or by typing them the old way ("A Par-Bur"), and the adjudicator follows the Diplomacy Adjudicator Test Cases, so the corner cases come out the way the rules say.
Or you can play the game I wanted in 1999. Fill the empty seats with house players and they'll carry on private conversations with you in plain English. They make truces over a province, trade supports, propose alliances against a common enemy, and divide up the spoils. They remember every promise, yours and theirs, and the table keeps a ledger of every one that's kept or broken, even when the culprit won't own up to it. Each has its own temperament, and some keep their word better than others; figuring out who is who is half the fun, so I won't spoil it.
In the game I just finished, playing Austria, I offered to support one neighbor's fleet from the Aegean into Constantinople. It answered: "Constantinople is held too strongly, Austria; with one support I would only bounce. Bring another, or cut one of theirs." That same neighbor and I kept a truce over Venice and Trieste for six straight years, renewed every year with "You kept your word about Venice, and I kept mine about Trieste. The same again in 1904?" When I won, its parting word was: "Congratulations, Austria. The board is yours, and you earned it. You kept your word to me, and I will not forget it." Another neighbor promised to support my army into Warsaw and didn't: "I did promise to support your army in Galicia into Warsaw, Austria. Plans change."
{{< img src="dip-uv6g-press.png" alt="Dip's press panel. At the top, the Agreements ledger lists what's between me and the other powers: “You have broken a truce with England. You have broken an alliance with Russia. You have broken a truce with Turkey. You have broken an alliance with Germany.” Below it, my private conversation with Italy (The Attaché). Me: “I can support aeg to con.” Italy: “Constantinople is held too strongly, Austria; with one support I would only bounce. Bring another, or cut one of theirs.”" caption="The house keeps score. Up top, the four promises I broke on my way to winning; below, the Attaché doing the math." >}}
None of this is a language model, either. The house players are old-fashioned algorithms and decision trees, working from the board and their own record of every promise. They're not grandmasters, but they bargain, they hold grudges, and every so often one of them will stab you in the back and mean it. That weekend with the PC game would have gone very differently.
And yes, Chromatic is there: five powers around a central Switzerland, the map I laminated to a board all those years ago and finally threw away. Choose it when you open a table.
A few smaller things I'm fond of:
- A link to a finished game shows the final board, so you can brag properly.
- You can pick your own colors for the powers in Preferences, including a colorblind-safe set.
- If something surprises you, there's a button in every game to tell me, and I read every report.
{{< img src="dip-uv6g-game-over.png" alt="Dip's game-over card: “Austria has won,” with 19 supply centers. A bar chart shows Austria's centers after each Fall from 1901 to 1910, rising 5, 6, 7, 7, 9, 11, 13, 14, 16 and 19 and crossing the dashed 18-center line. A table lists the final standings: France 11 centers, England 4, Italy 0, and Germany, Russia and Turkey eliminated." caption="Send someone the link to a finished game and this is what they see first." href="https://dip.kestrelsnest.social/join/UV6G" >}}
Dip is part of **[Kestrel's Hall](https://gamehall.kestrelsnest.social)**, a little collection of games I've built (yes, Wiz-War is there too, the same one Jason brought from California).
It's been thirty years since I last sat at a table and made a deal I didn't intend to keep. Come sit at mine.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

-1
View File
@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><circle cx="32" cy="32" r="30" fill="#14181a" stroke="#d2a94a" stroke-width="3"/><text x="32" y="44" text-anchor="middle" font-family="Iowan Old Style, Georgia, serif" font-size="36" fill="#e6dfcf">K</text></svg>

Before

Width:  |  Height:  |  Size: 272 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

+7 -197
View File
@@ -2,206 +2,16 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Kestrel's Hall</title> <title>Kestrel's Hall</title>
<meta name="description" content="Free board games in the browser: Wiz-War, Waving Hands, and Hnefatafl. Play with friends by link or alone against the house. No accounts, no adverts, nothing sold.">
<link rel="canonical" href="https://gamehall.kestrelsnest.social/"> <link rel="canonical" href="https://gamehall.kestrelsnest.social/">
<meta property="og:type" content="website"> <script>
<meta property="og:title" content="Kestrel's Hall"> // Only from the blog's address: the same file is what the old server shows
<meta property="og:description" content="Free board games in the browser. Play with friends by link or alone against the house. No accounts, no adverts, nothing sold."> // for the hall's own name until every cache has the new address.
<meta property="og:url" content="https://gamehall.kestrelsnest.social/"> if (location.hostname !== "gamehall.kestrelsnest.social") location.replace("https://gamehall.kestrelsnest.social/");
<meta property="og:image" content="https://blog.kestrelsnest.social/gamehall/og.png"> </script>
<meta property="og:image:width" content="1200"> <meta name="robots" content="noindex">
<meta property="og:image:height" content="630">
<meta name="twitter:card" content="summary_large_image">
<link rel="icon" href="favicon.svg">
<style>
:root {
--ink: #14181a;
--panel: #1c2124;
--line: #2c3236;
--bone: #e6dfcf;
--bone-dim: #a9a494;
--bone-faint: #7c7868;
--gold: #d2a94a;
--gutter: 16px;
}
* { box-sizing: border-box; }
html { background: var(--ink); }
body {
margin: 0;
background: var(--ink);
color: var(--bone);
font-family: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
font-size: 18px;
line-height: 1.5;
-webkit-font-smoothing: antialiased;
}
a { color: var(--gold); text-decoration: none; }
a:hover { text-decoration: underline; }
.wrap { max-width: 1080px; margin: 0 auto; padding: 0 var(--gutter); }
header.mast { padding: 56px 0 28px; text-align: center; }
header.mast h1 {
margin: 0;
font-size: clamp(2.4rem, 6vw, 4rem);
font-weight: 400;
letter-spacing: 0.01em;
line-height: 1.05;
}
header.mast p.lede {
margin: 14px auto 0;
max-width: 38em;
font-size: clamp(1.05rem, 2.2vw, 1.3rem);
color: var(--bone-dim);
}
header.mast p.lede b { color: var(--bone); font-weight: 500; }
.games { display: grid; gap: 22px; grid-template-columns: repeat(3, 1fr); margin-top: 22px; }
@media (max-width: 860px) { .games { grid-template-columns: 1fr; max-width: 520px; margin-left: auto; margin-right: auto; } }
.game {
display: flex; flex-direction: column;
background: var(--panel);
border: 1px solid var(--line);
border-radius: 12px;
overflow: hidden;
color: inherit;
text-decoration: none;
transition: transform .15s ease, border-color .15s ease;
}
.game:hover { transform: translateY(-3px); border-color: var(--gold); text-decoration: none; }
.game .art { position: relative; aspect-ratio: 5 / 3; background: #222; overflow: hidden; }
.game .art img.fill { width: 100%; height: 100%; object-fit: cover; display: block; }
.game .art img.tafl { object-position: 50% 50%; }
.game .art img.hands { object-position: 0% 50%; }
.game .body { padding: 16px 18px 18px; display: flex; flex-direction: column; gap: 6px; flex: 1; }
.game h2 { margin: 0; font-size: 1.45rem; font-weight: 500; }
.game .pitch { margin: 0; color: var(--bone); }
.game .facts { margin: 0; color: var(--bone-faint); font-size: 0.92rem; }
.game .play { margin-top: auto; padding-top: 10px; color: var(--gold); font-size: 1rem; }
.game:hover .play { text-decoration: underline; }
/* The maze card: a stone floor in CSS, mortar-coloured walls, and the hall's own token drawings. */
.maze {
width: 100%; height: 100%;
background: #2a2e33;
background-image:
linear-gradient(rgba(255,255,255,.06) 1px, transparent 1px),
linear-gradient(90deg, rgba(255,255,255,.06) 1px, transparent 1px),
radial-gradient(circle at 30% 40%, rgba(255,240,200,.05), transparent 60%);
background-size: 12.5% 20%, 12.5% 20%, 100% 100%;
}
.maze .w { position: absolute; background: #b8a77d; box-shadow: 0 0 0 1px #5c5238, 0 2px 4px rgba(0,0,0,.5); border-radius: 2px; }
.maze .h { height: 3%; }
.maze .v { width: 1.8%; }
.maze .t { position: absolute; width: 12.5%; filter: drop-shadow(0 2px 3px rgba(0,0,0,.6)); }
section { margin-top: 56px; }
section h2 { font-size: 1.6rem; font-weight: 400; margin: 0 0 12px; }
.cols { display: grid; grid-template-columns: 1fr 1fr; gap: 40px; }
@media (max-width: 720px) { .cols { grid-template-columns: 1fr; gap: 28px; } }
section p { margin: 0 0 12px; color: var(--bone-dim); }
section p b { color: var(--bone); font-weight: 500; }
ul.how { margin: 0; padding-left: 1.2em; color: var(--bone-dim); }
ul.how li { margin-bottom: 8px; }
ul.how b { color: var(--bone); font-weight: 500; }
.keeper { display: flex; gap: 20px; align-items: flex-start; }
.keeper img { width: 84px; height: 84px; border-radius: 50%; object-fit: cover; flex: 0 0 auto; border: 2px solid var(--line); }
@media (max-width: 480px) { .keeper { flex-direction: column; } }
footer { margin-top: 64px; padding: 28px 0 48px; border-top: 1px solid var(--line); color: var(--bone-faint); font-size: 0.9rem; }
footer p { margin: 0 0 8px; }
</style>
</head> </head>
<body> <body>
<div class="wrap"> <p>Kestrel's Hall has moved to <a href="https://gamehall.kestrelsnest.social/">gamehall.kestrelsnest.social</a>.</p>
<header class="mast">
<h1>Kestrel's Hall</h1>
<p class="lede"><b>Free board games in the browser.</b> Play with friends by sending a link, or alone against the house. No accounts, no adverts, no timers, and nothing sold.</p>
</header>
<div class="games">
<a class="game" href="https://wizwar.kestrelsnest.social">
<div class="art">
<div class="maze">
<div class="w h" style="left:12.5%;top:19%;width:25%"></div>
<div class="w v" style="left:36.2%;top:19%;height:42%"></div>
<div class="w h" style="left:50%;top:39%;width:37.5%"></div>
<div class="w v" style="left:61.2%;top:59%;height:41%"></div>
<div class="w h" style="left:0;top:59%;width:25%"></div>
<div class="w v" style="left:86.2%;top:0;height:40%"></div>
<div class="w h" style="left:75%;top:80%;width:25%"></div>
<img class="t" src="wizard-0.svg" alt="" style="left:0.5%;top:21%">
<img class="t" src="wizard-1.svg" style="left:75.5%;top:42%" alt="">
<img class="t" src="wizard-2.svg" style="left:38%;top:62%" alt="">
<img class="t" src="treasure-0.svg" style="left:88%;top:1%" alt="">
<img class="t" src="skeleton.svg" style="left:25.5%;top:1%" alt="">
<img class="t" src="troll.svg" style="left:50.5%;top:21%" alt="">
<img class="t" src="rock.svg" style="left:13%;top:82%" alt="">
</div>
</div>
<div class="body">
<h2>Wiz-War</h2>
<p class="pitch">Steal treasure. Blast through walls. Outwit your friends.</p>
<p class="facts">2 to 6 players · an unofficial rebuild of Tom Jolly's 1993 board game</p>
<span class="play">Play at wizwar.kestrelsnest.social →</span>
</div>
</a>
<a class="game" href="https://hands.kestrelsnest.social">
<div class="art"><img class="fill hands" src="hands.png" alt="The Waving Hands share card: a column of gesture letters beside the title."></div>
<div class="body">
<h2>Waving Hands</h2>
<p class="pitch">Duelling wizards. Two hands each. The right run of gestures is a spell.</p>
<p class="facts">2 to 12 players · Richard Bartle's pencil-and-paper duel, 1977</p>
<span class="play">Play at hands.kestrelsnest.social →</span>
</div>
</a>
<a class="game" href="https://tafl.kestrelsnest.social">
<div class="art"><img class="fill tafl" src="tafl.svg" alt="A hnefatafl board at the start of a game: the king on the throne, defenders around him, attackers on the four edges."></div>
<div class="body">
<h2>Hnefatafl</h2>
<p class="pitch">The Viking board game. One king, one throne, four corners, and a ring of attackers closing in.</p>
<p class="facts">2 players · the Norse tafl game, by the Copenhagen rules or Linnaeus's 1732 Tablut</p>
<span class="play">Play at tafl.kestrelsnest.social →</span>
</div>
</a>
</div>
<section class="cols">
<div>
<h2>How a table works</h2>
<ul class="how">
<li><b>Open a table</b> and you get a four-letter code and a link. Send it to a friend; they sit down and you begin.</li>
<li><b>No one home?</b> Every game seats the house: an automaton, a housecarl, a rival wizard. Play now, alone.</li>
<li><b>Nothing to sign up for.</b> Your browser holds your seat. Close the tab and come back; the game is where you left it.</li>
<li><b>Watchers welcome.</b> Anyone with the link can sit in the Peanut Gallery and, if the host allows, join the table talk.</li>
<li><b>Something went wrong?</b> Every table has a report button that reaches the keeper, pinned to the exact moment.</li>
</ul>
</div>
<div>
<h2>The keeper</h2>
<div class="keeper">
<img src="face.jpg" alt="Eric Wagoner">
<div>
<p>I am Eric, and I keep these tables from Athens, Georgia. These are games I have loved at a real table, rebuilt so friends can play them from wherever they are, with the door left open for anyone who wanders in.</p>
<p>Send word to <a href="mailto:eric@ericwagoner.com">eric@ericwagoner.com</a>, <a href="https://bsky.app/profile/kestrelsnest.social">@kestrelsnest.social</a> on Bluesky, or <a href="https://toots.kestrelsnest.social/@eric">@eric@toots.kestrelsnest.social</a> on Mastodon. I roost at <a href="https://blog.kestrelsnest.social">blog.kestrelsnest.social</a>.</p>
</div>
</div>
<h2 style="margin-top:28px">The hosting</h2>
<p>The games are free and will stay free. They run on small servers that cost a few dollars a month; anyone who wants to chip in toward the hosting can at <a href="https://ko-fi.com/kestrelsnest">ko-fi.com/kestrelsnest</a>. Nothing is unlocked by it and nothing is withheld without it.</p>
</div>
</section>
<footer>
<p>Wiz-War is Tom Jolly's design; the rights rest with Steve Jackson Games. Waving Hands is Richard Bartle's. Nothing here is official or endorsed by Steve Jackson Games or Richard Bartle. Hnefatafl belongs to everyone; it is a thousand years old.</p>
</footer>
</div>
</body> </body>
</html> </html>
-11
View File
@@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 144 150" role="img" aria-label="Rock token">
<title>Rock</title><desc>Rock illustrated in shaded ink on parchment.</desc>
<defs><linearGradient id="paper" x2="0" y2="1"><stop stop-color="#fbf2d9"/><stop offset="1" stop-color="#e8d6ae"/></linearGradient><radialGradient id="halo"><stop stop-color="#7b8272" stop-opacity=".2"/><stop offset="1" stop-color="#7b8272" stop-opacity=".03"/></radialGradient></defs>
<rect x="2" y="2" width="140" height="146" rx="9" fill="url(#paper)" stroke="#39302a" stroke-width="2.5"/>
<rect x="6" y="6" width="132" height="138" rx="6" fill="none" stroke="#b49b70" stroke-width=".8"/>
<circle cx="72" cy="68" r="52" fill="url(#halo)"/>
<g stroke-linecap="round" stroke-linejoin="round"><ellipse cx="72" cy="119" rx="43" ry="5" fill="#725b3d" stroke="none" stroke-width="0" opacity=".18"/><path d="M22 103L29 68 50 42 83 31 111 57 125 97 99 119 50 122Z" fill="#777b75" stroke="#302a29" stroke-width="2.0" /><path d="M29 68L64 74 83 31 50 42Z" fill="#b4b4a0" stroke="#302a29" stroke-width="2.0" /><path d="M64 74L99 119 50 122 22 103Z" fill="#929486" stroke="#302a29" stroke-width="2.0" /><path d="M64 74L108 62 125 97 99 119Z" fill="#535d59" stroke="#302a29" stroke-width="2.0" /><path d="M83 31L108 62 64 74Z" fill="#969b8d" stroke="#302a29" stroke-width="2.0" /><path d="M35 71L47 53 60 46M29 100L44 113M76 78L97 110" fill="none" stroke="#d0c9ac" stroke-width="2" /><path d="M99 72L109 90M104 70L117 96M103 104L115 99M52 117L47 104M57 117L52 103" fill="none" stroke="#302a29" stroke-width="1.1" opacity=".45"/></g>
<path d="M16 130H128" stroke="#b49b70" stroke-width=".8"/>
<path d="M12 12h7m-7 0v7m120-7h-7m7 0v7" fill="none" stroke="#7b8272" stroke-width="2"/>
<text x="72" y="141" text-anchor="middle" font-family="Georgia,serif" font-size="10.5" font-weight="700" fill="#39302a">Rock</text>
</svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

-11
View File
@@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 144 150" role="img" aria-label="Skeleton token">
<title>Skeleton</title><desc>Skeleton illustrated in shaded ink on parchment.</desc>
<defs><linearGradient id="paper" x2="0" y2="1"><stop stop-color="#fbf2d9"/><stop offset="1" stop-color="#e8d6ae"/></linearGradient><radialGradient id="halo"><stop stop-color="#657275" stop-opacity=".2"/><stop offset="1" stop-color="#657275" stop-opacity=".03"/></radialGradient></defs>
<rect x="2" y="2" width="140" height="146" rx="9" fill="url(#paper)" stroke="#39302a" stroke-width="2.5"/>
<rect x="6" y="6" width="132" height="138" rx="6" fill="none" stroke="#b49b70" stroke-width=".8"/>
<circle cx="72" cy="68" r="52" fill="url(#halo)"/>
<g stroke-linecap="round" stroke-linejoin="round"><ellipse cx="72" cy="119" rx="43" ry="5" fill="#725b3d" stroke="none" stroke-width="0" opacity=".18"/><path d="M30 119L43 88 57 83 55 70 88 69 87 84 107 94 118 119Z" fill="#464b58" stroke="#302a29" stroke-width="2.0" /><path d="M46 91L26 102 21 78M99 93L114 82 117 59" fill="none" stroke="#302a29" stroke-width="9" /><path d="M46 91L26 102 21 78M99 93L114 82 117 59" fill="none" stroke="#e9dfc4" stroke-width="5" /><path d="M72 79V107M56 85Q70 93 87 84M54 94Q72 102 89 92M58 103Q72 110 85 101" fill="none" stroke="#302a29" stroke-width="8" /><path d="M72 79V107M56 85Q70 93 87 84M54 94Q72 102 89 92M58 103Q72 110 85 101" fill="none" stroke="#e9dfc4" stroke-width="4" /><path d="M61 109L53 123M81 108L91 122" fill="none" stroke="#e9dfc4" stroke-width="5" /><path d="M49 52Q45 27 70 24Q100 23 100 50L91 64 88 77 59 77 56 64Z" fill="#ede3c9" stroke="#302a29" stroke-width="2.0" /><path d="M85 29Q103 37 96 52L85 66 85 76 93 64 100 49Q100 32 85 29Z" fill="#b8ae93" stroke="none" stroke-width="2.0" /><ellipse cx="62" cy="51" rx="9" ry="10" fill="#302a29" stroke="none" stroke-width="2"/><ellipse cx="85" cy="50" rx="9" ry="10" fill="#302a29" stroke="none" stroke-width="2"/><path d="M50 41L68 48M78 46L96 38" fill="none" stroke="#ede3c9" stroke-width="5" /><path d="M73 58L67 67 78 67Z" fill="#302a29" stroke="#302a29" stroke-width="2.0" /><path d="M62 70H85M65 70V77M73 70V77M81 70V77" fill="none" stroke="#302a29" stroke-width="2" /><path d="M110 69L124 54M118 57L112 17 119 22 124 54Z" fill="#aeb8b5" stroke="#302a29" stroke-width="2.0" /><path d="M113 65L119 71" fill="none" stroke="#d6ad57" stroke-width="4" /></g>
<path d="M16 130H128" stroke="#b49b70" stroke-width=".8"/>
<path d="M12 12h7m-7 0v7m120-7h-7m7 0v7" fill="none" stroke="#657275" stroke-width="2"/>
<text x="72" y="141" text-anchor="middle" font-family="Georgia,serif" font-size="10.5" font-weight="700" fill="#39302a">Skeleton</text>
</svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

-6
View File
@@ -1,6 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" class="artwork svelte-14xsz9c calm" data-set="copenhagen" viewBox="0 0 452 452" role="img" aria-label="Copenhagen board in its opening position"><style>.artwork.svelte-14xsz9c {width:100%;height:auto;display:block;
/* Copenhagen: a crafted oak board, polished counters and brass inlay. */--surface-light: #bd935c;--surface-dark: #79502d;--rim-light: #e0bf84;--attacker-light: #63564a;--defender-light: #fff4d8;--king-light: #ffe4a0;--wood: #a77945;--wood-line: rgba(30, 16, 6, 0.55);--coord: #302216;--square: rgba(255, 240, 210, 0.08);--square-edge: rgba(255, 250, 235, 0.11);--throne: rgba(240, 165, 58, 0.35);--corner: rgba(109, 52, 29, 0.22);--attacker: #2a2320;--attacker-rim: #211a15;--defender: #ece4d0;--defender-rim: #b9ab8b;--king: #f0d58a;--king-rim: #a67c1a;--crown: #6b4a0f;}
/* Tablut: an excavated-object aesthetic, with limestone and aged counters. */.artwork[data-set='tablut'].svelte-14xsz9c {--surface-light: #aaa18b;--surface-dark: #797564;--rim-light: #c4b99e;--attacker-light: #534f43;--defender-light: #ded0ae;--king-light: #e5cc92;--wood: #8a8578;--wood-line: rgba(36, 32, 27, 0.45);--coord: #37362c;--square: rgba(255, 250, 235, 0.05);--square-edge: rgba(255, 250, 235, 0.09);--throne: rgba(120, 100, 70, 0.4);--corner: transparent;--attacker: #3d3530;--attacker-rim: #29281f;--defender: #cfc4ad;--defender-rim: #8c8069;--king: #c9b27a;--king-rim: #7d6636;--crown: #5a4a2a;}.wood.svelte-14xsz9c {stroke:#79502d;stroke-width:1.4;}.stain.svelte-14xsz9c {fill:#fff;pointer-events:none;}.chip.svelte-14xsz9c {fill:rgba(28, 24, 20, 0.42);stroke:rgba(230, 222, 205, 0.18);stroke-width:0.6;pointer-events:none;}.crack.svelte-14xsz9c {fill:none;stroke:rgba(43, 39, 29, 0.48);stroke-width:0.5;stroke-linecap:round;pointer-events:none;}.coord.svelte-14xsz9c {fill:#302216;font-family:'Iowan Old Style', Georgia, serif;font-size:9px;font-weight:600;pointer-events:none;}.square.svelte-14xsz9c {fill:rgba(255, 240, 210, 0.08);stroke:rgba(30, 16, 6, 0.55);stroke-width:0.65;cursor:default;transition:fill 0.3s ease;}.square.edge.svelte-14xsz9c {fill:rgba(255, 250, 235, 0.11);}.square.throne.svelte-14xsz9c {fill:rgba(240, 165, 58, 0.35);}.square.corner.svelte-14xsz9c {fill:rgba(109, 52, 29, 0.22);}.square.last.svelte-14xsz9c {fill:rgba(140, 200, 224, 0.28);}.square.target.svelte-14xsz9c {cursor:pointer;}.square.fallen.svelte-14xsz9c {fill:rgba(224, 101, 92, 0.45);}.square.svelte-14xsz9c:focus-visible {outline:none;stroke:#9cd0dc;stroke-width:2.5;}.hint.svelte-14xsz9c {fill:#9cd0dc;opacity:0.85;}.board-rim.svelte-14xsz9c {fill:none;stroke:#e0bf84;stroke-width:0.7;opacity:0.65;pointer-events:none;}.join.svelte-14xsz9c {fill:none;stroke:#50351f;stroke-width:0.6;opacity:0.18;pointer-events:none;}.surface-wear.svelte-14xsz9c {pointer-events:none;}.crack-light.svelte-14xsz9c {fill:none;stroke:#e1d6bd;stroke-width:0.55;opacity:0.45;}.inlay.svelte-14xsz9c {fill:none;stroke:#e0bf84;stroke-width:0.8;opacity:0.75;pointer-events:none;}.artwork[data-set='tablut'].svelte-14xsz9c .inlay.svelte-14xsz9c {stroke:#494638;opacity:0.45;}.piece.svelte-14xsz9c {--piece-rim: #b9ab8b;transition:transform 0.36s cubic-bezier(0.2, 0.7, 0.2, 1),
opacity 0.3s ease;}.piece.attacker.svelte-14xsz9c {--piece-rim: #211a15;}.piece.king.svelte-14xsz9c {--piece-rim: #a67c1a;}.piece.dying.svelte-14xsz9c {opacity:0;}.piece.svelte-14xsz9c .shadow.svelte-14xsz9c {fill:#16130e;opacity:0.28;}.piece.svelte-14xsz9c .base.svelte-14xsz9c {fill:#b9ab8b;}.piece.svelte-14xsz9c .body.svelte-14xsz9c {stroke:#b9ab8b;stroke-width:0.65;}.bevel-light.svelte-14xsz9c {fill:none;stroke:#fff1cc;stroke-width:0.9;opacity:0.48;stroke-linecap:round;}.bevel-dark.svelte-14xsz9c {fill:none;stroke:#211d16;stroke-width:0.8;opacity:0.3;stroke-linecap:round;}.turned.svelte-14xsz9c {fill:none;stroke:#b9ab8b;stroke-width:0.45;opacity:0.35;}.counter-wear.svelte-14xsz9c {fill:none;stroke:#534b37;stroke-width:0.5;opacity:0.3;stroke-linecap:round;}.attacker.svelte-14xsz9c .counter-wear.svelte-14xsz9c {stroke:#d6c6a3;opacity:0.23;}.artwork[data-set='tablut'].svelte-14xsz9c .bevel-light.svelte-14xsz9c {opacity:0.25;stroke-width:1.1;}.artwork[data-set='tablut'].svelte-14xsz9c .turned.svelte-14xsz9c {display:none;}.pit.svelte-14xsz9c {fill:#544b38;opacity:0.3;}.attacker.svelte-14xsz9c .pit.svelte-14xsz9c {fill:#d6c6a3;opacity:0.2;}.piece.svelte-14xsz9c .crown.svelte-14xsz9c {fill:#6b4a0f;stroke:#6b4a0f;stroke-width:0.7;stroke-linejoin:round;}.piece.svelte-14xsz9c .crown-gleam.svelte-14xsz9c {fill:#f8e5b2;stroke:#f8e5b2;stroke-width:0.9;opacity:0.7;}.piece.selected.svelte-14xsz9c .body.svelte-14xsz9c {stroke:#9cd0dc;stroke-width:2.5;}.calm.svelte-14xsz9c .piece.svelte-14xsz9c,
.calm.svelte-14xsz9c .square.svelte-14xsz9c {transition:none;}.piece.attacker .base{fill:#211a15}.piece.attacker .body,.piece.attacker .turned{stroke:#211a15}.piece.defender .base{fill:#b9ab8b}.piece.defender .body,.piece.defender .turned{stroke:#b9ab8b}.piece.king .base{fill:#a67c1a}.piece.king .body,.piece.king .turned{stroke:#a67c1a}</style><defs><linearGradient id="s1-surface" x2="0.85" y2="1"><stop stop-color="#bd935c"></stop><stop offset="0.48" stop-color="#a77945"></stop><stop offset="1" stop-color="#79502d"></stop></linearGradient><filter id="s1-grain" x="0" y="0" width="100%" height="100%"><feTurbulence type="fractalNoise" baseFrequency="0.025 0.5" numOctaves="3" seed="7" result="noise"></feTurbulence><feColorMatrix in="noise" type="saturate" values="0"></feColorMatrix><feComponentTransfer result="soft"><feFuncA type="linear" slope="0.13"></feFuncA></feComponentTransfer><feBlend in="SourceGraphic" in2="soft" mode="multiply"></feBlend></filter><filter id="s1-worn" x="-5%" y="-5%" width="110%" height="110%"><feTurbulence type="fractalNoise" baseFrequency="0.09" numOctaves="2" seed="3" result="warp"></feTurbulence><feDisplacementMap in="SourceGraphic" in2="warp" scale="1.15" xChannelSelector="R" yChannelSelector="G"></feDisplacementMap></filter><filter id="s1-mottle" x="0" y="0" width="100%" height="100%"><feTurbulence type="fractalNoise" baseFrequency="0.025" numOctaves="3" seed="11"></feTurbulence><feColorMatrix type="matrix" values="0 0 0 0 0.20 0 0 0 0 0.17 0 0 0 0 0.12 0.28 0 0 0 0"></feColorMatrix><feComposite in2="SourceGraphic" operator="in"></feComposite></filter><radialGradient id="s1-attacker" cx="32%" cy="24%" r="80%"><stop stop-color="#63564a"></stop><stop offset="0.65" stop-color="#2a2320"></stop><stop offset="1" stop-color="#211a15"></stop></radialGradient><radialGradient id="s1-defender" cx="32%" cy="24%" r="80%"><stop stop-color="#fff4d8"></stop><stop offset="0.65" stop-color="#ece4d0"></stop><stop offset="1" stop-color="#b9ab8b"></stop></radialGradient><radialGradient id="s1-king" cx="32%" cy="24%" r="80%"><stop stop-color="#ffe4a0"></stop><stop offset="0.65" stop-color="#f0d58a"></stop><stop offset="1" stop-color="#a67c1a"></stop></radialGradient></defs><rect class="wood svelte-14xsz9c" x="0.7" y="0.7" width="450.6" height="450.6" rx="6" fill="url(#s1-surface)" filter="url(#s1-grain)"></rect><rect class="board-rim svelte-14xsz9c" x="2" y="2" width="448" height="448" rx="5"></rect><path class="join svelte-14xsz9c" d="M102.8 3 v446"></path><path class="join svelte-14xsz9c" d="M230.4 3 v446"></path><path class="join svelte-14xsz9c" d="M353.6 3 v446"></path><g class="surface-wear svelte-14xsz9c" aria-hidden="true"></g><g><rect class="square svelte-14xsz9c corner" data-i="0" x="6" y="6" width="40" height="40" aria-label="a11"></rect><rect class="square svelte-14xsz9c" data-i="1" x="46" y="6" width="40" height="40" aria-label="b11"></rect><rect class="square svelte-14xsz9c" data-i="2" x="86" y="6" width="40" height="40" aria-label="c11"></rect><rect class="square svelte-14xsz9c" data-i="3" x="126" y="6" width="40" height="40" aria-label="d11, an attacker"></rect><rect class="square svelte-14xsz9c" data-i="4" x="166" y="6" width="40" height="40" aria-label="e11, an attacker"></rect><rect class="square svelte-14xsz9c" data-i="5" x="206" y="6" width="40" height="40" aria-label="f11, an attacker"></rect><rect class="square svelte-14xsz9c" data-i="6" x="246" y="6" width="40" height="40" aria-label="g11, an attacker"></rect><rect class="square svelte-14xsz9c" data-i="7" x="286" y="6" width="40" height="40" aria-label="h11, an attacker"></rect><rect class="square svelte-14xsz9c" data-i="8" x="326" y="6" width="40" height="40" aria-label="i11"></rect><rect class="square svelte-14xsz9c" data-i="9" x="366" y="6" width="40" height="40" aria-label="j11"></rect><rect class="square svelte-14xsz9c corner" data-i="10" x="406" y="6" width="40" height="40" aria-label="k11"></rect><rect class="square svelte-14xsz9c" data-i="11" x="6" y="46" width="40" height="40" aria-label="a10"></rect><rect class="square svelte-14xsz9c" data-i="12" x="46" y="46" width="40" height="40" aria-label="b10"></rect><rect class="square svelte-14xsz9c" data-i="13" x="86" y="46" width="40" height="40" aria-label="c10"></rect><rect class="square svelte-14xsz9c" data-i="14" x="126" y="46" width="40" height="40" aria-label="d10"></rect><rect class="square svelte-14xsz9c" data-i="15" x="166" y="46" width="40" height="40" aria-label="e10"></rect><rect class="square svelte-14xsz9c" data-i="16" x="206" y="46" width="40" height="40" aria-label="f10, an attacker"></rect><rect class="square svelte-14xsz9c" data-i="17" x="246" y="46" width="40" height="40" aria-label="g10"></rect><rect class="square svelte-14xsz9c" data-i="18" x="286" y="46" width="40" height="40" aria-label="h10"></rect><rect class="square svelte-14xsz9c" data-i="19" x="326" y="46" width="40" height="40" aria-label="i10"></rect><rect class="square svelte-14xsz9c" data-iLine truncated

Before

Width:  |  Height:  |  Size: 42 KiB

-11
View File
@@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 144 150" role="img" aria-label="Treasure token">
<title>Treasure</title><desc>Open treasure chest with gold coins and a matching wizard color and crest.</desc>
<defs><linearGradient id="paper" x2="0" y2="1"><stop stop-color="#fbf2d9"/><stop offset="1" stop-color="#e8d6ae"/></linearGradient><radialGradient id="halo"><stop stop-color="#28724d" stop-opacity=".2"/><stop offset="1" stop-color="#28724d" stop-opacity=".03"/></radialGradient></defs>
<rect x="2" y="2" width="140" height="146" rx="9" fill="url(#paper)" stroke="#39302a" stroke-width="2.5"/>
<rect x="6" y="6" width="132" height="138" rx="6" fill="none" stroke="#b49b70" stroke-width=".8"/>
<circle cx="72" cy="68" r="52" fill="url(#halo)"/>
<g stroke-linecap="round" stroke-linejoin="round"><ellipse cx="72" cy="119" rx="43" ry="5" fill="#725b3d" stroke="none" stroke-width="0" opacity=".18"/><path d="M22 68L99 67 124 82 119 117 42 123 23 108Z" fill="#143f35" stroke="#302a29" stroke-width="2.0" /><path d="M25 75L43 88 42 123 23 108Z" fill="#28724d" stroke="#302a29" stroke-width="2.0" /><path d="M43 88L123 80 119 117 42 123Z" fill="#28724d" stroke="#302a29" stroke-width="2.0" /><path d="M29 67L23 42Q57 19 103 34L112 59 93 78Z" fill="#143f35" stroke="#302a29" stroke-width="2.0" /><path d="M30 44Q62 27 99 39L104 55 35 64Z" fill="#28724d" stroke="#302a29" stroke-width="2.0" /><path d="M36 48Q68 35 94 42" fill="none" stroke="#7bbf7d" stroke-width="4" /><path d="M29 66L93 60 112 62 100 76 42 85Z" fill="#48362e" stroke="#302a29" stroke-width="2.0" /><ellipse cx="43" cy="70" rx="8" ry="4" fill="#d6ad57" stroke="#302a29" stroke-width="1.4"/><path d="M39 69h5" fill="none" stroke="#f8edcf" stroke-width="1.3" /><ellipse cx="58" cy="70" rx="8" ry="4" fill="#d6ad57" stroke="#302a29" stroke-width="1.4"/><path d="M54 69h5" fill="none" stroke="#f8edcf" stroke-width="1.3" /><ellipse cx="72" cy="67" rx="8" ry="4" fill="#d6ad57" stroke="#302a29" stroke-width="1.4"/><path d="M68 66h5" fill="none" stroke="#f8edcf" stroke-width="1.3" /><ellipse cx="88" cy="69" rx="8" ry="4" fill="#d6ad57" stroke="#302a29" stroke-width="1.4"/><path d="M84 68h5" fill="none" stroke="#f8edcf" stroke-width="1.3" /><ellipse cx="99" cy="64" rx="8" ry="4" fill="#d6ad57" stroke="#302a29" stroke-width="1.4"/><path d="M95 63h5" fill="none" stroke="#f8edcf" stroke-width="1.3" /><ellipse cx="54" cy="77" rx="8" ry="4" fill="#d6ad57" stroke="#302a29" stroke-width="1.4"/><path d="M50 76h5" fill="none" stroke="#f8edcf" stroke-width="1.3" /><ellipse cx="79" cy="76" rx="8" ry="4" fill="#d6ad57" stroke="#302a29" stroke-width="1.4"/><path d="M75 75h5" fill="none" stroke="#f8edcf" stroke-width="1.3" /><path d="M21 68L43 84 125 77 124 86 43 94 22 77Z" fill="#d6ad57" stroke="#302a29" stroke-width="2.0" /><path d="M48 90L55 90 53 121 46 122ZM107 85L114 85 111 118 104 119Z" fill="#d6ad57" stroke="#302a29" stroke-width="2.0" /><path d="M35 39L42 37 50 60 43 62ZM88 33L95 34 103 57 96 58Z" fill="#d6ad57" stroke="#302a29" stroke-width="2.0" /><path d="M45 120L119 114" fill="none" stroke="#7bbf7d" stroke-width="2" /><g transform="translate(80 104) scale(.86)"><path d="M-9 3L-13-5-5-2 0-8 5-2 13-5 9 3 0 8Z" fill="#f8edcf" stroke="#302a29" stroke-width="1.5" /></g><path d="M25.0,21.0 26.7,27.3 33.0,29.0 26.7,30.7 25.0,37.0 23.3,30.7 17.0,29.0 23.3,27.3Z" fill="#d6ad57" stroke="none" stroke-width="2.0" /><path d="M119.0,42.0 120.5,47.5 126.0,49.0 120.5,50.5 119.0,56.0 117.5,50.5 112.0,49.0 117.5,47.5Z" fill="#d6ad57" stroke="none" stroke-width="2.0" /></g>
<path d="M16 130H128" stroke="#b49b70" stroke-width=".8"/>
<path d="M12 12h7m-7 0v7m120-7h-7m7 0v7" fill="none" stroke="#28724d" stroke-width="2"/>
<text x="72" y="141" text-anchor="middle" font-family="Georgia,serif" font-size="10.5" font-weight="700" fill="#39302a">Treasure</text>
</svg>

Before

Width:  |  Height:  |  Size: 3.8 KiB

-11
View File
@@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 144 150" role="img" aria-label="Troll token">
<title>Troll</title><desc>Troll illustrated in shaded ink on parchment.</desc>
<defs><linearGradient id="paper" x2="0" y2="1"><stop stop-color="#fbf2d9"/><stop offset="1" stop-color="#e8d6ae"/></linearGradient><radialGradient id="halo"><stop stop-color="#788653" stop-opacity=".2"/><stop offset="1" stop-color="#788653" stop-opacity=".03"/></radialGradient></defs>
<rect x="2" y="2" width="140" height="146" rx="9" fill="url(#paper)" stroke="#39302a" stroke-width="2.5"/>
<rect x="6" y="6" width="132" height="138" rx="6" fill="none" stroke="#b49b70" stroke-width=".8"/>
<circle cx="72" cy="68" r="52" fill="url(#halo)"/>
<g stroke-linecap="round" stroke-linejoin="round"><ellipse cx="72" cy="119" rx="43" ry="5" fill="#725b3d" stroke="none" stroke-width="0" opacity=".18"/><path d="M23 120L27 96 43 82 41 61 29 46 47 49Q48 29 73 28Q98 29 100 48L117 44 103 63 103 86 123 102 125 120Z" fill="#788653" stroke="#302a29" stroke-width="2.0" /><path d="M26 109L49 101 53 119M101 90L91 112 114 119Z" fill="#4a5a3e" stroke="none" stroke-width="2.0" /><path d="M44 44L44 27Q69 18 97 28L97 43Z" fill="#60527e" stroke="#302a29" stroke-width="2.0" /><path d="M43 37L98 37" fill="none" stroke="#a294c3" stroke-width="4" /><path d="M46 57Q55 48 66 57M80 55Q89 47 100 54" fill="none" stroke="#302a29" stroke-width="5" /><ellipse cx="59" cy="61" rx="6" ry="4" fill="#f8edcf" stroke="none" stroke-width="2"/><ellipse cx="88" cy="59" rx="5" ry="3" fill="#f8edcf" stroke="none" stroke-width="2"/><ellipse cx="61" cy="61" rx="2" ry="3" fill="#302a29" stroke="none" stroke-width="2"/><ellipse cx="87" cy="59" rx="1.6" ry="2.5" fill="#302a29" stroke="none" stroke-width="2"/><path d="M70 58Q66 67 60 72Q56 81 69 83Q86 85 84 76L77 61Z" fill="#a4ab6b" stroke="#302a29" stroke-width="2.0" /><path d="M48 82Q72 99 99 80L94 98Q73 114 51 97Z" fill="#443c34" stroke="#302a29" stroke-width="2.0" /><path d="M54 88L57 77 63 92M84 93L91 78 93 88Z" fill="#f8edcf" stroke="#302a29" stroke-width="2.0" /><path d="M61 106Q72 112 84 104" fill="none" stroke="#adbb7c" stroke-width="3" /><path d="M35 100L31 109M41 103L37 113M102 102L106 110" fill="none" stroke="#302a29" stroke-width="1.1" opacity=".45"/></g>
<path d="M16 130H128" stroke="#b49b70" stroke-width=".8"/>
<path d="M12 12h7m-7 0v7m120-7h-7m7 0v7" fill="none" stroke="#788653" stroke-width="2"/>
<text x="72" y="141" text-anchor="middle" font-family="Georgia,serif" font-size="10.5" font-weight="700" fill="#39302a">Troll</text>
</svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

-11
View File
@@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 144 150" role="img" aria-label="Wizard token">
<title>Wizard</title><desc>Dark-skinned woman with silver curls and a green winged helmet.</desc>
<defs><linearGradient id="paper" x2="0" y2="1"><stop stop-color="#fbf2d9"/><stop offset="1" stop-color="#e8d6ae"/></linearGradient><radialGradient id="halo"><stop stop-color="#28724d" stop-opacity=".2"/><stop offset="1" stop-color="#28724d" stop-opacity=".03"/></radialGradient></defs>
<rect x="2" y="2" width="140" height="146" rx="9" fill="url(#paper)" stroke="#39302a" stroke-width="2.5"/>
<rect x="6" y="6" width="132" height="138" rx="6" fill="none" stroke="#b49b70" stroke-width=".8"/>
<circle cx="72" cy="68" r="52" fill="url(#halo)"/>
<g stroke-linecap="round" stroke-linejoin="round"><ellipse cx="72" cy="119" rx="43" ry="5" fill="#725b3d" stroke="none" stroke-width="0" opacity=".18"/><path d="M17 121Q21 96 49 85L92 85Q120 98 128 121Z" fill="#28724d" stroke="#302a29" stroke-width="2.0" /><path d="M17 121L42 102 59 121M98 94L87 121H128Z" fill="#143f35" stroke="none" stroke-width="2.0" /><path d="M48 87L71 108 96 87 89 121H56Z" fill="#7bbf7d" stroke="#302a29" stroke-width="2.0" /><path d="M49 89L71 106 95 89" fill="none" stroke="#d6ad57" stroke-width="3" /><path d="M47 48Q38 52 43 63Q35 67 43 76Q38 85 49 90Q45 101 59 104L66 93 84 95Q98 102 101 90Q110 86 103 76Q110 66 101 61L94 44Z" fill="#d5d1bd" stroke="#302a29" stroke-width="2.0" /><path d="M44 70Q51 64 53 72M46 83Q51 76 56 83M94 76Q99 70 102 77M91 91Q98 86 100 92" fill="none" stroke="#8e9287" stroke-width="1.8" /><path d="M53 49Q55 33 74 32Q93 35 94 52L89 75Q82 91 72 94Q59 89 53 73Z" fill="#815039" stroke="#302a29" stroke-width="2.0" /><path d="M83 43Q98 57 83 79L73 90 83 88 92 75 95 53Z" fill="#60392f" stroke="none" stroke-width="2.0" /><path d="M57 54Q64 50 69 54M79 54Q86 49 91 53" fill="none" stroke="#302a29" stroke-width="2.2" /><path d="M56 60Q62 54 68 59Q63 64 56 60ZM79 59Q85 53 91 58Q86 64 79 59Z" fill="#f8edcf" stroke="#302a29" stroke-width="1.2" /><ellipse cx="64" cy="59" rx="1.8" ry="2.6" fill="#302a29" stroke="none" stroke-width="2"/><ellipse cx="85" cy="58" rx="1.8" ry="2.6" fill="#302a29" stroke="none" stroke-width="2"/><path d="M73 58L70 68Q65 75 73 75L79 72" fill="none" stroke="#302a29" stroke-width="1.5" /><path d="M64 81Q74 77 83 79Q75 88 67 84Z" fill="#a75e57" stroke="#302a29" stroke-width="1.3" /><path d="M51 50L44 36 54 24 74 19 93 28 98 45 87 49 74 39Z" fill="#28724d" stroke="#302a29" stroke-width="2.0" /><path d="M51 39L29 33 18 17 46 25 57 37M91 37L111 31 125 15 97 24 86 36Z" fill="#7bbf7d" stroke="#302a29" stroke-width="2.0" /><path d="M26 24L44 30M32 31L47 35M101 29L116 22M95 35L110 30" fill="none" stroke="#f8edcf" stroke-width="2" /><path d="M53 45L65 43 73 49 82 42 95 45 90 53 80 50 73 58 66 51 56 54Z" fill="#143f35" stroke="#302a29" stroke-width="2.0" /><circle cx="52" cy="76" r="3" fill="#d6ad57" stroke="#302a29" stroke-width="2"/><circle cx="93" cy="75" r="3" fill="#d6ad57" stroke="#302a29" stroke-width="2"/><g transform="translate(72 117) scale(.58)"><path d="M-9 3L-13-5-5-2 0-8 5-2 13-5 9 3 0 8Z" fill="#f8edcf" stroke="#302a29" stroke-width="1.5" /></g></g>
<path d="M16 130H128" stroke="#b49b70" stroke-width=".8"/>
<path d="M12 12h7m-7 0v7m120-7h-7m7 0v7" fill="none" stroke="#28724d" stroke-width="2"/>
<text x="72" y="141" text-anchor="middle" font-family="Georgia,serif" font-size="10.5" font-weight="700" fill="#39302a">Wizard</text>
</svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

-11
View File
@@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 144 150" role="img" aria-label="Wizard token">
<title>Wizard</title><desc>Brown-skinned man with a short dark beard and red tiger hood.</desc>
<defs><linearGradient id="paper" x2="0" y2="1"><stop stop-color="#fbf2d9"/><stop offset="1" stop-color="#e8d6ae"/></linearGradient><radialGradient id="halo"><stop stop-color="#b83f35" stop-opacity=".2"/><stop offset="1" stop-color="#b83f35" stop-opacity=".03"/></radialGradient></defs>
<rect x="2" y="2" width="140" height="146" rx="9" fill="url(#paper)" stroke="#39302a" stroke-width="2.5"/>
<rect x="6" y="6" width="132" height="138" rx="6" fill="none" stroke="#b49b70" stroke-width=".8"/>
<circle cx="72" cy="68" r="52" fill="url(#halo)"/>
<g stroke-linecap="round" stroke-linejoin="round"><ellipse cx="72" cy="119" rx="43" ry="5" fill="#725b3d" stroke="none" stroke-width="0" opacity=".18"/><path d="M17 121Q21 96 49 85L92 85Q120 98 128 121Z" fill="#b83f35" stroke="#302a29" stroke-width="2.0" /><path d="M17 121L42 102 59 121M98 94L87 121H128Z" fill="#622a2c" stroke="none" stroke-width="2.0" /><path d="M48 87L71 108 96 87 89 121H56Z" fill="#ee9160" stroke="#302a29" stroke-width="2.0" /><path d="M49 89L71 106 95 89" fill="none" stroke="#d6ad57" stroke-width="3" /><path d="M46 43L47 76 59 91 89 84 101 58 93 33Z" fill="#34292a" stroke="#302a29" stroke-width="2.0" /><path d="M51 49Q50 32 73 30Q95 31 97 52L93 78 80 94 63 91 52 76Z" fill="#ad714b" stroke="#302a29" stroke-width="2.0" /><path d="M83 43Q98 57 83 79L73 90 83 88 92 75 95 53Z" fill="#814b37" stroke="none" stroke-width="2.0" /><path d="M56 53L68 55M80 53L91 51" fill="none" stroke="#302a29" stroke-width="2.2" /><path d="M56 60Q62 54 68 59Q63 64 56 60ZM79 59Q85 53 91 58Q86 64 79 59Z" fill="#f8edcf" stroke="#302a29" stroke-width="1.2" /><ellipse cx="64" cy="59" rx="1.8" ry="2.6" fill="#302a29" stroke="none" stroke-width="2"/><ellipse cx="85" cy="58" rx="1.8" ry="2.6" fill="#302a29" stroke="none" stroke-width="2"/><path d="M74 57L71 67Q63 73 70 76Q76 78 81 73" fill="none" stroke="#302a29" stroke-width="1.5" /><path d="M63 82Q74 87 85 79" fill="none" stroke="#302a29" stroke-width="1.3" /><path d="M48 74L39 46 42 25 53 29Q70 16 87 28L101 24 103 44 95 77 89 54 80 42 61 42 53 55Z" fill="#b83f35" stroke="#302a29" stroke-width="2.0" /><path d="M44 29L53 34 45 42M91 33L99 29 98 41Z" fill="#d6ad57" stroke="#302a29" stroke-width="2.0" /><path d="M54 34L66 39 56 44M84 33L75 39 88 44M41 48L50 51 45 58M98 48L91 53 95 60" fill="none" stroke="#622a2c" stroke-width="4" /><path d="M61 33L71 29 81 33 73 37Z" fill="#d6ad57" stroke="#302a29" stroke-width="2.0" /><path d="M54 74L62 83Q73 89 86 80L93 73 91 88 83 98 69 99 59 91Z" fill="#34292a" stroke="#302a29" stroke-width="2.0" /><path d="M64 86Q74 91 84 84" fill="none" stroke="#ad714b" stroke-width="2" /><path d="M62 91L66 95M71 92V97M82 90L79 95" fill="none" stroke="#917468" stroke-width="1.1" opacity=".45"/><g transform="translate(72 117) scale(.58)"><path d="M0-10Q9-2 6 5Q0 12-6 5Q-10 0-4-4L-3 2Z" fill="#f8edcf" stroke="#302a29" stroke-width="1.5" /></g></g>
<path d="M16 130H128" stroke="#b49b70" stroke-width=".8"/>
<path d="M12 12h7m-7 0v7m120-7h-7m7 0v7" fill="none" stroke="#b83f35" stroke-width="2"/>
<text x="72" y="141" text-anchor="middle" font-family="Georgia,serif" font-size="10.5" font-weight="700" fill="#39302a">Wizard</text>
</svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

-11
View File
@@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 144 150" role="img" aria-label="Wizard token">
<title>Wizard</title><desc>Androgynous tan-skinned wizard with dark hair and a magenta horned crown.</desc>
<defs><linearGradient id="paper" x2="0" y2="1"><stop stop-color="#fbf2d9"/><stop offset="1" stop-color="#e8d6ae"/></linearGradient><radialGradient id="halo"><stop stop-color="#ac3876" stop-opacity=".2"/><stop offset="1" stop-color="#ac3876" stop-opacity=".03"/></radialGradient></defs>
<rect x="2" y="2" width="140" height="146" rx="9" fill="url(#paper)" stroke="#39302a" stroke-width="2.5"/>
<rect x="6" y="6" width="132" height="138" rx="6" fill="none" stroke="#b49b70" stroke-width=".8"/>
<circle cx="72" cy="68" r="52" fill="url(#halo)"/>
<g stroke-linecap="round" stroke-linejoin="round"><ellipse cx="72" cy="119" rx="43" ry="5" fill="#725b3d" stroke="none" stroke-width="0" opacity=".18"/><path d="M17 121Q21 96 49 85L92 85Q120 98 128 121Z" fill="#ac3876" stroke="#302a29" stroke-width="2.0" /><path d="M17 121L42 102 59 121M98 94L87 121H128Z" fill="#62264f" stroke="none" stroke-width="2.0" /><path d="M48 87L71 108 96 87 89 121H56Z" fill="#e891b6" stroke="#302a29" stroke-width="2.0" /><path d="M49 89L71 106 95 89" fill="none" stroke="#d6ad57" stroke-width="3" /><path d="M50 37Q72 22 94 39L98 73 91 95 80 88 57 93 48 76Z" fill="#332932" stroke="#302a29" stroke-width="2.0" /><path d="M53 49Q53 31 74 31Q93 33 95 52L90 76 75 93 62 86 53 71Z" fill="#c18b66" stroke="#302a29" stroke-width="2.0" /><path d="M83 43Q98 57 83 79L73 90 83 88 92 75 95 53Z" fill="#945b48" stroke="none" stroke-width="2.0" /><path d="M57 53L69 56M80 55L91 51" fill="none" stroke="#302a29" stroke-width="2.2" /><path d="M56 60Q62 54 68 59Q63 64 56 60ZM79 59Q85 53 91 58Q86 64 79 59Z" fill="#f8edcf" stroke="#302a29" stroke-width="1.2" /><ellipse cx="64" cy="59" rx="1.8" ry="2.6" fill="#302a29" stroke="none" stroke-width="2"/><ellipse cx="85" cy="58" rx="1.8" ry="2.6" fill="#302a29" stroke="none" stroke-width="2"/><path d="M74 59L71 70 77 72" fill="none" stroke="#302a29" stroke-width="1.5" /><path d="M65 81Q75 84 83 79" fill="none" stroke="#302a29" stroke-width="1.3" /><path d="M50 54Q46 39 52 28Q44 27 35 13Q30 41 48 50L53 59 63 48 75 53 84 46 94 57 97 49Q114 35 109 13Q101 28 92 28Q99 42 93 47L80 38 74 46 64 38Z" fill="#ac3876" stroke="#302a29" stroke-width="2.0" /><path d="M49 40Q35 31 35 13M96 40Q108 29 109 13" fill="none" stroke="#e891b6" stroke-width="4" /><path d="M70 32L75 27 80 32 75 40Z" fill="#d6ad57" stroke="#302a29" stroke-width="2.0" /><path d="M49 63L51 79 59 84M96 61L94 80 86 88" fill="none" stroke="#e891b6" stroke-width="3" /><path d="M58 43L61 47 66 42M55 76L56 88 62 94" fill="none" stroke="#332932" stroke-width="3" /><g transform="translate(72 117) scale(.58)"><path d="M-10-8Q-9 8 0 8Q9 8 10-8L4-3 0-7-4-3Z" fill="#f8edcf" stroke="#302a29" stroke-width="1.5" /></g></g>
<path d="M16 130H128" stroke="#b49b70" stroke-width=".8"/>
<path d="M12 12h7m-7 0v7m120-7h-7m7 0v7" fill="none" stroke="#ac3876" stroke-width="2"/>
<text x="72" y="141" text-anchor="middle" font-family="Georgia,serif" font-size="10.5" font-weight="700" fill="#39302a">Wizard</text>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB