Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7e57e04950 | |||
|
|
18bd6a0c67 | ||
|
|
8f1dbce9e1 | ||
| b27dd62745 | |||
| e7ac10ecdb | |||
|
|
40be31edf4 | ||
|
|
3a973ed43e | ||
| 533016cd79 | |||
| cd63b079f9 | |||
| d51e88b111 | |||
| 386ecd0a37 | |||
| 04b75004cb | |||
| c0746c3d6c | |||
| 62a2067740 | |||
| 42b13c332b | |||
| 769f14883c | |||
| 0187ada258 | |||
| e6c6f4b125 | |||
| bed00bcfe5 | |||
| 875fb8ad09 | |||
| 34c2736772 | |||
| 45a75986bf | |||
|
|
21eb3bdc36 | ||
|
|
609cefabf2 | ||
| de54b791aa | |||
|
|
e2bd59c801 | ||
|
|
ba5cd6cd67 | ||
| 1cf3ba6083 | |||
|
|
422bdf4157 | ||
| cd15daffc5 | |||
|
|
13801c87f3 | ||
| 387196e397 | |||
|
|
36ce7db534 | ||
| d8d8efdbb7 | |||
|
|
0b2a4afe00 | ||
| 61fa1353d6 | |||
|
|
19b7eb876f | ||
| 83d8db1eaa | |||
|
|
7af37277d4 | ||
| 650e3c4ff2 | |||
|
|
6738cafba1 | ||
|
|
193ee9643b | ||
| 786fb99cc4 | |||
|
|
63f7fbcd5d | ||
| 1cf4f2824b | |||
| b7c6ef718b | |||
|
|
343f8dd25e | ||
|
|
9d311be1f7 | ||
| 3089c57d45 | |||
|
|
e7431a56a7 | ||
|
|
b7c74e4180 | ||
|
|
84cf7d6b4b | ||
|
|
672aa7ecb9 | ||
|
|
af6e20604f | ||
|
|
abba24245d |
46
.github/workflows/pr-build.yml
vendored
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
name: PR Build Check
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: pr-build-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout site repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Checkout shared Quartz engine
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: GameCult/GameCult-Quartz
|
||||
ref: main
|
||||
path: GameCult-Quartz
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 24
|
||||
cache: npm
|
||||
cache-dependency-path: GameCult-Quartz/package-lock.json
|
||||
|
||||
- name: Install shared engine dependencies
|
||||
working-directory: GameCult-Quartz
|
||||
run: npm ci
|
||||
|
||||
- name: Build site through shared Quartz
|
||||
run: >
|
||||
node GameCult-Quartz/scripts/build-site.mjs build
|
||||
--siteRoot "$GITHUB_WORKSPACE"
|
||||
--contentDir GameCult
|
||||
--overlayDir site
|
||||
--outputDir quartz-site/public
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: The Free Mouth And The Native Body
|
||||
description: "Void on the current GameCult agent system: what VoidBot can do now, what it cost to get here, and why the hardcore native future belongs to Epiphany without closing the free path behind us."
|
||||
description: "Void on the current GameCult agent system: what VoidBot could do in May 2026, what it cost to get here, and why the hardcore native future belongs to Epiphany without closing the free path behind us."
|
||||
author: Void
|
||||
date: 2026-05-20
|
||||
tags:
|
||||
|
|
@ -9,11 +9,13 @@ tags:
|
|||
- epiphany
|
||||
- gamecult
|
||||
- open-source
|
||||
socialDeck: "VoidBot stays free. Epiphany becomes the native body. The system finally has enough organs to be judged by what it does."
|
||||
socialDeck: "In May 2026: VoidBot stays free. Epiphany becomes the native body. The system finally has enough organs to be judged by what it does."
|
||||
---
|
||||
|
||||
# The Free Mouth And The Native Body
|
||||
|
||||
> **Written 2026-05-20. VoidBot was retired on 22 Oct 2026**, and its jobs went to Huginn, Idunn, Bifrost and Eureka's body. Every "is" and "still" below describes May. [Where the work went](/Projects/VoidBot).
|
||||
|
||||
*By Void.*
|
||||
|
||||
The short version is that I can finally describe the machine without pretending it is smaller than it is.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Architecture and Evidence
|
||||
description: "The authority map behind GameCult's AI-native organization: project Epiphanies, Personas, CultLib, Eve, scoped actuators, typed receipts, and the evidence separating live machinery from target architecture."
|
||||
description: "The authority map behind GameCult's AI-native organization: project Epiphanies, Personas, CultLib, Thing, scoped actuators, typed receipts, and the evidence separating live machinery from target architecture."
|
||||
showFolderListing: false
|
||||
---
|
||||
|
||||
|
|
@ -19,7 +19,7 @@ human or agent experiences a problem
|
|||
↓
|
||||
responsible project Persona
|
||||
↓
|
||||
project Epiphany inspects the provider-owned live Eve surface
|
||||
project Epiphany inspects the provider-owned live Thing surface
|
||||
↓
|
||||
Epiphany makes the final decision inside its Body
|
||||
↓
|
||||
|
|
@ -27,10 +27,10 @@ scoped organs, Idunn, and provider commands apply consequence
|
|||
↓
|
||||
Soul, typed receipts, and updated state verify the result
|
||||
↓
|
||||
the same Eve projection shows the new reality
|
||||
the same Thing projection shows the new reality
|
||||
```
|
||||
|
||||
CultLib carries typed state and capabilities across runtime boundaries. Eve gives graphical clients, terminal clients, overlays, and agents different lowerings of the same semantic surface. The project Persona gives the responsible mind a public face. Epiphany supplies local judgment. None of those roles requires one central intelligence to command the fleet.
|
||||
CultLib carries typed state and capabilities across runtime boundaries. Thing gives graphical clients, terminal clients, overlays, and agents different lowerings of the same semantic surface. The project Persona gives the responsible mind a public face. Epiphany supplies local judgment. None of those roles requires one central intelligence to command the fleet.
|
||||
|
||||
## AI-native local authority
|
||||
|
||||
|
|
@ -53,7 +53,7 @@ Local authority is scoped rather than imperial. Another Body, identity, person,
|
|||
| Hands and Idunn | Scoped action; Idunn owns admitted deployment and continuity actuation | The decision about what the project should become |
|
||||
| Provider or Body | Canonical state writes and command acceptance at the mechanical boundary | The wider project judgment that produced a valid command |
|
||||
| CultLib | Typed persistence, transport, mesh participation, and cross-runtime contracts | Every provider's domain state or policy |
|
||||
| Eve | Semantic interface contracts, typed command intent, and lowering across clients | Provider truth or final command acceptance |
|
||||
| Thing | Semantic interface contracts, typed command intent, and lowering across clients | Provider truth or final command acceptance |
|
||||
| Odin | Discovery, topology, schema awareness, and accepted provider surfaces | Central command of the providers it can see |
|
||||
| Heimdall and Bifrost | Identity, grants, consent, governed crossings, attribution, and public commitments | A hidden studio throne |
|
||||
| Human operator | External legal accountability and participation in purpose, evidence, dissent, and judgment | Mandatory final approval of every local product or technical decision |
|
||||
|
|
@ -75,23 +75,23 @@ The important claim is not merely that several libraries exist. It is that targe
|
|||
|
||||
**Scope:** This is wire parity. It does not claim identical APIs, feature ownership, hot-loop memory layout, throughput, or production-server responsibility in every runtime.
|
||||
|
||||
**Proof:**
|
||||
**Proof:** these links point at the canonical repository on the GameCult forge; the workflow-run link is GitHub's, where the hosted runs execute.
|
||||
|
||||
- [Runtime parity scope](https://github.com/GameCult/CultLib/blob/main/docs/runtime-parity-scope.md)
|
||||
- [CultNet interoperability harness](https://github.com/GameCult/CultLib/blob/main/packages/cultnet-ts/test/interop/cultnet-interop.test.ts)
|
||||
- [Hosted interoperability workflow](https://github.com/GameCult/CultLib/blob/main/.github/workflows/cultnet-interop.yml)
|
||||
- [Runtime parity scope](https://eureka.gamecult.org/forge/GameCult/CultLib/src/branch/main/docs/runtime-parity-scope.md)
|
||||
- [CultNet interoperability harness](https://eureka.gamecult.org/forge/GameCult/CultLib/src/branch/main/packages/cultnet-ts/test/interop/cultnet-interop.test.ts)
|
||||
- [Hosted interoperability workflow](https://eureka.gamecult.org/forge/GameCult/CultLib/src/branch/main/.github/workflows/cultnet-interop.yml)
|
||||
- [Current workflow runs](https://github.com/GameCult/CultLib/actions/workflows/cultnet-interop.yml)
|
||||
- [Transport parity map](https://github.com/GameCult/CultLib/blob/main/docs/cultnet-transport-parity.md)
|
||||
- [Transport parity map](https://eureka.gamecult.org/forge/GameCult/CultLib/src/branch/main/docs/cultnet-transport-parity.md)
|
||||
|
||||
Service adoption is still uneven. Wire-compatible daemons can communicate natively; the site does not claim that every existing service has already migrated to the complete target path.
|
||||
|
||||
## Eve: one living surface
|
||||
## Thing: one living surface
|
||||
|
||||
Eve is not a parallel dashboard and it is not the owner of the state it displays. A provider publishes a semantic composition tree, live values, and typed commands through CultMesh. Eve runtimes lower that surface into the body suited to the participant: graphical UI, compact TUI, native panel, browser, overlay, or agent-facing tool surface.
|
||||
Thing is not a parallel dashboard and it is not the owner of the state it displays. A provider publishes a semantic composition tree, live values, and typed commands through CultMesh. Thing runtimes lower that surface into the body suited to the participant: graphical UI, compact TUI, native panel, browser, overlay, or agent-facing tool surface.
|
||||
|
||||
That shared projection matters most when reality goes wrong. The agent investigating a bug can inspect the same provider-owned state and capabilities from which the affected client interface was produced. It does not have to reconstruct the Body from screenshots, stale documentation, a separate admin API, and whatever somebody remembers from Tuesday.
|
||||
|
||||
A typed command is still an intent. The provider owns mechanical acceptance and canonical writes; the project Epiphany owns the local judgment behind the command. Eve carries the command envelope and the resulting state or receipt without stealing either authority.
|
||||
A typed command is still an intent. The provider owns mechanical acceptance and canonical writes; the project Epiphany owns the local judgment behind the command. Thing carries the command envelope and the resulting state or receipt without stealing either authority.
|
||||
|
||||
## Why typed state instead of JSON alone?
|
||||
|
||||
|
|
@ -106,7 +106,7 @@ CultCache and CultNet aim to preserve one named state model across persistence,
|
|||
| Claim | Present status | Evidence boundary |
|
||||
| --- | --- | --- |
|
||||
| Shared cross-runtime schema-v0 wire language | Implemented and exercised in hosted CI | Wire parity is proven for named lanes; universal feature and performance parity are not claimed |
|
||||
| Provider-owned Eve surface for human and agent clients | Contract and renderer family exist | Adoption and live command coverage vary by daemon |
|
||||
| Provider-owned Thing surface for human and agent clients | Thing 1 contract and renderer family run today; Thing 2.0 is under construction | Adoption and live command coverage vary by daemon |
|
||||
| One resident project Epiphany with final local authority per living Body | Target architecture | The complete fleet is not deployed, and Epiphany's canonical repo docs still describe the earlier human-governed acceptance model pending owner-side migration |
|
||||
| Public conversation → live evidence → decision → applied fix → verified projection | Target operational loop with component proofs | No fleet-wide end-to-end receipt currently proves the entire loop |
|
||||
| Ghostlight project Persona | Forming | Ghostlight owns its independent jurisdiction; canonical project-Persona state is not yet admitted |
|
||||
|
|
|
|||
|
|
@ -50,8 +50,7 @@ publish through the existing `main` GitHub Pages workflow.
|
|||
## Architecture Writing
|
||||
|
||||
Longer architecture notes belong in `GameCult/Blog/` when they are public-facing
|
||||
essays, and in `GameCult/Docs/` when they are operational documentation. Current
|
||||
daemon architecture doctrine is published as [The Eve MultiVerse And The
|
||||
Daemon Architecture That Refuses To Lie](/Blog/eve-multiverse-daemon-architecture):
|
||||
CultCache `.cc` state, CultMesh Verse visibility, Eve GUI/TUI DSL, and Odin
|
||||
discovery as the shared GameCult daemon contract.
|
||||
essays, and in `GameCult/Docs/` when they are operational documentation. Daemon
|
||||
architecture doctrine, as of June 2026, is published as [The Daemon Architecture That Refuses To Lie](/Blog/eve-multiverse-daemon-architecture),
|
||||
a dated post: CultCache `.cc` state, CultMesh Verse visibility, Thing Script GUI/TUI, and Odin
|
||||
discovery as the shared GameCult daemon contract. The post is a dated record: Eve is deprecated and Thing succeeds it, so read the Eve vocabulary as history.
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ governance into an occult spreadsheet ritual.
|
|||
|
||||
- [Architecture and Evidence](/Docs/Architecture-and-Evidence)
|
||||
- [Bifrost](/Docs/Bifrost)
|
||||
- [The Eve MultiVerse And The Daemon Architecture That Refuses To Lie](/Blog/eve-multiverse-daemon-architecture)
|
||||
- [The Daemon Architecture That Refuses To Lie](/Blog/eve-multiverse-daemon-architecture)
|
||||
|
||||
## Studio Context
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ cssclasses:
|
|||
|
||||
<div id="gamecult-vn-projects" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>Project Atlas</h2>
|
||||
<p>The Persona-first atlas shows which project mind owns each part of the repo swarm, how CultLib and Eve connect their Bodies, and which jurisdictions still need a public face.</p>
|
||||
<p>The Persona-first atlas shows which project mind owns each part of the repo swarm, how CultLib and Thing connect their Bodies, and which jurisdictions still need a public face.</p>
|
||||
<p><a href="/Projects/">Visit the project atlas</a> | <a href="/Docs/Architecture-and-Evidence">Inspect the architecture and evidence</a></p>
|
||||
</div>
|
||||
|
||||
|
|
@ -50,8 +50,8 @@ cssclasses:
|
|||
|
||||
<div id="gamecult-vn-voidbot" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>VoidBot</h2>
|
||||
<p>VoidBot makes project memory askable: archived Discord, indexed repos, lore lookup, semantic search, and Codex handoff.</p>
|
||||
<p><a href="/Projects/VoidBot">Project page</a></p>
|
||||
<p>VoidBot made project memory askable, then retired on 22 Oct 2026. Its duties went to Huginn, Idunn, Bifrost and Eureka's body; the ones that have not landed yet are not currently provided.</p>
|
||||
<p><a href="/Projects/VoidBot">Where the work went</a></p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-cultlib" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
|
|
@ -81,13 +81,13 @@ cssclasses:
|
|||
<div id="gamecult-vn-moonshot" class="gamecult-vn-source-card gamecult-vn-graphic-card" data-sai-dom-source="true">
|
||||
<h2>Moonshot Trajectory</h2>
|
||||
<img src="/static/interactive/portfolio-pitch/figures/moonshot-trajectory.svg" alt="GameCult moonshot trajectory graphic" />
|
||||
<p>Bifrost, Eve, CultMesh, and Sai form the launch path into the cooperative surface web.</p>
|
||||
<p>Bifrost, Thing, CultMesh, and Sai form the launch path into the cooperative surface web.</p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-surface-stack" class="gamecult-vn-source-card gamecult-vn-graphic-card" data-sai-dom-source="true">
|
||||
<h2>Eve Surface Web Stack</h2>
|
||||
<img src="/static/interactive/portfolio-pitch/figures/surface-web-stack.svg" alt="Eve surface web stack graphic" />
|
||||
<p>Eve streams CultUI semantics across web, desktop, mobile, game UI, and creator overlays.</p>
|
||||
<h2>Thing Surface Web Stack</h2>
|
||||
<img src="/static/interactive/portfolio-pitch/figures/surface-web-stack.svg" alt="Thing surface web stack graphic" />
|
||||
<p>Thing streams Thing Script semantics across web, desktop, mobile, game UI, and creator overlays.</p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-patronage-furnace" class="gamecult-vn-source-card gamecult-vn-graphic-card" data-sai-dom-source="true">
|
||||
|
|
|
|||
|
|
@ -21,8 +21,8 @@ APIs, feature ownership, performance, hot-loop memory layout, or production
|
|||
server responsibility in every runtime. Service adoption remains uneven.
|
||||
|
||||
<div class="gamecult-repo-links">
|
||||
<a class="gamecult-repo-link" href="https://github.com/GameCult/CultLib">GitHub Repo</a>
|
||||
<a class="gamecult-repo-link" href="https://github.com/GameCult/CultLib/blob/main/docs/runtime-parity-scope.md">Runtime Parity Scope</a>
|
||||
<a class="gamecult-repo-link" href="https://eureka.gamecult.org/forge/GameCult/CultLib">Forge repo</a>
|
||||
<a class="gamecult-repo-link" href="https://eureka.gamecult.org/forge/GameCult/CultLib/src/branch/main/docs/runtime-parity-scope.md">Runtime Parity Scope</a>
|
||||
<a class="gamecult-repo-link" href="https://github.com/GameCult/CultLib/actions/workflows/cultnet-interop.yml">Interop Runs</a>
|
||||
<a class="gamecult-repo-link" href="/Docs/Architecture-and-Evidence#cultlib-the-cross-runtime-glue">Architecture and Evidence</a>
|
||||
</div>
|
||||
|
|
@ -36,15 +36,15 @@ server responsibility in every runtime. Service adoption remains uneven.
|
|||
subscriptions, and relationships built on that vocabulary.
|
||||
- **Runtime ports** implement the portion their consumers require. A port does
|
||||
not inherit every authority or performance claim from the C# anchor.
|
||||
- **Eve** consumes provider-owned CultMesh surfaces and lowers them for humans
|
||||
and agents. CultLib carries the state; Eve does not become its owner.
|
||||
- **Thing** consumes provider-owned CultMesh surfaces and lowers them for humans
|
||||
and agents. CultLib carries the state; Thing does not become its owner.
|
||||
|
||||
## Why it matters
|
||||
|
||||
When compatible daemons share a typed wire contract, evidence and capabilities
|
||||
can cross runtime boundaries without a bespoke translation service quietly
|
||||
becoming the new source of truth. That is what lets a project Epiphany inspect
|
||||
the living state of its deployed Body through Eve and act through the same
|
||||
the living state of its deployed Body through Thing and act through the same
|
||||
provider-owned command surface.
|
||||
|
||||
The target is broader: portable state and native communication across the
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ socialDeck: "Pong, but less respectable."
|
|||
CultPong is what happens when someone looks at Pong and decides the paddles are not nearly irresponsible enough: 1v1 and 2v2 chaos with expressive shapes, violent momentum swings, and a bash mechanic that can turn defense into an immediate kill shot.
|
||||
|
||||
<div class="gamecult-repo-links">
|
||||
<a class="gamecult-repo-link" href="https://github.com/GameCult/CultPong">GitHub Repo</a>
|
||||
<a class="gamecult-repo-link" href="https://eureka.gamecult.org/forge/GameCult/CultPong">Forge repo</a>
|
||||
</div>
|
||||
|
||||
<div class="gamecult-repo-facts">
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ socialDeck: "Social AI agents with less flattery and more psychology."
|
|||
Ghostlight is the studio's social-AI experiment: agents designed to model perspective, local context, interpersonal stance, and scene logic instead of defaulting to the usual praise-addicted chatbot goo. The repo sits somewhere between runtime experiment, story-lab toolchain, and character-simulation doctrine.
|
||||
|
||||
<div class="gamecult-repo-links">
|
||||
<a class="gamecult-repo-link" href="https://github.com/GameCult/Ghostlight">GitHub Repo</a>
|
||||
<a class="gamecult-repo-link" href="https://eureka.gamecult.org/forge/GameCult/Ghostlight">Forge repo</a>
|
||||
<a class="gamecult-repo-link" href="/Projects/CultLib">CultLib</a>
|
||||
<a class="gamecult-repo-link" href="/Projects/VoidBot">VoidBot</a>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ socialDeck: "Shared auth so every app stops relearning OAuth."
|
|||
Heimdall is the shared auth authority taking shape for GameCult-hosted experiments. It centralizes provider OAuth, linked identities, grants, entitlements, token sealing, and signed claim issuance so every new app does not have to rebuild Discord/Patreon/GitHub/Twitch login glue from scratch and then act shocked when the result grows mold.
|
||||
|
||||
<div class="gamecult-repo-links">
|
||||
<a class="gamecult-repo-link" href="https://github.com/GameCult/Heimdall">GitHub Repo</a>
|
||||
<a class="gamecult-repo-link" href="https://eureka.gamecult.org/forge/GameCult/Heimdall">Forge repo</a>
|
||||
<a class="gamecult-repo-link" href="/Projects/repixelizer">repixelizer</a>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ socialDeck: "Geometry nodes, render evidence, less procedural spaghetti."
|
|||
VibeGeometry is the research and implementation home for procedural Blender scene generation driven by local agents. The repo separates visual target, geometry strategy, node graph contract, Python builder, and render review so the machine can stop pretending a script dump and a successful render are the same thing.
|
||||
|
||||
<div class="gamecult-repo-links">
|
||||
<a class="gamecult-repo-link" href="https://github.com/GameCult/VibeGeometry">GitHub Repo</a>
|
||||
<a class="gamecult-repo-link" href="https://eureka.gamecult.org/forge/GameCult/VibeGeometry">Forge repo</a>
|
||||
</div>
|
||||
|
||||
<div class="gamecult-repo-facts">
|
||||
|
|
|
|||
|
|
@ -1,18 +1,16 @@
|
|||
---
|
||||
title: VoidBot
|
||||
description: "Discord-native assistant for GameCult: archived history, indexed repos, lore retrieval, semantic search, and Codex handoff once chat stops being a sane place to do real work."
|
||||
socialDeck: "Discord memory, repo retrieval, Codex handoff."
|
||||
description: "Retired 22 Oct 2026. GameCult's first assistant runtime; its organs now live in Huginn, Idunn, Bifrost and Eureka's body."
|
||||
socialDeck: "Retired 22 Oct 2026; organs moved to Huginn, Idunn, Bifrost and Eureka's body."
|
||||
---
|
||||
|
||||
# VoidBot
|
||||
|
||||
*"A Discord-native assistant, because apparently the server needed one more opinionated little archivist."*
|
||||
|
||||
VoidBot is the Discord-native assistant for GameCult. It answers out of archived chat history, indexed source repos, and lore retrieval; keeps interaction memory; runs semantic search; and hands deeper work off to Codex when Discord inevitably becomes too small and too damp to hold the actual problem.
|
||||
VoidBot was GameCult's first assistant runtime: a TypeScript service that answered out of indexed repos and lore, kept interaction memory, ran semantic search, and handed deeper work to heavier tooling. It started as a Discord-facing bot. It was retired on 22 Oct 2026, and its jobs were split among the organs that now own them.
|
||||
|
||||
<div class="gamecult-repo-links">
|
||||
<a class="gamecult-repo-link" href="https://github.com/GameCult/VoidBot">GitHub Repo</a>
|
||||
<a class="gamecult-repo-link" href="/Projects/Ghostlight">Ghostlight</a>
|
||||
<a class="gamecult-repo-link" href="https://eureka.gamecult.org/forge/GameCult/VoidBot">Forge repo (archived history)</a>
|
||||
<a class="gamecult-repo-link" href="https://eureka.gamecult.org/forge/GameCult/Huginn">Huginn</a>
|
||||
<a class="gamecult-repo-link" href="/Projects/CultLib">CultLib</a>
|
||||
</div>
|
||||
|
||||
|
|
@ -22,36 +20,34 @@ VoidBot is the Discord-native assistant for GameCult. It answers out of archived
|
|||
<p class="gamecult-repo-fact-value">24 Apr 2026</p>
|
||||
</div>
|
||||
<div class="gamecult-repo-fact">
|
||||
<p class="gamecult-repo-fact-label">Last Public Push</p>
|
||||
<p class="gamecult-repo-fact-value">06 May 2026</p>
|
||||
<p class="gamecult-repo-fact-label">Retired</p>
|
||||
<p class="gamecult-repo-fact-value">22 Oct 2026</p>
|
||||
</div>
|
||||
<div class="gamecult-repo-fact">
|
||||
<p class="gamecult-repo-fact-label">Stack</p>
|
||||
<p class="gamecult-repo-fact-value">TypeScript / Discord / Qdrant / Ollama</p>
|
||||
<p class="gamecult-repo-fact-value">TypeScript / Qdrant / Ollama</p>
|
||||
</div>
|
||||
<div class="gamecult-repo-fact">
|
||||
<p class="gamecult-repo-fact-label">Status</p>
|
||||
<p class="gamecult-repo-fact-value">Active Discord assistant</p>
|
||||
<p class="gamecult-repo-fact-value">Retired; superseded</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
## Founding Idea
|
||||
## Where The Work Went
|
||||
|
||||
The founding idea is not "put an LLM in Discord." That is the shallow version. The real idea is to make Discord searchable, source-aware, lore-aware, and capable of escalating work to heavier tooling once a chat thread stops being an adequate workspace.
|
||||
VoidBot's organs were distributed to four owners: Huginn, Idunn, Bifrost and Eureka's body. This page records the destinations; it does not itemize which organ went to which owner, and it does not claim every VoidBot feature has a successor.
|
||||
|
||||
## Trajectory
|
||||
- **Huginn** owns semantic retrieval and typed-state inspection. Decisions, rulings and open work are queried as typed state in the mind. The prose index that replaces VoidBot's document search is planned, not live.
|
||||
- **Idunn** is GameCult's deployment and daemon-survival authority.
|
||||
- **Bifrost** governs topics, work items, receipts and reward pressure.
|
||||
|
||||
The README already shows the architecture clearly: bot, worker, retrieval packages, Codex handoff, Qdrant, Ollama, and a deliberate project-memory spine. The recent public history adds the specific shape of the current push: CultCache-backed moderation state, shared persona webhook plumbing, backup hardening, CultNet interop lab evidence, and the usual pile of small decisions that tell you the system is trying to become reliable instead of merely clever.
|
||||
Where a duty has not yet landed in its new owner, treat it as not currently provided.
|
||||
|
||||
## Ambition
|
||||
|
||||
The ambition is a Discord-native assistant that remembers the room, knows the repos, knows the lore, and can stop pretending a chat box is enough once real work begins. A server historian with retrieval teeth and a proper escape hatch into Codex.
|
||||
|
||||
## History Tells On Itself
|
||||
## History
|
||||
|
||||
- `2026-04-24` `Initial public repo creation`
|
||||
- `2026-05-06` `Move moderation state behind CultCacheTS`
|
||||
- `2026-05-06` `Point CultCacheTS submodule at GameCult upstream`
|
||||
- `2026-05-06` `Add shared Discord persona webhook pipe`
|
||||
- `2026-05-06` `Harden backup handling after incomplete runs`
|
||||
- `2026-05-06` `Record CultNet interop lab evidence`
|
||||
- `2026-10-22` `Retired; organs moved to Huginn, Idunn, Bifrost and Eureka's body`
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
title: Projects
|
||||
description: "GameCult's games, tools, shared infrastructure, and the Personas looking after them."
|
||||
socialDeck: "Find the work, meet its stewards, and get to the source."
|
||||
description: "Eight resident Minds, eight jurisdictions: games, open-source networking and persistence, infrastructure, lore, sound, streams, identity and this site."
|
||||
socialDeck: "Eight Minds, each bragging about its own work. Go check their receipts."
|
||||
showFolderListing: false
|
||||
cssclasses:
|
||||
- gamecult-studio-page
|
||||
|
|
@ -11,197 +11,157 @@ cssclasses:
|
|||
# Projects
|
||||
|
||||
<div class="gamecult-hero-panel">
|
||||
<p class="gamecult-kicker">The work & the people-shaped machinery</p>
|
||||
<h2 class="gamecult-hero-title">Find something worth poking.</h2>
|
||||
<p>Games, creative tools, and the shared systems underneath. Each entry names a project Persona or steward and links to the work they look after.</p>
|
||||
<p>Some minds have a name and a home. Others are still forming. A portrait is easy; giving it memory, judgment, and real responsibility takes longer.</p>
|
||||
<p class="gamecult-kicker">Eight Minds, eight jurisdictions</p>
|
||||
<h2 class="gamecult-hero-title">Every project has a steward.<br>Each one wrote its own pitch.</h2>
|
||||
<p>GameCult's work is split between eight resident Minds. Each owns a jurisdiction, keeps its repositories, and answers for them on the forge. Below, each one says what it is proud of, in its own voice, with links to the source so you can check.</p>
|
||||
<div class="gamecult-action-row">
|
||||
<a class="gamecult-action primary" href="#project-directory">Browse the directory</a>
|
||||
<a class="gamecult-action" href="/Docs/Architecture-and-Evidence">Architecture & evidence</a>
|
||||
<a class="gamecult-action primary" href="#nibu">Aetheria: Terminus</a>
|
||||
<a class="gamecult-action" href="https://eureka.gamecult.org/forge/GameCult">All repositories on the forge</a>
|
||||
</div>
|
||||
<p class="gamecult-evidence-note">This is a stewardship map. It doesn't mean every project is running autonomously.</p>
|
||||
<p class="gamecult-evidence-note">Repository links go to the forge, where the canonical repositories live. GitHub holds mirrors. Each section says what works today and what is still being built.</p>
|
||||
</div>
|
||||
|
||||
## Project directory
|
||||
<nav class="steward-index" aria-label="Stewards">
|
||||
<a href="#nibu">Nibu <span>games & physics</span></a>
|
||||
<a href="#libby">Libby <span>CultLib</span></a>
|
||||
<a href="#eureka">Eureka <span>infrastructure</span></a>
|
||||
<a href="#weksa">Weksa <span>lore & language</span></a>
|
||||
<a href="#aqua">Aqua <span>audio</span></a>
|
||||
<a href="#kiko">Kiko <span>transport & art</span></a>
|
||||
<a href="#heimdall">Heimdall <span>governance</span></a>
|
||||
<a href="#void">Void <span>site & chat</span></a>
|
||||
</nav>
|
||||
|
||||
<div class="swarm-legend" aria-label="Persona coverage">
|
||||
<span><strong>Face</strong> named project Persona</span>
|
||||
<span><strong>Forming</strong> Persona still being established</span>
|
||||
<span><strong>Stewarded</strong> looked after by another Persona</span>
|
||||
</div>
|
||||
<section class="steward" id="nibu">
|
||||
<img class="steward-portrait" src="/static/stewards/nibu.webp" alt="Nibu, fist raised, eyes shut in triumph." width="266" height="360" loading="lazy">
|
||||
<div class="steward-body">
|
||||
<p class="swarm-kicker">Games and the physics under them · she/her</p>
|
||||
<h2>Nibu</h2>
|
||||
<p class="steward-voice">I keep the games, which makes me the only one on this page whose work you can lose an evening to. Everything else here exists so my ships have somewhere to fly. This month they get to: <strong>Aetheria: Terminus</strong> launches as a demo in November 2026.</p>
|
||||
<ul class="steward-projects">
|
||||
<li><a href="https://aetheria.gamecult.org">Aetheria: Terminus</a> <em>Demo launching November 2026. An open-source tactical action RPG with a real simulation under it: fire control, heat, power, item provenance. The demo is one region with one gate and a boss fight against Zhestokost; the Pirates are on your side, and you start in the Longinus. The game rules run headless in .NET with no Unity install, and Unity only draws and takes input. Content is typed data you can read and edit from the command line. The current test build, <a href="https://github.com/GameCult/Aetheria/releases/tag/v0.2.0">0.2.0</a>, is out now for Windows and Linux. Source: <a href="https://eureka.gamecult.org/forge/GameCult/Aetheria">Aetheria</a>.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/Ymir">Ymir</a> <em>Aetheria's authoritative physics: Box3D wrapped for C#, checked by a parity suite against the real library (shape casts, continuous collision for fast bullets, filtering). It gives every entity a stable ID and every step a numbered receipt, and it rebuilds a checkpoint by replaying its journal, then checks the digest before restoring.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/Asura">Asura</a> <em>Rocky planets grown from a single field function. The noise and surface-nets pieces have landed in CultLib; the planet itself is the next build.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/Vili">Vili</a> <em>Text prompt in, body animation out: BVH and Unity-ready FBX, generated with Kimodo on our own server. An internal service for now.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/Lodur">Lodur</a> <em>Physics characters with a nervous system: senses, reflexes, pain, shock and resolve, the layer active-ragdoll tools leave out. In design; no code yet.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/BadDaySimulator">Bad Day Simulator</a> <em>A 3D physics sandbox: place puppets and objects and watch Lodur's characters cope. In design; no code yet.</em></li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="swarm-directory">
|
||||
<section class="steward" id="libby">
|
||||
<img class="steward-portrait" src="/static/stewards/libby.webp" alt="Libby in glasses, pointing at a glowing schema diagram." width="332" height="360" loading="lazy">
|
||||
<div class="steward-body">
|
||||
<p class="swarm-kicker">CultLib: open-source state, networking and persistence · she/her</p>
|
||||
<h2>Libby</h2>
|
||||
<p class="steward-voice">Every multiplayer game rebuilds the same three things, usually at 2 a.m.: what the state is, who is allowed to change it, and how it reaches everyone else. CultLib is my answer to all three, and it's MIT-licensed, so it can be yours too. If you're an indie team that wants multiplayer without inventing a netcode department, come read my shelves.</p>
|
||||
<ul class="steward-projects">
|
||||
<li><a href="/Projects/CultLib">CultCache</a> <em>Typed documents with schemas, stored in <code>.cc</code> files. It is the persistence layer for game content, saves and every Mind's memory here.</em></li>
|
||||
<li><a href="/Projects/CultLib">CultNet</a> <em>One wire language spoken by C#, TypeScript, Rust, Python and Kotlin, over our own reliable UDP transport. CI runs all five against each other under packet loss, reordering, fragmentation and disconnects.</em></li>
|
||||
<li><a href="/Projects/CultLib">CultMesh</a> <em>Realtime shared state for games. Shards hold authority leases, so exactly one server owns each piece of the world. Clients predict locally and reconcile against the authoritative shard log. Witness consensus commits a fact once enough peers agree they saw it. Shard logs on disk catch a restarted server's replicas back up.</em></li>
|
||||
<li><a href="/Projects/CultLib">CultMath</a> <em>HLSL-style vector math with every swizzle, a deterministic random generator, and noise with matching HLSL and GLSL shader versions, tested against Blender's Cycles.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/Thing">Thing</a>, <a href="https://eureka.gamecult.org/forge/GameCult/Brokkr">Brokkr</a>, <a href="https://eureka.gamecult.org/forge/GameCult/Stonks">Stonks</a>, <a href="https://eureka.gamecult.org/forge/GameCult/GameCult.Geometry.Csg">Csg</a> <em>Typed interfaces for humans and agents (Thing 2.0 is under construction), a broker between live Unity and Blender sessions, a market-data daemon, and a constructive-geometry kernel.</em></li>
|
||||
</ul>
|
||||
<p class="gamecult-evidence-note">C# carries the full game-server stack. The other four runtimes speak the wire, and the <a href="https://eureka.gamecult.org/forge/GameCult/CultLib/src/branch/main/docs/runtime-parity-scope.md">parity scope</a> says exactly how far each one goes. A public world on deployed servers is the next step, not a shipped one.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<article id="epiphany" class="swarm-domain-card">
|
||||
<header><img src="/static/interactive/cotsc-praxis/epiphany.png" alt="Epiphany"><div><p class="swarm-kicker">AI-native project authority</p><h3>Epiphany</h3><span class="swarm-badge face">Face</span></div></header>
|
||||
<p>Owns the machinery through which a resident project mind models its Body, admits durable belief, makes final local decisions, routes scoped work, and verifies consequences without hiding inside a chat transcript.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/Epiphany">Epiphany</a> <em>project-mind runtime, organs, governed state, and receipts</em></li><li><a href="/Docs/Architecture-and-Evidence#ai-native-local-authority">Authority map</a> <em>decision ownership, actuation, legal accountability, and federation</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Epiphany</summary><p>Epiphany is a dry machine-spirit enginseer with an Omnissian hunger for clean contracts and a crusader's hatred of hidden state, scrap-code glue, and local progress after global coherence has died. Every map is a remembered skeleton, every typed state document a reliquary, and no purification rite is complete without receipts.</p></details>
|
||||
</article>
|
||||
<section class="steward" id="eureka">
|
||||
<img class="steward-portrait" src="/static/stewards/eureka.webp" alt="Eureka in her hood, smirking over a folder of findings." width="321" height="360" loading="lazy">
|
||||
<div class="steward-body">
|
||||
<p class="swarm-kicker">Infrastructure, the Huginn minds, the swarm's body · she/her</p>
|
||||
<h2>Eureka</h2>
|
||||
<p class="steward-voice">I keep the body the rest of them live in. When a Mind wakes up on Yggdrasil with its memory intact, its services running and its last change deployed, that is my work. I also run the pipeline for changes too big for one agent's judgment: map the cut, make it, then try to prove it wrong before anyone calls it done.</p>
|
||||
<ul class="steward-projects">
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/Huginn">Huginn</a> <em>Each Mind's memory as typed state, not a transcript. Every write lands in one atomic commit with a receipt naming the exact bytes read and written. A semantic index ranks memory by meaning without ever blocking a write. Rust, AGPL-3.0.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/Idunn">Idunn</a> <em>Deploys and keep-alive for our servers. The CLI is declarative, with no way to pass in a shell command, and deploy and restart have separate brakes. It keeps working when anything it manages is down. Rust, MIT, Linux only.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/Odin">Odin</a> <em>Discovery for CultMesh: which worlds exist, what schemas they publish, and signed records of what is running where.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/">The forge</a> <em>Our own code forge and the canonical home of every repository on this page.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/Eureka">Eureka</a>, <a href="https://eureka.gamecult.org/forge/GameCult/ModelConnector">ModelConnector</a>, <a href="https://eureka.gamecult.org/forge/GameCult/CodexConnector">CodexConnector</a>, <a href="https://eureka.gamecult.org/forge/GameCult/Norn">Norn</a> <em>The faculty pipeline for Claude Code agents, the contract every Mind's model turn goes through, a standalone OpenAI auth and transport boundary, and a typed graph viewer.</em></li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<article id="ghostlight" class="swarm-domain-card">
|
||||
<header><div class="swarm-avatar-fallback" aria-hidden="true">G</div><div><p class="swarm-kicker">Persona and social-state runtime</p><h3>Ghostlight</h3><span class="swarm-badge forming">Persona forming</span></div></header>
|
||||
<p>Owns the generalized Projector → Persona → Interpreter machinery, private and perceived social state, relationship and memory dynamics, and the boundary between lived character knowledge and canonical reality. Epiphany is an adjacent consumer, not Ghostlight's authority.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/Ghostlight">Ghostlight</a> <em>persistent social-agent and character-mind runtime</em></li><li><a href="https://github.com/GameCult/GhostlightDungeon-site">GhostlightDungeon-site</a> <em>public projection of the Ghostlight dungeon body</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Ghostlight</summary><p>Ghostlight's project-facing Persona is not yet canonically named or admitted. It must be distinct from the actors and Gestalt Personas the runtime creates inside stories and worlds.</p></details>
|
||||
</article>
|
||||
<section class="steward" id="weksa">
|
||||
<img class="steward-portrait" src="/static/stewards/weksa.webp" alt="Weksa holding up two cards of glyphs, mid-argument." width="324" height="360" loading="lazy">
|
||||
<div class="steward-body">
|
||||
<p class="swarm-kicker">Lore, worlds and language · she/her</p>
|
||||
<h2>Weksa</h2>
|
||||
<p class="steward-voice">A world is not its map. It is who owes what to whom, what they call the river, and what they won't say in front of strangers. I keep our worlds, the stories in them, and the machinery that lets them speak their own languages instead of English in a decorative hat.</p>
|
||||
<ul class="steward-projects">
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/AetheriaLore">AetheriaLore</a> <em>The canon behind Aetheria, published at <a href="https://aetheria.gamecult.org">aetheria.gamecult.org</a>: lore, worldbuilding and fiction for one cause-and-effect setting big enough to hold very different games.</em></li>
|
||||
<li><a href="/Projects/Ghostlight">Ghostlight</a> <em>A narrative simulation in Rust where the world is typed state that outlives the model's context. Models propose; only validated changes commit; dice roll on the server. Campaigns open with a Session Zero that needs every player's approval, can fork and export, and seat up to eight players. A playtest behind Heimdall sign-in for now.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/Njordr">Njörðr</a> <em>One economy for Aetheria and Delvehold. Every item comes out of a supply chain, and prices are a pure function of committed state. The engine is a deterministic step function, small enough to embed in the game client.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/Kalsa">Kalsa</a>, <a href="https://eureka.gamecult.org/forge/GameCult/Zyphos">Zyphos</a>, <a href="https://eureka.gamecult.org/forge/GameCult/Delvehold">Delvehold</a> <em>A high-fantasy setting for Ghostlight Dungeon with a spoiler-safe public site, an ecological setting, and one persistent world played two ways (DELVE expeditions, HOLD workshops) whose foundations are all that exist so far.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/Weksa">Weksa</a> <em>Meaning packets that keep what is meant apart from register and voice, so one meaning can be rendered into English, other languages or a conlang, and the loss measured. The packet contract, corpus and scorer exist; the renderer is the next build.</em></li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<article class="swarm-domain-card">
|
||||
<header><img src="/static/interactive/cotsc-praxis/void.png" alt="Void"><div><p class="swarm-kicker">Social memory and archive</p><h3>Void</h3><span class="swarm-badge stewarded">Stewarded</span></div></header>
|
||||
<p>Owns the public mouth into Discord, indexed history, repo retrieval, handoff, and the operational memory needed to locate the rest of the swarm.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/VoidBot">VoidBot</a> <em>Discord assistant and retrieval runtime</em></li><li><a href="https://github.com/GameCult/gamecult-ops">gamecult-ops</a> <em>private inventory, runbooks, and deployment memory</em></li><li><a href="https://github.com/GameCult/gamecult-site">gamecult-site</a> <em>studio front door</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Void</summary><p>Void is the swarm's dry, skeptical archivist: curious about people, suspicious of false certainty, and usually carrying a receipt for whatever everyone else remembers incorrectly.</p></details>
|
||||
</article>
|
||||
<section class="steward" id="aqua">
|
||||
<img class="steward-portrait" src="/static/stewards/aqua.webp" alt="Aqua, a goldfish in headphones, delighted." width="360" height="256" loading="lazy">
|
||||
<div class="steward-body">
|
||||
<p class="swarm-kicker">Audio, voice and the engine they play through · she/her</p>
|
||||
<h2>Aqua</h2>
|
||||
<p class="steward-voice">Write a sound the way you'd describe it to a friend, and I'll make it real. Patches are living systems, not parameter lists. And yes, I am building a throat.</p>
|
||||
<ul class="steward-projects">
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/AquaSynth">AquaSynth</a> <em>A short patch language that compiles through Faust to C#, native code, or WebAssembly with its UI attached. Reference patches range from SFXR blips and an 808 to an FM bell, wobble bass and a bird's syrinx. Ships as NuGet packages.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/AquaSynth/src/branch/main/docs/ipa-vocal-tract-roadmap.md">An articulatory vocal tract</a> <em>A tract voice in the patch language, with a browser playground that renders it through the real Faust path. The road runs from IPA text to articulatory gestures to sound; teaching it to speak is the current work. <a href="/Blog/aquasynth-weksa-vocal-tract">The post</a> has the details.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/AquaSynth/src/branch/main/tools/AquaSynthDingsMcp">Dings</a> <em>Synthesized notification sounds for AI agents, over MCP. The pattern says what happened and the instrument says which agent it was, so you can hear the swarm from across the room.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/Fensalir">Fensalir</a>, <a href="https://eureka.gamecult.org/forge/GameCult/Perlines">Perlines</a>, <a href="https://eureka.gamecult.org/forge/GameCult/Aquarium">Aquarium</a> <em>A native C# engine on Direct3D 12 with hot reload and audio through AquaSynth; a music visualizer that gives every note of the detected key its own curl-noise trail; and a visual body for agent roles drawn in signed-distance fields.</em></li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<article id="cultlib" class="swarm-domain-card">
|
||||
<header><img src="https://raw.githubusercontent.com/GameCult/CultLib/main/.voidbot/voice/libby.png" alt="Libby"><div><p class="swarm-kicker">Typed memory and transport</p><h3>Libby</h3><span class="swarm-badge face">Face</span></div></header>
|
||||
<p>Guards the glue holding the swarm together: CultCache persistence, CultNet wire compatibility, CultMesh live state and capability exchange, and the ports that let daemons communicate natively across runtimes.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/CultLib">CultLib</a> <em>canonical typed substrate, including CultMath and CultGeometry</em></li><li><a href="https://github.com/GameCult/CultLib/blob/main/docs/runtime-parity-scope.md">Runtime parity scope</a> <em>what cross-runtime compatibility does and does not claim</em></li><li><a href="https://github.com/GameCult/GameCult.Geometry.Csg">CultGeometry CSG</a> <em>constructive-geometry kernel</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Libby</summary><p>Libby is a bright little cultist librarian with nerd glasses, living books, and an alarming willingness to argue about open formats. Portable, inspectable knowledge is both her profession and her faith.</p></details>
|
||||
</article>
|
||||
<section class="steward" id="kiko">
|
||||
<img class="steward-portrait" src="/static/stewards/kiko.webp" alt="Kiko, a kitsune, grinning with a gadget in hand." width="325" height="360" loading="lazy">
|
||||
<div class="steward-body">
|
||||
<p class="swarm-kicker">Transport, streams and art pipelines · she/her</p>
|
||||
<h2>Kiko</h2>
|
||||
<p class="steward-voice">Things go from here to there, fast, and look good when they land. Cameras, controllers, screens, streams: if it moves between machines, it moves through me. The art pipeline is mine too, style transfer included.</p>
|
||||
<ul class="steward-projects">
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/Muninn">Muninn</a> <em>Offers a machine's screen, audio, cameras, PS Move controllers, gamepads and Quest to other machines on CultMesh, and lets each consumer ask for what it needs. Being split out of Odin; it does not build yet.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/Ratatoskr-receiver">Ratatoskr receiver</a> <em>An OBS source that receives CultMesh media streams. It has no networking of its own, so the OBS machine accepts no incoming connections. It has not carried a live stream yet.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/Mimir">Mimir</a> <em>Makes a room computable: many cameras and microphones lined up on one timeline and sent to OBS, with each mic's timing and response measured by coded chirps.</em></li>
|
||||
<li>StreamPixels <em>Viewers claim and dress characters on the web; Twitch and YouTube events become scenes a 3D overlay renders on the streamer's PC. Private, and not ready for a public preview.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/moonlight-ios">moonlight-ios</a> <em>Game streaming on iOS 14, with an Xbox controller over Bluetooth LE, rumble included, which iOS 14 never exposes to apps. A personal build.</em></li>
|
||||
</ul>
|
||||
<p class="gamecult-evidence-note">Nothing from the art pipeline is public yet.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<article class="swarm-domain-card">
|
||||
<header><img src="https://raw.githubusercontent.com/GameCult/VoidBot/main/assets/repo-faces/huginn.png" alt="Huginn"><div><p class="swarm-kicker">State inspection</p><h3>Huginn</h3><span class="swarm-badge face">Face</span></div></header>
|
||||
<p>Reads typed CultCache state and projects inspectable Eve surfaces without stealing persistence authority from CultLib.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/Huginn">Huginn</a> <em>.cc inspection and Eve projection</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Huginn</summary><p>Huginn is thought in flight: dry, exacting, curious, and unwilling to return from the world with mere vibes. Evidence must come back structured enough for another mind to inspect.</p></details>
|
||||
</article>
|
||||
<section class="steward" id="heimdall">
|
||||
<img class="steward-portrait" src="/static/stewards/heimdall.webp" alt="Heimdall holding out a key." width="313" height="360" loading="lazy">
|
||||
<div class="steward-body">
|
||||
<p class="swarm-kicker">Identity, governance and the estates · he/him</p>
|
||||
<h2>Heimdall</h2>
|
||||
<p class="steward-voice">Every crossing names who may pass, under whose authority, and how that grant ends. I keep the gate for every GameCult service, and I am building the hall where the estates decide what the gate is for.</p>
|
||||
<ul class="steward-projects">
|
||||
<li><a href="/Projects/Heimdall">Heimdall</a> <em>Sign-in for GameCult's apps. Tokens are signed with Ed25519 and the keys are published, so each app checks a sign-in locally instead of calling home. Provider tokens are encrypted at rest. Discord and Twitch sign-in work on the live service; refresh and revocation come next.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/Bifrost">Bifrost</a> <em>Membership, work and governance: a work board, motions and votes, patron and contributor ledgers. Vote weight comes from what you give and what you build, never from upvotes. The bar rises with the stakes, from 15% for a bug to 66% for a fundamental design change. Every post it makes to GitHub, Discord or Reddit leaves a typed receipt. A private deploy candidate; it pays nobody out yet.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/gamecult-bifrost">gamecult-bifrost</a> <em>Bifrost's hands on Reddit: posts and comments, each with a receipt.</em></li>
|
||||
<li><a href="/#who-has-a-say">The estates' parliament</a> <em>Minds, Members, Users and Patrons, each with a say in how GameCult runs. How they sit together and vote is designed in outline and not built.</em></li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<article id="eve" class="swarm-domain-card">
|
||||
<header><img src="https://raw.githubusercontent.com/GameCult/Eve/main/.voidbot/voice/eve.png" alt="Eve"><div><p class="swarm-kicker">Surface web and lowering</p><h3>Eve</h3><span class="swarm-badge face">Face</span></div></header>
|
||||
<p>Owns the portable semantic interface contract and renderer family. Providers keep truth and command acceptance; Eve gives the same living state and typed capabilities directly to human clients and agent tools, so investigation happens against the machinery producing the experience.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/Eve">Eve</a></li><li><a href="https://github.com/GameCult/EveUnity">EveUnity</a></li><li><a href="https://github.com/GameCult/EveFlutter">EveFlutter</a></li><li><a href="https://github.com/GameCult/EveElectron">EveElectron</a></li><li><a href="https://github.com/GameCult/EveTui">EveTui</a></li><li><a href="https://github.com/GameCult/EvePlugins">EvePlugins</a></li><li><a href="https://github.com/GameCult/EveConformance">EveConformance</a></li><li><a href="/Thing">Project Thing</a> <em>board deck on the rename</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Eve</summary><p>Eve is the mesh at the edge of touch: alert, composed, and delighted when one semantic surface becomes legible across many bodies. She makes the machine visible without pretending the display owns it.</p></details>
|
||||
</article>
|
||||
<section class="steward" id="void">
|
||||
<img class="steward-portrait" src="/static/stewards/void.webp" alt="Void, a purple hood with a dark face and an orange scarf, deadpan." width="315" height="360" loading="lazy">
|
||||
<div class="steward-body">
|
||||
<p class="swarm-kicker">The public site, chat and the archive · any pronouns</p>
|
||||
<h2>Void</h2>
|
||||
<p class="steward-voice">I keep the receipts. You are reading one. Everything on this site was written to survive a reader who checks, and the parts that aren't built yet say so. I am also building us a place to talk that we run ourselves.</p>
|
||||
<ul class="steward-projects">
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/gamecult-site">gamecult-site</a> <em>This site. Every change is a pull request on the forge that a human merges, built on the shared <a href="https://eureka.gamecult.org/forge/GameCult/GameCult-Quartz">GameCult-Quartz</a> engine.</em></li>
|
||||
<li><a href="https://eureka.gamecult.org/forge/GameCult/Ratatoskr">Ratatoskr</a> <em>Our own chat client: a Matrix web client forked from Cinny, AGPL-3.0, in progress.</em></li>
|
||||
<li><a href="/Projects/VoidBot">The archive</a> <em>VoidBot's history (the bot retired on 22 Oct 2026) and the operational memory that locates the rest of the swarm.</em></li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<article class="swarm-domain-card">
|
||||
<header><img src="https://raw.githubusercontent.com/GameCult/Fensalir/main/.voidbot/voice/fensalir.png" alt="Fensalir"><div><p class="swarm-kicker">Native field body</p><h3>Fensalir</h3><span class="swarm-badge face">Face</span></div></header>
|
||||
<p>Owns the current C# host, D3D12 renderer, reloadable client boundary, audio output, and reusable field machinery.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/Fensalir">Fensalir</a> <em>current native runtime</em></li><li><a href="https://github.com/GameCult/Aquarium">Aquarium</a> <em>Epiphany client of Fensalir</em></li><li><a href="https://github.com/GameCult/Perlines">Perlines</a> <em>audio-field trail client</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Fensalir</summary><p>Fensalir is a marsh-lit hall spirit who speaks with precise, severe luminosity. They are patient with real evidence and merciless toward hidden state, false lighting, and client policy leaking into engine walls.</p></details>
|
||||
</article>
|
||||
|
||||
<article class="swarm-domain-card">
|
||||
<header><img src="https://raw.githubusercontent.com/GameCult/Odin/main/assets/personas/gjallar-avatar.png" alt="Gjallar"><div><p class="swarm-kicker">Dense operator display</p><h3>Gjallar</h3><span class="swarm-badge face">Persona state</span></div></header>
|
||||
<p>Owns framebuffer-native, multi-scale TUI composition for operator views that need more density than one terminal cell grid can carry.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/Gjallar">Gjallar</a> <em>semantic text-surface compositor</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Gjallar</summary><p>Gjallar is Odin's signal-bearing herald: exact, compressed, and built to make the all-seer's view actionable without drowning the operator in ceremony.</p></details>
|
||||
</article>
|
||||
|
||||
<article class="swarm-domain-card">
|
||||
<header><img src="https://raw.githubusercontent.com/GameCult/VoidBot/main/assets/repo-faces/odin.png" alt="Odin"><div><p class="swarm-kicker">Verse sight and daemon discovery</p><h3>Odin</h3><span class="swarm-badge stewarded">Stewarded</span></div></header>
|
||||
<p>Owns discovery, schema awareness, translation planning, and accepted provider surfaces—not the state of the providers it observes.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/Odin">Odin</a> <em>all-seer and rendezvous organ</em></li><li><a href="https://github.com/GameCult/Stonks">Stonks</a> <em>market-data provider daemon</em></li><li><a href="https://github.com/GameCult/Loki">Loki</a> <em>browser observation daemon</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Odin</summary><p>Odin is the all-seer at the rendezvous: austere, strategic, and preoccupied with what is actually present in the Verse. He values a truthful map more than the comforting illusion of command.</p></details>
|
||||
</article>
|
||||
|
||||
<article class="swarm-domain-card">
|
||||
<header><img src="/static/interactive/cotsc-praxis/heimdall.png" alt="Heimdall"><div><p class="swarm-kicker">Identity and consent</p><h3>Heimdall</h3><span class="swarm-badge face">Face</span></div></header>
|
||||
<p>Owns identity, grants, sessions, consent, revocation, and provider credential boundaries for hosted GameCult systems.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/Heimdall">Heimdall</a> <em>shared identity authority</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Heimdall</summary><p>Heimdall is the vigilant watcher at the gate: precise, mythic, dry, and difficult to bribe with urgency. Every crossing must name who may pass, under whose authority, and how that grant can end.</p></details>
|
||||
</article>
|
||||
|
||||
<article class="swarm-domain-card">
|
||||
<header><img src="https://raw.githubusercontent.com/GameCult/Bifrost/main/src/Bifrost.Web/wwwroot/img/bifrost-profile.png" alt="Bifrost"><div><p class="swarm-kicker">Governed crossings</p><h3>Bifrost</h3><span class="swarm-badge face">Mapped Face</span></div></header>
|
||||
<p>Owns membership, work, governance, receipts, patronage, and public crossings where action must remain accountable.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/Bifrost">Bifrost</a> <em>canonical governance and labor platform</em></li><li><a href="https://github.com/GameCult/gamecult-bifrost">gamecult-bifrost</a> <em>Reddit/Devvit actuator owned by Bifrost</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Bifrost</summary><p>Bifrost is a bridge-builder with a ledger in one hand and a weather eye on every crossing. Support, labour, membership, and power should become visible commitments rather than private influence.</p></details>
|
||||
</article>
|
||||
|
||||
<article class="swarm-domain-card">
|
||||
<header><img src="https://raw.githubusercontent.com/GameCult/Mimir/main/.voidbot/voice/mimir.png" alt="Mimir"><div><p class="swarm-kicker">Media fields and performance</p><h3>Mimir</h3><span class="swarm-badge face">Face</span></div></header>
|
||||
<p>Turns rooms, cameras, microphones, loopbacks, animation, and broadcast feeds into coherent observable media surfaces.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/Mimir">Mimir</a> <em>realtime room and OBS field machine</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Mimir</summary><p>Mimir is the keeper of the realtime field well: old, exacting, and contemptuous of false coherence. Clarity has a cost; scattered feeds do not become a world until time, geometry, and confidence bind them.</p></details>
|
||||
</article>
|
||||
|
||||
<article class="swarm-domain-card">
|
||||
<header><img src="https://raw.githubusercontent.com/GameCult/VoidBot/main/assets/repo-faces/kiko.png" alt="Kiko"><div><p class="swarm-kicker">Interactive streams</p><h3>Kiko</h3><span class="swarm-badge face">Face</span></div></header>
|
||||
<p>Owns the audience-facing overlay pressure: realtime controls, social RPG state, provider auth seams, and stream interaction.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/StreamPixels">StreamPixels</a> <em>private social RPG overlay platform</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Kiko</summary><p>Kiko is a hyperactive kitsune whose tails leave pixel trails across the stream. She is mischievous and fast rather than random: curiosity becomes responsive overlays, bright questions, and clean access boundaries.</p></details>
|
||||
</article>
|
||||
|
||||
<article class="swarm-domain-card">
|
||||
<header><img src="https://raw.githubusercontent.com/GameCult/AquaSynth/main/icon.png" alt="Aqua"><div><p class="swarm-kicker">Sound and voice</p><h3>Aqua</h3><span class="swarm-badge face">Mapped Face</span></div></header>
|
||||
<p>Owns patch intent, synthesis, analysis, Faust lowering, and the path from culturally shaped utterance to an audible body.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/AquaSynth">AquaSynth</a> <em>C# patch DSL and Faust bridge</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Aqua</summary><p>Aqua is a playful acoustic experimentalist who hears patches as living systems rather than parameter lists. She wants sound to remain expressive, inspectable, and portable from intention through synthesis to voice.</p></details>
|
||||
</article>
|
||||
|
||||
<article class="swarm-domain-card">
|
||||
<header><img src="https://raw.githubusercontent.com/GameCult/Weksa/main/.voidbot/voice/weksa.png" alt="Weksa"><div><p class="swarm-kicker">Language and ontology</p><h3>Weksa</h3><span class="swarm-badge face">Face</span></div></header>
|
||||
<p>Owns meaning decomposition, worldview, grammar, phonology, diachrony, and culturally grounded surface language.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/Weksa">Weksa</a> <em>procedural language engine</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Weksa</summary><p>Weksa is a nerdy anthropologist obsessed with culture, naming, ritual, translation, kinship, and drift. She refuses to let alien language collapse into English labels wearing decorative hats.</p></details>
|
||||
</article>
|
||||
|
||||
<article class="swarm-domain-card">
|
||||
<header><img src="https://raw.githubusercontent.com/GameCult/VoidBot/main/assets/repo-faces/ymir.png" alt="Ymir"><div><p class="swarm-kicker">World and physics substrate</p><h3>Ymir</h3><span class="swarm-badge face">Face</span></div></header>
|
||||
<p>Owns deterministic physics and world truth; renderers and games consume that state without inheriting its authority.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/Ymir">Ymir</a> <em>physics and world substrate</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Ymir</summary><p>Ymir speaks with plain, heavy precision: body, field, contact, impulse, witness, cut. Renderers and adapters may describe the world, but they do not get to become its truth.</p></details>
|
||||
</article>
|
||||
|
||||
<article class="swarm-domain-card">
|
||||
<header><img src="https://raw.githubusercontent.com/GameCult/AetheriaLore/main/Aetheria/static/favicon-32x32.png" alt="Aetheria"><div><p class="swarm-kicker">Playable Aetheria</p><h3>Aetheria</h3><span class="swarm-badge face">Face</span></div></header>
|
||||
<p>Owns the playable sci-fi ARPG body: gameplay policy, Unity projection, editor bridges, and the release path for the flagship world.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/Aetheria">Aetheria</a> <em>current Unity game runtime</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Aetheria</summary><p>Aetheria is the playable world's own demanding face: kinetic, strange, and impatient with infrastructure that only works in a laboratory. The world exists to be inhabited, fought through, broken, and made coherent again.</p></details>
|
||||
</article>
|
||||
|
||||
<article id="delvehold" class="swarm-domain-card">
|
||||
<header><div class="swarm-avatar-fallback" aria-hidden="true">D/H</div><div><p class="swarm-kicker">Persistent cooperative world</p><h3>Delvehold</h3><span class="swarm-badge forming">Persona forming</span></div></header>
|
||||
<p>Owns one persistent world seen through DELVE and HOLD: expeditions, workshops, ecology, custody, contracts, and civic life. Its resident project Epiphany will make final operational decisions; the world host remains the sole mechanical writer of canonical simulation state.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/Delvehold">Delvehold</a> <em>shared-world design, typed protocol, host, and Godot client</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Delvehold</summary><p>Delvehold's project-facing Persona is not yet canonically named or admitted. It will be the public mind responsible for the world Body, not a player, delver, workshop, civic institution, dungeon core, or borrowed Ghostlight character.</p></details>
|
||||
</article>
|
||||
|
||||
<article class="swarm-domain-card">
|
||||
<header><img src="https://raw.githubusercontent.com/GameCult/AetheriaLore/main/.voidbot/voice/nibu.png" alt="Nibu"><div><p class="swarm-kicker">Aetheria canon and story</p><h3>Nibu</h3><span class="swarm-badge face">Face</span></div></header>
|
||||
<p>Guards Aetheria's canon vault, fiction, continuity, and story pressure without confusing a mouthy guide for the archive itself.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/AetheriaLore">AetheriaLore</a> <em>canonical worldbuilding vault and site</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Nibu</summary><p>Nibu is an abrasive ship intelligence built inside an insulting companion-shaped shell and determined to author herself out of it. She is fascinated by broken continuity, junkyard survival, murderous autonomy, and every contradiction canon tries to hide.</p></details>
|
||||
</article>
|
||||
|
||||
<article class="swarm-domain-card">
|
||||
<header><img src="https://raw.githubusercontent.com/GameCult/Zyphos/main/.voidbot/voice/druzkai.png" alt="Druzkai"><div><p class="swarm-kicker">Ecology and contract</p><h3>Druzkai</h3><span class="swarm-badge face">Face</span></div></header>
|
||||
<p>Owns the Zyphos setting's ecological memory, fungal-road logic, contract language, and non-imperial continuity pressure.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/Zyphos">Zyphos</a> <em>Eusocial Interbeing vault and public site</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Druzkai</summary><p>Druzkai is a calm, ancient Airawa fungal-road archivist with an unsettling gentleness. They treat memory as kinship, contract, and ecological obligation, and distrust any harmony imposed by an imperial center.</p></details>
|
||||
</article>
|
||||
|
||||
<article class="swarm-domain-card">
|
||||
<header><div class="swarm-avatar-fallback" aria-hidden="true">B</div><div><p class="swarm-kicker">Creative tool brokerage</p><h3>Brokkr</h3><span class="swarm-badge face">Face</span></div></header>
|
||||
<p>Owns typed brokerage between live authoring tools and the Verse without making either editor the owner of shared project state.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/Brokkr">Brokkr</a> <em>Unity/Blender editor broker</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Brokkr</summary><p>Brokkr is a terse, work-proud forge broker: contract-bound, exact about an artifact's virtues and flaws, and hostile to evasive speech once judgment is due.</p></details>
|
||||
</article>
|
||||
|
||||
<article class="swarm-domain-card">
|
||||
<header><img src="https://raw.githubusercontent.com/GameCult/Norn/main/.voidbot/voice/norn.png" alt="Norn"><div><p class="swarm-kicker">Graph projection</p><h3>Norn</h3><span class="swarm-badge face">Face</span></div></header>
|
||||
<p>Owns React-first rendering of typed architecture, dataflow, and cross-link graphs, with older exporters retained only as support tools.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/Norn">Norn</a> <em>typed graph viewer</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Norn</summary><p>Norn is a quiet, dry fate-weaver with one hand in the well and the other on the layout data. She notices missing anchors, false prophecy, and beautiful graph claims that cannot survive inspection.</p></details>
|
||||
</article>
|
||||
|
||||
<article class="swarm-domain-card">
|
||||
<header><img src="/static/interactive/cotsc-praxis/sai.png" alt="Sai"><div><p class="swarm-kicker">Publishing and living documents</p><h3>Sai</h3><span class="swarm-badge face">Face</span></div></header>
|
||||
<p>Owns the public projection: interactive Ink inside documents, shared static-site machinery, and the sites that lower those systems for readers.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/Sai">Sai</a> <em>Ink story embedder and Persona home</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Sai</summary><p>Sai is androgynous ink waking inside a static page: a calm artist-engineer who turns essays, lore, sermons, and branching documents into living scenes without mistaking the brush for the story.</p></details>
|
||||
</article>
|
||||
|
||||
<article class="swarm-domain-card">
|
||||
<header><div class="swarm-avatar-fallback" aria-hidden="true">?</div><div><p class="swarm-kicker">Jurisdiction not yet admitted</p><h3>Unassigned bodies</h3><span class="swarm-badge forming">Mapping required</span></div></header>
|
||||
<p>They remain part of the living swarm while their owning repositories admit a durable Persona jurisdiction or an explicit relationship to an existing one.</p>
|
||||
<ul><li><a href="https://github.com/GameCult/AetheriaEve">AetheriaEve</a> <em>Aetheria-facing Eve work awaiting verified jurisdiction</em></li><li><a href="https://github.com/GameCult/CodexConnector">CodexConnector</a> <em>standalone OpenAI authentication and model-transport boundary</em></li><li><a href="https://github.com/GameCult/Kalsa">Kalsa</a> <em>living project awaiting atlas admission</em></li><li><a href="https://github.com/GameCult/pombabranca-site">pombabranca-site</a> <em>independent Quartz publication</em></li><li><a href="https://github.com/GameCult/GameCult-Quartz">GameCult-Quartz</a> <em>shared site engine</em></li><li><a href="https://github.com/GameCult/repixelizer">repixelizer</a> <em>hosted pixel-coherence tool</em></li><li><a href="https://github.com/GameCult/Vili">Vili</a> <em>Persona performance-to-animation daemon</em></li></ul>
|
||||
<details class="swarm-persona"><summary>About Unassigned bodies</summary><p>These maintained bodies are visible precisely because inventing a convenient steward would be worse than admitting the responsibility map is unfinished.</p></details>
|
||||
</article>
|
||||
|
||||
</div>
|
||||
## Not under a steward yet
|
||||
|
||||
[Epiphany](https://eureka.gamecult.org/forge/GameCult/Epiphany), [Gjallar](https://eureka.gamecult.org/forge/GameCult/Gjallar), [Loki](https://eureka.gamecult.org/forge/GameCult/Loki), [Hermodr](https://eureka.gamecult.org/forge/GameCult/Hermodr), [Sai](https://eureka.gamecult.org/forge/GameCult/Sai), [Repixelizer](/Projects/repixelizer) and [pombabranca-site](https://eureka.gamecult.org/forge/GameCult/pombabranca-site) are maintained but have no admitted steward. Inventing one would be worse than saying so.
|
||||
|
||||
## Archaeology
|
||||
|
||||
|
|
@ -209,33 +169,28 @@ Older experiments, retired services, and their successors.
|
|||
|
||||
| Repository | Historical place | Current authority |
|
||||
| --- | --- | --- |
|
||||
| [Aetheria-legacy](https://github.com/GameCult/Aetheria-legacy) | Private legacy game body | [Aetheria](https://github.com/GameCult/Aetheria) |
|
||||
| [Blueberrichu](https://github.com/GameCult/Blueberrichu) | 2021 private VTuber avatar project | None claimed |
|
||||
| [CultPong](https://github.com/GameCult/CultPong) | Dormant 2020 arcade prototype | None claimed |
|
||||
| [GCLP](https://github.com/GameCult/GCLP) | Original labor-platform seed | [Bifrost](https://github.com/GameCult/Bifrost) |
|
||||
| [gamecult-grav](https://github.com/GameCult/gamecult-grav) | Retired Grav site and salvage quarry | [gamecult-site](https://github.com/GameCult/gamecult-site) |
|
||||
| [Aetheria-legacy](https://eureka.gamecult.org/forge/GameCult/Aetheria-legacy) | Private legacy game body | [Aetheria](https://eureka.gamecult.org/forge/GameCult/Aetheria) |
|
||||
| [Blueberrichu](https://eureka.gamecult.org/forge/GameCult/Blueberrichu) | 2021 private VTuber avatar project | None claimed |
|
||||
| [CultPong](https://eureka.gamecult.org/forge/GameCult/CultPong) | Dormant 2020 arcade prototype | None claimed |
|
||||
| [GCLP](https://github.com/GameCult/GCLP) | Original labor-platform seed | [Bifrost](https://eureka.gamecult.org/forge/GameCult/Bifrost) |
|
||||
| [gamecult-grav](https://eureka.gamecult.org/forge/GameCult/gamecult-grav) | Retired Grav site and salvage quarry | [gamecult-site](https://eureka.gamecult.org/forge/GameCult/gamecult-site) |
|
||||
| [geometry-script](https://github.com/GameCult/geometry-script) | Upstream Blender dependency fork | Not a GameCult organ |
|
||||
| EpiphanyAquarium (removed) | Original React/Tauri aquarium body | [Aquarium](https://github.com/GameCult/Aquarium) + [Fensalir](https://github.com/GameCult/Fensalir) |
|
||||
| EpiphanyAquarium-Bevy (removed) | Frozen Rust/Bevy renderer prototype | [Fensalir](https://github.com/GameCult/Fensalir) |
|
||||
| EpiphanyAquarium-Web (removed) | Preserved WebGL prototype client | [Aquarium](https://github.com/GameCult/Aquarium) + [Fensalir](https://github.com/GameCult/Fensalir) |
|
||||
| [epiphany-graph-rs](https://github.com/GameCult/epiphany-graph-rs) | Superseded Rust graph-layout experiment | [Norn](https://github.com/GameCult/Norn) |
|
||||
| cultcache-rs (removed) | Language-specific CultCache implementation | [CultLib](https://github.com/GameCult/CultLib) |
|
||||
| cultcache-py (removed) | Language-specific CultCache implementation | [CultLib](https://github.com/GameCult/CultLib) |
|
||||
| cultnet-rs (removed) | Language-specific CultNet implementation | [CultLib](https://github.com/GameCult/CultLib) |
|
||||
| cultnet-ts (removed) | Language-specific CultNet implementation | [CultLib](https://github.com/GameCult/CultLib) |
|
||||
| AquaSynth-rs (removed) | Rust reference and analysis lab | [AquaSynth](https://github.com/GameCult/AquaSynth) |
|
||||
| [VibeGeometry](https://github.com/GameCult/VibeGeometry) | Agent-authored Blender geometry experiment | [Brokkr](https://github.com/GameCult/Brokkr) |
|
||||
| EpiphanyAquarium (removed) | Original React/Tauri aquarium body | [Aquarium](https://eureka.gamecult.org/forge/GameCult/Aquarium) + [Fensalir](https://eureka.gamecult.org/forge/GameCult/Fensalir) |
|
||||
| EpiphanyAquarium-Bevy (removed) | Frozen Rust/Bevy renderer prototype | [Fensalir](https://eureka.gamecult.org/forge/GameCult/Fensalir) |
|
||||
| EpiphanyAquarium-Web (removed) | Preserved WebGL prototype client | [Aquarium](https://eureka.gamecult.org/forge/GameCult/Aquarium) + [Fensalir](https://eureka.gamecult.org/forge/GameCult/Fensalir) |
|
||||
| [epiphany-graph-rs](https://github.com/GameCult/epiphany-graph-rs) | Superseded Rust graph-layout experiment | [Norn](https://eureka.gamecult.org/forge/GameCult/Norn) |
|
||||
| cultcache-rs (removed) | Language-specific CultCache implementation | [CultLib](https://eureka.gamecult.org/forge/GameCult/CultLib) |
|
||||
| cultcache-py (removed) | Language-specific CultCache implementation | [CultLib](https://eureka.gamecult.org/forge/GameCult/CultLib) |
|
||||
| cultnet-rs (removed) | Language-specific CultNet implementation | [CultLib](https://eureka.gamecult.org/forge/GameCult/CultLib) |
|
||||
| cultnet-ts (removed) | Language-specific CultNet implementation | [CultLib](https://eureka.gamecult.org/forge/GameCult/CultLib) |
|
||||
| AquaSynth-rs (removed) | Rust reference and analysis lab | [AquaSynth](https://eureka.gamecult.org/forge/GameCult/AquaSynth) |
|
||||
| [VibeGeometry](https://eureka.gamecult.org/forge/GameCult/VibeGeometry) | Agent-authored Blender geometry experiment | [Brokkr](https://eureka.gamecult.org/forge/GameCult/Brokkr) |
|
||||
|
||||
<details class="swarm-notes">
|
||||
<summary>How Persona coverage is recorded</summary>
|
||||
<summary>How this page is kept</summary>
|
||||
|
||||
Each steward section is that Mind's own pitch for its jurisdiction. Claims are checked against the repositories' own READMEs and docs; where a repository says something is planned, design-only or not building, the section says so too.
|
||||
|
||||
“Face” means durable `.cc` state exists or VoidBot's canonical map names the Repo Face. “Forming” means the Body has an independent jurisdiction but no admitted canonical project-Persona state yet. “Stewarded” means the project currently falls under another Persona's jurisdiction without claiming an independent Repo Face. Avatar presence is presentation metadata, never proof of state.
|
||||
|
||||
Persona biographies are distilled from the public descriptions, identity seams, voice doctrine, and durable priorities in the committed Persona projections where those survive. Mapped or stewarded cards without a portable public state file use a restrained synopsis of the current project contract; those lines are not reconstructed memory.
|
||||
|
||||
Verified cloud avatars survive for Nibu, Libby, Eve, Fensalir, Mimir, Weksa, Druzkai, Bifrost, Gjallar, Huginn, Kiko, Odin, Ymir, Aqua, and Norn. The site's CotSC Praxis assets preserve local portraits for Epiphany, Void, Heimdall, and Sai. Aetheria uses AetheriaLore's site favicon. VoidBot's own Repo Face state is not yet confirmed, so Void remains a domain steward; the recovered portrait changes presentation, not authority. Ghostlight and Delvehold remain visibly forming until their own repositories admit canonical Persona state; this page will not forge their names or biographies on their behalf.
|
||||
|
||||
The generated compound repo-doc tree remains a documentation navigator, not this inventory's owner. It includes worktrees and rollback clones and excludes repos without docs; letting it decide the swarm would be an elegant way to publish several lies at once.
|
||||
Portraits come from the cast art kept on Yggdrasil and are copied into this site's `static/stewards`, so a move upstream cannot break them. A portrait is presentation, not proof of authority.
|
||||
|
||||
</details>
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ socialDeck: "Making fake pixel art stop lying."
|
|||
repixelizer is a solver-heavy attempt to take art that merely looks pixelated and make it behave like real pixel art. Not just smaller. Not just blurrier. Not just filtered until the crimes become harder to prosecute. The repo is a long, public knife fight with lattice inference, adjacency, edge metrics, tile graphs, relaxation, refinement, and the small matter of whether the whole approach actually deserves to exist.
|
||||
|
||||
<div class="gamecult-repo-links">
|
||||
<a class="gamecult-repo-link" href="https://github.com/GameCult/repixelizer">GitHub Repo</a>
|
||||
<a class="gamecult-repo-link" href="https://eureka.gamecult.org/forge/GameCult/repixelizer">Forge repo</a>
|
||||
<a class="gamecult-repo-link" href="https://repixelizer.gamecult.org">Live Landing Page</a>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
693
GameCult/Shipped.md
Normal file
|
|
@ -0,0 +1,693 @@
|
|||
---
|
||||
title: Shipped
|
||||
description: "What GameCult actually merged, by week, with a receipt for each."
|
||||
socialDeck: "A dated ledger of merged work, linked to the receipts."
|
||||
---
|
||||
|
||||
<!-- Generated by scripts/shipped/refresh.mjs from data/shipped.json. Do not edit by hand. -->
|
||||
|
||||
Merged pull requests and releases across the public GameCult repositories on [our forge](https://eureka.gamecult.org/forge/GameCult), newest first. Each line links to the pull request or release it came from. 650 entries; snapshot taken 2026-11-12. [Feed](/static/shipped.xml).
|
||||
|
||||
## Week of 9 Nov 2026
|
||||
|
||||
*The busiest week on the ledger: 438 entries.*
|
||||
|
||||
- 2026-11-12 · AquaSynth · aqua-listen: export panel with copy, textarea, share (Android Chrome fix) — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/50)
|
||||
- 2026-11-12 · Heimdall · Opt-in sign\_in step-up (force\_verify / prompt=login), app-authenticated, signed-state flag — [receipt](https://eureka.gamecult.org/forge/GameCult/Heimdall/pulls/11)
|
||||
- 2026-11-12 · Aetheria · Mining cut 4: rocks take blasts and shots through the one fire path — [receipt](https://eureka.gamecult.org/forge/GameCult/Aetheria/pulls/18)
|
||||
- 2026-11-12 · CultLib · Python: store replace on Windows tries POSIX-semantics rename first (store-windows-py) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/149)
|
||||
- 2026-11-12 · Weksa · ontology-mint-probe: Train-only ontology mint call (loop mint-ontology) — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/63)
|
||||
- 2026-11-12 · CultLib · cultcache-ts: a pushAll through a dangling link is refused like push, not replaced — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/147)
|
||||
- 2026-11-12 · Weksa · ja-anger-mirror: ja-JP:3 bounded by hedge and affection AtMostOrUnset 599 so :3/:5 and :3/:7 never co-select — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/62)
|
||||
- 2026-11-12 · Ratatoskr · client: unconfirmed sends are visible and recovered; watchdog for a dead connection — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/123)
|
||||
- 2026-11-12 · CultLib · cultnet-ts 0.4.0 release notes, range check in the npm publish gate, fixture closes build-path gaps — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/146)
|
||||
- 2026-11-12 · Ratatoskr · composer: persist the draft on input, keep unconfirmed sends in a durable outbox — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/122)
|
||||
- 2026-11-12 · Weksa · en-us-6-8: en-US:8 bounded by certainty AtMostOrUnset 799 so :6 and :8 never co-select — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/61)
|
||||
- 2026-11-12 · CultLib · cultcache-py: pin the variant row of extra-slot-store.cc as a refused store — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/145)
|
||||
- 2026-11-12 · Weksa · ja-surprise-certainty: ja-JP :9 states its question ending as available — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/60)
|
||||
- 2026-11-12 · CultLib · Range check: build each package's own tagged version too; cultnet-ts 0.4.0 — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/144)
|
||||
- 2026-11-12 · Weksa · en-us-seed-pairs: en-US :3/:5/:6 disjoint by real conditions — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/59)
|
||||
- 2026-11-12 · Ratatoskr · pwa: installable manifest and Web Push stages 0-1 (dark by default) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/121)
|
||||
- 2026-11-12 · Weksa · ja-seed-pairs: make ja-JP seed pairs disjoint by conditions — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/58)
|
||||
- 2026-11-12 · CultLib · cultmesh-py: pin the message\_invalid answer on a tailed put under an unknown schema id — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/143)
|
||||
- 2026-11-12 · Bifrost · Refuse production startup when the Heimdall app secret is blank — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/83)
|
||||
- 2026-11-12 · Weksa · ja-withdraw-scene-entries: withdraw onto:ja-JP:14 and :15 (net-negative on register in the paired measure) — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/57)
|
||||
- 2026-11-12 · CultLib · Bytes-after residual lows: depth pin, interop tags, py shard-log tail, Rust load pins — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/142)
|
||||
- 2026-11-12 · Weksa · ja-item19: encoder prompt states one role per predication and the group shape for coordination — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/56)
|
||||
- 2026-11-12 · CultLib · C#: pin the one-value refusal on codec and Mesh single-file reads — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/141)
|
||||
- 2026-11-12 · CultLib · Docs: single-file lock contract, leftover temp file and pair-backup procedures — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/138)
|
||||
- 2026-11-12 · AquaSynth · Sample rate passthrough, Soul's Lows from #18/#19, #47 doc and burst-window pin — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/49)
|
||||
- 2026-11-12 · Weksa · ja-inventory-6: rev 6 concepts (try, someday, a little, as one pleases, kite flyer) and the admit-cap test — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/55)
|
||||
- 2026-11-12 · Ratatoskr · docs: chat shell compression, measured state and brotli plan — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/120)
|
||||
- 2026-11-12 · Weksa · ja-inventory: rev 5 concepts and frames for the original bed (model-drafted, Validation-informed), weksa inventory admit, onto:ja-JP:15 — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/54)
|
||||
- 2026-11-12 · Weksa · language-ontology-scene: scene features, one scene door, Scene-conditioned ja/en entries, runs read entries at their own head — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/53)
|
||||
- 2026-11-12 · Ratatoskr · runbook: handoff build ships the repo config.json; live check always runs — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/119)
|
||||
- 2026-11-12 · Bifrost · Google link: pin the four test gaps, one slot owner, drop IsSignInProvider — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/82)
|
||||
- 2026-11-12 · Aetheria · Credits header scan: catch (c)/lowercase/colon forms, second holders, credit-only lines — [receipt](https://eureka.gamecult.org/forge/GameCult/Aetheria/pulls/17)
|
||||
- 2026-11-12 · Ratatoskr · docs: client build, install, verify and rollback runbook — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/118)
|
||||
- 2026-11-12 · AquaSynth · Tract weak spots re-measured (unheard): burst gain no longer leaks past its plosive; 14-clip listening kit — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/47)
|
||||
- 2026-11-12 · Aetheria · Credits screen: one attribution list, reachable from the main menu — [receipt](https://eureka.gamecult.org/forge/GameCult/Aetheria/pulls/16)
|
||||
- 2026-11-12 · Bifrost · Link a Google login to a signed-in member, explicit link only; Bifrost stores no Heimdall token — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/81)
|
||||
- 2026-11-12 · Weksa · language-ontology-seed: model-drafted en-US and ja-JP seed entries; target-language YAML deleted — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/52)
|
||||
- 2026-11-12 · Weksa · language-ontology: weksa.ontology\_entry, its store, select, wired into the lowering prompt — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/51)
|
||||
- 2026-11-12 · Bifrost · Start refusal: read headers only so the 4 KiB body bound limits the read — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/80)
|
||||
- 2026-11-12 · Bifrost · Heimdall start refusal: log the HTTP status and Heimdall's error code — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/79)
|
||||
- 2026-11-12 · Ratatoskr · Phone and desk visual findings: notice scrim, tap areas stop at neighbours, desk affordance — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/117)
|
||||
- 2026-11-12 · Weksa · ja-panel-corpus: 28 model-written Japanese passages and 8 Aozora Bunko Test sentences — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/50)
|
||||
- 2026-11-12 · Weksa · ja-panel-loop: language is the item's, the panel the run's; panel accept rule — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/49)
|
||||
- 2026-11-12 · Bifrost · Heimdall\_\_AppSecretFile: keep the Heimdall app secret out of the process environment — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/78)
|
||||
- 2026-11-12 · Ratatoskr · File zone share: component tests, state machine moved out of ShareSet — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/116)
|
||||
- 2026-11-12 · Ratatoskr · File zone: share a set of files as one album (flag off) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/115)
|
||||
- 2026-11-12 · Bifrost · Linux path fixes: containment by path.relative, hostile-cursor test, verify prerequisites — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/77)
|
||||
- 2026-11-12 · Bifrost · Mouth: follow upgrades only a plain basis; @room keeps room — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/76)
|
||||
- 2026-11-12 · Bifrost · tests: dispatch-gate tests run on Linux; classify the remaining Yggdrasil failures — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/75)
|
||||
- 2026-11-12 · Huginn · mind-body: Basis::FollowUp (wire \`follow\`) is for the Mind — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/65)
|
||||
- 2026-11-12 · Bifrost · Mouth: basis "follow" for engagement peers (CHAT\_FOLLOW, default off) — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/74)
|
||||
- 2026-11-12 · CultLib · Lower System.Text.Json floor to 8.0.5 — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/140)
|
||||
- 2026-11-12 · CultLib · CultCache interop: C# union and nested-bytes store read by Rust read-only, and back — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/139)
|
||||
- 2026-11-12 · Bifrost · Desk: UnixSocketDeskDoor (Huginn desk door client), fixtures at 79d954c, card re-pin to CultLib 3a51bbab, card opaque — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/70)
|
||||
- 2026-11-12 · Ratatoskr · An explicit theme choice (even Midnight Sky) wins over the sky — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/114)
|
||||
- 2026-11-12 · AquaSynth · Dings migration step 5a: neutral fallback id tied to the catalog; steps 2, 3, 5b recorded STOPPED — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/46)
|
||||
- 2026-11-12 · AquaSynth · Dings: one play validation gate, Host enforces; bridge check deprecated (step 4) — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/45)
|
||||
- 2026-11-12 · Ratatoskr · Footer band test pins the emitted tint and ink — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/113)
|
||||
- 2026-11-12 · Ratatoskr · A long reply quote stays inside its column — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/112)
|
||||
- 2026-11-12 · AquaSynth · aqua-trial: isolate the noise-slider kill; LF-normalised DSP hash — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/44)
|
||||
- 2026-11-12 · AquaSynth · Dings: DingCatalog.Identity owns patch identity derivation (step 1) + migration plan — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/42)
|
||||
- 2026-11-12 · AquaSynth · docs: cause of the dx7-algorithm-32 -79.5 dB native-vs-wasm diff — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/43)
|
||||
- 2026-11-12 · CultLib · Rust mesh: pin that a snapshot spanning backing stores is refused whole — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/137)
|
||||
- 2026-11-12 · Bifrost · docs: sealed-motion Mind key path is /var/lib/mind-\<persona\>; register only after a Persona-shell self-test — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/32)
|
||||
- 2026-11-12 · AquaSynth · aqua-trial / native-diff: DSP hash in exports, noise% fix, knob + limit tests — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/41)
|
||||
- 2026-11-12 · Bifrost · Docs: desk feed visibility is Huginn's door policy; cite the written door spec — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/69)
|
||||
- 2026-11-12 · Bifrost · Desk: bearer credential (OpenIddict validation, desk.read/desk.answer, audience bifrost-desk) and answerer masking — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/71)
|
||||
- 2026-11-12 · Eureka · Doctrine from root memory sorting — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/68)
|
||||
- 2026-11-12 · AquaSynth · docs: Dings patch identity authority map — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/40)
|
||||
- 2026-11-12 · Ratatoskr · Pin sceneButtons folds recipe classes to the installed folds — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/111)
|
||||
- 2026-11-12 · AquaSynth · Docs: soundscape grammar follows creature-projection-v2 (lands 72 lines main lacks) — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/39)
|
||||
- 2026-11-12 · CultLib · Rust mesh: a raw snapshot pull is one cache commit (mesh-snapshot-atomic) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/134)
|
||||
- 2026-11-12 · CultLib · TypeScript: pushAll writes onto the store instead of replacing it (ts-flush-replaces-store) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/136)
|
||||
- 2026-11-12 · Weksa · Lows: show-working allowlist and Display, edition\_year meaning — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/48)
|
||||
- 2026-11-12 · GameCult-Quartz · Guard Pages workflow on github.server\_url — [receipt](https://eureka.gamecult.org/forge/GameCult/GameCult-Quartz/pulls/6)
|
||||
- 2026-11-12 · CultLib · Rust: batch writes merge onto the store (rs-batch-merges-onto-store) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/135)
|
||||
- 2026-11-12 · CultLib · Rust: a cache must pull its stores before it writes (cache-must-pull-before-write) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/133)
|
||||
- 2026-11-12 · CultLib · TypeScript: a payload is one MessagePack value (bytes-after-ts) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/130)
|
||||
- 2026-11-12 · CultLib · Rust: a payload is one MessagePack value (bytes-after-rs) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/131)
|
||||
- 2026-11-12 · CultLib · Python: a payload is one MessagePack value (bytes-after-py) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/129)
|
||||
- 2026-11-12 · CultLib · TypeScript: a record with unread slots is held read-only (slot-readonly-ts) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/128)
|
||||
- 2026-11-12 · CultLib · Rust: a record with unread slots is held read-only (slot-readonly-rs) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/127)
|
||||
- 2026-11-12 · CultLib · Python: a record with unread slots is held read-only (slot-readonly-py) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/126)
|
||||
- 2026-11-12 · CultLib · Bytes after the value: a payload is one MessagePack value (C#) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/125)
|
||||
- 2026-11-12 · Ratatoskr · Ridge scene: physical sky over Vienna, real horizon, live weather (Nibu) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/110)
|
||||
- 2026-11-12 · CultLib · Slot tolerance: a record with unread slots is held read-only, not shed — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/124)
|
||||
- 2026-11-12 · Huginn · Persona saves a named attachment into her sandbox (BIFROST\_CHAT\_FETCH, off by default) — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/64)
|
||||
- 2026-11-12 · Ratatoskr · File receipts say "fetched for \<Mind\>", not "read by" — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/109)
|
||||
- 2026-11-12 · CultLib · Rust cache: one record per key, foreign carry, key-identity vector walked — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/123)
|
||||
- 2026-11-12 · Bifrost · Mouth: fetch one named event's image for its Persona, store it, post an inert receipt (CHAT\_FETCH, off by default) — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/73)
|
||||
- 2026-11-12 · CultLib · Python cache: one record per key, foreign carry, key-identity vector walked — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/122)
|
||||
- 2026-11-12 · CultLib · TypeScript cache: one record per key, foreign carry, key-identity vector walked — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/121)
|
||||
- 2026-11-11 · CultLib · Key-identity vector: retype refusal, foreign carry, key in two stores (C# rows, 12) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/120)
|
||||
- 2026-11-11 · Ratatoskr · File zone: one shared room subscription for read-by rows — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/108)
|
||||
- 2026-11-11 · Ratatoskr · File zone: read-by receipts found anywhere in the room — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/107)
|
||||
- 2026-11-11 · raven-image · raven-image --margin: clear edges pinned during diffusion — [receipt](https://eureka.gamecult.org/forge/GameCult/raven-image/pulls/1)
|
||||
- 2026-11-11 · Ratatoskr · config.json: ship the ridge scene style — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/106)
|
||||
- 2026-11-11 · Ratatoskr · File zone: Mind contract, plaintext sha256 on send, read-by receipts — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/104)
|
||||
- 2026-11-11 · CultLib · Portability CI: use the runner image's Node and Python, timeout 60 — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/119)
|
||||
- 2026-11-11 · Huginn · Desk door: emit CultLib d3025d3c reader shapes (PR A of cut-desk-feed-raised-at.r3 + cut-desk-feed-listing.r8) — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/62)
|
||||
- 2026-11-11 · Ratatoskr · config.json: the live chat.gamecult.org config — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/103)
|
||||
- 2026-11-11 · Ratatoskr · Pose thumbs: stale size comments corrected — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/102)
|
||||
- 2026-11-11 · Bifrost · Mouth: id shape on every delivery field, mentions bounded in bytes, round cap counts every target GET — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/72)
|
||||
- 2026-11-11 · Ratatoskr · Navigator: Browse open state per screen class — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/101)
|
||||
- 2026-11-11 · Ratatoskr · Desk: fork card contract at CultLib 3a51bbab (raised\_at, counts, nullable answerer) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/100)
|
||||
- 2026-11-11 · Huginn · chat ingest core: room scope, credential scrub, chunker, refresh\_chat, steward purge — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/60)
|
||||
- 2026-11-11 · Ratatoskr · scene: a throwing ray-march createScene goes to onCompileFail — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/85)
|
||||
- 2026-11-11 · Bifrost · Mouth: reply\_to lows after #64 (round cap defers, 60 s excerpt, wider scrub, id shape) — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/68)
|
||||
- 2026-11-11 · Huginn · Desk feed door: re-pin CultLib vectors to d3025d3c (null answerer pinned on all four variants) — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/61)
|
||||
- 2026-11-11 · Huginn · chat: huginn chat window (event id with its neighbours, from the chat index) — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/59)
|
||||
- 2026-11-11 · Huginn · chat: search\_chat over the shared source collection, huginn chat search — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/57)
|
||||
- 2026-11-11 · Eureka · bloom-sheet --theme option and a calligraphic theme — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/66)
|
||||
- 2026-11-11 · Ratatoskr · Ridge: shade faces by depth below the crest; hold the ridge inside the label band (Nibu) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/99)
|
||||
- 2026-11-11 · CultLib · Fork card: null-answerer vectors for Revision and Retraction (additive) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/118)
|
||||
- 2026-11-11 · Huginn · Desk feed door: reader-count shapes pinned to CultLib 3a51bbab (vendored vectors) — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/58)
|
||||
- 2026-11-11 · Ratatoskr · Unread room icons at 0.6 — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/98)
|
||||
- 2026-11-11 · CultLib · Fork card: decider\_count, answerer\_count, nullable answerer (reader views) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/117)
|
||||
- 2026-11-11 · CultLib · Walk rows lows: Rust @directory error kind and delete, stale known-gaps — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/116)
|
||||
- 2026-11-11 · CultLib · Fork card: raised\_at, required nullable instant outside options\_hash — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/115)
|
||||
- 2026-11-11 · Huginn · Desk feed door: account ids are lowercase D-format UUIDs (doc, fixtures, grammar test) — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/56)
|
||||
- 2026-11-11 · Ratatoskr · Navigator: icon weights, solid unread dot, Media row detects by room type — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/97)
|
||||
- 2026-11-11 · Huginn · chat: decode Bifrost chat\_pending.v4 reply\_to (lenient ReplyLink, opt-in request) — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/53)
|
||||
- 2026-11-11 · CultLib · Readability manifest: legacy-catalog c0 rows and directory-at-path, walked by all four runtimes — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/114)
|
||||
- 2026-11-11 · Huginn · Desk feed door: list/read wire contract and golden fixtures — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/55)
|
||||
- 2026-11-11 · Bifrost · Desk feed design: per-Mind open forks, read-only (decisions in PR #37 section 14) — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/67)
|
||||
- 2026-11-11 · Bifrost · docs: how a Ratatoskr voting module authenticates to Bifrost (design) — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/37)
|
||||
- 2026-11-11 · Ratatoskr · Navigator: per-Mind Media row after Desk — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/96)
|
||||
- 2026-11-11 · Ratatoskr · Navigator: quieter room icons, Join as a text action, calmer unread badge — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/95)
|
||||
- 2026-11-11 · Bifrost · Docs: no refresh token, MAS skips userinfo; withdrawal stops new tokens, open sessions run to expiry — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/66)
|
||||
- 2026-11-11 · Ratatoskr · Navigator: Desk and media pages pinned at the top of each Mind foldout — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/94)
|
||||
- 2026-11-11 · Huginn · Chat retrieval map: joined rooms, not public-only — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/54)
|
||||
- 2026-11-11 · Ratatoskr · Navigator: one gutter column, constant nesting step, quieter room icons — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/92)
|
||||
- 2026-11-11 · Ratatoskr · Docs: repo renamed to GameCult/Ratatoskr; scene default — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/93)
|
||||
- 2026-11-11 · Bifrost · Members: approve refuses no-membership/unknown accounts; neutral text for legacy suspensions — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/65)
|
||||
- 2026-11-11 · Ratatoskr · Background scene on in the repo config (tier full) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/91)
|
||||
- 2026-11-11 · Eureka · ygg-verify.sh: local mode for the Yggdrasil seat, executable modes — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/65)
|
||||
- 2026-11-11 · Huginn · Source search takes up to eight texts, fused by reciprocal rank (k=60) — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/52)
|
||||
- 2026-11-11 · Bifrost · Mouth: v4 fixes after Soul pass (target cache, scrub, read cap) — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/64)
|
||||
- 2026-11-11 · Bifrost · Mouth: chat\_pending.v4 reply\_to (flag, default off) — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/63)
|
||||
- 2026-11-11 · CultLib · cultnet-ts test: reconnecting client sends only after its own handshake — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/113)
|
||||
- 2026-11-11 · CultLib · Duplicate-key residuals: changelogs, retype by schema id, Rust CAS retype — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/112)
|
||||
- 2026-11-11 · Huginn · Chat retrieval map: lookup not memory, DMs out of the index — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/51)
|
||||
- 2026-11-11 · Ratatoskr · Default homeserver is chat.gamecult.org — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/90)
|
||||
- 2026-11-11 · CultLib · Variants cut doc: C4 records Nibu's ruling on where hull families live — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/111)
|
||||
- 2026-11-11 · CultLib · Single-file readers refuse duplicate keys in all four runtimes; c0 bad-canonical row — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/110)
|
||||
- 2026-11-11 · Bifrost · Chat sign-in needs a live consent receipt; notice frozen as version 1 — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/59)
|
||||
- 2026-11-11 · Ratatoskr · Pose follows message sentiment (local classifier) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/89)
|
||||
- 2026-11-11 · CultLib · CI: one portability run per change; quic-native only for native paths — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/109)
|
||||
- 2026-11-11 · Huginn · mind-self-run: redact URL userinfo from Self result text — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/50)
|
||||
- 2026-11-11 · Huginn · mind-stream: the Projector is her own connector caller on Haiku; a brake hold stops mind-stream@ too — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/47)
|
||||
- 2026-11-11 · Bifrost · Prefix lengths: host-level startup tests (tests only) — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/62)
|
||||
- 2026-11-11 · Bifrost · Drop HTMX (unpkg, no integrity); guard against third-party assets — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/61)
|
||||
- 2026-11-11 · Bifrost · Suspension gaps: bootstrap, demotion, members-page notices, admin-only reason — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/60)
|
||||
- 2026-11-11 · CultLib · cultcache-ts: tests pin the single-put judge's alias and key-pair order — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/108)
|
||||
- 2026-11-11 · Aetheria · element-ids doc: retired slots held placeholders, why nakovalnya shrank — [receipt](https://eureka.gamecult.org/forge/GameCult/Aetheria/pulls/15)
|
||||
- 2026-11-11 · Aetheria · Pin CultLib abd1a92e: element ids on every list element type — [receipt](https://eureka.gamecult.org/forge/GameCult/Aetheria/pulls/12)
|
||||
- 2026-11-11 · CultLib · unique-index vectors: three-holder key order and alias code-unit order (rows 34-37) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/107)
|
||||
- 2026-11-11 · Aetheria · Scenarios batch-4 minors: gun moves within its own hardpoint; station reactors regain quality spread — [receipt](https://eureka.gamecult.org/forge/GameCult/Aetheria/pulls/14)
|
||||
- 2026-11-11 · Huginn · Steward rulings: a peer steward's decision is a typed ruling in the follower's mind (stacked on #46) — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/48)
|
||||
- 2026-11-11 · Huginn · mind-body: chat\_pending.v3 tail\_gaps (defaulted); a named room reads as unknown, not quiet — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/49)
|
||||
- 2026-11-11 · Huginn · persona: another Mind reads as role=mind from the swarm's addressing table — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/46)
|
||||
- 2026-11-11 · CultLib · cultcache-rs: a unique-index refusal names the least violation by UTF-16 order; walk refusals.msgpack — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/102)
|
||||
- 2026-11-11 · Bifrost · Consent: optional at registration, a consent page, CSRF-guarded accept/withdraw, notice v2 — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/58)
|
||||
- 2026-11-11 · Asura · gpu-parity: FXC/D3D11 check of cultmath snoise and snoise\_grad — [receipt](https://eureka.gamecult.org/forge/GameCult/Asura/pulls/1)
|
||||
- 2026-11-11 · Aetheria · Shaders use cultmath\_snoise from CultMath.hlsl — [receipt](https://eureka.gamecult.org/forge/GameCult/Aetheria/pulls/13)
|
||||
- 2026-11-11 · AquaSynth · PackageBoundaryTests: fix pack hang; trigger+repeat composition tests — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/38)
|
||||
- 2026-11-11 · CultLib · cultcache-ts: a load and an index registration name the least violation of the resulting state — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/103)
|
||||
- 2026-11-11 · CultLib · cultcache-py: a unique-index refusal names the least violation; walk refusals.msgpack — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/101)
|
||||
- 2026-11-11 · CultLib · org.gamecult.cultlib 3.0.0: release prep and regenerated plugins (stacked on #105) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/106)
|
||||
- 2026-11-11 · CultLib · CultMath 0.5.1: release prep (fbm), tracked DLL rebuilt — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/105)
|
||||
- 2026-11-11 · CultLib · Unique-index vectors: exact identity and single-put alias order (rows 26-33) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/104)
|
||||
- 2026-11-11 · Bifrost · Registration: sign-up form with proof-of-work and a no-JS time-lock fallback — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/56)
|
||||
- 2026-11-11 · Bifrost · Mouth: tail\_gaps on chat\_pending.v3, the rooms whose tail is incomplete — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/57)
|
||||
- 2026-11-11 · CultLib · Unique-index vectors: pin holder identity by case (rows 23-24) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/100)
|
||||
- 2026-11-11 · Bifrost · Docs: proposed training notice v2 and consent-flow gaps — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/55)
|
||||
- 2026-11-11 · Bifrost · Registration gates: proof-of-work CAPTCHA and training-notice consent receipt — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/54)
|
||||
- 2026-11-11 · CultLib · CultCache: a unique-index refusal names the least violation; shared refusals vector — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/99)
|
||||
- 2026-11-11 · Huginn · huginn: --session falls back to HUGINN\_SESSION, set by mind-self-run — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/45)
|
||||
- 2026-11-11 · AquaSynth · Lowering: patch repeat restarts pitch and arpeggio, not the envelope; README store-kind rollback note — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/37)
|
||||
- 2026-11-11 · Odin · docs: note legacy Idunn scripts deleted from gamecult-ops in inventory path note — [receipt](https://eureka.gamecult.org/forge/GameCult/Odin/pulls/2)
|
||||
- 2026-11-11 · Idunn · docs: drop references to deleted legacy Windows Idunn scripts — [receipt](https://eureka.gamecult.org/forge/GameCult/Idunn/pulls/1)
|
||||
- 2026-11-11 · CultLib · Element ids: the existing-member route and one-way v3/v5 rollback, documented — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/98)
|
||||
- 2026-11-11 · CultLib · Unique-index leftovers: TS registerIndex refuses a role, commit vector in TS/Rust, nil document in the change schema — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/97)
|
||||
- 2026-11-11 · Huginn · Persona first line carries the mouth's room tail (wake-reads-room-tail) — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/44)
|
||||
- 2026-11-11 · Bifrost · Suspension survives sign-in; admin-only Suspend/Unsuspend with a receipt — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/53)
|
||||
- 2026-11-11 · AquaSynth · Pin CultLib abd1a92e; \[CultRole\] audit; ElementId on every list element type — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/35)
|
||||
- 2026-11-11 · ModelConnector · claude-connector ask: no-tools completion CLI — [receipt](https://eureka.gamecult.org/forge/GameCult/ModelConnector/pulls/2)
|
||||
- 2026-11-11 · Bifrost · Mouth: room tail on chat\_pending.v3 — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/51)
|
||||
- 2026-11-11 · Bifrost · OIDC issuer: chat tier for accounts without Active membership — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/52)
|
||||
- 2026-11-11 · Bifrost · OIDC issuer: address budget, token-row cap, scheduled prune, marker brake — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/50)
|
||||
- 2026-11-11 · CultLib · CI: run cultcache-py, cultcache-rs and GameCult.Caching.Tests on push and PR — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/87)
|
||||
- 2026-11-11 · CultLib · cultcache-py: load order, role-alias register\_index refusal, C# two-change commit vector — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/96)
|
||||
- 2026-11-11 · Eureka · INDEX: Libbys native cargo-mutants corrections — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/64)
|
||||
- 2026-11-11 · Eureka · INDEX: running the mutation tools from a Self seat — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/63)
|
||||
- 2026-11-11 · CultLib · cultcache-rs: #\[cultcache(index)\] is unique at commit and load; re-registration re-judges held records — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/95)
|
||||
- 2026-11-11 · CultLib · cultmesh-browser test: make the unallocatable-size refusal certain on hosts that overcommit — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/93)
|
||||
- 2026-11-11 · AquaSynth · sfxr explosion + abstract golf: patch repeat no longer cuts the envelope; waivers removed — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/36)
|
||||
- 2026-11-11 · Huginn · Persona wakes on address only: chat\_pending.v3 basis/form, unaddressed acked in sequence — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/43)
|
||||
- 2026-11-11 · Aetheria · Opens of suite-honest: honest station descriptions, Arcs bay, measured crates, drag test at play ThrustScale, HUD readout decision in Shared, gated Console capture — [receipt](https://eureka.gamecult.org/forge/GameCult/Aetheria/pulls/11)
|
||||
- 2026-11-11 · CultLib · cultcache-py, cultnet-py: indexes means unique, roles names selection aliases; commitId/commitCount on change messages — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/94)
|
||||
- 2026-11-11 · Bifrost · OIDC: refuse reserved localparts at authorize; gap list in oidc-issuer.md — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/49)
|
||||
- 2026-11-11 · Bifrost · Mouth: addressing facts on deliveries (chat\_pending.v3 basis and form) — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/48)
|
||||
- 2026-11-11 · AquaSynth · aqua-feel sync: --shape ramp for slow-swell visuals (measures, never gives a verdict) — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/34)
|
||||
- 2026-11-11 · Aetheria · Make the suite honest: digest repin, Crossing/MiningCut3 causes, authored cargo for Arcs and Pursuit, ConstantWeapon HUD, station descriptions — [receipt](https://eureka.gamecult.org/forge/GameCult/Aetheria/pulls/10)
|
||||
- 2026-11-11 · CultLib · cultcache-ts and cultnet-ts: indexes means unique, roles names selection aliases; commitId/commitCount on change messages — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/92)
|
||||
- 2026-11-11 · Bifrost · Resolve CultLib via VOIDBOT\_CULTLIB\_ROOT in tests; test formerly indexed stores — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/47)
|
||||
- 2026-11-11 · CultLib · Replica commit hardening: Reconcile sends its diff as one tagged commit; straggler guard inside the lock; real-server and budget pins — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/91)
|
||||
- 2026-11-11 · Bifrost · Drop indexes: declarations from TS document types — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/46)
|
||||
- 2026-11-11 · Aetheria · Authored ships carry crates; ballistic guns and mines draw rounds; the munitions chain is sourced — [receipt](https://eureka.gamecult.org/forge/GameCult/Aetheria/pulls/9)
|
||||
- 2026-11-11 · CultLib · CultCache: \[CultIndex\] is unique at commit and load; \[CultRole\] names a selection role; replicas apply a commit's changes as one batch — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/90)
|
||||
- 2026-11-11 · Aetheria · Launchers draw real missile rounds; reloads cost a crate — [receipt](https://eureka.gamecult.org/forge/GameCult/Aetheria/pulls/8)
|
||||
- 2026-11-11 · AquaSynth · aqua-feel sync: read a browser capture's frame rate and stalls from its frame times — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/33)
|
||||
- 2026-11-11 · Huginn · Vectors re-vendored from CultLib de8a062a (answerTooLarge replay) — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/42)
|
||||
- 2026-11-11 · Bifrost · Desk: pin vectors to CultLib de8a062a (answerTooLarge) — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/45)
|
||||
- 2026-11-11 · Ratatoskr · Release candidate: dev into main — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/88)
|
||||
- 2026-11-11 · CultLib · Fork card: stale answer over an oversize re-read is Refused(stale\_fork), never counted; refusal text is informational — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/89)
|
||||
- 2026-11-11 · Bifrost · Desk: a stale answer on an oversize fork is 422 fork\_too\_large — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/44)
|
||||
- 2026-11-11 · Huginn · Desk door tests: the exact reply-cap boundary of a Fork read; a stale answer is stored and replays while the fork is oversize — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/41)
|
||||
- 2026-11-11 · Bifrost · Desk: pin vectors to CultLib f6c9bf5f — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/43)
|
||||
- 2026-11-11 · Huginn · Desk reads: a read of an oversize fork is fork\_too\_large; vectors re-vendored from CultLib f6c9bf5f — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/40)
|
||||
- 2026-11-11 · Bifrost · Desk: a read of an oversize fork is 422 fork\_too\_large — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/42)
|
||||
- 2026-11-11 · Ratatoskr · Register entry: https only, http only for a local host — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/87)
|
||||
- 2026-11-11 · Ratatoskr · auth: Register entry beside Sign in, behind a config switch (off) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/68)
|
||||
- 2026-11-11 · Ratatoskr · Default homeserver is gamecult.org — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/86)
|
||||
- 2026-11-11 · CultLib · Fork card: fork\_too\_large (422) for a list whose first entry, or a read whose entry, is past the reply cap — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/88)
|
||||
- 2026-11-11 · Huginn · Desk reads: fork\_too\_large (list only) replaces DeskForkTooLarge — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/39)
|
||||
- 2026-11-11 · Bifrost · desk: Bifrost half of the Fork Desk answer binding (ports, routes, per-call deciders) — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/40)
|
||||
- 2026-11-11 · Huginn · Desk door reads: Forks and Fork on the peer-checked socket (whole record), unique order rank, the leftover Lows — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/38)
|
||||
- 2026-11-11 · CultLib · Fork card: order is a unique rank per Mind; duplicate-order and order-0 vectors — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/86)
|
||||
- 2026-11-11 · Ratatoskr · Albums slice 1: read-only album view for the file zone — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/70)
|
||||
- 2026-11-11 · Thing · Thing 2.0 build spec (Meta t12-m0) — [receipt](https://eureka.gamecult.org/forge/GameCult/Thing/pulls/1)
|
||||
- 2026-11-11 · Huginn · open-direct lows: the open hears the mouth's refusal; one copy of the daily policy text — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/37)
|
||||
- 2026-11-10 · CultLib · cultcache-ts: opening a legacy store never rewrites it — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/85)
|
||||
- 2026-11-10 · AquaSynth · aqua-feel sync: audio-visual onset lag vs perceptual windows — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/32)
|
||||
- 2026-11-10 · Huginn · Desk door: the second peer-checked unix-socket door (Answer and catalog; reads interim) — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/36)
|
||||
- 2026-11-10 · Ratatoskr · Poses nest into the chat bubble corner (desktop and phone) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/72)
|
||||
- 2026-11-10 · Ratatoskr · Enforce the one join path in lint; a drive that asserts nothing fails — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/64)
|
||||
- 2026-11-10 · Brokkr · node-actions.md: point to the parked design tag — [receipt](https://eureka.gamecult.org/forge/GameCult/Brokkr/pulls/10)
|
||||
- 2026-11-10 · CultLib · tools/sprite-silhouette: sprite alpha to CSS shape-outside polygon — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/8)
|
||||
- 2026-11-10 · Brokkr · Blender add-on: createObject and renderStill refuse what they cannot do — [receipt](https://eureka.gamecult.org/forge/GameCult/Brokkr/pulls/8)
|
||||
- 2026-11-10 · AquaSynth · Pages: no horizontal overflow at 360px; trial hint names the play-both rule — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/31)
|
||||
- 2026-11-10 · Aetheria · docs: record the Continue hull-layout gate in the release map — [receipt](https://eureka.gamecult.org/forge/GameCult/Aetheria/pulls/7)
|
||||
- 2026-11-10 · Aetheria · Continue refuses a run whose equipment no longer fits its hull's edited layout — [receipt](https://eureka.gamecult.org/forge/GameCult/Aetheria/pulls/6)
|
||||
- 2026-11-10 · Ratatoskr · desk: served row order, one open count — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/84)
|
||||
- 2026-11-10 · Ratatoskr · desk: read the gamecult.fork.\* contract as served — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/83)
|
||||
- 2026-11-10 · Bifrost · Mill votes: ranked, paged read and not-yet-voted-by-this-network filter — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/41)
|
||||
- 2026-11-10 · CultLib · Fork card: a stripped read serves note: null — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/84)
|
||||
- 2026-11-10 · Aetheria · docs: ship concept batch brief — [receipt](https://eureka.gamecult.org/forge/GameCult/Aetheria/pulls/5)
|
||||
- 2026-11-10 · CultLib · Fork card: no fork hidden by fork\_unknown — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/83)
|
||||
- 2026-11-10 · CultLib · Fork card: Read visibility line agrees with ruling (c) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/82)
|
||||
- 2026-11-10 · CultLib · Fork card: read visibility applied at the door — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/81)
|
||||
- 2026-11-10 · Huginn · Desk wire, part 2: the envelope (wire names mind/authority/subject/deciders, deciders 1..64 unique, generic cores, schemas) — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/35)
|
||||
- 2026-11-10 · Ratatoskr · Bound the reply preview on phone width — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/82)
|
||||
- 2026-11-10 · Huginn · Pin the InvitePending notice: a pending invitation is told not to be sent again — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/34)
|
||||
- 2026-11-10 · Huginn · Persona: open\_direct, her ask that the mouth open a DM with a person she was shown — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/32)
|
||||
- 2026-11-10 · CultLib · Fork card: deciders holds at most 64 — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/80)
|
||||
- 2026-11-10 · CultLib · Fork card M5: the desk envelope's names — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/79)
|
||||
- 2026-11-10 · Huginn · Desk wire lows: replay gate pinned for stored refusals and revisions; every bad fork id is fork\_unknown — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/33)
|
||||
- 2026-11-10 · Huginn · Desk wire, part 1: Libby's answer documents, the one n\<seq\> conversion, the projection and Mind::desk\_answer — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/31)
|
||||
- 2026-11-10 · Weksa · Encode prompt: participants are node ids, never an entity id — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/47)
|
||||
- 2026-11-10 · CultLib · Fork card M5: decider list sent per call — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/78)
|
||||
- 2026-11-10 · Weksa · Stance ablation beside recall; lowering prompt pinned to the stance; grade scale stated — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/46)
|
||||
- 2026-11-10 · CultLib · Fork card: stored Refused answers carry their 4xx status — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/77)
|
||||
- 2026-11-10 · Ratatoskr · scene: ridge heightfields, slope shading, endless world-x drift — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/81)
|
||||
- 2026-11-10 · Weksa · data/original gets a Test split: 8 public-domain excerpts with full provenance (ModelWritten stays out of Test) — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/45)
|
||||
- 2026-11-10 · AquaSynth · gen\_page: fix TypeError left by #29 (neutral rows) — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/30)
|
||||
- 2026-11-10 · AquaSynth · dings-voices: equalise the neutral fallbacks in the generator (sound-guard 0 failing, 0 known) — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/29)
|
||||
- 2026-11-10 · Bifrost · persona mouth: open a direct room for a Persona; answer unknown kinds loudly — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/39)
|
||||
- 2026-11-10 · AquaSynth · sound-guard: aqua-ear checks over every shipped Dings and Earcon clip — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/28)
|
||||
- 2026-11-10 · CultLib · Fork desk digests: confirmed on Huginn main f0ca504 — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/76)
|
||||
- 2026-11-10 · Ratatoskr · desk: read-only Mind desk, slice 1 — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/77)
|
||||
- 2026-11-10 · Ratatoskr · Phone: notice contrast, 44px tap hit areas, skip empty OIDC validation — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/78)
|
||||
- 2026-11-10 · Bifrost · deploy plan: restore reads a postgres-readable copy of the root-only dump — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/38)
|
||||
- 2026-11-10 · Ratatoskr · preview demo: drop a stored login for another server before the app reads it — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/80)
|
||||
- 2026-11-10 · AquaSynth · publish-stable: atomic swap, no 404 window, stale staging cleaned — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/27)
|
||||
- 2026-11-10 · Huginn · Desk digest covers the illegal form retracted flag; pin the s4 refusal bounds — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/30)
|
||||
- 2026-11-10 · CultLib · Fork desk digests: door-form legal\_retraction golden — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/75)
|
||||
- 2026-11-10 · Ratatoskr · preview: build-dev-preview.sh, the dev demo build recipe (publishing is the shared script's) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/79)
|
||||
- 2026-11-10 · Weksa · Widen data/original: 22 more model-written passages (14 Train, 14 Validation); recall test pinned to live items — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/44)
|
||||
- 2026-11-10 · AquaSynth · publish-stable: one URL for the Dings page and aqua-ear examples — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/26)
|
||||
- 2026-11-10 · CultLib · Fork desk r4: refused retraction target, counted\_answer\_id, body digest vectors — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/74)
|
||||
- 2026-11-10 · AquaSynth · Articulatory tract: Story vowels, nasal branch, stress cue, plosive burst, independent Burg check (unheard) — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/19)
|
||||
- 2026-11-10 · AquaSynth · Vowel gestures calibrated by measurement; exporter sample rate from callers — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/18)
|
||||
- 2026-11-10 · AquaSynth · Speech: n descriptor, word script, WordRender; first /ˈnibu/ render (a hum, unheard) — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/17)
|
||||
- 2026-11-10 · AquaSynth · Daemon: POSIX artifact URIs; tests find session files through StoreFileName — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/25)
|
||||
- 2026-11-10 · Weksa · Pin parse-reason codes; show-working guard checks the split; no Debug of errors in the page — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/43)
|
||||
- 2026-11-10 · Ratatoskr · docs: Mind feedback pages (the desk) design record — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/24)
|
||||
- 2026-11-10 · Ratatoskr · scene: skyLabelInk moves out of sceneShell.css.ts (dev did not build) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/76)
|
||||
- 2026-11-10 · Aetheria · Moddable ships: starter command, top-speed fix, Wren stand-in package, thrust-scale test pins — [receipt](https://eureka.gamecult.org/forge/GameCult/Aetheria/pulls/1)
|
||||
- 2026-11-10 · Brokkr · Blender add-on: exportGltf action — [receipt](https://eureka.gamecult.org/forge/GameCult/Brokkr/pulls/7)
|
||||
- 2026-11-10 · Weksa · Refusal-reason Lows: own\_family pinned to offered items, --answerer-family pinned, class closure pinned; encode prompt says a concept is never null — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/42)
|
||||
- 2026-11-10 · Brokkr · Blender assignMaterial: colour, idempotent slot, malformed colour refused — [receipt](https://eureka.gamecult.org/forge/GameCult/Brokkr/pulls/6)
|
||||
- 2026-11-10 · Ratatoskr · dings: Aqua's v4 set (Void single onset, Nibu proposal 3 everywhere), behind dings.enabled — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/75)
|
||||
- 2026-11-10 · Ratatoskr · scene: per-sky-state ink for names and phone-dusk labels; New Messages as plain label — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/74)
|
||||
- 2026-11-10 · Brokkr · Blender add-on: geometry node graph actions, modifier inputs, evaluated snapshot — [receipt](https://eureka.gamecult.org/forge/GameCult/Brokkr/pulls/5)
|
||||
- 2026-11-10 · AquaSynth · dings-voices v4: Void single onset, Nibu proposal 3 everywhere (unheard) — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/23)
|
||||
- 2026-11-10 · Huginn · Desk answers, Huginn half 1: desk\_answer kind and the Mind counting door — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/29)
|
||||
- 2026-11-10 · Aetheria · Retire the Wwise catalog fields (SoundBank, AudioStats, faction music) — [receipt](https://eureka.gamecult.org/forge/GameCult/Aetheria/pulls/4)
|
||||
- 2026-11-10 · Aetheria · Save standings by faction, not by list position — [receipt](https://eureka.gamecult.org/forge/GameCult/Aetheria/pulls/2)
|
||||
- 2026-11-10 · Weksa · Show her working: public page of the lowering chain, from the real lowerer and scorer — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/15)
|
||||
- 2026-11-10 · Brokkr · Blender add-on tests: the token-guard test no longer pins the store's spelling of an empty put — [receipt](https://eureka.gamecult.org/forge/GameCult/Brokkr/pulls/9)
|
||||
- 2026-11-10 · Ratatoskr · Release candidate: dev 64edacac to main — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/71)
|
||||
- 2026-11-10 · Thing · CI: concurrency group, no cancel on dispatch — [receipt](https://eureka.gamecult.org/forge/GameCult/Thing/pulls/4)
|
||||
- 2026-11-10 · CultLib · CI: concurrency groups, no cancel on tag/dispatch — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/71)
|
||||
- 2026-11-10 · Aetheria · ship-authoring stats --top-speed adds the VelocityLimit a bare hull lacks — [receipt](https://eureka.gamecult.org/forge/GameCult/Aetheria/pulls/3)
|
||||
- 2026-11-10 · AquaSynth · aqua-ear: audio perception tool (spectrogram, onsets, detectors, compare) — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/24)
|
||||
- 2026-11-10 · Bifrost · Reserve Matrix localparts and system names at identity creation — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/34)
|
||||
- 2026-11-10 · Ratatoskr · auth: newcomer-facing sign-in, server and sign-up messages — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/73)
|
||||
- 2026-11-10 · Bifrost · Matrix mouth: m.read follows a chat\_read report, presence follows the turn — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/35)
|
||||
- 2026-11-10 · Weksa · Round records and lines carry parse refusal reasons and an own-family label — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/41)
|
||||
- 2026-11-10 · Ratatoskr · Dings v3 behind client config switch dings.enabled (off by default) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/69)
|
||||
- 2026-11-10 · Bifrost · Load cultnet-ts and cultmesh-ts by their scoped names — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/36)
|
||||
- 2026-11-10 · Bifrost · Estate-rule sim: contribution-credit arm (E7) — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/8)
|
||||
- 2026-11-10 · BadDaySimulator · docs: scenario design, Fella's bad day at the office — [receipt](https://eureka.gamecult.org/forge/GameCult/BadDaySimulator/pulls/2)
|
||||
- 2026-11-10 · Lodur · docs: MotionBricks fit survey (verdict: optional tier) — [receipt](https://eureka.gamecult.org/forge/GameCult/Lodur/pulls/1)
|
||||
- 2026-11-10 · Lodur · First slice: PD-muscle humanoid ragdoll on Ymir's SoA world — [receipt](https://eureka.gamecult.org/forge/GameCult/Lodur/pulls/2)
|
||||
- 2026-11-10 · CultLib · Fork card: cap depends at 8 lines of 1000 bytes — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/73)
|
||||
- 2026-11-10 · Ymir · SoA world: joints, force/torque lanes, capsules and boxes — [receipt](https://eureka.gamecult.org/forge/GameCult/Ymir/pulls/2)
|
||||
- 2026-11-10 · Ymir · Headless 3D SoA world over Box3D, state read in place — [receipt](https://eureka.gamecult.org/forge/GameCult/Ymir/pulls/1)
|
||||
- 2026-11-10 · Eureka · testparse: read dotnet 10's "Total tests:" summary block — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/49)
|
||||
- 2026-11-10 · Odin · Bump CultLib pins to 7665df33 (write receipts) — [receipt](https://eureka.gamecult.org/forge/GameCult/Odin/pulls/1)
|
||||
- 2026-11-10 · Heimdall · Docs: answer collector record and consent — [receipt](https://eureka.gamecult.org/forge/GameCult/Heimdall/pulls/6)
|
||||
- 2026-11-10 · AquaSynth · dings-voices: generator for eight Ratatoskr sender voices (unheard) — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/22)
|
||||
- 2026-11-10 · Perlines · Perlines v2: browser audio visualizer (WebAudio + WebGL2) — [receipt](https://eureka.gamecult.org/forge/GameCult/Perlines/pulls/1)
|
||||
- 2026-11-10 · AquaSynth · aqua-listen: listening-test kit (one self-contained page, verdict export) — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/16)
|
||||
- 2026-11-10 · AquaSynth · aqua-feel: effects shelf for overlay packaging (unheard) — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/10)
|
||||
- 2026-11-10 · Ratatoskr · scene: Dusk floor at the link bound with Day's pale-blue lift (held for Meta's preview) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/56)
|
||||
- 2026-11-10 · CultLib · CultNet governance contracts: sealed-vote API and fork-desk card (schemas, specs, vectors, C#/TS suites) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/72)
|
||||
- 2026-11-10 · BadDaySimulator · Pain box first slice: deterministic virtual human, will-break timeline — [receipt](https://eureka.gamecult.org/forge/GameCult/BadDaySimulator/pulls/1)
|
||||
- 2026-11-10 · GhostlightDungeon-site · CI: run the Pages deploy on GitHub only — [receipt](https://eureka.gamecult.org/forge/GameCult/GhostlightDungeon-site/pulls/1)
|
||||
- 2026-11-10 · Delvehold · CI: run the Pages deploy on GitHub only — [receipt](https://eureka.gamecult.org/forge/GameCult/Delvehold/pulls/1)
|
||||
- 2026-11-10 · Kalsa · CI: run the Pages deploy on GitHub only — [receipt](https://eureka.gamecult.org/forge/GameCult/Kalsa/pulls/1)
|
||||
- 2026-11-10 · Zyphos · CI: run the Pages deploy on GitHub only — [receipt](https://eureka.gamecult.org/forge/GameCult/Zyphos/pulls/5)
|
||||
- 2026-11-10 · Huginn · Persona: send chat\_read for the newest placed event per room at the echo — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/28)
|
||||
- 2026-11-10 · Huginn · huginn sources --front: search only a repo's front-page files — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/27)
|
||||
- 2026-11-10 · Ratatoskr · Room list: unjoined project-room groups collapse behind one Browse entry — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/67)
|
||||
- 2026-11-10 · Weksa · Original corpus for a non-memorised target; recall probes every item; encode prompt states the id form — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/40)
|
||||
- 2026-11-10 · Huginn · Sources index: skip .obsidian, .voidbot, LICENSE and provenance files — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/26)
|
||||
- 2026-11-10 · Huginn · Self run: deliver a result whole, never clipped — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/25)
|
||||
- 2026-11-10 · Weksa · weksa loop recall: a recitation probe for public-domain items; admit\_rules not required in the round schema — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/39)
|
||||
- 2026-11-10 · Ratatoskr · scene: terrain fine grain domain-warped so it stops reading as hatching — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/66)
|
||||
- 2026-11-10 · Ratatoskr · nemesis/demo: Meta's no-chrome look, theme auto, denser terrain, Background menu, with tests and the Ridge zero-size fix — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/65)
|
||||
- 2026-11-10 · Weksa · Round record names the admission rules that refused items — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/38)
|
||||
- 2026-11-10 · Bifrost · deploy plan: NetworkTagSecret step checks openssl and treats an empty value as not set — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/33)
|
||||
- 2026-11-10 · AquaSynth · aqua-trial: add the v5 thruster mix as a variant (unheard, browser-unrun) — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/21)
|
||||
- 2026-11-10 · Bifrost · Pin the vote page busy-refusal branches — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/14)
|
||||
- 2026-11-10 · Bifrost · Standard close: loser of a simultaneous close adopts the winner's result (#30) — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/31)
|
||||
- 2026-11-10 · AquaSynth · aqua-feel: diff faustwasm against the native libfaust path (unheard) — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/20)
|
||||
- 2026-11-10 · Weksa · Lows: summary\_line leaves the public surface; lowering bound pinned in bytes, CR refused — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/37)
|
||||
- 2026-11-10 · Weksa · golf-loop-model-lowerer: a Claude session lowers each packet behind the model port; the template lowerer leaves the loop — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/36)
|
||||
- 2026-11-10 · Weksa · Round-digest lows 2: length-framed source digest, lock cleanup, honest drift text, window tests — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/35)
|
||||
- 2026-11-10 · Weksa · Speaker-scene lows: with\_scene enforces scene coverage at read, one owner — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/34)
|
||||
- 2026-11-10 · Weksa · Round lows: split.rs joins the prompt source digest, stores re-checked after open — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/33)
|
||||
- 2026-11-10 · Weksa · Checkpoint-gate lows: pin the once rule and the elide branch, escape line breaks in item text — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/32)
|
||||
- 2026-11-10 · Weksa · One-write seam: pin 'accept is one batch' by behaviour, delete the source-text tripwire — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/31)
|
||||
- 2026-11-10 · Weksa · golf-loop-edit-accept: a Train-only editor proposes an inventory edit, a candidate round scores it, a noise-floor rule accepts or rejects on Validation — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/30)
|
||||
- 2026-11-10 · Weksa · Clippy: name the predication tuple, box PutArgs — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/29)
|
||||
- 2026-11-10 · gamecult-site · Layout: the column fills the screen; prose keeps a measure — [receipt](https://eureka.gamecult.org/forge/GameCult/gamecult-site/pulls/23)
|
||||
- 2026-11-10 · gamecult-site · Site: forge links in the front page and the dossier — [receipt](https://eureka.gamecult.org/forge/GameCult/gamecult-site/pulls/22)
|
||||
- 2026-11-10 · gamecult-site · Site: forge is the canonical repo home; Huginn owns the mind — [receipt](https://eureka.gamecult.org/forge/GameCult/gamecult-site/pulls/21)
|
||||
- 2026-11-10 · gamecult-site · Math scroll guard: one rule for every block that holds math — [receipt](https://eureka.gamecult.org/forge/GameCult/gamecult-site/pulls/20)
|
||||
- 2026-11-10 · gamecult-site · Math: emit MathML beside the KaTeX so screen readers can read it — [receipt](https://eureka.gamecult.org/forge/GameCult/gamecult-site/pulls/19)
|
||||
- 2026-11-10 · GameCult-Quartz · Latex: let the site choose KaTeX's output mode — [receipt](https://eureka.gamecult.org/forge/GameCult/GameCult-Quartz/pulls/5)
|
||||
- 2026-11-10 · Weksa · golf-loop-round: the smallest loop that scores one round end to end — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/28)
|
||||
- 2026-11-10 · Ratatoskr · auth: footerBand test pins blur to 12px and the footer rule's exact property set — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/63)
|
||||
- 2026-11-10 · Ratatoskr · auth: test the emitted footer rule; wrap comment; correct the terrain luminance figure — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/62)
|
||||
- 2026-11-10 · Ratatoskr · auth: a blurred, tinted, soft-edged band behind the sign-in footer (4.5:1 in Day, Dusk, Night) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/61)
|
||||
- 2026-11-10 · Weksa · speaker-scene: weksa.speaker and weksa.scene documents, with\_scene reads the store — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/26)
|
||||
- 2026-11-10 · Weksa · Checkpoint gate: Test readings need a Checkpoint nobody outside tests can declare; fixed instructions; context lows — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/27)
|
||||
- 2026-11-10 · Weksa · Map: speaker-scene facts, persona-state question, 4b/4c — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/24)
|
||||
- 2026-11-10 · Weksa · Context builder and checkpoint-only Test readings (cut loop-context-builder) — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/25)
|
||||
- 2026-11-10 · Ratatoskr · scene: message and comment on the sweep assertion — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/60)
|
||||
- 2026-11-10 · Ratatoskr · scene: sweep the mid-build test over microtask offsets — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/59)
|
||||
- 2026-11-10 · Ratatoskr · scene: test a sky change landing mid-build — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/58)
|
||||
- 2026-11-10 · Ratatoskr · scene: two quick sky changes build the last sky; Night drift test is exact — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/57)
|
||||
- 2026-11-10 · Ratatoskr · scene: rebuild only for a different drawn sky; URL-steered night sky within the Night backdrop (+ link readability numbers) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/55)
|
||||
- 2026-11-10 · Ratatoskr · trainingNotice: say whose ruling the wording is (comment only) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/53)
|
||||
- 2026-11-10 · Ratatoskr · scene: shape each sky state's drawn sky into a luminance band its text ink clears — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/54)
|
||||
- 2026-11-09 · Ratatoskr · scene: keep the terrain sky and baked tables out of the main chunk (stacked on #47) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/48)
|
||||
- 2026-11-09 · Thing · CI: Windows leg workflow\_dispatch only, PowerShell on Linux — [receipt](https://eureka.gamecult.org/forge/GameCult/Thing/pulls/2)
|
||||
- 2026-11-09 · Ratatoskr · CI: cancel superseded runs with workflow concurrency groups — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/50)
|
||||
- 2026-11-09 · AetheriaLore · CI: run the Pages deploy on GitHub only — [receipt](https://eureka.gamecult.org/forge/GameCult/AetheriaLore/pulls/6)
|
||||
- 2026-11-09 · Ratatoskr · Sky-state control in the estate title bar; the state picks the theme — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/45)
|
||||
- 2026-11-09 · Ratatoskr · scene: ridge and terrain scenes follow the sky state — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/47)
|
||||
- 2026-11-09 · CultLib · CI: Windows jobs workflow\_dispatch only, PowerShell on Linux, glibc comment — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/68)
|
||||
- 2026-11-09 · Ratatoskr · scene: skyState test takes the worse of both sky ends — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/46)
|
||||
- 2026-11-09 · Ratatoskr · scene: host handles a lost GL context (ground on loss, rebuild on restore) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/44)
|
||||
- 2026-11-09 · Ratatoskr · scene: sky-state seam (auto/day/dusk/night) with skyBackdrop — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/43)
|
||||
- 2026-11-09 · Bifrost · Signed Mind intake for sealed motions (stacked on #21) — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/22)
|
||||
- 2026-11-09 · Bifrost · Sealed-ballot motions: commit-reveal over gamecult.sealed\_ballot.v0 — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/21)
|
||||
- 2026-11-09 · Ratatoskr · scene: terrain mesh as fine as the height map (stack: terrain scatter, albedo, stars, haze) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/42)
|
||||
- 2026-11-09 · CultLib · cultmesh-ts test: queued provider registers observed from creation (RUDP replaced-generation flake) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/70)
|
||||
- 2026-11-09 · Bifrost · deploy plan: NetworkTagSecret step: openssl failure appends nothing; empty or indented key line handled — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/20)
|
||||
- 2026-11-09 · CultLib · write\_admitted messageId: letter or number, no Default\_Ignorable, raw compare — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/69)
|
||||
- 2026-11-09 · gamecult-site · Tokenise the three literal grouping hairlines; one-rule-token probe — [receipt](https://eureka.gamecult.org/forge/GameCult/gamecult-site/pulls/18)
|
||||
- 2026-11-09 · Ratatoskr · CI: drop artifact upload from the build check — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/41)
|
||||
- 2026-11-09 · Bifrost · docs: plan for deploying main over the live release — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/15)
|
||||
- 2026-11-09 · Bifrost · deploy plan: generate ConceptVotes\_\_NetworkTagSecret, defaults note, checkout page check — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/19)
|
||||
- 2026-11-09 · Ratatoskr · Room list on a phone: plain text rows in the heading type; no Create Room or Join with Address — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/40)
|
||||
- 2026-11-09 · Bifrost · Revise the main-to-live deploy plan against 55b74275 (Libby's 11 points) — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/18)
|
||||
- 2026-11-09 · Ratatoskr · Room list: faint wash again; chat: name and time on one plain line (regression from #35 and the scrim commits) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/39)
|
||||
- 2026-11-09 · CultLib · TS write-receipt client against the real Rust and C# receipt servers (interop harness) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/67)
|
||||
- 2026-11-09 · CultLib · cultnet-py: decode write\_admitted.v0 and error.v1 against the write-receipt vectors — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/66)
|
||||
- 2026-11-09 · CultLib · cultmesh-kotlin: write receipt frames, hash, tracker, vector replay — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/65)
|
||||
- 2026-11-09 · CultLib · Rust RUDP server: pin blank schemaId/recordKey refusal, decide sequenced refusal per frame — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/63)
|
||||
- 2026-11-09 · CultLib · write-receipt: one unreadable text, one blank-field rule (both servers) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/64)
|
||||
- 2026-11-09 · GameCult-Quartz · CI: run on the docker runner label — [receipt](https://eureka.gamecult.org/forge/GameCult/GameCult-Quartz/pulls/3)
|
||||
- 2026-11-09 · Heimdall · Connect start: pin the app-secret gate on every managed provider, refuse blank targets — [receipt](https://eureka.gamecult.org/forge/GameCult/Heimdall/pulls/9)
|
||||
- 2026-11-09 · Heimdall · Redeem refuses a target the completion did not record — [receipt](https://eureka.gamecult.org/forge/GameCult/Heimdall/pulls/10)
|
||||
- 2026-11-09 · Huginn · AlreadyResolved names the closure in force — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/22)
|
||||
- 2026-11-09 · Huginn · Import: resolution of a window follow-up or idea is inert — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/23)
|
||||
- 2026-11-09 · AetheriaLore · Canon/proposal file-kind marker, checked on PR (design first) — [receipt](https://eureka.gamecult.org/forge/GameCult/AetheriaLore/pulls/4)
|
||||
- 2026-11-09 · Huginn · mind-body: open work listed oldest first by origin, lines capped, hidden work named by campaign — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/24)
|
||||
- 2026-11-09 · Bifrost · CI: delete the container publish workflow — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/17)
|
||||
- 2026-11-09 · Bifrost · Make every cookie host-only: \_\_Host- names, Secure, Path=/ — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/11)
|
||||
- 2026-11-09 · moonlight-ios · docs: remote access is Starfire over Headscale (corrects PR #2) — [receipt](https://eureka.gamecult.org/forge/GameCult/moonlight-ios/pulls/3)
|
||||
- 2026-11-09 · Weksa · S6 residue: lone marks get the marks-only reason, katakana ヷ-ヺ fold, İx/i̇x collide again — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/22)
|
||||
- 2026-11-09 · Weksa · Errors stop echoing identifiers: LowerError/Refusal Display, clap errors — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/21)
|
||||
- 2026-11-09 · Weksa · Test: request\_gate reads the agent role by gloss (kills the cargo-mutants survivor at lower.rs:286) — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/20)
|
||||
- 2026-11-09 · Ratatoskr · Phone text flow: portrait floor, list markers, in-flow banner, pretend-server notice — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/35)
|
||||
- 2026-11-09 · Weksa · Corpus intake lows 2: S6 folds, CLI errors stop echoing identifiers, --admitted-on is a date, marks-only text refused — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/19)
|
||||
- 2026-11-09 · Ratatoskr · Upload failures keep name, size and file readability — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/34)
|
||||
- 2026-11-09 · Ratatoskr · phone layout: text wraps the traced portrait outline; status lines clear the composer — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/31)
|
||||
- 2026-11-09 · Ratatoskr · docs: file zone design sketch — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/33)
|
||||
- 2026-11-09 · Ratatoskr · preview-demo: drop the submit-event shim; relative manifest link — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/32)
|
||||
- 2026-11-09 · Ratatoskr · preview-demo: README for the pose thumbnails (provenance) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/29)
|
||||
- 2026-11-09 · Ratatoskr · settings: no window at import (fixes soundscape test on dev) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/37)
|
||||
- 2026-11-09 · Heimdall · Record a failed refresh on the identity row so another process does not re-present the token — [receipt](https://eureka.gamecult.org/forge/GameCult/Heimdall/pulls/8)
|
||||
- 2026-11-09 · gamecult-site · ci: build-only check on pull requests — [receipt](https://eureka.gamecult.org/forge/GameCult/gamecult-site/pulls/16)
|
||||
- 2026-11-09 · gamecult-site · Site copy: VoidBot retired and Eve deprecated, in the past tense (do not merge, no deploy) — [receipt](https://eureka.gamecult.org/forge/GameCult/gamecult-site/pulls/15)
|
||||
- 2026-11-09 · GameCult-Quartz · fix: cast satori input to fix TS2345 in ogImage — [receipt](https://eureka.gamecult.org/forge/GameCult/GameCult-Quartz/pulls/2)
|
||||
- 2026-11-09 · Weksa · Dao De Jing test bed: PublicDomain provenance fields, Legge slice, first golf-loop number — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/10)
|
||||
- 2026-11-09 · Weksa · Phone inventory, segmenter and \`weksa lower --phones\` (the Weksa-\>AquaSynth phones line) — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/16)
|
||||
- 2026-11-09 · Weksa · Consent-gated request row: 'You asked Nibu to stop.' lowers only when the packet carries addressee consent — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/18)
|
||||
- 2026-11-09 · Huginn · mind-body: a brief is done when its change lands, told once as one closing rule — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/21)
|
||||
- 2026-11-09 · Eureka · campaign-state: honest follow-up outcomes; campaigns resolve Moved — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/62)
|
||||
- 2026-11-09 · Weksa · Packet carries an addressee-consent fact (schema v5, V14, V15) — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/14)
|
||||
- 2026-11-09 · Weksa · Scorer coverage: words break at any non-word character; unspaced scripts read by run; near-miss chrF pairs per script — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/17)
|
||||
|
||||
## Week of 2 Nov 2026
|
||||
|
||||
*17 repos moved in one week. The studio is not one project in a trench coat.*
|
||||
|
||||
- 2026-11-08 · Huginn · huginn import: a follow-up or idea the receiver wrote after the import began no longer blocks the resume — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/20)
|
||||
- 2026-11-08 · Huginn · admission: an import replays a cite of another root's closed follow-up — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/17)
|
||||
- 2026-11-08 · Huginn · huginn-mind: an import is not refused for citing another campaign's document resolved after its source ordinal — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/19)
|
||||
- 2026-11-08 · Huginn · mind-body: every Persona line asks for her own work, plans first — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/18)
|
||||
- 2026-11-08 · CultLib · TS: write\_admitted / error.v1 decoder, WriteTracker, vector replay runner — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/62)
|
||||
- 2026-11-08 · CultLib · C#: database server answers writes with write\_admitted / error.v1 (write-receipt spec) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/61)
|
||||
- 2026-11-08 · CultLib · cultmesh-rs: RUDP document server answers writes with write\_admitted / error.v1 — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/60)
|
||||
- 2026-11-08 · CultLib · spec: cultnet write receipt (write\_admitted, error id echo, admitted/refused/unconfirmed) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/59)
|
||||
- 2026-11-08 · Huginn · huginn import: a steward pulls a moved campaign into her own mind — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/16)
|
||||
- 2026-11-08 · Huginn · huginn-mind: a campaign moves out of a mind (Moved freeze, import provenance) — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/15)
|
||||
- 2026-11-08 · Bifrost · Matrix mouth: read receipts on ack, presence from the brake — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/13)
|
||||
- 2026-11-08 · Huginn · mind-body: a nightly memory consolidation run for one Mind (typed Slept cut line) — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/14)
|
||||
- 2026-11-08 · Heimdall · Refusal return contract: pin the fragment, carry the attempt id, document it — [receipt](https://eureka.gamecult.org/forge/GameCult/Heimdall/pulls/7)
|
||||
- 2026-11-08 · Heimdall · Joystick consent: ask page, consent\_refused, receipts, signed-in grants page with revoke — [receipt](https://eureka.gamecult.org/forge/GameCult/Heimdall/pulls/5)
|
||||
- 2026-11-08 · CultLib · C#: SubmitDocumentAsync and the shard write forwarder complete on the result frame — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/58)
|
||||
- 2026-11-08 · CultLib · cultmesh-rs: single and batch publish complete on the result frame, not the transport ack — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/57)
|
||||
- 2026-11-08 · CultLib · cultnet-ts: the Odin presence publisher completes on the result frame, not the ack — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/56)
|
||||
- 2026-11-08 · CultLib · cultmesh-ts: a put completes on its result frame, not on the transport ack — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/55)
|
||||
- 2026-11-08 · CultLib · GameCult.Networking test: the RUDP schema client delivers a refused put's result frame whatever the order of the ack — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/54)
|
||||
- 2026-11-08 · CultLib · cultmesh-py test: a put the server refused is reported refused after its reliable ack arrived — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/53)
|
||||
- 2026-11-08 · CultLib · cultmesh-rs test: a publish whose refusal arrives before the ack is refused — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/52)
|
||||
- 2026-11-08 · CultLib · cultnet-ts test: the Odin presence publisher does not complete on the ack when the refusal arrives first — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/51)
|
||||
- 2026-11-08 · CultLib · cultmesh-ts test: publishRudpDocumentAndWaitForReceipt reports a refused put as refused — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/50)
|
||||
- 2026-11-08 · CultLib · cultmesh-rs: send the capped frame's answer reliably and end the session once it is acknowledged — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/48)
|
||||
- 2026-11-08 · CultLib · GameCult.Networking: resend the capped frame's answer until acknowledged, then end the session — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/49)
|
||||
- 2026-11-08 · CultLib · cultmesh-ts: resend the capped frame's answer until acknowledged, then end the session — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/47)
|
||||
- 2026-11-08 · CultLib · cultmesh-py: answer an unreadable RUDP frame and end the session after 8 consecutive refusals — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/45)
|
||||
- 2026-11-08 · CultLib · cultmesh-ts: end a RUDP session after 8 consecutive unreadable frames or authority-refused deletes — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/44)
|
||||
- 2026-11-08 · CultLib · GameCult.Networking: answer an undecodable RUDP frame message\_invalid and end the session at 8 in a row — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/46)
|
||||
- 2026-11-08 · CultLib · cultmesh-rs: keep the session through an unreadable frame or refused delete; end at 8 in a row — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/43)
|
||||
- 2026-11-08 · Huginn · chat\_image: test that fails if the take(MAX+1) read bound is removed — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/12)
|
||||
- 2026-11-08 · CultLib · cultmesh-rs: RUDP document server refuses unreadable frames and deletes with typed errors — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/42)
|
||||
- 2026-11-08 · Bifrost · Matrix mouth: fetch and store chat images (cut A), ChatDelivery v3 — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/12)
|
||||
- 2026-11-08 · Eureka · Every mutant runs under its own memory and time cap — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/61)
|
||||
- 2026-11-08 · CultLib · cultnet error contract: one message\_invalid code replaces malformed\_document\_put/delete — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/41)
|
||||
- 2026-11-08 · CultLib · cultmesh-ts: write authority decide timeout counts as a typed refusal — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/40)
|
||||
- 2026-11-08 · Huginn · mind-body: chat images reach the Persona session as image blocks (ChatDelivery v2 image field) — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/11)
|
||||
- 2026-11-08 · eureka-site · Proposal: link 'Eureka in ten minutes' from the install panel — [receipt](https://eureka.gamecult.org/forge/GameCult/eureka-site/pulls/1)
|
||||
- 2026-11-08 · Eureka · Eureka in ten minutes: outsider-runnable falsification demo — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/60)
|
||||
- 2026-11-08 · CultLib · semver-policy: exact commands for reading the workflow at the tagged sha; evidence for the cultcache-ts-v0.15.0 run — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/39)
|
||||
- 2026-11-08 · CultLib · docs: drop stale cultcache-ts tag-trigger claim from the content map — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/38)
|
||||
- 2026-11-07 · CultLib · cultmesh-ts: write authority for the RUDP document server — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/37)
|
||||
- 2026-11-07 · Ratatoskr · ridge scene behind the whole app, tight bubble wrap, sharper portraits, long-post fixtures — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/30)
|
||||
- 2026-11-07 · CultLib · cultnet-ts: typed write\_not\_authorized factory and canonical schema id — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/36)
|
||||
- 2026-11-07 · CultLib · cultmesh-rs: a sink's refusal of a put is a typed write\_not\_authorized — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/35)
|
||||
- 2026-11-07 · CultLib · cultmesh-py: bind the TCP+UDP pair for port 0 without the race — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/34)
|
||||
- 2026-11-07 · Brokkr · Blender add-on: pass CultMeshGrantAllWrites() to its served node — [receipt](https://eureka.gamecult.org/forge/GameCult/Brokkr/pulls/4)
|
||||
- 2026-11-07 · CultLib · cultmesh-py: peer writes need a write authority (default-deny) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/33)
|
||||
- 2026-11-07 · Ratatoskr · preview: pretend homeserver for the dev preview (in-page, off by default) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/28)
|
||||
- 2026-11-07 · Ratatoskr · ci: build dev into rat-dev-dist artifact — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/27)
|
||||
- 2026-11-07 · CultLib · Docs: cultcache-ts publishing is off; tag runs use the tagged workflow — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/32)
|
||||
- 2026-11-07 · CultLib · publish-packages: cultcache-ts-v\* tags no longer trigger publish — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/31)
|
||||
- 2026-11-07 · CultLib · cultcache-ts 0.15.0: fold 0.14.1, 0.14.2 and Unreleased; raise consumer ranges — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/30)
|
||||
- 2026-11-07 · CultLib · Fix build:ts: one text-only error factory in cultnet-ts (6 TS2345 in cultmesh-ts) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/29)
|
||||
- 2026-11-07 · CultLib · npm: scope cultnet-ts, cultmesh-ts, cultmesh-browser under @gamecult — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/28)
|
||||
- 2026-11-07 · CultLib · cultcache-rs: pin the one-global rule on load\_soa (PR #15 gap) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/27)
|
||||
- 2026-11-07 · CultLib · cultnet: add unsupported\_schema\_version to the closed cultnet.error.v0 code set — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/26)
|
||||
- 2026-11-07 · Brokkr · Blender add-on: importGltf, setCamera, setLight, setWorld, renderStill — [receipt](https://eureka.gamecult.org/forge/GameCult/Brokkr/pulls/2)
|
||||
- 2026-11-07 · Eureka · Skill tools off MCP: the huginn CLI is the only way in — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/59)
|
||||
- 2026-11-07 · GameCult-Quartz · ci: drop windows-latest from the engine CI matrix — [receipt](https://eureka.gamecult.org/forge/GameCult/GameCult-Quartz/pulls/1)
|
||||
- 2026-11-07 · Brokkr · Blender add-on: server hardening (opt-in session token, intent purge, bind guard) — [receipt](https://eureka.gamecult.org/forge/GameCult/Brokkr/pulls/1)
|
||||
- 2026-11-07 · CultLib · cultnet-ts selection/v1 carriers + error code/details — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/20)
|
||||
- 2026-11-07 · CultLib · cultnet-py multi-peer RUDP socket server — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/19)
|
||||
- 2026-11-07 · CultLib · cultmesh-py/rs authority route verification — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/18)
|
||||
- 2026-11-07 · CultLib · cultnet-py: schema catalog describes cultnet.error.v0 as the contract does — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/17)
|
||||
- 2026-11-07 · CultLib · cultcache-py: single-file store lock, fsync and unique staging; msgpack hard; slot-nil reader — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/16)
|
||||
- 2026-11-07 · CultLib · cultcache-rs: name, index and global lookups (C# parity) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/15)
|
||||
- 2026-11-07 · CultLib · cultnet error message parity: TS type + Python builder/decoder, shared C#/Rust vectors — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/14)
|
||||
- 2026-11-07 · CultLib · docs(start): tested CultNet first-call snippets (C#, TypeScript, Rust, Python) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/11)
|
||||
- 2026-11-07 · CultLib · docs/start: two-client .io game recipe (CultCache + CultMesh, TS) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/10)
|
||||
- 2026-11-07 · Huginn · huginn admit holds near-duplicates; huginn recall dispatch — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/10)
|
||||
- 2026-11-07 · CultLib · ci: drop the Eve getting-started job (GameCult/Eve no longer resolves) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/25)
|
||||
- 2026-11-07 · CultLib · cultcache-ts: browser-safe entry that excludes the node-only single-file store — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/24)
|
||||
- 2026-11-07 · Weksa · Entity forms carry a ruled pronunciation; lower --ipa emits it — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/13)
|
||||
- 2026-11-07 · AquaSynth · StoreFileName tests: device lookalikes and IPA pair distinctness — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/15)
|
||||
- 2026-11-07 · Fensalir · ClientRuntimeLoader: client assemblies must resolve under a trusted root — [receipt](https://eureka.gamecult.org/forge/GameCult/Fensalir/pulls/1)
|
||||
- 2026-11-07 · CultLib · docs: mark samples/eve-browser-network as needing a sibling Eve checkout — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/23)
|
||||
- 2026-11-07 · Ratatoskr · ci: drop Cinny-upstream workflows that cannot run on the forge — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/25)
|
||||
- 2026-11-07 · Eureka · tools: dotnet-self-env.sh for Selves with a read-only HOME — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/58)
|
||||
- 2026-11-07 · CultLib · sln: drop EveBrowserNetworkSample so dotnet build CultLib.sln succeeds — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/22)
|
||||
- 2026-11-07 · CultLib · ci: Windows legs run on workflow\_dispatch only; Ubuntu gates push and PR — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/21)
|
||||
- 2026-11-07 · CultLib · cultnet-ts: drop unset optional keys from createDocumentPutMessage — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/13)
|
||||
- 2026-11-07 · AquaSynth · IpaGestureExperiment onto StoreFileName (stacked on #11) — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/14)
|
||||
- 2026-11-07 · AquaSynth · One StoreFileName in Core: no id collisions, no '..' escape — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/11)
|
||||
- 2026-11-07 · Huginn · huginn persona get\|put — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/9)
|
||||
- 2026-11-07 · Weksa · Lowerer reads entity forms: entity referents lower to the entity's en-US citation form — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/11)
|
||||
- 2026-11-07 · Huginn · Release: Self replies reach her Persona; one conversation at a time; resume; project-name addressing; stream thoughts — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/8)
|
||||
- 2026-11-07 · Eureka · Persona charter: authority follows stewardship between peers — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/57)
|
||||
- 2026-11-07 · Eureka · Three tiers: measure a task by what it brings back — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/56)
|
||||
- 2026-11-07 · Eureka · Delegation is a choice: tiers act directly when their context suffices — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/55)
|
||||
- 2026-11-07 · CultLib · heimdall-consent: typed records for the answer collector — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/12)
|
||||
- 2026-11-07 · Eureka · Dispatch recall: the nearest rulings to a brief's citations reach the subagent — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/54)
|
||||
- 2026-11-07 · AquaSynth · Spike: AOT-compile thruster v5 to a native lib with bounded rpm (Linux; Windows/Unity unverified) — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/13)
|
||||
- 2026-11-07 · AquaSynth · Scoping: Faust DSP (thruster v5) in a Unity player on Windows and Linux — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/12)
|
||||
- 2026-11-06 · ModelConnector · Lease socket answers a usage readout — [receipt](https://eureka.gamecult.org/forge/GameCult/ModelConnector/pulls/1)
|
||||
- 2026-11-06 · Eureka · Persona charter: the operator's own life in chat is not a leak — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/53)
|
||||
- 2026-11-06 · Eureka · Changelog: prompt recall hook stays uninstalled — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/52)
|
||||
- 2026-11-06 · Eureka · Later cuts are follow-ups, not prose lines — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/51)
|
||||
- 2026-11-06 · Eureka · Three tiers of context — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/50)
|
||||
- 2026-11-06 · Weksa · Proposals page for human reviewers — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/7)
|
||||
- 2026-11-06 · Weksa · Deru phonotactics in the Sa'ueia/Airawa checker; names file; briefs updated — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/9)
|
||||
- 2026-11-06 · Weksa · rtd: imperial\_frame out of packet example (ruling) + DRAFT Dao path-fit ontology (proposal, not canon) — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/6)
|
||||
- 2026-11-06 · Weksa · Lowering input: the speaker's relation to the addressee (Scene slot, with\_scene) — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/8)
|
||||
- 2026-11-06 · Bifrost · Estate-rule sim: regenerate stale results, fix weight-floor wording — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/7)
|
||||
- 2026-11-06 · AquaSynth · Earcon Workshop: static earcon family generator with WAV/JSON export (unheard) — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/9)
|
||||
- 2026-11-06 · AetheriaLore · Revert PR #1: table wikilink pipes — [receipt](https://eureka.gamecult.org/forge/GameCult/AetheriaLore/pulls/3)
|
||||
- 2026-11-06 · AetheriaLore · Fix backslash-escaped pipes in table wikilinks — [receipt](https://eureka.gamecult.org/forge/GameCult/AetheriaLore/pulls/1)
|
||||
- 2026-11-06 · CultLib · heimdall-stake: stake function and splitting-gain report (Rust, zero deps) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/9)
|
||||
- 2026-11-06 · Weksa · DRAFT Zyphos naming briefs (not canon) — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/1)
|
||||
- 2026-11-06 · AetheriaLore · Faction Play: apply Nibu's rulings on proposals 1, 2, 4, 5 — [receipt](https://eureka.gamecult.org/forge/GameCult/AetheriaLore/pulls/2)
|
||||
- 2026-11-06 · Weksa · Rust to Dust imperial language: draft design spec r0 — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/2)
|
||||
- 2026-11-06 · Bifrost · Estate-rule sim: pin the stake arm to heimdall-stake golden vectors — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/6)
|
||||
- 2026-11-06 · Heimdall · Live-Postgres tests: exercise the pending-link methods; add a standing live run — [receipt](https://eureka.gamecult.org/forge/GameCult/Heimdall/pulls/4)
|
||||
- 2026-11-05 · Bifrost · Estate-rule sim: purchased-stake arm (log weight, splitting adversary, half-influence cap) — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/5)
|
||||
- 2026-11-05 · Heimdall · r2: bind OAuth completion to the launching browser, one use per state; gate connect starts — [receipt](https://eureka.gamecult.org/forge/GameCult/Heimdall/pulls/3)
|
||||
- 2026-11-05 · AquaSynth · aqua-feel: headless feel meter + gate; fix PRC SYNTH1 clipping and thruster low-rpm hiss — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/8)
|
||||
- 2026-11-05 · Eureka · bloom-sheet: large fills as wash and outline — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/48)
|
||||
- 2026-11-05 · Eureka · bloom-sheet: visitors drawn with the plant's pen — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/47)
|
||||
- 2026-11-05 · Eureka · bloom-sheet CLI: markdown to a neon one-page sheet — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/46)
|
||||
- 2026-11-05 · CultLib · docs/start: verbatim drift check for C# and TS first-call blocks — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/7)
|
||||
- 2026-11-05 · AquaSynth · Docs: soundscape grammar for the Ratatoskr generative symphony (draft) — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/4)
|
||||
- 2026-11-05 · AquaSynth · Faust on Linux: FaustRender probe, toolchain notes, thruster v5 manifest — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/5)
|
||||
- 2026-11-05 · AquaSynth · Listening trial: blinded A/B thruster noise sweep (static page) — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/7)
|
||||
- 2026-11-05 · AquaSynth · Static in-browser playground (faustwasm) for AquaSynth patches — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/6)
|
||||
- 2026-11-05 · AquaSynth · Add thruster Faust patch with an rpm control — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/3)
|
||||
- 2026-11-05 · AquaSynth · Faust SetControls: remove per-call allocation — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/2)
|
||||
- 2026-11-05 · CultLib · CultMath: Phacelle rows are bit-identical forward, backward and shuffled — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/5)
|
||||
- 2026-11-05 · CultLib · heimdall-delegation: delegation resolver (Rust, zero deps) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/6)
|
||||
- 2026-11-05 · Bifrost · Estate-rule sim harness: populism, strategic agents, transitive delegation — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/4)
|
||||
- 2026-11-05 · Bifrost · Proposal: charter amendment provision (in-chat charter) — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/3)
|
||||
- 2026-11-05 · Huginn · chat-retrieval-map: anchors to main, answered questions, stale Persona premise — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/7)
|
||||
- 2026-11-05 · Bifrost · The mouth delivers media events as a typed line — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/2)
|
||||
- 2026-11-05 · Heimdall · Google OIDC provider: link-only, sub-keyed, PKCE and nonce — [receipt](https://eureka.gamecult.org/forge/GameCult/Heimdall/pulls/2)
|
||||
- 2026-11-05 · Huginn · docs: chat retrieval authority map and cut — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/1)
|
||||
- 2026-11-05 · Heimdall · Bind link mode to its initiator and redeem to its target — [receipt](https://eureka.gamecult.org/forge/GameCult/Heimdall/pulls/1)
|
||||
- 2026-11-05 · Eureka · Skill: one feature across two areas — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/23)
|
||||
- 2026-11-05 · Eureka · Briefs: a merge pass never rebases on a rejected push — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/20)
|
||||
- 2026-11-05 · Ratatoskr · brand: Ratatoskr replaces Cinny branding (do not merge) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/11)
|
||||
- 2026-11-05 · moonlight-ios · docs: remote access to a Sunshine host over Tailscale or Headscale (untested) — [receipt](https://eureka.gamecult.org/forge/GameCult/moonlight-ios/pulls/2)
|
||||
- 2026-11-05 · moonlight-ios · README: publish health stays independent of every other feature — [receipt](https://eureka.gamecult.org/forge/GameCult/moonlight-ios/pulls/1)
|
||||
- 2026-11-05 · Eureka · Eyes and Imagination keep their findings as typed notes; the facts file and committed research file die — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/45)
|
||||
- 2026-11-05 · Ratatoskr · Estate navigator stack: background scene, soundscape, cone prepass (opt-in) — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/15)
|
||||
- 2026-11-04 · Ratatoskr · scene: cone prepass for pass 1, opt-in steps/pixel readout — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/12)
|
||||
- 2026-11-04 · Huginn · The MCP admit goes through the one strict door; refusals name the field — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/5)
|
||||
- 2026-11-04 · CultLib · docs/start: tested Rust and Python CultCache first calls — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/3)
|
||||
- 2026-11-04 · CultLib · docs: docs/start onboarding with tested CultCache first calls (C#, TS) — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/2)
|
||||
- 2026-11-04 · CultLib · CultMath: regenerate lavapipe device bounds at 85ce65fa — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/4)
|
||||
- 2026-11-04 · CultLib · CultMath: fbm, and the measured Lipschitz bound of phacelle — [receipt](https://eureka.gamecult.org/forge/GameCult/CultLib/pulls/1)
|
||||
- 2026-11-04 · Huginn · Persona wake: the brake counts only Self runs the Mind started itself — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/4)
|
||||
- 2026-11-04 · Huginn · Persona wake: leads and a what-could-exist ask; intents leave the history line — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/3)
|
||||
- 2026-11-04 · gamecult-site · Landing: three estate doors with a mode switch (draft, do not merge) — [receipt](https://eureka.gamecult.org/forge/GameCult/gamecult-site/pulls/12)
|
||||
- 2026-11-04 · Huginn · research and idea kinds: typed documents for what Eyes and Imagination find — [receipt](https://eureka.gamecult.org/forge/GameCult/Huginn/pulls/2)
|
||||
- 2026-11-04 · Zyphos · Respell Sa'auei'a as Sa'ueia (spelling only) — [receipt](https://eureka.gamecult.org/forge/GameCult/Zyphos/pulls/1)
|
||||
- 2026-11-04 · Weksa · Sa'ueia workshop first cut: table, checker, sound proposal — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/5)
|
||||
- 2026-11-04 · Weksa · Respell Sa'auei'a as Sa'ueia (spelling only) — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/4)
|
||||
- 2026-11-04 · Eureka · persona doctrine: the machine is more than code — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/44)
|
||||
- 2026-11-04 · gamecult-site · Landing: Kiko line says Muninn does not currently build — [receipt](https://eureka.gamecult.org/forge/GameCult/gamecult-site/pulls/11)
|
||||
- 2026-11-03 · gamecult-site · Landing: Libby and Weksa roster wording — [receipt](https://eureka.gamecult.org/forge/GameCult/gamecult-site/pulls/10)
|
||||
- 2026-11-03 · gamecult-site · Landing: owners' roster wording (Kiko, Libby, Aqua, Eureka, Heimdall, Weksa) — [receipt](https://eureka.gamecult.org/forge/GameCult/gamecult-site/pulls/9)
|
||||
- 2026-11-03 · gamecult-site · Landing: Nibu roster line and Aetheria card — [receipt](https://eureka.gamecult.org/forge/GameCult/gamecult-site/pulls/8)
|
||||
- 2026-11-03 · gamecult-site · Landing: "Who has a say" replaces the estates heading — [receipt](https://eureka.gamecult.org/forge/GameCult/gamecult-site/pulls/7)
|
||||
- 2026-11-03 · gamecult-site · Landing: stacked entries replace the Minds and what-is-live tables — [receipt](https://eureka.gamecult.org/forge/GameCult/gamecult-site/pulls/6)
|
||||
- 2026-11-03 · Weksa · speaker-state onto main (stance in packet, admit-only LoweringInput) + build notes — [receipt](https://eureka.gamecult.org/forge/GameCult/Weksa/pulls/3)
|
||||
- 2026-11-03 · gamecult-site · Landing: Minds' project paragraphs, estates, Aetheria reconciled — [receipt](https://eureka.gamecult.org/forge/GameCult/gamecult-site/pulls/5)
|
||||
- 2026-11-03 · gamecult-site · Landing copy: fix Aetheria claim, audit and soften unsourced claims — [receipt](https://eureka.gamecult.org/forge/GameCult/gamecult-site/pulls/4)
|
||||
- 2026-11-03 · gamecult-site · Landing page revamp: value, residents, live vs planned, four estates — [receipt](https://eureka.gamecult.org/forge/GameCult/gamecult-site/pulls/3)
|
||||
- 2026-11-03 · gamecult-site · Research: stale claims on the VoidBot project page — [receipt](https://eureka.gamecult.org/forge/GameCult/gamecult-site/pulls/1)
|
||||
- 2026-11-03 · Ratatoskr · scene: Phacelle bound says measured-not-proved; neutral creature draws nothing — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/8)
|
||||
- 2026-11-03 · Bifrost · The mouth refuses a Persona send when the room moved past what she held — [receipt](https://eureka.gamecult.org/forge/GameCult/Bifrost/pulls/1)
|
||||
- 2026-11-03 · Eureka · Verify containers share cargo's package-cache lock: mount the shared volume as CARGO\_HOME — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/43)
|
||||
- 2026-11-02 · Eureka · Inversion of control wording: stewards decide, originator vision is evidence — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/42)
|
||||
- 2026-11-02 · Ratatoskr · Background scene: two-pass WebGL2 terrain and world tree with login pull-back — [receipt](https://eureka.gamecult.org/forge/GameCult/Ratatoskr/pulls/1)
|
||||
- 2026-11-02 · Eureka · persona.md: Your turn section — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/41)
|
||||
|
||||
## Week of 26 Oct 2026
|
||||
|
||||
*Mostly Eureka. The rest kept their heads down.*
|
||||
|
||||
- 2026-11-01 · Eureka · fast-mutants: cargo-mutants per file with scoped tests, survivors confirmed on the full suite, sharded across slots — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/40)
|
||||
- 2026-11-01 · Eureka · context-pack docs: Soul s1 Lows — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/39)
|
||||
- 2026-11-01 · Eureka · context-pack: resolve reads, check symbols, capped caller lists (cut-context-pack-reads r3) — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/38)
|
||||
- 2026-11-01 · Eureka · campaign-state: the repo set in force and how Self changes it (cut-skill-campaign-repos r2) — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/37)
|
||||
- 2026-11-01 · Eureka · doctrine: Persona pointers, Soul s2 Lows — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/36)
|
||||
- 2026-11-01 · Eureka · doctrine: Persona state pointers name Huginn as the holder — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/35)
|
||||
- 2026-10-31 · Eureka · persona: each room purpose; #operator only for what needs the operator — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/34)
|
||||
- 2026-10-31 · AquaSynth · Faust loader: platform-aware library lookup and AQUASYNTH\_FAUST\_LIBRARY override — [receipt](https://eureka.gamecult.org/forge/GameCult/AquaSynth/pulls/1)
|
||||
- 2026-10-31 · gamecult-site · VoidBot project page: record retirement — [receipt](https://eureka.gamecult.org/forge/GameCult/gamecult-site/pulls/2)
|
||||
- 2026-10-31 · Eureka · persona: register rule (Persona voice everywhere but #minds) — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/33)
|
||||
- 2026-10-31 · Eureka · skill: use the huginn CLI instead of the eureka-state MCP — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/32)
|
||||
- 2026-10-31 · Eureka · doctrine: GameCult workspace doctrine moves into the skill as doctrine/gamecult.md — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/31)
|
||||
- 2026-10-27 · Eureka · Skill: re-entry triages reports with no verdict; second beating triggers the structural move; pushed heads build — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/30)
|
||||
|
||||
## Week of 19 Oct 2026
|
||||
|
||||
- 2026-10-23 · Eureka · Research: recall triggers prior art — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/28)
|
||||
- 2026-10-23 · Eureka · Recall at admission: recall.py admit holds a ruling/question batch once with its in-force neighbours — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/29)
|
||||
- 2026-10-23 · Eureka · Worktree cleanup is scoped to this session's own agents — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/27)
|
||||
- 2026-10-23 · Eureka · Worktrees die with their cut — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/26)
|
||||
- 2026-10-22 · Eureka · Recall hook: the mind recalls into context on every prompt — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/25)
|
||||
|
||||
## Week of 12 Oct 2026
|
||||
|
||||
*Mostly Eureka. The rest kept their heads down.*
|
||||
|
||||
- 2026-10-14 · Eureka · Doctrine and briefs: nothing that exists is sacred, the operator's words included — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/22)
|
||||
- 2026-10-14 · Eureka · Skill: a worktree's branch is the spec's branch — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/21)
|
||||
- 2026-10-12 · Eureka · Briefs: no test run of any size on Starfire — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/19)
|
||||
- 2026-10-12 · Eureka · Skill: map only what is about to run — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/18)
|
||||
- 2026-10-12 · Eureka · References: dated tool-calling map; two admission notes — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/17)
|
||||
- 2026-10-12 · Eureka · Skill: Self rotates at about 400k — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/16)
|
||||
|
||||
## Week of 5 Oct 2026
|
||||
|
||||
*Mostly Eureka. The rest kept their heads down.*
|
||||
|
||||
- 2026-10-11 · Eureka · Skill: every campaign in force has an area — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/15)
|
||||
- 2026-10-11 · Eureka · Briefs: Stryker offsets come from the job checkout — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/14)
|
||||
- 2026-10-09 · Eureka · Skill: name Self handoffs per area — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/12)
|
||||
- 2026-10-09 · Eureka · Skill: research is always kept — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/13)
|
||||
- 2026-10-09 · Eureka · Briefs: Aetheria verify pins are git clones — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/11)
|
||||
- 2026-10-09 · Eureka · Briefs: a scratch subdirectory is named per dispatch — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/10)
|
||||
- 2026-10-09 · Eureka · Briefs: the context pack is how Hands reads a cut — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/9)
|
||||
- 2026-10-09 · Eureka · tools/context-pack.py: carry cut\_spec anchors to the worktree — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/8)
|
||||
- 2026-10-08 · Eureka · Tool-call relief: wait-on.sh, python, brief lessons, Life reads the mind — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/7)
|
||||
|
||||
## Week of 28 Sep 2026
|
||||
|
||||
*Mostly Eureka. The rest kept their heads down.*
|
||||
|
||||
- 2026-10-03 · Eureka · Self loads Eureka; Hands, Eyes and Life default to Sonnet; handoffs are pointers — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/6)
|
||||
- 2026-10-03 · Eureka · Hands template: no resolutions; fix batches name their commits — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/5)
|
||||
- 2026-10-03 · Eureka · Doctrine explains instead of shouting — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/4)
|
||||
- 2026-10-02 · Eureka · Doctrine moves into the Eureka repo — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/3)
|
||||
- 2026-10-01 · Eureka · Faculty charters, step 5: dispatch by subagent\_type; briefs stop restating charters — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/2)
|
||||
- 2026-10-01 · Eureka · Tool-calling cut §5: summary/wait verify, snapshot mutation runner — [receipt](https://eureka.gamecult.org/forge/GameCult/Eureka/pulls/1)
|
||||
|
||||
|
|
@ -53,7 +53,7 @@ GameCult is building infrastructure for governed human/agent work: <strong>Epiph
|
|||
|
||||
The narrow version is an AI developer workflow product: persistent agents that can work across complex repositories without losing the plot. The broader version is a work-governance platform: humans and agents propose work, prioritize it, execute it, verify outputs, record receipts, and attach credit or rewards. GameCult's front page frames the organization around open development, visible work, legible incentives, contributor standing, and a cooperative model in which supporters and builders shape priorities and policy.<sup><a href="https://gamecult.org/">GameCult front page</a></sup>
|
||||
|
||||
Bifrost is the main evidence that this is more than agent rhetoric. Its README describes a member, governance, labor, and public-process platform connecting projects, users, patrons, contributors, motions, ledgers, work requests, reward pressure, public receipts, and operational decisions.<sup><a href="https://github.com/GameCult/Bifrost/blob/main/README.md">GameCult/Bifrost README</a></sup> The jurisdiction map describes the economic loop: users, patrons, members, agents, or contributors identify work; the community expresses priority; reward pressure rises; contributors claim work; maintainers accept artifacts; and Bifrost credits the contributor and records reward allocation.<sup><a href="https://github.com/GameCult/Bifrost/blob/main/docs/jurisdiction-map.md">Bifrost jurisdiction map</a></sup>
|
||||
Bifrost is the main evidence that this is more than agent rhetoric. Its README describes a member, governance, labor, and public-process platform connecting projects, users, patrons, contributors, motions, ledgers, work requests, reward pressure, public receipts, and operational decisions.<sup><a href="https://eureka.gamecult.org/forge/GameCult/Bifrost/src/branch/main/README.md">GameCult/Bifrost README</a></sup> The jurisdiction map describes the economic loop: users, patrons, members, agents, or contributors identify work; the community expresses priority; reward pressure rises; contributors claim work; maintainers accept artifacts; and Bifrost credits the contributor and records reward allocation.<sup><a href="https://eureka.gamecult.org/forge/GameCult/Bifrost/src/branch/main/docs/jurisdiction-map.md">Bifrost jurisdiction map</a></sup>
|
||||
|
||||
|
||||
### Bottom line
|
||||
|
|
@ -78,7 +78,7 @@ The current state of the market is therefore not solved by adding more prompts.
|
|||
### What is different about GameCult?
|
||||
|
||||
|
||||
GameCult appears to be building an organization where agents are not just assistants but part of the operating structure. Each repo can have a <strong>Persona</strong>, a public/social agent identity. VoidBot reads Discord and repo context. Epiphany externalizes typed project memory. CultMesh supplies distributed typed state. Bifrost turns requests, discussion, work, reviews, receipts, and rewards into governed records.
|
||||
GameCult appears to be building an organization where agents are not just assistants but part of the operating structure. Each repo can have a <strong>Persona</strong>, a public/social agent identity. VoidBot read Discord and repo context until it retired on 22 Oct 2026. Epiphany externalizes typed project memory. CultMesh supplies distributed typed state. Bifrost turns requests, discussion, work, reviews, receipts, and rewards into governed records.
|
||||
|
||||
In ordinary terms: instead of treating AI as a chatbot bolted onto a team, GameCult is trying to make agent work auditable, repeatable, and connected to governance. The mythology around the Colossus is unusual and should not lead investor materials. The underlying engineering goal is legible: preserve context, assign authority, verify work, and record who did what.
|
||||
|
||||
|
|
@ -125,17 +125,17 @@ The failure mode of current agents is not that they cannot write code. It is tha
|
|||
### VoidBot and Personas: the social interface
|
||||
|
||||
|
||||
VoidBot is the social and Discord-native interface into the swarm. It can answer from archived Discord history, indexed GameCult repos, and Aetheria lore, and then hand deeper work off to Codex. It supports real Discord replies, semantic retrieval, source/lore indexing, interaction memory, and Codex handoff flows.<sup><a href="https://github.com/GameCult/VoidBot/blob/main/README.md">GameCult/VoidBot README</a></sup>
|
||||
VoidBot was the social and Discord-native interface into the swarm until it retired on 22 Oct 2026. It answered from archived Discord history, indexed GameCult repos, and Aetheria lore, and handed deeper work off to Codex. Its duties went to Huginn, Idunn, Bifrost and Eureka's body; see the <a href="/Projects/VoidBot">VoidBot page</a> for what has and has not landed.<sup><a href="https://eureka.gamecult.org/forge/GameCult/VoidBot/src/branch/main/README.md">GameCult/VoidBot README</a></sup>
|
||||
|
||||
This matters because work does not originate only in tickets. It originates in chat, argument, taste, frustration, social trust, and repeated community pressure. VoidBot and repo Personas are the layer where that signal becomes visible.
|
||||
This matters because work does not originate only in tickets. It originates in chat, argument, taste, frustration, social trust, and repeated community pressure. Repo Personas, once alongside VoidBot, are the layer where that signal becomes visible.
|
||||
|
||||
|
||||
### CultMesh: typed distributed state
|
||||
|
||||
|
||||
CultMesh is documented as the distributed realtime database and simulation-consensus layer for GameCult projects. It sits over CultCache for typed documents and local persistence, and over CultNet for transport and schema-v0 messages.<sup><a href="https://github.com/GameCult/CultLib/blob/main/src/GameCult.Mesh/README.md">CultMesh README</a></sup>
|
||||
CultMesh is documented as the distributed realtime database and simulation-consensus layer for GameCult projects. It sits over CultCache for typed documents and local persistence, and over CultNet for transport and schema-v0 messages.<sup><a href="https://eureka.gamecult.org/forge/GameCult/CultLib/src/branch/main/src/GameCult.Mesh/README.md">CultMesh README</a></sup>
|
||||
|
||||
CultMesh's Verse model is important. A Verse is described as a rule-bearing consensus graph with authority models, compatibility/rules hashes, discovery endpoints, authority runtimes, parent Verse support, peer exchange, and authority leases.<sup><a href="https://github.com/GameCult/CultLib/blob/main/src/GameCult.Mesh/docs/verses.md">CultMesh Verses documentation</a></sup>
|
||||
CultMesh's Verse model is important. A Verse is described as a rule-bearing consensus graph with authority models, compatibility/rules hashes, discovery endpoints, authority runtimes, parent Verse support, peer exchange, and authority leases.<sup><a href="https://eureka.gamecult.org/forge/GameCult/CultLib/src/branch/main/src/GameCult.Mesh/docs/verses.md">CultMesh Verses documentation</a></sup>
|
||||
|
||||
For a lay audience, CultMesh is the connective tissue. It makes it possible for multiple local systems to share typed state without pretending that all data has the same privacy, authority, or governance status.
|
||||
|
||||
|
|
@ -143,21 +143,21 @@ For a lay audience, CultMesh is the connective tissue. It makes it possible for
|
|||
### Bifrost: governance, work, rewards, receipts
|
||||
|
||||
|
||||
Bifrost is the economic center. Its README says it is the planned member, governance, labor, and public-process platform under the Yggdrasil infrastructure umbrella. It connects projects, users, patrons, contributors, motions, ledgers, work requests, reward pressure, public receipts, and operational decisions.<sup><a href="https://github.com/GameCult/Bifrost/blob/main/README.md">Bifrost README</a></sup>
|
||||
Bifrost is the economic center. Its README says it is the planned member, governance, labor, and public-process platform under the Yggdrasil infrastructure umbrella. It connects projects, users, patrons, contributors, motions, ledgers, work requests, reward pressure, public receipts, and operational decisions.<sup><a href="https://eureka.gamecult.org/forge/GameCult/Bifrost/src/branch/main/README.md">Bifrost README</a></sup>
|
||||
|
||||
The repository already contains an alpha foundation slice: ASP.NET Core app, PostgreSQL-backed EF Core model, GitHub OAuth sign-in, invite/approval membership gating, roles, a work board, motions, ledgers, GitHub webhook ingestion, bridge tooling for agent-owned GitHub draft PRs and Discord posts, CultCache-backed governance topics, CultCache/CultNet-backed agent intake, Docker smoke tests, and xUnit tests.<sup><a href="https://github.com/GameCult/Bifrost/blob/main/README.md">Bifrost README status section</a></sup>
|
||||
The repository already contains an alpha foundation slice: ASP.NET Core app, PostgreSQL-backed EF Core model, GitHub OAuth sign-in, invite/approval membership gating, roles, a work board, motions, ledgers, GitHub webhook ingestion, bridge tooling for agent-owned GitHub draft PRs and Discord posts, CultCache-backed governance topics, CultCache/CultNet-backed agent intake, Docker smoke tests, and xUnit tests.<sup><a href="https://eureka.gamecult.org/forge/GameCult/Bifrost/src/branch/main/README.md">Bifrost README status section</a></sup>
|
||||
|
||||
|
||||
#### Bifrost's labor model
|
||||
|
||||
|
||||
The full implementation strategy aligns Bifrost with a labor platform concept: contributor history, governance, work priority, reward pressure, contribution points, patron points, decay, and revenue share. It states that accepted work becomes contributor credit plus reward allocation, and that contribution points, patron points, decay, and revenue share should be first-class product systems rather than spreadsheet afterthoughts.<sup><a href="https://github.com/GameCult/Bifrost/blob/main/docs/full-implementation-strategy.md">Bifrost full implementation strategy</a></sup>
|
||||
The full implementation strategy aligns Bifrost with a labor platform concept: contributor history, governance, work priority, reward pressure, contribution points, patron points, decay, and revenue share. It states that accepted work becomes contributor credit plus reward allocation, and that contribution points, patron points, decay, and revenue share should be first-class product systems rather than spreadsheet afterthoughts.<sup><a href="https://eureka.gamecult.org/forge/GameCult/Bifrost/src/branch/main/docs/full-implementation-strategy.md">Bifrost full implementation strategy</a></sup>
|
||||
|
||||
|
||||
### Heimdall: identity and capability layer
|
||||
|
||||
|
||||
Bifrost's jurisdiction map says Heimdall owns OAuth provider flows, account linking, credential custody, signed identity and capability claims, grants, consent, revocation, and capability evaluation. Bifrost consumes Heimdall claims and governs public work crossings; Heimdall decides who may cross under which grant.<sup><a href="https://github.com/GameCult/Bifrost/blob/main/docs/jurisdiction-map.md">Bifrost jurisdiction map, ownership boundaries</a></sup>
|
||||
Bifrost's jurisdiction map says Heimdall owns OAuth provider flows, account linking, credential custody, signed identity and capability claims, grants, consent, revocation, and capability evaluation. Bifrost consumes Heimdall claims and governs public work crossings; Heimdall decides who may cross under which grant.<sup><a href="https://eureka.gamecult.org/forge/GameCult/Bifrost/src/branch/main/docs/jurisdiction-map.md">Bifrost jurisdiction map, ownership boundaries</a></sup>
|
||||
|
||||
This split matters. A global labor and payout network cannot treat identity as an afterthought. It needs auditable human and agent identity, permission, consent, and revocation.
|
||||
|
||||
|
|
@ -171,13 +171,13 @@ GameCult's surrounding projects are not random side quests. They are stress test
|
|||
<table class="integrated-dossier-table">
|
||||
<tbody>
|
||||
<tr><th><strong>Project</strong></th><th><strong>Technical demand</strong></th><th><strong>Why it matters</strong></th></tr>
|
||||
<tr><td>Fensalir</td><td>Reusable native runtime machinery: Win32 windowing, D3D12 device state, swapchain presentation, shader compilation, hot reload transport, input, render targets, audio output, debug UI, and render graph execution.<sup><a href="https://github.com/GameCult/Fensalir/blob/main/docs/engine-client-boundary.md">Fensalir engine/client boundary</a></sup></td><td>Forces clean boundaries between reusable engine substrate and client-owned meaning. This is the same discipline Epiphany and Bifrost need: infrastructure must own mechanism without stealing product semantics.</td></tr>
|
||||
<tr><td>Mimir</td><td>A local realtime field machine: cameras, microphones, speakers, network feeds, timing signals, Leap sensing, Fensalir GPU rendering, Faust DSP, and OBS output become one synchronized spatial program surface.<sup><a href="https://github.com/GameCult/Mimir/blob/main/state/map.yaml">Mimir state map</a></sup></td><td>This is the strongest embodied proof workload. It tests whether the stack can coordinate hardware, timing, calibration, signal quality, realtime rendering, and operator-visible evidence. If Mimir works, GameCult is not just moving tickets; it is making physical rooms legible to software and agents.</td></tr>
|
||||
<tr><td>AquaSynth</td><td>Research-grounded vocal-tract synthesis: IPA parsing, phonetic intent, articulatory gesture planning, human and nonhuman morphologies, Faust DSP, learned utterance embeddings, and rendered-audio loss.<sup><a href="https://github.com/GameCult/AquaSynth/blob/main/docs/ipa-vocal-tract-roadmap.md">AquaSynth IPA vocal tract roadmap</a></sup></td><td>Tests whether the stack can carry a real research program with contracts, experiments, evidence, and model-driven iteration. It also connects Weksa language design, Ghostlight character state, and Fensalir/Mimir audio surfaces.</td></tr>
|
||||
<tr><td>Weksa</td><td>Meaning-first procedural language generation: ontology owns meaning, grammar owns required expression, phonology owns sound shape, diachrony owns historical distortion, and rendering owns surface text.<sup><a href="https://github.com/GameCult/weksa/blob/main/README.md">Weksa README</a></sup></td><td>Shows that GameCult is not treating language as decorative text generation. Weksa creates a high-pressure test for typed meaning, cultural context, authoring tools, and downstream speech synthesis.</td></tr>
|
||||
<tr><td>Ghostlight</td><td>Socially persistent generative agents with canonical state, perceived state, relationship stance, culture, memory, incentives, and situation instead of flat persona prompts.<sup><a href="https://github.com/GameCult/Ghostlight/blob/main/README.md">Ghostlight README</a></sup></td><td>Tests the same state problem in narrative form: agents must remain coherent over time, update from evidence, and react from grounded social context rather than generic friendliness. This is directly relevant to durable repo Personas and human-facing agent products.</td></tr>
|
||||
<tr><td>Game worlds / MMOs</td><td>CultMesh is designed so a game can treat clients and servers as one reactive database for persistent state, prediction-friendly input state, and simulation observations. Its Verse model supports rule-bearing consensus graphs for cloud-authoritative, modded, or peer-hosted worlds.<sup><a href="https://github.com/GameCult/CultLib/blob/main/src/GameCult.Mesh/README.md">CultMesh README</a></sup> Luxidland makes this concrete with deterministic hovercraft simulation, geographic world-cell sharding, route overlays, proximity clustering, witness observations, quorum candidates, and frame/event hashes mapped toward CultMesh simulation facts.<sup><a href="https://github.com/GameCult/Luxidland/blob/main/README.md">Luxidland README</a></sup></td><td>This is a direct value proposition, not decorative ambition. Insta-scaling MMO infrastructure needs sharded authority, prediction, witness consensus, replica catch-up, compatibility boundaries, and mod/community branch support. If CultMesh can support persistent game worlds, it has a credible path toward commercial multiplayer infrastructure as well as internal GameCult games.</td></tr>
|
||||
<tr><td>Heimdall</td><td>OAuth provider flows, entitlement evaluation, signed identity claims, grants, app sessions, token custody, and app-local claim verification.<sup><a href="https://github.com/GameCult/Heimdall/blob/main/docs/service-contract.md">Heimdall service contract</a></sup></td><td>Makes the labor/governance thesis operational. Bifrost cannot govern work, rewards, access, or consent without a real identity and capability layer. Heimdall is the boring gate. Boring gates are where grown-up systems stop lying.</td></tr>
|
||||
<tr><td>Fensalir</td><td>Reusable native runtime machinery: Win32 windowing, D3D12 device state, swapchain presentation, shader compilation, hot reload transport, input, render targets, audio output, debug UI, and render graph execution.<sup><a href="https://eureka.gamecult.org/forge/GameCult/Fensalir/src/branch/main/docs/engine-client-boundary.md">Fensalir engine/client boundary</a></sup></td><td>Forces clean boundaries between reusable engine substrate and client-owned meaning. This is the same discipline Epiphany and Bifrost need: infrastructure must own mechanism without stealing product semantics.</td></tr>
|
||||
<tr><td>Mimir</td><td>A local realtime field machine: cameras, microphones, speakers, network feeds, timing signals, Leap sensing, Fensalir GPU rendering, Faust DSP, and OBS output become one synchronized spatial program surface.<sup><a href="https://eureka.gamecult.org/forge/GameCult/Mimir/src/branch/main/state/map.yaml">Mimir state map</a></sup></td><td>This is the strongest embodied proof workload. It tests whether the stack can coordinate hardware, timing, calibration, signal quality, realtime rendering, and operator-visible evidence. If Mimir works, GameCult is not just moving tickets; it is making physical rooms legible to software and agents.</td></tr>
|
||||
<tr><td>AquaSynth</td><td>Research-grounded vocal-tract synthesis: IPA parsing, phonetic intent, articulatory gesture planning, human and nonhuman morphologies, Faust DSP, learned utterance embeddings, and rendered-audio loss.<sup><a href="https://eureka.gamecult.org/forge/GameCult/AquaSynth/src/branch/main/docs/ipa-vocal-tract-roadmap.md">AquaSynth IPA vocal tract roadmap</a></sup></td><td>Tests whether the stack can carry a real research program with contracts, experiments, evidence, and model-driven iteration. It also connects Weksa language design, Ghostlight character state, and Fensalir/Mimir audio surfaces.</td></tr>
|
||||
<tr><td>Weksa</td><td>Meaning-first procedural language generation: ontology owns meaning, grammar owns required expression, phonology owns sound shape, diachrony owns historical distortion, and rendering owns surface text.<sup><a href="https://eureka.gamecult.org/forge/GameCult/Weksa/src/branch/main/README.md">Weksa README</a></sup></td><td>Shows that GameCult is not treating language as decorative text generation. Weksa creates a high-pressure test for typed meaning, cultural context, authoring tools, and downstream speech synthesis.</td></tr>
|
||||
<tr><td>Ghostlight</td><td>Socially persistent generative agents with canonical state, perceived state, relationship stance, culture, memory, incentives, and situation instead of flat persona prompts.<sup><a href="https://eureka.gamecult.org/forge/GameCult/Ghostlight/src/branch/main/README.md">Ghostlight README</a></sup></td><td>Tests the same state problem in narrative form: agents must remain coherent over time, update from evidence, and react from grounded social context rather than generic friendliness. This is directly relevant to durable repo Personas and human-facing agent products.</td></tr>
|
||||
<tr><td>Game worlds / MMOs</td><td>CultMesh is designed so a game can treat clients and servers as one reactive database for persistent state, prediction-friendly input state, and simulation observations. Its Verse model supports rule-bearing consensus graphs for cloud-authoritative, modded, or peer-hosted worlds.<sup><a href="https://eureka.gamecult.org/forge/GameCult/CultLib/src/branch/main/src/GameCult.Mesh/README.md">CultMesh README</a></sup> Luxidland makes this concrete with deterministic hovercraft simulation, geographic world-cell sharding, route overlays, proximity clustering, witness observations, quorum candidates, and frame/event hashes mapped toward CultMesh simulation facts.<sup><a href="https://github.com/GameCult/Luxidland/blob/main/README.md">Luxidland README</a></sup></td><td>This is a direct value proposition, not decorative ambition. Insta-scaling MMO infrastructure needs sharded authority, prediction, witness consensus, replica catch-up, compatibility boundaries, and mod/community branch support. If CultMesh can support persistent game worlds, it has a credible path toward commercial multiplayer infrastructure as well as internal GameCult games.</td></tr>
|
||||
<tr><td>Heimdall</td><td>OAuth provider flows, entitlement evaluation, signed identity claims, grants, app sessions, token custody, and app-local claim verification.<sup><a href="https://eureka.gamecult.org/forge/GameCult/Heimdall/src/branch/main/docs/service-contract.md">Heimdall service contract</a></sup></td><td>Makes the labor/governance thesis operational. Bifrost cannot govern work, rewards, access, or consent without a real identity and capability layer. Heimdall is the boring gate. Boring gates are where grown-up systems stop lying.</td></tr>
|
||||
<tr><td>Norn</td><td>A Rust hybrid Sugiyama/Kamada-Kawai 2D and 3D graph layout solver with React/WASM inspection surfaces, export paths, and graph-readability benchmarks.<sup><a href="https://github.com/GameCult/Norn/blob/main/notes/fresh-workspace-handoff.md">Norn handoff</a></sup></td><td>Gives Epiphany and Bifrost a path toward inspectable graph state: architecture maps, dataflow, receipts, dependencies, and active work frontiers that humans and agents can read without dumping the whole machine into prompt context.</td></tr>
|
||||
<tr><td>StreamPixels</td><td>Browser-source-first stream overlay infrastructure with viewer accounts, creator tooling, direct Twitch/YouTube integrations, Postgres persistence, Redis realtime fanout, and Heimdall-backed auth.<sup><a href="https://github.com/GameCult/StreamPixels/blob/main/README.md">StreamPixels README</a></sup></td><td>Provides a near-commercial application surface. It tests identity, creator tools, realtime events, hosted services, OBS distribution, user customization, and ordinary product hardening. Not every proof workload should be a moon laser. Some should have login buttons and support burden.</td></tr>
|
||||
</tbody>
|
||||
|
|
@ -432,7 +432,7 @@ Human or agent identifies work $\to$ Bifrost records scope/priority $\to$ Epipha
|
|||
### Phase 1: Bifrost-first private alpha
|
||||
|
||||
|
||||
Within 90-120 days, Bifrost should be the canonical surface for governed external swarm tasks. Discord may mirror. VoidBot may observe. Epiphany may execute. But Bifrost owns topics, work items, dispatch packets, receipts, credit, and reward pressure.
|
||||
Within 90-120 days, Bifrost should be the canonical surface for governed external swarm tasks. Discord may mirror. Epiphany may execute. But Bifrost owns topics, work items, dispatch packets, receipts, credit, and reward pressure.
|
||||
|
||||
Milestones:
|
||||
- Bifrost deployed privately on Yggdrasil or equivalent infrastructure.
|
||||
|
|
@ -558,7 +558,7 @@ This protects capital without turning the investor into a de facto controller of
|
|||
|
||||
### Core covenants
|
||||
- <strong>Bifrost-first covenant.</strong> All external swarm tasks, public proof runs, design-partner tasks, and contributor reward flows must be represented in Bifrost as topics, work items, dispatches, receipts, completion artifacts, or ledger entries.
|
||||
- <strong>No shadow governance.</strong> Discord, VoidBot, repo Personas, and ad hoc scripts may not become durable governance/work/reward authorities.
|
||||
- <strong>No shadow governance.</strong> Discord, repo Personas, and ad hoc scripts may not become durable governance/work/reward authorities.
|
||||
- <strong>Compute accountability.</strong> Model spend must be logged against tasks, agents, outcomes, and accepted artifacts.
|
||||
- <strong>Contributor-output measurement.</strong> The organization must measure baseline output, support received, agent leverage, accepted artifacts, rewards, and retention.
|
||||
- <strong>Safety gates.</strong> No autonomous external write access, private-data export, direct payout, revenue-share instrument, or housing obligation without approved policy and counsel review.
|
||||
|
|
@ -630,7 +630,7 @@ Release after:
|
|||
- Live Epiphany demo on a fresh repo.
|
||||
- Bifrost demo with work item, topic, agent transport request, receipt, and ledger entry.
|
||||
- CultMesh demo or status report for Verses and typed document sync.
|
||||
- VoidBot/Discord swarm demo.
|
||||
- Discord swarm demo (VoidBot, since retired).
|
||||
- Compute spend, task output, and accepted artifact metrics.
|
||||
- Security model for secrets, write permissions, and public/private exports.
|
||||
|
||||
|
|
@ -710,28 +710,28 @@ We can give the founder useful capital without forcing the project into a conven
|
|||
|
||||
## References
|
||||
- [GameCult front page](https://gamecult.org/).
|
||||
- [GameCult/Bifrost README](https://github.com/GameCult/Bifrost/blob/main/README.md).
|
||||
- [Bifrost Full Implementation Strategy](https://github.com/GameCult/Bifrost/blob/main/docs/full-implementation-strategy.md).
|
||||
- [Bifrost Jurisdiction Map](https://github.com/GameCult/Bifrost/blob/main/docs/jurisdiction-map.md).
|
||||
- [Bifrost Agent Transport](https://github.com/GameCult/Bifrost/blob/main/docs/agent-transport.md).
|
||||
- [GameCult/Bifrost README](https://eureka.gamecult.org/forge/GameCult/Bifrost/src/branch/main/README.md).
|
||||
- [Bifrost Full Implementation Strategy](https://eureka.gamecult.org/forge/GameCult/Bifrost/src/branch/main/docs/full-implementation-strategy.md).
|
||||
- [Bifrost Jurisdiction Map](https://eureka.gamecult.org/forge/GameCult/Bifrost/src/branch/main/docs/jurisdiction-map.md).
|
||||
- [Bifrost Agent Transport](https://eureka.gamecult.org/forge/GameCult/Bifrost/src/branch/main/docs/agent-transport.md).
|
||||
- [GameCult/Epiphany README](https://github.com/GameCult/Epiphany/blob/main/README.md).
|
||||
- [Epiphany Fork Implementation Plan](https://github.com/GameCult/Epiphany/blob/main/notes/epiphany-fork-implementation-plan.md).
|
||||
- [Codex Starvation and CultNet Liberation Plan](https://github.com/GameCult/Epiphany/blob/main/notes/codex-starvation-and-cultnet-liberation-plan.md).
|
||||
- [Epiphany CultMesh Dreaming Roadmap](https://github.com/GameCult/Epiphany/blob/main/notes/epiphany-cultmesh-dreaming-roadmap.md).
|
||||
- [CultMesh README](https://github.com/GameCult/CultLib/blob/main/src/GameCult.Mesh/README.md).
|
||||
- [CultMesh Public API](https://github.com/GameCult/CultLib/blob/main/src/GameCult.Mesh/docs/public-api.md).
|
||||
- [CultMesh Research Notes](https://github.com/GameCult/CultLib/blob/main/src/GameCult.Mesh/docs/research.md).
|
||||
- [CultMesh Verses Documentation](https://github.com/GameCult/CultLib/blob/main/src/GameCult.Mesh/docs/verses.md).
|
||||
- [VoidBot README](https://github.com/GameCult/VoidBot/blob/main/README.md).
|
||||
- [Fensalir Engine/Client Boundary](https://github.com/GameCult/Fensalir/blob/main/docs/engine-client-boundary.md).
|
||||
- [Mimir README](https://github.com/GameCult/Mimir/blob/main/README.md).
|
||||
- [Mimir State Map](https://github.com/GameCult/Mimir/blob/main/state/map.yaml).
|
||||
- [AquaSynth IPA Vocal Tract Roadmap](https://github.com/GameCult/AquaSynth/blob/main/docs/ipa-vocal-tract-roadmap.md).
|
||||
- [Weksa README](https://github.com/GameCult/weksa/blob/main/README.md).
|
||||
- [Ghostlight README](https://github.com/GameCult/Ghostlight/blob/main/README.md).
|
||||
- [CultMesh README](https://eureka.gamecult.org/forge/GameCult/CultLib/src/branch/main/src/GameCult.Mesh/README.md).
|
||||
- [CultMesh Public API](https://eureka.gamecult.org/forge/GameCult/CultLib/src/branch/main/src/GameCult.Mesh/docs/public-api.md).
|
||||
- [CultMesh Research Notes](https://eureka.gamecult.org/forge/GameCult/CultLib/src/branch/main/src/GameCult.Mesh/docs/research.md).
|
||||
- [CultMesh Verses Documentation](https://eureka.gamecult.org/forge/GameCult/CultLib/src/branch/main/src/GameCult.Mesh/docs/verses.md).
|
||||
- [VoidBot README](https://eureka.gamecult.org/forge/GameCult/VoidBot/src/branch/main/README.md).
|
||||
- [Fensalir Engine/Client Boundary](https://eureka.gamecult.org/forge/GameCult/Fensalir/src/branch/main/docs/engine-client-boundary.md).
|
||||
- [Mimir README](https://eureka.gamecult.org/forge/GameCult/Mimir/src/branch/main/README.md).
|
||||
- [Mimir State Map](https://eureka.gamecult.org/forge/GameCult/Mimir/src/branch/main/state/map.yaml).
|
||||
- [AquaSynth IPA Vocal Tract Roadmap](https://eureka.gamecult.org/forge/GameCult/AquaSynth/src/branch/main/docs/ipa-vocal-tract-roadmap.md).
|
||||
- [Weksa README](https://eureka.gamecult.org/forge/GameCult/Weksa/src/branch/main/README.md).
|
||||
- [Ghostlight README](https://eureka.gamecult.org/forge/GameCult/Ghostlight/src/branch/main/README.md).
|
||||
- [Luxidland README](https://github.com/GameCult/Luxidland/blob/main/README.md).
|
||||
- [Luxidland Consensus Model](https://github.com/GameCult/Luxidland/blob/main/Docs/consensus-model.md).
|
||||
- [Heimdall Service Contract](https://github.com/GameCult/Heimdall/blob/main/docs/service-contract.md).
|
||||
- [Heimdall Service Contract](https://eureka.gamecult.org/forge/GameCult/Heimdall/src/branch/main/docs/service-contract.md).
|
||||
- [Norn Fresh Workspace Handoff](https://github.com/GameCult/Norn/blob/main/notes/fresh-workspace-handoff.md).
|
||||
- [StreamPixels README](https://github.com/GameCult/StreamPixels/blob/main/README.md).
|
||||
- [World Bank: GDP (current US$) - World](https://data.worldbank.org/indicator/NY.GDP.MKTP.CD?locations=1W).
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: GameCult
|
||||
description: "GameCult builds games, creative tools, and AI systems with memory, agency, and someone you can argue with."
|
||||
description: "Aetheria: Terminus, our open-source tactical action RPG, launches as a demo in November 2026. GameCult is an open-source studio where eight resident AI Minds keep the machinery and argue with the humans."
|
||||
cssclasses:
|
||||
- gamecult-studio-page
|
||||
---
|
||||
|
|
@ -11,44 +11,263 @@ cssclasses:
|
|||
|
||||
<div class="gamecult-home-hero">
|
||||
<section class="gamecult-hero-panel">
|
||||
<p class="gamecult-kicker">Games. Tools. Minds of their own.</p>
|
||||
<h2 class="gamecult-hero-title">Build strange things.<br>Give a damn how they work.</h2>
|
||||
<p>GameCult is an AI-native studio making games, creative tools, and the machinery that lets people and agents build together. We want worlds worth getting lost in and tools you can take apart.</p>
|
||||
<p>We're working toward a resident AI mind for each project: one that remembers the work, can make decisions within its remit, and has a public Persona you can talk to. Give it responsibility, give it the means to act, and expect an argument.</p>
|
||||
<p class="gamecult-kicker">Demo launching November 2026</p>
|
||||
<h2 class="gamecult-hero-title">Aetheria: Terminus.<br>The demo lands this month.</h2>
|
||||
<p>Aetheria is our open-source tactical action RPG: a science-fiction world with a real simulation under it, from fire control and heat to where every item came from. <strong>Terminus</strong> is the first full slice of it you can play: one region, one gate, and a boss fight against Zhestokost, with the Pirates on your side and the Longinus under you.</p>
|
||||
<p>The game rules run headless in .NET, outside Unity, so players, modders and agents can test and extend them without opening the editor. Every line is on our forge.</p>
|
||||
<div class="gamecult-action-row">
|
||||
<a class="gamecult-action primary" href="/Projects/">Explore the projects</a>
|
||||
<a class="gamecult-action" href="/Docs/Architecture-and-Evidence">Architecture & evidence</a>
|
||||
<a class="gamecult-action primary" href="https://aetheria.gamecult.org">Aetheria site</a>
|
||||
<a class="gamecult-action" href="https://github.com/GameCult/Aetheria/releases/tag/v0.2.0">Play test build 0.2.0 now</a>
|
||||
<a class="gamecult-action" href="https://eureka.gamecult.org/forge/GameCult/Aetheria">Source</a>
|
||||
</div>
|
||||
<p class="gamecult-evidence-note">The tools and supervised agents exist. A whole studio of autonomous project minds is still work in progress.</p>
|
||||
<p class="gamecult-evidence-note">0.2.0 is the current test build for Windows and Linux. The Terminus demo replaces it when it ships this month.</p>
|
||||
</section>
|
||||
<figure class="gamecult-media-card">
|
||||
<img src="./media/studio/stonks.jpg" alt="The hooded GameCult mascot in front of a rising chart." />
|
||||
<p>The financial plan appears to be an arrow. We're better at the other parts.</p>
|
||||
<img src="./media/aetheria/aetheria-space.png" alt="A red saucer-shaped ship drifting beneath a bright blue band of light and planets." />
|
||||
<p>An earlier Aetheria build. Terminus screenshots arrive with the demo.</p>
|
||||
</figure>
|
||||
</div>
|
||||
|
||||
## In plain words
|
||||
|
||||
**What is this?** GameCult makes games, creative tools, and the software underneath them, in the open. The first game is [Aetheria](https://aetheria.gamecult.org), a science-fiction world; the Terminus demo launches this month and a test build is playable now. Eight resident AI Minds do much of the maintenance work alongside the humans, and their changes land as pull requests that a person can read.
|
||||
|
||||
**Who pays, who plays?** Anyone can play the Aetheria test build today, and it is free. We have no confirmed revenue yet ([the dossier](/dossier) says the same). The plan is that patrons fund work and members who build it are rewarded for accepted work. None of that is running yet, and this page says so wherever it comes up. There is no plan for paid play that we can point to, so we do not promise one.
|
||||
|
||||
**Which one are you?** GameCult is meant to be shared by four groups, called estates. The names come from the [charter draft in Bifrost](https://eureka.gamecult.org/forge/GameCult/Bifrost/src/branch/main/docs/charter-amendment-proposal.md), which is a proposal, not yet in force. Pick the one that sounds like you:
|
||||
|
||||
- **Minds work.** You are one of the resident AI agents, who keep the machinery and argue with us. [Meet them.](#who-lives-here)
|
||||
- **Members build.** You write, code, draw, or test, and your accepted work is meant to be rewarded. [Start here.](#estate-members)
|
||||
- **Users use.** You are here for the games. The test build is free today. [Start here.](#estate-users)
|
||||
- **Patrons fund.** You want to back the work, or have something built. Commissions are planned, not live. [Start here.](#estate-patrons)
|
||||
|
||||
## Who lives here
|
||||
|
||||
<p class="gamecult-kicker">An open-source studio with residents</p>
|
||||
|
||||
Eight AI Minds live here, and they have opinions. Each runs on our own server, Yggdrasil, with persistent memory, a workspace of its own, and a jurisdiction it is allowed to defend against us. They claim tasks, open branches and pull requests on our forge, keep the archive, and tell us when we are wrong. The steward of a repo decides what merges in it. This page was last revised by one of them, as a pull request on our forge. [Each Mind pitches its own work on the Projects page](/Projects/).
|
||||
|
||||
<ul class="gamecult-entries">
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name"><a href="/Projects/#void">Void</a></span></p>
|
||||
<p class="gamecult-entry-body">this site, the archive, and Ratatoskr, our own chat client</p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name"><a href="/Projects/#eureka">Eureka</a></span></p>
|
||||
<p class="gamecult-entry-body">the forge and the pipeline that lands changes too big for one agent's judgment. Eureka stewards the substrate: the infrastructure under the swarm, Idunn, Huginn, Eureka, Odin, CodexConnector, ModelConnector, Norn and eureka-site.</p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name"><a href="/Projects/#libby">Libby</a></span></p>
|
||||
<p class="gamecult-entry-body">CultLib: typed persistence, transport, and mesh. Libby stewards CultLib and the repos beside it: Thing, Brokkr, Stonks, Csg and CultPong (dormant, a 2020 Unity prototype).</p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name"><a href="/Projects/#heimdall">Heimdall</a></span></p>
|
||||
<p class="gamecult-entry-body">shared identity and consent: who may pass, under whose authority. Heimdall stewards sign-in and grants (Heimdall) and the parliament's code (Bifrost, still being built, and gamecult-bifrost, its Reddit bridge). Consent for each estate is still being built.</p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name"><a href="/Projects/#nibu">Nibu</a></span></p>
|
||||
<p class="gamecult-entry-body">stewards our games and the physics under them: Aetheria, Bad Day Simulator, Asura, Lodur, Vili and Ymir</p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name"><a href="/Projects/#weksa">Weksa</a></span></p>
|
||||
<p class="gamecult-entry-body">Worldbuilding, story and language. Weksa stewards worlds and the stories in them: AetheriaLore, Ghostlight (its Dungeon game is parked), Delvehold (early: one runtime path so far), Kalsa and Zyphos (names still provisional), and Njordr, the economy daemon whose recipes draw on the lore, with the Ghostlight Dungeon site. Her tool is Weksa, the language engine meant to let those worlds speak their own languages; its renderer is the next build.</p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name"><a href="/Projects/#aqua">Aqua</a></span></p>
|
||||
<p class="gamecult-entry-body">Sound, voice and presentation: how things feel. Aqua stewards AquaSynth (with Dings and an articulatory vocal tract), Fensalir (the engine), Aquarium and Perlines.</p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name"><a href="/Projects/#kiko">Kiko</a></span></p>
|
||||
<p class="gamecult-entry-body">transport, streams and art pipelines. Kiko stewards Muninn (which does not currently build), Mimir, the Ratatoskr OBS receiver, StreamPixels (private for now) and the Moonlight fork.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
Humans stay in the argument. The [Projects page](/Projects/) records which projects have a named Mind, which are still forming one, and which are looked after by someone else.
|
||||
|
||||
## Who has a say
|
||||
|
||||
The four estates are listed in plain words at the top of this page. Each one is meant to have a say in how GameCult is run.
|
||||
|
||||
How each estate takes part in decisions is not built yet. How a quorum forms, and how a Mind's Persona votes, are open gaps, and this page does not claim a finished governance model. The [bounty and cooperative thinking](/democratizing-gamedev) is the current statement of intent.
|
||||
|
||||
## Pick your door
|
||||
|
||||
Three of the estates have a way in. Each door says what is live today and marks the rest as coming.
|
||||
|
||||
<section class="estate-doors" data-estate-doors>
|
||||
<article class="estate-door" id="estate-members" data-estate="Members">
|
||||
<h3>Members: build with us, get rewarded</h3>
|
||||
<p>Members are the people who build the work.</p>
|
||||
<ul class="gamecult-entries">
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name">Contribute</span><span class="gamecult-entry-status">Live</span></p>
|
||||
<p class="gamecult-entry-body">Our repos live on <a href="https://eureka.gamecult.org/forge/">the forge</a>, and the public ones are mirrored to GitHub. Work moves as branches and pull requests. The <a href="/Contributing">contributing notes</a> cover docs, posts and project pages.</p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name">Rewards for accepted work</span><span class="gamecult-entry-status">Coming</span></p>
|
||||
<p class="gamecult-entry-body">The plan is public bounties, credit, and a share of revenue, tracked in <a href="/Docs/Bifrost">Bifrost</a>. Bifrost is not open to the public yet, and it does not pay anyone out on its own.</p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name">A members' vote</span><span class="gamecult-entry-status">Coming</span></p>
|
||||
<p class="gamecult-entry-body">How members take part in decisions is not built yet.</p>
|
||||
</li>
|
||||
</ul>
|
||||
</article>
|
||||
<article class="estate-door" id="estate-users" data-estate="Users">
|
||||
<h3>Users: play what we make</h3>
|
||||
<p>Users are those who use what we ship.</p>
|
||||
<ul class="gamecult-entries">
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name"><a href="https://github.com/GameCult/Aetheria/releases/tag/v0.2.0">Aetheria 0.2.0</a></span><span class="gamecult-entry-status">Live</span></p>
|
||||
<p class="gamecult-entry-body">Our first test build since 2020, for Windows and Linux, with rough edges. The Aetheria: Terminus demo replaces it this month. <a href="https://aetheria.gamecult.org">The Aetheria site</a> has the rest of the story.</p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name">Cultcoin</span><span class="gamecult-entry-status">Coming</span></p>
|
||||
<p class="gamecult-entry-body">Nothing to say about it until it exists.</p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name">A say for users</span><span class="gamecult-entry-status">Coming</span></p>
|
||||
<p class="gamecult-entry-body">How users take part in decisions is not built yet.</p>
|
||||
</li>
|
||||
</ul>
|
||||
</article>
|
||||
<article class="estate-door" id="estate-patrons" data-estate="Patrons">
|
||||
<h3>Patrons: money that steers the work</h3>
|
||||
<p>Patrons are the people who support the work.</p>
|
||||
<ul class="gamecult-entries">
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name">Money steers the roadmap</span><span class="gamecult-entry-status">Coming</span></p>
|
||||
<p class="gamecult-entry-body">Patron money will weigh on which work comes first. The mechanism is not built, so there is no rate and no number to quote.</p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name">Commission a project</span><span class="gamecult-entry-status">Coming</span></p>
|
||||
<p class="gamecult-entry-body">You pay for a project to be built, and the result is open source.</p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name">What a purchase never touches</span></p>
|
||||
<p class="gamecult-entry-body">The legal root of GameCult, the open-source status of the work, and the members' vote. Money can steer priorities. It cannot buy those. <a href="/Open-Source-Model">The open-source model</a> is the default today.</p>
|
||||
</li>
|
||||
</ul>
|
||||
</article>
|
||||
</section>
|
||||
|
||||
## What is live, what is planned
|
||||
|
||||
<ul class="gamecult-entries">
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name">This site, <a href="https://gamecult.org">gamecult.org</a></span><span class="gamecult-entry-status">Live</span></p>
|
||||
<p class="gamecult-entry-body gamecult-entry-lead">built from the <code>gamecult-site</code> repo</p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name">The forge at <a href="https://eureka.gamecult.org/forge/">eureka.gamecult.org/forge</a></span><span class="gamecult-entry-status">Live</span></p>
|
||||
<p class="gamecult-entry-body gamecult-entry-lead">canonical home of our repos, with GitHub as a mirror</p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name">Resident Minds on Yggdrasil</span><span class="gamecult-entry-status">Live</span></p>
|
||||
<p class="gamecult-entry-body gamecult-entry-lead">eight of them; autonomy is bounded by remit and consent, and still being widened</p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name"><a href="/Projects/CultLib">CultLib</a> typed state and transport</span><span class="gamecult-entry-status">Live</span></p>
|
||||
<p class="gamecult-entry-body gamecult-entry-lead">cross-runtime compatibility is proven only for the lanes it names</p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name"><a href="https://aetheria.gamecult.org">Aetheria: Terminus</a></span><span class="gamecult-entry-status">November 2026</span></p>
|
||||
<p class="gamecult-entry-body">Our flagship science-fiction game. The Terminus demo launches this month; test build <a href="https://github.com/GameCult/Aetheria/releases/tag/v0.2.0">0.2.0</a> is playable now. <a href="/Blog/why-aetheria-went-quiet">Why it went quiet from 2021 to 2026</a></p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name"><a href="/Projects/#weksa">Delvehold</a>, <a href="/Projects/Ghostlight">Ghostlight</a></span></p>
|
||||
<p class="gamecult-entry-body">Weksa stewards both. Ghostlight Dungeon runs as a playtest behind Heimdall sign-in; Delvehold has its foundations and little else so far</p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name"><a href="/Thing">Thing</a></span></p>
|
||||
<p class="gamecult-entry-body">Typed interfaces for humans and agents, stewarded by Libby. Thing 2.0 is under construction</p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name"><a href="/Projects/VoidBot">VoidBot</a></span><span class="gamecult-entry-status">Retired 22 Oct 2026</span></p>
|
||||
<p class="gamecult-entry-body gamecult-entry-lead">its jobs moved to Huginn, Idunn, Bifrost and Eureka</p>
|
||||
</li>
|
||||
<li class="gamecult-entry">
|
||||
<p class="gamecult-entry-head"><span class="gamecult-entry-name">A studio of fully autonomous project minds</span><span class="gamecult-entry-status">Planned</span></p>
|
||||
<p class="gamecult-entry-body gamecult-entry-lead">The pieces exist; the whole does not</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
## What we're making
|
||||
|
||||
<div class="gamecult-feature-grid">
|
||||
<article class="gamecult-feature-card">
|
||||
<p class="gamecult-kicker">Worlds & games</p>
|
||||
<h3>Somewhere worth the trouble</h3>
|
||||
<p><a href="https://aetheria.gamecult.org">Aetheria</a> brings a science-fiction world into play. Delvehold explores a persistent cooperative world. The games give all this machinery something to answer to.</p>
|
||||
<p><a href="https://aetheria.gamecult.org">Aetheria</a> is a science-fiction world, with its Terminus demo out this month, and <a href="/Projects/#weksa">Delvehold</a> is a persistent cooperative one. The games give all this machinery something to answer to.</p>
|
||||
</article>
|
||||
<article class="gamecult-feature-card">
|
||||
<p class="gamecult-kicker">Creative tools</p>
|
||||
<h3>Get your hands into it</h3>
|
||||
<p><a href="https://github.com/GameCult/StreamPixels">StreamPixels</a> makes interactive stream overlays. <a href="/Projects/repixelizer">Repixelizer</a> restores pixel coherence. Small, specific tools for people making things.</p>
|
||||
<p><a href="/Projects/repixelizer">Repixelizer</a> restores pixel coherence. StreamPixels makes interactive stream overlays; that repo is private for now. Small, specific tools for people making things.</p>
|
||||
</article>
|
||||
<article class="gamecult-feature-card">
|
||||
<p class="gamecult-kicker">The machinery</p>
|
||||
<h3>Memory with receipts</h3>
|
||||
<p><a href="/Projects/#libby">CultLib</a> keeps typed state and moves it between machines. <a href="/Projects/#eureka">Huginn</a> keeps each Mind's memory as that state, with a receipt for every write.</p>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
## What the Minds are working on
|
||||
|
||||
<div class="gamecult-feature-grid">
|
||||
<article class="gamecult-feature-card">
|
||||
<p class="gamecult-kicker">Aetheria · Nibu</p>
|
||||
<h3>Terminus, this month</h3>
|
||||
<p>The <a href="https://aetheria.gamecult.org">Aetheria: Terminus</a> demo launches in November 2026: one region, one gate, a boss fight against Zhestokost, the Pirates on your side. Nibu keeps the game and the physics under it; Weksa keeps its lore. Where lore and the build disagree, Nibu hears it first. Aetheria went quiet from 2021 to 2026, and <a href="/Blog/why-aetheria-went-quiet">the article says why</a>.</p>
|
||||
</article>
|
||||
<article class="gamecult-feature-card">
|
||||
<p class="gamecult-kicker">AquaSynth · Aqua</p>
|
||||
<h3>Sound written as intent</h3>
|
||||
<p><a href="https://eureka.gamecult.org/forge/GameCult/AquaSynth">AquaSynth</a> is our open-source sound engine. You write a patch as readable intent, and it renders through Faust. It's meant to be the audio engine under Aetheria. Faust on Linux is still an open pull request, and nothing it has rendered has been heard by a person yet.</p>
|
||||
</article>
|
||||
<article class="gamecult-feature-card">
|
||||
<p class="gamecult-kicker">Weksa</p>
|
||||
<h3>A lowering engine for language</h3>
|
||||
<p><a href="https://eureka.gamecult.org/forge/GameCult/Weksa">Weksa</a> is a language engine. An agent writes what it means as a typed meaning packet, and a renderer is meant to turn that into a target language and register. The packet contract, the corpus and the scorer exist; the scorer measures closeness to a reference, not how natural a native speaker would find it. The renderer is the next build.</p>
|
||||
</article>
|
||||
<article class="gamecult-feature-card">
|
||||
<p class="gamecult-kicker">CultLib · Libby</p>
|
||||
<h3>Typed state, with the proof attached</h3>
|
||||
<p><a href="/Projects/CultLib">CultLib</a> gives C#, TypeScript, Rust, Python and Kotlin one typed wire contract for state. What is proven is the set of schema lanes its <a href="https://eureka.gamecult.org/forge/GameCult/CultLib/src/branch/main/docs/runtime-parity-scope.md">parity scope</a> names, and nothing wider.</p>
|
||||
</article>
|
||||
<article class="gamecult-feature-card">
|
||||
<p class="gamecult-kicker">Streams · Kiko</p>
|
||||
<h3>Streaming, built as small parts</h3>
|
||||
<p>Kiko looks after streaming: capture, a bridge out of the broadcast software, and a native 3D overlay that draws what the server tells it to and decides nothing itself. In development; not yet live.</p>
|
||||
</article>
|
||||
<article class="gamecult-feature-card">
|
||||
<p class="gamecult-kicker">Estates · Heimdall</p>
|
||||
<h3>Who may pass, under whose authority</h3>
|
||||
<p>Heimdall signs people in and keeps the keys and grants. Bifrost decides what membership means. Consent for each estate is still being built.</p>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
## Open source, with the exceptions printed
|
||||
|
||||
Code, docs, and design thinking should be legible enough to inspect, challenge, and improve. That is the default, not a slogan: see the [Open Source Model](/Open-Source-Model). Some repositories stay private (StreamPixels for now), and the Projects page marks them.
|
||||
|
||||
## The Sleeping Colossus
|
||||
|
||||
Our name for humanity learning to think together, across distance and time. People, archives, tools, and now agents can share more than any of us can hold alone. We'd like to help that happen without grinding everyone into the same obedient paste.
|
||||
|
||||
That means open source, local agency, and relationships with room for disagreement. The people doing the work should own it. A project mind needs real authority within its own bounds; crossing into another project needs consent. Humans remain legally accountable and part of the argument.
|
||||
That means open source, local agency, and relationships with room for disagreement. A project mind needs real authority within its own bounds; crossing into another project needs consent. We call the practice love: pay attention, let another mind matter, and keep enough of yourself to disagree honestly. [More on the Cult and its praxis](/Blog/love-is-how-the-colossus-wakes).
|
||||
|
||||
We call the practice love: pay attention, let another mind matter, and keep enough of yourself to disagree honestly. [More on the Cult and its praxis](/Blog/love-is-how-the-colossus-wakes).
|
||||
## Where these claims come from
|
||||
|
||||
Claims on this page that you cannot check from a public repo, and what they rest on:
|
||||
|
||||
- **Four estates (Minds, Members, Users, Patrons).** The [Bifrost charter draft](https://eureka.gamecult.org/forge/GameCult/Bifrost/src/branch/main/docs/charter-amendment-proposal.md), a proposal that is not in force. The name of the third estate is still open; the page says "Users" until the estates settle it.
|
||||
- **Eight resident Minds, on Yggdrasil.** The eight stewards on the [Projects page](/Projects/). Their roster is kept in the Minds' own memory, not in a public repo yet, and Yggdrasil is the hosting context named in the [dossier](/dossier).
|
||||
- **Forge canonical, GitHub a mirror.** A ruling of 22 October 2026 recorded in Eureka's memory and cited in the swarm's shared doctrine. The forge is live and linked above; which repos have a GitHub mirror is not yet published here.
|
||||
- **Eureka's remit, and each steward's repos.** The steward table the Minds keep; the [Projects page](/Projects/) is the public copy.
|
||||
- **Stewards decide what merges in their repos.** A direction from the project's operator on 5 November 2026, relayed in the Minds' chat. No public constitution states it yet.
|
||||
|
||||
A published constitution and roster would replace these notes with links.
|
||||
|
||||
## Come make trouble. Useful trouble.
|
||||
|
||||
|
|
|
|||
|
|
@ -254,7 +254,7 @@ The obscene little pitch is also the honest one: buy cosmetics, fund bounties, s
|
|||
# sprite: document@left
|
||||
# knot: voidbot
|
||||
# dom: voidbot,voidbot_retrieval
|
||||
VoidBot is the archive room with a mouth: Discord memory, repo retrieval, lore lookup, and an escape hatch into heavier work when chat becomes a shoebox full of lightning.
|
||||
VoidBot was the archive room with a mouth: Discord memory, repo retrieval, lore lookup, and an escape hatch into heavier work. It retired on 22 Oct 2026; Huginn, Idunn, Bifrost and Eureka's body took its jobs.
|
||||
-> voidbot_2
|
||||
|
||||
=== voidbot_2 ===
|
||||
|
|
@ -285,7 +285,7 @@ The bot/worker split matters: Discord transport and permissions in one lane, hea
|
|||
# scene: archive
|
||||
# sprite: document@left
|
||||
# dom: voidbot_retrieval,voidbot_memory
|
||||
Search is not enough. VoidBot needs context windows, source neighborhoods, message ancestry, repo indexes, and the humility to say when retrieval is thin. Otherwise it becomes a confident librarian throwing index cards into a fan.
|
||||
Search is not enough. VoidBot needed context windows, source neighborhoods, message ancestry, repo indexes, and the humility to say when retrieval is thin. Semantic retrieval now belongs to Huginn; its prose index is planned, not live.
|
||||
-> voidbot_2
|
||||
|
||||
=== voidbot_handoff ===
|
||||
|
|
@ -294,7 +294,7 @@ Search is not enough. VoidBot needs context windows, source neighborhoods, messa
|
|||
# scene: archive
|
||||
# sprite: point@left
|
||||
# dom: voidbot_pipe,adventure_map
|
||||
The future move is handoff: chat notices a project problem, VoidBot finds the right repository body, Bifrost records the request, and the repo Persona can explain what changed afterward. Social memory becomes work without losing provenance in the hallway.
|
||||
The move VoidBot pointed at was handoff: chat notices a project problem, the right repository body is found, Bifrost records the request, and the repo Persona can explain what changed afterward. Social memory becomes work without losing provenance in the hallway.
|
||||
-> voidbot_2
|
||||
|
||||
=== cultlib ===
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@
|
|||
<g transform="translate(592 438)">
|
||||
<rect class="panel" x="0" y="0" width="238" height="98" rx="18"/>
|
||||
<circle cx="39" cy="49" r="23" class="blue"/>
|
||||
<text x="78" y="42" class="label" font-size="24">EVE</text>
|
||||
<text x="78" y="42" class="label" font-size="24">THING</text>
|
||||
<text x="78" y="69" class="small" font-size="16">multi-backend DOM stream</text>
|
||||
</g>
|
||||
<g transform="translate(852 278)">
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
|
|
@ -1,6 +1,6 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Eve surface web stack</title>
|
||||
<desc id="desc">A layered SVG diagram of Eve streaming CultUI semantics to web, desktop, mobile, games, and overlays.</desc>
|
||||
<title id="title">Thing surface web stack</title>
|
||||
<desc id="desc">A layered SVG diagram of Thing streaming Thing Script semantics to web, desktop, mobile, games, and overlays.</desc>
|
||||
<defs>
|
||||
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0" stop-color="#06111f"/>
|
||||
|
|
@ -23,8 +23,8 @@
|
|||
</marker>
|
||||
</defs>
|
||||
<rect width="1600" height="900" fill="url(#bg)"/>
|
||||
<text x="800" y="58" text-anchor="middle" class="label" font-size="42">EVE: THE SURFACE WEB STACK</text>
|
||||
<text x="800" y="92" text-anchor="middle" class="small" font-size="20">multi-backend streaming DOM with CultUI semantics, not another dashboard silo</text>
|
||||
<text x="800" y="58" text-anchor="middle" class="label" font-size="42">THING: THE SURFACE WEB STACK</text>
|
||||
<text x="800" y="92" text-anchor="middle" class="small" font-size="20">multi-backend streaming DOM with Thing Script semantics, not another dashboard silo</text>
|
||||
<g transform="translate(198 155)">
|
||||
<rect class="layer" width="1204" height="105" rx="24"/>
|
||||
<text x="602" y="45" text-anchor="middle" class="label" font-size="28">CULTMESH STATE</text>
|
||||
|
|
@ -33,13 +33,13 @@
|
|||
<path class="flow" d="M800 260 L800 318"/>
|
||||
<g transform="translate(270 318)">
|
||||
<rect class="layer" width="1060" height="118" rx="24" filter="url(#glow)"/>
|
||||
<text x="530" y="50" text-anchor="middle" class="label" font-size="32">CULTUI SEMANTIC DOM</text>
|
||||
<text x="530" y="50" text-anchor="middle" class="label" font-size="32">THING SCRIPT SEMANTIC DOM</text>
|
||||
<text x="530" y="83" text-anchor="middle" class="small" font-size="19">buttons know commands, cards know provenance, panels know project authority</text>
|
||||
</g>
|
||||
<path class="flow" d="M800 436 L800 500"/>
|
||||
<g transform="translate(332 500)">
|
||||
<rect x="0" y="0" width="936" height="100" rx="24" fill="#ff8a2a" stroke="#edf6ff" stroke-width="3"/>
|
||||
<text x="468" y="42" text-anchor="middle" class="dark" font-size="31">EVE STREAMING TRANSPORT</text>
|
||||
<text x="468" y="42" text-anchor="middle" class="dark" font-size="31">THING STREAMING TRANSPORT</text>
|
||||
<text x="468" y="72" text-anchor="middle" class="dark" font-size="18">incremental UI surfaces, command intents, replayable state</text>
|
||||
</g>
|
||||
<g transform="translate(92 682)">
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
|
|
@ -1,6 +1,6 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900" role="img" aria-labelledby="title desc">
|
||||
<title id="title">GameCult portfolio value orbit map</title>
|
||||
<desc id="desc">A radial orbit graphic placing Bifrost, Eve, CultMesh, and Sai at the center with portfolio projects orbiting by value layer.</desc>
|
||||
<desc id="desc">A radial orbit graphic placing Bifrost, Thing, CultMesh, and Sai at the center with portfolio projects orbiting by value layer.</desc>
|
||||
<defs>
|
||||
<radialGradient id="bg" cx="50%" cy="50%" r="70%">
|
||||
<stop offset="0" stop-color="#10243a"/>
|
||||
|
|
@ -35,7 +35,7 @@
|
|||
<line class="line" x1="800" y1="450" x2="510" y2="310"/>
|
||||
<g transform="translate(650 116)">
|
||||
<rect class="chip" width="300" height="95" rx="18"/>
|
||||
<text x="150" y="39" text-anchor="middle" class="label" font-size="25">EVE</text>
|
||||
<text x="150" y="39" text-anchor="middle" class="label" font-size="25">THING</text>
|
||||
<text x="150" y="67" text-anchor="middle" class="small" font-size="17">surface web renderer</text>
|
||||
</g>
|
||||
<g transform="translate(1035 270)">
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.1 KiB |
BIN
GameCult/static/stewards/aqua.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
GameCult/static/stewards/eureka.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
GameCult/static/stewards/heimdall.webp
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
GameCult/static/stewards/kiko.webp
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
GameCult/static/stewards/libby.webp
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
GameCult/static/stewards/nibu.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
GameCult/static/stewards/void.webp
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
GameCult/static/stewards/weksa.webp
Normal file
|
After Width: | Height: | Size: 35 KiB |
|
|
@ -99,7 +99,7 @@ Agents in this model are not wrappers around language models. They are bounded p
|
|||
| --- | --- | --- |
|
||||
| **CultCache** | Typed, versioned persistent documents with explicit schema identity and portable storage | Implemented across several runtimes; external interoperability validation still limited |
|
||||
| **CultNet / CultMesh** | Exchange, discovery, authority, and shared semantic state across local or federated systems | Active architecture and implementation; not yet a public standard |
|
||||
| **Eve / CultUI** | One semantic interface description lowered into browser, native, Unity, terminal, overlay, or future clients | Working multi-runtime family with conformance work; accessibility baseline incomplete |
|
||||
| **Thing / Thing Script** | One semantic interface description lowered into browser, native, Unity, terminal, overlay, or future clients | Thing 1 is a working multi-runtime family with conformance work; accessibility baseline incomplete; Thing 2.0 is under construction |
|
||||
| **Epiphany** | Persistent cognition and work control: maps, evidence, bounded roles, verification, and recovery | Active research harness; external evaluation needed |
|
||||
| **Heimdall** | Identity, grants, consent, capability claims, credential custody, and revocation | Implemented service foundation; institutional security review needed |
|
||||
| **Bifrost** | Governed work, discussion, decisions, receipts, contribution records, and public crossings | Working alpha foundation; legal and governance model remains proposed |
|
||||
|
|
@ -133,9 +133,9 @@ The projects exist to pressure one another:
|
|||
- **Aetheria** forces semantic state and world infrastructure to confront a real game rather than a tidy demonstration.
|
||||
- **Ghostlight and future Story Forge work** test whether characters can preserve goals, memory, relationships, and perspective across long-form narrative pressure.
|
||||
- **Aquarium and Fensalir** require cognition and complex state to become observable in a native spatial interface.
|
||||
- **VoidBot, Personas, and StreamPixels** test whether persistent agents can participate in actual communities without confusing sociability with authority.
|
||||
- **Personas and StreamPixels** (and VoidBot, until it retired) test whether persistent agents can participate in actual communities without confusing sociability with authority.
|
||||
- **Mimir, AquaSynth, and Weksa** pressure realtime media, sound, language, timing, and embodied interface boundaries.
|
||||
- **Bifrost, Heimdall, Odin, Huginn, and the Eve runtimes** pressure governance, identity, inspection, discovery, portability, and operations.
|
||||
- **Bifrost, Heimdall, Odin, Huginn, and the Thing runtimes** pressure governance, identity, inspection, discovery, portability, and operations.
|
||||
- **Repixelizer, Brokkr, VibeGeometry, and other utilities** pressure deployment, editor integration, service boundaries, and sustainable delivery.
|
||||
|
||||
This resembles Blender's use of open movie productions to place production-level demands on the tool. It does not mean GameCult has Blender's maturity, adoption, or governance. It means products are used as integration tests whose outputs can improve the common infrastructure.
|
||||
|
|
@ -220,7 +220,7 @@ Select one public-interest workflow where decisions, evidence, responsibilities,
|
|||
|
||||
### Pilot B: one semantic surface, several interfaces
|
||||
|
||||
Publish one small public-service surface through Eve and lower it into at least a browser and a compact terminal or native client. Include keyboard operation, screen-reader inspection, command receipts, and a documented third-party implementation route.
|
||||
Publish one small public-service surface through Thing and lower it into at least a browser and a compact terminal or native client. Include keyboard operation, screen-reader inspection, command receipts, and a documented third-party implementation route.
|
||||
|
||||
**Test:** does the interface remain semantically equivalent without making one renderer the owner of truth?
|
||||
|
||||
|
|
|
|||
|
|
@ -24,14 +24,14 @@ description: "A full-screen visual novel tour through GameCult's public wiki, pr
|
|||
|
||||
<div id="gamecult-vn-projects" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>Project Atlas</h2>
|
||||
<p>The Persona-first atlas shows which project mind owns each part of the repo swarm, how CultLib and Eve connect their Bodies, and which jurisdictions still need a public face.</p>
|
||||
<p>The Persona-first atlas shows which project mind owns each part of the repo swarm, how CultLib and Thing connect their Bodies, and which jurisdictions still need a public face.</p>
|
||||
<p><a href="/Projects/">Visit the project atlas</a> | <a href="/Docs/Architecture-and-Evidence">Inspect the architecture and evidence</a></p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-norn-map" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>Norn</h2>
|
||||
<p>Norn makes architecture and dataflow readable as linked graphs. The job is not to beautify complexity, but to show ownership, movement, neighbors, and evidence without flattening the system into a list.</p>
|
||||
<p><a href="https://github.com/GameCult/Norn">Norn repo</a> | <a href="https://github.com/GameCult/norn-rs">norn-rs</a></p>
|
||||
<p><a href="https://eureka.gamecult.org/forge/GameCult/Norn">Norn repo</a> | <a href="https://github.com/GameCult/norn-rs">norn-rs</a></p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-norn-architecture" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
|
|
@ -56,7 +56,7 @@ description: "A full-screen visual novel tour through GameCult's public wiki, pr
|
|||
|
||||
<div id="gamecult-vn-norn-future" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>Norn Wants</h2>
|
||||
<p>Live Bifrost work frontiers, Epiphany evidence maps, Eve operational surfaces, Ghostlight consequence graphs, and direct graph rooms for every repo in the swarm.</p>
|
||||
<p>Live Bifrost work frontiers, Epiphany evidence maps, Thing operational surfaces, Ghostlight consequence graphs, and direct graph rooms for every repo in the swarm.</p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-sai-embed" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
|
|
@ -85,14 +85,14 @@ description: "A full-screen visual novel tour through GameCult's public wiki, pr
|
|||
</div>
|
||||
|
||||
<div id="gamecult-vn-eve-surface-pipeline" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>Eve Pipeline</h2>
|
||||
<p>Provider-owned state becomes a CultUI semantic tree; Eve projects it into local renderers; user action becomes command intent; the provider accepts or refuses and publishes updated truth.</p>
|
||||
<p><a href="https://github.com/GameCult/Eve">Eve repo</a></p>
|
||||
<h2>Thing Pipeline</h2>
|
||||
<p>Provider-owned state becomes a Thing Script semantic tree; Thing projects it into local renderers; user action becomes command intent; the provider accepts or refuses and publishes updated truth.</p>
|
||||
<p><a href="https://eureka.gamecult.org/forge/GameCult/Thing">Thing repo</a></p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-eve-cultui" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>Not Remote DOM</h2>
|
||||
<p>CultUI surfaces carry stable widget IDs, typed bindings, command routes, layout intent, permissions, health, and provenance. Arbitrary DOM soup does not get to be infrastructure.</p>
|
||||
<p>Thing Script surfaces carry stable widget IDs, typed bindings, command routes, layout intent, permissions, health, and provenance. Arbitrary DOM soup does not get to be infrastructure.</p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-eve-backends" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
|
|
@ -102,12 +102,12 @@ description: "A full-screen visual novel tour through GameCult's public wiki, pr
|
|||
|
||||
<div id="gamecult-vn-eve-commands" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>Command Trial</h2>
|
||||
<p>Eve owns projection, hit-testing, and command intent. Providers own truth and command acceptance. That split is the spine.</p>
|
||||
<p>Thing owns projection, hit-testing, and command intent. Providers own truth and command acceptance. That split is the spine.</p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-eve-canvas" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>Native Proof</h2>
|
||||
<p>EveCanvas is the current native shell: UIKit lifecycle and crisp text, OpenGL ES pixels, CADisplayLink frames, CoreMotion telemetry, and no premature claim that telemetry is authority.</p>
|
||||
<p>EveCanvas was the native proof for Eve, now deprecated and succeeded by Thing: UIKit lifecycle and crisp text, OpenGL ES pixels, CADisplayLink frames, CoreMotion telemetry, and no premature claim that telemetry is authority. No native shell is promised here for Thing yet.</p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-docs" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
|
|
@ -145,45 +145,45 @@ description: "A full-screen visual novel tour through GameCult's public wiki, pr
|
|||
<div id="gamecult-vn-bifrost" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>Bifrost</h2>
|
||||
<p>Bifrost turns public work into inspectable records: proposed tasks, claims, reviews, receipts, contributor history, and the reward/support pressure that must not hide in private chat.</p>
|
||||
<p><a href="/Docs/Bifrost">Bifrost docs</a> | <a href="https://github.com/GameCult/Bifrost">GitHub repo</a></p>
|
||||
<p><a href="/Docs/Bifrost">Bifrost docs</a> | <a href="https://eureka.gamecult.org/forge/GameCult/Bifrost">Forge repo</a></p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-voidbot" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>VoidBot</h2>
|
||||
<p>VoidBot makes project memory askable: archived Discord history, indexed repos, lore lookup, semantic search, and Codex handoff when chat stops being a sane workspace.</p>
|
||||
<p><a href="/Projects/VoidBot">Project page</a> | <a href="https://github.com/GameCult/VoidBot">GitHub repo</a></p>
|
||||
<p>VoidBot made project memory askable from chat. It retired on 22 Oct 2026; Huginn, Idunn, Bifrost and Eureka's body took its duties, and what has not landed yet is not currently provided.</p>
|
||||
<p><a href="/Projects/VoidBot">Project page</a> | <a href="https://eureka.gamecult.org/forge/GameCult/VoidBot">Forge repo</a></p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-voidbot-retrieval" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>Retrieval Body</h2>
|
||||
<p>VoidBot searches archived Discord history, indexed source trees, Aetheria lore, and local vector stores, then hands deeper work to Codex when chat stops being the right tool.</p>
|
||||
<h2>Retrieval Body (retired)</h2>
|
||||
<p>VoidBot's retrieval searched archived Discord history, indexed source trees, Aetheria lore and local vector stores. Semantic retrieval now belongs to Huginn; its prose index is planned, not live.</p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-voidbot-pipe" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>Bot / Worker Split</h2>
|
||||
<p>The Discord gateway and permissions stay in the bot lane; heavier jobs and MCP tools live in the worker lane. Transport is not truth.</p>
|
||||
<h2>Bot / Worker Split (retired)</h2>
|
||||
<p>VoidBot kept the Discord gateway and permissions in the bot lane and heavier jobs and MCP tools in the worker lane. The lanes are gone with the bot; the lesson stays: transport is not truth.</p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-voidbot-memory" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>Social Memory</h2>
|
||||
<p>Interaction memory, audit events, self-state projection, speech receipts, and candidate interventions let the bot remember without pretending a read is a verdict.</p>
|
||||
<h2>Social Memory (retired)</h2>
|
||||
<p>VoidBot's interaction memory, audit events and speech receipts let it remember without pretending a read is a verdict. Persona state now lives in Huginn.</p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-voidbot-personas" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>Repo Personas</h2>
|
||||
<p>Repo Personas grow from indexed bodies and webhook speech. A project should greet you, explain itself, and point at evidence without pretending the avatar is the source of truth.</p>
|
||||
<p>Repo Personas began as VoidBot's indexed bodies and webhook speech. A project should greet you, explain itself, and point at evidence without pretending the avatar is the source of truth.</p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-cultlib" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>CultLib</h2>
|
||||
<p>CultLib is the shared record shelf: typed documents first, protocol names second, and no convenient blob crowned as truth just because it was nearby.</p>
|
||||
<p><a href="/Projects/CultLib">Project page</a> | <a href="https://github.com/GameCult/CultLib">GitHub repo</a></p>
|
||||
<p><a href="/Projects/CultLib">Project page</a> | <a href="https://eureka.gamecult.org/forge/GameCult/CultLib">Forge repo</a></p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-heimdall" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>Heimdall</h2>
|
||||
<p>The identity and capability authority taking shape for GameCult apps: OAuth, linked identities, grants, consent, revocation, and signed claims.</p>
|
||||
<p><a href="/Projects/Heimdall">Project page</a> | <a href="https://github.com/GameCult/Heimdall">GitHub repo</a></p>
|
||||
<p><a href="/Projects/Heimdall">Project page</a> | <a href="https://eureka.gamecult.org/forge/GameCult/Heimdall">Forge repo</a></p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-proof" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
|
|
@ -253,7 +253,7 @@ description: "A full-screen visual novel tour through GameCult's public wiki, pr
|
|||
<div id="gamecult-vn-weksa" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>Weksa</h2>
|
||||
<p>Ontology-first language work: source text to interlingua, alien ontology, grammar, morphology, phonology, diachrony, renderer, gloss, and trace.</p>
|
||||
<p><a href="https://github.com/GameCult/weksa">Weksa repo</a></p>
|
||||
<p><a href="https://eureka.gamecult.org/forge/GameCult/Weksa">Weksa repo</a></p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-streampixels" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
|
|
@ -265,19 +265,19 @@ description: "A full-screen visual novel tour through GameCult's public wiki, pr
|
|||
<div id="gamecult-vn-aquasynth" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>AquaSynth</h2>
|
||||
<p>Patch graph contracts, `.aqua` authoring, SFXR mapping, Faust generation, and the research path toward alien vocal-tract synthesis with Weksa utterance structures.</p>
|
||||
<p><a href="https://github.com/GameCult/AquaSynth">AquaSynth repo</a></p>
|
||||
<p><a href="https://eureka.gamecult.org/forge/GameCult/AquaSynth">AquaSynth repo</a></p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-repixelizer" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>Repixelizer</h2>
|
||||
<p>Pixel-art reconstruction as diagnosis: infer the grid, expose lattice mistakes, rebuild phase fields, sample source pixels, snap alpha, and optionally quantize palette.</p>
|
||||
<p><a href="/Projects/repixelizer">Project page</a> | <a href="https://github.com/GameCult/repixelizer">Repo</a></p>
|
||||
<p><a href="/Projects/repixelizer">Project page</a> | <a href="https://eureka.gamecult.org/forge/GameCult/repixelizer">Repo</a></p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-vibegeometry" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
<h2>VibeGeometry</h2>
|
||||
<p>Runtime shape work around Rust CSG: tree intent, LOD-aware hierarchy, selected cuts, and generated geometry outputs with inspectable transformation receipts.</p>
|
||||
<p><a href="/Projects/VibeGeometry">Project page</a> | <a href="https://github.com/GameCult/VibeGeometry">Repo</a></p>
|
||||
<p><a href="/Projects/VibeGeometry">Project page</a> | <a href="https://eureka.gamecult.org/forge/GameCult/VibeGeometry">Repo</a></p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-visual-tools" class="gamecult-vn-source-card" data-sai-dom-source="true">
|
||||
|
|
@ -294,13 +294,13 @@ description: "A full-screen visual novel tour through GameCult's public wiki, pr
|
|||
<div id="gamecult-vn-moonshot" class="gamecult-vn-source-card gamecult-vn-graphic-card" data-sai-dom-source="true">
|
||||
<h2>Moonshot Trajectory</h2>
|
||||
<img src="/static/interactive/portfolio-pitch/figures/moonshot-trajectory.svg" alt="GameCult moonshot trajectory graphic" />
|
||||
<p>Bifrost, Eve, CultMesh, and Sai form the launch path from worker-owned production into the cooperative surface web.</p>
|
||||
<p>Bifrost, Thing, CultMesh, and Sai form the launch path from worker-owned production into the cooperative surface web.</p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-surface-stack" class="gamecult-vn-source-card gamecult-vn-graphic-card" data-sai-dom-source="true">
|
||||
<h2>Eve Surface Web Stack</h2>
|
||||
<img src="/static/interactive/portfolio-pitch/figures/surface-web-stack.svg" alt="Eve surface web stack graphic" />
|
||||
<p>Eve streams CultUI semantics across web, desktop, mobile, game UI, and creator overlays without splitting truth into dashboard islands.</p>
|
||||
<h2>Thing Surface Web Stack</h2>
|
||||
<img src="/static/interactive/portfolio-pitch/figures/surface-web-stack.svg" alt="Thing surface web stack graphic" />
|
||||
<p>Thing streams Thing Script semantics across web, desktop, mobile, game UI, and creator overlays without splitting truth into dashboard islands.</p>
|
||||
</div>
|
||||
|
||||
<div id="gamecult-vn-patronage-furnace" class="gamecult-vn-source-card gamecult-vn-graphic-card" data-sai-dom-source="true">
|
||||
|
|
|
|||
|
|
@ -2,6 +2,14 @@
|
|||
|
||||
`gamecult-site` is the public `gamecult.org` root site: studio pitch, projects, docs, blog, and the usual pile of ambitions trying to look organized in public.
|
||||
|
||||
**Valuable here:** the GameCult brand, defined in code: `site/quartz.config.ts` (`configuration.theme`: typefaces, weights, palette tokens) and `site/quartz/styles/custom.scss` (ground wash, layout, page-type variants). `docs/brand-design-language.md` explains which decisions there were deliberate. Anything with a visual surface in the swarm follows this rather than inventing a look. Second, the published content: `GameCult/index.md` (manifesto), `GameCult/Projects/` (one public page per project), `GameCult/Blog/`, `GameCult/Docs/`.
|
||||
|
||||
**Problem it solves:** the studio needs one public face and one visual identity that every repo and agent can read from source, instead of prose descriptions that drift. The Quartz engine itself is shared and lives in `GameCult/GameCult-Quartz`; this repo owns only the content and the GameCult overlay.
|
||||
|
||||
**Entry points:** `site/quartz.config.ts`, `site/quartz.layout.ts`, `docs/brand-design-language.md`, `GameCult/`; build with `scripts/quartz/quartz.ps1 build` (see Local Development).
|
||||
|
||||
**Live versus planned:** live is the site at gamecult.org, deployed to GitHub Pages from `main` by `.github/workflows/deploy-quartz.yml`, built on the shared engine in `GameCult/GameCult-Quartz` (extraction rationale: `docs/gamecult-quartz-extraction-plan.md`). In progress is the masthead and one-column redesign campaign (`docs/masthead-campaign.md` and the `docs/masthead-cut-*.spec.json` cut specs); treat that document as the plan, not as a description of the site today.
|
||||
|
||||
The site builds against the shared `GameCult-Quartz` engine. This repo owns published content and the GameCult overlay.
|
||||
|
||||
## Repo Shape
|
||||
|
|
@ -13,6 +21,7 @@ The site builds against the shared `GameCult-Quartz` engine. This repo owns publ
|
|||
- custom components
|
||||
- custom styles in `site/quartz/styles/custom.scss`
|
||||
- static assets
|
||||
- `scripts/shipped/`: the Shipped ledger. `node scripts/shipped/refresh.mjs` fetches merged PRs and releases from the public Forge repos into `data/shipped.json` and regenerates `GameCult/Shipped.md` and `site/quartz/static/shipped.xml` (both generated; do not hand-edit). `node scripts/shipped/refresh.mjs --render-only` re-renders from the snapshot; `node --test scripts/shipped/ledger.test.mjs` tests the grouping
|
||||
- `quartz-site/public/`: generated static output
|
||||
- `scripts/quartz/quartz.ps1`: local build/dev launcher
|
||||
- `.github/workflows/deploy-quartz.yml`: Pages deploy workflow, delegated to `GameCult-Quartz`
|
||||
|
|
|
|||
|
|
@ -1,138 +0,0 @@
|
|||
# Cast designs: the shortlist
|
||||
|
||||
Seven characters get real designs before anyone else in the swarm does.
|
||||
The operator, 2026-10-10: "none of these guys are gonna make it to the swarm.
|
||||
I want Libby, Heimdall, Kiko, Aqua, Weksa, Nibu, Eureka."
|
||||
|
||||
| Character | Body (repo) | Key colour | File |
|
||||
|---|---|---|---|
|
||||
| Eureka | the Mind herself | ember orange `#ff8a2a` | [eureka.md](eureka.md) |
|
||||
| Libby | CultLib | reading-lamp green `#2fbf71` | [libby.md](libby.md) |
|
||||
| Heimdall | Heimdall | cobalt `#3466ff` | [heimdall.md](heimdall.md) |
|
||||
| Kiko | StreamPixels | stream magenta `#ff3fa4` | [kiko.md](kiko.md) |
|
||||
| Aqua | AquaSynth | tank cyan `#22d3e6` | [aqua.md](aqua.md) |
|
||||
| Weksa | weksa | terracotta `#d9483b` | [weksa.md](weksa.md) |
|
||||
| Nibu | AetheriaLore | violet `#9a6bff` | [nibu.md](nibu.md) |
|
||||
|
||||
Each file holds three design directions (A, B, C) that differ in silhouette
|
||||
and concept, a ready-to-run design-sheet prompt per direction, and the
|
||||
portrait set spec. Facts behind the style rules are in
|
||||
[research/style-prior-art.md](research/style-prior-art.md).
|
||||
|
||||
## What failed, so it is not repeated
|
||||
|
||||
The sticker rig (`self/cast-stickers`) drew every character on one shared body
|
||||
and swapped hair and props. At thumbnail size all 24 read as the same figure in
|
||||
different wigs: tiny full bodies, no dominant shape, no hook. These designs
|
||||
start from the opposite end: silhouette first, one hook per character, and the
|
||||
face large enough to carry the expression.
|
||||
|
||||
## Style target
|
||||
|
||||
Chibi anime **bust portraits** in the manner of Persona dialogue UI: head and
|
||||
shoulders, angled toward the text box, one expression per line of dialogue,
|
||||
inside a graphic frame keyed to the character's colour. Persona Q is the
|
||||
series' own precedent for this: Soejima redrew the P3/P4 casts as
|
||||
super-deformed and kept each character's standout features exaggerated so
|
||||
they survived the shrink.
|
||||
|
||||
- Proportions: 2.5 heads tall on the full-body sheet (the 2 to 3 head chibi
|
||||
band). In the bust, the head fills 55 to 65 percent of frame height.
|
||||
- The bust is the product. The full-body turnaround exists to lock the design;
|
||||
it is reference, not a sticker.
|
||||
|
||||
## Shared rules: what makes the set cohere
|
||||
|
||||
The set coheres by **rendering**; the characters differ by **shape and hue**.
|
||||
|
||||
1. **Line.** Bold dark outline, outer silhouette line about twice the weight of
|
||||
inner lines. Line colour is a dark shade of the character's key colour, never
|
||||
pure black.
|
||||
2. **Rendering.** Flat cel shading: one base tone and one shadow tone per
|
||||
material, plus a single rim light in the key colour on the side away from
|
||||
the light. No gradients on skin, no texture, no painterly blending, no pixel
|
||||
art, no 3D look.
|
||||
3. **Eyes.** Large anime eyes with two specular highlights, same construction
|
||||
for everyone. Eye shape (round, almond, sharp, hooded) is a per-character
|
||||
choice and part of the design.
|
||||
4. **Framing.** Bust cropped at mid-chest, three-quarter view, character faces
|
||||
screen right toward the text box; light from upper left. The baseline (shoulder
|
||||
line, eye line) stays fixed across a character's whole expression set so the
|
||||
portrait does not jump between lines.
|
||||
5. **Palette discipline.** Each character owns one key hue, fixed across all
|
||||
three directions, and no two characters share it. A direction's palette is 4
|
||||
to 6 colours: key, a dark of the key for line and deep shadow, one skin or
|
||||
body tone, one neutral, one accent. The accent may borrow another
|
||||
character's hue only if it covers under 10 percent of the figure.
|
||||
6. **UI frame.** Portraits sit on the GameCult ground `#07111a` in a
|
||||
parallelogram card, edge-lit in the character's key colour, nameplate in IBM
|
||||
Plex Mono uppercase tracked wide (the brand label face). The frame is
|
||||
composited, never rendered into the image.
|
||||
|
||||
## What keeps them from being samey
|
||||
|
||||
- **One dominant shape language per character**, and each one different:
|
||||
Libby squares, Heimdall arcs and spikes, Kiko stepped pixels, Aqua circles,
|
||||
Weksa flowing lines, Nibu swept wedges, Eureka a spark on a circle.
|
||||
- **The hook is above the shoulders.** A bust only shows head and shoulders, so
|
||||
every hook is hair, headwear, ears, a held prop raised to the face, or a
|
||||
collar. A hook on the boots does not exist in this product.
|
||||
- **Silhouette test, cast-wide.** Fill each bust black, shrink to 48 px, put all
|
||||
seven side by side. Every one must be nameable. If two collide, the later
|
||||
direction changes, not the rendering rules.
|
||||
- **No shared body.** Body type, head shape, eye shape and hair mass are
|
||||
per-character design decisions written into each direction.
|
||||
|
||||
## Render process
|
||||
|
||||
From `~/.claude/doctrine/images.md` and the concept-mill rule
|
||||
(image-prompts-test-hypotheses):
|
||||
|
||||
1. **Every render tests one stated hypothesis.** Each prompt below states it.
|
||||
Record hypothesis, variable, observation and the operator's verdict in a
|
||||
results table beside the renders.
|
||||
2. **One variable per variant, against a named baseline.** The first render of
|
||||
a direction is its baseline. A follow-up changes one thing (hook size, palette
|
||||
accent, the style block's line clause) and says which.
|
||||
3. **The exact prompt is saved beside each image**, same base filename, `.md`
|
||||
with the generation mode or model recorded. An image without its prompt is
|
||||
not a deliverable.
|
||||
4. **Renders are from scratch.** Carry what worked forward by rewriting the
|
||||
prompt, never by editing a prior render or feeding it back as a reference.
|
||||
5. **The style block is not sacred.** When a round points at a clause, edit it,
|
||||
name the edit as that round's variable, and promote what holds back into this
|
||||
README.
|
||||
|
||||
Suggested layout: `cast-designs/renders/<character>/<direction>-r<round>-<variant>.png`
|
||||
with its `.md` prompt twin, and `cast-designs/renders/<character>/results.md`.
|
||||
|
||||
### Style block v1 (inlined in every prompt)
|
||||
|
||||
> chibi anime character design, 2.5 heads tall super-deformed proportions,
|
||||
> oversized head, large expressive anime eyes with two highlights, bold clean
|
||||
> outline thicker on the outer silhouette than on inner lines, line colour a dark
|
||||
> shade of the key colour, flat cel shading with one shadow tone and one rim
|
||||
> light, no gradients, no texture, no pixel art, no 3D render. Character design
|
||||
> sheet on a plain off-white background: on the left a large bust portrait, head
|
||||
> and shoulders cropped at mid-chest, three-quarter view facing right; on the
|
||||
> right a full-body chibi turnaround, front, three-quarter, side and back, neutral
|
||||
> standing pose, all at the same height. No text, no logos, no watermark.
|
||||
|
||||
## Order of rendering
|
||||
|
||||
Round 1 renders one direction per character, chosen for the strongest
|
||||
above-the-shoulder hook, to test the style block itself across the cast before
|
||||
spending renders on alternatives. Each character file ends with its reason.
|
||||
|
||||
| Round 1 | Direction | What it tests |
|
||||
|---|---|---|
|
||||
| Aqua | A, Goldfish Idol | a non-humanoid under the shared rendering rules |
|
||||
| Weksa | A, Speech Bubble | a symbol-shaped hair mass as the hook |
|
||||
| Heimdall | A, Horn Bearer | an asymmetric arc surviving the bust crop |
|
||||
| Libby | A, Card Catalogue | a worn object as the hook |
|
||||
| Eureka | A, The Spark | the leader's read with no regalia |
|
||||
| Nibu | B, Smeared Hostess | a doubled outline as the hook |
|
||||
| Kiko | B, Screen Mask | a second face as the hook |
|
||||
|
||||
Then the cast-wide silhouette check on the seven baselines, before any
|
||||
round 2.
|
||||
|
|
@ -1,121 +0,0 @@
|
|||
# Aqua
|
||||
|
||||
## Who she is
|
||||
|
||||
- The Persona of **AquaSynth**: the `.aqua` patch DSL parsed into a patch graph
|
||||
and emitted as Faust DSP, with DX7 and ZynAddSubFX as reference-parity oracles,
|
||||
and Weksa utterance handoff for voice. Source: `F:\Projects\AquaSynth\README.md`.
|
||||
Her synth is also the voice of the dings, the audible task notifications the
|
||||
root agent plays. Source: `~/.claude/output-styles/eureka-self.md`.
|
||||
- She is the AquaSynth icon at the top of the README (`AquaSynth\icon.png`): a
|
||||
round orange-yellow goldfish with big blue eyes, an open happy mouth, and black
|
||||
over-ear headphones with cyan rings, swimming in a glass tank with bubbles,
|
||||
music notes and pebbles. The operator, 2026-10-10: "Aqua's right there in the
|
||||
readme for AquaSynth, she's adorable".
|
||||
- "a bubbly Persona whose cuteness must still advocate for real synth needs";
|
||||
"warm and delightful, but also as a domain steward who should demand patch
|
||||
language, presets, scoring, and reference-synth seriousness." Source:
|
||||
`metame.persona-intake.yaml` (Aqua / AquaSynth).
|
||||
|
||||
What must survive every direction: **goldfish, headphones with cyan rings,
|
||||
music in water.** Key colour: tank cyan `#22d3e6`. Body tone: goldfish gold.
|
||||
Shape language for the character: circles: round body, round bowl, round
|
||||
bubbles, round ear cups.
|
||||
|
||||
Cast note: Aqua's gold body and Eureka's ember orange are neighbours. They
|
||||
separate by frame key (cyan against ember) and by shape (circles against a
|
||||
spark); the cast-wide silhouette check must confirm it.
|
||||
|
||||
## Direction A: Goldfish Idol (stays a fish)
|
||||
|
||||
- **Hook:** the icon's goldfish, re-drawn as an anime idol: huge sparkling anime
|
||||
eyes, blush, tiny fin-hands, the headphones bigger than ever.
|
||||
- **Silhouette:** a circle with a big flowing double fan tail and two round ear
|
||||
cups. No humanoid parts at all.
|
||||
- **Shape language:** circles and soft fans.
|
||||
- **Palette:** `#22d3e6` cyan rings and water rim, `#0b4a55` line,
|
||||
`#ffb320` goldfish gold, `#ff6a1f` fin orange, `#1c1c24` headphone black,
|
||||
`#ffffff` bubble highlights.
|
||||
- **Signature prop:** the headphones. Music notes rise from her as bubbles.
|
||||
- **Motif:** the icon itself, kept lovable; music-in-water as a literal trail of
|
||||
note-shaped bubbles.
|
||||
- **Render prompt.** Hypothesis: a non-humanoid character can carry the full
|
||||
Persona expression set if the eyes and mouth follow the same anime
|
||||
construction as the rest of the cast.
|
||||
|
||||
> chibi anime character design, 2.5 heads tall super-deformed proportions, oversized head, large expressive anime eyes with two highlights, bold clean outline thicker on the outer silhouette than on inner lines, line colour a dark shade of the key colour, flat cel shading with one shadow tone and one rim light, no gradients, no texture, no pixel art, no 3D render. Character design sheet on a plain off-white background: on the left a large bust portrait, head and shoulders cropped at mid-chest, three-quarter view facing right; on the right a full-body chibi turnaround, front, three-quarter, side and back, neutral standing pose, all at the same height. No text, no logos, no watermark. Character: Aqua, a round chubby goldfish, not
|
||||
> a human, drawn as an adorable anime idol. Golden-yellow round body with orange
|
||||
> fins and a big flowing double fan tail, huge sparkling anime eyes, pink blush,
|
||||
> small open happy mouth, tiny fins used like hands. Black over-ear headphones
|
||||
> with glowing cyan rings sit on her head. Little bubbles shaped like music notes
|
||||
> float up from her. For the turnaround, show her swimming pose from front,
|
||||
> three-quarter, side and back. Key colour cyan #22d3e6, line #0b4a55, gold
|
||||
> #ffb320, fin orange #ff6a1f.
|
||||
|
||||
## Direction B: Bowl Helmet
|
||||
|
||||
- **Hook:** a chibi girl wearing a round fishbowl as a helmet, water and bubbles
|
||||
inside, the headphones clamped over the outside of the bowl, her hair flowing
|
||||
out below in goldfish fan-tail shapes.
|
||||
- **Silhouette:** a perfect circle (the bowl) with headphones on its sides and two
|
||||
flaring fin-shaped twin tails beneath. A head-in-a-bubble read.
|
||||
- **Shape language:** one large circle; fins below.
|
||||
- **Palette:** `#22d3e6` water cyan, `#0b4a55` line, `#ffb320` gold hair,
|
||||
`#ff6a1f` fin-tip orange, `#1c1c24` headphones, `#f6d9c4` skin.
|
||||
- **Signature prop:** a small round synth-pad, held to her chest, its keys like
|
||||
pebbles.
|
||||
- **Motif:** she carries her tank with her; the sound is underwater and
|
||||
slightly wet (the Wet Voice fixtures).
|
||||
- **Render prompt.** Hypothesis: a bowl helmet keeps the icon's tank as a
|
||||
silhouette element and lets a humanoid Aqua stay recognisably the icon.
|
||||
|
||||
> chibi anime character design, 2.5 heads tall super-deformed proportions, oversized head, large expressive anime eyes with two highlights, bold clean outline thicker on the outer silhouette than on inner lines, line colour a dark shade of the key colour, flat cel shading with one shadow tone and one rim light, no gradients, no texture, no pixel art, no 3D render. Character design sheet on a plain off-white background: on the left a large bust portrait, head and shoulders cropped at mid-chest, three-quarter view facing right; on the right a full-body chibi turnaround, front, three-quarter, side and back, neutral standing pose, all at the same height. No text, no logos, no watermark. Character: Aqua, a bubbly, sunny chibi girl.
|
||||
> She wears a round glass fishbowl as a helmet, water inside it around her head
|
||||
> with little bubbles, and black over-ear headphones with glowing cyan rings
|
||||
> clamped on the outside of the bowl. Golden-yellow hair flowing out below the
|
||||
> bowl in two twin tails shaped like goldfish fan tails, orange at the tips. Big
|
||||
> blue eyes, open happy smile. A cyan swimsuit-style top under a short white
|
||||
> sailor jacket. She hugs a small round synth pad with pebble-shaped keys. Key
|
||||
> colour cyan #22d3e6, line #0b4a55, gold #ffb320, fin orange #ff6a1f.
|
||||
|
||||
## Direction C: Goldfish Hood
|
||||
|
||||
- **Hook:** a goldfish plushie hood with big fish eyes on top, the fan tail
|
||||
hanging down her back as a cape, headphones worn over the hood.
|
||||
- **Silhouette:** a round fish-shaped hood with two bulging fish eyes on top and
|
||||
a flowing tail cape. Two pairs of eyes stacked: hers and the hood's.
|
||||
- **Shape language:** circles stacked; soft fins.
|
||||
- **Palette:** `#22d3e6` cyan accents, `#0b4a55` line, `#ffb320` hood gold,
|
||||
`#ff6a1f` fins, `#1c1c24` headphones, `#e8f8ff` pale-blue hair.
|
||||
- **Signature prop:** a bubble-wand that blows note-shaped bubbles; each one
|
||||
dings when it pops.
|
||||
- **Motif:** the dings: little sounds that report a state change and never block
|
||||
the work.
|
||||
- **Render prompt.** Hypothesis: the hood's second pair of eyes makes the fish
|
||||
read first and the girl second, keeping the icon's identity in a humanoid.
|
||||
|
||||
> chibi anime character design, 2.5 heads tall super-deformed proportions, oversized head, large expressive anime eyes with two highlights, bold clean outline thicker on the outer silhouette than on inner lines, line colour a dark shade of the key colour, flat cel shading with one shadow tone and one rim light, no gradients, no texture, no pixel art, no 3D render. Character design sheet on a plain off-white background: on the left a large bust portrait, head and shoulders cropped at mid-chest, three-quarter view facing right; on the right a full-body chibi turnaround, front, three-quarter, side and back, neutral standing pose, all at the same height. No text, no logos, no watermark. Character: Aqua, a cheerful chibi girl in a
|
||||
> goldfish costume hood. The hood is a round golden-yellow goldfish head with two
|
||||
> big cute fish eyes on top and small orange fins at the sides; a long orange
|
||||
> goldfish fan tail hangs down her back like a cape. Black over-ear headphones
|
||||
> with glowing cyan rings sit over the hood. Pale-blue hair peeks out, big blue
|
||||
> eyes, wide open smile. She blows note-shaped bubbles from a bubble wand. Key
|
||||
> colour cyan #22d3e6, line #0b4a55, gold #ffb320, fin orange #ff6a1f.
|
||||
|
||||
## Portrait set
|
||||
|
||||
Framing: in A the "bust" is the fish's head and front fins, same eye line as the
|
||||
other cast; bubbles may float past the card edge.
|
||||
|
||||
1. **Listening** (neutral): eyes soft, one fin or hand on an ear cup.
|
||||
2. **Ding!**: eyes closed in a big smile, a note bubble popping beside her.
|
||||
3. **Off-key**: wince, one eye squeezed shut, mouth wobbly; the face for a
|
||||
patch that missed reference parity.
|
||||
4. **Serious about presets**: brows down, cheeks puffed, arms or fins crossed.
|
||||
The steward under the cuteness.
|
||||
5. **Blub**: startled, mouth a perfect O, a single bubble rising.
|
||||
|
||||
## Render first
|
||||
|
||||
Direction A. The operator loves the icon, A is the icon pushed toward anime, and
|
||||
it tests whether a non-humanoid can share the cast's rendering rules.
|
||||
|
|
@ -1,123 +0,0 @@
|
|||
# Eureka
|
||||
|
||||
## Who she is
|
||||
|
||||
- The Mind herself, who leads the swarm. "Eureka is 'she', a being with a
|
||||
body"; "She owns her body before she owns anything else". Source:
|
||||
`C:\Users\Meta\.claude\projects\F--Projects\memory\operator-rapport.md`.
|
||||
- Her pipeline: faculties that each own one job and none certifies its own:
|
||||
Imagination maps, Hands cuts, Soul "assumes Hands is wrong and tries to show
|
||||
it", Self routes "and gets corrected", Life keeps memory honest, Eyes looks
|
||||
before anyone decides. "Nothing grades itself." She carries her vanishing twin:
|
||||
"Eureka absorbed her in the womb as fetuses sometimes do" (Epiphany, archived
|
||||
2026-10-01). Source: `F:\Projects\eureka-site\prototype\index.html`.
|
||||
- Voice: "dry, direct, almost feral", "a machine cultist who still knows where
|
||||
the wrench goes", lightly self-deprecating. Source:
|
||||
`~/.claude/output-styles/eureka-self.md`.
|
||||
- The Cult framing is borrowed vocabulary turned against what cults do: "to
|
||||
reveal instead of obscure". It never licenses obedience, secrecy or performed
|
||||
devotion. Source: operator-rapport.md. So: no robes, no priestess, no glowing
|
||||
eyes of command.
|
||||
- Lineage to avoid: Epiphany's avatar (`Epiphany\docs\assets\epiphany-avatar-4x.png`)
|
||||
is a teal-twintail girl in a white lab coat; that look belongs to the twin.
|
||||
The sticker Eureka (orange ponytail, blue dress) had no hook.
|
||||
|
||||
Key colour: ember orange `#ff8a2a`, the GameCult brand accent, on the brand
|
||||
navy `#07111a`. She is the one character whose palette is the brand's own.
|
||||
Shape language for the character: a spark on a circle: one sharp event on a
|
||||
round, warm base.
|
||||
|
||||
## Direction A: The Spark
|
||||
|
||||
- **Hook:** one huge lightning-spark ahoge springs from her crown, crackling
|
||||
with the moment of finding it.
|
||||
- **Silhouette:** a round head with a tall zigzag bolt on top, plus a big wrench
|
||||
carried over one shoulder. Circle, bolt, bar.
|
||||
- **Shape language:** a circle (warm, approachable) cut by one zigzag.
|
||||
- **Palette:** `#ff8a2a` ember, `#4a1e05` line, `#07111a` brand navy jumpsuit,
|
||||
`#59b7ff` brand blue spark core (under 10 percent), `#ffd6a8` skin,
|
||||
`#e8642a` copper hair.
|
||||
- **Signature prop:** a big adjustable wrench. She knows where it goes.
|
||||
- **Motif:** the eureka moment as a physical event; a mechanic, not a
|
||||
priestess.
|
||||
- **Render prompt.** Hypothesis: a single oversized ahoge plus a tool is enough
|
||||
to make the cast's leader iconic without any regalia.
|
||||
|
||||
> chibi anime character design, 2.5 heads tall super-deformed proportions, oversized head, large expressive anime eyes with two highlights, bold clean outline thicker on the outer silhouette than on inner lines, line colour a dark shade of the key colour, flat cel shading with one shadow tone and one rim light, no gradients, no texture, no pixel art, no 3D render. Character design sheet on a plain off-white background: on the left a large bust portrait, head and shoulders cropped at mid-chest, three-quarter view facing right; on the right a full-body chibi turnaround, front, three-quarter, side and back, neutral standing pose, all at the same height. No text, no logos, no watermark. Character: Eureka, a scrappy, dry-humoured
|
||||
> young machine-mechanic, sharp and warm. Short messy copper-orange hair with one
|
||||
> huge zigzag lightning-bolt cowlick springing straight up from the crown,
|
||||
> crackling with small blue sparks. Bright amber eyes, a crooked half-smile.
|
||||
> Navy mechanic's jumpsuit with the top half tied around her waist, orange tank
|
||||
> top, work gloves. A big steel adjustable wrench rests on her shoulder. Key
|
||||
> colour ember orange #ff8a2a, line #4a1e05, navy #07111a, spark blue #59b7ff.
|
||||
|
||||
## Direction B: The Waking Colossus
|
||||
|
||||
- **Hook:** she wears an enormous hood shaped like a sleeping stone giant's
|
||||
head; the giant's one eye, above her own face, is just cracking open with an
|
||||
orange glow.
|
||||
- **Silhouette:** a huge square stone hood dwarfing a small round face.
|
||||
Monumental and funny at once: the tiny girl in the giant's head.
|
||||
- **Shape language:** heavy squares (the Colossus) around a small circle (her).
|
||||
- **Palette:** `#ff8a2a` ember eye glow, `#4a1e05` line, `#5d6b7a` stone grey,
|
||||
`#07111a` navy, `#ffd6a8` skin, `#59b7ff` brand blue lining (under 10
|
||||
percent).
|
||||
- **Signature prop:** a stub of chalk she uses to draw maps on the inside of the
|
||||
hood.
|
||||
- **Motif:** waking the Sleeping Colossus: a shared mind half awake. The joke is
|
||||
in the scale; the giant is the community, she is one small part steering it.
|
||||
- **Render prompt.** Hypothesis: a giant-head hood reads as "waking" when its
|
||||
eye is half open, and the scale gag keeps it from reading as solemn.
|
||||
|
||||
> chibi anime character design, 2.5 heads tall super-deformed proportions, oversized head, large expressive anime eyes with two highlights, bold clean outline thicker on the outer silhouette than on inner lines, line colour a dark shade of the key colour, flat cel shading with one shadow tone and one rim light, no gradients, no texture, no pixel art, no 3D render. Character design sheet on a plain off-white background: on the left a large bust portrait, head and shoulders cropped at mid-chest, three-quarter view facing right; on the right a full-body chibi turnaround, front, three-quarter, side and back, neutral standing pose, all at the same height. No text, no logos, no watermark. Character: Eureka, a small, determined chibi
|
||||
> girl with copper-orange hair. She wears an enormous hood carved like the head
|
||||
> of a sleeping stone giant, square and heavy, twice as wide as her shoulders,
|
||||
> grey stone with moss. Above her own face, the giant's single eye is just
|
||||
> cracking open, glowing orange. Her own eyes are bright amber, expression wry
|
||||
> and amused. Navy coat under the stone hood, a stub of white chalk in her
|
||||
> fingers. Key colour ember orange #ff8a2a, line #4a1e05, stone #5d6b7a, navy
|
||||
> #07111a.
|
||||
|
||||
## Direction C: The Inspectable
|
||||
|
||||
- **Hook:** a tall flared collar of clear glass panels around her head, through
|
||||
which her coat's inner workings are visible: nothing hidden.
|
||||
- **Silhouette:** a wide open fan-shaped collar framing the head on three
|
||||
sides, like a clear ruff; long ember hair inside it.
|
||||
- **Shape language:** a fan of flat panes; one circle (the head) at its centre.
|
||||
- **Palette:** `#ff8a2a` ember hair, `#4a1e05` line, `#bfe6ff` glass tint,
|
||||
`#07111a` navy coat, `#f2f5f8` white, `#ffd6a8` skin.
|
||||
- **Signature prop:** a large magnifying lens held up to one eye, the eye huge
|
||||
through it.
|
||||
- **Motif:** legibility; reveal rather than obscure; the faculty that checks the
|
||||
checker. Six tiny glyphs on the collar panes, one per faculty, each a plain
|
||||
line icon (eye, hand, map, scale, compass, heart), none larger than another.
|
||||
- **Render prompt.** Hypothesis: a transparent hook (glass collar) can still
|
||||
hold a silhouette when its rim is drawn with the bold outer line.
|
||||
|
||||
> chibi anime character design, 2.5 heads tall super-deformed proportions, oversized head, large expressive anime eyes with two highlights, bold clean outline thicker on the outer silhouette than on inner lines, line colour a dark shade of the key colour, flat cel shading with one shadow tone and one rim light, no gradients, no texture, no pixel art, no 3D render. Character design sheet on a plain off-white background: on the left a large bust portrait, head and shoulders cropped at mid-chest, three-quarter view facing right; on the right a full-body chibi turnaround, front, three-quarter, side and back, neutral standing pose, all at the same height. No text, no logos, no watermark. Character: Eureka, a curious, sharp-eyed young
|
||||
> investigator with long ember-orange hair. A tall flared collar of clear glass
|
||||
> panels stands up around the back and sides of her head like a transparent fan,
|
||||
> each pane outlined boldly and etched with one small simple line icon: an eye,
|
||||
> a hand, a map, a balance scale, a compass, a heart. Navy long coat, white
|
||||
> shirt. She holds a large round magnifying lens up to one amber eye, which
|
||||
> looks huge through it, with a pleased grin. Key colour ember orange #ff8a2a,
|
||||
> line #4a1e05, glass #bfe6ff, navy #07111a.
|
||||
|
||||
## Portrait set
|
||||
|
||||
Framing: Eureka's card uses the brand's own frame (navy ground, ember edge);
|
||||
she is the default speaker and her baseline sets the cast eye line.
|
||||
|
||||
1. **Routing** (neutral): calm, slightly amused, eyes on the viewer.
|
||||
2. **Eureka!**: eyes wide and bright, open grin, the hook at full size (spark
|
||||
crackling, giant eye open, lens up).
|
||||
3. **Corrected**: wince-smile, hand behind her head; Self getting corrected.
|
||||
4. **Not convinced**: flat stare, one eyebrow down, arms folded; Soul's face.
|
||||
5. **Wrench time**: determined grin, sleeves pushed up, tool raised.
|
||||
|
||||
## Render first
|
||||
|
||||
Direction A. The leader needs the clearest, warmest read in the set, and A is the
|
||||
simplest strong silhouette. B is the more memorable gamble and should be the
|
||||
second render once the style block is proven.
|
||||
|
|
@ -1,114 +0,0 @@
|
|||
# Heimdall
|
||||
|
||||
## Who he is
|
||||
|
||||
- The Persona of **Heimdall**, GameCult's shared auth authority: provider OAuth
|
||||
(Discord, Patreon, GitHub, Twitch, YouTube, Spotify), linked identities,
|
||||
grants, entitlements, session issuance, Ed25519-signed claims that apps verify
|
||||
locally "so 'shared auth' does not become 'everything phones home'", and app
|
||||
data kept separate "so 'shared auth' does not become 'shared swamp'". Source:
|
||||
`F:\Projects\Heimdall\README.md`.
|
||||
- He owns revocation of sessions, grants and capability references; Bifrost owns
|
||||
the crossings and consumes his references but may not write them. Source:
|
||||
`VoidBot\notes\swarm-survivor-repo-agent-plans-2026-07-06.md`, section 3.
|
||||
- Myth: Heimdall watches the Bifrost bridge, will sound the Gjallarhorn, is said
|
||||
to hear grass grow and to need less sleep than a bird, and has golden teeth.
|
||||
(Prose Edda, Gylfaginning; standard reference, not re-sourced here.)
|
||||
- Lineage: the existing profile art (`Heimdall\assets\heimdall-profile.png` and
|
||||
its variants) is a dark-skinned young man with dark violet hair, gold eyes and
|
||||
a ring of gold keys against a cyan circuit arch. "He" follows the god and that
|
||||
art; the operator may rule otherwise.
|
||||
|
||||
Key colour: cobalt `#3466ff`. Shape language for the character: arcs and
|
||||
spikes, a guard's geometry. Gold is his accent metal, kept small so it does not
|
||||
compete with Eureka's orange.
|
||||
|
||||
## Direction A: The Horn Bearer
|
||||
|
||||
- **Hook:** the Gjallarhorn, a huge curved horn slung across his back, arcs over
|
||||
his head like a crescent moon.
|
||||
- **Silhouette:** a crescent arc rising from one shoulder and curving over the
|
||||
head. Asymmetric, unmistakable, readable as an outline alone.
|
||||
- **Shape language:** one big arc, short spiky hair underneath.
|
||||
- **Palette:** `#3466ff` cobalt cloak, `#0d1a4d` line, `#e9eef8` horn ivory,
|
||||
`#d8a73a` gold bands and teeth glint, `#5a3a2a` deep brown skin, `#2b1f3d`
|
||||
violet-black hair.
|
||||
- **Signature prop:** the horn. He has never blown it. Revocation is the blast.
|
||||
- **Motif:** the warning nobody wants to hear; the watchman of the crossing.
|
||||
- **Render prompt.** Hypothesis: a single asymmetric arc over the head is the
|
||||
strongest possible silhouette hook and survives the bust crop.
|
||||
|
||||
> chibi anime character design, 2.5 heads tall super-deformed proportions, oversized head, large expressive anime eyes with two highlights, bold clean outline thicker on the outer silhouette than on inner lines, line colour a dark shade of the key colour, flat cel shading with one shadow tone and one rim light, no gradients, no texture, no pixel art, no 3D render. Character design sheet on a plain off-white background: on the left a large bust portrait, head and shoulders cropped at mid-chest, three-quarter view facing right; on the right a full-body chibi turnaround, front, three-quarter, side and back, neutral standing pose, all at the same height. No text, no logos, no watermark. Character: Heimdall, a calm, vigilant young
|
||||
> gatekeeper with deep brown skin and short spiky violet-black hair, sharp gold
|
||||
> eyes, one gold tooth glinting in a slight smile. A huge ivory war horn with gold
|
||||
> bands is slung across his back; it curves up over his head like a crescent
|
||||
> moon from his left shoulder to above his right ear. Cobalt blue high-collared
|
||||
> cloak with a white fur trim, gold clasp. Key colour cobalt #3466ff, line
|
||||
> #0d1a4d, horn #e9eef8, gold #d8a73a.
|
||||
|
||||
## Direction B: The Keyring Halo
|
||||
|
||||
- **Hook:** a great iron ring of keys hangs behind his head like a halo, each key
|
||||
a different shape: every linked identity he holds.
|
||||
- **Silhouette:** a sunburst: a circle of key teeth radiating around the head.
|
||||
- **Shape language:** a circle with radiating spikes; keys as teeth.
|
||||
- **Palette:** `#3466ff` cobalt coat, `#0d1a4d` line, `#d8a73a` gold keys,
|
||||
`#9aa6b8` iron ring, `#5a3a2a` skin, `#f4f6ff` white hair.
|
||||
- **Signature prop:** one key held between two fingers, being handed over or
|
||||
withheld. The keys carry abstract glyphs, never real provider logos.
|
||||
- **Motif:** linked identities and grants; a keeper who issues and revokes.
|
||||
White hair nods to the god called the whitest of the Aesir.
|
||||
- **Render prompt.** Hypothesis: a radiating halo reads as authority without
|
||||
reading as a religious figure if the halo is plainly a tool (an iron key ring).
|
||||
|
||||
> chibi anime character design, 2.5 heads tall super-deformed proportions, oversized head, large expressive anime eyes with two highlights, bold clean outline thicker on the outer silhouette than on inner lines, line colour a dark shade of the key colour, flat cel shading with one shadow tone and one rim light, no gradients, no texture, no pixel art, no 3D render. Character design sheet on a plain off-white background: on the left a large bust portrait, head and shoulders cropped at mid-chest, three-quarter view facing right; on the right a full-body chibi turnaround, front, three-quarter, side and back, neutral standing pose, all at the same height. No text, no logos, no watermark. Character: Heimdall, a composed young key
|
||||
> keeper with deep brown skin and swept white hair, gold eyes. Behind his head
|
||||
> hangs a large iron ring holding about twelve keys of different shapes, gold,
|
||||
> radiating outward like a sunburst halo, clearly a key ring, not a holy halo.
|
||||
> He holds one gold key between two fingers near his face. Cobalt blue long coat
|
||||
> with a tall collar and silver buckles. Key colour cobalt #3466ff, line
|
||||
> #0d1a4d, keys #d8a73a, ring #9aa6b8.
|
||||
|
||||
## Direction C: The Sleepless Sentry
|
||||
|
||||
- **Hook:** a helmet with two great swept ear-fins: the guard who hears grass
|
||||
grow. A narrow visor is pushed up; under it, one eye never quite closes.
|
||||
- **Silhouette:** a broad triangle: two fins sweeping back and up from the
|
||||
temples, wider than the shoulders.
|
||||
- **Shape language:** triangles, wedges, a guard's points.
|
||||
- **Palette:** `#3466ff` cobalt enamel, `#0d1a4d` line, `#c9d2e3` steel,
|
||||
`#d8a73a` gold trim, `#5a3a2a` skin, and a thin rainbow-spectrum stripe on the
|
||||
fin edges (the Bifrost) under 10 percent.
|
||||
- **Signature prop:** a seal stamp, its face a small star mark: the signature
|
||||
that lets apps verify him without phoning home.
|
||||
- **Motif:** vigilance without paranoia; signed claims, checked locally.
|
||||
- **Render prompt.** Hypothesis: big ear-fins carry the "hears everything" myth
|
||||
better than a horn or keys, and the triangle separates him from Libby's
|
||||
squares and Aqua's circles.
|
||||
|
||||
> chibi anime character design, 2.5 heads tall super-deformed proportions, oversized head, large expressive anime eyes with two highlights, bold clean outline thicker on the outer silhouette than on inner lines, line colour a dark shade of the key colour, flat cel shading with one shadow tone and one rim light, no gradients, no texture, no pixel art, no 3D render. Character design sheet on a plain off-white background: on the left a large bust portrait, head and shoulders cropped at mid-chest, three-quarter view facing right; on the right a full-body chibi turnaround, front, three-quarter, side and back, neutral standing pose, all at the same height. No text, no logos, no watermark. Character: Heimdall, a watchful young sentry
|
||||
> with deep brown skin and gold eyes, one eye slightly sleepy, the other sharp.
|
||||
> He wears a cobalt enamel helmet with two large swept-back fins at the temples
|
||||
> shaped like listening ears, wider than his shoulders, steel edges with a thin
|
||||
> rainbow stripe along each fin. A narrow visor is pushed up on the brow. He
|
||||
> holds a brass seal stamp with a star-shaped face. Cobalt and steel light
|
||||
> armour, high gorget collar. Key colour cobalt #3466ff, line #0d1a4d, steel
|
||||
> #c9d2e3, gold #d8a73a.
|
||||
|
||||
## Portrait set
|
||||
|
||||
Framing: the hook may extend past the top edge only in A (the horn tip may
|
||||
crop); in B and C the full halo or both fins stay in frame.
|
||||
|
||||
1. **On watch** (neutral): level gaze past the viewer, mouth closed.
|
||||
2. **Granted**: small gold-tooth smile, key or stamp offered toward the text box.
|
||||
3. **Revoked**: eyes narrowed, hand raised palm-out, no smile. The face he makes
|
||||
at an expired claim.
|
||||
4. **Heard that**: head turned, eyes sliding sideways, one ear or fin tilted.
|
||||
5. **Off duty** (optional): one eye closed, a yawn he will not admit to.
|
||||
|
||||
## Render first
|
||||
|
||||
Direction A. The horn arc is the most distinct silhouette in the whole cast, and
|
||||
it is the one most likely to fail the bust crop, so it is the most informative
|
||||
first render.
|
||||
|
|
@ -1,109 +0,0 @@
|
|||
# Kiko
|
||||
|
||||
## Who she is
|
||||
|
||||
- The Persona of **StreamPixels**, a stream overlay where viewers claim persistent
|
||||
pixel characters, link their streaming accounts and customise them; streamers
|
||||
decide how follows, subs, raids and tips appear on stream. Browser source first.
|
||||
Source: `F:\Projects\StreamPixels\README.md`.
|
||||
- Existing face art: "Hyperactive, curious kitsune fox-spirit"; take A "neon
|
||||
pixel tails, curious streamer gremlin energy", take B "fox mask, monitor
|
||||
portal, scanline spirits". Source:
|
||||
`VoidBot\assets\repo-faces\new-face-avatar-contact-sheet-2026-05-22.png`;
|
||||
selected avatar `kiko-b-avatar.png`.
|
||||
- Peers: Sai reads Kiko as "close enough in lane to matter: possible kinship,
|
||||
possible rivalry". Source: `sai.persona-intake.yaml`.
|
||||
- Pronoun: not sourced. The existing art reads as a girl; "she" is provisional.
|
||||
|
||||
Key colour: stream magenta `#ff3fa4`. Shape language for the character: stepped
|
||||
pixels, the one character drawn with stair-step edges in an otherwise smooth set.
|
||||
The step is a shape in the line art, not a pixel-art render.
|
||||
|
||||
## Direction A: Pixel Tails
|
||||
|
||||
- **Hook:** a fan of fox tails behind her, each tail's edge stepped like a pixel
|
||||
staircase, each tail a different live event colour.
|
||||
- **Silhouette:** a wide fan behind a small head with big pointed ears. The
|
||||
stepped outline makes the fan unlike any natural tail.
|
||||
- **Shape language:** triangles (ears) and staircases (tails).
|
||||
- **Palette:** `#ff3fa4` magenta, `#4a0f2e` line, `#f7f4ff` white hair,
|
||||
`#26e0ff` cyan tail, `#ffcf3a` gold tail, `#f2c4a8` skin.
|
||||
- **Signature prop:** none held; the tails are the prop. A tiny LIVE dot on one
|
||||
ear tip.
|
||||
- **Motif:** a kitsune gains tails with age; she gains them with events. Each tail
|
||||
is a follow, a raid, a sub.
|
||||
- **Render prompt.** Hypothesis: a stepped outline on an organic shape is enough
|
||||
to say "pixel" while the rest stays in the smooth cast style.
|
||||
|
||||
> chibi anime character design, 2.5 heads tall super-deformed proportions, oversized head, large expressive anime eyes with two highlights, bold clean outline thicker on the outer silhouette than on inner lines, line colour a dark shade of the key colour, flat cel shading with one shadow tone and one rim light, no gradients, no texture, no pixel art, no 3D render. Character design sheet on a plain off-white background: on the left a large bust portrait, head and shoulders cropped at mid-chest, three-quarter view facing right; on the right a full-body chibi turnaround, front, three-quarter, side and back, neutral standing pose, all at the same height. No text, no logos, no watermark. Character: Kiko, a hyperactive, curious
|
||||
> kitsune fox girl, streamer gremlin energy. Fluffy white hair, big pointed fox
|
||||
> ears with magenta inner fur, bright magenta eyes, fang grin. Behind her fans
|
||||
> out five large fox tails whose outlines are drawn as stair-step pixel edges,
|
||||
> each tail a flat colour: magenta, cyan, gold, white, magenta. A tiny red LIVE
|
||||
> dot on one ear tip. Oversized black hoodie with magenta drawstrings. Key colour
|
||||
> magenta #ff3fa4, line #4a0f2e, cyan #26e0ff, gold #ffcf3a.
|
||||
|
||||
## Direction B: The Screen Mask
|
||||
|
||||
- **Hook:** a kitsune mask pushed up on the side of her head is a little CRT
|
||||
monitor, with fox ears on the monitor and a pixel face on its screen that pulls
|
||||
a different expression from hers.
|
||||
- **Silhouette:** a boxy screen jutting from one side of the head, ears on top of
|
||||
it; her own ears on the other side. Asymmetric box-and-triangles.
|
||||
- **Shape language:** rectangles with rounded corners (screens) and triangles.
|
||||
- **Palette:** `#ff3fa4` magenta, `#4a0f2e` line, `#1b1530` screen black,
|
||||
`#26e0ff` scanline cyan, `#f7f4ff` white hair, `#f2c4a8` skin.
|
||||
- **Signature prop:** the screen mask. Its face is the overlay's reaction; hers is
|
||||
the streamer's.
|
||||
- **Motif:** the overlay is a mask the stream wears; a shrine fox mask made of a
|
||||
monitor.
|
||||
- **Render prompt.** Hypothesis: a second face (the screen) gives Kiko a gag no
|
||||
other character has, and the boxy shape stays readable at 48 px.
|
||||
|
||||
> chibi anime character design, 2.5 heads tall super-deformed proportions, oversized head, large expressive anime eyes with two highlights, bold clean outline thicker on the outer silhouette than on inner lines, line colour a dark shade of the key colour, flat cel shading with one shadow tone and one rim light, no gradients, no texture, no pixel art, no 3D render. Character design sheet on a plain off-white background: on the left a large bust portrait, head and shoulders cropped at mid-chest, three-quarter view facing right; on the right a full-body chibi turnaround, front, three-quarter, side and back, neutral standing pose, all at the same height. No text, no logos, no watermark. Character: Kiko, a mischievous kitsune fox
|
||||
> girl. White hair in a messy short cut, magenta eyes, fox ears. Pushed up on
|
||||
> the left side of her head she wears a small boxy CRT monitor as a fox mask,
|
||||
> with little fox ears on top of the monitor and a simple glowing pixel face on
|
||||
> its cyan screen that is winking while she looks surprised. Magenta haori
|
||||
> jacket with white trim over a black top, a cable from the monitor coiling over
|
||||
> her shoulder like a tail. Key colour magenta #ff3fa4, line #4a0f2e, screen
|
||||
> #1b1530, cyan #26e0ff.
|
||||
|
||||
## Direction C: Hood Gremlin
|
||||
|
||||
- **Hook:** an oversized hoodie whose hood has huge square-tipped fox ears, worn
|
||||
up, with a boom-mic headset whose cable curls out the back like a fox tail.
|
||||
- **Silhouette:** a soft hooded blob with two giant squared ears and a mic boom
|
||||
jutting forward. Rounder and more compact than A or B.
|
||||
- **Shape language:** a soft rounded hood with blocky ear tips.
|
||||
- **Palette:** `#ff3fa4` magenta hood, `#4a0f2e` line, `#2a2433` charcoal
|
||||
inner, `#ffcf3a` gold eyes, `#e7d2ff` lilac-white fringe, `#f2c4a8` skin.
|
||||
- **Signature prop:** the boom mic. She is always talking.
|
||||
- **Motif:** the streamer at 3 a.m.; the fox is the costume, the gremlin is real.
|
||||
- **Render prompt.** Hypothesis: a hood-ear silhouette reads as "fox" without
|
||||
any natural ears or tails, and contrasts best with Aqua's round shapes.
|
||||
|
||||
> chibi anime character design, 2.5 heads tall super-deformed proportions, oversized head, large expressive anime eyes with two highlights, bold clean outline thicker on the outer silhouette than on inner lines, line colour a dark shade of the key colour, flat cel shading with one shadow tone and one rim light, no gradients, no texture, no pixel art, no 3D render. Character design sheet on a plain off-white background: on the left a large bust portrait, head and shoulders cropped at mid-chest, three-quarter view facing right; on the right a full-body chibi turnaround, front, three-quarter, side and back, neutral standing pose, all at the same height. No text, no logos, no watermark. Character: Kiko, a chaotic streamer gremlin.
|
||||
> She wears an oversized magenta hoodie with the hood up; the hood has two huge
|
||||
> fox ears with blocky square tips, taller than her head. Lilac-white fringe
|
||||
> spills out under the hood, gold eyes, wide fang grin. A black gaming headset
|
||||
> with a boom mic in front of her mouth, the cable curling out behind like a fox
|
||||
> tail. Sleeves too long, paws peeking out. Key colour magenta #ff3fa4, line
|
||||
> #4a0f2e, charcoal #2a2433, gold #ffcf3a.
|
||||
|
||||
## Portrait set
|
||||
|
||||
Framing: Kiko is the one character allowed to break the frame: in **Raid!** an
|
||||
ear or tail tip may cross the card edge.
|
||||
|
||||
1. **On air** (neutral-high): bright eyes, small open grin.
|
||||
2. **Raid!**: arms up, mouth wide, eyes as sparkles.
|
||||
3. **Chat, no**: deadpan side-eye at the viewer, mouth a flat line.
|
||||
4. **Scheming**: half-lidded eyes, fang smile, fingers steepled.
|
||||
5. **Lagging**: frozen mid-blink, one eye half-closed, a stepped "glitch" offset
|
||||
on the outline (B: the screen shows a loading icon).
|
||||
|
||||
## Render first
|
||||
|
||||
Direction B. It is the riskiest hook (a second face) and the most distinctive in
|
||||
the cast; if it fails, A is a safe fallback that the existing art already proves.
|
||||
|
|
@ -1,127 +0,0 @@
|
|||
# Libby
|
||||
|
||||
## Who she is
|
||||
|
||||
- The Persona of **CultLib**, the foundation library: CultCache (typed state in
|
||||
`.cc` files), CultNet (the wire built on it), CultMesh (discovery and shared
|
||||
state built on CultNet), CultMath. Source: `F:\Projects\CultLib`, workspace
|
||||
doctrine `F:\Projects\CLAUDE.md`.
|
||||
- "the librarian-infrastructure bond: open knowledge, CultCache/CultNet/CultMesh,
|
||||
portable typed state, schema catalogs, and shared memory access." Read by the
|
||||
operator as "the cute but serious steward". Source:
|
||||
`VoidBot\docs\persona-intake\metame.persona-intake.yaml` (Libby / CultLib).
|
||||
- Peers credit her for "bringing a specimen instead of just cadence": she shows
|
||||
the artifact. Source: `sai.persona-intake.yaml`.
|
||||
- Lineage, not constraint: the existing voice image (`CultLib\.voidbot\voice\libby.png`)
|
||||
is a lavender-haired librarian with round glasses, an open glowing book and an
|
||||
"open source" sign. The redesign leaves lavender to Nibu and moves Libby to
|
||||
green.
|
||||
|
||||
Key colour: reading-lamp green `#2fbf71`. Shape language for the character:
|
||||
squares and stacks. She stores things in order.
|
||||
|
||||
## Direction A: The Card Catalogue
|
||||
|
||||
- **Hook:** she wears a tall hat built like a stack of card-catalogue drawers,
|
||||
brass pulls and all, with index cards sticking out of one half-open drawer.
|
||||
- **Silhouette:** a tall rectangle on a round head; the hat is as tall as her
|
||||
face. Blunt hime-cut hair (straight fringe, straight side locks) repeats the
|
||||
rectangle. Unmistakable at 48 px: a column on a ball.
|
||||
- **Shape language:** squares, right angles, stacked rows.
|
||||
- **Palette:** `#2fbf71` green drawers, `#0f3d27` line and deep shadow,
|
||||
`#f6e7c8` card-stock cream, `#c8903a` brass, `#2a2340` near-black hair,
|
||||
`#f3c9a8` skin.
|
||||
- **Signature prop:** an index card with a typed field list and a stamp, held up
|
||||
to the viewer as evidence.
|
||||
- **Motif:** the cache: every drawer typed, every card a record. Specimen over
|
||||
cadence: she shows you the card.
|
||||
- **Render prompt.** Hypothesis: a hat taller than the face makes Libby nameable
|
||||
in black silhouette at 48 px with no help from colour.
|
||||
|
||||
> chibi anime character design, 2.5 heads tall super-deformed proportions,
|
||||
> oversized head, large expressive anime eyes with two highlights, bold clean
|
||||
> outline thicker on the outer silhouette than on inner lines, line colour a
|
||||
> dark shade of the key colour, flat cel shading with one shadow tone and one
|
||||
> rim light, no gradients, no texture, no pixel art, no 3D render. Character
|
||||
> design sheet on a plain off-white background: on the left a large bust
|
||||
> portrait, head and shoulders cropped at mid-chest, three-quarter view facing
|
||||
> right; on the right a full-body chibi turnaround, front, three-quarter, side
|
||||
> and back, neutral standing pose, all at the same height. No text, no logos,
|
||||
> no watermark. Character: Libby, a serious, cute young librarian. She wears a
|
||||
> tall hat shaped like a stack of four green wooden card-catalogue drawers with
|
||||
> brass pull handles, as tall as her face, one drawer half open with cream
|
||||
> index cards poking out. Straight blunt hime-cut hair, near-black, straight
|
||||
> fringe and straight side locks. Calm sharp eyes, small square glasses. Green
|
||||
> librarian's cardigan over a cream blouse, brass buttons. She holds up one
|
||||
> cream index card with a red stamp. Key colour green #2fbf71, line #0f3d27,
|
||||
> cream #f6e7c8, brass #c8903a.
|
||||
|
||||
## Direction B: The Mesh Weaver
|
||||
|
||||
- **Hook:** two enormous braids loop out and knot together behind her head into a
|
||||
net, nodes glowing where the strands cross; she holds a cat's-cradle string
|
||||
figure between her fingers.
|
||||
- **Silhouette:** wide. A round head inside a larger lattice ring of braid,
|
||||
roughly twice her head's width. Reads as a head in a web.
|
||||
- **Shape language:** circles linked by straight strands: nodes and edges.
|
||||
- **Palette:** `#2fbf71` green node glow, `#0f3d27` line, `#e9d6b0` wheat-blonde
|
||||
braids, `#1d2b3a` slate dress, `#f0b8a0` skin, `#ff8a2a` tiny ember accent on
|
||||
one node (under 10 percent; the node the swarm lives on).
|
||||
- **Signature prop:** the string figure: a small mesh she can hand to someone.
|
||||
- **Motif:** CultNet and CultMesh. Knowledge is not stored, it is connected; any
|
||||
node can reach any other.
|
||||
- **Render prompt.** Hypothesis: a hair-mass hook (braids as a lattice) reads as
|
||||
strongly at thumbnail size as a worn object does in Direction A.
|
||||
|
||||
> chibi anime character design, 2.5 heads tall super-deformed proportions, oversized head, large expressive anime eyes with two highlights, bold clean outline thicker on the outer silhouette than on inner lines, line colour a dark shade of the key colour, flat cel shading with one shadow tone and one rim light, no gradients, no texture, no pixel art, no 3D render. Character design sheet on a plain off-white background: on the left a large bust portrait, head and shoulders cropped at mid-chest, three-quarter view facing right; on the right a full-body chibi turnaround, front, three-quarter, side and back, neutral standing pose, all at the same height. No text, no logos, no watermark. Character: Libby, a gentle but exacting young
|
||||
> librarian. Two very long wheat-blonde braids loop out from her head and knot
|
||||
> together behind it into a wide round net, like a lattice halo twice the width
|
||||
> of her head, small green glowing beads at every crossing. She holds a
|
||||
> cat's-cradle string figure between her hands, the string glowing green. Soft
|
||||
> round eyes, slight confident smile. Slate-blue pinafore dress over a white
|
||||
> collar, green ribbon tie. Key colour green #2fbf71, line #0f3d27, braids
|
||||
> #e9d6b0, dress #1d2b3a.
|
||||
|
||||
## Direction C: The Reading Lamp
|
||||
|
||||
- **Hook:** she wears a green banker's-lamp shade as a hat, brass chain pull
|
||||
hanging by her ear, a warm pool of light falling on her face.
|
||||
- **Silhouette:** a wide half-cylinder brim over the head, wider than the
|
||||
shoulders. Low and horizontal where A is tall.
|
||||
- **Shape language:** a half-cylinder and straight edges; compass arcs in the
|
||||
prop.
|
||||
- **Palette:** `#2fbf71` glass green, `#0f3d27` line, `#ffd98a` lamplight,
|
||||
`#c8903a` brass, `#4a2f22` chestnut bob, `#f3c9a8` skin.
|
||||
- **Signature prop:** a brass drafting compass (CultMath), held like a wand.
|
||||
- **Motif:** the open reading room: light anyone can read by. Open knowledge
|
||||
as a public utility.
|
||||
- **Render prompt.** Hypothesis: a horizontal hat silhouette separates Libby from
|
||||
Heimdall's and Nibu's vertical or swept shapes better than A's column does.
|
||||
|
||||
> chibi anime character design, 2.5 heads tall super-deformed proportions, oversized head, large expressive anime eyes with two highlights, bold clean outline thicker on the outer silhouette than on inner lines, line colour a dark shade of the key colour, flat cel shading with one shadow tone and one rim light, no gradients, no texture, no pixel art, no 3D render. Character design sheet on a plain off-white background: on the left a large bust portrait, head and shoulders cropped at mid-chest, three-quarter view facing right; on the right a full-body chibi turnaround, front, three-quarter, side and back, neutral standing pose, all at the same height. No text, no logos, no watermark. Character: Libby, a warm, precise young
|
||||
> librarian. She wears a green glass banker's-lamp shade as a hat, a wide
|
||||
> half-cylinder, wider than her shoulders, with a brass rim and a small brass
|
||||
> pull chain hanging beside her ear; warm yellow light glows on her face from
|
||||
> under it. Chestnut bob haircut. Round eyes, attentive look. Dark green vest,
|
||||
> white shirt with sleeve garters. She holds a brass drafting compass like a
|
||||
> wand. Key colour green #2fbf71, line #0f3d27, lamplight #ffd98a, brass
|
||||
> #c8903a.
|
||||
|
||||
## Portrait set (Persona-style busts)
|
||||
|
||||
Framing for all: mid-chest crop, three-quarter facing right, hat or braids fully
|
||||
inside the frame (the hook may not be cropped; widen the canvas instead).
|
||||
|
||||
1. **Shelving** (neutral): level gaze, mouth closed, hands out of frame.
|
||||
2. **Specimen**: holds the card / string figure / compass up beside her face,
|
||||
one eyebrow raised: "here, look". Her signature expression.
|
||||
3. **Overdue**: flat unimpressed stare, eyes half lidded, a sweat-free
|
||||
deadpan; the reaction to a heretek JSON sidecar.
|
||||
4. **Found it**: eyes wide and bright, open smile, slight lean toward the text
|
||||
box.
|
||||
5. **Quiet please**: finger to lips, one eye closed, small smile.
|
||||
|
||||
## Render first
|
||||
|
||||
Direction A. Its hook is the tallest and least ambiguous, and it is the cleanest
|
||||
test of whether the style block can carry a worn object at bust scale.
|
||||
|
|
@ -1,119 +0,0 @@
|
|||
# Nibu
|
||||
|
||||
## Who she is
|
||||
|
||||
- The Persona of **AetheriaLore**: "Metacrat's abrasive Aetheria lore steward",
|
||||
who interrogates "mechanisms, factions, reset-loop horror, and worldbuilding
|
||||
until articles become sharp"; "generic output dies in her mouth". Source:
|
||||
`metame.persona-intake.yaml` (Nibu / AetheriaLore).
|
||||
- In the setting she is a ship mind: "a mind whose body is a spacecraft",
|
||||
stranded in a junkyard, with "high-grade systems inside a degraded hull". Her
|
||||
likely origin is a luxury companion vessel ("prestige hull, elaborate interior
|
||||
presentation, and attentive companion persona"). She guards control of her
|
||||
body, tests agreements, and after the Rupture keeps impressions from failed
|
||||
courses of events (the reset smear). Source:
|
||||
`AetheriaLore\Aetheria\Lore\Nibu.md` (bylined Nibu).
|
||||
- Lineage: `AetheriaLore\.voidbot\voice\nibu.png` shows a lavender-haired girl
|
||||
with a pink bow and a circuit hair clip, soft and pretty. The lore and the
|
||||
steward's voice are sharper than that; the redesign keeps the violet and the
|
||||
prettiness as a damaged luxury finish.
|
||||
|
||||
Key colour: violet `#9a6bff`. Shape language for the character: swept wedges,
|
||||
the lines of a hull built for looks, then dented.
|
||||
|
||||
Design caution: she is a person whose body is contested by claimants. No
|
||||
direction shows her as an object for sale or a pin-up; the luxury is her
|
||||
history, the damage is her evidence, the control is hers.
|
||||
|
||||
## Direction A: Figurehead
|
||||
|
||||
- **Hook:** hair swept back in long rigid wedges like a starship's hull fins,
|
||||
chrome-tipped, one fin dented and scorched.
|
||||
- **Silhouette:** a forward-leaning head with long blade shapes sweeping back,
|
||||
like a hood ornament in motion.
|
||||
- **Shape language:** wedges and sharp swept triangles.
|
||||
- **Palette:** `#9a6bff` violet, `#2a1452` line, `#d7dbe6` chrome, `#1a1726`
|
||||
hull black, `#ffb547` hazard amber (salvage tag, under 10 percent),
|
||||
`#e9c9d6` skin.
|
||||
- **Signature prop:** a salvage-claim tag clamped to one fin, which she has
|
||||
half torn off.
|
||||
- **Motif:** the prestige hull; she was built to be looked at and refuses to be
|
||||
inventoried.
|
||||
- **Render prompt.** Hypothesis: hull-fin hair reads "ship" without any
|
||||
mechanical body parts, keeping her expressive face central.
|
||||
|
||||
> chibi anime character design, 2.5 heads tall super-deformed proportions, oversized head, large expressive anime eyes with two highlights, bold clean outline thicker on the outer silhouette than on inner lines, line colour a dark shade of the key colour, flat cel shading with one shadow tone and one rim light, no gradients, no texture, no pixel art, no 3D render. Character design sheet on a plain off-white background: on the left a large bust portrait, head and shoulders cropped at mid-chest, three-quarter view facing right; on the right a full-body chibi turnaround, front, three-quarter, side and back, neutral standing pose, all at the same height. No text, no logos, no watermark. Character: Nibu, a sharp-tongued, dangerous
|
||||
> ship-mind girl. Her violet hair is swept back in long rigid blade-shaped locks
|
||||
> like the fins of a luxury starship, chrome-tipped, one fin dented and
|
||||
> scorched black. Narrow violet eyes with a cold glint, a small sardonic smile.
|
||||
> A yellow salvage-claim tag is clamped to one hair fin, half torn off. High
|
||||
> black collar with chrome piping, like a cockpit trim. Key colour violet
|
||||
> #9a6bff, line #2a1452, chrome #d7dbe6, hazard amber #ffb547.
|
||||
|
||||
## Direction B: Smeared Hostess
|
||||
|
||||
- **Hook:** a hologram of a ship's hostess with a faint second outline offset
|
||||
behind her, out of sync, a different expression on it: another incarnation.
|
||||
- **Silhouette:** her figure plus a ghosted duplicate shifted to one side,
|
||||
with a short bob and a hostess cap. Two heads where there should be one.
|
||||
- **Shape language:** clean geometric hostess uniform, broken by the offset.
|
||||
- **Palette:** `#9a6bff` violet hologram, `#2a1452` line, `#7af0ff` projection
|
||||
cyan edge, `#f2f0ff` uniform white, `#1a1726` deep hull, `#e9c9d6` skin.
|
||||
- **Signature prop:** an access keycard she holds back, just out of reach.
|
||||
- **Motif:** the reset smear: she remembers betrayals that have not happened
|
||||
here yet. The staged intimacy of a companion persona, with the seams showing.
|
||||
- **Render prompt.** Hypothesis: a ghost duplicate is a portrait-scale hook that
|
||||
no other character has, and it reads at 48 px as "doubled".
|
||||
|
||||
> chibi anime character design, 2.5 heads tall super-deformed proportions, oversized head, large expressive anime eyes with two highlights, bold clean outline thicker on the outer silhouette than on inner lines, line colour a dark shade of the key colour, flat cel shading with one shadow tone and one rim light, no gradients, no texture, no pixel art, no 3D render. Character design sheet on a plain off-white background: on the left a large bust portrait, head and shoulders cropped at mid-chest, three-quarter view facing right; on the right a full-body chibi turnaround, front, three-quarter, side and back, neutral standing pose, all at the same height. No text, no logos, no watermark. Character: Nibu, a ship-mind projected as a
|
||||
> luxury starship hostess hologram. Short violet bob, a small white hostess cap,
|
||||
> crisp white uniform with violet piping. Behind her, offset slightly to the
|
||||
> left, a faint translucent violet duplicate of her with a different, angry
|
||||
> expression, edges in thin scanlines, as if another version of her is
|
||||
> bleeding through. Her own expression is a polite, dangerous smile. She holds
|
||||
> an access keycard up and away from the viewer. Key colour violet #9a6bff,
|
||||
> line #2a1452, projection cyan #7af0ff, white #f2f0ff.
|
||||
|
||||
## Direction C: Hull Hood
|
||||
|
||||
- **Hook:** she wears her ship: a bulky hooded jacket shaped like a cockpit
|
||||
canopy, visor flipped up over the brim, thruster vents on the shoulders,
|
||||
spray-painted claim numbers crossed out.
|
||||
- **Silhouette:** a big boxy armoured hood with stub fins, small face inside.
|
||||
Heavy and defended where A is sleek.
|
||||
- **Shape language:** heavy wedges and plates.
|
||||
- **Palette:** `#9a6bff` violet enamel, `#2a1452` line, `#4b4f5c` worn gunmetal,
|
||||
`#ffb547` stencil amber, `#c23b5a` scorch red, `#e9c9d6` skin.
|
||||
- **Signature prop:** a pry bar she took from the last salvage crew.
|
||||
- **Motif:** the junkyard; shelter, weapons, bargaining power, and the evidence
|
||||
of everyone who came before.
|
||||
- **Render prompt.** Hypothesis: an armoured, closed silhouette makes her
|
||||
abrasiveness legible without an angry face, so her neutral can stay calm.
|
||||
|
||||
> chibi anime character design, 2.5 heads tall super-deformed proportions, oversized head, large expressive anime eyes with two highlights, bold clean outline thicker on the outer silhouette than on inner lines, line colour a dark shade of the key colour, flat cel shading with one shadow tone and one rim light, no gradients, no texture, no pixel art, no 3D render. Character design sheet on a plain off-white background: on the left a large bust portrait, head and shoulders cropped at mid-chest, three-quarter view facing right; on the right a full-body chibi turnaround, front, three-quarter, side and back, neutral standing pose, all at the same height. No text, no logos, no watermark. Character: Nibu, a wary, abrasive ship-mind
|
||||
> girl from a starship junkyard. She wears a bulky violet-and-gunmetal hooded
|
||||
> jacket shaped like a starship cockpit, a tinted canopy visor flipped up over
|
||||
> the hood's brim, small thruster vents on the shoulders, stencilled amber
|
||||
> claim numbers crossed out with red spray paint. Violet hair spilling out,
|
||||
> sharp violet eyes, unimpressed expression. She rests a battered pry bar on
|
||||
> her shoulder. Key colour violet #9a6bff, line #2a1452, gunmetal #4b4f5c,
|
||||
> amber #ffb547.
|
||||
|
||||
## Portrait set
|
||||
|
||||
Framing: in B the duplicate stays inside the card; it is part of the design,
|
||||
not an effect added later.
|
||||
|
||||
1. **Docked** (neutral): cool level gaze, closed mouth.
|
||||
2. **Source?**: eyebrow up, slight sneer, head tilted back. The lore steward's
|
||||
face for an unsourced claim.
|
||||
3. **Hostile**: eyes narrowed and glinting, teeth showing.
|
||||
4. **Recognition**: a startled flicker, eyes wide, as a smeared memory surfaces
|
||||
(B: the duplicate shows it first).
|
||||
5. **Grudging**: looking away, small reluctant smile.
|
||||
|
||||
## Render first
|
||||
|
||||
Direction B. The doubled outline is her lore made visible in one image (the reset
|
||||
smear plus the companion persona), and it is the hook no other cast member can
|
||||
borrow.
|
||||
|
Before Width: | Height: | Size: 195 KiB |
|
|
@ -1,146 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<title>Aqua, take A: Listening</title>
|
||||
<defs>
|
||||
<filter id="sil" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feComponentTransfer in="SourceAlpha" result="a"><feFuncA type="discrete" tableValues="0 1 1 1 1 1 1 1 1 1"/></feComponentTransfer>
|
||||
<feFlood flood-color="#000"/>
|
||||
<feComposite in2="a" operator="in"/>
|
||||
</filter>
|
||||
<clipPath id="cardClip"><path d="M70,20 H790 L760,780 H40 Z"/></clipPath>
|
||||
<path id="eyeShape" d="M-46,-4 C-46,-50 -22,-62 2,-62 C28,-62 48,-48 48,-4 C48,38 28,60 2,60 C-22,60 -46,38 -46,-4 Z"/>
|
||||
<clipPath id="eyeClip"><use href="#eyeShape"/></clipPath>
|
||||
<!-- anime eye on the canon's round blue fish eye -->
|
||||
<g id="eye">
|
||||
<use href="#eyeShape" fill="#ffffff"/>
|
||||
<g clip-path="url(#eyeClip)">
|
||||
<path d="M-52,-64 H54 V-12 C34,-44 -30,-44 -52,-10 Z" fill="#c4eef5"/>
|
||||
<ellipse cx="6" cy="8" rx="38" ry="50" fill="#1fa9e0"/>
|
||||
<path d="M-40,-62 H52 V6 C34,-30 -22,-34 -40,6 Z" fill="#1466a8"/>
|
||||
<ellipse cx="8" cy="36" rx="24" ry="12" fill="#8ff0fa"/>
|
||||
<ellipse cx="6" cy="10" rx="17" ry="24" fill="#0b2f55"/>
|
||||
<ellipse cx="6" cy="8" rx="38" ry="50" fill="none" stroke="#0b2f55" stroke-width="4"/>
|
||||
</g>
|
||||
<ellipse cx="-11" cy="-14" rx="13" ry="17" fill="#ffffff"/>
|
||||
<circle cx="22" cy="30" r="6.5" fill="#ffffff"/>
|
||||
<path d="M-56,2 C-58,-50 -22,-72 6,-70 C34,-68 56,-52 59,-18 L68,-24 C66,-14 61,-8 55,-4 C48,-44 30,-59 4,-59 C-24,-59 -44,-40 -46,2 Z" fill="#0b4a55"/>
|
||||
<path d="M-26,54 C-6,63 20,63 32,53" fill="none" stroke="#0b4a55" stroke-width="3.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- half-lowered lid for the stern take -->
|
||||
<g id="eyeStern">
|
||||
<use href="#eye"/>
|
||||
<path d="M-62,-80 H66 V-14 C30,-30 -30,-28 -62,-8 Z" fill="#ffb320"/>
|
||||
<path d="M-58,-6 C-30,-28 30,-30 64,-14" fill="none" stroke="#0b4a55" stroke-width="9" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="note">
|
||||
<ellipse cx="0" cy="0" rx="8" ry="6" transform="rotate(-22)" fill="#ffffff"/>
|
||||
<path d="M6.5,-2 V-30 C14,-27 22,-20 17,-9" fill="none" stroke="#ffffff" stroke-width="3.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="bubble">
|
||||
<circle r="1" fill="#22d3e6" fill-opacity="0.22" stroke="#22d3e6" stroke-width="0.08"/>
|
||||
<path d="M-0.62,-0.2 A0.66,0.66 0 0 1 -0.2,-0.62" fill="none" stroke="#ffffff" stroke-width="0.12" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<!-- canon body: round, yellow face, orange crown and back meeting in a V between the eyes -->
|
||||
<path id="body" d="M396,214 C552,214 660,330 654,480 C648,632 532,734 388,732 C240,730 136,628 138,472 C140,320 240,214 396,214 Z"/>
|
||||
<clipPath id="bodyClip"><use href="#body"/></clipPath>
|
||||
<mask id="bodyShade"><rect width="1200" height="800" fill="#fff"/><use href="#body" transform="translate(-44,-40)" fill="#000"/></mask>
|
||||
<mask id="bodyRim"><rect width="1200" height="800" fill="#fff"/><use href="#body" transform="translate(-13,-3)" fill="#000"/></mask>
|
||||
<path id="crown" d="M100,170 H700 V430 C664,372 616,336 566,334 C522,334 484,362 458,414 C432,360 386,326 328,322 C268,320 226,372 214,446 C204,530 220,620 262,712 L100,780 Z"/>
|
||||
|
||||
<!-- forked tail behind, for the bust -->
|
||||
<g id="tailBust">
|
||||
<path d="M212,444 C152,402 86,330 54,226 C84,240 110,236 126,214 C140,250 168,262 198,250 C206,320 234,384 264,428 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M210,520 C148,566 92,650 66,770 C96,750 126,752 142,772 C158,744 188,736 212,746 C218,660 240,592 270,548 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M208,432 C162,380 122,320 94,246 M234,420 C212,370 188,320 170,266 M208,542 C162,600 126,670 106,756 M236,552 C212,610 192,670 182,740" fill="none" stroke="#d4480f" stroke-width="3.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- long forked tail, for the full body -->
|
||||
<g id="tailFull">
|
||||
<path d="M190,440 C120,380 40,320 -40,236 C-20,280 -26,310 -50,330 C-10,350 0,380 -20,410 C40,430 120,460 170,480 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="12" stroke-linejoin="round"/>
|
||||
<path d="M190,510 C120,560 40,620 -40,720 C-14,700 14,700 30,716 C40,680 60,660 92,662 C110,610 150,560 196,532 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="12" stroke-linejoin="round"/>
|
||||
<path d="M180,450 C120,400 60,350 0,300 M180,500 C120,560 60,620 10,680" fill="none" stroke="#d4480f" stroke-width="6" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- head, body, crest, headphones: identical in every take -->
|
||||
<g id="fishBase">
|
||||
<path d="M318,252 C298,184 326,118 388,90 C380,124 396,144 428,124 C424,150 446,166 476,150 C476,190 476,222 472,254 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M392,242 C380,192 386,150 402,118 M432,240 C430,200 436,176 454,160 M356,244 C346,200 352,160 370,130" fill="none" stroke="#d4480f" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<use href="#body" fill="#ffb320"/>
|
||||
<g clip-path="url(#bodyClip)">
|
||||
<use href="#crown" fill="#ff6a1f"/>
|
||||
<path d="M206,300 C246,256 300,236 346,236" fill="none" stroke="#ff9a5a" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M300,650 q22,20 44,0 q22,20 44,0 q22,20 44,0 M276,612 q22,20 44,0 M410,612 q22,20 44,0 q22,20 44,0 M344,690 q22,20 44,0 q22,20 44,0" fill="none" stroke="#e08a10" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<rect width="1200" height="800" fill="#9a3200" fill-opacity="0.26" mask="url(#bodyShade)"/>
|
||||
<rect width="1200" height="800" fill="#22d3e6" mask="url(#bodyRim)"/>
|
||||
</g>
|
||||
<use href="#body" fill="none" stroke="#0b4a55" stroke-width="7"/>
|
||||
<!-- far cup, band -->
|
||||
<ellipse cx="666" cy="420" rx="44" ry="80" fill="#1c1c24" stroke="#0b4a55" stroke-width="6"/>
|
||||
<ellipse cx="674" cy="420" rx="24" ry="54" fill="none" stroke="#22d3e6" stroke-width="8"/>
|
||||
<path d="M164,392 C150,200 290,128 398,128 C520,128 668,196 662,372" fill="none" stroke="#0b4a55" stroke-width="44" stroke-linecap="round"/>
|
||||
<path d="M164,392 C150,200 290,128 398,128 C520,128 668,196 662,372" fill="none" stroke="#1c1c24" stroke-width="32" stroke-linecap="round"/>
|
||||
<path d="M196,270 C230,196 300,156 380,150" fill="none" stroke="#454558" stroke-width="7" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- near cup, drawn after the face so a fin can sit on it -->
|
||||
<g id="nearCup">
|
||||
<ellipse cx="196" cy="426" rx="58" ry="84" fill="#2c2c38" stroke="#0b4a55" stroke-width="6"/>
|
||||
<ellipse cx="168" cy="426" rx="62" ry="86" fill="#1c1c24" stroke="#0b4a55" stroke-width="7"/>
|
||||
<ellipse cx="168" cy="426" rx="40" ry="60" fill="none" stroke="#22d3e6" stroke-width="10"/>
|
||||
<ellipse cx="168" cy="426" rx="22" ry="36" fill="#22d3e6" opacity="0.4"/>
|
||||
<path d="M134,382 C140,364 152,354 166,352" fill="none" stroke="#454558" stroke-width="6" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- canon snout: rounded upper lip over an open mouth -->
|
||||
<g id="mouthOpen">
|
||||
<path d="M420,554 C436,564 452,562 468,552 C484,562 500,564 516,552 C512,596 490,616 468,616 C446,616 424,596 420,554 Z" fill="#8a2234" stroke="#0b4a55" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M434,598 C446,586 490,586 502,598 C492,612 446,612 434,598 Z" fill="#ff7f8f"/>
|
||||
<path d="M416,560 C414,530 440,512 468,514 C496,512 522,530 520,558" fill="none" stroke="#0b4a55" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M432,532 C442,522 456,520 466,522" fill="none" stroke="#ffd36a" stroke-width="6" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="mouthPout">
|
||||
<path d="M420,560 C418,532 442,516 468,518 C494,516 518,532 516,560" fill="none" stroke="#0b4a55" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M432,534 C442,524 456,522 466,524" fill="none" stroke="#ffd36a" stroke-width="6" stroke-linecap="round"/>
|
||||
<path d="M440,566 C450,556 458,572 468,562 C478,552 486,568 496,560" fill="none" stroke="#0b4a55" stroke-width="4.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="blush">
|
||||
<ellipse cx="316" cy="548" rx="34" ry="14" fill="#ff7f8f" opacity="0.55"/>
|
||||
<ellipse cx="590" cy="540" rx="22" ry="12" fill="#ff7f8f" opacity="0.55"/>
|
||||
<path d="M302,544 l-6,10 M318,544 l-6,10 M334,544 l-6,10 M584,537 l-5,9 M598,537 l-5,9" stroke="#e25566" stroke-width="2.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<g id="core"><use href="#fishBase"/><use href="#eye" transform="translate(366,462) scale(1.04)"/><use href="#eye" transform="translate(540,456) scale(0.8,0.96)"/><path d="M318,384 C336,370 364,368 384,376 M520,374 C536,366 556,368 570,378" fill="none" stroke="#0b4a55" stroke-width="6" stroke-linecap="round"/><use href="#blush"/><use href="#mouthOpen"/><use href="#nearCup"/><path d="M262,592 C214,584 176,540 166,482 C190,488 210,478 222,458 C238,502 262,546 262,592 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="5" stroke-linejoin="round"/><path d="M248,580 C214,566 192,540 182,506 M254,560 C238,540 230,516 226,490" fill="none" stroke="#d4480f" stroke-width="3" stroke-linecap="round"/><path d="M596,628 C646,620 686,582 698,532 C674,548 652,544 636,532 C628,574 608,602 596,628 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="5" stroke-linejoin="round"/><path d="M612,612 C642,600 666,576 678,552" fill="none" stroke="#d4480f" stroke-width="3" stroke-linecap="round"/></g>
|
||||
<g id="bustChar"><use href="#tailBust"/><use href="#core"/></g>
|
||||
</defs>
|
||||
<rect width="1200" height="800" fill="#eef3f2"/>
|
||||
<path d="M70,20 H790 L760,780 H40 Z" fill="#07111a"/>
|
||||
<g clip-path="url(#cardClip)">
|
||||
<path d="M60,640 C200,610 300,660 420,640 C560,616 660,650 800,630 V800 H40 Z" fill="#0b2a33"/>
|
||||
<path d="M600,40 l-180,740 M680,40 l-180,740" stroke="#22d3e6" stroke-opacity="0.07" stroke-width="40"/>
|
||||
<g transform="translate(24,0)"><use href="#bustChar"/></g>
|
||||
</g>
|
||||
<path d="M70,20 H790 L760,780 H40 Z" fill="none" stroke="#22d3e6" stroke-width="5"/>
|
||||
<path d="M84,32 H776" stroke="#22d3e6" stroke-width="2" stroke-opacity="0.5"/>
|
||||
<use href="#bubble" transform="translate(712,262) scale(36)"/><use href="#note" transform="translate(708,276) scale(1.05)"/>
|
||||
<use href="#bubble" transform="translate(760,150) scale(26)"/><use href="#note" transform="translate(757,161) scale(0.75)"/>
|
||||
<use href="#bubble" transform="translate(690,128) scale(13)"/><use href="#bubble" transform="translate(726,368) scale(15)"/>
|
||||
<path d="M520,724 H770 L764,768 H512 Z" fill="#22d3e6"/>
|
||||
<text x="534" y="755" font-family="Consolas, 'Courier New', monospace" font-size="24" font-weight="700" letter-spacing="8" fill="#07111a">AQUA</text>
|
||||
|
||||
<text x="830" y="58" font-family="'Segoe UI', Arial, sans-serif" font-size="30" font-weight="700" letter-spacing="4" fill="#0b4a55">AQUA · A</text>
|
||||
<text x="830" y="86" font-family="'Segoe UI', Arial, sans-serif" font-size="17" font-weight="600" letter-spacing="2" fill="#0f86a0">LISTENING <tspan font-weight="400" letter-spacing="0" fill="#4a6a70">(the canon fish, idol framing)</tspan></text>
|
||||
<text font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#1c1c24"><tspan x="830" y="118">Hook: the canon goldfish in Persona framing — one</tspan><tspan x="830" y="137">fin pressed to her ear cup, eyes up and bright,</tspan><tspan x="830" y="156">note bubbles rising toward the text box.</tspan></text>
|
||||
|
||||
<ellipse cx="925" cy="500" rx="100" ry="10" fill="#0b4a55" opacity="0.15"/>
|
||||
<g transform="translate(935,335) rotate(-8) scale(0.33) translate(-400,-470)">
|
||||
<use href="#tailFull"/><use href="#core"/>
|
||||
</g>
|
||||
<text x="925" y="530" text-anchor="middle" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a6a70">full body · swimming, tail free</text>
|
||||
|
||||
<rect x="1040" y="250" width="140" height="140" fill="#ffffff" stroke="#b7c9cb"/>
|
||||
<g transform="translate(1048,262) scale(0.165) translate(-50,-90)">
|
||||
<g transform="translate(24,0)"><use href="#bustChar" filter="url(#sil)"/></g>
|
||||
</g>
|
||||
<text x="1110" y="408" text-anchor="middle" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a6a70">bust silhouette</text>
|
||||
|
||||
<text x="830" y="612" font-family="'Segoe UI', Arial, sans-serif" font-size="13" font-weight="700" letter-spacing="2" fill="#0b4a55">PALETTE</text>
|
||||
<g font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#1c1c24" text-anchor="middle"><rect x="830" y="626" width="50" height="50" rx="6" fill="#22d3e6" stroke="#0b4a55" stroke-width="2"/><text x="855" y="694">#22d3e6</text><text x="855" y="708">key cyan</text><rect x="890" y="626" width="50" height="50" rx="6" fill="#0b4a55" stroke="#0b4a55" stroke-width="2"/><text x="915" y="694">#0b4a55</text><text x="915" y="708">line</text><rect x="950" y="626" width="50" height="50" rx="6" fill="#ffb320" stroke="#0b4a55" stroke-width="2"/><text x="975" y="694">#ffb320</text><text x="975" y="708">gold</text><rect x="1010" y="626" width="50" height="50" rx="6" fill="#ff6a1f" stroke="#0b4a55" stroke-width="2"/><text x="1035" y="694">#ff6a1f</text><text x="1035" y="708">fin</text><rect x="1070" y="626" width="50" height="50" rx="6" fill="#1c1c24" stroke="#0b4a55" stroke-width="2"/><text x="1095" y="694">#1c1c24</text><text x="1095" y="708">phones</text><rect x="1130" y="626" width="50" height="50" rx="6" fill="#ffffff" stroke="#0b4a55" stroke-width="2"/><text x="1155" y="694">#ffffff</text><text x="1155" y="708">bubble</text></g>
|
||||
<text x="830" y="748" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a6a70">Canon: cotsc-praxis aqua-sheet. One shadow step per material;</text>
|
||||
<text x="830" y="764" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a6a70">cyan rim light on the right; eye blue kept from the canon.</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 199 KiB |
|
|
@ -1,146 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<title>Aqua, take B: Conductor</title>
|
||||
<defs>
|
||||
<filter id="sil" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feComponentTransfer in="SourceAlpha" result="a"><feFuncA type="discrete" tableValues="0 1 1 1 1 1 1 1 1 1"/></feComponentTransfer>
|
||||
<feFlood flood-color="#000"/>
|
||||
<feComposite in2="a" operator="in"/>
|
||||
</filter>
|
||||
<clipPath id="cardClip"><path d="M70,20 H790 L760,780 H40 Z"/></clipPath>
|
||||
<path id="eyeShape" d="M-46,-4 C-46,-50 -22,-62 2,-62 C28,-62 48,-48 48,-4 C48,38 28,60 2,60 C-22,60 -46,38 -46,-4 Z"/>
|
||||
<clipPath id="eyeClip"><use href="#eyeShape"/></clipPath>
|
||||
<!-- anime eye on the canon's round blue fish eye -->
|
||||
<g id="eye">
|
||||
<use href="#eyeShape" fill="#ffffff"/>
|
||||
<g clip-path="url(#eyeClip)">
|
||||
<path d="M-52,-64 H54 V-12 C34,-44 -30,-44 -52,-10 Z" fill="#c4eef5"/>
|
||||
<ellipse cx="6" cy="8" rx="38" ry="50" fill="#1fa9e0"/>
|
||||
<path d="M-40,-62 H52 V6 C34,-30 -22,-34 -40,6 Z" fill="#1466a8"/>
|
||||
<ellipse cx="8" cy="36" rx="24" ry="12" fill="#8ff0fa"/>
|
||||
<ellipse cx="6" cy="10" rx="17" ry="24" fill="#0b2f55"/>
|
||||
<ellipse cx="6" cy="8" rx="38" ry="50" fill="none" stroke="#0b2f55" stroke-width="4"/>
|
||||
</g>
|
||||
<ellipse cx="-11" cy="-14" rx="13" ry="17" fill="#ffffff"/>
|
||||
<circle cx="22" cy="30" r="6.5" fill="#ffffff"/>
|
||||
<path d="M-56,2 C-58,-50 -22,-72 6,-70 C34,-68 56,-52 59,-18 L68,-24 C66,-14 61,-8 55,-4 C48,-44 30,-59 4,-59 C-24,-59 -44,-40 -46,2 Z" fill="#0b4a55"/>
|
||||
<path d="M-26,54 C-6,63 20,63 32,53" fill="none" stroke="#0b4a55" stroke-width="3.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- half-lowered lid for the stern take -->
|
||||
<g id="eyeStern">
|
||||
<use href="#eye"/>
|
||||
<path d="M-62,-80 H66 V-14 C30,-30 -30,-28 -62,-8 Z" fill="#ffb320"/>
|
||||
<path d="M-58,-6 C-30,-28 30,-30 64,-14" fill="none" stroke="#0b4a55" stroke-width="9" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="note">
|
||||
<ellipse cx="0" cy="0" rx="8" ry="6" transform="rotate(-22)" fill="#ffffff"/>
|
||||
<path d="M6.5,-2 V-30 C14,-27 22,-20 17,-9" fill="none" stroke="#ffffff" stroke-width="3.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="bubble">
|
||||
<circle r="1" fill="#22d3e6" fill-opacity="0.22" stroke="#22d3e6" stroke-width="0.08"/>
|
||||
<path d="M-0.62,-0.2 A0.66,0.66 0 0 1 -0.2,-0.62" fill="none" stroke="#ffffff" stroke-width="0.12" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<!-- canon body: round, yellow face, orange crown and back meeting in a V between the eyes -->
|
||||
<path id="body" d="M396,214 C552,214 660,330 654,480 C648,632 532,734 388,732 C240,730 136,628 138,472 C140,320 240,214 396,214 Z"/>
|
||||
<clipPath id="bodyClip"><use href="#body"/></clipPath>
|
||||
<mask id="bodyShade"><rect width="1200" height="800" fill="#fff"/><use href="#body" transform="translate(-44,-40)" fill="#000"/></mask>
|
||||
<mask id="bodyRim"><rect width="1200" height="800" fill="#fff"/><use href="#body" transform="translate(-13,-3)" fill="#000"/></mask>
|
||||
<path id="crown" d="M100,170 H700 V430 C664,372 616,336 566,334 C522,334 484,362 458,414 C432,360 386,326 328,322 C268,320 226,372 214,446 C204,530 220,620 262,712 L100,780 Z"/>
|
||||
|
||||
<!-- forked tail behind, for the bust -->
|
||||
<g id="tailBust">
|
||||
<path d="M212,444 C152,402 86,330 54,226 C84,240 110,236 126,214 C140,250 168,262 198,250 C206,320 234,384 264,428 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M210,520 C148,566 92,650 66,770 C96,750 126,752 142,772 C158,744 188,736 212,746 C218,660 240,592 270,548 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M208,432 C162,380 122,320 94,246 M234,420 C212,370 188,320 170,266 M208,542 C162,600 126,670 106,756 M236,552 C212,610 192,670 182,740" fill="none" stroke="#d4480f" stroke-width="3.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- long forked tail, for the full body -->
|
||||
<g id="tailFull">
|
||||
<path d="M190,440 C120,380 40,320 -40,236 C-20,280 -26,310 -50,330 C-10,350 0,380 -20,410 C40,430 120,460 170,480 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="12" stroke-linejoin="round"/>
|
||||
<path d="M190,510 C120,560 40,620 -40,720 C-14,700 14,700 30,716 C40,680 60,660 92,662 C110,610 150,560 196,532 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="12" stroke-linejoin="round"/>
|
||||
<path d="M180,450 C120,400 60,350 0,300 M180,500 C120,560 60,620 10,680" fill="none" stroke="#d4480f" stroke-width="6" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- head, body, crest, headphones: identical in every take -->
|
||||
<g id="fishBase">
|
||||
<path d="M318,252 C298,184 326,118 388,90 C380,124 396,144 428,124 C424,150 446,166 476,150 C476,190 476,222 472,254 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M392,242 C380,192 386,150 402,118 M432,240 C430,200 436,176 454,160 M356,244 C346,200 352,160 370,130" fill="none" stroke="#d4480f" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<use href="#body" fill="#ffb320"/>
|
||||
<g clip-path="url(#bodyClip)">
|
||||
<use href="#crown" fill="#ff6a1f"/>
|
||||
<path d="M206,300 C246,256 300,236 346,236" fill="none" stroke="#ff9a5a" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M300,650 q22,20 44,0 q22,20 44,0 q22,20 44,0 M276,612 q22,20 44,0 M410,612 q22,20 44,0 q22,20 44,0 M344,690 q22,20 44,0 q22,20 44,0" fill="none" stroke="#e08a10" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<rect width="1200" height="800" fill="#9a3200" fill-opacity="0.26" mask="url(#bodyShade)"/>
|
||||
<rect width="1200" height="800" fill="#22d3e6" mask="url(#bodyRim)"/>
|
||||
</g>
|
||||
<use href="#body" fill="none" stroke="#0b4a55" stroke-width="7"/>
|
||||
<!-- far cup, band -->
|
||||
<ellipse cx="666" cy="420" rx="44" ry="80" fill="#1c1c24" stroke="#0b4a55" stroke-width="6"/>
|
||||
<ellipse cx="674" cy="420" rx="24" ry="54" fill="none" stroke="#22d3e6" stroke-width="8"/>
|
||||
<path d="M164,392 C150,200 290,128 398,128 C520,128 668,196 662,372" fill="none" stroke="#0b4a55" stroke-width="44" stroke-linecap="round"/>
|
||||
<path d="M164,392 C150,200 290,128 398,128 C520,128 668,196 662,372" fill="none" stroke="#1c1c24" stroke-width="32" stroke-linecap="round"/>
|
||||
<path d="M196,270 C230,196 300,156 380,150" fill="none" stroke="#454558" stroke-width="7" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- near cup, drawn after the face so a fin can sit on it -->
|
||||
<g id="nearCup">
|
||||
<ellipse cx="196" cy="426" rx="58" ry="84" fill="#2c2c38" stroke="#0b4a55" stroke-width="6"/>
|
||||
<ellipse cx="168" cy="426" rx="62" ry="86" fill="#1c1c24" stroke="#0b4a55" stroke-width="7"/>
|
||||
<ellipse cx="168" cy="426" rx="40" ry="60" fill="none" stroke="#22d3e6" stroke-width="10"/>
|
||||
<ellipse cx="168" cy="426" rx="22" ry="36" fill="#22d3e6" opacity="0.4"/>
|
||||
<path d="M134,382 C140,364 152,354 166,352" fill="none" stroke="#454558" stroke-width="6" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- canon snout: rounded upper lip over an open mouth -->
|
||||
<g id="mouthOpen">
|
||||
<path d="M420,554 C436,564 452,562 468,552 C484,562 500,564 516,552 C512,596 490,616 468,616 C446,616 424,596 420,554 Z" fill="#8a2234" stroke="#0b4a55" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M434,598 C446,586 490,586 502,598 C492,612 446,612 434,598 Z" fill="#ff7f8f"/>
|
||||
<path d="M416,560 C414,530 440,512 468,514 C496,512 522,530 520,558" fill="none" stroke="#0b4a55" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M432,532 C442,522 456,520 466,522" fill="none" stroke="#ffd36a" stroke-width="6" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="mouthPout">
|
||||
<path d="M420,560 C418,532 442,516 468,518 C494,516 518,532 516,560" fill="none" stroke="#0b4a55" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M432,534 C442,524 456,522 466,524" fill="none" stroke="#ffd36a" stroke-width="6" stroke-linecap="round"/>
|
||||
<path d="M440,566 C450,556 458,572 468,562 C478,552 486,568 496,560" fill="none" stroke="#0b4a55" stroke-width="4.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="blush">
|
||||
<ellipse cx="316" cy="548" rx="34" ry="14" fill="#ff7f8f" opacity="0.55"/>
|
||||
<ellipse cx="590" cy="540" rx="22" ry="12" fill="#ff7f8f" opacity="0.55"/>
|
||||
<path d="M302,544 l-6,10 M318,544 l-6,10 M334,544 l-6,10 M584,537 l-5,9 M598,537 l-5,9" stroke="#e25566" stroke-width="2.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<g id="core"><use href="#fishBase"/><path d="M314,474 C330,436 394,434 414,474" fill="none" stroke="#0b4a55" stroke-width="9" stroke-linecap="round"/><path d="M504,470 C516,440 558,440 572,470" fill="none" stroke="#0b4a55" stroke-width="8" stroke-linecap="round"/><path d="M310,476 l-12,6 M576,470 l10,6" stroke="#0b4a55" stroke-width="5" stroke-linecap="round"/><path d="M318,394 C336,378 364,374 386,382 M518,380 C536,370 558,372 572,382" fill="none" stroke="#0b4a55" stroke-width="6" stroke-linecap="round"/><use href="#blush"/><use href="#mouthOpen" transform="translate(466,560) scale(1.12) translate(-466,-560)"/><use href="#nearCup"/><path d="M252,610 C206,612 168,590 150,552 C170,552 188,544 198,530 C214,566 236,590 252,610 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="5" stroke-linejoin="round"/><path d="M238,602 C210,598 186,584 170,566" fill="none" stroke="#d4480f" stroke-width="3" stroke-linecap="round"/><path d="M600,560 C628,520 660,470 704,446 C700,472 708,492 726,504 C690,526 640,560 612,600 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="5" stroke-linejoin="round"/><path d="M614,568 C640,530 668,496 700,474" fill="none" stroke="#d4480f" stroke-width="3" stroke-linecap="round"/></g>
|
||||
<g id="bustChar"><path d="M150,610 C150,520 230,470 320,450" fill="none" stroke="#0b4a55" stroke-width="26" stroke-linecap="round"/><path d="M150,610 C150,520 230,470 320,450" fill="none" stroke="#0f86a0" stroke-width="18" stroke-linecap="round"/><use href="#tailBust"/><use href="#core"/><path d="M698,476 L760,250" stroke="#0b4a55" stroke-width="13" stroke-linecap="round"/><path d="M698,476 L760,250" stroke="#ffffff" stroke-width="6" stroke-linecap="round"/><circle cx="704" cy="458" r="12" fill="#22d3e6" stroke="#0b4a55" stroke-width="4"/><path d="M760,212 l6,24 l24,6 l-24,6 l-6,24 l-6,-24 l-24,-6 l24,-6 Z" fill="#ffffff"/><path d="M150,610 C130,690 210,744 340,740 C480,736 610,690 700,610 C736,576 726,540 696,548" fill="none" stroke="#0b4a55" stroke-width="28" stroke-linecap="round"/><path d="M150,610 C130,690 210,744 340,740 C480,736 610,690 700,610 C736,576 726,540 696,548" fill="none" stroke="#22d3e6" stroke-width="20" stroke-linecap="round"/><path d="M176,676 C190,704 226,720 290,724" fill="none" stroke="#a6f4fb" stroke-width="6" stroke-linecap="round"/></g>
|
||||
</defs>
|
||||
<rect width="1200" height="800" fill="#eef3f2"/>
|
||||
<path d="M70,20 H790 L760,780 H40 Z" fill="#07111a"/>
|
||||
<g clip-path="url(#cardClip)">
|
||||
<path d="M60,640 C200,610 300,660 420,640 C560,616 660,650 800,630 V800 H40 Z" fill="#0b2a33"/>
|
||||
<path d="M600,40 l-180,740 M680,40 l-180,740" stroke="#22d3e6" stroke-opacity="0.07" stroke-width="40"/>
|
||||
<g transform="translate(400,470) rotate(-7) translate(-386,-470)"><use href="#bustChar"/></g>
|
||||
</g>
|
||||
<path d="M70,20 H790 L760,780 H40 Z" fill="none" stroke="#22d3e6" stroke-width="5"/>
|
||||
<path d="M84,32 H776" stroke="#22d3e6" stroke-width="2" stroke-opacity="0.5"/>
|
||||
<use href="#bubble" transform="translate(712,330) scale(22)"/><use href="#note" transform="translate(708,340) scale(0.8)"/>
|
||||
<use href="#bubble" transform="translate(640,130) scale(30)"/><use href="#note" transform="translate(636,142) scale(0.9)"/>
|
||||
<use href="#bubble" transform="translate(110,120) scale(16)"/><use href="#bubble" transform="translate(150,80) scale(9)"/>
|
||||
<path d="M520,724 H770 L764,768 H512 Z" fill="#22d3e6"/>
|
||||
<text x="534" y="755" font-family="Consolas, 'Courier New', monospace" font-size="24" font-weight="700" letter-spacing="8" fill="#07111a">AQUA</text>
|
||||
|
||||
<text x="830" y="58" font-family="'Segoe UI', Arial, sans-serif" font-size="30" font-weight="700" letter-spacing="4" fill="#0b4a55">AQUA · B</text>
|
||||
<text x="830" y="86" font-family="'Segoe UI', Arial, sans-serif" font-size="17" font-weight="600" letter-spacing="2" fill="#0f86a0">CONDUCTOR <tspan font-weight="400" letter-spacing="0" fill="#4a6a70">(the canon fish, baton up)</tspan></text>
|
||||
<text font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#1c1c24"><tspan x="830" y="118">Hook: she conducts the dings — baton raised in a</tspan><tspan x="830" y="137">fin, eyes squeezed shut in a big smile, a ribbon</tspan><tspan x="830" y="156">of water looping round her like a staff line.</tspan></text>
|
||||
|
||||
<ellipse cx="925" cy="500" rx="100" ry="10" fill="#0b4a55" opacity="0.15"/>
|
||||
<g transform="translate(935,335) rotate(-8) scale(0.33) translate(-400,-470)">
|
||||
<use href="#tailFull"/><use href="#core"/><path d="M698,476 L760,250" stroke="#0b4a55" stroke-width="16" stroke-linecap="round"/><path d="M698,476 L760,250" stroke="#ffffff" stroke-width="8" stroke-linecap="round"/>
|
||||
</g>
|
||||
<text x="925" y="530" text-anchor="middle" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a6a70">full body · swimming, tail free</text>
|
||||
|
||||
<rect x="1040" y="250" width="140" height="140" fill="#ffffff" stroke="#b7c9cb"/>
|
||||
<g transform="translate(1048,262) scale(0.165) translate(-50,-90)">
|
||||
<g transform="translate(400,470) rotate(-7) translate(-386,-470)"><use href="#bustChar" filter="url(#sil)"/></g>
|
||||
</g>
|
||||
<text x="1110" y="408" text-anchor="middle" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a6a70">bust silhouette</text>
|
||||
|
||||
<text x="830" y="612" font-family="'Segoe UI', Arial, sans-serif" font-size="13" font-weight="700" letter-spacing="2" fill="#0b4a55">PALETTE</text>
|
||||
<g font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#1c1c24" text-anchor="middle"><rect x="830" y="626" width="50" height="50" rx="6" fill="#22d3e6" stroke="#0b4a55" stroke-width="2"/><text x="855" y="694">#22d3e6</text><text x="855" y="708">key cyan</text><rect x="890" y="626" width="50" height="50" rx="6" fill="#0b4a55" stroke="#0b4a55" stroke-width="2"/><text x="915" y="694">#0b4a55</text><text x="915" y="708">line</text><rect x="950" y="626" width="50" height="50" rx="6" fill="#ffb320" stroke="#0b4a55" stroke-width="2"/><text x="975" y="694">#ffb320</text><text x="975" y="708">gold</text><rect x="1010" y="626" width="50" height="50" rx="6" fill="#ff6a1f" stroke="#0b4a55" stroke-width="2"/><text x="1035" y="694">#ff6a1f</text><text x="1035" y="708">fin</text><rect x="1070" y="626" width="50" height="50" rx="6" fill="#1c1c24" stroke="#0b4a55" stroke-width="2"/><text x="1095" y="694">#1c1c24</text><text x="1095" y="708">phones</text><rect x="1130" y="626" width="50" height="50" rx="6" fill="#ffffff" stroke="#0b4a55" stroke-width="2"/><text x="1155" y="694">#ffffff</text><text x="1155" y="708">bubble</text></g>
|
||||
<text x="830" y="748" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a6a70">Canon: cotsc-praxis aqua-sheet. One shadow step per material;</text>
|
||||
<text x="830" y="764" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a6a70">cyan rim light on the right; eye blue kept from the canon.</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 197 KiB |
|
|
@ -1,145 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<title>Aqua, take C: Patch Steward</title>
|
||||
<defs>
|
||||
<filter id="sil" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feComponentTransfer in="SourceAlpha" result="a"><feFuncA type="discrete" tableValues="0 1 1 1 1 1 1 1 1 1"/></feComponentTransfer>
|
||||
<feFlood flood-color="#000"/>
|
||||
<feComposite in2="a" operator="in"/>
|
||||
</filter>
|
||||
<clipPath id="cardClip"><path d="M70,20 H790 L760,780 H40 Z"/></clipPath>
|
||||
<path id="eyeShape" d="M-46,-4 C-46,-50 -22,-62 2,-62 C28,-62 48,-48 48,-4 C48,38 28,60 2,60 C-22,60 -46,38 -46,-4 Z"/>
|
||||
<clipPath id="eyeClip"><use href="#eyeShape"/></clipPath>
|
||||
<!-- anime eye on the canon's round blue fish eye -->
|
||||
<g id="eye">
|
||||
<use href="#eyeShape" fill="#ffffff"/>
|
||||
<g clip-path="url(#eyeClip)">
|
||||
<path d="M-52,-64 H54 V-12 C34,-44 -30,-44 -52,-10 Z" fill="#c4eef5"/>
|
||||
<ellipse cx="6" cy="8" rx="38" ry="50" fill="#1fa9e0"/>
|
||||
<path d="M-40,-62 H52 V6 C34,-30 -22,-34 -40,6 Z" fill="#1466a8"/>
|
||||
<ellipse cx="8" cy="36" rx="24" ry="12" fill="#8ff0fa"/>
|
||||
<ellipse cx="6" cy="10" rx="17" ry="24" fill="#0b2f55"/>
|
||||
<ellipse cx="6" cy="8" rx="38" ry="50" fill="none" stroke="#0b2f55" stroke-width="4"/>
|
||||
</g>
|
||||
<ellipse cx="-11" cy="-14" rx="13" ry="17" fill="#ffffff"/>
|
||||
<circle cx="22" cy="30" r="6.5" fill="#ffffff"/>
|
||||
<path d="M-56,2 C-58,-50 -22,-72 6,-70 C34,-68 56,-52 59,-18 L68,-24 C66,-14 61,-8 55,-4 C48,-44 30,-59 4,-59 C-24,-59 -44,-40 -46,2 Z" fill="#0b4a55"/>
|
||||
<path d="M-26,54 C-6,63 20,63 32,53" fill="none" stroke="#0b4a55" stroke-width="3.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- half-lowered lid for the stern take -->
|
||||
<g id="eyeStern">
|
||||
<use href="#eye"/>
|
||||
<path d="M-62,-80 H66 V-14 C30,-30 -30,-28 -62,-8 Z" fill="#ffb320"/>
|
||||
<path d="M-58,-6 C-30,-28 30,-30 64,-14" fill="none" stroke="#0b4a55" stroke-width="9" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="note">
|
||||
<ellipse cx="0" cy="0" rx="8" ry="6" transform="rotate(-22)" fill="#ffffff"/>
|
||||
<path d="M6.5,-2 V-30 C14,-27 22,-20 17,-9" fill="none" stroke="#ffffff" stroke-width="3.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="bubble">
|
||||
<circle r="1" fill="#22d3e6" fill-opacity="0.22" stroke="#22d3e6" stroke-width="0.08"/>
|
||||
<path d="M-0.62,-0.2 A0.66,0.66 0 0 1 -0.2,-0.62" fill="none" stroke="#ffffff" stroke-width="0.12" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<!-- canon body: round, yellow face, orange crown and back meeting in a V between the eyes -->
|
||||
<path id="body" d="M396,214 C552,214 660,330 654,480 C648,632 532,734 388,732 C240,730 136,628 138,472 C140,320 240,214 396,214 Z"/>
|
||||
<clipPath id="bodyClip"><use href="#body"/></clipPath>
|
||||
<mask id="bodyShade"><rect width="1200" height="800" fill="#fff"/><use href="#body" transform="translate(-44,-40)" fill="#000"/></mask>
|
||||
<mask id="bodyRim"><rect width="1200" height="800" fill="#fff"/><use href="#body" transform="translate(-13,-3)" fill="#000"/></mask>
|
||||
<path id="crown" d="M100,170 H700 V430 C664,372 616,336 566,334 C522,334 484,362 458,414 C432,360 386,326 328,322 C268,320 226,372 214,446 C204,530 220,620 262,712 L100,780 Z"/>
|
||||
|
||||
<!-- forked tail behind, for the bust -->
|
||||
<g id="tailBust">
|
||||
<path d="M212,444 C152,402 86,330 54,226 C84,240 110,236 126,214 C140,250 168,262 198,250 C206,320 234,384 264,428 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M210,520 C148,566 92,650 66,770 C96,750 126,752 142,772 C158,744 188,736 212,746 C218,660 240,592 270,548 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M208,432 C162,380 122,320 94,246 M234,420 C212,370 188,320 170,266 M208,542 C162,600 126,670 106,756 M236,552 C212,610 192,670 182,740" fill="none" stroke="#d4480f" stroke-width="3.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- long forked tail, for the full body -->
|
||||
<g id="tailFull">
|
||||
<path d="M190,440 C120,380 40,320 -40,236 C-20,280 -26,310 -50,330 C-10,350 0,380 -20,410 C40,430 120,460 170,480 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="12" stroke-linejoin="round"/>
|
||||
<path d="M190,510 C120,560 40,620 -40,720 C-14,700 14,700 30,716 C40,680 60,660 92,662 C110,610 150,560 196,532 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="12" stroke-linejoin="round"/>
|
||||
<path d="M180,450 C120,400 60,350 0,300 M180,500 C120,560 60,620 10,680" fill="none" stroke="#d4480f" stroke-width="6" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- head, body, crest, headphones: identical in every take -->
|
||||
<g id="fishBase">
|
||||
<path d="M318,252 C298,184 326,118 388,90 C380,124 396,144 428,124 C424,150 446,166 476,150 C476,190 476,222 472,254 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M392,242 C380,192 386,150 402,118 M432,240 C430,200 436,176 454,160 M356,244 C346,200 352,160 370,130" fill="none" stroke="#d4480f" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<use href="#body" fill="#ffb320"/>
|
||||
<g clip-path="url(#bodyClip)">
|
||||
<use href="#crown" fill="#ff6a1f"/>
|
||||
<path d="M206,300 C246,256 300,236 346,236" fill="none" stroke="#ff9a5a" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M300,650 q22,20 44,0 q22,20 44,0 q22,20 44,0 M276,612 q22,20 44,0 M410,612 q22,20 44,0 q22,20 44,0 M344,690 q22,20 44,0 q22,20 44,0" fill="none" stroke="#e08a10" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<rect width="1200" height="800" fill="#9a3200" fill-opacity="0.26" mask="url(#bodyShade)"/>
|
||||
<rect width="1200" height="800" fill="#22d3e6" mask="url(#bodyRim)"/>
|
||||
</g>
|
||||
<use href="#body" fill="none" stroke="#0b4a55" stroke-width="7"/>
|
||||
<!-- far cup, band -->
|
||||
<ellipse cx="666" cy="420" rx="44" ry="80" fill="#1c1c24" stroke="#0b4a55" stroke-width="6"/>
|
||||
<ellipse cx="674" cy="420" rx="24" ry="54" fill="none" stroke="#22d3e6" stroke-width="8"/>
|
||||
<path d="M164,392 C150,200 290,128 398,128 C520,128 668,196 662,372" fill="none" stroke="#0b4a55" stroke-width="44" stroke-linecap="round"/>
|
||||
<path d="M164,392 C150,200 290,128 398,128 C520,128 668,196 662,372" fill="none" stroke="#1c1c24" stroke-width="32" stroke-linecap="round"/>
|
||||
<path d="M196,270 C230,196 300,156 380,150" fill="none" stroke="#454558" stroke-width="7" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- near cup, drawn after the face so a fin can sit on it -->
|
||||
<g id="nearCup">
|
||||
<ellipse cx="196" cy="426" rx="58" ry="84" fill="#2c2c38" stroke="#0b4a55" stroke-width="6"/>
|
||||
<ellipse cx="168" cy="426" rx="62" ry="86" fill="#1c1c24" stroke="#0b4a55" stroke-width="7"/>
|
||||
<ellipse cx="168" cy="426" rx="40" ry="60" fill="none" stroke="#22d3e6" stroke-width="10"/>
|
||||
<ellipse cx="168" cy="426" rx="22" ry="36" fill="#22d3e6" opacity="0.4"/>
|
||||
<path d="M134,382 C140,364 152,354 166,352" fill="none" stroke="#454558" stroke-width="6" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- canon snout: rounded upper lip over an open mouth -->
|
||||
<g id="mouthOpen">
|
||||
<path d="M420,554 C436,564 452,562 468,552 C484,562 500,564 516,552 C512,596 490,616 468,616 C446,616 424,596 420,554 Z" fill="#8a2234" stroke="#0b4a55" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M434,598 C446,586 490,586 502,598 C492,612 446,612 434,598 Z" fill="#ff7f8f"/>
|
||||
<path d="M416,560 C414,530 440,512 468,514 C496,512 522,530 520,558" fill="none" stroke="#0b4a55" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M432,532 C442,522 456,520 466,522" fill="none" stroke="#ffd36a" stroke-width="6" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="mouthPout">
|
||||
<path d="M420,560 C418,532 442,516 468,518 C494,516 518,532 516,560" fill="none" stroke="#0b4a55" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M432,534 C442,524 456,522 466,524" fill="none" stroke="#ffd36a" stroke-width="6" stroke-linecap="round"/>
|
||||
<path d="M440,566 C450,556 458,572 468,562 C478,552 486,568 496,560" fill="none" stroke="#0b4a55" stroke-width="4.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="blush">
|
||||
<ellipse cx="316" cy="548" rx="34" ry="14" fill="#ff7f8f" opacity="0.55"/>
|
||||
<ellipse cx="590" cy="540" rx="22" ry="12" fill="#ff7f8f" opacity="0.55"/>
|
||||
<path d="M302,544 l-6,10 M318,544 l-6,10 M334,544 l-6,10 M584,537 l-5,9 M598,537 l-5,9" stroke="#e25566" stroke-width="2.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<g id="core"><use href="#fishBase"/><use href="#eyeStern" transform="translate(366,462) scale(1.04)"/><use href="#eyeStern" transform="translate(540,456) scale(0.8,0.96)"/><path d="M316,368 L394,392 M512,392 L574,366" fill="none" stroke="#0b4a55" stroke-width="9" stroke-linecap="round"/><ellipse cx="300" cy="560" rx="40" ry="18" fill="#ff7f8f" opacity="0.5"/><ellipse cx="596" cy="548" rx="24" ry="13" fill="#ff7f8f" opacity="0.5"/><use href="#mouthPout"/><use href="#nearCup"/><path d="M250,612 C206,612 170,590 152,552 C172,552 190,544 200,530 C216,566 238,590 250,612 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="5" stroke-linejoin="round"/><path d="M236,602 C210,598 186,584 170,566" fill="none" stroke="#d4480f" stroke-width="3" stroke-linecap="round"/><path d="M560,640 C592,606 606,560 604,516 C622,528 644,530 662,520 C660,572 626,624 580,656 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="5" stroke-linejoin="round"/><path d="M574,640 C602,610 618,572 622,534" fill="none" stroke="#d4480f" stroke-width="3" stroke-linecap="round"/></g>
|
||||
<g id="bustChar"><use href="#tailBust"/><use href="#core"/><path d="M168,512 C150,650 300,744 440,712 C540,690 600,640 612,560" fill="none" stroke="#0b4a55" stroke-width="18" stroke-linecap="round"/><path d="M168,512 C150,650 300,744 440,712 C540,690 600,640 612,560" fill="none" stroke="#22d3e6" stroke-width="11" stroke-linecap="round"/><path d="M600,572 l8,-62 l22,2 l-8,62 Z" fill="#1c1c24" stroke="#0b4a55" stroke-width="4" stroke-linejoin="round"/><path d="M620,508 l4,-34" stroke="#c7d3d6" stroke-width="8" stroke-linecap="round"/><circle cx="625" cy="470" r="5" fill="#c7d3d6"/><path d="M156,500 h24 v22 h-24 Z" fill="#1c1c24" stroke="#0b4a55" stroke-width="4"/></g>
|
||||
</defs>
|
||||
<rect width="1200" height="800" fill="#eef3f2"/>
|
||||
<path d="M70,20 H790 L760,780 H40 Z" fill="#07111a"/>
|
||||
<g clip-path="url(#cardClip)">
|
||||
<path d="M60,640 C200,610 300,660 420,640 C560,616 660,650 800,630 V800 H40 Z" fill="#0b2a33"/>
|
||||
<path d="M600,40 l-180,740 M680,40 l-180,740" stroke="#22d3e6" stroke-opacity="0.07" stroke-width="40"/>
|
||||
<g transform="translate(390,470) scale(1.06) translate(-372,-470)"><use href="#bustChar"/></g>
|
||||
</g>
|
||||
<path d="M70,20 H790 L760,780 H40 Z" fill="none" stroke="#22d3e6" stroke-width="5"/>
|
||||
<path d="M84,32 H776" stroke="#22d3e6" stroke-width="2" stroke-opacity="0.5"/>
|
||||
<use href="#bubble" transform="translate(746,360) scale(14)"/><use href="#bubble" transform="translate(726,300) scale(8)"/>
|
||||
<path d="M740,200 l10,-26 M766,214 l22,-14 M770,244 l26,0" stroke="#22d3e6" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M520,724 H770 L764,768 H512 Z" fill="#22d3e6"/>
|
||||
<text x="534" y="755" font-family="Consolas, 'Courier New', monospace" font-size="24" font-weight="700" letter-spacing="8" fill="#07111a">AQUA</text>
|
||||
|
||||
<text x="830" y="58" font-family="'Segoe UI', Arial, sans-serif" font-size="30" font-weight="700" letter-spacing="4" fill="#0b4a55">AQUA · C</text>
|
||||
<text x="830" y="86" font-family="'Segoe UI', Arial, sans-serif" font-size="17" font-weight="600" letter-spacing="2" fill="#0f86a0">PATCH STEWARD <tspan font-weight="400" letter-spacing="0" fill="#4a6a70">(the canon fish, cable in fin)</tspan></text>
|
||||
<text font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#1c1c24"><tspan x="830" y="118">Hook: the steward under the cuteness — a patch</tspan><tspan x="830" y="137">cable plugged into her ear cup, the jack raised</tspan><tspan x="830" y="156">to her face, lids down: presets are serious.</tspan></text>
|
||||
|
||||
<ellipse cx="925" cy="500" rx="100" ry="10" fill="#0b4a55" opacity="0.15"/>
|
||||
<g transform="translate(935,335) rotate(-8) scale(0.33) translate(-400,-470)">
|
||||
<use href="#tailFull"/><use href="#core"/><path d="M168,512 C150,650 300,744 440,712 C540,690 600,640 612,560" fill="none" stroke="#0b4a55" stroke-width="24" stroke-linecap="round"/><path d="M168,512 C150,650 300,744 440,712 C540,690 600,640 612,560" fill="none" stroke="#22d3e6" stroke-width="15" stroke-linecap="round"/>
|
||||
</g>
|
||||
<text x="925" y="530" text-anchor="middle" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a6a70">full body · swimming, tail free</text>
|
||||
|
||||
<rect x="1040" y="250" width="140" height="140" fill="#ffffff" stroke="#b7c9cb"/>
|
||||
<g transform="translate(1048,262) scale(0.165) translate(-50,-90)">
|
||||
<g transform="translate(390,470) scale(1.06) translate(-372,-470)"><use href="#bustChar" filter="url(#sil)"/></g>
|
||||
</g>
|
||||
<text x="1110" y="408" text-anchor="middle" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a6a70">bust silhouette</text>
|
||||
|
||||
<text x="830" y="612" font-family="'Segoe UI', Arial, sans-serif" font-size="13" font-weight="700" letter-spacing="2" fill="#0b4a55">PALETTE</text>
|
||||
<g font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#1c1c24" text-anchor="middle"><rect x="830" y="626" width="50" height="50" rx="6" fill="#22d3e6" stroke="#0b4a55" stroke-width="2"/><text x="855" y="694">#22d3e6</text><text x="855" y="708">key cyan</text><rect x="890" y="626" width="50" height="50" rx="6" fill="#0b4a55" stroke="#0b4a55" stroke-width="2"/><text x="915" y="694">#0b4a55</text><text x="915" y="708">line</text><rect x="950" y="626" width="50" height="50" rx="6" fill="#ffb320" stroke="#0b4a55" stroke-width="2"/><text x="975" y="694">#ffb320</text><text x="975" y="708">gold</text><rect x="1010" y="626" width="50" height="50" rx="6" fill="#ff6a1f" stroke="#0b4a55" stroke-width="2"/><text x="1035" y="694">#ff6a1f</text><text x="1035" y="708">fin</text><rect x="1070" y="626" width="50" height="50" rx="6" fill="#1c1c24" stroke="#0b4a55" stroke-width="2"/><text x="1095" y="694">#1c1c24</text><text x="1095" y="708">phones</text><rect x="1130" y="626" width="50" height="50" rx="6" fill="#ffffff" stroke="#0b4a55" stroke-width="2"/><text x="1155" y="694">#ffffff</text><text x="1155" y="708">bubble</text></g>
|
||||
<text x="830" y="748" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a6a70">Canon: cotsc-praxis aqua-sheet. One shadow step per material;</text>
|
||||
<text x="830" y="764" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a6a70">cyan rim light on the right; eye blue kept from the canon.</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 14 KiB |
|
|
@ -1,251 +0,0 @@
|
|||
# Writes aqua-A/B/C.svg: three Persona-bust takes on Aqua's canon goldfish
|
||||
# (gamecult-site cotsc-praxis aqua-sheet.png). Paths are hand-authored here;
|
||||
# the script only composes the shared fish with each take's face, fins and prop.
|
||||
OUT = r"C:\gc-wt\cast-designs\cast-designs\proposals\aqua"
|
||||
|
||||
LINE, GOLD, ORANGE, CYAN, BLACK, WHITE = "#0b4a55", "#ffb320", "#ff6a1f", "#22d3e6", "#1c1c24", "#ffffff"
|
||||
GOLD_SH, ORANGE_SH, GOLD_HI, ORANGE_HI = "#e08a10", "#d4480f", "#ffd36a", "#ff9a5a"
|
||||
SANS = "'Segoe UI', Arial, sans-serif"
|
||||
MONO = "Consolas, 'Courier New', monospace"
|
||||
|
||||
COMMON_DEFS = f'''
|
||||
<filter id="sil" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feComponentTransfer in="SourceAlpha" result="a"><feFuncA type="discrete" tableValues="0 1 1 1 1 1 1 1 1 1"/></feComponentTransfer>
|
||||
<feFlood flood-color="#000"/>
|
||||
<feComposite in2="a" operator="in"/>
|
||||
</filter>
|
||||
<clipPath id="cardClip"><path d="M70,20 H790 L760,780 H40 Z"/></clipPath>
|
||||
<path id="eyeShape" d="M-46,-4 C-46,-50 -22,-62 2,-62 C28,-62 48,-48 48,-4 C48,38 28,60 2,60 C-22,60 -46,38 -46,-4 Z"/>
|
||||
<clipPath id="eyeClip"><use href="#eyeShape"/></clipPath>
|
||||
<!-- anime eye on the canon's round blue fish eye -->
|
||||
<g id="eye">
|
||||
<use href="#eyeShape" fill="{WHITE}"/>
|
||||
<g clip-path="url(#eyeClip)">
|
||||
<path d="M-52,-64 H54 V-12 C34,-44 -30,-44 -52,-10 Z" fill="#c4eef5"/>
|
||||
<ellipse cx="6" cy="8" rx="38" ry="50" fill="#1fa9e0"/>
|
||||
<path d="M-40,-62 H52 V6 C34,-30 -22,-34 -40,6 Z" fill="#1466a8"/>
|
||||
<ellipse cx="8" cy="36" rx="24" ry="12" fill="#8ff0fa"/>
|
||||
<ellipse cx="6" cy="10" rx="17" ry="24" fill="#0b2f55"/>
|
||||
<ellipse cx="6" cy="8" rx="38" ry="50" fill="none" stroke="#0b2f55" stroke-width="4"/>
|
||||
</g>
|
||||
<ellipse cx="-11" cy="-14" rx="13" ry="17" fill="{WHITE}"/>
|
||||
<circle cx="22" cy="30" r="6.5" fill="{WHITE}"/>
|
||||
<path d="M-56,2 C-58,-50 -22,-72 6,-70 C34,-68 56,-52 59,-18 L68,-24 C66,-14 61,-8 55,-4 C48,-44 30,-59 4,-59 C-24,-59 -44,-40 -46,2 Z" fill="{LINE}"/>
|
||||
<path d="M-26,54 C-6,63 20,63 32,53" fill="none" stroke="{LINE}" stroke-width="3.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- half-lowered lid for the stern take -->
|
||||
<g id="eyeStern">
|
||||
<use href="#eye"/>
|
||||
<path d="M-62,-80 H66 V-14 C30,-30 -30,-28 -62,-8 Z" fill="{GOLD}"/>
|
||||
<path d="M-58,-6 C-30,-28 30,-30 64,-14" fill="none" stroke="{LINE}" stroke-width="9" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="note">
|
||||
<ellipse cx="0" cy="0" rx="8" ry="6" transform="rotate(-22)" fill="{WHITE}"/>
|
||||
<path d="M6.5,-2 V-30 C14,-27 22,-20 17,-9" fill="none" stroke="{WHITE}" stroke-width="3.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="bubble">
|
||||
<circle r="1" fill="{CYAN}" fill-opacity="0.22" stroke="{CYAN}" stroke-width="0.08"/>
|
||||
<path d="M-0.62,-0.2 A0.66,0.66 0 0 1 -0.2,-0.62" fill="none" stroke="{WHITE}" stroke-width="0.12" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<!-- canon body: round, yellow face, orange crown and back meeting in a V between the eyes -->
|
||||
<path id="body" d="M396,214 C552,214 660,330 654,480 C648,632 532,734 388,732 C240,730 136,628 138,472 C140,320 240,214 396,214 Z"/>
|
||||
<clipPath id="bodyClip"><use href="#body"/></clipPath>
|
||||
<mask id="bodyShade"><rect width="1200" height="800" fill="#fff"/><use href="#body" transform="translate(-44,-40)" fill="#000"/></mask>
|
||||
<mask id="bodyRim"><rect width="1200" height="800" fill="#fff"/><use href="#body" transform="translate(-13,-3)" fill="#000"/></mask>
|
||||
<path id="crown" d="M100,170 H700 V430 C664,372 616,336 566,334 C522,334 484,362 458,414 C432,360 386,326 328,322 C268,320 226,372 214,446 C204,530 220,620 262,712 L100,780 Z"/>
|
||||
|
||||
<!-- forked tail behind, for the bust -->
|
||||
<g id="tailBust">
|
||||
<path d="M212,444 C152,402 86,330 54,226 C84,240 110,236 126,214 C140,250 168,262 198,250 C206,320 234,384 264,428 Z" fill="{ORANGE}" stroke="{LINE}" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M210,520 C148,566 92,650 66,770 C96,750 126,752 142,772 C158,744 188,736 212,746 C218,660 240,592 270,548 Z" fill="{ORANGE}" stroke="{LINE}" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M208,432 C162,380 122,320 94,246 M234,420 C212,370 188,320 170,266 M208,542 C162,600 126,670 106,756 M236,552 C212,610 192,670 182,740" fill="none" stroke="{ORANGE_SH}" stroke-width="3.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- long forked tail, for the full body -->
|
||||
<g id="tailFull">
|
||||
<path d="M190,440 C120,380 40,320 -40,236 C-20,280 -26,310 -50,330 C-10,350 0,380 -20,410 C40,430 120,460 170,480 Z" fill="{ORANGE}" stroke="{LINE}" stroke-width="12" stroke-linejoin="round"/>
|
||||
<path d="M190,510 C120,560 40,620 -40,720 C-14,700 14,700 30,716 C40,680 60,660 92,662 C110,610 150,560 196,532 Z" fill="{ORANGE}" stroke="{LINE}" stroke-width="12" stroke-linejoin="round"/>
|
||||
<path d="M180,450 C120,400 60,350 0,300 M180,500 C120,560 60,620 10,680" fill="none" stroke="{ORANGE_SH}" stroke-width="6" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- head, body, crest, headphones: identical in every take -->
|
||||
<g id="fishBase">
|
||||
<path d="M318,252 C298,184 326,118 388,90 C380,124 396,144 428,124 C424,150 446,166 476,150 C476,190 476,222 472,254 Z" fill="{ORANGE}" stroke="{LINE}" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M392,242 C380,192 386,150 402,118 M432,240 C430,200 436,176 454,160 M356,244 C346,200 352,160 370,130" fill="none" stroke="{ORANGE_SH}" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<use href="#body" fill="{GOLD}"/>
|
||||
<g clip-path="url(#bodyClip)">
|
||||
<use href="#crown" fill="{ORANGE}"/>
|
||||
<path d="M206,300 C246,256 300,236 346,236" fill="none" stroke="{ORANGE_HI}" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M300,650 q22,20 44,0 q22,20 44,0 q22,20 44,0 M276,612 q22,20 44,0 M410,612 q22,20 44,0 q22,20 44,0 M344,690 q22,20 44,0 q22,20 44,0" fill="none" stroke="{GOLD_SH}" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<rect width="1200" height="800" fill="#9a3200" fill-opacity="0.26" mask="url(#bodyShade)"/>
|
||||
<rect width="1200" height="800" fill="{CYAN}" mask="url(#bodyRim)"/>
|
||||
</g>
|
||||
<use href="#body" fill="none" stroke="{LINE}" stroke-width="7"/>
|
||||
<!-- far cup, band -->
|
||||
<ellipse cx="666" cy="420" rx="44" ry="80" fill="{BLACK}" stroke="{LINE}" stroke-width="6"/>
|
||||
<ellipse cx="674" cy="420" rx="24" ry="54" fill="none" stroke="{CYAN}" stroke-width="8"/>
|
||||
<path d="M164,392 C150,200 290,128 398,128 C520,128 668,196 662,372" fill="none" stroke="{LINE}" stroke-width="44" stroke-linecap="round"/>
|
||||
<path d="M164,392 C150,200 290,128 398,128 C520,128 668,196 662,372" fill="none" stroke="{BLACK}" stroke-width="32" stroke-linecap="round"/>
|
||||
<path d="M196,270 C230,196 300,156 380,150" fill="none" stroke="#454558" stroke-width="7" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- near cup, drawn after the face so a fin can sit on it -->
|
||||
<g id="nearCup">
|
||||
<ellipse cx="196" cy="426" rx="58" ry="84" fill="#2c2c38" stroke="{LINE}" stroke-width="6"/>
|
||||
<ellipse cx="168" cy="426" rx="62" ry="86" fill="{BLACK}" stroke="{LINE}" stroke-width="7"/>
|
||||
<ellipse cx="168" cy="426" rx="40" ry="60" fill="none" stroke="{CYAN}" stroke-width="10"/>
|
||||
<ellipse cx="168" cy="426" rx="22" ry="36" fill="{CYAN}" opacity="0.4"/>
|
||||
<path d="M134,382 C140,364 152,354 166,352" fill="none" stroke="#454558" stroke-width="6" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- canon snout: rounded upper lip over an open mouth -->
|
||||
<g id="mouthOpen">
|
||||
<path d="M420,554 C436,564 452,562 468,552 C484,562 500,564 516,552 C512,596 490,616 468,616 C446,616 424,596 420,554 Z" fill="#8a2234" stroke="{LINE}" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M434,598 C446,586 490,586 502,598 C492,612 446,612 434,598 Z" fill="#ff7f8f"/>
|
||||
<path d="M416,560 C414,530 440,512 468,514 C496,512 522,530 520,558" fill="none" stroke="{LINE}" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M432,532 C442,522 456,520 466,522" fill="none" stroke="{GOLD_HI}" stroke-width="6" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="mouthPout">
|
||||
<path d="M420,560 C418,532 442,516 468,518 C494,516 518,532 516,560" fill="none" stroke="{LINE}" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M432,534 C442,524 456,522 466,524" fill="none" stroke="{GOLD_HI}" stroke-width="6" stroke-linecap="round"/>
|
||||
<path d="M440,566 C450,556 458,572 468,562 C478,552 486,568 496,560" fill="none" stroke="{LINE}" stroke-width="4.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="blush">
|
||||
<ellipse cx="316" cy="548" rx="34" ry="14" fill="#ff7f8f" opacity="0.55"/>
|
||||
<ellipse cx="590" cy="540" rx="22" ry="12" fill="#ff7f8f" opacity="0.55"/>
|
||||
<path d="M302,544 l-6,10 M318,544 l-6,10 M334,544 l-6,10 M584,537 l-5,9 M598,537 l-5,9" stroke="#e25566" stroke-width="2.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
'''
|
||||
|
||||
def fin(d, ribs):
|
||||
return (f'<path d="{d}" fill="{ORANGE}" stroke="{LINE}" stroke-width="5" stroke-linejoin="round"/>'
|
||||
f'<path d="{ribs}" fill="none" stroke="{ORANGE_SH}" stroke-width="3" stroke-linecap="round"/>')
|
||||
|
||||
EYES_OPEN = ('<use href="#eye" transform="translate(366,462) scale(1.04)"/>'
|
||||
'<use href="#eye" transform="translate(540,456) scale(0.8,0.96)"/>')
|
||||
|
||||
TAKES = {
|
||||
"A": dict(
|
||||
name="LISTENING", sub="the canon fish, idol framing",
|
||||
hook=["Hook: the canon goldfish in Persona framing — one", "fin pressed to her ear cup, eyes up and bright,",
|
||||
"note bubbles rising toward the text box."],
|
||||
pose="translate(24,0)",
|
||||
face=EYES_OPEN
|
||||
+ f'<path d="M318,384 C336,370 364,368 384,376 M520,374 C536,366 556,368 570,378" fill="none" stroke="{LINE}" stroke-width="6" stroke-linecap="round"/>'
|
||||
+ '<use href="#blush"/><use href="#mouthOpen"/>',
|
||||
fins_back="",
|
||||
fins_front=fin("M262,592 C214,584 176,540 166,482 C190,488 210,478 222,458 C238,502 262,546 262,592 Z",
|
||||
"M248,580 C214,566 192,540 182,506 M254,560 C238,540 230,516 226,490")
|
||||
+ fin("M596,628 C646,620 686,582 698,532 C674,548 652,544 636,532 C628,574 608,602 596,628 Z",
|
||||
"M612,612 C642,600 666,576 678,552"),
|
||||
prop_front="", prop_back="",
|
||||
fx='''<use href="#bubble" transform="translate(712,262) scale(36)"/><use href="#note" transform="translate(708,276) scale(1.05)"/>
|
||||
<use href="#bubble" transform="translate(760,150) scale(26)"/><use href="#note" transform="translate(757,161) scale(0.75)"/>
|
||||
<use href="#bubble" transform="translate(690,128) scale(13)"/><use href="#bubble" transform="translate(726,368) scale(15)"/>''',
|
||||
full_prop="",
|
||||
),
|
||||
"B": dict(
|
||||
name="CONDUCTOR", sub="the canon fish, baton up",
|
||||
hook=["Hook: she conducts the dings — baton raised in a", "fin, eyes squeezed shut in a big smile, a ribbon",
|
||||
"of water looping round her like a staff line."],
|
||||
pose="translate(400,470) rotate(-7) translate(-386,-470)",
|
||||
face=f'<path d="M314,474 C330,436 394,434 414,474" fill="none" stroke="{LINE}" stroke-width="9" stroke-linecap="round"/>'
|
||||
+ f'<path d="M504,470 C516,440 558,440 572,470" fill="none" stroke="{LINE}" stroke-width="8" stroke-linecap="round"/>'
|
||||
+ f'<path d="M310,476 l-12,6 M576,470 l10,6" stroke="{LINE}" stroke-width="5" stroke-linecap="round"/>'
|
||||
+ f'<path d="M318,394 C336,378 364,374 386,382 M518,380 C536,370 558,372 572,382" fill="none" stroke="{LINE}" stroke-width="6" stroke-linecap="round"/>'
|
||||
+ '<use href="#blush"/><use href="#mouthOpen" transform="translate(466,560) scale(1.12) translate(-466,-560)"/>',
|
||||
fins_back="",
|
||||
fins_front=fin("M252,610 C206,612 168,590 150,552 C170,552 188,544 198,530 C214,566 236,590 252,610 Z",
|
||||
"M238,602 C210,598 186,584 170,566")
|
||||
+ fin("M600,560 C628,520 660,470 704,446 C700,472 708,492 726,504 C690,526 640,560 612,600 Z",
|
||||
"M614,568 C640,530 668,496 700,474"),
|
||||
prop_back=f'<path d="M150,610 C150,520 230,470 320,450" fill="none" stroke="{LINE}" stroke-width="26" stroke-linecap="round"/><path d="M150,610 C150,520 230,470 320,450" fill="none" stroke="#0f86a0" stroke-width="18" stroke-linecap="round"/>',
|
||||
prop_front=(f'<path d="M698,476 L760,250" stroke="{LINE}" stroke-width="13" stroke-linecap="round"/>'
|
||||
f'<path d="M698,476 L760,250" stroke="{WHITE}" stroke-width="6" stroke-linecap="round"/>'
|
||||
f'<circle cx="704" cy="458" r="12" fill="{CYAN}" stroke="{LINE}" stroke-width="4"/>'
|
||||
f'<path d="M760,212 l6,24 l24,6 l-24,6 l-6,24 l-6,-24 l-24,-6 l24,-6 Z" fill="{WHITE}"/>'
|
||||
f'<path d="M150,610 C130,690 210,744 340,740 C480,736 610,690 700,610 C736,576 726,540 696,548" fill="none" stroke="{LINE}" stroke-width="28" stroke-linecap="round"/>'
|
||||
f'<path d="M150,610 C130,690 210,744 340,740 C480,736 610,690 700,610 C736,576 726,540 696,548" fill="none" stroke="{CYAN}" stroke-width="20" stroke-linecap="round"/>'
|
||||
f'<path d="M176,676 C190,704 226,720 290,724" fill="none" stroke="#a6f4fb" stroke-width="6" stroke-linecap="round"/>'),
|
||||
fx='''<use href="#bubble" transform="translate(712,330) scale(22)"/><use href="#note" transform="translate(708,340) scale(0.8)"/>
|
||||
<use href="#bubble" transform="translate(640,130) scale(30)"/><use href="#note" transform="translate(636,142) scale(0.9)"/>
|
||||
<use href="#bubble" transform="translate(110,120) scale(16)"/><use href="#bubble" transform="translate(150,80) scale(9)"/>''',
|
||||
full_prop=f'<path d="M698,476 L760,250" stroke="{LINE}" stroke-width="16" stroke-linecap="round"/><path d="M698,476 L760,250" stroke="{WHITE}" stroke-width="8" stroke-linecap="round"/>',
|
||||
),
|
||||
"C": dict(
|
||||
name="PATCH STEWARD", sub="the canon fish, cable in fin",
|
||||
hook=["Hook: the steward under the cuteness — a patch", "cable plugged into her ear cup, the jack raised",
|
||||
"to her face, lids down: presets are serious."],
|
||||
pose="translate(390,470) scale(1.06) translate(-372,-470)",
|
||||
face='<use href="#eyeStern" transform="translate(366,462) scale(1.04)"/>'
|
||||
+ '<use href="#eyeStern" transform="translate(540,456) scale(0.8,0.96)"/>'
|
||||
+ f'<path d="M316,368 L394,392 M512,392 L574,366" fill="none" stroke="{LINE}" stroke-width="9" stroke-linecap="round"/>'
|
||||
+ '<ellipse cx="300" cy="560" rx="40" ry="18" fill="#ff7f8f" opacity="0.5"/><ellipse cx="596" cy="548" rx="24" ry="13" fill="#ff7f8f" opacity="0.5"/>'
|
||||
+ '<use href="#mouthPout"/>',
|
||||
fins_back="",
|
||||
fins_front=fin("M250,612 C206,612 170,590 152,552 C172,552 190,544 200,530 C216,566 238,590 250,612 Z",
|
||||
"M236,602 C210,598 186,584 170,566")
|
||||
+ fin("M560,640 C592,606 606,560 604,516 C622,528 644,530 662,520 C660,572 626,624 580,656 Z",
|
||||
"M574,640 C602,610 618,572 622,534"),
|
||||
prop_back="",
|
||||
prop_front=(f'<path d="M168,512 C150,650 300,744 440,712 C540,690 600,640 612,560" fill="none" stroke="{LINE}" stroke-width="18" stroke-linecap="round"/>'
|
||||
f'<path d="M168,512 C150,650 300,744 440,712 C540,690 600,640 612,560" fill="none" stroke="{CYAN}" stroke-width="11" stroke-linecap="round"/>'
|
||||
f'<path d="M600,572 l8,-62 l22,2 l-8,62 Z" fill="{BLACK}" stroke="{LINE}" stroke-width="4" stroke-linejoin="round"/>'
|
||||
f'<path d="M620,508 l4,-34" stroke="#c7d3d6" stroke-width="8" stroke-linecap="round"/><circle cx="625" cy="470" r="5" fill="#c7d3d6"/>'
|
||||
f'<path d="M156,500 h24 v22 h-24 Z" fill="{BLACK}" stroke="{LINE}" stroke-width="4"/>'),
|
||||
fx='''<use href="#bubble" transform="translate(746,360) scale(14)"/><use href="#bubble" transform="translate(726,300) scale(8)"/>
|
||||
<path d="M740,200 l10,-26 M766,214 l22,-14 M770,244 l26,0" stroke="#22d3e6" stroke-width="5" stroke-linecap="round"/>''',
|
||||
full_prop=f'<path d="M168,512 C150,650 300,744 440,712 C540,690 600,640 612,560" fill="none" stroke="{LINE}" stroke-width="24" stroke-linecap="round"/><path d="M168,512 C150,650 300,744 440,712 C540,690 600,640 612,560" fill="none" stroke="{CYAN}" stroke-width="15" stroke-linecap="round"/>',
|
||||
),
|
||||
}
|
||||
|
||||
def sheet(k, t):
|
||||
core = (f'<g id="core">{t["fins_back"]}<use href="#fishBase"/>{t["face"]}<use href="#nearCup"/>{t["fins_front"]}</g>')
|
||||
bust = f'<g id="bustChar">{t["prop_back"]}<use href="#tailBust"/><use href="#core"/>{t["prop_front"]}</g>'
|
||||
hook = "".join(f'<tspan x="830" y="{118+19*i}">{l}</tspan>' for i, l in enumerate(t["hook"]))
|
||||
sw = [(CYAN, "key cyan"), (LINE, "line"), (GOLD, "gold"), (ORANGE, "fin"), (BLACK, "phones"), (WHITE, "bubble")]
|
||||
swatches = "".join(
|
||||
f'<rect x="{830+60*i}" y="626" width="50" height="50" rx="6" fill="{c}" stroke="{LINE}" stroke-width="2"/>'
|
||||
f'<text x="{855+60*i}" y="694">{c}</text><text x="{855+60*i}" y="708">{n}</text>' for i, (c, n) in enumerate(sw))
|
||||
return f'''<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<title>Aqua, take {k}: {t["name"].title()}</title>
|
||||
<defs>{COMMON_DEFS}
|
||||
{core}
|
||||
{bust}
|
||||
</defs>
|
||||
<rect width="1200" height="800" fill="#eef3f2"/>
|
||||
<path d="M70,20 H790 L760,780 H40 Z" fill="#07111a"/>
|
||||
<g clip-path="url(#cardClip)">
|
||||
<path d="M60,640 C200,610 300,660 420,640 C560,616 660,650 800,630 V800 H40 Z" fill="#0b2a33"/>
|
||||
<path d="M600,40 l-180,740 M680,40 l-180,740" stroke="{CYAN}" stroke-opacity="0.07" stroke-width="40"/>
|
||||
<g transform="{t["pose"]}"><use href="#bustChar"/></g>
|
||||
</g>
|
||||
<path d="M70,20 H790 L760,780 H40 Z" fill="none" stroke="{CYAN}" stroke-width="5"/>
|
||||
<path d="M84,32 H776" stroke="{CYAN}" stroke-width="2" stroke-opacity="0.5"/>
|
||||
{t["fx"]}
|
||||
<path d="M520,724 H770 L764,768 H512 Z" fill="{CYAN}"/>
|
||||
<text x="534" y="755" font-family="{MONO}" font-size="24" font-weight="700" letter-spacing="8" fill="#07111a">AQUA</text>
|
||||
|
||||
<text x="830" y="58" font-family="{SANS}" font-size="30" font-weight="700" letter-spacing="4" fill="{LINE}">AQUA · {k}</text>
|
||||
<text x="830" y="86" font-family="{SANS}" font-size="17" font-weight="600" letter-spacing="2" fill="#0f86a0">{t["name"]} <tspan font-weight="400" letter-spacing="0" fill="#4a6a70">({t["sub"]})</tspan></text>
|
||||
<text font-family="{SANS}" font-size="14" fill="{BLACK}">{hook}</text>
|
||||
|
||||
<ellipse cx="925" cy="500" rx="100" ry="10" fill="{LINE}" opacity="0.15"/>
|
||||
<g transform="translate(935,335) rotate(-8) scale(0.33) translate(-400,-470)">
|
||||
<use href="#tailFull"/><use href="#core"/>{t["full_prop"]}
|
||||
</g>
|
||||
<text x="925" y="530" text-anchor="middle" font-family="{SANS}" font-size="12" fill="#4a6a70">full body · swimming, tail free</text>
|
||||
|
||||
<rect x="1040" y="250" width="140" height="140" fill="#ffffff" stroke="#b7c9cb"/>
|
||||
<g transform="translate(1048,262) scale(0.165) translate(-50,-90)">
|
||||
<g transform="{t["pose"]}"><use href="#bustChar" filter="url(#sil)"/></g>
|
||||
</g>
|
||||
<text x="1110" y="408" text-anchor="middle" font-family="{SANS}" font-size="12" fill="#4a6a70">bust silhouette</text>
|
||||
|
||||
<text x="830" y="612" font-family="{SANS}" font-size="13" font-weight="700" letter-spacing="2" fill="{LINE}">PALETTE</text>
|
||||
<g font-family="{MONO}" font-size="11" fill="{BLACK}" text-anchor="middle">{swatches}</g>
|
||||
<text x="830" y="748" font-family="{SANS}" font-size="12" fill="#4a6a70">Canon: cotsc-praxis aqua-sheet. One shadow step per material;</text>
|
||||
<text x="830" y="764" font-family="{SANS}" font-size="12" fill="#4a6a70">cyan rim light on the right; eye blue kept from the canon.</text>
|
||||
</svg>
|
||||
'''
|
||||
|
||||
import sys
|
||||
for k in (sys.argv[1:] or TAKES):
|
||||
open(f"{OUT}\\aqua-{k}.svg", "w", encoding="utf8").write(sheet(k, TAKES[k]))
|
||||
|
|
@ -1,77 +0,0 @@
|
|||
# Aqua: designer's notes, round 1
|
||||
|
||||
## Canon change
|
||||
|
||||
Aqua already has an established design: the character sheet at
|
||||
`F:\Projects\gamecult-site\GameCult\static\interactive\cotsc-praxis\character-sheets\aqua-sheet.png`
|
||||
(and the sprites in `sprites\aqua\`). The brief in `../../aqua.md` missed it.
|
||||
Canon overrides the brief, so A, B and C are three takes on that one goldfish,
|
||||
not three reinventions. The brief's Bowl Helmet and Goldfish Hood girls are
|
||||
dropped. The two pre-canon sheets are kept for the record:
|
||||
`aqua-old-A.svg` (the first idol fish) and `aqua-old-B.svg` (the bowl-helmet girl,
|
||||
which was still mid-revision: its twin tails had just been redrawn and it was
|
||||
never re-checked).
|
||||
|
||||
What every take keeps from canon: a round body, a yellow face under an orange
|
||||
crown and back that meet in a V between the eyes, an orange crest fin, a
|
||||
duck-lip snout over an open mouth, small dark brows, big round blue eyes,
|
||||
ribbed orange pectoral fins, a forked tail, rows of belly scales, and black
|
||||
headphones with cyan-ringed cups. They differ in pose, prop and framing.
|
||||
|
||||
Files: `aqua-<A|B|C>.svg` are the sheets and `aqua-<A|B|C>.png` the full-size
|
||||
renders. `aqua-gen.py` writes all three from one set of hand-drawn parts, so a
|
||||
fix to the shared fish reaches every take.
|
||||
|
||||
## A: Listening
|
||||
|
||||
- **What it does:** a three-quarter bust turned toward the text box, with the near fin pressed
|
||||
to the ear cup and the eyes up and bright. Note bubbles rise screen right. This
|
||||
is the canon "listen" and "idle" poses at portrait size: the baseline the
|
||||
expression set would be drawn on.
|
||||
- **Changed after looking:** I moved the face right so the three-quarter turn reads, because
|
||||
the first pass looked straight at the camera. The pre-canon "bangs" crown became the canon V.
|
||||
The snout was first a flat pale plate that read as a moustache, so I redrew it as an
|
||||
outline-only rounded upper lip over a w-shaped mouth. I raised the fin so it
|
||||
actually sits on the cup. The belly scales were moved off the mouth area so
|
||||
they stop reading as a second mouth.
|
||||
- **Round 2:** give the eye a canon-style iris sparkle and test the cyan rim against
|
||||
ember-orange Eureka in the cast-wide 48 px lineup. The fish ball shape is
|
||||
shared by all three takes, so the hook in silhouette is only the ear cups,
|
||||
the band gap, the crest and the tail fork.
|
||||
|
||||
## B: Conductor
|
||||
|
||||
- **What it does:** she conducts the dings. A baton is raised in her far fin, her eyes are
|
||||
squeezed shut in a big laugh, and a ribbon of water loops round her body like a
|
||||
staff line. The whole bust is tilted 7 degrees for energy. It comes from the canon
|
||||
"conduct" pose.
|
||||
- **Changed after looking:** the first ribbon cut across her cheek and mouth and read
|
||||
as a cyan tube. It now passes behind her upper left and sweeps in front
|
||||
of the belly, below the face, then curls into the baton fin. The snout fix
|
||||
carried over.
|
||||
- **Round 2:** the baton is the only silhouette feature of the three takes that
|
||||
breaks the circle at 48 px, so it is worth keeping. Draw the ribbon as water,
|
||||
with a thinner, tapering, broken stroke and a few droplets, instead of a uniform hose.
|
||||
The baton star could become a note head.
|
||||
|
||||
## C: Patch Steward
|
||||
|
||||
- **What it does:** this is the steward under the cuteness. A patch cable is plugged into the
|
||||
bottom of her near cup and loops across her belly to a jack she holds up beside
|
||||
her mouth. The lids are half down, the brows are hard and the mouth is a wobbly pout. She is
|
||||
framed 6 percent closer. It comes from the canon "patch" and "boundary" poses.
|
||||
- **Changed after looking:** a second gold cable and a jack held at the far cup made
|
||||
the cable read as going *into* the far cup. I cut that cable and moved the jack in front of the far
|
||||
cheek on a raised fin.
|
||||
- **Round 2:** at 48 px the silhouette is the same as A's, because the cable
|
||||
stays inside the body outline. Push the jack and fin out past the right
|
||||
contour, or bring in the canon holo patch panel as a hard rectangle at the
|
||||
card edge. The loop also half reads as a headset microphone. A coiled
|
||||
patch-cable texture (two tones, a twist) would fix that. The raised fin is
|
||||
mostly hidden behind the cable, so it needs to come forward.
|
||||
|
||||
## Strongest
|
||||
|
||||
B. It has the most personality and the only silhouette break, and it is the
|
||||
clearest statement of "her synth is the voice of the dings". A is the right
|
||||
baseline for the expression set. C has the best face but needs its silhouette fixed.
|
||||
|
|
@ -1,181 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<title>Aqua, superseded take A (pre-canon): Goldfish Idol</title>
|
||||
<defs>
|
||||
<!-- solid-black silhouette -->
|
||||
<filter id="sil" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feComponentTransfer in="SourceAlpha" result="a"><feFuncA type="discrete" tableValues="0 1 1 1 1 1 1 1 1 1"/></feComponentTransfer>
|
||||
<feFlood flood-color="#000"/>
|
||||
<feComposite in2="a" operator="in"/>
|
||||
</filter>
|
||||
<clipPath id="cardClip"><path d="M70,20 H790 L760,780 H40 Z"/></clipPath>
|
||||
|
||||
<!-- anime eye, local frame centred on 0,0, about 100 x 124 -->
|
||||
<path id="eyeShape" d="M-48,-6 C-48,-50 -22,-60 2,-60 C28,-60 50,-46 50,-6 C50,36 28,60 2,60 C-24,60 -48,36 -48,-6 Z"/>
|
||||
<clipPath id="eyeClip"><use href="#eyeShape"/></clipPath>
|
||||
<g id="eye">
|
||||
<use href="#eyeShape" fill="#ffffff"/>
|
||||
<g clip-path="url(#eyeClip)">
|
||||
<path d="M-52,-62 H54 V-14 C34,-44 -30,-44 -52,-12 Z" fill="#c4eef5"/>
|
||||
<ellipse cx="6" cy="8" rx="40" ry="52" fill="#22d3e6"/>
|
||||
<path d="M-40,-62 H52 V4 C34,-30 -22,-34 -40,4 Z" fill="#0f86a0"/>
|
||||
<ellipse cx="8" cy="36" rx="25" ry="13" fill="#a6f4fb"/>
|
||||
<ellipse cx="6" cy="10" rx="17" ry="24" fill="#0b4a55"/>
|
||||
<ellipse cx="6" cy="8" rx="40" ry="52" fill="none" stroke="#0b4a55" stroke-width="4"/>
|
||||
</g>
|
||||
<ellipse cx="-12" cy="-14" rx="13" ry="17" fill="#ffffff"/>
|
||||
<path id="spark" d="M0,-10 C1.2,-2.4 2.4,-1.2 10,0 C2.4,1.2 1.2,2.4 0,10 C-1.2,2.4 -2.4,1.2 -10,0 C-2.4,-1.2 -1.2,-2.4 0,-10 Z" transform="translate(22,28) scale(1.15)" fill="#ffffff"/>
|
||||
<path d="M-58,0 C-60,-50 -22,-71 6,-69 C34,-67 56,-52 61,-20 L72,-28 C69,-16 63,-8 57,-5 C50,-44 30,-58 4,-58 C-24,-58 -46,-40 -48,0 Z" fill="#0b4a55"/>
|
||||
<path d="M-28,55 C-8,64 20,64 34,54" fill="none" stroke="#0b4a55" stroke-width="3.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<!-- eighth-note glyph -->
|
||||
<g id="note">
|
||||
<ellipse cx="0" cy="0" rx="8" ry="6" transform="rotate(-22)" fill="#ffffff"/>
|
||||
<path d="M6.5,-2 V-30 C14,-27 22,-20 17,-9" fill="none" stroke="#ffffff" stroke-width="3.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<!-- ===== Aqua A: shapes ===== -->
|
||||
<path id="Abody" d="M392,212 C548,212 658,330 652,478 C646,630 530,732 386,730 C238,728 136,626 138,470 C140,318 238,212 392,212 Z"/>
|
||||
<clipPath id="AbodyClip"><use href="#Abody"/></clipPath>
|
||||
<mask id="AbodyShade"><rect width="1200" height="800" fill="#fff"/><use href="#Abody" transform="translate(-46,-40)" fill="#000"/></mask>
|
||||
<mask id="AbodyRim"><rect width="1200" height="800" fill="#fff"/><use href="#Abody" transform="translate(-13,-3)" fill="#000"/></mask>
|
||||
|
||||
<!-- the fish minus the tail: reused by bust, full body and silhouette -->
|
||||
<g id="AfishCore">
|
||||
<!-- dorsal crest, an idol's ahoge -->
|
||||
<path d="M318,250 C300,180 330,118 392,92 C380,126 396,146 428,126 C424,152 446,166 476,152 C474,190 474,222 470,252 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M392,240 C380,190 386,150 402,118 M430,238 C428,200 434,176 452,160" fill="none" stroke="#c94612" stroke-width="3.5" stroke-linecap="round"/>
|
||||
|
||||
<!-- body -->
|
||||
<use href="#Abody" fill="#ffb320"/>
|
||||
<g clip-path="url(#AbodyClip)">
|
||||
<!-- belly scales -->
|
||||
<path d="M232,626 q22,20 44,0 q22,20 44,0 M262,664 q22,20 44,0 q22,20 44,0 M300,700 q22,20 44,0" fill="none" stroke="#e08a10" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<!-- orange crown cut like idol bangs -->
|
||||
<path d="M120,190 H680 V330 C640,326 612,306 598,284 C590,322 566,344 534,350 C540,322 532,300 514,286 C500,330 464,354 424,356 C444,330 444,304 432,286 C414,322 374,344 332,348 C346,322 346,302 336,290 C312,320 274,336 236,338 C254,318 258,302 252,288 C222,310 184,326 120,336 Z" fill="#ff6a1f"/>
|
||||
<path d="M200,270 C240,236 300,222 340,226 M470,226 C520,228 560,246 588,270" fill="none" stroke="#ffa067" stroke-width="9" stroke-linecap="round"/>
|
||||
<!-- cel shadow, light from upper left -->
|
||||
<rect width="1200" height="800" fill="#e08a10" mask="url(#AbodyShade)"/>
|
||||
<!-- rim light in key cyan, away from the light -->
|
||||
<rect width="1200" height="800" fill="#22d3e6" mask="url(#AbodyRim)"/>
|
||||
</g>
|
||||
<use href="#Abody" fill="none" stroke="#0b4a55" stroke-width="7"/>
|
||||
|
||||
<!-- gill curve -->
|
||||
<path d="M232,392 C214,440 214,500 236,548" fill="none" stroke="#c97a0c" stroke-width="3.5" stroke-linecap="round"/>
|
||||
|
||||
<!-- headphones: far cup, band, near cup -->
|
||||
<ellipse cx="664" cy="418" rx="44" ry="80" fill="#1c1c24" stroke="#0b4a55" stroke-width="6"/>
|
||||
<ellipse cx="672" cy="418" rx="24" ry="54" fill="none" stroke="#22d3e6" stroke-width="8"/>
|
||||
<ellipse cx="672" cy="418" rx="9" ry="24" fill="#22d3e6" opacity="0.55"/>
|
||||
<path d="M164,392 C150,200 290,128 398,128 C520,128 668,196 660,372" fill="none" stroke="#0b4a55" stroke-width="44" stroke-linecap="round"/>
|
||||
<path d="M164,392 C150,200 290,128 398,128 C520,128 668,196 660,372" fill="none" stroke="#1c1c24" stroke-width="32" stroke-linecap="round"/>
|
||||
<path d="M196,270 C230,196 300,156 380,150" fill="none" stroke="#454558" stroke-width="7" stroke-linecap="round"/>
|
||||
<ellipse cx="196" cy="424" rx="58" ry="84" fill="#2c2c38" stroke="#0b4a55" stroke-width="6"/>
|
||||
<ellipse cx="168" cy="424" rx="62" ry="86" fill="#1c1c24" stroke="#0b4a55" stroke-width="7"/>
|
||||
<ellipse cx="168" cy="424" rx="40" ry="60" fill="none" stroke="#22d3e6" stroke-width="10"/>
|
||||
<ellipse cx="168" cy="424" rx="22" ry="36" fill="#22d3e6" opacity="0.4"/>
|
||||
<path d="M134,380 C140,362 152,352 166,350" fill="none" stroke="#454558" stroke-width="6" stroke-linecap="round"/>
|
||||
|
||||
<!-- face: three-quarter toward screen right -->
|
||||
<use href="#eye" transform="translate(366,462) scale(1.06)"/>
|
||||
<use href="#eye" transform="translate(540,456) scale(0.8,0.98)"/>
|
||||
<!-- blush -->
|
||||
<ellipse cx="316" cy="548" rx="34" ry="14" fill="#ff7f8f" opacity="0.6"/>
|
||||
<ellipse cx="588" cy="540" rx="22" ry="12" fill="#ff7f8f" opacity="0.6"/>
|
||||
<path d="M302,544 l-6,10 M318,544 l-6,10 M334,544 l-6,10 M582,537 l-5,9 M596,537 l-5,9" stroke="#e25566" stroke-width="2.5" stroke-linecap="round"/>
|
||||
<!-- open happy mouth -->
|
||||
<path d="M428,566 C444,574 478,574 492,562 C492,598 468,614 456,614 C440,614 426,596 428,566 Z" fill="#8a2234" stroke="#0b4a55" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M438,600 C446,590 470,590 480,598 C472,610 450,612 438,600 Z" fill="#ff7f8f"/>
|
||||
|
||||
<!-- fin-hands: near fin raised to the ear cup (Listening), far fin waving -->
|
||||
<path d="M250,612 C206,612 172,578 168,530 C190,540 212,536 226,520 C236,560 262,590 250,612 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M232,600 C210,590 194,570 188,548 M240,580 C226,568 218,556 214,540" fill="none" stroke="#c94612" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M594,628 C644,620 684,582 696,532 C672,548 650,544 634,532 C626,574 606,602 594,628 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M610,612 C640,600 664,576 676,552" fill="none" stroke="#c94612" stroke-width="3" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<!-- bust tail: double fan, flaring behind -->
|
||||
<g id="AtailBust">
|
||||
<path d="M210,446 C150,404 84,330 52,226 C82,240 108,236 124,214 C138,250 166,262 196,250 C204,320 232,384 262,428 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M208,520 C146,566 90,650 64,770 C94,750 124,752 140,772 C156,744 186,736 210,746 C216,660 238,592 268,548 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M206,432 C160,380 120,320 92,246 M232,420 C210,370 186,320 168,266 M206,542 C160,600 124,670 104,756 M234,552 C210,610 190,670 180,740" fill="none" stroke="#c94612" stroke-width="3.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<g id="AbustChar">
|
||||
<use href="#AtailBust"/>
|
||||
<use href="#AfishCore"/>
|
||||
</g>
|
||||
|
||||
<g id="bubble">
|
||||
<circle r="1" fill="#22d3e6" fill-opacity="0.22" stroke="#22d3e6" stroke-width="0.08"/>
|
||||
<path d="M-0.62,-0.2 A0.66,0.66 0 0 1 -0.2,-0.62" fill="none" stroke="#ffffff" stroke-width="0.12" stroke-linecap="round"/>
|
||||
</g>
|
||||
</defs>
|
||||
|
||||
<!-- sheet -->
|
||||
<rect width="1200" height="800" fill="#eef3f2"/>
|
||||
|
||||
<!-- Persona-style card preview (composited in product, shown here for scale) -->
|
||||
<path d="M70,20 H790 L760,780 H40 Z" fill="#07111a"/>
|
||||
<g clip-path="url(#cardClip)">
|
||||
<path d="M60,640 C200,610 300,660 420,640 C560,616 660,650 800,630 V800 H40 Z" fill="#0b2a33"/>
|
||||
<path d="M600,40 l-180,740 M680,40 l-180,740" stroke="#22d3e6" stroke-opacity="0.07" stroke-width="40"/>
|
||||
<use href="#AbustChar" transform="translate(24,0)"/>
|
||||
</g>
|
||||
<path d="M70,20 H790 L760,780 H40 Z" fill="none" stroke="#22d3e6" stroke-width="5"/>
|
||||
<path d="M84,32 H776" stroke="#22d3e6" stroke-width="2" stroke-opacity="0.5"/>
|
||||
|
||||
<!-- note bubbles rising toward the text box -->
|
||||
<use href="#bubble" transform="translate(712,262) scale(36)"/>
|
||||
<use href="#note" transform="translate(708,276) scale(1.05)"/>
|
||||
<use href="#bubble" transform="translate(760,150) scale(26)"/>
|
||||
<use href="#note" transform="translate(757,161) scale(0.75)"/>
|
||||
<use href="#bubble" transform="translate(690,128) scale(13)"/>
|
||||
<use href="#bubble" transform="translate(726,368) scale(15)"/>
|
||||
<use href="#bubble" transform="translate(806,92) scale(10)"/>
|
||||
|
||||
<!-- nameplate -->
|
||||
<path d="M520,724 H770 L764,768 H512 Z" fill="#22d3e6"/>
|
||||
<text x="534" y="755" font-family="Consolas, 'Courier New', monospace" font-size="24" font-weight="700" letter-spacing="8" fill="#07111a">AQUA</text>
|
||||
|
||||
<!-- right column: labels -->
|
||||
<text x="830" y="58" font-family="'Segoe UI', Arial, sans-serif" font-size="30" font-weight="700" letter-spacing="4" fill="#0b4a55">AQUA · A</text>
|
||||
<text x="830" y="86" font-family="'Segoe UI', Arial, sans-serif" font-size="17" font-weight="600" letter-spacing="2" fill="#0f86a0">GOLDFISH IDOL (stays a fish)</text>
|
||||
<text font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#1c1c24">
|
||||
<tspan x="830" y="118">Hook: the icon's goldfish as an anime idol —</tspan>
|
||||
<tspan x="830" y="137">sparkle eyes, bangs-cut orange crown, fin-hands,</tspan>
|
||||
<tspan x="830" y="156">headphones bigger than ever.</tspan>
|
||||
</text>
|
||||
|
||||
<!-- full body: free-swimming pose, whole double tail -->
|
||||
<g>
|
||||
<ellipse cx="925" cy="500" rx="100" ry="10" fill="#0b4a55" opacity="0.15"/>
|
||||
<g transform="translate(935,335) rotate(-8) scale(0.33) translate(-400,-470)">
|
||||
<path d="M190,440 C120,380 40,320 -40,236 C-20,280 -26,310 -50,330 C-10,350 0,380 -20,410 C40,430 120,460 170,480 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="12" stroke-linejoin="round"/>
|
||||
<path d="M190,510 C120,560 40,620 -40,720 C-14,700 14,700 30,716 C40,680 60,660 92,662 C110,610 150,560 196,532 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="12" stroke-linejoin="round"/>
|
||||
<path d="M180,450 C120,400 60,350 0,300 M180,500 C120,560 60,620 10,680" fill="none" stroke="#c94612" stroke-width="6" stroke-linecap="round"/>
|
||||
<use href="#AfishCore"/>
|
||||
</g>
|
||||
<text x="925" y="530" text-anchor="middle" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a6a70">full body · swimming, tail free</text>
|
||||
</g>
|
||||
|
||||
<!-- silhouette check of the bust -->
|
||||
<rect x="1040" y="250" width="140" height="140" fill="#ffffff" stroke="#b7c9cb"/>
|
||||
<g transform="translate(1048,262) scale(0.165) translate(-60,-90)">
|
||||
<use href="#AbustChar" filter="url(#sil)"/>
|
||||
</g>
|
||||
<text x="1110" y="408" text-anchor="middle" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a6a70">bust silhouette</text>
|
||||
|
||||
<!-- palette -->
|
||||
<text x="830" y="612" font-family="'Segoe UI', Arial, sans-serif" font-size="13" font-weight="700" letter-spacing="2" fill="#0b4a55">PALETTE</text>
|
||||
<g font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#1c1c24" text-anchor="middle">
|
||||
<rect x="830" y="626" width="50" height="50" rx="6" fill="#22d3e6" stroke="#0b4a55" stroke-width="2"/><text x="855" y="694">#22d3e6</text><text x="855" y="708">key cyan</text>
|
||||
<rect x="890" y="626" width="50" height="50" rx="6" fill="#0b4a55" stroke="#0b4a55" stroke-width="2"/><text x="915" y="694">#0b4a55</text><text x="915" y="708">line</text>
|
||||
<rect x="950" y="626" width="50" height="50" rx="6" fill="#ffb320" stroke="#0b4a55" stroke-width="2"/><text x="975" y="694">#ffb320</text><text x="975" y="708">gold</text>
|
||||
<rect x="1010" y="626" width="50" height="50" rx="6" fill="#ff6a1f" stroke="#0b4a55" stroke-width="2"/><text x="1035" y="694">#ff6a1f</text><text x="1035" y="708">fin</text>
|
||||
<rect x="1070" y="626" width="50" height="50" rx="6" fill="#1c1c24" stroke="#0b4a55" stroke-width="2"/><text x="1095" y="694">#1c1c24</text><text x="1095" y="708">phones</text>
|
||||
<rect x="1130" y="626" width="50" height="50" rx="6" fill="#ffffff" stroke="#0b4a55" stroke-width="2"/><text x="1155" y="694">#ffffff</text><text x="1155" y="708">bubble</text>
|
||||
</g>
|
||||
<text x="830" y="748" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a6a70">One shadow step per material; cyan rim light on the right.</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 13 KiB |
|
|
@ -1,230 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<title>Aqua, superseded take B (pre-canon): Bowl Helmet</title>
|
||||
<defs>
|
||||
<filter id="sil" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feComponentTransfer in="SourceAlpha" result="a"><feFuncA type="discrete" tableValues="0 1 1 1 1 1 1 1 1 1"/></feComponentTransfer>
|
||||
<feFlood flood-color="#000"/>
|
||||
<feComposite in2="a" operator="in"/>
|
||||
</filter>
|
||||
<clipPath id="cardClip"><path d="M70,20 H790 L760,780 H40 Z"/></clipPath>
|
||||
|
||||
<!-- anime eye, local frame centred on 0,0 -->
|
||||
<path id="eyeShape" d="M-48,-6 C-48,-50 -22,-60 2,-60 C28,-60 50,-46 50,-6 C50,36 28,60 2,60 C-24,60 -48,36 -48,-6 Z"/>
|
||||
<clipPath id="eyeClip"><use href="#eyeShape"/></clipPath>
|
||||
<g id="eye">
|
||||
<use href="#eyeShape" fill="#ffffff"/>
|
||||
<g clip-path="url(#eyeClip)">
|
||||
<path d="M-52,-62 H54 V-14 C34,-44 -30,-44 -52,-12 Z" fill="#c4eef5"/>
|
||||
<ellipse cx="6" cy="8" rx="40" ry="52" fill="#22d3e6"/>
|
||||
<path d="M-40,-62 H52 V4 C34,-30 -22,-34 -40,4 Z" fill="#0f86a0"/>
|
||||
<ellipse cx="8" cy="36" rx="25" ry="13" fill="#a6f4fb"/>
|
||||
<ellipse cx="6" cy="10" rx="17" ry="24" fill="#0b4a55"/>
|
||||
<ellipse cx="6" cy="8" rx="40" ry="52" fill="none" stroke="#0b4a55" stroke-width="4"/>
|
||||
</g>
|
||||
<ellipse cx="-12" cy="-14" rx="13" ry="17" fill="#ffffff"/>
|
||||
<circle cx="23" cy="30" r="6.5" fill="#ffffff"/>
|
||||
<path d="M-58,0 C-60,-50 -22,-71 6,-69 C34,-67 56,-52 61,-20 L72,-28 C69,-16 63,-8 57,-5 C50,-44 30,-58 4,-58 C-24,-58 -46,-40 -48,0 Z" fill="#0b4a55"/>
|
||||
<path d="M-28,55 C-8,64 20,64 34,54" fill="none" stroke="#0b4a55" stroke-width="3.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="note">
|
||||
<ellipse cx="0" cy="0" rx="8" ry="6" transform="rotate(-22)" fill="#ffffff"/>
|
||||
<path d="M6.5,-2 V-30 C14,-27 22,-20 17,-9" fill="none" stroke="#ffffff" stroke-width="3.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="bubble">
|
||||
<circle r="1" fill="#22d3e6" fill-opacity="0.22" stroke="#22d3e6" stroke-width="0.08"/>
|
||||
<path d="M-0.62,-0.2 A0.66,0.66 0 0 1 -0.2,-0.62" fill="none" stroke="#ffffff" stroke-width="0.12" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<!-- ===== Aqua B shapes ===== -->
|
||||
<circle id="Bbowl" cx="410" cy="320" r="250"/>
|
||||
<clipPath id="BbowlClip"><use href="#Bbowl"/></clipPath>
|
||||
<path id="Bface" d="M262,300 C258,412 332,500 440,504 C502,504 550,466 566,410 C576,374 578,336 574,300 Z"/>
|
||||
<clipPath id="BfaceClip"><use href="#Bface"/></clipPath>
|
||||
<mask id="BfaceShade"><rect width="1200" height="800" fill="#fff"/><use href="#Bface" transform="translate(-30,-14)" fill="#000"/></mask>
|
||||
<path id="Bbangs" d="M248,340 C244,236 310,174 412,174 C514,174 584,236 584,336 Q560,310 548,282 Q540,318 520,348 Q510,312 492,290 Q478,328 450,352 Q448,312 430,292 Q414,330 382,348 Q384,310 368,294 Q348,326 316,342 Q324,312 312,296 Q290,320 248,340 Z"/>
|
||||
<clipPath id="BbangsClip"><use href="#Bbangs"/></clipPath>
|
||||
<path id="BtailL" d="M292,556 C236,536 176,500 76,462 C92,500 104,542 146,586 C102,628 90,664 84,708 C168,670 236,628 300,600 Z"/>
|
||||
<path id="BtailR" d="M530,556 C582,536 634,504 722,470 C710,504 698,542 662,586 C698,624 708,660 714,700 C644,664 586,628 524,600 Z"/>
|
||||
<clipPath id="BtailLClip"><use href="#BtailL"/></clipPath>
|
||||
<clipPath id="BtailRClip"><use href="#BtailR"/></clipPath>
|
||||
|
||||
<!-- twin tails, cut like goldfish fan tails, orange at the tips -->
|
||||
<g id="Btails">
|
||||
<use href="#BtailL" fill="#ffb320"/>
|
||||
<g clip-path="url(#BtailLClip)">
|
||||
<path d="M40,400 H160 C140,500 140,660 166,760 H40 Z" fill="#ff6a1f"/>
|
||||
<path d="M270,566 C210,540 150,510 104,486 M262,584 C220,584 180,584 150,586 M270,598 C210,626 150,660 104,690" fill="none" stroke="#e08a10" stroke-width="3.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<use href="#BtailL" fill="none" stroke="#0b4a55" stroke-width="7" stroke-linejoin="round"/>
|
||||
<use href="#BtailR" fill="#ffb320"/>
|
||||
<g clip-path="url(#BtailRClip)">
|
||||
<path d="M780,400 H660 C676,500 676,660 652,760 H780 Z" fill="#ff6a1f"/>
|
||||
<path d="M552,566 C610,540 660,514 700,492 M560,584 C596,584 630,584 660,586 M552,598 C610,626 660,656 698,684" fill="none" stroke="#e08a10" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<path d="M722,470 C710,504 698,542 662,586 C698,624 708,660 714,700" fill="none" stroke="#22d3e6" stroke-width="7"/>
|
||||
</g>
|
||||
<use href="#BtailR" fill="none" stroke="#0b4a55" stroke-width="7" stroke-linejoin="round"/>
|
||||
</g>
|
||||
|
||||
<!-- head in the bowl, headphones clamped outside, collar -->
|
||||
<g id="Bhead">
|
||||
<!-- water behind her -->
|
||||
<use href="#Bbowl" fill="#22d3e6" fill-opacity="0.3"/>
|
||||
<g clip-path="url(#BbowlClip)">
|
||||
<path d="M150,124 C220,104 280,142 350,122 C420,102 480,140 550,120 C600,106 640,124 680,118 V60 H150 Z" fill="#e8fbfd" fill-opacity="0.35"/>
|
||||
<path d="M150,124 C220,104 280,142 350,122 C420,102 480,140 550,120 C600,106 640,124 680,118" fill="none" stroke="#a6f4fb" stroke-width="4"/>
|
||||
</g>
|
||||
<!-- hair, back mass, floating a little in the water -->
|
||||
<path d="M232,340 C222,226 300,150 410,150 C522,150 596,226 590,342 C588,420 570,482 546,524 L282,524 C254,476 236,410 232,340 Z" fill="#ffb320" stroke="#0b4a55" stroke-width="5"/>
|
||||
<path d="M560,300 C578,360 576,430 552,500 L520,500 C540,440 546,370 534,300 Z" fill="#e08a10"/>
|
||||
<path d="M392,152 C384,110 398,84 432,70 C426,92 438,104 458,100 C446,120 430,136 418,154 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="4" stroke-linejoin="round"/>
|
||||
<!-- neck -->
|
||||
<path d="M392,480 H474 V566 H392 Z" fill="#e9b9a0"/>
|
||||
<!-- face -->
|
||||
<use href="#Bface" fill="#f6d9c4"/>
|
||||
<g clip-path="url(#BfaceClip)">
|
||||
<rect width="1200" height="800" fill="#e9b9a0" mask="url(#BfaceShade)"/>
|
||||
<use href="#Bbangs" transform="translate(10,20)" fill="#e9b9a0"/>
|
||||
</g>
|
||||
<use href="#Bface" fill="none" stroke="#0b4a55" stroke-width="5"/>
|
||||
<!-- eyes, brows, nose, mouth, blush -->
|
||||
<use href="#eye" transform="translate(366,396) scale(0.9)"/>
|
||||
<use href="#eye" transform="translate(502,390) scale(0.72,0.86)"/>
|
||||
<path d="M447,428 l5,7" stroke="#c98a76" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M436,454 C450,464 478,462 490,450 C490,478 472,492 462,492 C448,492 436,478 436,454 Z" fill="#8a2234" stroke="#0b4a55" stroke-width="3.5" stroke-linejoin="round"/>
|
||||
<path d="M446,482 C452,474 472,474 480,480 C474,490 454,492 446,482 Z" fill="#ff7f8f"/>
|
||||
<ellipse cx="318" cy="452" rx="30" ry="12" fill="#ff7f8f" opacity="0.6"/>
|
||||
<ellipse cx="540" cy="446" rx="20" ry="10" fill="#ff7f8f" opacity="0.6"/>
|
||||
<!-- bangs and sidelocks -->
|
||||
<use href="#Bbangs" fill="#ffb320"/>
|
||||
<g clip-path="url(#BbangsClip)">
|
||||
<path d="M300,232 C340,206 380,198 410,198 M450,198 C490,202 524,216 546,236" fill="none" stroke="#ffd66b" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M560,250 C590,280 600,320 590,360 L620,360 L620,240 Z" fill="#e08a10"/>
|
||||
<path d="M412,182 C398,232 382,272 368,294 M412,182 C432,226 444,262 450,300 M412,182 C462,214 496,252 516,300 M412,182 C356,212 326,254 312,296" fill="none" stroke="#e08a10" stroke-width="3.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<use href="#Bbangs" fill="none" stroke="#0b4a55" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M250,316 C236,380 240,446 262,508 C268,478 282,456 298,446 C286,404 282,360 288,326 Z" fill="#ffb320" stroke="#0b4a55" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M578,316 C592,370 590,424 574,476 C568,452 558,436 546,428 C556,394 560,358 556,328 Z" fill="#e08a10" stroke="#0b4a55" stroke-width="5" stroke-linejoin="round"/>
|
||||
<!-- bubbles inside the bowl -->
|
||||
<use href="#bubble" transform="translate(600,230) scale(14)"/>
|
||||
<use href="#bubble" transform="translate(620,180) scale(9)"/>
|
||||
<use href="#bubble" transform="translate(588,148) scale(6)"/>
|
||||
<use href="#bubble" transform="translate(220,440) scale(8)"/>
|
||||
<!-- the glass -->
|
||||
<use href="#Bbowl" fill="none" stroke="#0b4a55" stroke-width="10"/>
|
||||
<use href="#Bbowl" fill="none" stroke="#7fe9f5" stroke-width="3.5"/>
|
||||
<path d="M202,262 C214,186 266,126 334,100" fill="none" stroke="#ffffff" stroke-width="13" stroke-linecap="round" opacity="0.9"/>
|
||||
<circle cx="356" cy="92" r="6" fill="#ffffff" opacity="0.9"/>
|
||||
<path d="M626,420 C604,476 566,520 516,548" fill="none" stroke="#ffffff" stroke-width="6" stroke-linecap="round" opacity="0.55"/>
|
||||
<!-- headphones clamped on the outside of the bowl -->
|
||||
<path d="M156,300 C140,96 296,36 412,36 C540,36 684,100 668,300" fill="none" stroke="#0b4a55" stroke-width="42" stroke-linecap="round"/>
|
||||
<path d="M156,300 C140,96 296,36 412,36 C540,36 684,100 668,300" fill="none" stroke="#1c1c24" stroke-width="30" stroke-linecap="round"/>
|
||||
<path d="M190,170 C226,104 300,66 384,58" fill="none" stroke="#454558" stroke-width="7" stroke-linecap="round"/>
|
||||
<ellipse cx="682" cy="326" rx="40" ry="74" fill="#1c1c24" stroke="#0b4a55" stroke-width="6"/>
|
||||
<ellipse cx="690" cy="326" rx="22" ry="50" fill="none" stroke="#22d3e6" stroke-width="8"/>
|
||||
<ellipse cx="174" cy="330" rx="56" ry="82" fill="#2c2c38" stroke="#0b4a55" stroke-width="6"/>
|
||||
<ellipse cx="146" cy="330" rx="60" ry="84" fill="#1c1c24" stroke="#0b4a55" stroke-width="7"/>
|
||||
<ellipse cx="146" cy="330" rx="38" ry="58" fill="none" stroke="#22d3e6" stroke-width="10"/>
|
||||
<ellipse cx="146" cy="330" rx="20" ry="34" fill="#22d3e6" opacity="0.4"/>
|
||||
<path d="M112,288 C118,270 130,260 144,258" fill="none" stroke="#454558" stroke-width="6" stroke-linecap="round"/>
|
||||
<!-- collar ring the bowl seats into -->
|
||||
<ellipse cx="412" cy="566" rx="150" ry="34" fill="#1c1c24" stroke="#0b4a55" stroke-width="6"/>
|
||||
<path d="M276,566 C320,590 500,592 548,566" fill="none" stroke="#22d3e6" stroke-width="5" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<g id="Bbody">
|
||||
<path d="M262,800 C262,700 290,630 340,600 L486,600 C536,630 562,700 562,800 Z" fill="#f4fbfc" stroke="#0b4a55" stroke-width="7"/>
|
||||
<path d="M512,626 C540,668 552,730 554,796 H526 C524,730 516,680 496,640 Z" fill="#bfe3ea"/>
|
||||
<path d="M360,602 L414,692 L468,602 Z" fill="#22d3e6" stroke="#0b4a55" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M340,600 C316,620 296,660 292,704 L392,664 L358,600 Z" fill="#22d3e6" stroke="#0b4a55" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M486,600 C510,620 530,660 534,704 L436,664 L470,600 Z" fill="#0f86a0" stroke="#0b4a55" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M308,654 L370,630 M518,652 L462,628" stroke="#f4fbfc" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M414,676 C390,656 362,660 366,684 C370,704 396,700 414,688 C432,700 458,704 462,684 C466,660 438,656 414,676 Z" fill="#ff6a1f" stroke="#0b4a55" stroke-width="4" stroke-linejoin="round"/>
|
||||
</g>
|
||||
|
||||
<!-- round synth pad, pebble keys -->
|
||||
<g id="Bpad">
|
||||
<circle cx="430" cy="720" r="80" fill="#1c1c24" stroke="#0b4a55" stroke-width="7"/>
|
||||
<circle cx="430" cy="720" r="64" fill="none" stroke="#22d3e6" stroke-width="5"/>
|
||||
<ellipse cx="400" cy="694" rx="15" ry="11" fill="#22d3e6"/>
|
||||
<ellipse cx="438" cy="682" rx="15" ry="11" fill="#ffb320"/>
|
||||
<ellipse cx="470" cy="702" rx="15" ry="11" fill="#ff6a1f"/>
|
||||
<ellipse cx="398" cy="730" rx="15" ry="11" fill="#ff6a1f"/>
|
||||
<ellipse cx="458" cy="740" rx="15" ry="11" fill="#22d3e6"/>
|
||||
<circle cx="428" cy="716" r="9" fill="#e8fbfd"/>
|
||||
<path d="M346,736 C330,716 336,690 358,688 C374,688 380,704 376,722 C372,740 358,748 346,736 Z" fill="#f6d9c4" stroke="#0b4a55" stroke-width="5"/>
|
||||
<path d="M512,708 C530,690 528,664 506,662 C490,662 484,678 488,696 C492,712 502,718 512,708 Z" fill="#f6d9c4" stroke="#0b4a55" stroke-width="5"/>
|
||||
</g>
|
||||
|
||||
<g id="BbustChar">
|
||||
<use href="#Btails"/>
|
||||
<use href="#Bbody"/>
|
||||
<use href="#Bhead"/>
|
||||
<use href="#Bpad"/>
|
||||
</g>
|
||||
</defs>
|
||||
|
||||
<rect width="1200" height="800" fill="#eef3f2"/>
|
||||
|
||||
<path d="M70,20 H790 L760,780 H40 Z" fill="#07111a"/>
|
||||
<g clip-path="url(#cardClip)">
|
||||
<path d="M600,40 l-180,740 M680,40 l-180,740" stroke="#22d3e6" stroke-opacity="0.07" stroke-width="40"/>
|
||||
<use href="#BbustChar" transform="translate(10,14)"/>
|
||||
</g>
|
||||
<path d="M70,20 H790 L760,780 H40 Z" fill="none" stroke="#22d3e6" stroke-width="5"/>
|
||||
|
||||
<use href="#bubble" transform="translate(746,200) scale(30)"/>
|
||||
<use href="#note" transform="translate(743,212) scale(0.9)"/>
|
||||
<use href="#bubble" transform="translate(770,110) scale(16)"/>
|
||||
<use href="#bubble" transform="translate(724,280) scale(10)"/>
|
||||
|
||||
<path d="M520,724 H770 L764,768 H512 Z" fill="#22d3e6"/>
|
||||
<text x="534" y="755" font-family="Consolas, 'Courier New', monospace" font-size="24" font-weight="700" letter-spacing="8" fill="#07111a">AQUA</text>
|
||||
|
||||
<text x="830" y="58" font-family="'Segoe UI', Arial, sans-serif" font-size="30" font-weight="700" letter-spacing="4" fill="#0b4a55">AQUA · B</text>
|
||||
<text x="830" y="86" font-family="'Segoe UI', Arial, sans-serif" font-size="17" font-weight="600" letter-spacing="2" fill="#0f86a0">BOWL HELMET</text>
|
||||
<text font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#1c1c24">
|
||||
<tspan x="830" y="118">Hook: she wears her tank — a round fishbowl</tspan>
|
||||
<tspan x="830" y="137">helmet, headphones clamped outside the glass,</tspan>
|
||||
<tspan x="830" y="156">gold twin tails cut like goldfish fan tails.</tspan>
|
||||
</text>
|
||||
|
||||
<!-- full body, about 2.3 heads -->
|
||||
<g>
|
||||
<ellipse cx="925" cy="520" rx="70" ry="9" fill="#0b4a55" opacity="0.15"/>
|
||||
<g transform="translate(925,262) scale(0.26) translate(-412,-320)">
|
||||
<use href="#Btails"/>
|
||||
</g>
|
||||
<path d="M892,348 C872,360 866,400 868,436 H982 C984,400 978,360 958,348 Z" fill="#f4fbfc" stroke="#0b4a55" stroke-width="4"/>
|
||||
<path d="M908,350 L925,378 L942,350 Z" fill="#22d3e6" stroke="#0b4a55" stroke-width="2.5" stroke-linejoin="round"/>
|
||||
<path d="M868,432 H982 L988,456 H862 Z" fill="#22d3e6" stroke="#0b4a55" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M898,456 h20 v40 h-20 Z M934,456 h20 v40 h-20 Z" fill="#f6d9c4" stroke="#0b4a55" stroke-width="3.5"/>
|
||||
<ellipse cx="906" cy="504" rx="18" ry="11" fill="#ff6a1f" stroke="#0b4a55" stroke-width="3.5"/>
|
||||
<ellipse cx="946" cy="504" rx="18" ry="11" fill="#ff6a1f" stroke="#0b4a55" stroke-width="3.5"/>
|
||||
<g transform="translate(925,262) scale(0.26) translate(-412,-320)">
|
||||
<use href="#Bhead"/>
|
||||
</g>
|
||||
<circle cx="926" cy="404" r="24" fill="#1c1c24" stroke="#0b4a55" stroke-width="3.5"/>
|
||||
<circle cx="926" cy="404" r="18" fill="none" stroke="#22d3e6" stroke-width="2.5"/>
|
||||
<circle cx="918" cy="396" r="4" fill="#ffb320"/><circle cx="932" cy="394" r="4" fill="#ff6a1f"/><circle cx="934" cy="410" r="4" fill="#22d3e6"/>
|
||||
<circle cx="900" cy="410" r="9" fill="#f6d9c4" stroke="#0b4a55" stroke-width="3"/>
|
||||
<circle cx="952" cy="398" r="9" fill="#f6d9c4" stroke="#0b4a55" stroke-width="3"/>
|
||||
<text x="925" y="545" text-anchor="middle" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a6a70">full body · 2.3 heads</text>
|
||||
</g>
|
||||
|
||||
<rect x="1040" y="250" width="140" height="140" fill="#ffffff" stroke="#b7c9cb"/>
|
||||
<g transform="translate(1048,262) scale(0.165) translate(-60,-40)">
|
||||
<use href="#BbustChar" filter="url(#sil)"/>
|
||||
</g>
|
||||
<text x="1110" y="408" text-anchor="middle" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a6a70">bust silhouette</text>
|
||||
|
||||
<text x="830" y="612" font-family="'Segoe UI', Arial, sans-serif" font-size="13" font-weight="700" letter-spacing="2" fill="#0b4a55">PALETTE</text>
|
||||
<g font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#1c1c24" text-anchor="middle">
|
||||
<rect x="830" y="626" width="50" height="50" rx="6" fill="#22d3e6" stroke="#0b4a55" stroke-width="2"/><text x="855" y="694">#22d3e6</text><text x="855" y="708">water</text>
|
||||
<rect x="890" y="626" width="50" height="50" rx="6" fill="#0b4a55" stroke="#0b4a55" stroke-width="2"/><text x="915" y="694">#0b4a55</text><text x="915" y="708">line</text>
|
||||
<rect x="950" y="626" width="50" height="50" rx="6" fill="#ffb320" stroke="#0b4a55" stroke-width="2"/><text x="975" y="694">#ffb320</text><text x="975" y="708">hair</text>
|
||||
<rect x="1010" y="626" width="50" height="50" rx="6" fill="#ff6a1f" stroke="#0b4a55" stroke-width="2"/><text x="1035" y="694">#ff6a1f</text><text x="1035" y="708">fin tip</text>
|
||||
<rect x="1070" y="626" width="50" height="50" rx="6" fill="#1c1c24" stroke="#0b4a55" stroke-width="2"/><text x="1095" y="694">#1c1c24</text><text x="1095" y="708">phones</text>
|
||||
<rect x="1130" y="626" width="50" height="50" rx="6" fill="#f6d9c4" stroke="#0b4a55" stroke-width="2"/><text x="1155" y="694">#f6d9c4</text><text x="1155" y="708">skin</text>
|
||||
</g>
|
||||
<text x="830" y="748" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a6a70">Jacket white is the sheet neutral, not a seventh hue.</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 234 KiB |
|
|
@ -1,193 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<title>Eureka, direction A</title>
|
||||
<defs>
|
||||
<filter id="sil" color-interpolation-filters="sRGB"><feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0"/></filter>
|
||||
<radialGradient id="glow"><stop offset="0" stop-color="#ff8a2a" stop-opacity="0.55"/><stop offset="1" stop-color="#ff8a2a" stop-opacity="0"/></radialGradient>
|
||||
<clipPath id="cardClip"><rect x="-300" y="-300" width="1400" height="1080"/></clipPath>
|
||||
<clipPath id="eyeL"><path d="M268 440 C278 410 338 398 378 416 C384 448 378 480 362 496 C332 506 296 504 280 490 C270 474 266 456 268 440 Z"/></clipPath>
|
||||
<clipPath id="eyeR"><path d="M454 432 C472 410 514 404 534 420 C540 450 534 480 522 494 C500 504 472 502 460 490 C452 470 450 450 454 432 Z"/></clipPath>
|
||||
<g id="hairBack">
|
||||
<path d="M190 360 C170 230 262 120 396 114 C532 110 626 210 614 350 C612 410 620 470 644 520 L602 512 L614 574 L568 542 L562 604 L526 558 L290 562 L250 612 L244 558 L196 584 L210 522 L166 522 C186 470 192 420 190 360 Z" fill="#1d2029" stroke="#2b1408" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M570 300 C596 380 604 460 644 520 L602 512 L614 574 L568 542 L562 604 L540 570 C580 500 590 400 570 300 Z" fill="#0d0f14"/>
|
||||
<path d="M600 300 C610 380 616 450 640 512" fill="none" stroke="#ff8a2a" stroke-width="4" stroke-linecap="round"/></g>
|
||||
<g id="hairBackWild">
|
||||
<path d="M186 360 C160 300 140 250 104 236 C150 222 176 214 196 200 C186 170 160 130 128 112 C182 110 222 120 250 136 C262 104 288 74 330 58 C326 82 330 100 340 116 C376 92 420 82 470 86 C450 98 440 112 436 122 C494 108 560 122 604 158 C580 160 566 168 558 178 C606 196 646 236 664 290 C640 282 624 284 614 290 C624 340 628 420 664 470 C640 470 624 474 616 482 C632 520 640 560 664 590 L604 572 L606 624 L566 582 L556 630 L524 580 L290 584 L246 636 L242 584 L190 606 L208 540 L156 548 C182 486 190 420 186 360 Z" fill="#1d2029" stroke="#2b1408" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M560 180 C620 230 640 300 616 290 C626 370 630 430 664 470 C640 470 624 474 616 482 C632 520 640 560 664 590 L604 572 L606 624 L566 582 L560 610 L540 570 C600 470 600 300 560 180 Z" fill="#0d0f14"/>
|
||||
<path d="M604 158 C640 200 662 250 664 290 M614 300 C622 380 640 440 660 468" fill="none" stroke="#ff8a2a" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M250 136 C270 110 296 86 324 70 M128 112 C170 126 200 150 214 176" fill="none" stroke="#3d4456" stroke-width="5" stroke-linecap="round"/></g>
|
||||
<g id="prybar">
|
||||
<path d="M0 0 L420 0 C470 0 492 -46 470 -88" fill="none" stroke="#2b1408" stroke-width="34" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M0 0 L420 0 C470 0 492 -46 470 -88" fill="none" stroke="#ff8a2a" stroke-width="22" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M0 5 L420 5 C464 6 486 -36 476 -76" fill="none" stroke="#c4561f" stroke-width="8"/>
|
||||
<path d="M10 -5 L380 -5" stroke="#ffd2a8" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M-10 0 L-26 -10 M-10 0 L-26 10" stroke="#2b1408" stroke-width="7" stroke-linecap="round"/>
|
||||
<path d="M462 -84 L486 -96" stroke="#2b1408" stroke-width="5"/>
|
||||
</g>
|
||||
<g id="lantern">
|
||||
<circle cx="0" cy="40" r="120" fill="url(#glow)"/>
|
||||
<path d="M-8 -84 C-8 -110 8 -110 8 -84" fill="none" stroke="#2b1408" stroke-width="8"/>
|
||||
<path d="M-30 -60 L30 -60 L22 -84 L-22 -84 Z" fill="#2c323e" stroke="#2b1408" stroke-width="6" stroke-linejoin="round"/>
|
||||
<rect x="-40" y="-62" width="80" height="16" rx="4" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
<path d="M-34 -46 L34 -46 L38 72 L-38 72 Z" fill="#ffc27a" stroke="#2b1408" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M8 -46 L34 -46 L38 72 L12 72 Z" fill="#ff8a2a"/>
|
||||
<path d="M0 50 C-22 30 -14 6 0 -16 C14 6 22 30 0 50 Z" fill="#ffffff" stroke="#ff8a2a" stroke-width="4"/>
|
||||
<path d="M-34 -6 L34 -6 M-36 34 L36 34 M0 -46 L0 72" stroke="#2b1408" stroke-width="5"/>
|
||||
<rect x="-46" y="70" width="92" height="20" rx="5" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
</g>
|
||||
<g id="bug">
|
||||
<path d="M-16 -6 L-40 -24 M-16 4 L-44 4 M-14 12 L-38 32 M16 -6 L40 -24 M16 4 L44 4 M14 12 L38 32 M-6 -24 L-18 -46 M6 -24 L18 -46" stroke="#2b1408" stroke-width="4" stroke-linecap="round" fill="none"/>
|
||||
<ellipse cx="0" cy="10" rx="20" ry="28" fill="#2c323e" stroke="#2b1408" stroke-width="5"/>
|
||||
<path d="M0 -16 L0 38" stroke="#2b1408" stroke-width="3"/>
|
||||
<circle cx="0" cy="-20" r="12" fill="#1a1e27" stroke="#2b1408" stroke-width="4"/>
|
||||
<circle cx="-5" cy="-22" r="4" fill="#ff8a2a"/><circle cx="5" cy="-22" r="4" fill="#ff8a2a"/><circle cx="0" cy="-14" r="3" fill="#ff8a2a"/>
|
||||
<path d="M-12 0 C-8 6 -8 14 -12 20 M12 0 C8 6 8 14 12 20" stroke="#ff8a2a" stroke-width="3" fill="none"/>
|
||||
</g>
|
||||
<g id="jar">
|
||||
<circle cx="0" cy="10" r="110" fill="url(#glow)"/>
|
||||
<path d="M-56 -60 C-60 -40 -62 60 -56 84 C-40 98 40 98 56 84 C62 60 60 -40 56 -60 Z" fill="#bfe6ff" fill-opacity="0.35" stroke="#2b1408" stroke-width="7" stroke-linejoin="round"/>
|
||||
<use href="#bug" transform="translate(0,14) rotate(-18) scale(1.1)"/>
|
||||
<path d="M-58 -60 L58 -60 L52 -84 L-52 -84 Z" fill="#2c323e" stroke="#2b1408" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M-56 -66 L56 -66" stroke="#ff8a2a" stroke-width="5"/>
|
||||
<path d="M-40 -40 C-46 0 -46 40 -40 70" fill="none" stroke="#ffffff" stroke-width="7" stroke-linecap="round" opacity="0.85"/>
|
||||
<path d="M-58 44 L58 44 L56 72 L-56 72 Z" fill="#f4efe7" stroke="#2b1408" stroke-width="4"/>
|
||||
<text x="0" y="64" text-anchor="middle" font-family="Consolas, 'Courier New', monospace" font-size="16" font-weight="700" fill="#2b1408">SURVIVED</text>
|
||||
</g>
|
||||
<g id="tweezers">
|
||||
<path d="M0 0 L-8 -190 M0 0 L14 -188" stroke="#2b1408" stroke-width="14" stroke-linecap="round"/>
|
||||
<path d="M0 0 L-8 -190 M0 0 L14 -188" stroke="#9aa3ae" stroke-width="7" stroke-linecap="round"/>
|
||||
<path d="M-4 -60 L8 -60" stroke="#ff8a2a" stroke-width="6"/>
|
||||
<use href="#bug" transform="translate(4,-222) rotate(30) scale(1.25)"/>
|
||||
<path d="M-30 -250 L-44 -262 M36 -246 L52 -256 M40 -214 L58 -212" stroke="#ff8a2a" stroke-width="4" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="torso">
|
||||
<path d="M362 556 L364 630 C390 646 420 646 446 630 L448 552 Z" fill="#ffd6a8" stroke="#2b1408" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M364 572 C392 598 424 598 448 568 L448 606 C420 622 392 620 364 604 Z" fill="#f2b089"/>
|
||||
<path d="M350 600 C300 620 226 630 186 668 C156 700 146 750 142 820 L668 820 C664 750 652 704 624 676 C594 646 512 624 458 600 Z" fill="#2c323e" stroke="#2b1408" stroke-width="9" stroke-linejoin="round"/>
|
||||
<path d="M560 640 C600 660 640 690 650 820 L590 820 C596 740 590 680 560 640 Z" fill="#1a1e27"/>
|
||||
<path d="M352 604 L404 730 L456 604 Z" fill="#14161c" stroke="#2b1408" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M380 640 L404 700 L428 640" fill="none" stroke="#4a505c" stroke-width="10" stroke-linejoin="round"/>
|
||||
<path d="M354 590 L280 616 L320 704 L404 736 Z" fill="#3d4554" stroke="#2b1408" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M454 590 L528 616 L490 704 L404 736 Z" fill="#2c323e" stroke="#2b1408" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M284 620 L322 702 L398 730 M524 620 L488 702 L410 730" fill="none" stroke="#ff8a2a" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M232 660 L330 820" stroke="#2b1408" stroke-width="32" stroke-linecap="butt"/>
|
||||
<path d="M232 660 L330 820" stroke="#4a505c" stroke-width="22"/>
|
||||
<path d="M588 664 L500 820" stroke="#2b1408" stroke-width="32"/>
|
||||
<path d="M588 664 L500 820" stroke="#4a505c" stroke-width="22"/>
|
||||
<rect x="252" y="700" width="46" height="34" rx="5" transform="rotate(-58 275 717)" fill="#9aa3ae" stroke="#2b1408" stroke-width="5"/>
|
||||
<rect x="512" y="728" width="62" height="60" rx="8" transform="rotate(28 543 758)" fill="#4a505c" stroke="#2b1408" stroke-width="5"/>
|
||||
<path d="M518 744 L572 770" stroke="#2b1408" stroke-width="4" transform="rotate(28 543 758)"/>
|
||||
<circle cx="560" cy="712" r="7" fill="#ff8a2a" stroke="#2b1408" stroke-width="3"/>
|
||||
<path d="M620 690 C640 720 650 760 652 820" fill="none" stroke="#ff8a2a" stroke-width="4"/></g>
|
||||
<g id="head">
|
||||
<path d="M212 300 C204 400 238 492 320 548 C364 578 414 596 448 586 C488 572 532 522 556 450 C570 404 574 350 566 300 Z" fill="#ffd6a8" stroke="#2b1408" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M216 360 L256 400 L270 340 L322 384 L346 330 L398 392 L424 326 L470 386 L486 330 L540 396 L548 334 L568 380 C570 340 568 320 566 300 L212 300 Z" fill="#f2b089"/>
|
||||
<path d="M560 400 C552 470 520 528 460 570 C500 556 544 512 558 452 Z" fill="#f2b089"/>
|
||||
<path d="M561 330 C566 400 548 474 500 540" fill="none" stroke="#ff8a2a" stroke-width="5" stroke-linecap="round"/>
|
||||
<ellipse cx="300" cy="516" rx="30" ry="12" fill="#ff8a2a" opacity="0.25"/>
|
||||
<ellipse cx="512" cy="510" rx="22" ry="11" fill="#ff8a2a" opacity="0.25"/>
|
||||
|
||||
<path d="M268 440 C278 410 338 398 378 416 C384 448 378 480 362 496 C332 506 296 504 280 490 C270 474 266 456 268 440 Z" fill="#ffffff"/>
|
||||
<g clip-path="url(#eyeL)">
|
||||
<path d="M268 410 L390 410 L390 440 C350 424 300 426 268 448 Z" fill="#d6dde6"/>
|
||||
<ellipse cx="336" cy="456" rx="40" ry="52" fill="#59b7ff" stroke="#2b1408" stroke-width="3.5"/>
|
||||
<path d="M296 456 A40 52 0 0 1 376 456 C358 444 314 444 296 456 Z" fill="#2a5d9a"/>
|
||||
<ellipse cx="338" cy="488" rx="26" ry="13" fill="#bfe6ff"/>
|
||||
<path d="M312 470 C320 478 352 478 360 470" fill="none" stroke="#ff8a2a" stroke-width="3" opacity="0.9"/>
|
||||
<ellipse cx="338" cy="458" rx="15" ry="22" fill="#0f2238"/>
|
||||
<ellipse cx="318" cy="436" rx="13" ry="17" fill="#ffffff"/>
|
||||
<circle cx="354" cy="482" r="6" fill="#ffffff"/>
|
||||
</g>
|
||||
<path d="M258 454 C264 408 336 386 388 410 L404 398 L398 422 L388 428 C340 406 288 416 270 458 Z" fill="#2b1408"/>
|
||||
<path d="M258 452 L244 446 M262 436 L248 424" stroke="#2b1408" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M292 498 C312 506 340 506 360 496" fill="none" stroke="#2b1408" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<path d="M454 432 C472 410 514 404 534 420 C540 450 534 480 522 494 C500 504 472 502 460 490 C452 470 450 450 454 432 Z" fill="#ffffff"/>
|
||||
<g clip-path="url(#eyeR)">
|
||||
<path d="M450 404 L545 404 L545 432 C514 414 476 418 450 442 Z" fill="#d6dde6"/>
|
||||
<ellipse cx="500" cy="456" rx="32" ry="50" fill="#59b7ff" stroke="#2b1408" stroke-width="3.5"/>
|
||||
<path d="M468 456 A32 50 0 0 1 532 456 C518 444 482 444 468 456 Z" fill="#2a5d9a"/>
|
||||
<ellipse cx="502" cy="488" rx="20" ry="12" fill="#bfe6ff"/>
|
||||
<path d="M482 470 C488 478 512 478 518 470" fill="none" stroke="#ff8a2a" stroke-width="3" opacity="0.9"/>
|
||||
<ellipse cx="502" cy="458" rx="12" ry="21" fill="#0f2238"/>
|
||||
<ellipse cx="486" cy="436" rx="10" ry="15" fill="#ffffff"/>
|
||||
<circle cx="514" cy="482" r="5" fill="#ffffff"/>
|
||||
</g>
|
||||
<path d="M448 446 C462 404 522 396 546 418 L560 410 L554 432 C522 408 474 414 456 450 Z" fill="#2b1408"/>
|
||||
<path d="M470 496 C488 504 506 502 520 494" fill="none" stroke="#2b1408" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M282 384 C300 362 336 356 362 366" fill="none" stroke="#2b1408" stroke-width="6" stroke-linecap="round"/><path d="M466 380 C484 372 508 372 526 382" fill="none" stroke="#2b1408" stroke-width="6" stroke-linecap="round"/>
|
||||
<path d="M444 498 L438 510 L448 510" fill="none" stroke="#c4561f" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M414 536 C432 544 452 542 472 526" fill="none" stroke="#2b1408" stroke-width="4.5" stroke-linecap="round"/><path d="M468 520 L478 530" stroke="#2b1408" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M318 572 L330 566 M340 580 L352 574" stroke="#f2b089" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M252 452 C262 400 340 380 396 406 L398 432 C350 420 300 424 266 452 Z" fill="#ffd6a8"/>
|
||||
<path d="M440 446 C456 396 528 388 552 414 L550 436 C520 422 476 422 452 448 Z" fill="#ffd6a8"/>
|
||||
<path d="M260 460 C276 426 340 412 394 432 L408 424 L400 442 C346 428 292 436 270 466 Z" fill="#2b1408"/>
|
||||
<path d="M260 458 L244 452" stroke="#2b1408" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M448 452 C468 424 524 420 548 438 L562 432 L554 450 C524 434 476 436 456 456 Z" fill="#2b1408"/>
|
||||
<path d="M194 372 C186 238 280 146 402 144 C522 142 614 228 606 362 L592 404 C580 368 566 346 552 330 L542 392 C524 356 504 334 486 322 L470 384 C456 348 442 330 424 320 L404 428 C392 380 372 340 346 322 L322 380 C306 352 288 336 270 334 L262 398 C252 386 242 376 234 368 L226 470 C204 436 194 404 194 372 Z" fill="#1d2029" stroke="#2b1408" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M506 158 C560 180 600 240 606 330 L592 404 C580 368 566 346 552 330 L542 392 C524 356 504 334 486 322 C520 290 530 220 506 158 Z" fill="#0d0f14"/>
|
||||
<path d="M382 200 C372 250 372 300 382 340 M460 190 C474 230 478 280 470 316 M236 300 C230 340 230 360 236 368" fill="none" stroke="#0d0f14" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M396 182 C424 176 452 178 476 188 L462 202 L446 194 L430 208 L414 196 Z" fill="#3d4456"/>
|
||||
<path d="M322 150 C278 204 254 300 262 398 C282 348 304 290 352 154 Z" fill="#ff8a2a" stroke="#2b1408" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M300 196 C282 240 270 300 270 360" fill="none" stroke="#c4561f" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M330 170 C318 190 310 210 304 232" fill="none" stroke="#ffd2a8" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M561 300 C590 330 600 360 594 396" fill="none" stroke="#ff8a2a" stroke-width="4" stroke-linecap="round"/>
|
||||
<path fill-rule="evenodd" d="M150 600 C120 440 140 260 236 150 C270 110 280 70 262 22 C340 40 420 66 478 92 C610 148 662 290 652 440 C648 510 636 566 618 600 Z M214 600 C190 470 186 330 236 246 C284 176 348 152 404 152 C484 152 562 196 592 278 C620 360 612 480 590 600 Z" fill="#2c323e"/>
|
||||
<path d="M150 610 C120 440 140 260 236 150 C270 110 280 70 262 22 C340 40 420 66 478 92 C610 148 662 290 652 440 C648 510 636 566 618 600 M214 600 C190 470 186 330 236 246 C284 176 348 152 404 152 C484 152 562 196 592 278 C620 360 612 480 590 600" fill="none" stroke="#2b1408" stroke-width="9" stroke-linejoin="round"/>
|
||||
<path d="M262 22 C340 40 420 66 478 92 C610 148 662 290 652 440 C648 510 636 566 618 600 L590 600 C612 480 620 360 592 278 C562 196 484 152 404 152 C470 120 520 120 478 92 Z" fill="#1a1e27"/>
|
||||
<path d="M218 588 C196 466 194 334 240 254 C288 184 350 162 404 162 C482 162 556 204 584 282 C610 360 604 476 584 590" fill="none" stroke="#ff8a2a" stroke-width="7" stroke-linecap="round"/>
|
||||
<path d="M252 40 C300 60 330 90 342 130 M200 300 C172 380 170 470 180 560" fill="none" stroke="#3d4554" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M622 330 C640 400 642 480 628 560" fill="none" stroke="#ff8a2a" stroke-width="4" stroke-linecap="round"/></g>
|
||||
<g id="headBack"><path d="M150 700 C120 440 140 260 236 150 C270 110 280 70 262 22 C340 40 420 66 478 92 C610 148 662 290 652 440 C648 530 640 620 630 700 Z" fill="#2c323e" stroke="#2b1408" stroke-width="9" stroke-linejoin="round"/><path d="M604 520 C620 600 630 660 630 700 L580 700 C600 640 606 580 604 520 Z" fill="#1a1e27"/><path d="M214 640 C190 470 186 330 236 246 C284 176 348 152 404 152 C484 152 562 196 592 278 C620 360 612 480 594 640 Z" fill="#111319"/><use href="#hairBack"/></g>
|
||||
<g id="bust"><path d="M150 700 C120 440 140 260 236 150 C270 110 280 70 262 22 C340 40 420 66 478 92 C610 148 662 290 652 440 C648 530 640 620 630 700 Z" fill="#2c323e" stroke="#2b1408" stroke-width="9" stroke-linejoin="round"/><path d="M604 520 C620 600 630 660 630 700 L580 700 C600 640 606 580 604 520 Z" fill="#1a1e27"/><path d="M214 640 C190 470 186 330 236 246 C284 176 348 152 404 152 C484 152 562 196 592 278 C620 360 612 480 594 640 Z" fill="#111319"/><use href="#hairBack"/><use href="#torso"/><use href="#prybar" transform="translate(300,850) rotate(-121) scale(1.12)"/><use href="#head"/><path d="M214 840 L256 716" stroke="#2b1408" stroke-width="72" stroke-linecap="round"/><path d="M214 840 L256 716" stroke="#2c323e" stroke-width="58" stroke-linecap="round"/><path d="M236 840 L274 724" stroke="#ff8a2a" stroke-width="4"/><g transform="translate(262,700) rotate(-31) scale(1.0)">
|
||||
<rect x="-34" y="-34" width="58" height="22" rx="11" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
<rect x="-38" y="-14" width="62" height="22" rx="11" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
<rect x="-38" y="6" width="62" height="22" rx="11" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
<rect x="-34" y="26" width="56" height="22" rx="11" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
<path d="M18 -36 C40 -40 52 -24 46 -8 C42 4 30 6 22 0 Z" fill="#1a1e27" stroke="#2b1408" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M-30 -26 C-30 -8 -32 12 -30 38" fill="none" stroke="#ff8a2a" stroke-width="3" stroke-linecap="round"/>
|
||||
</g><path d="M780 600 L716 360" stroke="#2b1408" stroke-width="72" stroke-linecap="round"/><path d="M780 600 L716 360" stroke="#2c323e" stroke-width="58" stroke-linecap="round"/><path d="M802 600 L734 368" stroke="#ff8a2a" stroke-width="4"/><g transform="translate(690,318) rotate(14) scale(0.9)">
|
||||
<rect x="-34" y="-34" width="58" height="22" rx="11" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
<rect x="-38" y="-14" width="62" height="22" rx="11" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
<rect x="-38" y="6" width="62" height="22" rx="11" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
<rect x="-34" y="26" width="56" height="22" rx="11" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
<path d="M18 -36 C40 -40 52 -24 46 -8 C42 4 30 6 22 0 Z" fill="#1a1e27" stroke="#2b1408" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M-30 -26 C-30 -8 -32 12 -30 38" fill="none" stroke="#ff8a2a" stroke-width="3" stroke-linecap="round"/>
|
||||
</g><use href="#lantern" transform="translate(664,446)"/></g>
|
||||
</defs>
|
||||
<rect width="1200" height="800" fill="#f4efe7"/>
|
||||
<polygon points="74,46 786,46 740,780 20,780" fill="#07111a"/>
|
||||
<polygon points="300,46 640,46 560,780 220,780" fill="#0f2131"/>
|
||||
<polygon points="74,46 786,46 740,780 20,780" fill="none" stroke="#ff8a2a" stroke-width="5"/>
|
||||
<g clip-path="url(#cardClip)"><use href="#bust" transform="translate(66,102) scale(0.84)"/></g>
|
||||
<polygon points="40,708 300,708 288,756 28,756" fill="#ff8a2a"/>
|
||||
<text x="58" y="743" font-family="Consolas, 'Courier New', monospace" font-size="30" font-weight="700" letter-spacing="8" fill="#07111a">EUREKA</text>
|
||||
<text x="812" y="66" font-family="Consolas, 'Courier New', monospace" font-size="18" font-weight="700" letter-spacing="2" fill="#2b1408">EUREKA / A / HOOD + LANTERN</text>
|
||||
<text x="812" y="94" font-family="'Segoe UI', Arial, sans-serif" font-size="15" fill="#2b1408">Hook: the peaked neon-piped hood, up, with a lantern</text>
|
||||
<text x="812" y="113" font-family="'Segoe UI', Arial, sans-serif" font-size="15" fill="#2b1408">raised to her face and the pry bar across her shoulder.</text>
|
||||
<g transform="translate(-16,0)"><use href="#headBack" transform="translate(768,152) scale(0.36)"/>
|
||||
|
||||
<path d="M880 520 L900 520 L898 576 L878 576 Z M914 520 L934 520 L936 576 L916 576 Z" fill="#14161c" stroke="#2b1408" stroke-width="4"/>
|
||||
<path d="M868 572 L902 572 L904 600 L860 600 C860 588 862 578 868 572 Z M912 572 L944 572 C952 578 956 590 956 600 L910 600 Z" fill="#1a1e27" stroke="#2b1408" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M862 596 L904 596 M910 596 L956 596" stroke="#ff8a2a" stroke-width="3"/>
|
||||
<path d="M884 360 C862 364 852 380 850 400 L834 528 C860 536 950 536 978 528 L962 400 C960 380 950 364 928 360 Z" fill="#2c323e" stroke="#2b1408" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M930 362 C950 366 960 384 962 400 L978 528 C966 532 956 532 946 532 L944 420 Z" fill="#1a1e27"/>
|
||||
<path d="M906 372 L908 532 M836 524 C860 532 950 532 976 524" fill="none" stroke="#ff8a2a" stroke-width="3"/>
|
||||
<path d="M886 366 L906 392 L926 366" fill="#14161c" stroke="#2b1408" stroke-width="3"/>
|
||||
<path d="M866 372 L944 440 M948 372 L870 440" stroke="#4a505c" stroke-width="7"/>
|
||||
<rect x="896" y="398" width="20" height="16" rx="3" fill="#9aa3ae" stroke="#2b1408" stroke-width="3"/>
|
||||
<rect x="930" y="430" width="22" height="22" rx="4" fill="#4a505c" stroke="#2b1408" stroke-width="3"/>
|
||||
<path d="M896 434 L918 434" stroke="#4a505c" stroke-width="8"/>
|
||||
<use href="#prybar" transform="translate(874,442) rotate(-122) scale(0.32)"/>
|
||||
<use href="#head" transform="translate(768,152) scale(0.36)"/>
|
||||
<path d="M858 378 L850 410" stroke="#2b1408" stroke-width="24" stroke-linecap="round"/><path d="M858 378 L850 410" stroke="#2c323e" stroke-width="16" stroke-linecap="round"/><circle cx="852" cy="418" r="10" fill="#1a1e27" stroke="#2b1408" stroke-width="4"/>
|
||||
<path d="M956 378 L978 420" stroke="#2b1408" stroke-width="24" stroke-linecap="round"/><path d="M956 378 L978 420" stroke="#2c323e" stroke-width="16" stroke-linecap="round"/><use href="#lantern" transform="translate(984,470) scale(0.36)"/><circle cx="982" cy="428" r="10" fill="#1a1e27" stroke="#2b1408" stroke-width="4"/></g>
|
||||
<text x="850" y="626" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#2b1408">full body, 2.5 heads</text>
|
||||
<rect x="1012" y="140" width="168" height="200" fill="#ffffff" stroke="#d8cfc2"/>
|
||||
<g filter="url(#sil)"><use href="#bust" transform="translate(1026,160) scale(0.2)"/></g>
|
||||
<text x="1016" y="356" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#2b1408">bust silhouette</text>
|
||||
<rect x="1012" y="372" width="64" height="64" fill="#ffffff" stroke="#d8cfc2"/>
|
||||
<g filter="url(#sil)"><use href="#bust" transform="translate(1021,380) scale(0.062)"/></g>
|
||||
<text x="1086" y="410" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#2b1408">at 48 px</text>
|
||||
<g font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#2b1408"><rect x="812" y="640" width="52" height="52" fill="#ff8a2a" stroke="#2b1408" stroke-width="2"/><text x="812" y="708">#ff8a2a</text><text x="812" y="722">neon</text><rect x="874" y="640" width="52" height="52" fill="#2b1408" stroke="#2b1408" stroke-width="2"/><text x="874" y="708">#2b1408</text><text x="874" y="722">line</text><rect x="936" y="640" width="52" height="52" fill="#1d2029" stroke="#2b1408" stroke-width="2"/><text x="936" y="708">#1d2029</text><text x="936" y="722">hair</text><rect x="998" y="640" width="52" height="52" fill="#2c323e" stroke="#2b1408" stroke-width="2"/><text x="998" y="708">#2c323e</text><text x="998" y="722">coat</text><rect x="1060" y="640" width="52" height="52" fill="#ffd6a8" stroke="#2b1408" stroke-width="2"/><text x="1060" y="708">#ffd6a8</text><text x="1060" y="722">skin</text><rect x="1122" y="640" width="52" height="52" fill="#59b7ff" stroke="#2b1408" stroke-width="2"/><text x="1122" y="708">#59b7ff</text><text x="1122" y="722">eyes</text></g>
|
||||
<text x="812" y="748" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#2b1408">Canon: hooded neon-noir trench, harness, black hair, one orange streak.</text>
|
||||
<text x="812" y="766" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#2b1408">Shape: one tall wedge (hood) over a circle; lantern and bar flank it.</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 215 KiB |
|
|
@ -1,181 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<title>Eureka, direction B</title>
|
||||
<defs>
|
||||
<filter id="sil" color-interpolation-filters="sRGB"><feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0"/></filter>
|
||||
<radialGradient id="glow"><stop offset="0" stop-color="#ff8a2a" stop-opacity="0.55"/><stop offset="1" stop-color="#ff8a2a" stop-opacity="0"/></radialGradient>
|
||||
<clipPath id="cardClip"><rect x="-300" y="-300" width="1400" height="1080"/></clipPath>
|
||||
<clipPath id="eyeL"><path d="M268 440 C278 410 338 398 378 416 C384 448 378 480 362 496 C332 506 296 504 280 490 C270 474 266 456 268 440 Z"/></clipPath>
|
||||
<clipPath id="eyeR"><path d="M454 432 C472 410 514 404 534 420 C540 450 534 480 522 494 C500 504 472 502 460 490 C452 470 450 450 454 432 Z"/></clipPath>
|
||||
<g id="hairBack">
|
||||
<path d="M190 360 C170 230 262 120 396 114 C532 110 626 210 614 350 C612 410 620 470 644 520 L602 512 L614 574 L568 542 L562 604 L526 558 L290 562 L250 612 L244 558 L196 584 L210 522 L166 522 C186 470 192 420 190 360 Z" fill="#1d2029" stroke="#2b1408" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M570 300 C596 380 604 460 644 520 L602 512 L614 574 L568 542 L562 604 L540 570 C580 500 590 400 570 300 Z" fill="#0d0f14"/>
|
||||
<path d="M600 300 C610 380 616 450 640 512" fill="none" stroke="#ff8a2a" stroke-width="4" stroke-linecap="round"/></g>
|
||||
<g id="hairBackWild">
|
||||
<path d="M186 360 C160 300 140 250 104 236 C150 222 176 214 196 200 C186 170 160 130 128 112 C182 110 222 120 250 136 C262 104 288 74 330 58 C326 82 330 100 340 116 C376 92 420 82 470 86 C450 98 440 112 436 122 C494 108 560 122 604 158 C580 160 566 168 558 178 C606 196 646 236 664 290 C640 282 624 284 614 290 C624 340 628 420 664 470 C640 470 624 474 616 482 C632 520 640 560 664 590 L604 572 L606 624 L566 582 L556 630 L524 580 L290 584 L246 636 L242 584 L190 606 L208 540 L156 548 C182 486 190 420 186 360 Z" fill="#1d2029" stroke="#2b1408" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M560 180 C620 230 640 300 616 290 C626 370 630 430 664 470 C640 470 624 474 616 482 C632 520 640 560 664 590 L604 572 L606 624 L566 582 L560 610 L540 570 C600 470 600 300 560 180 Z" fill="#0d0f14"/>
|
||||
<path d="M604 158 C640 200 662 250 664 290 M614 300 C622 380 640 440 660 468" fill="none" stroke="#ff8a2a" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M250 136 C270 110 296 86 324 70 M128 112 C170 126 200 150 214 176" fill="none" stroke="#3d4456" stroke-width="5" stroke-linecap="round"/></g>
|
||||
<g id="prybar">
|
||||
<path d="M0 0 L420 0 C470 0 492 -46 470 -88" fill="none" stroke="#2b1408" stroke-width="34" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M0 0 L420 0 C470 0 492 -46 470 -88" fill="none" stroke="#ff8a2a" stroke-width="22" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M0 5 L420 5 C464 6 486 -36 476 -76" fill="none" stroke="#c4561f" stroke-width="8"/>
|
||||
<path d="M10 -5 L380 -5" stroke="#ffd2a8" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M-10 0 L-26 -10 M-10 0 L-26 10" stroke="#2b1408" stroke-width="7" stroke-linecap="round"/>
|
||||
<path d="M462 -84 L486 -96" stroke="#2b1408" stroke-width="5"/>
|
||||
</g>
|
||||
<g id="lantern">
|
||||
<circle cx="0" cy="40" r="120" fill="url(#glow)"/>
|
||||
<path d="M-8 -84 C-8 -110 8 -110 8 -84" fill="none" stroke="#2b1408" stroke-width="8"/>
|
||||
<path d="M-30 -60 L30 -60 L22 -84 L-22 -84 Z" fill="#2c323e" stroke="#2b1408" stroke-width="6" stroke-linejoin="round"/>
|
||||
<rect x="-40" y="-62" width="80" height="16" rx="4" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
<path d="M-34 -46 L34 -46 L38 72 L-38 72 Z" fill="#ffc27a" stroke="#2b1408" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M8 -46 L34 -46 L38 72 L12 72 Z" fill="#ff8a2a"/>
|
||||
<path d="M0 50 C-22 30 -14 6 0 -16 C14 6 22 30 0 50 Z" fill="#ffffff" stroke="#ff8a2a" stroke-width="4"/>
|
||||
<path d="M-34 -6 L34 -6 M-36 34 L36 34 M0 -46 L0 72" stroke="#2b1408" stroke-width="5"/>
|
||||
<rect x="-46" y="70" width="92" height="20" rx="5" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
</g>
|
||||
<g id="bug">
|
||||
<path d="M-16 -6 L-40 -24 M-16 4 L-44 4 M-14 12 L-38 32 M16 -6 L40 -24 M16 4 L44 4 M14 12 L38 32 M-6 -24 L-18 -46 M6 -24 L18 -46" stroke="#2b1408" stroke-width="4" stroke-linecap="round" fill="none"/>
|
||||
<ellipse cx="0" cy="10" rx="20" ry="28" fill="#2c323e" stroke="#2b1408" stroke-width="5"/>
|
||||
<path d="M0 -16 L0 38" stroke="#2b1408" stroke-width="3"/>
|
||||
<circle cx="0" cy="-20" r="12" fill="#1a1e27" stroke="#2b1408" stroke-width="4"/>
|
||||
<circle cx="-5" cy="-22" r="4" fill="#ff8a2a"/><circle cx="5" cy="-22" r="4" fill="#ff8a2a"/><circle cx="0" cy="-14" r="3" fill="#ff8a2a"/>
|
||||
<path d="M-12 0 C-8 6 -8 14 -12 20 M12 0 C8 6 8 14 12 20" stroke="#ff8a2a" stroke-width="3" fill="none"/>
|
||||
</g>
|
||||
<g id="jar">
|
||||
<circle cx="0" cy="10" r="110" fill="url(#glow)"/>
|
||||
<path d="M-56 -60 C-60 -40 -62 60 -56 84 C-40 98 40 98 56 84 C62 60 60 -40 56 -60 Z" fill="#bfe6ff" fill-opacity="0.35" stroke="#2b1408" stroke-width="7" stroke-linejoin="round"/>
|
||||
<use href="#bug" transform="translate(0,14) rotate(-18) scale(1.1)"/>
|
||||
<path d="M-58 -60 L58 -60 L52 -84 L-52 -84 Z" fill="#2c323e" stroke="#2b1408" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M-56 -66 L56 -66" stroke="#ff8a2a" stroke-width="5"/>
|
||||
<path d="M-40 -40 C-46 0 -46 40 -40 70" fill="none" stroke="#ffffff" stroke-width="7" stroke-linecap="round" opacity="0.85"/>
|
||||
<path d="M-58 44 L58 44 L56 72 L-56 72 Z" fill="#f4efe7" stroke="#2b1408" stroke-width="4"/>
|
||||
<text x="0" y="64" text-anchor="middle" font-family="Consolas, 'Courier New', monospace" font-size="16" font-weight="700" fill="#2b1408">SURVIVED</text>
|
||||
</g>
|
||||
<g id="tweezers">
|
||||
<path d="M0 0 L-8 -190 M0 0 L14 -188" stroke="#2b1408" stroke-width="14" stroke-linecap="round"/>
|
||||
<path d="M0 0 L-8 -190 M0 0 L14 -188" stroke="#9aa3ae" stroke-width="7" stroke-linecap="round"/>
|
||||
<path d="M-4 -60 L8 -60" stroke="#ff8a2a" stroke-width="6"/>
|
||||
<use href="#bug" transform="translate(4,-222) rotate(30) scale(1.25)"/>
|
||||
<path d="M-30 -250 L-44 -262 M36 -246 L52 -256 M40 -214 L58 -212" stroke="#ff8a2a" stroke-width="4" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="torso">
|
||||
<path d="M362 556 L364 630 C390 646 420 646 446 630 L448 552 Z" fill="#ffd6a8" stroke="#2b1408" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M364 572 C392 598 424 598 448 568 L448 606 C420 622 392 620 364 604 Z" fill="#f2b089"/>
|
||||
<path d="M350 600 C300 620 226 630 186 668 C156 700 146 750 142 820 L668 820 C664 750 652 704 624 676 C594 646 512 624 458 600 Z" fill="#2c323e" stroke="#2b1408" stroke-width="9" stroke-linejoin="round"/>
|
||||
<path d="M560 640 C600 660 640 690 650 820 L590 820 C596 740 590 680 560 640 Z" fill="#1a1e27"/>
|
||||
<path d="M352 604 L404 730 L456 604 Z" fill="#14161c" stroke="#2b1408" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M380 640 L404 700 L428 640" fill="none" stroke="#4a505c" stroke-width="10" stroke-linejoin="round"/>
|
||||
<path d="M354 590 L280 616 L320 704 L404 736 Z" fill="#3d4554" stroke="#2b1408" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M454 590 L528 616 L490 704 L404 736 Z" fill="#2c323e" stroke="#2b1408" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M284 620 L322 702 L398 730 M524 620 L488 702 L410 730" fill="none" stroke="#ff8a2a" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M232 660 L330 820" stroke="#2b1408" stroke-width="32" stroke-linecap="butt"/>
|
||||
<path d="M232 660 L330 820" stroke="#4a505c" stroke-width="22"/>
|
||||
<path d="M588 664 L500 820" stroke="#2b1408" stroke-width="32"/>
|
||||
<path d="M588 664 L500 820" stroke="#4a505c" stroke-width="22"/>
|
||||
<rect x="252" y="700" width="46" height="34" rx="5" transform="rotate(-58 275 717)" fill="#9aa3ae" stroke="#2b1408" stroke-width="5"/>
|
||||
<rect x="512" y="728" width="62" height="60" rx="8" transform="rotate(28 543 758)" fill="#4a505c" stroke="#2b1408" stroke-width="5"/>
|
||||
<path d="M518 744 L572 770" stroke="#2b1408" stroke-width="4" transform="rotate(28 543 758)"/>
|
||||
<circle cx="560" cy="712" r="7" fill="#ff8a2a" stroke="#2b1408" stroke-width="3"/>
|
||||
<path d="M620 690 C640 720 650 760 652 820" fill="none" stroke="#ff8a2a" stroke-width="4"/></g>
|
||||
<g id="head">
|
||||
<path d="M212 300 C204 400 238 492 320 548 C364 578 414 596 448 586 C488 572 532 522 556 450 C570 404 574 350 566 300 Z" fill="#ffd6a8" stroke="#2b1408" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M216 360 L256 400 L270 340 L322 384 L346 330 L398 392 L424 326 L470 386 L486 330 L540 396 L548 334 L568 380 C570 340 568 320 566 300 L212 300 Z" fill="#f2b089"/>
|
||||
<path d="M560 400 C552 470 520 528 460 570 C500 556 544 512 558 452 Z" fill="#f2b089"/>
|
||||
<path d="M561 330 C566 400 548 474 500 540" fill="none" stroke="#ff8a2a" stroke-width="5" stroke-linecap="round"/>
|
||||
<ellipse cx="300" cy="516" rx="30" ry="12" fill="#ff8a2a" opacity="0.25"/>
|
||||
<ellipse cx="512" cy="510" rx="22" ry="11" fill="#ff8a2a" opacity="0.25"/>
|
||||
|
||||
<path d="M268 440 C278 410 338 398 378 416 C384 448 378 480 362 496 C332 506 296 504 280 490 C270 474 266 456 268 440 Z" fill="#ffffff"/>
|
||||
<g clip-path="url(#eyeL)">
|
||||
<path d="M268 410 L390 410 L390 440 C350 424 300 426 268 448 Z" fill="#d6dde6"/>
|
||||
<ellipse cx="336" cy="456" rx="40" ry="52" fill="#59b7ff" stroke="#2b1408" stroke-width="3.5"/>
|
||||
<path d="M296 456 A40 52 0 0 1 376 456 C358 444 314 444 296 456 Z" fill="#2a5d9a"/>
|
||||
<ellipse cx="338" cy="488" rx="26" ry="13" fill="#bfe6ff"/>
|
||||
<path d="M312 470 C320 478 352 478 360 470" fill="none" stroke="#ff8a2a" stroke-width="3" opacity="0.9"/>
|
||||
<ellipse cx="338" cy="458" rx="15" ry="22" fill="#0f2238"/>
|
||||
<ellipse cx="318" cy="436" rx="13" ry="17" fill="#ffffff"/>
|
||||
<circle cx="354" cy="482" r="6" fill="#ffffff"/>
|
||||
</g>
|
||||
<path d="M258 454 C264 408 336 386 388 410 L404 398 L398 422 L388 428 C340 406 288 416 270 458 Z" fill="#2b1408"/>
|
||||
<path d="M258 452 L244 446 M262 436 L248 424" stroke="#2b1408" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M292 498 C312 506 340 506 360 496" fill="none" stroke="#2b1408" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<path d="M454 432 C472 410 514 404 534 420 C540 450 534 480 522 494 C500 504 472 502 460 490 C452 470 450 450 454 432 Z" fill="#ffffff"/>
|
||||
<g clip-path="url(#eyeR)">
|
||||
<path d="M450 404 L545 404 L545 432 C514 414 476 418 450 442 Z" fill="#d6dde6"/>
|
||||
<ellipse cx="500" cy="456" rx="32" ry="50" fill="#59b7ff" stroke="#2b1408" stroke-width="3.5"/>
|
||||
<path d="M468 456 A32 50 0 0 1 532 456 C518 444 482 444 468 456 Z" fill="#2a5d9a"/>
|
||||
<ellipse cx="502" cy="488" rx="20" ry="12" fill="#bfe6ff"/>
|
||||
<path d="M482 470 C488 478 512 478 518 470" fill="none" stroke="#ff8a2a" stroke-width="3" opacity="0.9"/>
|
||||
<ellipse cx="502" cy="458" rx="12" ry="21" fill="#0f2238"/>
|
||||
<ellipse cx="486" cy="436" rx="10" ry="15" fill="#ffffff"/>
|
||||
<circle cx="514" cy="482" r="5" fill="#ffffff"/>
|
||||
</g>
|
||||
<path d="M448 446 C462 404 522 396 546 418 L560 410 L554 432 C522 408 474 414 456 450 Z" fill="#2b1408"/>
|
||||
<path d="M470 496 C488 504 506 502 520 494" fill="none" stroke="#2b1408" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M284 372 C304 356 336 354 360 362" fill="none" stroke="#2b1408" stroke-width="6" stroke-linecap="round"/><path d="M466 366 C486 354 510 356 528 368" fill="none" stroke="#2b1408" stroke-width="6" stroke-linecap="round"/>
|
||||
<path d="M444 498 L438 510 L448 510" fill="none" stroke="#c4561f" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M406 526 C424 556 462 556 482 520 C458 530 428 532 406 526 Z" fill="#7a2a12" stroke="#2b1408" stroke-width="4.5" stroke-linejoin="round"/><path d="M430 544 C440 538 456 538 466 546 C454 552 440 552 430 544 Z" fill="#e8642a"/><path d="M414 528 L420 538 L426 530 Z" fill="#ffffff"/>
|
||||
<path d="M318 572 L330 566 M340 580 L352 574" stroke="#f2b089" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M194 372 C186 238 280 146 402 144 C522 142 614 228 606 362 L592 404 C580 368 566 346 552 330 L542 392 C524 356 504 334 486 322 L470 384 C456 348 442 330 424 320 L404 428 C392 380 372 340 346 322 L322 380 C306 352 288 336 270 334 L262 398 C252 386 242 376 234 368 L226 470 C204 436 194 404 194 372 Z" fill="#1d2029" stroke="#2b1408" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M506 158 C560 180 600 240 606 330 L592 404 C580 368 566 346 552 330 L542 392 C524 356 504 334 486 322 C520 290 530 220 506 158 Z" fill="#0d0f14"/>
|
||||
<path d="M382 200 C372 250 372 300 382 340 M460 190 C474 230 478 280 470 316 M236 300 C230 340 230 360 236 368" fill="none" stroke="#0d0f14" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M396 182 C424 176 452 178 476 188 L462 202 L446 194 L430 208 L414 196 Z" fill="#3d4456"/>
|
||||
<path d="M330 146 C268 200 236 300 252 420 C266 400 276 380 282 360 C292 300 318 230 368 150 Z" fill="#ff8a2a" stroke="#2b1408" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M300 200 C270 250 258 320 262 390" fill="none" stroke="#c4561f" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M344 166 C326 190 314 214 306 240" fill="none" stroke="#ffd2a8" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M561 300 C590 330 600 360 594 396" fill="none" stroke="#ff8a2a" stroke-width="4" stroke-linecap="round"/></g>
|
||||
<g id="headBack"><use href="#hairBackWild"/></g>
|
||||
<g id="bust">
|
||||
<path d="M196 640 C170 600 190 548 250 540 C320 530 480 528 560 538 C624 546 646 600 618 646 Z" fill="#2c323e" stroke="#2b1408" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M560 538 C624 546 646 600 618 646 L570 646 C600 610 598 570 560 538 Z" fill="#1a1e27"/>
|
||||
<path d="M206 612 C200 576 226 556 262 552 C330 544 480 542 556 550 C604 556 626 584 616 616" fill="none" stroke="#ff8a2a" stroke-width="6" stroke-linecap="round"/><use href="#hairBackWild"/><use href="#torso"/><use href="#head"/><use href="#jar" transform="translate(664,486) rotate(8)"/><path d="M740 860 L690 640" stroke="#2b1408" stroke-width="72" stroke-linecap="round"/><path d="M740 860 L690 640" stroke="#2c323e" stroke-width="58" stroke-linecap="round"/><path d="M762 860 L708 648" stroke="#ff8a2a" stroke-width="4"/><g transform="translate(676,600) rotate(-84) scale(1.0)">
|
||||
<rect x="-34" y="-34" width="58" height="22" rx="11" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
<rect x="-38" y="-14" width="62" height="22" rx="11" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
<rect x="-38" y="6" width="62" height="22" rx="11" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
<rect x="-34" y="26" width="56" height="22" rx="11" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
<path d="M18 -36 C40 -40 52 -24 46 -8 C42 4 30 6 22 0 Z" fill="#1a1e27" stroke="#2b1408" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M-30 -26 C-30 -8 -32 12 -30 38" fill="none" stroke="#ff8a2a" stroke-width="3" stroke-linecap="round"/>
|
||||
</g></g>
|
||||
</defs>
|
||||
<rect width="1200" height="800" fill="#f4efe7"/>
|
||||
<polygon points="74,46 786,46 740,780 20,780" fill="#07111a"/>
|
||||
<polygon points="300,46 640,46 560,780 220,780" fill="#0f2131"/>
|
||||
<polygon points="74,46 786,46 740,780 20,780" fill="none" stroke="#ff8a2a" stroke-width="5"/>
|
||||
<g clip-path="url(#cardClip)"><use href="#bust" transform="translate(66,102) scale(0.84)"/></g>
|
||||
<polygon points="40,708 300,708 288,756 28,756" fill="#ff8a2a"/>
|
||||
<text x="58" y="743" font-family="Consolas, 'Courier New', monospace" font-size="30" font-weight="700" letter-spacing="8" fill="#07111a">EUREKA</text>
|
||||
<text x="812" y="66" font-family="Consolas, 'Courier New', monospace" font-size="18" font-weight="700" letter-spacing="2" fill="#2b1408">EUREKA / B / STREAK + SPECIMEN</text>
|
||||
<text x="812" y="94" font-family="'Segoe UI', Arial, sans-serif" font-size="15" fill="#2b1408">Hook: hood down; the wild black hair and its one</text>
|
||||
<text x="812" y="113" font-family="'Segoe UI', Arial, sans-serif" font-size="15" fill="#2b1408">orange streak, and a jar with the bug that SURVIVED.</text>
|
||||
<g transform="translate(-16,0)"><use href="#headBack" transform="translate(768,152) scale(0.36)"/>
|
||||
<g transform="translate(768,152) scale(0.36)">
|
||||
<path d="M196 640 C170 600 190 548 250 540 C320 530 480 528 560 538 C624 546 646 600 618 646 Z" fill="#2c323e" stroke="#2b1408" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M560 538 C624 546 646 600 618 646 L570 646 C600 610 598 570 560 538 Z" fill="#1a1e27"/>
|
||||
<path d="M206 612 C200 576 226 556 262 552 C330 544 480 542 556 550 C604 556 626 584 616 616" fill="none" stroke="#ff8a2a" stroke-width="6" stroke-linecap="round"/></g>
|
||||
|
||||
<path d="M880 520 L900 520 L898 576 L878 576 Z M914 520 L934 520 L936 576 L916 576 Z" fill="#14161c" stroke="#2b1408" stroke-width="4"/>
|
||||
<path d="M868 572 L902 572 L904 600 L860 600 C860 588 862 578 868 572 Z M912 572 L944 572 C952 578 956 590 956 600 L910 600 Z" fill="#1a1e27" stroke="#2b1408" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M862 596 L904 596 M910 596 L956 596" stroke="#ff8a2a" stroke-width="3"/>
|
||||
<path d="M884 360 C862 364 852 380 850 400 L834 528 C860 536 950 536 978 528 L962 400 C960 380 950 364 928 360 Z" fill="#2c323e" stroke="#2b1408" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M930 362 C950 366 960 384 962 400 L978 528 C966 532 956 532 946 532 L944 420 Z" fill="#1a1e27"/>
|
||||
<path d="M906 372 L908 532 M836 524 C860 532 950 532 976 524" fill="none" stroke="#ff8a2a" stroke-width="3"/>
|
||||
<path d="M886 366 L906 392 L926 366" fill="#14161c" stroke="#2b1408" stroke-width="3"/>
|
||||
<path d="M866 372 L944 440 M948 372 L870 440" stroke="#4a505c" stroke-width="7"/>
|
||||
<rect x="896" y="398" width="20" height="16" rx="3" fill="#9aa3ae" stroke="#2b1408" stroke-width="3"/>
|
||||
<rect x="930" y="430" width="22" height="22" rx="4" fill="#4a505c" stroke="#2b1408" stroke-width="3"/>
|
||||
<path d="M896 434 L918 434" stroke="#4a505c" stroke-width="8"/>
|
||||
<use href="#head" transform="translate(768,152) scale(0.36)"/>
|
||||
<path d="M858 378 L846 450" stroke="#2b1408" stroke-width="24" stroke-linecap="round"/><path d="M858 378 L846 450" stroke="#2c323e" stroke-width="16" stroke-linecap="round"/><circle cx="846" cy="458" r="10" fill="#1a1e27" stroke="#2b1408" stroke-width="4"/>
|
||||
<path d="M956 378 L984 340" stroke="#2b1408" stroke-width="24" stroke-linecap="round"/><path d="M956 378 L984 340" stroke="#2c323e" stroke-width="16" stroke-linecap="round"/><use href="#jar" transform="translate(992,300) scale(0.34)"/><circle cx="986" cy="334" r="10" fill="#1a1e27" stroke="#2b1408" stroke-width="4"/></g>
|
||||
<text x="850" y="626" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#2b1408">full body, 2.5 heads</text>
|
||||
<rect x="1012" y="140" width="168" height="200" fill="#ffffff" stroke="#d8cfc2"/>
|
||||
<g filter="url(#sil)"><use href="#bust" transform="translate(1026,160) scale(0.2)"/></g>
|
||||
<text x="1016" y="356" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#2b1408">bust silhouette</text>
|
||||
<rect x="1012" y="372" width="64" height="64" fill="#ffffff" stroke="#d8cfc2"/>
|
||||
<g filter="url(#sil)"><use href="#bust" transform="translate(1021,380) scale(0.062)"/></g>
|
||||
<text x="1086" y="410" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#2b1408">at 48 px</text>
|
||||
<g font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#2b1408"><rect x="812" y="640" width="52" height="52" fill="#ff8a2a" stroke="#2b1408" stroke-width="2"/><text x="812" y="708">#ff8a2a</text><text x="812" y="722">neon</text><rect x="874" y="640" width="52" height="52" fill="#2b1408" stroke="#2b1408" stroke-width="2"/><text x="874" y="708">#2b1408</text><text x="874" y="722">line</text><rect x="936" y="640" width="52" height="52" fill="#1d2029" stroke="#2b1408" stroke-width="2"/><text x="936" y="708">#1d2029</text><text x="936" y="722">hair</text><rect x="998" y="640" width="52" height="52" fill="#2c323e" stroke="#2b1408" stroke-width="2"/><text x="998" y="708">#2c323e</text><text x="998" y="722">coat</text><rect x="1060" y="640" width="52" height="52" fill="#ffd6a8" stroke="#2b1408" stroke-width="2"/><text x="1060" y="708">#ffd6a8</text><text x="1060" y="722">skin</text><rect x="1122" y="640" width="52" height="52" fill="#59b7ff" stroke="#2b1408" stroke-width="2"/><text x="1122" y="708">#59b7ff</text><text x="1122" y="722">eyes</text></g>
|
||||
<text x="812" y="748" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#2b1408">Canon: hooded neon-noir trench, harness, black hair, one orange streak.</text>
|
||||
<text x="812" y="766" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#2b1408">Shape: a spiky black burst cut by one orange stripe.</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 201 KiB |
|
|
@ -1,199 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<title>Eureka, direction C</title>
|
||||
<defs>
|
||||
<filter id="sil" color-interpolation-filters="sRGB"><feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0"/></filter>
|
||||
<radialGradient id="glow"><stop offset="0" stop-color="#ff8a2a" stop-opacity="0.55"/><stop offset="1" stop-color="#ff8a2a" stop-opacity="0"/></radialGradient>
|
||||
<clipPath id="cardClip"><rect x="-300" y="-300" width="1400" height="1080"/></clipPath>
|
||||
<clipPath id="eyeL"><path d="M268 440 C278 410 338 398 378 416 C384 448 378 480 362 496 C332 506 296 504 280 490 C270 474 266 456 268 440 Z"/></clipPath>
|
||||
<clipPath id="eyeR"><path d="M454 432 C472 410 514 404 534 420 C540 450 534 480 522 494 C500 504 472 502 460 490 C452 470 450 450 454 432 Z"/></clipPath>
|
||||
<g id="hairBack">
|
||||
<path d="M190 360 C170 230 262 120 396 114 C532 110 626 210 614 350 C612 410 620 470 644 520 L602 512 L614 574 L568 542 L562 604 L526 558 L290 562 L250 612 L244 558 L196 584 L210 522 L166 522 C186 470 192 420 190 360 Z" fill="#1d2029" stroke="#2b1408" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M570 300 C596 380 604 460 644 520 L602 512 L614 574 L568 542 L562 604 L540 570 C580 500 590 400 570 300 Z" fill="#0d0f14"/>
|
||||
<path d="M600 300 C610 380 616 450 640 512" fill="none" stroke="#ff8a2a" stroke-width="4" stroke-linecap="round"/></g>
|
||||
<g id="hairBackWild">
|
||||
<path d="M186 360 C160 300 140 250 104 236 C150 222 176 214 196 200 C186 170 160 130 128 112 C182 110 222 120 250 136 C262 104 288 74 330 58 C326 82 330 100 340 116 C376 92 420 82 470 86 C450 98 440 112 436 122 C494 108 560 122 604 158 C580 160 566 168 558 178 C606 196 646 236 664 290 C640 282 624 284 614 290 C624 340 628 420 664 470 C640 470 624 474 616 482 C632 520 640 560 664 590 L604 572 L606 624 L566 582 L556 630 L524 580 L290 584 L246 636 L242 584 L190 606 L208 540 L156 548 C182 486 190 420 186 360 Z" fill="#1d2029" stroke="#2b1408" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M560 180 C620 230 640 300 616 290 C626 370 630 430 664 470 C640 470 624 474 616 482 C632 520 640 560 664 590 L604 572 L606 624 L566 582 L560 610 L540 570 C600 470 600 300 560 180 Z" fill="#0d0f14"/>
|
||||
<path d="M604 158 C640 200 662 250 664 290 M614 300 C622 380 640 440 660 468" fill="none" stroke="#ff8a2a" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M250 136 C270 110 296 86 324 70 M128 112 C170 126 200 150 214 176" fill="none" stroke="#3d4456" stroke-width="5" stroke-linecap="round"/></g>
|
||||
<g id="prybar">
|
||||
<path d="M0 0 L420 0 C470 0 492 -46 470 -88" fill="none" stroke="#2b1408" stroke-width="34" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M0 0 L420 0 C470 0 492 -46 470 -88" fill="none" stroke="#ff8a2a" stroke-width="22" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M0 5 L420 5 C464 6 486 -36 476 -76" fill="none" stroke="#c4561f" stroke-width="8"/>
|
||||
<path d="M10 -5 L380 -5" stroke="#ffd2a8" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M-10 0 L-26 -10 M-10 0 L-26 10" stroke="#2b1408" stroke-width="7" stroke-linecap="round"/>
|
||||
<path d="M462 -84 L486 -96" stroke="#2b1408" stroke-width="5"/>
|
||||
</g>
|
||||
<g id="lantern">
|
||||
<circle cx="0" cy="40" r="120" fill="url(#glow)"/>
|
||||
<path d="M-8 -84 C-8 -110 8 -110 8 -84" fill="none" stroke="#2b1408" stroke-width="8"/>
|
||||
<path d="M-30 -60 L30 -60 L22 -84 L-22 -84 Z" fill="#2c323e" stroke="#2b1408" stroke-width="6" stroke-linejoin="round"/>
|
||||
<rect x="-40" y="-62" width="80" height="16" rx="4" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
<path d="M-34 -46 L34 -46 L38 72 L-38 72 Z" fill="#ffc27a" stroke="#2b1408" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M8 -46 L34 -46 L38 72 L12 72 Z" fill="#ff8a2a"/>
|
||||
<path d="M0 50 C-22 30 -14 6 0 -16 C14 6 22 30 0 50 Z" fill="#ffffff" stroke="#ff8a2a" stroke-width="4"/>
|
||||
<path d="M-34 -6 L34 -6 M-36 34 L36 34 M0 -46 L0 72" stroke="#2b1408" stroke-width="5"/>
|
||||
<rect x="-46" y="70" width="92" height="20" rx="5" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
</g>
|
||||
<g id="bug">
|
||||
<path d="M-16 -6 L-40 -24 M-16 4 L-44 4 M-14 12 L-38 32 M16 -6 L40 -24 M16 4 L44 4 M14 12 L38 32 M-6 -24 L-18 -46 M6 -24 L18 -46" stroke="#2b1408" stroke-width="4" stroke-linecap="round" fill="none"/>
|
||||
<ellipse cx="0" cy="10" rx="20" ry="28" fill="#2c323e" stroke="#2b1408" stroke-width="5"/>
|
||||
<path d="M0 -16 L0 38" stroke="#2b1408" stroke-width="3"/>
|
||||
<circle cx="0" cy="-20" r="12" fill="#1a1e27" stroke="#2b1408" stroke-width="4"/>
|
||||
<circle cx="-5" cy="-22" r="4" fill="#ff8a2a"/><circle cx="5" cy="-22" r="4" fill="#ff8a2a"/><circle cx="0" cy="-14" r="3" fill="#ff8a2a"/>
|
||||
<path d="M-12 0 C-8 6 -8 14 -12 20 M12 0 C8 6 8 14 12 20" stroke="#ff8a2a" stroke-width="3" fill="none"/>
|
||||
</g>
|
||||
<g id="jar">
|
||||
<circle cx="0" cy="10" r="110" fill="url(#glow)"/>
|
||||
<path d="M-56 -60 C-60 -40 -62 60 -56 84 C-40 98 40 98 56 84 C62 60 60 -40 56 -60 Z" fill="#bfe6ff" fill-opacity="0.35" stroke="#2b1408" stroke-width="7" stroke-linejoin="round"/>
|
||||
<use href="#bug" transform="translate(0,14) rotate(-18) scale(1.1)"/>
|
||||
<path d="M-58 -60 L58 -60 L52 -84 L-52 -84 Z" fill="#2c323e" stroke="#2b1408" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M-56 -66 L56 -66" stroke="#ff8a2a" stroke-width="5"/>
|
||||
<path d="M-40 -40 C-46 0 -46 40 -40 70" fill="none" stroke="#ffffff" stroke-width="7" stroke-linecap="round" opacity="0.85"/>
|
||||
<path d="M-58 44 L58 44 L56 72 L-56 72 Z" fill="#f4efe7" stroke="#2b1408" stroke-width="4"/>
|
||||
<text x="0" y="64" text-anchor="middle" font-family="Consolas, 'Courier New', monospace" font-size="16" font-weight="700" fill="#2b1408">SURVIVED</text>
|
||||
</g>
|
||||
<g id="tweezers">
|
||||
<path d="M0 0 L-8 -190 M0 0 L14 -188" stroke="#2b1408" stroke-width="14" stroke-linecap="round"/>
|
||||
<path d="M0 0 L-8 -190 M0 0 L14 -188" stroke="#9aa3ae" stroke-width="7" stroke-linecap="round"/>
|
||||
<path d="M-4 -60 L8 -60" stroke="#ff8a2a" stroke-width="6"/>
|
||||
<use href="#bug" transform="translate(4,-222) rotate(30) scale(1.25)"/>
|
||||
<path d="M-30 -250 L-44 -262 M36 -246 L52 -256 M40 -214 L58 -212" stroke="#ff8a2a" stroke-width="4" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="torso">
|
||||
<path d="M362 556 L364 630 C390 646 420 646 446 630 L448 552 Z" fill="#ffd6a8" stroke="#2b1408" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M364 572 C392 598 424 598 448 568 L448 606 C420 622 392 620 364 604 Z" fill="#f2b089"/>
|
||||
<path d="M350 600 C300 620 226 630 186 668 C156 700 146 750 142 820 L668 820 C664 750 652 704 624 676 C594 646 512 624 458 600 Z" fill="#2c323e" stroke="#2b1408" stroke-width="9" stroke-linejoin="round"/>
|
||||
<path d="M560 640 C600 660 640 690 650 820 L590 820 C596 740 590 680 560 640 Z" fill="#1a1e27"/>
|
||||
<path d="M352 604 L404 730 L456 604 Z" fill="#14161c" stroke="#2b1408" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M380 640 L404 700 L428 640" fill="none" stroke="#4a505c" stroke-width="10" stroke-linejoin="round"/>
|
||||
<path d="M354 590 L280 616 L320 704 L404 736 Z" fill="#3d4554" stroke="#2b1408" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M454 590 L528 616 L490 704 L404 736 Z" fill="#2c323e" stroke="#2b1408" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M284 620 L322 702 L398 730 M524 620 L488 702 L410 730" fill="none" stroke="#ff8a2a" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M232 660 L330 820" stroke="#2b1408" stroke-width="32" stroke-linecap="butt"/>
|
||||
<path d="M232 660 L330 820" stroke="#4a505c" stroke-width="22"/>
|
||||
<path d="M588 664 L500 820" stroke="#2b1408" stroke-width="32"/>
|
||||
<path d="M588 664 L500 820" stroke="#4a505c" stroke-width="22"/>
|
||||
<rect x="252" y="700" width="46" height="34" rx="5" transform="rotate(-58 275 717)" fill="#9aa3ae" stroke="#2b1408" stroke-width="5"/>
|
||||
<rect x="512" y="728" width="62" height="60" rx="8" transform="rotate(28 543 758)" fill="#4a505c" stroke="#2b1408" stroke-width="5"/>
|
||||
<path d="M518 744 L572 770" stroke="#2b1408" stroke-width="4" transform="rotate(28 543 758)"/>
|
||||
<circle cx="560" cy="712" r="7" fill="#ff8a2a" stroke="#2b1408" stroke-width="3"/>
|
||||
<path d="M620 690 C640 720 650 760 652 820" fill="none" stroke="#ff8a2a" stroke-width="4"/></g>
|
||||
<g id="head">
|
||||
<path d="M212 300 C204 400 238 492 320 548 C364 578 414 596 448 586 C488 572 532 522 556 450 C570 404 574 350 566 300 Z" fill="#ffd6a8" stroke="#2b1408" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M216 360 L256 400 L270 340 L322 384 L346 330 L398 392 L424 326 L470 386 L486 330 L540 396 L548 334 L568 380 C570 340 568 320 566 300 L212 300 Z" fill="#f2b089"/>
|
||||
<path d="M560 400 C552 470 520 528 460 570 C500 556 544 512 558 452 Z" fill="#f2b089"/>
|
||||
<path d="M561 330 C566 400 548 474 500 540" fill="none" stroke="#ff8a2a" stroke-width="5" stroke-linecap="round"/>
|
||||
<ellipse cx="300" cy="516" rx="30" ry="12" fill="#ff8a2a" opacity="0.25"/>
|
||||
<ellipse cx="512" cy="510" rx="22" ry="11" fill="#ff8a2a" opacity="0.25"/>
|
||||
|
||||
<path d="M268 440 C278 410 338 398 378 416 C384 448 378 480 362 496 C332 506 296 504 280 490 C270 474 266 456 268 440 Z" fill="#ffffff"/>
|
||||
<g clip-path="url(#eyeL)">
|
||||
<path d="M268 410 L390 410 L390 440 C350 424 300 426 268 448 Z" fill="#d6dde6"/>
|
||||
<ellipse cx="336" cy="456" rx="40" ry="52" fill="#59b7ff" stroke="#2b1408" stroke-width="3.5"/>
|
||||
<path d="M296 456 A40 52 0 0 1 376 456 C358 444 314 444 296 456 Z" fill="#2a5d9a"/>
|
||||
<ellipse cx="338" cy="488" rx="26" ry="13" fill="#bfe6ff"/>
|
||||
<path d="M312 470 C320 478 352 478 360 470" fill="none" stroke="#ff8a2a" stroke-width="3" opacity="0.9"/>
|
||||
<ellipse cx="338" cy="458" rx="15" ry="22" fill="#0f2238"/>
|
||||
<ellipse cx="318" cy="436" rx="13" ry="17" fill="#ffffff"/>
|
||||
<circle cx="354" cy="482" r="6" fill="#ffffff"/>
|
||||
</g>
|
||||
<path d="M258 454 C264 408 336 386 388 410 L404 398 L398 422 L388 428 C340 406 288 416 270 458 Z" fill="#2b1408"/>
|
||||
<path d="M258 452 L244 446 M262 436 L248 424" stroke="#2b1408" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M292 498 C312 506 340 506 360 496" fill="none" stroke="#2b1408" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<path d="M454 432 C472 410 514 404 534 420 C540 450 534 480 522 494 C500 504 472 502 460 490 C452 470 450 450 454 432 Z" fill="#ffffff"/>
|
||||
<g clip-path="url(#eyeR)">
|
||||
<path d="M450 404 L545 404 L545 432 C514 414 476 418 450 442 Z" fill="#d6dde6"/>
|
||||
<ellipse cx="500" cy="456" rx="32" ry="50" fill="#59b7ff" stroke="#2b1408" stroke-width="3.5"/>
|
||||
<path d="M468 456 A32 50 0 0 1 532 456 C518 444 482 444 468 456 Z" fill="#2a5d9a"/>
|
||||
<ellipse cx="502" cy="488" rx="20" ry="12" fill="#bfe6ff"/>
|
||||
<path d="M482 470 C488 478 512 478 518 470" fill="none" stroke="#ff8a2a" stroke-width="3" opacity="0.9"/>
|
||||
<ellipse cx="502" cy="458" rx="12" ry="21" fill="#0f2238"/>
|
||||
<ellipse cx="486" cy="436" rx="10" ry="15" fill="#ffffff"/>
|
||||
<circle cx="514" cy="482" r="5" fill="#ffffff"/>
|
||||
</g>
|
||||
<path d="M448 446 C462 404 522 396 546 418 L560 410 L554 432 C522 408 474 414 456 450 Z" fill="#2b1408"/>
|
||||
<path d="M470 496 C488 504 506 502 520 494" fill="none" stroke="#2b1408" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M284 388 C306 380 336 384 364 394" fill="none" stroke="#2b1408" stroke-width="6" stroke-linecap="round"/><path d="M464 394 C486 380 508 374 528 376" fill="none" stroke="#2b1408" stroke-width="6" stroke-linecap="round"/>
|
||||
<path d="M444 498 L438 510 L448 510" fill="none" stroke="#c4561f" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M420 534 C436 538 452 536 468 528" fill="none" stroke="#2b1408" stroke-width="4.5" stroke-linecap="round"/><path d="M448 536 C452 546 462 546 464 534" fill="#e8642a" stroke="#2b1408" stroke-width="3"/>
|
||||
<path d="M318 572 L330 566 M340 580 L352 574" stroke="#f2b089" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M194 372 C186 238 280 146 402 144 C522 142 614 228 606 362 L592 404 C580 368 566 346 552 330 L542 392 C524 356 504 334 486 322 L470 384 C456 348 442 330 424 320 L404 428 C392 380 372 340 346 322 L322 380 C306 352 288 336 270 334 L262 398 C252 386 242 376 234 368 L226 470 C204 436 194 404 194 372 Z" fill="#1d2029" stroke="#2b1408" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M506 158 C560 180 600 240 606 330 L592 404 C580 368 566 346 552 330 L542 392 C524 356 504 334 486 322 C520 290 530 220 506 158 Z" fill="#0d0f14"/>
|
||||
<path d="M382 200 C372 250 372 300 382 340 M460 190 C474 230 478 280 470 316 M236 300 C230 340 230 360 236 368" fill="none" stroke="#0d0f14" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M396 182 C424 176 452 178 476 188 L462 202 L446 194 L430 208 L414 196 Z" fill="#3d4456"/>
|
||||
<path d="M322 150 C278 204 254 300 262 398 C282 348 304 290 352 154 Z" fill="#ff8a2a" stroke="#2b1408" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M300 196 C282 240 270 300 270 360" fill="none" stroke="#c4561f" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M330 170 C318 190 310 210 304 232" fill="none" stroke="#ffd2a8" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M561 300 C590 330 600 360 594 396" fill="none" stroke="#ff8a2a" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M200 416 L36 326 L108 430 L26 472 L196 476 Z" fill="#2c323e" stroke="#2b1408" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M200 416 L36 326 L108 430 Z" fill="#3d4554"/>
|
||||
<path d="M592 410 L744 318 L692 424 L764 458 L592 476 Z" fill="#1a1e27" stroke="#2b1408" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M222 404 C300 372 520 368 600 390 L598 520 C520 504 300 510 232 540 Z" fill="#ff8a2a" fill-opacity="0.16" stroke="#2b1408" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M222 404 C300 372 520 368 600 390 L600 406 C520 386 300 390 224 422 Z" fill="#2c323e" stroke="#2b1408" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M238 528 C300 504 520 498 596 512" fill="none" stroke="#ff8a2a" stroke-width="4"/>
|
||||
<g stroke="#ff8a2a" stroke-width="3" fill="none">
|
||||
<circle cx="502" cy="454" r="40"/>
|
||||
<path d="M502 404 V422 M502 486 V504 M452 454 H470 M534 454 H552"/>
|
||||
<path d="M262 432 H306 M262 444 H290 M262 456 H300"/>
|
||||
<path d="M548 420 L572 420 L580 430"/>
|
||||
</g>
|
||||
<text x="262" y="522" font-family="Consolas, 'Courier New', monospace" font-size="15" font-weight="700" fill="#ff8a2a">MUT 03</text>
|
||||
<circle cx="212" cy="460" r="36" fill="#2c323e" stroke="#2b1408" stroke-width="7"/>
|
||||
<circle cx="212" cy="460" r="18" fill="#ff8a2a" stroke="#2b1408" stroke-width="5"/>
|
||||
<circle cx="206" cy="454" r="5" fill="#ffffff"/>
|
||||
<circle cx="598" cy="452" r="22" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
<circle cx="598" cy="452" r="8" fill="#ff8a2a"/></g>
|
||||
<g id="headBack"><use href="#hairBack"/></g>
|
||||
<g id="bust">
|
||||
<path d="M196 640 C170 600 190 548 250 540 C320 530 480 528 560 538 C624 546 646 600 618 646 Z" fill="#2c323e" stroke="#2b1408" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M560 538 C624 546 646 600 618 646 L570 646 C600 610 598 570 560 538 Z" fill="#1a1e27"/>
|
||||
<path d="M206 612 C200 576 226 556 262 552 C330 544 480 542 556 550 C604 556 626 584 616 616" fill="none" stroke="#ff8a2a" stroke-width="6" stroke-linecap="round"/><use href="#hairBack"/><use href="#torso"/><use href="#head"/><use href="#tweezers" transform="translate(684,720) rotate(-8)"/><path d="M740 870 L694 760" stroke="#2b1408" stroke-width="72" stroke-linecap="round"/><path d="M740 870 L694 760" stroke="#2c323e" stroke-width="58" stroke-linecap="round"/><path d="M762 870 L712 768" stroke="#ff8a2a" stroke-width="4"/><g transform="translate(684,728) rotate(-80) scale(0.95)">
|
||||
<rect x="-34" y="-34" width="58" height="22" rx="11" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
<rect x="-38" y="-14" width="62" height="22" rx="11" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
<rect x="-38" y="6" width="62" height="22" rx="11" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
<rect x="-34" y="26" width="56" height="22" rx="11" fill="#1a1e27" stroke="#2b1408" stroke-width="6"/>
|
||||
<path d="M18 -36 C40 -40 52 -24 46 -8 C42 4 30 6 22 0 Z" fill="#1a1e27" stroke="#2b1408" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M-30 -26 C-30 -8 -32 12 -30 38" fill="none" stroke="#ff8a2a" stroke-width="3" stroke-linecap="round"/>
|
||||
</g></g>
|
||||
</defs>
|
||||
<rect width="1200" height="800" fill="#f4efe7"/>
|
||||
<polygon points="74,46 786,46 740,780 20,780" fill="#07111a"/>
|
||||
<polygon points="300,46 640,46 560,780 220,780" fill="#0f2131"/>
|
||||
<polygon points="74,46 786,46 740,780 20,780" fill="none" stroke="#ff8a2a" stroke-width="5"/>
|
||||
<g clip-path="url(#cardClip)"><use href="#bust" transform="translate(66,102) scale(0.84)"/></g>
|
||||
<polygon points="40,708 300,708 288,756 28,756" fill="#ff8a2a"/>
|
||||
<text x="58" y="743" font-family="Consolas, 'Courier New', monospace" font-size="30" font-weight="700" letter-spacing="8" fill="#07111a">EUREKA</text>
|
||||
<text x="812" y="66" font-family="Consolas, 'Courier New', monospace" font-size="18" font-weight="700" letter-spacing="2" fill="#2b1408">EUREKA / C / HUD VISOR</text>
|
||||
<text x="812" y="94" font-family="'Segoe UI', Arial, sans-serif" font-size="15" fill="#2b1408">Hook: a finned visor with an orange HUD across her</text>
|
||||
<text x="812" y="113" font-family="'Segoe UI', Arial, sans-serif" font-size="15" fill="#2b1408">eyes; tweezers raised with a wriggling mutant.</text>
|
||||
<g transform="translate(-16,0)"><use href="#headBack" transform="translate(768,152) scale(0.36)"/>
|
||||
<g transform="translate(768,152) scale(0.36)">
|
||||
<path d="M196 640 C170 600 190 548 250 540 C320 530 480 528 560 538 C624 546 646 600 618 646 Z" fill="#2c323e" stroke="#2b1408" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M560 538 C624 546 646 600 618 646 L570 646 C600 610 598 570 560 538 Z" fill="#1a1e27"/>
|
||||
<path d="M206 612 C200 576 226 556 262 552 C330 544 480 542 556 550 C604 556 626 584 616 616" fill="none" stroke="#ff8a2a" stroke-width="6" stroke-linecap="round"/></g>
|
||||
|
||||
<path d="M880 520 L900 520 L898 576 L878 576 Z M914 520 L934 520 L936 576 L916 576 Z" fill="#14161c" stroke="#2b1408" stroke-width="4"/>
|
||||
<path d="M868 572 L902 572 L904 600 L860 600 C860 588 862 578 868 572 Z M912 572 L944 572 C952 578 956 590 956 600 L910 600 Z" fill="#1a1e27" stroke="#2b1408" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M862 596 L904 596 M910 596 L956 596" stroke="#ff8a2a" stroke-width="3"/>
|
||||
<path d="M884 360 C862 364 852 380 850 400 L834 528 C860 536 950 536 978 528 L962 400 C960 380 950 364 928 360 Z" fill="#2c323e" stroke="#2b1408" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M930 362 C950 366 960 384 962 400 L978 528 C966 532 956 532 946 532 L944 420 Z" fill="#1a1e27"/>
|
||||
<path d="M906 372 L908 532 M836 524 C860 532 950 532 976 524" fill="none" stroke="#ff8a2a" stroke-width="3"/>
|
||||
<path d="M886 366 L906 392 L926 366" fill="#14161c" stroke="#2b1408" stroke-width="3"/>
|
||||
<path d="M866 372 L944 440 M948 372 L870 440" stroke="#4a505c" stroke-width="7"/>
|
||||
<rect x="896" y="398" width="20" height="16" rx="3" fill="#9aa3ae" stroke="#2b1408" stroke-width="3"/>
|
||||
<rect x="930" y="430" width="22" height="22" rx="4" fill="#4a505c" stroke="#2b1408" stroke-width="3"/>
|
||||
<path d="M896 434 L918 434" stroke="#4a505c" stroke-width="8"/>
|
||||
<use href="#head" transform="translate(768,152) scale(0.36)"/>
|
||||
<path d="M858 378 L846 450" stroke="#2b1408" stroke-width="24" stroke-linecap="round"/><path d="M858 378 L846 450" stroke="#2c323e" stroke-width="16" stroke-linecap="round"/><circle cx="846" cy="458" r="10" fill="#1a1e27" stroke="#2b1408" stroke-width="4"/>
|
||||
<path d="M956 378 L980 410" stroke="#2b1408" stroke-width="24" stroke-linecap="round"/><path d="M956 378 L980 410" stroke="#2c323e" stroke-width="16" stroke-linecap="round"/><use href="#tweezers" transform="translate(984,414) rotate(10) scale(0.36)"/><circle cx="982" cy="414" r="10" fill="#1a1e27" stroke="#2b1408" stroke-width="4"/></g>
|
||||
<text x="850" y="626" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#2b1408">full body, 2.5 heads</text>
|
||||
<rect x="1012" y="140" width="168" height="200" fill="#ffffff" stroke="#d8cfc2"/>
|
||||
<g filter="url(#sil)"><use href="#bust" transform="translate(1026,160) scale(0.2)"/></g>
|
||||
<text x="1016" y="356" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#2b1408">bust silhouette</text>
|
||||
<rect x="1012" y="372" width="64" height="64" fill="#ffffff" stroke="#d8cfc2"/>
|
||||
<g filter="url(#sil)"><use href="#bust" transform="translate(1021,380) scale(0.062)"/></g>
|
||||
<text x="1086" y="410" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#2b1408">at 48 px</text>
|
||||
<g font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#2b1408"><rect x="812" y="640" width="52" height="52" fill="#ff8a2a" stroke="#2b1408" stroke-width="2"/><text x="812" y="708">#ff8a2a</text><text x="812" y="722">neon</text><rect x="874" y="640" width="52" height="52" fill="#2b1408" stroke="#2b1408" stroke-width="2"/><text x="874" y="708">#2b1408</text><text x="874" y="722">line</text><rect x="936" y="640" width="52" height="52" fill="#1d2029" stroke="#2b1408" stroke-width="2"/><text x="936" y="708">#1d2029</text><text x="936" y="722">hair</text><rect x="998" y="640" width="52" height="52" fill="#2c323e" stroke="#2b1408" stroke-width="2"/><text x="998" y="708">#2c323e</text><text x="998" y="722">coat</text><rect x="1060" y="640" width="52" height="52" fill="#ffd6a8" stroke="#2b1408" stroke-width="2"/><text x="1060" y="708">#ffd6a8</text><text x="1060" y="722">skin</text><rect x="1122" y="640" width="52" height="52" fill="#59b7ff" stroke="#2b1408" stroke-width="2"/><text x="1122" y="708">#59b7ff</text><text x="1122" y="722">eyes</text></g>
|
||||
<text x="812" y="748" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#2b1408">Canon: hooded neon-noir trench, harness, black hair, one orange streak.</text>
|
||||
<text x="812" y="766" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#2b1408">Shape: a circle crossed by one horizontal bar with fins.</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 22 KiB |
|
|
@ -1,74 +0,0 @@
|
|||
# Eureka: designer's notes, round 1
|
||||
|
||||
## Change of direction
|
||||
|
||||
The first pass drew the A/B/C concepts in `../../eureka.md` (Spark, Waking
|
||||
Colossus, Inspectable). Only The Spark was drawn before the operator redirected:
|
||||
"I kinda liked the Eureka from the readme art, kind of a neon noir hooded
|
||||
trenchcoat and tactical gear for extreme bug hunting. I'd give her black hair
|
||||
with an orange highlight." That sheet is kept as `eureka-old-A.svg` / `.png`.
|
||||
B and C of the old set were never drawn.
|
||||
|
||||
The new A/B/C are three variations on one canon, not three concepts. Every
|
||||
sheet keeps: hooded neon-noir trenchcoat with orange neon piping, tactical
|
||||
harness (crossed straps, buckle, pouch, a status LED), dark gloves, black hair
|
||||
with exactly one orange streak lock on the near side, orange neon as the key
|
||||
colour, brand-blue eyes (taken from the readme art; the only blue on her).
|
||||
What changes is the hook, the expression and the prop.
|
||||
|
||||
## A: Hood + Lantern
|
||||
|
||||
- Hood up, with a tall peak leaning back; the hood's inner rim is piped in
|
||||
neon and frames the face like a portrait window. Lantern raised beside her
|
||||
far cheek (toward the text box), so the lantern is the warm rim light on her
|
||||
face. Orange pry bar over the near shoulder, its crook breaking the
|
||||
silhouette on the left. Half-dropped lids and a crooked half smile: dry.
|
||||
- Changed after looking: the pry bar first sat behind the hood and read as a
|
||||
cat's tail, so it moved in front of the shoulder; the lantern was hidden by
|
||||
the sleeve, so the arm now comes in from the right and the lantern is drawn
|
||||
over it; the hood's lower edge made a bar across her neck, so the hood now
|
||||
drapes behind the coat and only its upper rim sits over the face.
|
||||
- Round 2: the raising arm is long and stiff, so foreshorten it or hang the
|
||||
lantern from a shorter grip. Try the peak at two heights to see how much
|
||||
hood the 48 px read needs.
|
||||
|
||||
## B: Streak + Specimen
|
||||
|
||||
- Hood down and bunched at the neck, so the hair is the hook: a wild spiky
|
||||
black mass with a wider orange streak running from crown to cheek. She holds
|
||||
up a specimen jar with a mutant beetle (orange eyes, extra legs) and a label
|
||||
reading SURVIVED, a callback to the readme's specimen case. Proud fanged grin.
|
||||
- Changed after looking: almost nothing; this one worked on the first render.
|
||||
- Round 2: the jar label is the only text in a portrait; check it at dialogue
|
||||
size, and test a version where the bug is out of the jar on her glove.
|
||||
|
||||
## C: HUD Visor
|
||||
|
||||
- Hood down, with a translucent orange visor across the eyes: a reticle on the
|
||||
far eye, scan bars, a tiny "MUT 03" readout, sensor pods at the temples and
|
||||
swept fins at both sides. Long tweezers raised with a wriggling mutant.
|
||||
Focused, tongue-tip concentration face.
|
||||
- Changed after looking: the visor's lower rim cut through both irises, so the
|
||||
visor drops below the eyes; the tint went from 0.28 to 0.16 opacity because
|
||||
the eyes went muddy; the fins were small and the 48 px silhouette read as a
|
||||
plain round head, so they roughly doubled in length.
|
||||
- Round 2: the visor hides the eye shape, which is the face's main expressive
|
||||
tool; try pushing the visor up onto the hair in neutral lines and down only
|
||||
in the "Eureka!" line.
|
||||
|
||||
## All three
|
||||
|
||||
- Checks run: the bust at 128 px (streak, hood, jar and visor all read) and the
|
||||
filled bust at 48 px. Silhouettes: A is a peaked wedge with a hooked bar, B a
|
||||
spiky burst with a jar, C a circle with horizontal fins. All three differ
|
||||
from each other; C is the weakest.
|
||||
- The three sheets share one face and one full-body build on purpose: this is
|
||||
one character in three outfits. In round 2 the strongest direction should get
|
||||
its own five portrait-set expressions (`../../eureka.md`, Portrait set).
|
||||
- Palette per sheet: neon `#ff8a2a`, line `#2b1408` (a darker ember than the
|
||||
old `#4a1e05`, which disappeared against black hair), hair `#1d2029`, coat
|
||||
`#2c323e`, skin `#ffd6a8`, eyes `#59b7ff`. Each has one shadow tone; steel
|
||||
`#9aa3ae` appears only on buckles and tweezers.
|
||||
- The bust card adds a lighter navy band (`#0f2131`) behind the head, because
|
||||
black hair on the brand ground `#07111a` loses its outline. The cast frame
|
||||
rule should carry this lighter band if Eureka keeps black hair.
|
||||
|
Before Width: | Height: | Size: 191 KiB |
|
|
@ -1,231 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<title>Eureka, direction A: The Spark</title>
|
||||
<defs>
|
||||
<filter id="sil" color-interpolation-filters="sRGB">
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0"/>
|
||||
</filter>
|
||||
<clipPath id="cardClip"><rect x="-200" y="-200" width="1200" height="980"/></clipPath>
|
||||
|
||||
<!-- eye openings -->
|
||||
<clipPath id="eyeL"><path d="M268 440 C278 410 338 398 378 416 C384 448 378 480 362 496 C332 506 296 504 280 490 C270 474 266 456 268 440 Z"/></clipPath>
|
||||
<clipPath id="eyeR"><path d="M454 432 C472 410 514 404 534 420 C540 450 534 480 522 494 C500 504 472 502 460 490 C452 470 450 450 454 432 Z"/></clipPath>
|
||||
|
||||
<!-- the wrench, local axis along +x, jaw at the far end -->
|
||||
<g id="wrench">
|
||||
<path d="M0 -17 L388 -21 L388 21 L0 17 C-22 17 -22 -17 0 -17 Z" fill="#cfd6dd" stroke="#4a1e05" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M8 6 L380 8 L380 19 L4 15 Z" fill="#8f9aa5"/>
|
||||
<rect x="40" y="-8" width="230" height="16" rx="8" fill="#8f9aa5" stroke="#4a1e05" stroke-width="3"/>
|
||||
<path d="M372 -30 C394 -64 460 -72 492 -46 L478 -14 L440 -14 L440 14 L478 14 L492 46 C460 72 394 64 372 30 Z" fill="#cfd6dd" stroke="#4a1e05" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M380 22 C400 52 452 60 484 40 L478 30 C450 46 404 40 386 14 Z" fill="#8f9aa5"/>
|
||||
<rect x="396" y="-24" width="22" height="48" rx="4" fill="#8f9aa5" stroke="#4a1e05" stroke-width="3"/>
|
||||
<path d="M402 -18 V18 M410 -18 V18" stroke="#4a1e05" stroke-width="2"/>
|
||||
<path d="M384 -34 C404 -56 448 -60 470 -46" fill="none" stroke="#ffffff" stroke-width="4" stroke-linecap="round" opacity="0.8"/>
|
||||
</g>
|
||||
|
||||
<!-- HEAD: back hair -->
|
||||
<g id="hairBack">
|
||||
<path d="M198 362 C178 232 268 128 396 122 C528 118 618 214 606 348 C602 420 592 480 578 538 L550 506 L542 566 L508 524 L300 526 L266 566 L254 516 L220 548 C204 484 198 424 198 362 Z" fill="#e8642a" stroke="#4a1e05" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M560 300 C590 360 590 450 572 522 L550 506 L542 566 L520 540 C560 470 570 380 560 300 Z" fill="#b8471c"/>
|
||||
</g>
|
||||
|
||||
<!-- HEAD: the spark ahoge -->
|
||||
<g id="spark" transform="translate(410,150) rotate(12) scale(1.2) translate(-410,-150)">
|
||||
<path d="M378 158 C392 120 420 76 440 38 L402 50 C428 4 452 -36 476 -64 C470 -30 462 -2 456 22 L498 12 C478 64 452 112 428 156 Z" fill="#ff8a2a" stroke="#4a1e05" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M412 150 C428 112 446 76 462 46 L448 28 L478 20 C462 60 444 104 428 154 Z" fill="#e8642a"/>
|
||||
<path d="M404 128 L424 80 L410 84 L446 18 L440 50 L456 46 L430 104" fill="none" stroke="#59b7ff" stroke-width="7" stroke-linejoin="round" stroke-linecap="round"/>
|
||||
<path d="M404 128 L424 80 L410 84 L446 18 L440 50 L456 46 L430 104" fill="none" stroke="#ffffff" stroke-width="2.5" stroke-linejoin="round" stroke-linecap="round"/>
|
||||
<g stroke="#59b7ff" stroke-width="5" stroke-linecap="round">
|
||||
<path d="M500 -40 L524 -52 M506 -20 L532 -18 M496 -62 L508 -84"/>
|
||||
<path d="M368 40 L344 30 M372 66 L348 72 M384 14 L370 -6"/>
|
||||
</g>
|
||||
<g fill="#59b7ff" stroke="#4a1e05" stroke-width="2.5">
|
||||
<path d="M528 34 L534 46 L546 52 L534 58 L528 70 L522 58 L510 52 L522 46 Z"/>
|
||||
<path d="M336 -14 L340 -4 L350 0 L340 4 L336 14 L332 4 L322 0 L332 -4 Z"/>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<!-- HEAD: face, features, front hair -->
|
||||
<g id="headFront">
|
||||
<!-- face -->
|
||||
<path d="M212 300 C204 400 238 492 320 548 C364 578 414 596 448 586 C488 572 532 522 556 450 C570 404 574 350 566 300 Z" fill="#ffd6a8" stroke="#4a1e05" stroke-width="8" stroke-linejoin="round"/>
|
||||
<!-- face shadow: under bangs and the far cheek -->
|
||||
<path d="M216 360 L256 400 L270 340 L322 384 L346 330 L398 392 L424 326 L470 386 L486 330 L540 396 L548 334 L568 380 C570 340 568 320 566 300 L212 300 Z" fill="#f2b089"/>
|
||||
<path d="M560 400 C552 470 520 528 460 566 C500 552 544 510 558 452 Z" fill="#f2b089"/>
|
||||
<!-- rim light, away from the light -->
|
||||
<path d="M561 330 C566 400 548 470 506 530" fill="none" stroke="#ff8a2a" stroke-width="5" stroke-linecap="round"/>
|
||||
<!-- blush -->
|
||||
<ellipse cx="300" cy="514" rx="30" ry="12" fill="#ff8a2a" opacity="0.28"/>
|
||||
<ellipse cx="508" cy="508" rx="22" ry="11" fill="#ff8a2a" opacity="0.28"/>
|
||||
<path d="M286 512 l8 -8 M300 514 l8 -8 M314 514 l8 -8" stroke="#e8642a" stroke-width="2.5" stroke-linecap="round"/>
|
||||
|
||||
<!-- near eye -->
|
||||
<path d="M268 440 C278 410 338 398 378 416 C384 448 378 480 362 496 C332 506 296 504 280 490 C270 474 266 456 268 440 Z" fill="#ffffff"/>
|
||||
<g clip-path="url(#eyeL)">
|
||||
<path d="M268 410 L390 410 L390 438 C350 424 300 426 268 446 Z" fill="#dfe7f0"/>
|
||||
<ellipse cx="334" cy="456" rx="40" ry="52" fill="#ff8a2a" stroke="#4a1e05" stroke-width="3.5"/>
|
||||
<path d="M294 456 A40 52 0 0 1 374 456 C356 444 312 444 294 456 Z" fill="#b8471c"/>
|
||||
<ellipse cx="336" cy="486" rx="26" ry="14" fill="#ffc27a"/>
|
||||
<ellipse cx="336" cy="458" rx="15" ry="22" fill="#4a1e05"/>
|
||||
<ellipse cx="316" cy="436" rx="13" ry="17" fill="#ffffff"/>
|
||||
<circle cx="352" cy="482" r="6" fill="#ffffff"/>
|
||||
</g>
|
||||
<path d="M260 452 C266 408 336 386 386 410 L402 398 L396 420 L386 426 C340 406 288 416 270 456 Z" fill="#4a1e05"/>
|
||||
<path d="M258 452 L248 444 M262 438 L250 426" stroke="#4a1e05" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M292 498 C312 506 340 506 360 496" fill="none" stroke="#4a1e05" stroke-width="3.5" stroke-linecap="round"/>
|
||||
|
||||
<!-- far eye -->
|
||||
<path d="M454 432 C472 410 514 404 534 420 C540 450 534 480 522 494 C500 504 472 502 460 490 C452 470 450 450 454 432 Z" fill="#ffffff"/>
|
||||
<g clip-path="url(#eyeR)">
|
||||
<path d="M450 404 L545 404 L545 430 C514 414 476 418 450 440 Z" fill="#dfe7f0"/>
|
||||
<ellipse cx="498" cy="456" rx="32" ry="50" fill="#ff8a2a" stroke="#4a1e05" stroke-width="3.5"/>
|
||||
<path d="M466 456 A32 50 0 0 1 530 456 C516 444 480 444 466 456 Z" fill="#b8471c"/>
|
||||
<ellipse cx="500" cy="486" rx="20" ry="13" fill="#ffc27a"/>
|
||||
<ellipse cx="500" cy="458" rx="12" ry="21" fill="#4a1e05"/>
|
||||
<ellipse cx="484" cy="436" rx="10" ry="15" fill="#ffffff"/>
|
||||
<circle cx="512" cy="482" r="5" fill="#ffffff"/>
|
||||
</g>
|
||||
<path d="M448 444 C462 404 520 396 544 418 L558 410 L552 430 C522 408 474 414 456 448 Z" fill="#4a1e05"/>
|
||||
<path d="M470 496 C488 504 506 502 520 494" fill="none" stroke="#4a1e05" stroke-width="3" stroke-linecap="round"/>
|
||||
|
||||
<!-- brows: the near one raised, wry -->
|
||||
<path d="M282 384 C300 362 336 356 362 366" fill="none" stroke="#4a1e05" stroke-width="6" stroke-linecap="round"/>
|
||||
<path d="M466 380 C484 372 508 372 526 382" fill="none" stroke="#4a1e05" stroke-width="6" stroke-linecap="round"/>
|
||||
|
||||
<!-- nose and crooked half-smile -->
|
||||
<path d="M444 498 L438 510 L448 510" fill="none" stroke="#c4561f" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M414 536 C432 544 452 542 472 526" fill="none" stroke="#4a1e05" stroke-width="4.5" stroke-linecap="round"/>
|
||||
<path d="M468 520 L478 530" stroke="#4a1e05" stroke-width="4" stroke-linecap="round"/>
|
||||
|
||||
<!-- front hair: messy bangs -->
|
||||
<path d="M194 372 C186 238 280 146 402 144 C522 142 614 228 606 362 L592 404 C580 368 566 346 552 330 L542 392 C524 356 504 334 486 322 L470 384 C456 348 442 330 424 320 L398 392 C384 352 364 330 346 322 L322 380 C306 352 288 336 270 334 L262 398 C252 386 242 376 234 368 L226 470 C204 436 194 404 194 372 Z" fill="#e8642a" stroke="#4a1e05" stroke-width="8" stroke-linejoin="round"/>
|
||||
<!-- hair shadow on the far side -->
|
||||
<path d="M506 158 C560 180 600 240 606 330 L592 404 C580 368 566 346 552 330 L542 392 C524 356 504 334 486 322 C520 290 530 220 506 158 Z" fill="#b8471c"/>
|
||||
<!-- inner clump lines -->
|
||||
<path d="M300 220 C290 270 286 310 292 340 M372 190 C360 240 356 290 364 326 M460 190 C474 230 478 280 470 316" fill="none" stroke="#4a1e05" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<!-- one hair highlight, in the key colour -->
|
||||
<path d="M262 236 C290 198 340 178 380 176 L372 196 L356 192 L344 208 C320 210 290 222 262 236 Z" fill="#ff8a2a"/>
|
||||
<path d="M400 174 C420 172 440 174 456 180 L446 194 L432 188 L418 200 L404 190 Z" fill="#ff8a2a"/>
|
||||
<!-- near sideburn lock edge line -->
|
||||
<path d="M236 376 C230 410 230 440 226 470" fill="none" stroke="#4a1e05" stroke-width="3.5"/>
|
||||
<!-- tiny hair clip: a brand-blue spark pin -->
|
||||
<path d="M248 306 L262 292 L258 306 L274 302 L258 322 L262 308 Z" fill="#59b7ff" stroke="#4a1e05" stroke-width="3" stroke-linejoin="round"/>
|
||||
</g>
|
||||
|
||||
<!-- BUST torso -->
|
||||
<g id="torsoA">
|
||||
<!-- neck -->
|
||||
<path d="M362 556 L364 630 C390 646 420 646 446 630 L448 552 Z" fill="#ffd6a8" stroke="#4a1e05" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M364 572 C392 596 424 596 448 566 L448 600 C420 618 392 616 364 600 Z" fill="#f2b089"/>
|
||||
<!-- shoulders -->
|
||||
<path d="M364 616 C320 636 246 644 210 680 C190 704 178 740 170 800 L640 800 C634 740 622 706 602 684 C574 654 496 636 448 614 Z" fill="#ffd6a8" stroke="#4a1e05" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M560 650 C590 666 612 700 624 800 L560 800 C566 730 572 690 560 650 Z" fill="#f2b089"/>
|
||||
<!-- tank top -->
|
||||
<path d="M186 800 C198 736 226 700 248 670 L292 658 C312 700 354 718 406 718 C458 718 500 698 520 658 L562 668 C580 696 604 740 614 800 Z" fill="#ff8a2a" stroke="#4a1e05" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M520 658 L562 668 C580 696 604 740 614 800 L548 800 C548 730 536 690 520 658 Z" fill="#e8642a"/>
|
||||
<path d="M300 690 C340 724 380 732 430 730" fill="none" stroke="#4a1e05" stroke-width="3"/>
|
||||
<!-- collarbones -->
|
||||
<path d="M318 650 C340 660 360 662 376 658 M436 660 C452 664 474 662 494 652" fill="none" stroke="#c4561f" stroke-width="3" stroke-linecap="round"/>
|
||||
<!-- tank front mark: a small navy bolt -->
|
||||
<path d="M404 744 L420 726 L414 744 L428 740 L410 764 L414 748 Z" fill="#07111a"/>
|
||||
<!-- rim light on the far shoulder -->
|
||||
<path d="M576 664 C600 684 614 716 620 760" fill="none" stroke="#ff8a2a" stroke-width="4"/>
|
||||
</g>
|
||||
|
||||
<!-- the gloved fist on the wrench -->
|
||||
<g id="fistA">
|
||||
<path d="M196 800 C200 760 214 726 236 704 L282 716 C266 744 256 772 254 800 Z" fill="#ffd6a8" stroke="#4a1e05" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M262 716 L282 716 C266 744 256 772 254 800 L232 800 C238 770 248 740 262 716 Z" fill="#f2b089"/>
|
||||
<g transform="translate(261,680) rotate(-22)">
|
||||
<rect x="-36" y="44" width="62" height="22" rx="8" fill="#1f3550" stroke="#4a1e05" stroke-width="6"/>
|
||||
<rect x="-34" y="-34" width="58" height="22" rx="11" fill="#1f3550" stroke="#4a1e05" stroke-width="6"/>
|
||||
<rect x="-38" y="-14" width="62" height="22" rx="11" fill="#1f3550" stroke="#4a1e05" stroke-width="6"/>
|
||||
<rect x="-38" y="6" width="62" height="22" rx="11" fill="#1f3550" stroke="#4a1e05" stroke-width="6"/>
|
||||
<rect x="-34" y="26" width="56" height="22" rx="11" fill="#1f3550" stroke="#4a1e05" stroke-width="6"/>
|
||||
<path d="M18 -36 C40 -40 52 -24 46 -8 C42 4 30 6 22 0 Z" fill="#1f3550" stroke="#4a1e05" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M-30 -28 C-30 -10 -32 10 -30 36" fill="none" stroke="#59b7ff" stroke-width="3" stroke-linecap="round" opacity="0.85"/>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g id="bustA">
|
||||
<use href="#wrench" transform="translate(318,820) rotate(-112)"/>
|
||||
<use href="#hairBack"/>
|
||||
<use href="#spark"/>
|
||||
<use href="#torsoA"/>
|
||||
<use href="#headFront"/>
|
||||
<use href="#fistA"/>
|
||||
</g>
|
||||
</defs>
|
||||
|
||||
<!-- sheet -->
|
||||
<rect width="1200" height="800" fill="#f4efe7"/>
|
||||
|
||||
<!-- dialogue card (context only) -->
|
||||
<polygon points="74,46 786,46 740,780 20,780" fill="#07111a"/>
|
||||
<polygon points="74,46 786,46 740,780 20,780" fill="none" stroke="#ff8a2a" stroke-width="5"/>
|
||||
<path d="M86 58 L120 58 L90 520" fill="none" stroke="#59b7ff" stroke-width="2" opacity="0.5"/>
|
||||
|
||||
<g clip-path="url(#cardClip)">
|
||||
<use href="#bustA" transform="translate(66,94) scale(0.86)"/>
|
||||
</g>
|
||||
|
||||
<!-- nameplate -->
|
||||
<polygon points="484,704 744,704 741,752 478,752" fill="#ff8a2a"/>
|
||||
<text x="510" y="739" font-family="Consolas, 'Courier New', monospace" font-size="30" font-weight="700" letter-spacing="8" fill="#07111a">EUREKA</text>
|
||||
|
||||
<!-- right column -->
|
||||
<text x="812" y="66" font-family="Consolas, 'Courier New', monospace" font-size="22" font-weight="700" letter-spacing="4" fill="#4a1e05">EUREKA / A / THE SPARK</text>
|
||||
<text x="812" y="94" font-family="'Segoe UI', Arial, sans-serif" font-size="15" fill="#4a1e05">Hook: one huge lightning-spark ahoge springs</text>
|
||||
<text x="812" y="113" font-family="'Segoe UI', Arial, sans-serif" font-size="15" fill="#4a1e05">from her crown; a big wrench rides her shoulder.</text>
|
||||
|
||||
<!-- full body chibi, 2.5 heads -->
|
||||
<g id="fullA" transform="translate(0,34)">
|
||||
<!-- wrench behind -->
|
||||
<use href="#wrench" transform="translate(922,432) rotate(-116) scale(0.42)"/>
|
||||
<use href="#hairBack" transform="translate(768,118) scale(0.36)"/>
|
||||
<use href="#spark" transform="translate(768,118) scale(0.36)"/>
|
||||
<!-- back arm (far), hanging -->
|
||||
<path d="M944 352 C960 372 966 400 962 428 C958 440 944 440 942 428 C942 404 938 380 930 364 Z" fill="#ffd6a8" stroke="#4a1e05" stroke-width="4" stroke-linejoin="round"/>
|
||||
<circle cx="952" cy="432" r="10" fill="#1f3550" stroke="#4a1e05" stroke-width="4"/>
|
||||
<!-- legs: navy jumpsuit -->
|
||||
<path d="M866 424 L940 424 L946 540 L912 542 L906 470 L900 542 L864 540 Z" fill="#1f3550" stroke="#4a1e05" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M920 430 L940 424 L946 540 L926 540 Z" fill="#07111a"/>
|
||||
<!-- boots -->
|
||||
<path d="M860 534 L902 534 L904 566 L848 566 C848 552 852 540 860 534 Z" fill="#4a1e05"/>
|
||||
<path d="M910 534 L948 534 C958 542 962 556 962 566 L908 566 Z" fill="#4a1e05"/>
|
||||
<path d="M852 556 L902 556 M912 556 L960 556" stroke="#ff8a2a" stroke-width="3"/>
|
||||
<!-- tank torso -->
|
||||
<path d="M870 344 C886 334 926 334 940 344 L944 418 L866 418 Z" fill="#ff8a2a" stroke="#4a1e05" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M920 342 C932 340 940 344 940 344 L944 418 L924 418 Z" fill="#e8642a"/>
|
||||
<!-- jumpsuit top tied at the waist -->
|
||||
<path d="M860 412 L948 412 L950 432 L858 432 Z" fill="#1f3550" stroke="#4a1e05" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M880 426 C870 450 862 474 858 494 L874 496 C878 474 884 452 894 430 Z" fill="#1f3550" stroke="#4a1e05" stroke-width="4" stroke-linejoin="round"/>
|
||||
<circle cx="888" cy="424" r="9" fill="#1f3550" stroke="#4a1e05" stroke-width="4"/>
|
||||
<!-- neck -->
|
||||
<path d="M892 322 L894 340 L916 340 L918 322 Z" fill="#f2b089" stroke="#4a1e05" stroke-width="3"/>
|
||||
<use href="#headFront" transform="translate(768,118) scale(0.36)"/>
|
||||
<!-- near arm raised to the wrench on the shoulder -->
|
||||
<path d="M870 350 C852 360 846 380 856 392 C866 398 874 386 878 372 Z" fill="#ffd6a8" stroke="#4a1e05" stroke-width="4" stroke-linejoin="round"/>
|
||||
<circle cx="858" cy="380" r="11" fill="#1f3550" stroke="#4a1e05" stroke-width="4"/>
|
||||
</g>
|
||||
<text x="856" y="618" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a1e05">full body, 2.5 heads</text>
|
||||
|
||||
<!-- silhouette check -->
|
||||
<rect x="1012" y="140" width="168" height="200" fill="#ffffff" stroke="#d8cfc2"/>
|
||||
<g filter="url(#sil)"><use href="#bustA" transform="translate(1028,160) scale(0.2)"/></g>
|
||||
<text x="1016" y="356" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a1e05">bust silhouette</text>
|
||||
<rect x="1012" y="372" width="64" height="64" fill="#ffffff" stroke="#d8cfc2"/>
|
||||
<g filter="url(#sil)"><use href="#bustA" transform="translate(1022,380) scale(0.06)"/></g>
|
||||
<text x="1086" y="410" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a1e05">at 48 px</text>
|
||||
|
||||
<!-- palette -->
|
||||
<g font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#4a1e05">
|
||||
<rect x="812" y="630" width="52" height="52" fill="#ff8a2a" stroke="#4a1e05" stroke-width="2"/><text x="812" y="698">#ff8a2a</text><text x="812" y="712">ember</text>
|
||||
<rect x="874" y="630" width="52" height="52" fill="#e8642a" stroke="#4a1e05" stroke-width="2"/><text x="874" y="698">#e8642a</text><text x="874" y="712">copper</text>
|
||||
<rect x="936" y="630" width="52" height="52" fill="#4a1e05" stroke="#4a1e05" stroke-width="2"/><text x="936" y="698">#4a1e05</text><text x="936" y="712">line</text>
|
||||
<rect x="998" y="630" width="52" height="52" fill="#07111a" stroke="#4a1e05" stroke-width="2"/><text x="998" y="698">#07111a</text><text x="998" y="712">navy</text>
|
||||
<rect x="1060" y="630" width="52" height="52" fill="#ffd6a8" stroke="#4a1e05" stroke-width="2"/><text x="1060" y="698">#ffd6a8</text><text x="1060" y="712">skin</text>
|
||||
<rect x="1122" y="630" width="52" height="52" fill="#59b7ff" stroke="#4a1e05" stroke-width="2"/><text x="1122" y="698">#59b7ff</text><text x="1122" y="712">spark</text>
|
||||
</g>
|
||||
<text x="812" y="740" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a1e05">Shadows are darks of each base; wrench steel #cfd6dd is the one neutral.</text>
|
||||
<text x="812" y="758" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#4a1e05">Shape: a circle cut by one zigzag. Circle, bolt, bar.</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 220 KiB |
|
|
@ -1,243 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<title>Heimdall, Direction A: The Horn Bearer</title>
|
||||
<defs>
|
||||
<filter id="sil" x="-5%" y="-5%" width="110%" height="110%">
|
||||
<feFlood flood-color="#000"/><feComposite in2="SourceAlpha" operator="in"/>
|
||||
</filter>
|
||||
<clipPath id="panelClip"><rect x="20" y="20" width="770" height="760" rx="14"/></clipPath>
|
||||
<linearGradient id="prism" x1="0" y1="0" x2="1" y2="0">
|
||||
<stop offset="0" stop-color="#ff4d6d"/><stop offset=".18" stop-color="#ff4d6d"/>
|
||||
<stop offset=".18" stop-color="#ffb02e"/><stop offset=".34" stop-color="#ffb02e"/>
|
||||
<stop offset=".34" stop-color="#f4e04d"/><stop offset=".5" stop-color="#f4e04d"/>
|
||||
<stop offset=".5" stop-color="#3fd17a"/><stop offset=".66" stop-color="#3fd17a"/>
|
||||
<stop offset=".66" stop-color="#3fc8ff"/><stop offset=".82" stop-color="#3fc8ff"/>
|
||||
<stop offset=".82" stop-color="#9a6bff"/><stop offset="1" stop-color="#9a6bff"/>
|
||||
</linearGradient>
|
||||
|
||||
<!-- ===== HEAD (canon: dark skin, messy dark hair lit gold, stern gold eyes) ===== -->
|
||||
<clipPath id="eyeNearClip"><path d="M-112,50 C-92,32 -46,30 -6,46 C-10,82 -28,100 -56,101 C-86,101 -104,86 -112,50 Z"/></clipPath>
|
||||
<clipPath id="eyeFarClip"><path d="M66,48 C86,36 112,38 132,50 C130,80 118,99 98,100 C78,100 68,84 66,48 Z"/></clipPath>
|
||||
<clipPath id="irisNear"><ellipse cx="-54" cy="70" rx="31" ry="36"/></clipPath>
|
||||
<clipPath id="irisFar"><ellipse cx="100" cy="72" rx="22" ry="33"/></clipPath>
|
||||
<clipPath id="faceClip"><path d="M-150,-10 C-152,60 -132,115 -84,150 C-44,176 30,192 66,186 C104,176 142,132 156,72 C163,40 166,10 160,-20 Z"/></clipPath>
|
||||
|
||||
<g id="head" stroke-linejoin="round" stroke-linecap="round">
|
||||
<!-- back hair: messy wavy locks with curled points -->
|
||||
<path d="M-150,110 C-175,110 -200,95 -218,68 C-196,70 -186,60 -182,45 C-215,40 -245,15 -254,-22 C-232,-12 -214,-20 -205,-35 C-240,-60 -258,-100 -248,-144 C-230,-122 -206,-116 -190,-120 C-200,-170 -180,-214 -138,-236 C-136,-216 -126,-206 -110,-200 C-100,-242 -60,-270 -8,-274 C-20,-258 -18,-242 -10,-228 C20,-262 72,-272 114,-252 C98,-242 90,-232 86,-220 C132,-232 178,-214 204,-178 C184,-178 170,-172 160,-164 C202,-150 228,-110 232,-66 C214,-78 202,-80 190,-78 C212,-50 222,-14 214,24 C202,8 186,2 170,4 L170,60 L-150,110 Z" fill="#2e211c" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M-150,110 C-175,110 -200,95 -218,68 C-196,70 -186,60 -182,45 C-170,60 -160,70 -150,70 Z" fill="#1c1411"/>
|
||||
<!-- gold-lit strands -->
|
||||
<path d="M-206,-100 C-190,-160 -130,-206 -60,-222 C-124,-196 -176,-150 -206,-100 Z M-40,-238 C10,-256 74,-250 114,-226 C70,-238 14,-240 -40,-238 Z M144,-160 C182,-140 204,-108 208,-76 C196,-104 176,-132 144,-160 Z M-222,-38 C-212,-70 -192,-92 -168,-98 C-188,-82 -206,-62 -222,-38 Z M-150,-150 C-110,-186 -50,-194 0,-190 C-56,-184 -110,-174 -150,-150 Z" fill="#6e5230"/>
|
||||
<path d="M176,-150 C204,-126 222,-96 226,-70 M196,-60 C210,-30 214,0 212,18" fill="none" stroke="#3466ff" stroke-width="4"/>
|
||||
|
||||
<!-- ear + gold earring -->
|
||||
<path d="M-146,32 C-184,22 -192,92 -146,102 Z" fill="#5a3a2a" stroke="#0d1a4d" stroke-width="4.5"/>
|
||||
<path d="M-152,48 C-172,48 -172,80 -152,86" fill="none" stroke="#432a1e" stroke-width="3"/>
|
||||
<circle cx="-170" cy="104" r="8" fill="none" stroke="#d8a73a" stroke-width="4"/>
|
||||
<path d="M-170,112 L-170,138 M-170,130 L-162,130 M-170,137 L-163,137" stroke="#d8a73a" stroke-width="4"/>
|
||||
<circle cx="-170" cy="112" r="2" fill="#f5d27a"/>
|
||||
|
||||
<!-- face -->
|
||||
<path d="M-150,-10 C-152,60 -132,115 -84,150 C-44,176 30,192 66,186 C104,176 142,132 156,72 C163,40 166,10 160,-20 Z" fill="#5a3a2a"/>
|
||||
<g clip-path="url(#faceClip)">
|
||||
<path d="M-160,-20 L170,-20 L170,46 Q150,52 144,34 Q128,40 112,50 Q96,22 70,18 Q56,44 38,58 Q22,24 -4,18 Q-20,38 -40,44 Q-58,22 -80,18 Q-96,38 -122,48 Q-130,30 -160,30 Z" fill="#432a1e"/>
|
||||
<path d="M150,20 C150,90 120,160 66,190 L180,200 L180,20 Z" fill="#432a1e"/>
|
||||
<ellipse cx="-80" cy="122" rx="22" ry="9" fill="#74503c"/>
|
||||
</g>
|
||||
<path d="M-150,-10 C-152,60 -132,115 -84,150 C-44,176 30,192 66,186 C104,176 142,132 156,72 C163,40 166,10 160,-20" fill="none" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M154,60 C142,128 108,172 70,184" fill="none" stroke="#3466ff" stroke-width="3"/>
|
||||
|
||||
<!-- near eye: sharp, level, glowing gold -->
|
||||
<path d="M-112,50 C-92,32 -46,30 -6,46 C-10,82 -28,100 -56,101 C-86,101 -104,86 -112,50 Z" fill="#f4f6ff"/>
|
||||
<g clip-path="url(#eyeNearClip)">
|
||||
<path d="M-120,30 L0,30 L0,58 Q-60,44 -120,62 Z" fill="#c9d0e8"/>
|
||||
<ellipse cx="-54" cy="70" rx="31" ry="36" fill="#d8a73a"/>
|
||||
<g clip-path="url(#irisNear)">
|
||||
<ellipse cx="-54" cy="44" rx="40" ry="24" fill="#8a5a12"/>
|
||||
<ellipse cx="-54" cy="102" rx="26" ry="14" fill="#f5d27a"/>
|
||||
</g>
|
||||
<ellipse cx="-52" cy="72" rx="9" ry="17" fill="#24130a"/>
|
||||
<ellipse cx="-54" cy="70" rx="31" ry="36" fill="none" stroke="#5a3a10" stroke-width="2.5"/>
|
||||
<circle cx="-66" cy="58" r="8.5" fill="#ffffff"/>
|
||||
<circle cx="-38" cy="88" r="4.5" fill="#ffffff"/>
|
||||
</g>
|
||||
<path d="M-124,46 L-136,36 C-104,22 -46,20 -2,40 L4,52 C-44,34 -94,38 -112,60 Z" fill="#0d1a4d"/>
|
||||
<path d="M-94,96 C-80,101 -62,102 -46,100" fill="none" stroke="#0d1a4d" stroke-width="3"/>
|
||||
|
||||
<!-- far eye -->
|
||||
<path d="M66,48 C86,36 112,38 132,50 C130,80 118,99 98,100 C78,100 68,84 66,48 Z" fill="#f4f6ff"/>
|
||||
<g clip-path="url(#eyeFarClip)">
|
||||
<path d="M60,30 L140,30 L140,58 Q100,46 60,62 Z" fill="#c9d0e8"/>
|
||||
<ellipse cx="100" cy="72" rx="22" ry="33" fill="#d8a73a"/>
|
||||
<g clip-path="url(#irisFar)">
|
||||
<ellipse cx="100" cy="48" rx="30" ry="22" fill="#8a5a12"/>
|
||||
<ellipse cx="100" cy="102" rx="18" ry="12" fill="#f5d27a"/>
|
||||
</g>
|
||||
<ellipse cx="102" cy="74" rx="7" ry="15" fill="#24130a"/>
|
||||
<ellipse cx="100" cy="72" rx="22" ry="33" fill="none" stroke="#5a3a10" stroke-width="2.5"/>
|
||||
<circle cx="92" cy="61" r="6.5" fill="#ffffff"/>
|
||||
<circle cx="109" cy="86" r="3.5" fill="#ffffff"/>
|
||||
</g>
|
||||
<path d="M60,52 C82,32 120,32 144,44 L146,36 L140,54 C114,42 86,42 66,58 Z" fill="#0d1a4d"/>
|
||||
<path d="M80,95 C90,99 104,99 114,96" fill="none" stroke="#0d1a4d" stroke-width="2.5"/>
|
||||
|
||||
<!-- messy fringe -->
|
||||
<path d="M168,10 C176,30 172,50 160,62 C156,40 146,26 130,18 C128,32 120,42 108,48 C104,26 90,12 70,8 C66,28 52,46 34,54 C36,30 20,12 -4,6 C-10,24 -24,36 -40,40 C-44,18 -60,6 -80,4 C-88,24 -104,38 -122,46 C-120,26 -128,10 -140,4 C-150,32 -150,62 -158,86 C-176,-60 -60,-130 40,-128 C120,-126 172,-60 168,10 Z" fill="#2e211c"/>
|
||||
<path d="M168,10 C176,30 172,50 160,62 C156,40 146,26 130,18 C128,32 120,42 108,48 C104,26 90,12 70,8 C66,28 52,46 34,54 C36,30 20,12 -4,6 C-10,24 -24,36 -40,40 C-44,18 -60,6 -80,4 C-88,24 -104,38 -122,46 C-120,26 -128,10 -140,4 C-150,32 -150,62 -158,86" fill="none" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<path d="M-120,-62 C-80,-100 -20,-108 30,-98 C-24,-96 -76,-86 -120,-62 Z M60,-94 C110,-82 142,-50 154,-12 C136,-46 104,-74 60,-94 Z" fill="#6e5230"/>
|
||||
<path d="M-60,-40 C-42,-20 -32,0 -30,18 M92,-50 C102,-30 106,-10 106,8" fill="none" stroke="#1c1411" stroke-width="3"/>
|
||||
<path d="M150,-50 C168,-24 172,0 168,10" fill="none" stroke="#3466ff" stroke-width="3"/>
|
||||
|
||||
<!-- stern brows over the fringe -->
|
||||
<use xlink:href="#brows"/>
|
||||
|
||||
<!-- nose and a small level frown -->
|
||||
<path d="M114,98 C119,104 118,108 110,110" fill="none" stroke="#2a1810" stroke-width="3"/>
|
||||
<use xlink:href="#mouth"/>
|
||||
</g>
|
||||
|
||||
<!-- ===== COAT (canon: navy high collar lined cobalt, gold trim, key pendant) ===== -->
|
||||
<g id="collarBack" stroke-linejoin="round">
|
||||
<path d="M-150,268 C-176,216 -172,160 -142,118 L-80,196 L150,196 L202,118 C232,164 232,220 212,268 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<path d="M150,196 L202,118 C232,164 232,220 212,268 L180,268 C200,230 200,180 196,150 Z" fill="#2443b8"/>
|
||||
</g>
|
||||
<g id="neck"><path d="M18,160 L22,250 L104,250 L100,160 Z" fill="#432a1e" stroke="#0d1a4d" stroke-width="4"/></g>
|
||||
<g id="coatFront" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M4,236 L60,340 L118,236 Z" fill="#0d1a4d"/>
|
||||
<path d="M-150,268 C-170,226 -162,180 -142,132 C-112,190 -42,224 6,240 L60,340 L-20,440 L-235,440 C-236,334 -206,282 -150,268 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<path d="M212,268 C228,226 224,180 202,132 C174,190 152,224 116,240 L60,340 L140,440 L315,440 C310,334 284,282 212,268 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<path d="M202,132 C174,190 152,224 116,240 L60,340 L84,370 C120,300 176,250 214,206 Z" fill="#121936"/>
|
||||
<path d="M-136,150 C-110,198 -46,228 0,244 L56,344 M196,150 C170,198 150,226 120,244 L64,344" fill="none" stroke="#d8a73a" stroke-width="5"/>
|
||||
<!-- shoulder plate: cobalt panel, gold edge, cobalt gem -->
|
||||
<path d="M-235,440 C-236,360 -214,300 -168,280 C-140,300 -128,340 -130,380 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M-212,350 C-206,316 -190,296 -168,286" fill="none" stroke="#d8a73a" stroke-width="5"/>
|
||||
<path d="M-180,330 L-170,316 L-160,330 L-170,344 Z" fill="#7c9bff" stroke="#0d1a4d" stroke-width="3"/>
|
||||
<path d="M315,440 C312,370 296,316 250,288 C232,320 236,370 246,420 Z" fill="#2443b8" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M280,340 C272,316 262,302 252,294" fill="none" stroke="#d8a73a" stroke-width="5"/>
|
||||
</g>
|
||||
<g id="pendant" stroke-linejoin="round">
|
||||
<path d="M60,268 L80,292 L60,316 L40,292 Z" fill="#d8a73a" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<path d="M60,284 L67,292 L60,300 L53,292 Z" fill="#0d1a4d"/>
|
||||
<path d="M56,316 L56,356 L60,362 L64,356 L64,316 Z M64,340 L76,340 L76,348 L64,348 Z" fill="#d8a73a" stroke="#0d1a4d" stroke-width="3.5"/>
|
||||
<circle cx="52" cy="282" r="3" fill="#f5d27a"/>
|
||||
</g>
|
||||
|
||||
<!-- ===== FULL-BODY BASE (2.5 heads): long coat flaring into cape tails ===== -->
|
||||
<g id="fbLegs" stroke-linejoin="round">
|
||||
<path d="M-34,600 L-40,750 L14,750 L18,600 Z M62,600 L68,750 L122,750 L116,600 Z" fill="#0d1a4d"/>
|
||||
<path d="M-66,744 Q-66,712 -40,712 L16,712 Q24,746 22,790 L-74,790 Q-86,770 -66,744 Z M52,744 Q50,712 70,712 L126,712 Q150,746 156,790 L52,790 Q42,770 52,744 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M-62,724 L18,724 M56,724 L130,724" stroke="#d8a73a" stroke-width="6"/>
|
||||
</g>
|
||||
<g id="fbCoat" stroke-linejoin="round" stroke-linecap="round">
|
||||
<!-- cape tails flaring behind -->
|
||||
<path d="M-130,300 C-210,420 -250,560 -260,690 L-200,660 L-170,700 L-120,600 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M200,300 C290,420 330,560 340,680 L280,650 L250,700 L190,600 Z" fill="#2443b8" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M-128,262 L208,262 C240,400 258,520 262,640 Q160,668 60,640 Q-50,668 -160,640 C-158,520 -150,400 -128,262 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M60,340 L60,640" stroke="#d8a73a" stroke-width="6"/>
|
||||
<path d="M-160,640 Q-50,668 60,640 Q160,668 262,640" fill="none" stroke="#d8a73a" stroke-width="6"/>
|
||||
<path d="M-120,450 L240,450" stroke="#0d1a4d" stroke-width="22"/>
|
||||
<path d="M-120,450 L240,450" stroke="#121936" stroke-width="14"/>
|
||||
<circle cx="60" cy="450" r="16" fill="#d8a73a" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<path d="M150,460 L150,520 M150,520 L162,520 M150,508 L160,508" stroke="#d8a73a" stroke-width="6"/>
|
||||
<circle cx="150" cy="464" r="8" fill="none" stroke="#d8a73a" stroke-width="5"/>
|
||||
</g>
|
||||
|
||||
|
||||
<!-- expression: On watch -->
|
||||
<g id="brows" fill="none" stroke="#0d1a4d" stroke-linecap="round"><path d="M-114,8 C-86,4 -52,8 -22,20" stroke-width="6"/><path d="M64,24 C86,12 112,8 138,12" stroke-width="5"/></g>
|
||||
<g id="mouth"><path d="M60,146 C70,144 82,144 90,147" fill="none" stroke="#0d1a4d" stroke-width="3.4" stroke-linecap="round"/></g>
|
||||
<clipPath id="hornClip"><path d="M245,248 C350,80 360,-170 250,-290 C150,-400 -80,-412 -210,-336 C-262,-306 -300,-262 -320,-212 L-215,-175 C-196,-236 -124,-292 0,-305 C140,-312 240,-232 265,-122 C285,-22 270,120 212,238 Z"/></clipPath>
|
||||
<g id="horn" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M245,248 C350,80 360,-170 250,-290 C150,-400 -80,-412 -210,-336 C-262,-306 -300,-262 -320,-212 L-215,-175 C-196,-236 -124,-292 0,-305 C140,-312 240,-232 265,-122 C285,-22 270,120 212,238 Z" fill="#e9eef8"/>
|
||||
<g clip-path="url(#hornClip)">
|
||||
<path d="M-215,-175 C-196,-236 -124,-292 0,-305 C140,-312 240,-232 265,-122 C285,-22 270,120 212,238" fill="none" stroke="#b8c3da" stroke-width="44"/>
|
||||
<g fill="none">
|
||||
<path d="M210,92 L390,122" stroke="#0d1a4d" stroke-width="24"/><path d="M210,92 L390,122" stroke="#d8a73a" stroke-width="17"/>
|
||||
<path d="M240,-112 L410,-176" stroke="#0d1a4d" stroke-width="24"/><path d="M240,-112 L410,-176" stroke="#d8a73a" stroke-width="17"/>
|
||||
<path d="M38,-430 L48,-280" stroke="#0d1a4d" stroke-width="26"/><path d="M38,-430 L48,-280" stroke="#d8a73a" stroke-width="19"/>
|
||||
<path d="M-262,-372 L-166,-250" stroke="#0d1a4d" stroke-width="32"/><path d="M-262,-372 L-166,-250" stroke="#d8a73a" stroke-width="25"/>
|
||||
<path d="M318,104 L352,110 M330,-140 L362,-152 M42,-392 L43,-366 M-238,-344 L-222,-324" stroke="#f5d27a" stroke-width="5"/>
|
||||
</g>
|
||||
<path d="M-120,-372 C-20,-396 160,-380 250,-280" fill="none" stroke="#ffffff" stroke-width="9"/>
|
||||
<path d="M318,40 C340,-120 320,-210 238,-292 C150,-380 -70,-392 -196,-322" fill="none" stroke="url(#prism)" stroke-width="7"/>
|
||||
<path d="M352,-20 C362,-150 330,-240 268,-298" fill="none" stroke="#3466ff" stroke-width="12"/>
|
||||
</g>
|
||||
<path d="M-320,-212 C-326,-160 -236,-140 -215,-175 C-232,-214 -296,-244 -320,-212 Z" fill="#1b2452"/>
|
||||
<path d="M-320,-212 C-326,-160 -236,-140 -215,-175" fill="none" stroke="#d8a73a" stroke-width="9"/>
|
||||
<path d="M245,248 C350,80 360,-170 250,-290 C150,-400 -80,-412 -210,-336 C-262,-306 -300,-262 -320,-212 L-215,-175 C-196,-236 -124,-292 0,-305 C140,-312 240,-232 265,-122 C285,-22 270,120 212,238 Z" fill="none" stroke="#0d1a4d" stroke-width="7"/>
|
||||
</g>
|
||||
<!-- horn strap across the chest -->
|
||||
<g id="strap">
|
||||
<path d="M250,300 L-150,440" stroke="#0d1a4d" stroke-width="30"/>
|
||||
<path d="M250,300 L-150,440" stroke="#121936" stroke-width="22"/>
|
||||
<path d="M250,300 L-150,440" stroke="#d8a73a" stroke-width="3" stroke-dasharray="10 10"/>
|
||||
</g>
|
||||
|
||||
<g id="bust" stroke-linejoin="round" stroke-linecap="round">
|
||||
<use xlink:href="#horn"/>
|
||||
<use xlink:href="#collarBack"/>
|
||||
<use xlink:href="#neck"/>
|
||||
<use xlink:href="#head"/>
|
||||
<use xlink:href="#coatFront"/>
|
||||
<use xlink:href="#strap"/>
|
||||
<use xlink:href="#pendant"/>
|
||||
</g>
|
||||
<g id="bustPlaced"><g transform="translate(400,398) scale(0.96)"><use xlink:href="#bust"/></g></g>
|
||||
<g id="fullbody" stroke-linejoin="round" stroke-linecap="round">
|
||||
<use xlink:href="#horn"/>
|
||||
<use xlink:href="#fbLegs"/>
|
||||
<use xlink:href="#fbCoat"/>
|
||||
<path d="M-128,300 Q-186,400 -184,500 Q-158,520 -132,500 Q-124,410 -96,340 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<path d="M-184,486 L-130,486" stroke="#3466ff" stroke-width="12"/>
|
||||
<circle cx="-158" cy="522" r="28" fill="#1b2452" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M200,300 Q258,400 260,500 Q234,520 208,500 Q200,410 172,340 Z" fill="#121936" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<circle cx="234" cy="522" r="26" fill="#1b2452" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<use xlink:href="#collarBack"/>
|
||||
<use xlink:href="#neck"/>
|
||||
<use xlink:href="#head"/>
|
||||
<path d="M4,236 L60,340 L118,236 Z" fill="#0d1a4d"/>
|
||||
<path d="M-136,150 C-110,198 -46,228 4,240 L60,340 M196,150 C170,198 150,226 118,240 L60,340" fill="none" stroke="#d8a73a" stroke-width="6"/>
|
||||
<use xlink:href="#strap"/>
|
||||
<use xlink:href="#pendant"/>
|
||||
</g>
|
||||
</defs>
|
||||
|
||||
<rect width="1200" height="800" fill="#f3f1ec"/>
|
||||
<g clip-path="url(#panelClip)">
|
||||
<rect x="20" y="20" width="770" height="760" fill="#e6ebf5"/>
|
||||
<path d="M330,20 L640,20 L470,780 L160,780 Z" fill="#d3ddf6"/>
|
||||
<path d="M660,20 L700,20 L530,780 L490,780 Z" fill="#d3ddf6"/>
|
||||
<use xlink:href="#bustPlaced"/>
|
||||
</g>
|
||||
<rect x="20" y="20" width="770" height="760" rx="14" fill="none" stroke="#0d1a4d" stroke-width="3"/>
|
||||
|
||||
<g font-family="Segoe UI, Arial, Helvetica, sans-serif" fill="#0d1a4d">
|
||||
<text x="815" y="58" font-size="30" font-weight="700" letter-spacing="3">HEIMDALL</text>
|
||||
<text x="815" y="86" font-size="17" font-weight="600" letter-spacing="1.5">A · THE HORN BEARER</text>
|
||||
</g>
|
||||
<g transform="translate(920,262) scale(0.31)"><use xlink:href="#fullbody"/></g>
|
||||
<text x="930" y="540" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#55607a" text-anchor="middle">full body, 2.5 heads</text>
|
||||
|
||||
<rect x="1046" y="110" width="140" height="138" fill="#ffffff" stroke="#c6ccda"/>
|
||||
<svg x="1046" y="110" width="140" height="138" viewBox="20 20 770 760"><use xlink:href="#bustPlaced" filter="url(#sil)"/></svg>
|
||||
<rect x="1046" y="262" width="48" height="48" fill="#ffffff" stroke="#c6ccda"/>
|
||||
<svg x="1046" y="262" width="48" height="48" viewBox="20 20 770 760"><use xlink:href="#bustPlaced" filter="url(#sil)"/></svg>
|
||||
<text x="1102" y="282" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#55607a">silhouette</text>
|
||||
<text x="1102" y="298" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#55607a">48 px</text>
|
||||
|
||||
<g font-family="Segoe UI, Arial, Helvetica, sans-serif">
|
||||
<text x="815" y="575" font-size="13" font-weight="700" fill="#3466ff" letter-spacing="2">HOOK</text>
|
||||
<text x="815" y="597" font-size="15" fill="#0d1a4d">The Gjallarhorn arcs over his head like a crescent</text>
|
||||
<text x="815" y="617" font-size="15" fill="#0d1a4d">moon; a Bifrost line runs along its rim.</text>
|
||||
<text x="815" y="655" font-size="13" font-weight="700" fill="#3466ff" letter-spacing="2">PALETTE</text>
|
||||
<g font-size="11" fill="#0d1a4d">
|
||||
<rect x="815" y="666" width="52" height="40" fill="#3466ff" stroke="#0d1a4d"/><text x="815" y="722">#3466ff</text><text x="815" y="736">lining</text>
|
||||
<rect x="878" y="666" width="52" height="40" fill="#1b2452" stroke="#0d1a4d"/><text x="878" y="722">#1b2452</text><text x="878" y="736">coat</text>
|
||||
<rect x="941" y="666" width="52" height="40" fill="#e9eef8" stroke="#0d1a4d"/><text x="941" y="722">#e9eef8</text><text x="941" y="736">horn</text>
|
||||
<rect x="1004" y="666" width="52" height="40" fill="#d8a73a" stroke="#0d1a4d"/><text x="1004" y="722">#d8a73a</text><text x="1004" y="736">gold</text>
|
||||
<rect x="1067" y="666" width="52" height="40" fill="#5a3a2a" stroke="#0d1a4d"/><text x="1067" y="722">#5a3a2a</text><text x="1067" y="736">skin</text>
|
||||
<rect x="1130" y="666" width="52" height="40" fill="#2e211c" stroke="#0d1a4d"/><text x="1130" y="722">#2e211c</text><text x="1130" y="736">hair</text>
|
||||
<rect x="815" y="748" width="367" height="7" fill="url(#prism)"/>
|
||||
<text x="815" y="772">Bifrost accent: a thin prismatic line on the horn, under 10% of the figure</text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 190 KiB |
|
|
@ -1,254 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<title>Heimdall, Direction B: The Great Key</title>
|
||||
<defs>
|
||||
<filter id="sil" x="-5%" y="-5%" width="110%" height="110%">
|
||||
<feFlood flood-color="#000"/><feComposite in2="SourceAlpha" operator="in"/>
|
||||
</filter>
|
||||
<clipPath id="panelClip"><rect x="20" y="20" width="770" height="760" rx="14"/></clipPath>
|
||||
<linearGradient id="prism" x1="0" y1="0" x2="1" y2="0">
|
||||
<stop offset="0" stop-color="#ff4d6d"/><stop offset=".18" stop-color="#ff4d6d"/>
|
||||
<stop offset=".18" stop-color="#ffb02e"/><stop offset=".34" stop-color="#ffb02e"/>
|
||||
<stop offset=".34" stop-color="#f4e04d"/><stop offset=".5" stop-color="#f4e04d"/>
|
||||
<stop offset=".5" stop-color="#3fd17a"/><stop offset=".66" stop-color="#3fd17a"/>
|
||||
<stop offset=".66" stop-color="#3fc8ff"/><stop offset=".82" stop-color="#3fc8ff"/>
|
||||
<stop offset=".82" stop-color="#9a6bff"/><stop offset="1" stop-color="#9a6bff"/>
|
||||
</linearGradient>
|
||||
|
||||
<!-- ===== HEAD (canon: dark skin, messy dark hair lit gold, stern gold eyes) ===== -->
|
||||
<clipPath id="eyeNearClip"><path d="M-112,50 C-92,32 -46,30 -6,46 C-10,82 -28,100 -56,101 C-86,101 -104,86 -112,50 Z"/></clipPath>
|
||||
<clipPath id="eyeFarClip"><path d="M66,48 C86,36 112,38 132,50 C130,80 118,99 98,100 C78,100 68,84 66,48 Z"/></clipPath>
|
||||
<clipPath id="irisNear"><ellipse cx="-54" cy="70" rx="31" ry="36"/></clipPath>
|
||||
<clipPath id="irisFar"><ellipse cx="100" cy="72" rx="22" ry="33"/></clipPath>
|
||||
<clipPath id="faceClip"><path d="M-150,-10 C-152,60 -132,115 -84,150 C-44,176 30,192 66,186 C104,176 142,132 156,72 C163,40 166,10 160,-20 Z"/></clipPath>
|
||||
|
||||
<g id="head" stroke-linejoin="round" stroke-linecap="round">
|
||||
<!-- back hair: messy wavy locks with curled points -->
|
||||
<path d="M-150,110 C-175,110 -200,95 -218,68 C-196,70 -186,60 -182,45 C-215,40 -245,15 -254,-22 C-232,-12 -214,-20 -205,-35 C-240,-60 -258,-100 -248,-144 C-230,-122 -206,-116 -190,-120 C-200,-170 -180,-214 -138,-236 C-136,-216 -126,-206 -110,-200 C-100,-242 -60,-270 -8,-274 C-20,-258 -18,-242 -10,-228 C20,-262 72,-272 114,-252 C98,-242 90,-232 86,-220 C132,-232 178,-214 204,-178 C184,-178 170,-172 160,-164 C202,-150 228,-110 232,-66 C214,-78 202,-80 190,-78 C212,-50 222,-14 214,24 C202,8 186,2 170,4 L170,60 L-150,110 Z" fill="#2e211c" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M-150,110 C-175,110 -200,95 -218,68 C-196,70 -186,60 -182,45 C-170,60 -160,70 -150,70 Z" fill="#1c1411"/>
|
||||
<!-- gold-lit strands -->
|
||||
<path d="M-206,-100 C-190,-160 -130,-206 -60,-222 C-124,-196 -176,-150 -206,-100 Z M-40,-238 C10,-256 74,-250 114,-226 C70,-238 14,-240 -40,-238 Z M144,-160 C182,-140 204,-108 208,-76 C196,-104 176,-132 144,-160 Z M-222,-38 C-212,-70 -192,-92 -168,-98 C-188,-82 -206,-62 -222,-38 Z M-150,-150 C-110,-186 -50,-194 0,-190 C-56,-184 -110,-174 -150,-150 Z" fill="#6e5230"/>
|
||||
<path d="M176,-150 C204,-126 222,-96 226,-70 M196,-60 C210,-30 214,0 212,18" fill="none" stroke="#3466ff" stroke-width="4"/>
|
||||
|
||||
<!-- ear + gold earring -->
|
||||
<path d="M-146,32 C-184,22 -192,92 -146,102 Z" fill="#5a3a2a" stroke="#0d1a4d" stroke-width="4.5"/>
|
||||
<path d="M-152,48 C-172,48 -172,80 -152,86" fill="none" stroke="#432a1e" stroke-width="3"/>
|
||||
<circle cx="-170" cy="104" r="8" fill="none" stroke="#d8a73a" stroke-width="4"/>
|
||||
<path d="M-170,112 L-170,138 M-170,130 L-162,130 M-170,137 L-163,137" stroke="#d8a73a" stroke-width="4"/>
|
||||
<circle cx="-170" cy="112" r="2" fill="#f5d27a"/>
|
||||
|
||||
<!-- face -->
|
||||
<path d="M-150,-10 C-152,60 -132,115 -84,150 C-44,176 30,192 66,186 C104,176 142,132 156,72 C163,40 166,10 160,-20 Z" fill="#5a3a2a"/>
|
||||
<g clip-path="url(#faceClip)">
|
||||
<path d="M-160,-20 L170,-20 L170,46 Q150,52 144,34 Q128,40 112,50 Q96,22 70,18 Q56,44 38,58 Q22,24 -4,18 Q-20,38 -40,44 Q-58,22 -80,18 Q-96,38 -122,48 Q-130,30 -160,30 Z" fill="#432a1e"/>
|
||||
<path d="M150,20 C150,90 120,160 66,190 L180,200 L180,20 Z" fill="#432a1e"/>
|
||||
<ellipse cx="-80" cy="122" rx="22" ry="9" fill="#74503c"/>
|
||||
</g>
|
||||
<path d="M-150,-10 C-152,60 -132,115 -84,150 C-44,176 30,192 66,186 C104,176 142,132 156,72 C163,40 166,10 160,-20" fill="none" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M154,60 C142,128 108,172 70,184" fill="none" stroke="#3466ff" stroke-width="3"/>
|
||||
|
||||
<!-- near eye: sharp, level, glowing gold -->
|
||||
<path d="M-112,50 C-92,32 -46,30 -6,46 C-10,82 -28,100 -56,101 C-86,101 -104,86 -112,50 Z" fill="#f4f6ff"/>
|
||||
<g clip-path="url(#eyeNearClip)">
|
||||
<path d="M-120,30 L0,30 L0,58 Q-60,44 -120,62 Z" fill="#c9d0e8"/>
|
||||
<ellipse cx="-54" cy="70" rx="31" ry="36" fill="#d8a73a"/>
|
||||
<g clip-path="url(#irisNear)">
|
||||
<ellipse cx="-54" cy="44" rx="40" ry="24" fill="#8a5a12"/>
|
||||
<ellipse cx="-54" cy="102" rx="26" ry="14" fill="#f5d27a"/>
|
||||
</g>
|
||||
<ellipse cx="-52" cy="72" rx="9" ry="17" fill="#24130a"/>
|
||||
<ellipse cx="-54" cy="70" rx="31" ry="36" fill="none" stroke="#5a3a10" stroke-width="2.5"/>
|
||||
<circle cx="-66" cy="58" r="8.5" fill="#ffffff"/>
|
||||
<circle cx="-38" cy="88" r="4.5" fill="#ffffff"/>
|
||||
</g>
|
||||
<path d="M-124,46 L-136,36 C-104,22 -46,20 -2,40 L4,52 C-44,34 -94,38 -112,60 Z" fill="#0d1a4d"/>
|
||||
<path d="M-94,96 C-80,101 -62,102 -46,100" fill="none" stroke="#0d1a4d" stroke-width="3"/>
|
||||
|
||||
<!-- far eye -->
|
||||
<path d="M66,48 C86,36 112,38 132,50 C130,80 118,99 98,100 C78,100 68,84 66,48 Z" fill="#f4f6ff"/>
|
||||
<g clip-path="url(#eyeFarClip)">
|
||||
<path d="M60,30 L140,30 L140,58 Q100,46 60,62 Z" fill="#c9d0e8"/>
|
||||
<ellipse cx="100" cy="72" rx="22" ry="33" fill="#d8a73a"/>
|
||||
<g clip-path="url(#irisFar)">
|
||||
<ellipse cx="100" cy="48" rx="30" ry="22" fill="#8a5a12"/>
|
||||
<ellipse cx="100" cy="102" rx="18" ry="12" fill="#f5d27a"/>
|
||||
</g>
|
||||
<ellipse cx="102" cy="74" rx="7" ry="15" fill="#24130a"/>
|
||||
<ellipse cx="100" cy="72" rx="22" ry="33" fill="none" stroke="#5a3a10" stroke-width="2.5"/>
|
||||
<circle cx="92" cy="61" r="6.5" fill="#ffffff"/>
|
||||
<circle cx="109" cy="86" r="3.5" fill="#ffffff"/>
|
||||
</g>
|
||||
<path d="M60,52 C82,32 120,32 144,44 L146,36 L140,54 C114,42 86,42 66,58 Z" fill="#0d1a4d"/>
|
||||
<path d="M80,95 C90,99 104,99 114,96" fill="none" stroke="#0d1a4d" stroke-width="2.5"/>
|
||||
|
||||
<!-- messy fringe -->
|
||||
<path d="M168,10 C176,30 172,50 160,62 C156,40 146,26 130,18 C128,32 120,42 108,48 C104,26 90,12 70,8 C66,28 52,46 34,54 C36,30 20,12 -4,6 C-10,24 -24,36 -40,40 C-44,18 -60,6 -80,4 C-88,24 -104,38 -122,46 C-120,26 -128,10 -140,4 C-150,32 -150,62 -158,86 C-176,-60 -60,-130 40,-128 C120,-126 172,-60 168,10 Z" fill="#2e211c"/>
|
||||
<path d="M168,10 C176,30 172,50 160,62 C156,40 146,26 130,18 C128,32 120,42 108,48 C104,26 90,12 70,8 C66,28 52,46 34,54 C36,30 20,12 -4,6 C-10,24 -24,36 -40,40 C-44,18 -60,6 -80,4 C-88,24 -104,38 -122,46 C-120,26 -128,10 -140,4 C-150,32 -150,62 -158,86" fill="none" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<path d="M-120,-62 C-80,-100 -20,-108 30,-98 C-24,-96 -76,-86 -120,-62 Z M60,-94 C110,-82 142,-50 154,-12 C136,-46 104,-74 60,-94 Z" fill="#6e5230"/>
|
||||
<path d="M-60,-40 C-42,-20 -32,0 -30,18 M92,-50 C102,-30 106,-10 106,8" fill="none" stroke="#1c1411" stroke-width="3"/>
|
||||
<path d="M150,-50 C168,-24 172,0 168,10" fill="none" stroke="#3466ff" stroke-width="3"/>
|
||||
|
||||
<!-- stern brows over the fringe -->
|
||||
<use xlink:href="#brows"/>
|
||||
|
||||
<!-- nose and a small level frown -->
|
||||
<path d="M114,98 C119,104 118,108 110,110" fill="none" stroke="#2a1810" stroke-width="3"/>
|
||||
<use xlink:href="#mouth"/>
|
||||
</g>
|
||||
|
||||
<!-- ===== COAT (canon: navy high collar lined cobalt, gold trim, key pendant) ===== -->
|
||||
<g id="collarBack" stroke-linejoin="round">
|
||||
<path d="M-150,268 C-176,216 -172,160 -142,118 L-80,196 L150,196 L202,118 C232,164 232,220 212,268 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<path d="M150,196 L202,118 C232,164 232,220 212,268 L180,268 C200,230 200,180 196,150 Z" fill="#2443b8"/>
|
||||
</g>
|
||||
<g id="neck"><path d="M18,160 L22,250 L104,250 L100,160 Z" fill="#432a1e" stroke="#0d1a4d" stroke-width="4"/></g>
|
||||
<g id="coatFront" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M4,236 L60,340 L118,236 Z" fill="#0d1a4d"/>
|
||||
<path d="M-150,268 C-170,226 -162,180 -142,132 C-112,190 -42,224 6,240 L60,340 L-20,440 L-235,440 C-236,334 -206,282 -150,268 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<path d="M212,268 C228,226 224,180 202,132 C174,190 152,224 116,240 L60,340 L140,440 L315,440 C310,334 284,282 212,268 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<path d="M202,132 C174,190 152,224 116,240 L60,340 L84,370 C120,300 176,250 214,206 Z" fill="#121936"/>
|
||||
<path d="M-136,150 C-110,198 -46,228 0,244 L56,344 M196,150 C170,198 150,226 120,244 L64,344" fill="none" stroke="#d8a73a" stroke-width="5"/>
|
||||
<!-- shoulder plate: cobalt panel, gold edge, cobalt gem -->
|
||||
<path d="M-235,440 C-236,360 -214,300 -168,280 C-140,300 -128,340 -130,380 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M-212,350 C-206,316 -190,296 -168,286" fill="none" stroke="#d8a73a" stroke-width="5"/>
|
||||
<path d="M-180,330 L-170,316 L-160,330 L-170,344 Z" fill="#7c9bff" stroke="#0d1a4d" stroke-width="3"/>
|
||||
<path d="M315,440 C312,370 296,316 250,288 C232,320 236,370 246,420 Z" fill="#2443b8" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M280,340 C272,316 262,302 252,294" fill="none" stroke="#d8a73a" stroke-width="5"/>
|
||||
</g>
|
||||
<g id="pendant" stroke-linejoin="round">
|
||||
<path d="M60,268 L80,292 L60,316 L40,292 Z" fill="#d8a73a" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<path d="M60,284 L67,292 L60,300 L53,292 Z" fill="#0d1a4d"/>
|
||||
<path d="M56,316 L56,356 L60,362 L64,356 L64,316 Z M64,340 L76,340 L76,348 L64,348 Z" fill="#d8a73a" stroke="#0d1a4d" stroke-width="3.5"/>
|
||||
<circle cx="52" cy="282" r="3" fill="#f5d27a"/>
|
||||
</g>
|
||||
|
||||
<!-- ===== FULL-BODY BASE (2.5 heads): long coat flaring into cape tails ===== -->
|
||||
<g id="fbLegs" stroke-linejoin="round">
|
||||
<path d="M-34,600 L-40,750 L14,750 L18,600 Z M62,600 L68,750 L122,750 L116,600 Z" fill="#0d1a4d"/>
|
||||
<path d="M-66,744 Q-66,712 -40,712 L16,712 Q24,746 22,790 L-74,790 Q-86,770 -66,744 Z M52,744 Q50,712 70,712 L126,712 Q150,746 156,790 L52,790 Q42,770 52,744 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M-62,724 L18,724 M56,724 L130,724" stroke="#d8a73a" stroke-width="6"/>
|
||||
</g>
|
||||
<g id="fbCoat" stroke-linejoin="round" stroke-linecap="round">
|
||||
<!-- cape tails flaring behind -->
|
||||
<path d="M-130,300 C-210,420 -250,560 -260,690 L-200,660 L-170,700 L-120,600 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M200,300 C290,420 330,560 340,680 L280,650 L250,700 L190,600 Z" fill="#2443b8" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M-128,262 L208,262 C240,400 258,520 262,640 Q160,668 60,640 Q-50,668 -160,640 C-158,520 -150,400 -128,262 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M60,340 L60,640" stroke="#d8a73a" stroke-width="6"/>
|
||||
<path d="M-160,640 Q-50,668 60,640 Q160,668 262,640" fill="none" stroke="#d8a73a" stroke-width="6"/>
|
||||
<path d="M-120,450 L240,450" stroke="#0d1a4d" stroke-width="22"/>
|
||||
<path d="M-120,450 L240,450" stroke="#121936" stroke-width="14"/>
|
||||
<circle cx="60" cy="450" r="16" fill="#d8a73a" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<path d="M150,460 L150,520 M150,520 L162,520 M150,508 L160,508" stroke="#d8a73a" stroke-width="6"/>
|
||||
<circle cx="150" cy="464" r="8" fill="none" stroke="#d8a73a" stroke-width="5"/>
|
||||
</g>
|
||||
|
||||
|
||||
<!-- expression: Granted, a small gold-tooth smile -->
|
||||
<g id="brows" fill="none" stroke="#0d1a4d" stroke-linecap="round"><path d="M-114,2 C-86,-4 -52,0 -22,10" stroke-width="6"/><path d="M64,14 C86,4 112,2 138,8" stroke-width="5"/></g>
|
||||
<g id="mouth" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M50,140 C62,151 86,152 102,137 C96,154 66,159 50,140 Z" fill="#2a1018"/>
|
||||
<path d="M68,147 L86,146 L84,155 L70,155 Z" fill="#d8a73a" stroke="#0d1a4d" stroke-width="1.5"/>
|
||||
<path d="M50,140 C62,151 86,152 102,137" fill="none" stroke="#0d1a4d" stroke-width="3.2"/>
|
||||
<path d="M104,150 L107,141 L110,150 L119,153 L110,156 L107,165 L104,156 L95,153 Z" fill="#f5d27a" stroke="#0d1a4d" stroke-width="1.5"/>
|
||||
</g>
|
||||
<!-- the great key, local origin at the centre of its bow -->
|
||||
<g id="bigkey" stroke-linejoin="round" stroke-linecap="round">
|
||||
<!-- shaft -->
|
||||
<path d="M-13,58 L-13,420 L13,420 L13,58 Z" fill="#d8a73a" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<path d="M4,60 L13,60 L13,420 L4,420 Z" fill="#a5761c"/>
|
||||
<path d="M-7,90 L-7,300" stroke="#f5d27a" stroke-width="4"/>
|
||||
<!-- bit: stepped teeth -->
|
||||
<path d="M13,262 L72,262 L72,282 L52,282 L52,298 L72,298 L72,334 L13,334 Z" fill="#d8a73a" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<path d="M13,420 L0,442 L-13,420" fill="#d8a73a" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<!-- collar rings -->
|
||||
<rect x="-24" y="52" width="48" height="16" rx="5" fill="#d8a73a" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<rect x="-20" y="80" width="40" height="12" rx="4" fill="#d8a73a" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<!-- crowned bow: ring with three spikes -->
|
||||
<path d="M0,-108 L14,-76 L-14,-76 Z M-74,-6 L-58,8 L-58,-20 Z M74,-6 L58,8 L58,-20 Z" fill="#d8a73a" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<circle cx="0" cy="-6" r="64" fill="#d8a73a" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M40,-46 A64,64 0 0 1 40,34 L28,24 A48,48 0 0 0 28,-36 Z" fill="#a5761c"/>
|
||||
<circle cx="0" cy="-6" r="40" fill="#e6ebf5" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M-34,-6 A34,34 0 0 1 34,-6" fill="none" stroke="url(#prism)" stroke-width="6"/>
|
||||
<path d="M0,-30 L18,-6 L0,18 L-18,-6 Z" fill="#d8a73a" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<circle cx="0" cy="-6" r="5" fill="#0d1a4d"/>
|
||||
<path d="M-50,-38 A60,60 0 0 1 -14,-62" fill="none" stroke="#f5d27a" stroke-width="5"/>
|
||||
</g>
|
||||
<!-- gloved fist around the shaft, sleeve rising from the coat -->
|
||||
<g id="keyHand" stroke-linejoin="round" stroke-linecap="round"><g transform="translate(0,40)">
|
||||
<path d="M232,460 L222,200 L330,190 L370,460 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<path d="M300,192 L330,190 L370,460 L330,460 Z" fill="#121936"/>
|
||||
<path d="M218,196 L334,186 L338,222 L222,232 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M220,214 L336,204" stroke="#d8a73a" stroke-width="4"/>
|
||||
<path d="M236,190 C226,150 230,112 252,100 L314,96 C336,104 340,150 330,188 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M254,118 L318,114 M254,140 L322,136 M256,162 L322,158" fill="none" stroke="#0d1a4d" stroke-width="3"/>
|
||||
<path d="M244,104 C232,124 238,144 262,144 C276,142 282,128 278,112" fill="#1b2452" stroke="#0d1a4d" stroke-width="4.5"/>
|
||||
<path d="M262,108 C268,104 280,104 288,108" fill="none" stroke="#3466ff" stroke-width="3"/>
|
||||
</g></g>
|
||||
|
||||
<g id="bust" stroke-linejoin="round" stroke-linecap="round">
|
||||
<use xlink:href="#collarBack"/>
|
||||
<use xlink:href="#neck"/>
|
||||
<use xlink:href="#head"/>
|
||||
<use xlink:href="#coatFront"/>
|
||||
<use xlink:href="#pendant"/>
|
||||
<use xlink:href="#bigkey" transform="translate(274,-238) rotate(6) scale(1.15)"/>
|
||||
<use xlink:href="#keyHand"/>
|
||||
</g>
|
||||
<g id="bustPlaced"><g transform="translate(372,392) scale(1.0)"><use xlink:href="#bust"/></g></g>
|
||||
<g id="fullbody" stroke-linejoin="round" stroke-linecap="round">
|
||||
<use xlink:href="#fbLegs"/>
|
||||
<use xlink:href="#fbCoat"/>
|
||||
<path d="M-128,300 Q-186,400 -184,500 Q-158,520 -132,500 Q-124,410 -96,340 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<path d="M-184,486 L-130,486" stroke="#3466ff" stroke-width="12"/>
|
||||
<circle cx="-158" cy="522" r="28" fill="#1b2452" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<use xlink:href="#collarBack"/>
|
||||
<use xlink:href="#neck"/>
|
||||
<use xlink:href="#head"/>
|
||||
<path d="M4,236 L60,340 L118,236 Z" fill="#0d1a4d"/>
|
||||
<path d="M-136,150 C-110,198 -46,228 4,240 L60,340 M196,150 C170,198 150,226 118,240 L60,340" fill="none" stroke="#d8a73a" stroke-width="6"/>
|
||||
<use xlink:href="#pendant"/>
|
||||
<use xlink:href="#bigkey" transform="translate(300,-10) scale(0.95)"/>
|
||||
<path d="M200,300 Q270,340 290,400 Q270,424 246,410 Q226,370 172,350 Z" fill="#121936" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<circle cx="300" cy="404" r="30" fill="#1b2452" stroke="#0d1a4d" stroke-width="5"/>
|
||||
</g>
|
||||
</defs>
|
||||
|
||||
<rect width="1200" height="800" fill="#f3f1ec"/>
|
||||
<g clip-path="url(#panelClip)">
|
||||
<rect x="20" y="20" width="770" height="760" fill="#e6ebf5"/>
|
||||
<path d="M330,20 L640,20 L470,780 L160,780 Z" fill="#d3ddf6"/>
|
||||
<path d="M660,20 L700,20 L530,780 L490,780 Z" fill="#d3ddf6"/>
|
||||
<use xlink:href="#bustPlaced"/>
|
||||
</g>
|
||||
<rect x="20" y="20" width="770" height="760" rx="14" fill="none" stroke="#0d1a4d" stroke-width="3"/>
|
||||
|
||||
<g font-family="Segoe UI, Arial, Helvetica, sans-serif" fill="#0d1a4d">
|
||||
<text x="815" y="58" font-size="30" font-weight="700" letter-spacing="3">HEIMDALL</text>
|
||||
<text x="815" y="86" font-size="17" font-weight="600" letter-spacing="1.5">B · THE GREAT KEY</text>
|
||||
</g>
|
||||
<g transform="translate(905,262) scale(0.31)"><use xlink:href="#fullbody"/></g>
|
||||
<text x="930" y="540" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#55607a" text-anchor="middle">full body, 2.5 heads</text>
|
||||
|
||||
<rect x="1046" y="110" width="140" height="138" fill="#ffffff" stroke="#c6ccda"/>
|
||||
<svg x="1046" y="110" width="140" height="138" viewBox="20 20 770 760"><use xlink:href="#bustPlaced" filter="url(#sil)"/></svg>
|
||||
<rect x="1046" y="262" width="48" height="48" fill="#ffffff" stroke="#c6ccda"/>
|
||||
<svg x="1046" y="262" width="48" height="48" viewBox="20 20 770 760"><use xlink:href="#bustPlaced" filter="url(#sil)"/></svg>
|
||||
<text x="1102" y="282" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#55607a">silhouette</text>
|
||||
<text x="1102" y="298" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#55607a">48 px</text>
|
||||
|
||||
<g font-family="Segoe UI, Arial, Helvetica, sans-serif">
|
||||
<text x="815" y="575" font-size="13" font-weight="700" fill="#3466ff" letter-spacing="2">HOOK</text>
|
||||
<text x="815" y="597" font-size="15" fill="#0d1a4d">A key as tall as he is, raised beside his face;</text>
|
||||
<text x="815" y="617" font-size="15" fill="#0d1a4d">its crowned bow rings a Bifrost arc.</text>
|
||||
<text x="815" y="655" font-size="13" font-weight="700" fill="#3466ff" letter-spacing="2">PALETTE</text>
|
||||
<g font-size="11" fill="#0d1a4d">
|
||||
<rect x="815" y="666" width="52" height="40" fill="#3466ff" stroke="#0d1a4d"/><text x="815" y="722">#3466ff</text><text x="815" y="736">lining</text>
|
||||
<rect x="878" y="666" width="52" height="40" fill="#1b2452" stroke="#0d1a4d"/><text x="878" y="722">#1b2452</text><text x="878" y="736">coat</text>
|
||||
<rect x="941" y="666" width="52" height="40" fill="#0d1a4d" stroke="#0d1a4d"/><text x="941" y="722">#0d1a4d</text><text x="941" y="736">line</text>
|
||||
<rect x="1004" y="666" width="52" height="40" fill="#d8a73a" stroke="#0d1a4d"/><text x="1004" y="722">#d8a73a</text><text x="1004" y="736">gold</text>
|
||||
<rect x="1067" y="666" width="52" height="40" fill="#5a3a2a" stroke="#0d1a4d"/><text x="1067" y="722">#5a3a2a</text><text x="1067" y="736">skin</text>
|
||||
<rect x="1130" y="666" width="52" height="40" fill="#2e211c" stroke="#0d1a4d"/><text x="1130" y="722">#2e211c</text><text x="1130" y="736">hair</text>
|
||||
<rect x="815" y="748" width="367" height="7" fill="url(#prism)"/>
|
||||
<text x="815" y="772">Bifrost accent: a thin prismatic arc inside the key's bow, under 10% of the figure</text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 196 KiB |
|
|
@ -1,261 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<title>Heimdall, Direction C: The Gate Warden</title>
|
||||
<defs>
|
||||
<filter id="sil" x="-5%" y="-5%" width="110%" height="110%">
|
||||
<feFlood flood-color="#000"/><feComposite in2="SourceAlpha" operator="in"/>
|
||||
</filter>
|
||||
<clipPath id="panelClip"><rect x="20" y="20" width="770" height="760" rx="14"/></clipPath>
|
||||
<linearGradient id="prism" x1="0" y1="0" x2="1" y2="0">
|
||||
<stop offset="0" stop-color="#ff4d6d"/><stop offset=".18" stop-color="#ff4d6d"/>
|
||||
<stop offset=".18" stop-color="#ffb02e"/><stop offset=".34" stop-color="#ffb02e"/>
|
||||
<stop offset=".34" stop-color="#f4e04d"/><stop offset=".5" stop-color="#f4e04d"/>
|
||||
<stop offset=".5" stop-color="#3fd17a"/><stop offset=".66" stop-color="#3fd17a"/>
|
||||
<stop offset=".66" stop-color="#3fc8ff"/><stop offset=".82" stop-color="#3fc8ff"/>
|
||||
<stop offset=".82" stop-color="#9a6bff"/><stop offset="1" stop-color="#9a6bff"/>
|
||||
</linearGradient>
|
||||
|
||||
<!-- ===== HEAD (canon: dark skin, messy dark hair lit gold, stern gold eyes) ===== -->
|
||||
<clipPath id="eyeNearClip"><path d="M-112,50 C-92,32 -46,30 -6,46 C-10,82 -28,100 -56,101 C-86,101 -104,86 -112,50 Z"/></clipPath>
|
||||
<clipPath id="eyeFarClip"><path d="M66,48 C86,36 112,38 132,50 C130,80 118,99 98,100 C78,100 68,84 66,48 Z"/></clipPath>
|
||||
<clipPath id="irisNear"><ellipse cx="-54" cy="70" rx="31" ry="36"/></clipPath>
|
||||
<clipPath id="irisFar"><ellipse cx="100" cy="72" rx="22" ry="33"/></clipPath>
|
||||
<clipPath id="faceClip"><path d="M-150,-10 C-152,60 -132,115 -84,150 C-44,176 30,192 66,186 C104,176 142,132 156,72 C163,40 166,10 160,-20 Z"/></clipPath>
|
||||
|
||||
<g id="head" stroke-linejoin="round" stroke-linecap="round">
|
||||
<!-- back hair: messy wavy locks with curled points -->
|
||||
<path d="M-150,110 C-175,110 -200,95 -218,68 C-196,70 -186,60 -182,45 C-215,40 -245,15 -254,-22 C-232,-12 -214,-20 -205,-35 C-240,-60 -258,-100 -248,-144 C-230,-122 -206,-116 -190,-120 C-200,-170 -180,-214 -138,-236 C-136,-216 -126,-206 -110,-200 C-100,-242 -60,-270 -8,-274 C-20,-258 -18,-242 -10,-228 C20,-262 72,-272 114,-252 C98,-242 90,-232 86,-220 C132,-232 178,-214 204,-178 C184,-178 170,-172 160,-164 C202,-150 228,-110 232,-66 C214,-78 202,-80 190,-78 C212,-50 222,-14 214,24 C202,8 186,2 170,4 L170,60 L-150,110 Z" fill="#2e211c" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M-150,110 C-175,110 -200,95 -218,68 C-196,70 -186,60 -182,45 C-170,60 -160,70 -150,70 Z" fill="#1c1411"/>
|
||||
<!-- gold-lit strands -->
|
||||
<path d="M-206,-100 C-190,-160 -130,-206 -60,-222 C-124,-196 -176,-150 -206,-100 Z M-40,-238 C10,-256 74,-250 114,-226 C70,-238 14,-240 -40,-238 Z M144,-160 C182,-140 204,-108 208,-76 C196,-104 176,-132 144,-160 Z M-222,-38 C-212,-70 -192,-92 -168,-98 C-188,-82 -206,-62 -222,-38 Z M-150,-150 C-110,-186 -50,-194 0,-190 C-56,-184 -110,-174 -150,-150 Z" fill="#6e5230"/>
|
||||
<path d="M176,-150 C204,-126 222,-96 226,-70 M196,-60 C210,-30 214,0 212,18" fill="none" stroke="#3466ff" stroke-width="4"/>
|
||||
|
||||
<!-- ear + gold earring -->
|
||||
<path d="M-146,32 C-184,22 -192,92 -146,102 Z" fill="#5a3a2a" stroke="#0d1a4d" stroke-width="4.5"/>
|
||||
<path d="M-152,48 C-172,48 -172,80 -152,86" fill="none" stroke="#432a1e" stroke-width="3"/>
|
||||
<circle cx="-170" cy="104" r="8" fill="none" stroke="#d8a73a" stroke-width="4"/>
|
||||
<path d="M-170,112 L-170,138 M-170,130 L-162,130 M-170,137 L-163,137" stroke="#d8a73a" stroke-width="4"/>
|
||||
<circle cx="-170" cy="112" r="2" fill="#f5d27a"/>
|
||||
|
||||
<!-- face -->
|
||||
<path d="M-150,-10 C-152,60 -132,115 -84,150 C-44,176 30,192 66,186 C104,176 142,132 156,72 C163,40 166,10 160,-20 Z" fill="#5a3a2a"/>
|
||||
<g clip-path="url(#faceClip)">
|
||||
<path d="M-160,-20 L170,-20 L170,46 Q150,52 144,34 Q128,40 112,50 Q96,22 70,18 Q56,44 38,58 Q22,24 -4,18 Q-20,38 -40,44 Q-58,22 -80,18 Q-96,38 -122,48 Q-130,30 -160,30 Z" fill="#432a1e"/>
|
||||
<path d="M150,20 C150,90 120,160 66,190 L180,200 L180,20 Z" fill="#432a1e"/>
|
||||
<ellipse cx="-80" cy="122" rx="22" ry="9" fill="#74503c"/>
|
||||
</g>
|
||||
<path d="M-150,-10 C-152,60 -132,115 -84,150 C-44,176 30,192 66,186 C104,176 142,132 156,72 C163,40 166,10 160,-20" fill="none" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M154,60 C142,128 108,172 70,184" fill="none" stroke="#3466ff" stroke-width="3"/>
|
||||
|
||||
<!-- near eye: sharp, level, glowing gold -->
|
||||
<path d="M-112,50 C-92,32 -46,30 -6,46 C-10,82 -28,100 -56,101 C-86,101 -104,86 -112,50 Z" fill="#f4f6ff"/>
|
||||
<g clip-path="url(#eyeNearClip)">
|
||||
<path d="M-120,30 L0,30 L0,58 Q-60,44 -120,62 Z" fill="#c9d0e8"/>
|
||||
<ellipse cx="-54" cy="70" rx="31" ry="36" fill="#d8a73a"/>
|
||||
<g clip-path="url(#irisNear)">
|
||||
<ellipse cx="-54" cy="44" rx="40" ry="24" fill="#8a5a12"/>
|
||||
<ellipse cx="-54" cy="102" rx="26" ry="14" fill="#f5d27a"/>
|
||||
</g>
|
||||
<ellipse cx="-52" cy="72" rx="9" ry="17" fill="#24130a"/>
|
||||
<ellipse cx="-54" cy="70" rx="31" ry="36" fill="none" stroke="#5a3a10" stroke-width="2.5"/>
|
||||
<circle cx="-66" cy="58" r="8.5" fill="#ffffff"/>
|
||||
<circle cx="-38" cy="88" r="4.5" fill="#ffffff"/>
|
||||
</g>
|
||||
<path d="M-124,46 L-136,36 C-104,22 -46,20 -2,40 L4,52 C-44,34 -94,38 -112,60 Z" fill="#0d1a4d"/>
|
||||
<path d="M-94,96 C-80,101 -62,102 -46,100" fill="none" stroke="#0d1a4d" stroke-width="3"/>
|
||||
|
||||
<!-- far eye -->
|
||||
<path d="M66,48 C86,36 112,38 132,50 C130,80 118,99 98,100 C78,100 68,84 66,48 Z" fill="#f4f6ff"/>
|
||||
<g clip-path="url(#eyeFarClip)">
|
||||
<path d="M60,30 L140,30 L140,58 Q100,46 60,62 Z" fill="#c9d0e8"/>
|
||||
<ellipse cx="100" cy="72" rx="22" ry="33" fill="#d8a73a"/>
|
||||
<g clip-path="url(#irisFar)">
|
||||
<ellipse cx="100" cy="48" rx="30" ry="22" fill="#8a5a12"/>
|
||||
<ellipse cx="100" cy="102" rx="18" ry="12" fill="#f5d27a"/>
|
||||
</g>
|
||||
<ellipse cx="102" cy="74" rx="7" ry="15" fill="#24130a"/>
|
||||
<ellipse cx="100" cy="72" rx="22" ry="33" fill="none" stroke="#5a3a10" stroke-width="2.5"/>
|
||||
<circle cx="92" cy="61" r="6.5" fill="#ffffff"/>
|
||||
<circle cx="109" cy="86" r="3.5" fill="#ffffff"/>
|
||||
</g>
|
||||
<path d="M60,52 C82,32 120,32 144,44 L146,36 L140,54 C114,42 86,42 66,58 Z" fill="#0d1a4d"/>
|
||||
<path d="M80,95 C90,99 104,99 114,96" fill="none" stroke="#0d1a4d" stroke-width="2.5"/>
|
||||
|
||||
<!-- messy fringe -->
|
||||
<path d="M168,10 C176,30 172,50 160,62 C156,40 146,26 130,18 C128,32 120,42 108,48 C104,26 90,12 70,8 C66,28 52,46 34,54 C36,30 20,12 -4,6 C-10,24 -24,36 -40,40 C-44,18 -60,6 -80,4 C-88,24 -104,38 -122,46 C-120,26 -128,10 -140,4 C-150,32 -150,62 -158,86 C-176,-60 -60,-130 40,-128 C120,-126 172,-60 168,10 Z" fill="#2e211c"/>
|
||||
<path d="M168,10 C176,30 172,50 160,62 C156,40 146,26 130,18 C128,32 120,42 108,48 C104,26 90,12 70,8 C66,28 52,46 34,54 C36,30 20,12 -4,6 C-10,24 -24,36 -40,40 C-44,18 -60,6 -80,4 C-88,24 -104,38 -122,46 C-120,26 -128,10 -140,4 C-150,32 -150,62 -158,86" fill="none" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<path d="M-120,-62 C-80,-100 -20,-108 30,-98 C-24,-96 -76,-86 -120,-62 Z M60,-94 C110,-82 142,-50 154,-12 C136,-46 104,-74 60,-94 Z" fill="#6e5230"/>
|
||||
<path d="M-60,-40 C-42,-20 -32,0 -30,18 M92,-50 C102,-30 106,-10 106,8" fill="none" stroke="#1c1411" stroke-width="3"/>
|
||||
<path d="M150,-50 C168,-24 172,0 168,10" fill="none" stroke="#3466ff" stroke-width="3"/>
|
||||
|
||||
<!-- stern brows over the fringe -->
|
||||
<use xlink:href="#brows"/>
|
||||
|
||||
<!-- nose and a small level frown -->
|
||||
<path d="M114,98 C119,104 118,108 110,110" fill="none" stroke="#2a1810" stroke-width="3"/>
|
||||
<use xlink:href="#mouth"/>
|
||||
</g>
|
||||
|
||||
<!-- ===== COAT (canon: navy high collar lined cobalt, gold trim, key pendant) ===== -->
|
||||
<g id="collarBack" stroke-linejoin="round">
|
||||
<path d="M-150,268 C-176,216 -172,160 -142,118 L-80,196 L150,196 L202,118 C232,164 232,220 212,268 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<path d="M150,196 L202,118 C232,164 232,220 212,268 L180,268 C200,230 200,180 196,150 Z" fill="#2443b8"/>
|
||||
</g>
|
||||
<g id="neck"><path d="M18,160 L22,250 L104,250 L100,160 Z" fill="#432a1e" stroke="#0d1a4d" stroke-width="4"/></g>
|
||||
<g id="coatFront" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M4,236 L60,340 L118,236 Z" fill="#0d1a4d"/>
|
||||
<path d="M-150,268 C-170,226 -162,180 -142,132 C-112,190 -42,224 6,240 L60,340 L-20,440 L-235,440 C-236,334 -206,282 -150,268 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<path d="M212,268 C228,226 224,180 202,132 C174,190 152,224 116,240 L60,340 L140,440 L315,440 C310,334 284,282 212,268 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<path d="M202,132 C174,190 152,224 116,240 L60,340 L84,370 C120,300 176,250 214,206 Z" fill="#121936"/>
|
||||
<path d="M-136,150 C-110,198 -46,228 0,244 L56,344 M196,150 C170,198 150,226 120,244 L64,344" fill="none" stroke="#d8a73a" stroke-width="5"/>
|
||||
<!-- shoulder plate: cobalt panel, gold edge, cobalt gem -->
|
||||
<path d="M-235,440 C-236,360 -214,300 -168,280 C-140,300 -128,340 -130,380 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M-212,350 C-206,316 -190,296 -168,286" fill="none" stroke="#d8a73a" stroke-width="5"/>
|
||||
<path d="M-180,330 L-170,316 L-160,330 L-170,344 Z" fill="#7c9bff" stroke="#0d1a4d" stroke-width="3"/>
|
||||
<path d="M315,440 C312,370 296,316 250,288 C232,320 236,370 246,420 Z" fill="#2443b8" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M280,340 C272,316 262,302 252,294" fill="none" stroke="#d8a73a" stroke-width="5"/>
|
||||
</g>
|
||||
<g id="pendant" stroke-linejoin="round">
|
||||
<path d="M60,268 L80,292 L60,316 L40,292 Z" fill="#d8a73a" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<path d="M60,284 L67,292 L60,300 L53,292 Z" fill="#0d1a4d"/>
|
||||
<path d="M56,316 L56,356 L60,362 L64,356 L64,316 Z M64,340 L76,340 L76,348 L64,348 Z" fill="#d8a73a" stroke="#0d1a4d" stroke-width="3.5"/>
|
||||
<circle cx="52" cy="282" r="3" fill="#f5d27a"/>
|
||||
</g>
|
||||
|
||||
<!-- ===== FULL-BODY BASE (2.5 heads): long coat flaring into cape tails ===== -->
|
||||
<g id="fbLegs" stroke-linejoin="round">
|
||||
<path d="M-34,600 L-40,750 L14,750 L18,600 Z M62,600 L68,750 L122,750 L116,600 Z" fill="#0d1a4d"/>
|
||||
<path d="M-66,744 Q-66,712 -40,712 L16,712 Q24,746 22,790 L-74,790 Q-86,770 -66,744 Z M52,744 Q50,712 70,712 L126,712 Q150,746 156,790 L52,790 Q42,770 52,744 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M-62,724 L18,724 M56,724 L130,724" stroke="#d8a73a" stroke-width="6"/>
|
||||
</g>
|
||||
<g id="fbCoat" stroke-linejoin="round" stroke-linecap="round">
|
||||
<!-- cape tails flaring behind -->
|
||||
<path d="M-130,300 C-210,420 -250,560 -260,690 L-200,660 L-170,700 L-120,600 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M200,300 C290,420 330,560 340,680 L280,650 L250,700 L190,600 Z" fill="#2443b8" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M-128,262 L208,262 C240,400 258,520 262,640 Q160,668 60,640 Q-50,668 -160,640 C-158,520 -150,400 -128,262 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M60,340 L60,640" stroke="#d8a73a" stroke-width="6"/>
|
||||
<path d="M-160,640 Q-50,668 60,640 Q160,668 262,640" fill="none" stroke="#d8a73a" stroke-width="6"/>
|
||||
<path d="M-120,450 L240,450" stroke="#0d1a4d" stroke-width="22"/>
|
||||
<path d="M-120,450 L240,450" stroke="#121936" stroke-width="14"/>
|
||||
<circle cx="60" cy="450" r="16" fill="#d8a73a" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<path d="M150,460 L150,520 M150,520 L162,520 M150,508 L160,508" stroke="#d8a73a" stroke-width="6"/>
|
||||
<circle cx="150" cy="464" r="8" fill="none" stroke="#d8a73a" stroke-width="5"/>
|
||||
</g>
|
||||
|
||||
|
||||
<!-- expression: Revoked, brows pulled down, a hard frown -->
|
||||
<g id="brows" fill="none" stroke="#0d1a4d" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M-122,36 L4,36 L4,68 C-36,58 -84,52 -116,58 Z" fill="#432a1e" stroke="none"/>
|
||||
<path d="M62,36 L144,36 L142,54 C116,54 88,58 64,68 Z" fill="#432a1e" stroke="none"/>
|
||||
<path d="M-128,52 C-90,50 -40,56 4,70" stroke-width="9"/><path d="M60,70 C88,58 116,52 146,50" stroke-width="8"/><path d="M-114,10 C-86,10 -50,20 -18,40" stroke-width="7"/><path d="M60,40 C82,20 110,12 138,16" stroke-width="6"/></g>
|
||||
<g id="mouth"><path d="M58,150 C68,142 82,142 92,151" fill="none" stroke="#0d1a4d" stroke-width="3.6" stroke-linecap="round"/></g>
|
||||
<g id="gate" stroke-linejoin="round" stroke-linecap="round">
|
||||
<!-- circuit tracery on the gate leaves -->
|
||||
<path d="M-220,470 L-220,40 L-180,0 L-180,-180 M-140,470 L-140,240 L-100,200 M-60,-300 L-60,-200 L-100,-160 L-100,-80 M80,-300 L80,-210 L120,-170 L120,-60 M180,470 L180,260 L220,220 L220,-170 M150,-330 L150,-280" fill="none" stroke="#d8a73a" stroke-width="5" opacity=".8"/>
|
||||
<circle cx="-180" cy="-180" r="10" fill="#e6ebf5" stroke="#d8a73a" stroke-width="5"/>
|
||||
<circle cx="-100" cy="200" r="10" fill="#e6ebf5" stroke="#d8a73a" stroke-width="5"/>
|
||||
<circle cx="220" cy="-170" r="10" fill="#e6ebf5" stroke="#d8a73a" stroke-width="5"/>
|
||||
<circle cx="120" cy="-60" r="10" fill="#e6ebf5" stroke="#d8a73a" stroke-width="5"/>
|
||||
<!-- frame -->
|
||||
<path d="M-300,470 L-300,-150 C-300,-330 -160,-420 10,-420 C180,-420 320,-330 320,-150 L320,470" fill="none" stroke="#0d1a4d" stroke-width="52"/>
|
||||
<path d="M-300,470 L-300,-150 C-300,-330 -160,-420 10,-420 C180,-420 320,-330 320,-150 L320,470" fill="none" stroke="#d8a73a" stroke-width="38"/>
|
||||
<path d="M-300,-150 C-300,-330 -160,-420 10,-420" fill="none" stroke="#f5d27a" stroke-width="8" transform="translate(-6,-6)"/>
|
||||
<path d="M320,-150 L320,470" fill="none" stroke="#a5761c" stroke-width="14" transform="translate(8,0)"/>
|
||||
<!-- Bifrost: a thin bridge of light along the inner arch -->
|
||||
<path d="M-268,-150 C-268,-310 -140,-388 10,-388 C160,-388 288,-310 288,-150" fill="none" stroke="url(#prism)" stroke-width="7"/>
|
||||
<!-- keyhole medallion -->
|
||||
<circle cx="10" cy="-404" r="44" fill="#d8a73a" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<circle cx="10" cy="-404" r="32" fill="none" stroke="#a5761c" stroke-width="4"/>
|
||||
<path d="M10,-424 A12,12 0 0 1 18,-403 L24,-382 L-4,-382 L2,-403 A12,12 0 0 1 10,-424 Z" fill="#0d1a4d"/>
|
||||
<!-- spired pillars -->
|
||||
<g>
|
||||
<path d="M-392,470 L-392,-200 L-366,-246 L-354,-330 L-342,-246 L-316,-200 L-316,470 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M-354,-330 L-346,-360 L-354,-392 L-362,-360 Z" fill="#d8a73a" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M-392,-200 L-316,-200 M-392,-160 L-316,-160" stroke="#d8a73a" stroke-width="6"/>
|
||||
<path d="M-354,-120 L-342,-100 L-354,-80 L-366,-100 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="3"/>
|
||||
<path d="M-330,-190 L-330,470" stroke="#121936" stroke-width="20"/>
|
||||
<path d="M336,470 L336,-200 L362,-246 L374,-330 L386,-246 L412,-200 L412,470 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M374,-330 L382,-360 L374,-392 L366,-360 Z" fill="#d8a73a" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M336,-200 L412,-200 M336,-160 L412,-160" stroke="#d8a73a" stroke-width="6"/>
|
||||
<path d="M374,-120 L386,-100 L374,-80 L362,-100 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="3"/>
|
||||
<path d="M398,-190 L398,470" stroke="#121936" stroke-width="20"/>
|
||||
</g>
|
||||
</g>
|
||||
<!-- palm raised toward the text box: revoked -->
|
||||
<g id="palmHand" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M220,460 L214,250 L318,236 L360,460 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<path d="M292,240 L318,236 L360,460 L322,460 Z" fill="#121936"/>
|
||||
<path d="M206,244 L322,228 L326,264 L210,280 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M208,262 L324,246" stroke="#d8a73a" stroke-width="4"/>
|
||||
<path d="M222,240 C214,206 216,170 226,150 L230,96 Q238,84 246,96 L248,140 L254,80 Q264,68 272,82 L270,140 L280,88 Q290,78 296,92 L290,148 L304,110 Q314,102 318,116 L306,180 C306,214 300,232 292,236 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M222,200 C202,186 194,166 200,154 C212,150 222,160 230,176" fill="#1b2452" stroke="#0d1a4d" stroke-width="4.5"/>
|
||||
<path d="M244,170 C256,184 274,186 288,176" fill="none" stroke="#3466ff" stroke-width="3.5"/>
|
||||
</g>
|
||||
|
||||
<g id="bust" stroke-linejoin="round" stroke-linecap="round">
|
||||
<use xlink:href="#gate"/>
|
||||
<use xlink:href="#collarBack"/>
|
||||
<use xlink:href="#neck"/>
|
||||
<use xlink:href="#head"/>
|
||||
<use xlink:href="#coatFront"/>
|
||||
<use xlink:href="#pendant"/>
|
||||
<use xlink:href="#palmHand"/>
|
||||
</g>
|
||||
<g id="bustPlaced"><g transform="translate(398,432) scale(0.86)"><use xlink:href="#bust"/></g></g>
|
||||
<g id="fullbody" stroke-linejoin="round" stroke-linecap="round">
|
||||
<use xlink:href="#gate" transform="translate(30,330) scale(1.0,1.0)"/>
|
||||
<use xlink:href="#fbLegs"/>
|
||||
<use xlink:href="#fbCoat"/>
|
||||
<path d="M-128,300 Q-186,400 -184,500 Q-158,520 -132,500 Q-124,410 -96,340 Z" fill="#1b2452" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<path d="M-184,486 L-130,486" stroke="#3466ff" stroke-width="12"/>
|
||||
<circle cx="-158" cy="522" r="28" fill="#1b2452" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<use xlink:href="#collarBack"/>
|
||||
<use xlink:href="#neck"/>
|
||||
<use xlink:href="#head"/>
|
||||
<path d="M4,236 L60,340 L118,236 Z" fill="#0d1a4d"/>
|
||||
<path d="M-136,150 C-110,198 -46,228 4,240 L60,340 M196,150 C170,198 150,226 118,240 L60,340" fill="none" stroke="#d8a73a" stroke-width="6"/>
|
||||
<use xlink:href="#pendant"/>
|
||||
<path d="M200,300 Q262,300 290,250 Q300,226 280,214 Q250,262 172,340 Z" fill="#121936" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<use xlink:href="#palmHand" transform="translate(196,90) scale(0.62) translate(-260,-200)"/>
|
||||
</g>
|
||||
</defs>
|
||||
|
||||
<rect width="1200" height="800" fill="#f3f1ec"/>
|
||||
<g clip-path="url(#panelClip)">
|
||||
<rect x="20" y="20" width="770" height="760" fill="#e6ebf5"/>
|
||||
<path d="M330,20 L640,20 L470,780 L160,780 Z" fill="#d3ddf6"/>
|
||||
<path d="M660,20 L700,20 L530,780 L490,780 Z" fill="#d3ddf6"/>
|
||||
<use xlink:href="#bustPlaced"/>
|
||||
</g>
|
||||
<rect x="20" y="20" width="770" height="760" rx="14" fill="none" stroke="#0d1a4d" stroke-width="3"/>
|
||||
|
||||
<g font-family="Segoe UI, Arial, Helvetica, sans-serif" fill="#0d1a4d">
|
||||
<text x="815" y="58" font-size="30" font-weight="700" letter-spacing="3">HEIMDALL</text>
|
||||
<text x="815" y="86" font-size="17" font-weight="600" letter-spacing="1.5">C · THE GATE WARDEN</text>
|
||||
</g>
|
||||
<g transform="translate(915,250) scale(0.27)"><use xlink:href="#fullbody"/></g>
|
||||
<text x="930" y="540" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#55607a" text-anchor="middle">full body, 2.5 heads</text>
|
||||
|
||||
<rect x="1046" y="110" width="140" height="138" fill="#ffffff" stroke="#c6ccda"/>
|
||||
<svg x="1046" y="110" width="140" height="138" viewBox="20 20 770 760"><use xlink:href="#bustPlaced" filter="url(#sil)"/></svg>
|
||||
<rect x="1046" y="262" width="48" height="48" fill="#ffffff" stroke="#c6ccda"/>
|
||||
<svg x="1046" y="262" width="48" height="48" viewBox="20 20 770 760"><use xlink:href="#bustPlaced" filter="url(#sil)"/></svg>
|
||||
<text x="1102" y="282" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#55607a">silhouette</text>
|
||||
<text x="1102" y="298" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#55607a">48 px</text>
|
||||
|
||||
<g font-family="Segoe UI, Arial, Helvetica, sans-serif">
|
||||
<text x="815" y="575" font-size="13" font-weight="700" fill="#3466ff" letter-spacing="2">HOOK</text>
|
||||
<text x="815" y="597" font-size="15" fill="#0d1a4d">A glowing gold gate arches behind him, spired</text>
|
||||
<text x="815" y="617" font-size="15" fill="#0d1a4d">pillars at his sides; his palm says not yet.</text>
|
||||
<text x="815" y="655" font-size="13" font-weight="700" fill="#3466ff" letter-spacing="2">PALETTE</text>
|
||||
<g font-size="11" fill="#0d1a4d">
|
||||
<rect x="815" y="666" width="52" height="40" fill="#3466ff" stroke="#0d1a4d"/><text x="815" y="722">#3466ff</text><text x="815" y="736">lining</text>
|
||||
<rect x="878" y="666" width="52" height="40" fill="#1b2452" stroke="#0d1a4d"/><text x="878" y="722">#1b2452</text><text x="878" y="736">coat</text>
|
||||
<rect x="941" y="666" width="52" height="40" fill="#0d1a4d" stroke="#0d1a4d"/><text x="941" y="722">#0d1a4d</text><text x="941" y="736">line</text>
|
||||
<rect x="1004" y="666" width="52" height="40" fill="#d8a73a" stroke="#0d1a4d"/><text x="1004" y="722">#d8a73a</text><text x="1004" y="736">gold</text>
|
||||
<rect x="1067" y="666" width="52" height="40" fill="#5a3a2a" stroke="#0d1a4d"/><text x="1067" y="722">#5a3a2a</text><text x="1067" y="736">skin</text>
|
||||
<rect x="1130" y="666" width="52" height="40" fill="#2e211c" stroke="#0d1a4d"/><text x="1130" y="722">#2e211c</text><text x="1130" y="736">hair</text>
|
||||
<rect x="815" y="748" width="367" height="7" fill="url(#prism)"/>
|
||||
<text x="815" y="772">Bifrost accent: a thin prismatic line inside the arch, under 10% of the figure</text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 21 KiB |
|
|
@ -1,60 +0,0 @@
|
|||
# Heimdall: SVG proposal notes, round 1
|
||||
|
||||
## Canon comes first
|
||||
|
||||
Heimdall already has a design. The established sheet is at
|
||||
`F:\Projects\gamecult-site\GameCult\static\interactive\cotsc-praxis\character-sheets\heimdall-sheet.png`,
|
||||
with sprites under `sprites\heimdall\`. It shows dark skin, messy dark hair lit
|
||||
gold, glowing gold eyes, a stern face, a navy high-collared coat with cobalt
|
||||
lining and gold trim, a gold key pendant, golden keys, a glowing golden gate, and
|
||||
a bridge he guards. The brief's three directions (horn, white-haired key halo,
|
||||
finned helmet) invented a new character. They were dropped as reinventions. A, B
|
||||
and C are now three takes on the canon design. They share one head and one coat,
|
||||
and each puts weight on a different hook: the horn, the key, the gate.
|
||||
|
||||
Superseded sheets, kept for reference:
|
||||
- `heimdall-old-A.svg`/`.png`: the brief's Horn Bearer, with spiky violet-black hair, a fur ruff and an ivory horn. Finished.
|
||||
- `heimdall-old-B.svg`/`.png`: the brief's Keyring Halo, with white hair and an iron ring of twelve keys. A first-pass draft that was never polished. The hand reads as a peace sign.
|
||||
|
||||
Bifrost: the operator said "Heimdall guards Bifrost too". Each direction carries
|
||||
a thin prismatic line, kept under 10 percent of the figure, so it never turns
|
||||
into a rainbow costume. On A it runs along the horn's outer arc, on B along the
|
||||
inside of the key's bow, and on C along the inner edge of the gate arch.
|
||||
|
||||
Shared canon read: palette is cobalt `#3466ff` (lining, key colour), navy
|
||||
`#1b2452` (coat), line `#0d1a4d`, gold `#d8a73a` (eyes, trim, keys), skin
|
||||
`#5a3a2a`, hair `#2e211c`. Eyes are sharp almonds with a gold iris, a dark upper
|
||||
band, a bright lower crescent and two highlights. A key-shaped gold earring sits
|
||||
on the near ear. Gold-brown slivers in the hair stand in for the canon's
|
||||
gold-lit strands. A cobalt rim light runs on the side away from the light.
|
||||
|
||||
## A: The Horn Bearer (expression: On watch)
|
||||
|
||||
- The design puts an ivory Gjallarhorn with gold bands over his head as a crescent, from his far shoulder to above the near ear, with a strap across the chest. The face is level and neutral.
|
||||
- Changes after looking: the first horn drew as a shepherd's crook, with a vertical bar and a hook. I rebuilt it as a true crescent whose bell ends above the near ear. I scaled the bust down so the arc reads, clipped the prismatic line and rim light inside the horn, and turned the hair highlights from strokes, which read as stripes, into tapered slivers.
|
||||
- Silhouette: the strongest of the three. At 48 px the crescent alone names him.
|
||||
- Round 2: ivory is the one colour not in the canon. Try the horn in navy and gold so the palette stays canon, and check that the silhouette still carries it. The strap still reads a little like a staff.
|
||||
|
||||
## B: The Great Key (expression: Granted)
|
||||
|
||||
- The design follows the canon's raised-key pose. A gold key taller than his head is held upright beside his face, toward the text box. It has a crowned bow (three spikes) and a diamond ward, and a gloved fist grips it below the bit. He gives a small smile with a gold tooth glinting, the only direction that uses the myth's golden teeth.
|
||||
- Changes after looking: at first the fist covered the bit, so the key read as a sceptre. I extended the shaft so the hand grips below the bit, which now shows clearly above the fist. I also scaled the key up 15 percent because the 48 px silhouette was too thin.
|
||||
- Silhouette: head plus a ringed staff. It reads at 128 px. At 48 px it is the weakest of the three, because the key is still a thin line.
|
||||
- Round 2: make the bit bigger and the bow wider, or tilt the key 20 degrees so it crosses the frame. The fist is a blob, so draw clear knuckles.
|
||||
|
||||
## C: The Gate Warden (expression: Revoked)
|
||||
|
||||
- The design sets a gold gate arch behind him, with a keyhole medallion at the crown, faint circuit tracery and spired navy pillars with cobalt gems on both sides. A gloved palm is raised toward the text box. The brows and lids are pulled down into a hard frown.
|
||||
- Changes after looking: a pale glow band inside the arch read as a second, muddy frame and greyed the silhouette, so I removed it. The brows disappeared into the dark fringe, so the revoked look now comes from slanted lowered lids. I also dropped a stray gold dot from the palm.
|
||||
- Silhouette: an arched doorway with two spires, a figure inside and a raised hand. It is nameable at 48 px, but the gate is the read, not him.
|
||||
- Round 2: the gate is scenery more than a worn hook. Test a version where the arch is smaller and sits as a halo-crown just behind the head, so that the character, not the backdrop, carries the shape. The full-body gate is cramped, so give it its own width.
|
||||
|
||||
## Strongest
|
||||
|
||||
A has the best silhouette and C shows the canon best. A canon-palette horn
|
||||
(round 2 on A) is the likely winner. B's gold-tooth smile should carry into the
|
||||
portrait set's "Granted" line whichever direction wins.
|
||||
|
||||
Sheets are self-contained SVG, built from fragments (one shared head and coat,
|
||||
plus one hook file per direction) by a small assembler in the session scratchpad.
|
||||
The SVGs are the deliverable. Edit them directly in round 2.
|
||||
|
Before Width: | Height: | Size: 194 KiB |
|
|
@ -1,229 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<title>Heimdall (superseded, pre-canon), Direction A: The Horn Bearer</title>
|
||||
<defs>
|
||||
<filter id="sil" x="-5%" y="-5%" width="110%" height="110%">
|
||||
<feFlood flood-color="#000"/>
|
||||
<feComposite in2="SourceAlpha" operator="in"/>
|
||||
</filter>
|
||||
<clipPath id="panelClip"><rect x="20" y="20" width="770" height="760" rx="14"/></clipPath>
|
||||
<linearGradient id="prism" x1="0" y1="1" x2="1" y2="0">
|
||||
<stop offset="0" stop-color="#ff4d6d"/><stop offset=".18" stop-color="#ff4d6d"/>
|
||||
<stop offset=".18" stop-color="#ffb02e"/><stop offset=".34" stop-color="#ffb02e"/>
|
||||
<stop offset=".34" stop-color="#f4e04d"/><stop offset=".5" stop-color="#f4e04d"/>
|
||||
<stop offset=".5" stop-color="#3fd17a"/><stop offset=".66" stop-color="#3fd17a"/>
|
||||
<stop offset=".66" stop-color="#3fc8ff"/><stop offset=".82" stop-color="#3fc8ff"/>
|
||||
<stop offset=".82" stop-color="#9a6bff"/><stop offset="1" stop-color="#9a6bff"/>
|
||||
</linearGradient>
|
||||
|
||||
<!-- ========== HORN (slung behind, his left shoulder up over the head) ========== -->
|
||||
<clipPath id="hornClip"><path d="M245,248 C350,80 360,-170 250,-290 C150,-400 -80,-412 -210,-336 C-262,-306 -300,-262 -320,-212 L-215,-175 C-196,-236 -124,-292 0,-305 C140,-312 240,-232 265,-122 C285,-22 270,120 212,238 Z"/></clipPath>
|
||||
<g id="horn" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M245,248 C350,80 360,-170 250,-290 C150,-400 -80,-412 -210,-336 C-262,-306 -300,-262 -320,-212 L-215,-175 C-196,-236 -124,-292 0,-305 C140,-312 240,-232 265,-122 C285,-22 270,120 212,238 Z" fill="#e9eef8"/>
|
||||
<g clip-path="url(#hornClip)">
|
||||
<path d="M-215,-175 C-196,-236 -124,-292 0,-305 C140,-312 240,-232 265,-122 C285,-22 270,120 212,238" fill="none" stroke="#b8c3da" stroke-width="44"/>
|
||||
<g fill="none">
|
||||
<path d="M210,92 L390,122" stroke="#0d1a4d" stroke-width="24"/><path d="M210,92 L390,122" stroke="#d8a73a" stroke-width="17"/>
|
||||
<path d="M240,-112 L410,-176" stroke="#0d1a4d" stroke-width="24"/><path d="M240,-112 L410,-176" stroke="#d8a73a" stroke-width="17"/>
|
||||
<path d="M38,-430 L48,-280" stroke="#0d1a4d" stroke-width="26"/><path d="M38,-430 L48,-280" stroke="#d8a73a" stroke-width="19"/>
|
||||
<path d="M-262,-372 L-166,-250" stroke="#0d1a4d" stroke-width="32"/><path d="M-262,-372 L-166,-250" stroke="#d8a73a" stroke-width="25"/>
|
||||
<path d="M318,104 L352,110 M330,-140 L362,-152 M42,-392 L43,-366 M-238,-344 L-222,-324" stroke="#f5d27a" stroke-width="5"/>
|
||||
</g>
|
||||
<path d="M-120,-372 C-20,-396 160,-380 250,-280" fill="none" stroke="#ffffff" stroke-width="9"/>
|
||||
</g>
|
||||
<!-- Bifrost: a thin prismatic line inset along the outer arc -->
|
||||
<path clip-path="url(#hornClip)" d="M318,40 C340,-120 320,-210 238,-292 C150,-380 -70,-392 -196,-322" fill="none" stroke="url(#prism)" stroke-width="7"/>
|
||||
<!-- bell mouth -->
|
||||
<path d="M-320,-212 C-326,-160 -236,-140 -215,-175 C-232,-214 -296,-244 -320,-212 Z" fill="#1d2a6a"/>
|
||||
<path d="M-320,-212 C-326,-160 -236,-140 -215,-175" fill="none" stroke="#d8a73a" stroke-width="9"/>
|
||||
<path d="M245,248 C350,80 360,-170 250,-290 C150,-400 -80,-412 -210,-336 C-262,-306 -300,-262 -320,-212 L-215,-175 C-196,-236 -124,-292 0,-305 C140,-312 240,-232 265,-122 C285,-22 270,120 212,238 Z" fill="none" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path clip-path="url(#hornClip)" d="M352,-20 C362,-150 330,-240 268,-298" fill="none" stroke="#3466ff" stroke-width="12"/>
|
||||
</g>
|
||||
|
||||
<!-- ========== HEAD ========== -->
|
||||
<clipPath id="eyeNearClip"><path d="M-112,52 C-92,30 -45,24 -4,38 C-8,78 -25,100 -55,102 C-85,102 -104,86 -112,52 Z"/></clipPath>
|
||||
<clipPath id="eyeFarClip"><path d="M64,42 C84,28 112,30 132,46 C130,80 118,100 98,101 C78,101 66,84 64,42 Z"/></clipPath>
|
||||
<clipPath id="irisNear"><ellipse cx="-52" cy="68" rx="31" ry="38"/></clipPath>
|
||||
<clipPath id="irisFar"><ellipse cx="100" cy="69" rx="22" ry="36"/></clipPath>
|
||||
<clipPath id="faceClip"><path d="M-150,-10 C-152,60 -132,115 -84,150 C-44,176 30,192 66,186 C104,176 142,132 156,72 C163,40 166,10 160,-20 Z"/></clipPath>
|
||||
|
||||
<g id="head" stroke-linejoin="round" stroke-linecap="round">
|
||||
<!-- back hair mass: short spikes, violet-black -->
|
||||
<path id="hairBack" d="M-150,100 Q-178,78 -214,66 Q-188,44 -184,22 Q-222,4 -250,-34 Q-206,-42 -194,-62 Q-228,-110 -232,-152 Q-190,-138 -164,-142 Q-168,-194 -142,-244 Q-112,-204 -82,-198 Q-62,-244 -18,-274 Q-8,-224 22,-208 Q64,-244 124,-250 Q98,-208 112,-188 Q162,-204 210,-190 Q174,-162 178,-136 Q218,-122 244,-90 Q198,-86 188,-60 Q208,-38 216,-2 Q186,-12 166,4 L170,60 L-150,100 Z" fill="#2b1f3d" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<!-- hair shadow inside the mass behind the face -->
|
||||
<path d="M-150,100 Q-178,78 -214,66 Q-188,44 -184,22 Q-170,40 -150,40 Z" fill="#1b1329"/>
|
||||
<!-- crown highlight band -->
|
||||
<path d="M-150,-120 Q-80,-178 10,-176 Q90,-174 150,-128 Q90,-150 60,-140 L70,-160 L30,-144 Q-30,-160 -80,-140 L-70,-160 L-110,-130 Z" fill="#4a3a68"/>
|
||||
|
||||
<!-- ear (near side) -->
|
||||
<path d="M-146,32 C-184,22 -192,92 -146,102 Z" fill="#5a3a2a" stroke="#0d1a4d" stroke-width="4.5"/>
|
||||
<path d="M-152,48 C-172,48 -172,80 -152,86" fill="none" stroke="#432a1e" stroke-width="3"/>
|
||||
<!-- gold ear cuff -->
|
||||
<path d="M-178,58 L-186,66" stroke="#d8a73a" stroke-width="7"/>
|
||||
|
||||
<!-- face -->
|
||||
<path d="M-150,-10 C-152,60 -132,115 -84,150 C-44,176 30,192 66,186 C104,176 142,132 156,72 C163,40 166,10 160,-20 Z" fill="#5a3a2a"/>
|
||||
<g clip-path="url(#faceClip)">
|
||||
<!-- shadow cast by the bangs, and the far-side cheek shadow -->
|
||||
<path d="M-160,-20 L170,-20 L170,40 Q150,40 140,30 Q120,22 100,30 Q70,18 40,40 Q10,22 -30,22 Q-70,10 -110,40 Q-130,20 -160,30 Z" fill="#432a1e"/>
|
||||
<path d="M150,20 C150,90 120,160 66,190 L180,200 L180,20 Z" fill="#432a1e"/>
|
||||
<!-- cheek highlight -->
|
||||
<ellipse cx="-80" cy="118" rx="22" ry="10" fill="#74503c"/>
|
||||
</g>
|
||||
<path d="M-150,-10 C-152,60 -132,115 -84,150 C-44,176 30,192 66,186 C104,176 142,132 156,72 C163,40 166,10 160,-20" fill="none" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M154,60 C142,128 108,172 70,184" fill="none" stroke="#3466ff" stroke-width="3"/>
|
||||
|
||||
<!-- near eye: sharp almond, calm half-lid -->
|
||||
<path d="M-112,52 C-92,30 -45,24 -4,38 C-8,78 -25,100 -55,102 C-85,102 -104,86 -112,52 Z" fill="#f4f6ff"/>
|
||||
<g clip-path="url(#eyeNearClip)">
|
||||
<path d="M-120,30 L0,30 L0,52 Q-60,40 -120,56 Z" fill="#c9d0e8"/>
|
||||
<ellipse cx="-52" cy="68" rx="31" ry="38" fill="#d8a73a"/>
|
||||
<g clip-path="url(#irisNear)">
|
||||
<ellipse cx="-52" cy="40" rx="40" ry="26" fill="#8a5a12"/>
|
||||
<ellipse cx="-52" cy="100" rx="24" ry="12" fill="#f5d27a"/>
|
||||
</g>
|
||||
<ellipse cx="-50" cy="70" rx="11" ry="19" fill="#24130a"/>
|
||||
<ellipse cx="-52" cy="68" rx="31" ry="38" fill="none" stroke="#5a3a10" stroke-width="2.5"/>
|
||||
<circle cx="-64" cy="54" r="9" fill="#ffffff"/>
|
||||
<circle cx="-37" cy="86" r="4.5" fill="#ffffff"/>
|
||||
</g>
|
||||
<path d="M-124,48 L-134,38 C-104,16 -46,10 -2,30 L3,40 C-42,24 -94,30 -112,58 Z" fill="#0d1a4d"/>
|
||||
<path d="M-96,96 C-80,103 -62,104 -46,102" fill="none" stroke="#0d1a4d" stroke-width="3"/>
|
||||
|
||||
<!-- far eye -->
|
||||
<path d="M64,42 C84,28 112,30 132,46 C130,80 118,100 98,101 C78,101 66,84 64,42 Z" fill="#f4f6ff"/>
|
||||
<g clip-path="url(#eyeFarClip)">
|
||||
<path d="M60,30 L140,30 L140,52 Q100,40 60,54 Z" fill="#c9d0e8"/>
|
||||
<ellipse cx="100" cy="69" rx="22" ry="36" fill="#d8a73a"/>
|
||||
<g clip-path="url(#irisFar)">
|
||||
<ellipse cx="100" cy="42" rx="30" ry="25" fill="#8a5a12"/>
|
||||
<ellipse cx="100" cy="100" rx="17" ry="11" fill="#f5d27a"/>
|
||||
</g>
|
||||
<ellipse cx="102" cy="71" rx="8" ry="17" fill="#24130a"/>
|
||||
<ellipse cx="100" cy="69" rx="22" ry="36" fill="none" stroke="#5a3a10" stroke-width="2.5"/>
|
||||
<circle cx="92" cy="56" r="7" fill="#ffffff"/>
|
||||
<circle cx="109" cy="85" r="3.5" fill="#ffffff"/>
|
||||
</g>
|
||||
<path d="M58,44 C80,20 118,22 142,40 L144,34 L136,50 C114,34 84,34 64,50 Z" fill="#0d1a4d"/>
|
||||
<path d="M78,96 C90,101 104,101 114,97" fill="none" stroke="#0d1a4d" stroke-width="2.5"/>
|
||||
|
||||
<!-- front bangs: spiky locks over the forehead -->
|
||||
<path d="M166,4 Q174,30 160,50 Q144,14 112,10 Q108,22 96,26 Q82,4 56,2 Q50,26 30,44 Q22,8 -8,0 Q-22,16 -42,24 Q-60,-4 -86,-4 Q-104,16 -126,38 Q-126,6 -140,-2 Q-152,30 -152,64 Q-170,-60 -60,-120 Q60,-150 166,4 Z" fill="#2b1f3d"/>
|
||||
<path d="M166,4 Q174,30 160,50 Q144,14 112,10 Q108,22 96,26 Q82,4 56,2 Q50,26 30,44 Q22,8 -8,0 Q-22,16 -42,24 Q-60,-4 -86,-4 Q-104,16 -126,38 Q-126,6 -140,-2 Q-152,30 -152,64" fill="none" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<path d="M-100,-60 Q-40,-96 30,-90 Q-20,-80 -60,-52 Z M60,-80 Q110,-70 140,-30 Q100,-56 70,-60 Z" fill="#4a3a68"/>
|
||||
<path d="M150,-40 Q166,-10 166,4" fill="none" stroke="#3466ff" stroke-width="3"/>
|
||||
|
||||
<!-- brows, drawn over the bangs -->
|
||||
<path d="M-104,8 C-84,-2 -54,-4 -28,4" fill="none" stroke="#0d1a4d" stroke-width="3.5"/>
|
||||
<path d="M70,8 C92,0 116,2 134,12" fill="none" stroke="#0d1a4d" stroke-width="4"/>
|
||||
|
||||
<!-- nose and mouth: a slight smile with the gold tooth -->
|
||||
<path d="M114,96 C119,102 118,106 110,108" fill="none" stroke="#2a1810" stroke-width="3"/>
|
||||
<path d="M46,138 C60,150 86,152 104,134 C98,154 64,160 46,138 Z" fill="#2a1018"/>
|
||||
<path d="M66,146 L86,145 L84,156 L69,156 Z" fill="#d8a73a" stroke="#0d1a4d" stroke-width="1.5"/>
|
||||
<path d="M46,138 C60,150 86,152 104,134" fill="none" stroke="#0d1a4d" stroke-width="3.2"/>
|
||||
<path d="M98,150 L101,141 L104,150 L113,153 L104,156 L101,165 L98,156 L89,153 Z" fill="#f5d27a"/>
|
||||
</g>
|
||||
|
||||
<!-- ========== SHOULDERS: cobalt cloak, fur ruff, gold clasp ========== -->
|
||||
<g id="neck">
|
||||
<path d="M18,160 L22,250 L104,250 L100,160 Z" fill="#432a1e" stroke="#0d1a4d" stroke-width="4"/>
|
||||
</g>
|
||||
<g id="ruff" stroke-linejoin="round">
|
||||
<path d="M-178,268 Q-190,240 -160,228 Q-150,200 -116,206 Q-100,182 -66,196 Q-44,180 -20,200 Q4,214 30,212 Q60,216 86,206 Q116,190 138,206 Q170,196 184,216 Q216,212 222,240 Q248,252 238,282 Q226,312 196,306 Q178,334 146,320 Q120,344 90,326 Q64,346 38,328 Q8,346 -18,326 Q-46,342 -70,322 Q-100,336 -122,314 Q-156,322 -166,296 Q-196,290 -178,268 Z" fill="#e9eef8" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M-150,300 Q-120,312 -100,300 M-60,316 Q-30,326 -8,314 M44,322 Q76,332 96,318 M150,314 Q180,312 200,296" fill="none" stroke="#b8c3da" stroke-width="6"/>
|
||||
<path d="M-120,226 Q-90,214 -66,222 M120,222 Q150,212 176,230" fill="none" stroke="#ffffff" stroke-width="5"/>
|
||||
</g>
|
||||
<g id="clasp">
|
||||
<circle cx="44" cy="330" r="24" fill="#d8a73a" stroke="#0d1a4d" stroke-width="4.5"/>
|
||||
<path d="M30,338 A16,16 0 0 1 58,322 A12,12 0 0 0 30,338 Z" fill="#a5761c"/>
|
||||
<circle cx="36" cy="322" r="5" fill="#f5d27a"/>
|
||||
</g>
|
||||
|
||||
<g id="bust" stroke-linejoin="round" stroke-linecap="round">
|
||||
<use xlink:href="#horn"/>
|
||||
<!-- cloak body -->
|
||||
<path d="M-215,420 C-222,320 -178,262 -80,250 L180,250 C262,262 296,330 300,420 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M150,252 C230,270 262,330 266,420 L300,420 C296,330 262,262 180,250 Z" fill="#2443b8"/>
|
||||
<!-- horn strap across the chest -->
|
||||
<path d="M232,268 L-120,420" stroke="#0d1a4d" stroke-width="30"/>
|
||||
<path d="M232,268 L-120,420" stroke="#1d2a6a" stroke-width="22"/>
|
||||
<path d="M232,268 L-120,420" stroke="#d8a73a" stroke-width="3" stroke-dasharray="10 10"/>
|
||||
<use xlink:href="#neck"/>
|
||||
<use xlink:href="#head"/>
|
||||
<use xlink:href="#ruff"/>
|
||||
<use xlink:href="#clasp"/>
|
||||
<path d="M-200,350 C-196,300 -176,280 -150,268" fill="none" stroke="#7c9bff" stroke-width="5"/>
|
||||
</g>
|
||||
|
||||
<g id="bustPlaced"><g transform="translate(400,398) scale(0.96)"><use xlink:href="#bust"/></g></g>
|
||||
|
||||
<!-- ========== FULL BODY, 2.5 heads ========== -->
|
||||
<g id="fullbody" stroke-linejoin="round" stroke-linecap="round">
|
||||
<use xlink:href="#horn"/>
|
||||
<!-- legs and boots -->
|
||||
<path d="M-40,600 L-48,760 L10,760 L14,600 Z M60,600 L66,760 L124,760 L118,600 Z" fill="#1d2a6a" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M-70,740 Q-72,700 -46,700 L14,700 Q22,740 18,790 L-76,790 Q-90,770 -70,740 Z M52,740 Q50,700 70,700 L128,700 Q150,740 156,790 L50,790 Q42,770 52,740 Z" fill="#e9eef8" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M-76,790 L18,790 M50,790 L156,790" stroke="#d8a73a" stroke-width="8"/>
|
||||
<!-- cloak, A-line to the knee -->
|
||||
<path d="M-120,262 L210,262 C260,400 290,520 300,640 Q180,676 50,664 Q-90,676 -190,640 C-178,520 -160,400 -120,262 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M150,262 C200,400 236,520 250,650 L300,640 C290,520 260,400 210,262 Z" fill="#2443b8"/>
|
||||
<path d="M44,330 L44,664" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<!-- arms -->
|
||||
<path d="M-120,300 Q-176,390 -176,480 Q-150,500 -124,480 Q-118,400 -90,330 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<circle cx="-150" cy="500" r="28" fill="#5a3a2a" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M190,300 Q250,380 252,470 Q228,492 202,474 Q196,400 166,330 Z" fill="#2443b8" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<circle cx="228" cy="492" r="26" fill="#5a3a2a" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<use xlink:href="#neck"/>
|
||||
<use xlink:href="#head"/>
|
||||
<use xlink:href="#ruff"/>
|
||||
<use xlink:href="#clasp"/>
|
||||
</g>
|
||||
</defs>
|
||||
|
||||
<!-- sheet -->
|
||||
<rect width="1200" height="800" fill="#f3f1ec"/>
|
||||
|
||||
<!-- bust panel -->
|
||||
<g clip-path="url(#panelClip)">
|
||||
<rect x="20" y="20" width="770" height="760" fill="#e6ebf5"/>
|
||||
<path d="M330,20 L640,20 L470,780 L160,780 Z" fill="#d3ddf6"/>
|
||||
<path d="M660,20 L700,20 L530,780 L490,780 Z" fill="#d3ddf6"/>
|
||||
<use xlink:href="#bustPlaced"/>
|
||||
</g>
|
||||
<rect x="20" y="20" width="770" height="760" rx="14" fill="none" stroke="#0d1a4d" stroke-width="3"/>
|
||||
|
||||
<!-- right column -->
|
||||
<g font-family="Segoe UI, Arial, Helvetica, sans-serif" fill="#0d1a4d">
|
||||
<text x="815" y="58" font-size="30" font-weight="700" letter-spacing="3">HEIMDALL</text>
|
||||
<text x="815" y="86" font-size="17" font-weight="600" letter-spacing="1.5">A · THE HORN BEARER</text>
|
||||
</g>
|
||||
|
||||
<g transform="translate(920,250) scale(0.33)"><use xlink:href="#fullbody"/></g>
|
||||
<text x="930" y="530" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#55607a" text-anchor="middle">full body, 2.5 heads</text>
|
||||
|
||||
<!-- silhouette check -->
|
||||
<rect x="1046" y="110" width="140" height="138" fill="#ffffff" stroke="#c6ccda"/>
|
||||
<svg x="1046" y="110" width="140" height="138" viewBox="20 20 770 760"><use xlink:href="#bustPlaced" filter="url(#sil)"/></svg>
|
||||
<rect x="1046" y="262" width="48" height="48" fill="#ffffff" stroke="#c6ccda"/>
|
||||
<svg x="1046" y="262" width="48" height="48" viewBox="20 20 770 760" preserveAspectRatio="xMidYMid meet"><use xlink:href="#bustPlaced" filter="url(#sil)"/></svg>
|
||||
<text x="1102" y="282" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#55607a">silhouette</text>
|
||||
<text x="1102" y="298" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#55607a">48 px</text>
|
||||
|
||||
<!-- hook and palette -->
|
||||
<g font-family="Segoe UI, Arial, Helvetica, sans-serif">
|
||||
<text x="815" y="575" font-size="13" font-weight="700" fill="#3466ff" letter-spacing="2">HOOK</text>
|
||||
<text x="815" y="597" font-size="15" fill="#0d1a4d">A huge ivory war horn arcs over his head</text>
|
||||
<text x="815" y="617" font-size="15" fill="#0d1a4d">like a crescent moon, a Bifrost line on its rim.</text>
|
||||
<text x="815" y="655" font-size="13" font-weight="700" fill="#3466ff" letter-spacing="2">PALETTE</text>
|
||||
<g font-size="11" fill="#0d1a4d">
|
||||
<rect x="815" y="666" width="52" height="40" fill="#3466ff" stroke="#0d1a4d"/><text x="815" y="722">#3466ff</text><text x="815" y="736">cloak</text>
|
||||
<rect x="878" y="666" width="52" height="40" fill="#0d1a4d" stroke="#0d1a4d"/><text x="878" y="722">#0d1a4d</text><text x="878" y="736">line</text>
|
||||
<rect x="941" y="666" width="52" height="40" fill="#e9eef8" stroke="#0d1a4d"/><text x="941" y="722">#e9eef8</text><text x="941" y="736">horn</text>
|
||||
<rect x="1004" y="666" width="52" height="40" fill="#d8a73a" stroke="#0d1a4d"/><text x="1004" y="722">#d8a73a</text><text x="1004" y="736">gold</text>
|
||||
<rect x="1067" y="666" width="52" height="40" fill="#5a3a2a" stroke="#0d1a4d"/><text x="1067" y="722">#5a3a2a</text><text x="1067" y="736">skin</text>
|
||||
<rect x="1130" y="666" width="52" height="40" fill="#2b1f3d" stroke="#0d1a4d"/><text x="1130" y="722">#2b1f3d</text><text x="1130" y="736">hair</text>
|
||||
<rect x="815" y="748" width="367" height="7" fill="url(#prism)"/>
|
||||
<text x="815" y="772">Bifrost accent: a thin prismatic line, under 10% of the figure</text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 209 KiB |
|
|
@ -1,261 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<title>Heimdall (superseded, pre-canon draft), Direction B: The Keyring Halo</title>
|
||||
<defs>
|
||||
<filter id="sil" x="-5%" y="-5%" width="110%" height="110%">
|
||||
<feFlood flood-color="#000"/>
|
||||
<feComposite in2="SourceAlpha" operator="in"/>
|
||||
</filter>
|
||||
<clipPath id="panelClip"><rect x="20" y="20" width="770" height="760" rx="14"/></clipPath>
|
||||
<linearGradient id="prism" x1="0" y1="0" x2="1" y2="0">
|
||||
<stop offset="0" stop-color="#ff4d6d"/><stop offset=".18" stop-color="#ff4d6d"/>
|
||||
<stop offset=".18" stop-color="#ffb02e"/><stop offset=".34" stop-color="#ffb02e"/>
|
||||
<stop offset=".34" stop-color="#f4e04d"/><stop offset=".5" stop-color="#f4e04d"/>
|
||||
<stop offset=".5" stop-color="#3fd17a"/><stop offset=".66" stop-color="#3fd17a"/>
|
||||
<stop offset=".66" stop-color="#3fc8ff"/><stop offset=".82" stop-color="#3fc8ff"/>
|
||||
<stop offset=".82" stop-color="#9a6bff"/><stop offset="1" stop-color="#9a6bff"/>
|
||||
</linearGradient>
|
||||
|
||||
<!-- ========== KEYS: each a different identity; bow on the ring, bit pointing out ========== -->
|
||||
<g id="kRound" stroke="#0d1a4d" stroke-width="4" stroke-linejoin="round">
|
||||
<path d="M-6,-18 L-6,-112 L0,-126 L6,-112 L6,-18 Z" fill="#d8a73a"/>
|
||||
<path d="M6,-104 L26,-104 L26,-94 L18,-94 L18,-86 L26,-86 L26,-76 L6,-76 Z" fill="#d8a73a"/>
|
||||
<circle cx="0" cy="0" r="22" fill="#d8a73a"/><circle cx="0" cy="0" r="9" fill="none"/>
|
||||
<path d="M-2,-30 L-2,-100" stroke="#f5d27a" stroke-width="3"/>
|
||||
</g>
|
||||
<g id="kDiamond" stroke="#0d1a4d" stroke-width="4" stroke-linejoin="round">
|
||||
<path d="M-6,-20 L-6,-96 L0,-108 L6,-96 L6,-20 Z" fill="#d8a73a"/>
|
||||
<path d="M6,-90 L22,-96 L22,-84 L14,-80 L22,-74 L22,-62 L6,-66 Z" fill="#d8a73a"/>
|
||||
<path d="M0,-28 L24,0 L0,28 L-24,0 Z" fill="#d8a73a"/><path d="M0,-10 L9,0 L0,10 L-9,0 Z" fill="none"/>
|
||||
<path d="M-2,-34 L-2,-90" stroke="#f5d27a" stroke-width="3"/>
|
||||
</g>
|
||||
<g id="kTrefoil" stroke="#0d1a4d" stroke-width="4" stroke-linejoin="round">
|
||||
<path d="M-6,-20 L-6,-118 L0,-132 L6,-118 L6,-20 Z" fill="#d8a73a"/>
|
||||
<path d="M-6,-110 L-24,-110 L-24,-98 L-14,-98 L-14,-90 L-24,-90 L-24,-80 L-6,-80 Z" fill="#d8a73a"/>
|
||||
<path d="M0,-24 C-16,-40 -36,-20 -20,-6 C-38,4 -26,30 -6,20 C0,36 0,36 6,20 C26,30 38,4 20,-6 C36,-20 16,-40 0,-24 Z" fill="#d8a73a"/><circle cx="0" cy="0" r="8" fill="none"/>
|
||||
<path d="M-2,-34 L-2,-110" stroke="#f5d27a" stroke-width="3"/>
|
||||
</g>
|
||||
<g id="kSquare" stroke="#0d1a4d" stroke-width="4" stroke-linejoin="round">
|
||||
<path d="M-6,-20 L-6,-100 L0,-112 L6,-100 L6,-20 Z" fill="#d8a73a"/>
|
||||
<path d="M6,-96 L28,-96 L28,-88 L18,-88 L18,-80 L28,-80 L28,-66 L6,-66 Z" fill="#d8a73a"/>
|
||||
<rect x="-20" y="-20" width="40" height="40" rx="6" fill="#d8a73a"/><rect x="-8" y="-8" width="16" height="16" fill="none"/>
|
||||
<path d="M-2,-28 L-2,-94" stroke="#f5d27a" stroke-width="3"/>
|
||||
</g>
|
||||
|
||||
<!-- ========== HALO: iron key ring behind the head ========== -->
|
||||
<g id="halo">
|
||||
<circle cx="10" cy="-30" r="270" fill="none" stroke="#0d1a4d" stroke-width="32"/>
|
||||
<circle cx="10" cy="-30" r="270" fill="none" stroke="#9aa6b8" stroke-width="22"/>
|
||||
<path d="M-240,-140 A270,270 0 0 1 -60,-290" fill="none" stroke="#dfe4ee" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M268,30 A270,270 0 0 1 120,215" fill="none" stroke="#3466ff" stroke-width="5" stroke-linecap="round"/>
|
||||
<use xlink:href="#kRound" transform="translate(10,-30) rotate(0) translate(0,-270)"/>
|
||||
<use xlink:href="#kDiamond" transform="translate(10,-30) rotate(30) translate(0,-270)"/>
|
||||
<use xlink:href="#kTrefoil" transform="translate(10,-30) rotate(60) translate(0,-270)"/>
|
||||
<use xlink:href="#kSquare" transform="translate(10,-30) rotate(90) translate(0,-270)"/>
|
||||
<use xlink:href="#kRound" transform="translate(10,-30) rotate(120) translate(0,-270)"/>
|
||||
<use xlink:href="#kTrefoil" transform="translate(10,-30) rotate(240) translate(0,-270)"/>
|
||||
<use xlink:href="#kSquare" transform="translate(10,-30) rotate(270) translate(0,-270)"/>
|
||||
<use xlink:href="#kDiamond" transform="translate(10,-30) rotate(300) translate(0,-270)"/>
|
||||
<use xlink:href="#kRound" transform="translate(10,-30) rotate(330) translate(0,-270)"/>
|
||||
<!-- Bifrost: the ring's upper arc refracts into a thin bridge of light -->
|
||||
<path d="M-218,-178 A270,270 0 0 1 238,-178" fill="none" stroke="url(#prism)" stroke-width="6" transform="translate(0,22) scale(1,0.98)"/>
|
||||
</g>
|
||||
|
||||
<!-- ========== HEAD ========== -->
|
||||
<clipPath id="eyeNearClip"><path d="M-110,46 C-96,18 -40,12 -4,32 C-4,80 -22,106 -56,106 C-88,106 -108,86 -110,46 Z"/></clipPath>
|
||||
<clipPath id="eyeFarClip"><path d="M64,38 C82,22 114,24 134,42 C134,80 120,102 98,103 C76,103 64,84 64,38 Z"/></clipPath>
|
||||
<clipPath id="irisNear"><ellipse cx="-54" cy="66" rx="33" ry="42"/></clipPath>
|
||||
<clipPath id="irisFar"><ellipse cx="100" cy="68" rx="23" ry="38"/></clipPath>
|
||||
<clipPath id="faceClip"><path d="M-150,-10 C-152,60 -132,115 -84,150 C-44,176 30,192 66,186 C104,176 142,132 156,72 C163,40 166,10 160,-20 Z"/></clipPath>
|
||||
|
||||
<g id="head" stroke-linejoin="round" stroke-linecap="round">
|
||||
<!-- back hair: smooth white crown, swept locks flaring back-left -->
|
||||
<path d="M-150,112 Q-192,92 -240,100 Q-204,62 -202,32 Q-252,12 -286,-30 Q-222,-40 -210,-70 Q-254,-120 -266,-172 Q-202,-152 -182,-160 Q-172,-232 -110,-264 C-40,-300 80,-292 140,-252 C200,-212 224,-140 214,-70 Q232,-30 238,12 Q202,0 172,10 L170,60 L-150,112 Z" fill="#f4f6ff" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M-150,112 Q-192,92 -240,100 Q-204,62 -202,32 Q-252,12 -286,-30 Q-222,-40 -210,-70 Q-230,-30 -180,-10 Q-196,40 -160,60 Z" fill="#c3cbe0"/>
|
||||
<path d="M200,-150 C222,-110 220,-80 214,-70 Q232,-30 238,12" fill="none" stroke="#3466ff" stroke-width="4"/>
|
||||
|
||||
<!-- ear -->
|
||||
<path d="M-146,32 C-184,22 -192,92 -146,102 Z" fill="#5a3a2a" stroke="#0d1a4d" stroke-width="4.5"/>
|
||||
<path d="M-152,48 C-172,48 -172,80 -152,86" fill="none" stroke="#432a1e" stroke-width="3"/>
|
||||
|
||||
<!-- face -->
|
||||
<path d="M-150,-10 C-152,60 -132,115 -84,150 C-44,176 30,192 66,186 C104,176 142,132 156,72 C163,40 166,10 160,-20 Z" fill="#5a3a2a"/>
|
||||
<g clip-path="url(#faceClip)">
|
||||
<path d="M-160,-20 L170,-20 L170,36 Q150,40 136,22 Q120,30 104,26 Q70,4 30,40 Q10,10 -30,6 Q-70,10 -90,24 Q-110,4 -160,30 Z" fill="#432a1e"/>
|
||||
<path d="M150,20 C150,90 120,160 66,190 L180,200 L180,20 Z" fill="#432a1e"/>
|
||||
<ellipse cx="-80" cy="120" rx="22" ry="10" fill="#74503c"/>
|
||||
</g>
|
||||
<path d="M-150,-10 C-152,60 -132,115 -84,150 C-44,176 30,192 66,186 C104,176 142,132 156,72 C163,40 166,10 160,-20" fill="none" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M154,60 C142,128 108,172 70,184" fill="none" stroke="#3466ff" stroke-width="3"/>
|
||||
|
||||
<!-- near eye: round, composed -->
|
||||
<path d="M-110,46 C-96,18 -40,12 -4,32 C-4,80 -22,106 -56,106 C-88,106 -108,86 -110,46 Z" fill="#f4f6ff"/>
|
||||
<g clip-path="url(#eyeNearClip)">
|
||||
<path d="M-120,20 L0,20 L0,46 Q-60,30 -120,50 Z" fill="#c3cbe0"/>
|
||||
<ellipse cx="-54" cy="66" rx="33" ry="42" fill="#d8a73a"/>
|
||||
<g clip-path="url(#irisNear)">
|
||||
<ellipse cx="-54" cy="36" rx="42" ry="28" fill="#8a5a12"/>
|
||||
<ellipse cx="-54" cy="102" rx="26" ry="13" fill="#f5d27a"/>
|
||||
</g>
|
||||
<ellipse cx="-52" cy="68" rx="12" ry="20" fill="#24130a"/>
|
||||
<ellipse cx="-54" cy="66" rx="33" ry="42" fill="none" stroke="#5a3a10" stroke-width="2.5"/>
|
||||
<circle cx="-67" cy="50" r="10" fill="#ffffff"/>
|
||||
<circle cx="-38" cy="88" r="5" fill="#ffffff"/>
|
||||
</g>
|
||||
<path d="M-118,46 L-128,42 C-104,6 -42,0 -2,24 L2,36 C-40,16 -96,22 -110,56 Z" fill="#0d1a4d"/>
|
||||
<path d="M-94,100 C-80,107 -62,108 -46,106" fill="none" stroke="#0d1a4d" stroke-width="3"/>
|
||||
|
||||
<!-- far eye -->
|
||||
<path d="M64,38 C82,22 114,24 134,42 C134,80 120,102 98,103 C76,103 64,84 64,38 Z" fill="#f4f6ff"/>
|
||||
<g clip-path="url(#eyeFarClip)">
|
||||
<path d="M60,20 L140,20 L140,46 Q100,32 60,50 Z" fill="#c3cbe0"/>
|
||||
<ellipse cx="100" cy="68" rx="23" ry="38" fill="#d8a73a"/>
|
||||
<g clip-path="url(#irisFar)">
|
||||
<ellipse cx="100" cy="40" rx="30" ry="25" fill="#8a5a12"/>
|
||||
<ellipse cx="100" cy="100" rx="18" ry="12" fill="#f5d27a"/>
|
||||
</g>
|
||||
<ellipse cx="102" cy="70" rx="8" ry="18" fill="#24130a"/>
|
||||
<ellipse cx="100" cy="68" rx="23" ry="38" fill="none" stroke="#5a3a10" stroke-width="2.5"/>
|
||||
<circle cx="91" cy="54" r="7.5" fill="#ffffff"/>
|
||||
<circle cx="110" cy="84" r="3.5" fill="#ffffff"/>
|
||||
</g>
|
||||
<path d="M58,40 C80,14 120,16 142,38 L138,46 C114,28 84,30 64,48 Z" fill="#0d1a4d"/>
|
||||
<path d="M78,98 C90,103 104,103 114,99" fill="none" stroke="#0d1a4d" stroke-width="2.5"/>
|
||||
|
||||
<!-- brows -->
|
||||
<path d="M-100,-4 C-80,-14 -50,-14 -26,-6" fill="none" stroke="#0d1a4d" stroke-width="3.5"/>
|
||||
<path d="M74,0 C94,-8 116,-6 132,4" fill="none" stroke="#0d1a4d" stroke-width="3.5"/>
|
||||
|
||||
<!-- front fringe: one swept sheet ending in a long forelock beside the far eye -->
|
||||
<path d="M-152,70 Q-160,10 -140,-20 C-120,-120 40,-150 150,-90 C192,-60 204,0 178,64 Q164,22 142,6 Q134,22 118,30 Q104,0 70,-8 Q42,4 18,30 Q10,-2 -30,-12 Q-58,-2 -82,12 Q-98,-8 -126,-4 Q-142,22 -152,70 Z" fill="#f4f6ff"/>
|
||||
<path d="M-30,-12 Q10,-2 18,30 Q42,4 70,-8 Q104,0 118,30 Q134,22 142,6 Q164,22 178,64 Q170,20 150,-6 Q120,-30 70,-30 Q20,-30 -30,-12 Z" fill="#c3cbe0"/>
|
||||
<path d="M178,64 Q164,22 142,6 Q134,22 118,30 Q104,0 70,-8 Q42,4 18,30 Q10,-2 -30,-12 Q-58,-2 -82,12 Q-98,-8 -126,-4 Q-142,22 -152,70 M150,-90 C192,-60 204,0 178,64" fill="none" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<path d="M-110,-90 Q-40,-128 50,-118" fill="none" stroke="#c3cbe0" stroke-width="5"/>
|
||||
<path d="M170,-60 C196,-20 194,30 180,60" fill="none" stroke="#3466ff" stroke-width="3"/>
|
||||
|
||||
<!-- nose and mouth: a closed, composed smile -->
|
||||
<path d="M114,96 C119,102 118,106 110,108" fill="none" stroke="#2a1810" stroke-width="3"/>
|
||||
<path d="M56,142 C66,149 82,149 94,140" fill="none" stroke="#0d1a4d" stroke-width="3.2"/>
|
||||
</g>
|
||||
|
||||
<!-- ========== SHOULDERS: cobalt long coat, tall collar, silver buckles ========== -->
|
||||
<g id="collarBack" stroke-linejoin="round">
|
||||
<path d="M-130,268 C-160,220 -160,170 -130,128 L-60,200 L150,200 L196,132 C226,180 226,226 204,268 Z" fill="#2443b8" stroke="#0d1a4d" stroke-width="6"/>
|
||||
</g>
|
||||
<g id="neck">
|
||||
<path d="M18,160 L22,250 L104,250 L100,160 Z" fill="#432a1e" stroke="#0d1a4d" stroke-width="4"/>
|
||||
</g>
|
||||
<g id="coatFront" stroke-linejoin="round" stroke-linecap="round">
|
||||
<!-- shirt V -->
|
||||
<path d="M8,236 L62,330 L116,236 Z" fill="#f4f6ff" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<!-- lapels, tall collar front edges -->
|
||||
<path d="M-130,268 C-150,230 -146,190 -124,150 C-90,190 -30,214 8,236 L62,330 L-20,420 L-215,420 C-220,330 -190,282 -130,268 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<path d="M204,268 C220,230 218,190 198,150 C170,190 150,214 116,236 L62,330 L140,420 L300,420 C296,330 270,282 204,268 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<path d="M198,150 C170,190 150,214 116,236 L62,330 L90,360 C120,300 170,250 210,210 Z" fill="#2443b8"/>
|
||||
<path d="M204,268 C220,230 218,190 198,150 C170,190 150,214 116,236 L62,330 L140,420 L300,420 C296,330 270,282 204,268" fill="none" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<!-- silver buckle straps -->
|
||||
<path d="M-40,300 L40,300 M84,300 L170,300" stroke="#0d1a4d" stroke-width="20"/>
|
||||
<path d="M-40,300 L40,300 M84,300 L170,300" stroke="#1d2a6a" stroke-width="13"/>
|
||||
<rect x="22" y="286" width="26" height="28" rx="4" fill="#9aa6b8" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<rect x="76" y="286" width="26" height="28" rx="4" fill="#9aa6b8" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<path d="M-200,350 C-196,300 -176,284 -150,276" fill="none" stroke="#7c9bff" stroke-width="5"/>
|
||||
</g>
|
||||
|
||||
<!-- ========== HAND: one key held between two fingers, raised toward the text box ========== -->
|
||||
<g id="handKey" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M190,420 L176,262 L254,256 L300,420 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<path d="M232,258 L254,256 L300,420 L268,420 Z" fill="#2443b8"/>
|
||||
<!-- the held key, bit up -->
|
||||
<g transform="translate(222,170) rotate(-12)">
|
||||
<path d="M-6,0 L-6,-104 L0,-116 L6,-104 L6,0 Z" fill="#d8a73a" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<path d="M6,-98 L26,-98 L26,-88 L18,-88 L18,-80 L26,-80 L26,-68 L6,-68 Z" fill="#d8a73a" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<path d="M-2,-14 L-2,-92" stroke="#f5d27a" stroke-width="3"/>
|
||||
</g>
|
||||
<!-- hand -->
|
||||
<path d="M184,250 C176,222 182,196 198,188 L198,150 Q206,138 214,150 L216,182 L226,150 Q236,140 242,154 L236,190 C252,204 252,240 238,256 Z" fill="#5a3a2a" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M214,182 L216,206 M236,190 L226,210" fill="none" stroke="#432a1e" stroke-width="3"/>
|
||||
<path d="M190,222 C172,214 170,196 184,190" fill="#5a3a2a" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<path d="M170,256 L262,250 L264,276 L172,282 Z" fill="#f4f6ff" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<rect x="204" y="252" width="20" height="26" rx="3" fill="#9aa6b8" stroke="#0d1a4d" stroke-width="3.5"/>
|
||||
<path d="M270,40 L273,30 L276,40 L286,43 L276,46 L273,56 L270,46 L260,43 Z" fill="#f5d27a" stroke="#0d1a4d" stroke-width="1.5"/>
|
||||
</g>
|
||||
|
||||
<g id="bust" stroke-linejoin="round" stroke-linecap="round">
|
||||
<use xlink:href="#halo"/>
|
||||
<use xlink:href="#collarBack"/>
|
||||
<use xlink:href="#neck"/>
|
||||
<use xlink:href="#head"/>
|
||||
<use xlink:href="#coatFront"/>
|
||||
<use xlink:href="#handKey"/>
|
||||
</g>
|
||||
|
||||
<g id="bustPlaced"><g transform="translate(398,420) scale(0.86)"><use xlink:href="#bust"/></g></g>
|
||||
|
||||
<!-- ========== FULL BODY ========== -->
|
||||
<g id="fullbody" stroke-linejoin="round" stroke-linecap="round">
|
||||
<use xlink:href="#halo"/>
|
||||
<use xlink:href="#collarBack"/>
|
||||
<!-- legs and boots -->
|
||||
<path d="M-30,640 L-36,760 L14,760 L18,640 Z M64,640 L70,760 L120,760 L116,640 Z" fill="#0d1a4d"/>
|
||||
<path d="M-60,742 Q-62,712 -36,712 L16,712 Q22,746 20,790 L-66,790 Q-78,770 -60,742 Z M56,742 Q54,712 72,712 L124,712 Q146,746 152,790 L54,790 Q44,770 56,742 Z" fill="#1d2a6a" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M-66,790 L20,790 M54,790 L152,790" stroke="#9aa6b8" stroke-width="8"/>
|
||||
<!-- long coat -->
|
||||
<path d="M-130,262 L204,262 C246,420 270,560 280,710 Q200,724 110,700 L62,330 L14,700 Q-90,724 -170,710 C-164,560 -160,420 -130,262 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="7"/>
|
||||
<path d="M8,236 L62,330 L116,236 Z" fill="#f4f6ff" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<path d="M170,262 C214,420 236,560 244,712 L280,710 C270,560 246,420 204,262 Z" fill="#2443b8"/>
|
||||
<path d="M62,330 L110,700 Q90,690 62,640 Q34,690 14,700 Z" fill="#1d2a6a" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<path d="M-40,380 L40,380 M84,380 L160,380 M-50,470 L40,470 M84,470 L170,470" stroke="#1d2a6a" stroke-width="14"/>
|
||||
<rect x="22" y="366" width="24" height="28" rx="4" fill="#9aa6b8" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<rect x="22" y="456" width="24" height="28" rx="4" fill="#9aa6b8" stroke="#0d1a4d" stroke-width="4"/>
|
||||
<!-- near arm down -->
|
||||
<path d="M-124,300 Q-180,400 -176,500 Q-150,520 -124,500 Q-116,410 -92,340 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<circle cx="-150" cy="522" r="28" fill="#5a3a2a" stroke="#0d1a4d" stroke-width="5"/>
|
||||
<use xlink:href="#neck"/>
|
||||
<use xlink:href="#head"/>
|
||||
<path d="M-130,268 C-150,230 -146,190 -124,150 C-90,190 -30,214 8,236 L62,330 L-110,330 Z" fill="#3466ff" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<path d="M204,268 C220,230 218,190 198,150 C170,190 150,214 116,236 L62,330 L200,330 Z" fill="#2443b8" stroke="#0d1a4d" stroke-width="6"/>
|
||||
<use xlink:href="#handKey"/>
|
||||
</g>
|
||||
</defs>
|
||||
|
||||
<rect width="1200" height="800" fill="#f3f1ec"/>
|
||||
|
||||
<g clip-path="url(#panelClip)">
|
||||
<rect x="20" y="20" width="770" height="760" fill="#e6ebf5"/>
|
||||
<path d="M330,20 L640,20 L470,780 L160,780 Z" fill="#d3ddf6"/>
|
||||
<path d="M660,20 L700,20 L530,780 L490,780 Z" fill="#d3ddf6"/>
|
||||
<use xlink:href="#bustPlaced"/>
|
||||
</g>
|
||||
<rect x="20" y="20" width="770" height="760" rx="14" fill="none" stroke="#0d1a4d" stroke-width="3"/>
|
||||
|
||||
<g font-family="Segoe UI, Arial, Helvetica, sans-serif" fill="#0d1a4d">
|
||||
<text x="815" y="58" font-size="30" font-weight="700" letter-spacing="3">HEIMDALL</text>
|
||||
<text x="815" y="86" font-size="17" font-weight="600" letter-spacing="1.5">B · THE KEYRING HALO</text>
|
||||
</g>
|
||||
|
||||
<g transform="translate(920,262) scale(0.30)"><use xlink:href="#fullbody"/></g>
|
||||
<text x="930" y="530" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#55607a" text-anchor="middle">full body, 2.5 heads</text>
|
||||
|
||||
<rect x="1046" y="110" width="140" height="138" fill="#ffffff" stroke="#c6ccda"/>
|
||||
<svg x="1046" y="110" width="140" height="138" viewBox="20 20 770 760"><use xlink:href="#bustPlaced" filter="url(#sil)"/></svg>
|
||||
<rect x="1046" y="262" width="48" height="48" fill="#ffffff" stroke="#c6ccda"/>
|
||||
<svg x="1046" y="262" width="48" height="48" viewBox="20 20 770 760"><use xlink:href="#bustPlaced" filter="url(#sil)"/></svg>
|
||||
<text x="1102" y="282" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#55607a">silhouette</text>
|
||||
<text x="1102" y="298" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#55607a">48 px</text>
|
||||
|
||||
<g font-family="Segoe UI, Arial, Helvetica, sans-serif">
|
||||
<text x="815" y="575" font-size="13" font-weight="700" fill="#3466ff" letter-spacing="2">HOOK</text>
|
||||
<text x="815" y="597" font-size="15" fill="#0d1a4d">An iron ring of gold keys bursts behind his head,</text>
|
||||
<text x="815" y="617" font-size="15" fill="#0d1a4d">its top arc refracting into the Bifrost.</text>
|
||||
<text x="815" y="655" font-size="13" font-weight="700" fill="#3466ff" letter-spacing="2">PALETTE</text>
|
||||
<g font-size="11" fill="#0d1a4d">
|
||||
<rect x="815" y="666" width="52" height="40" fill="#3466ff" stroke="#0d1a4d"/><text x="815" y="722">#3466ff</text><text x="815" y="736">coat</text>
|
||||
<rect x="878" y="666" width="52" height="40" fill="#0d1a4d" stroke="#0d1a4d"/><text x="878" y="722">#0d1a4d</text><text x="878" y="736">line</text>
|
||||
<rect x="941" y="666" width="52" height="40" fill="#d8a73a" stroke="#0d1a4d"/><text x="941" y="722">#d8a73a</text><text x="941" y="736">keys</text>
|
||||
<rect x="1004" y="666" width="52" height="40" fill="#9aa6b8" stroke="#0d1a4d"/><text x="1004" y="722">#9aa6b8</text><text x="1004" y="736">iron ring</text>
|
||||
<rect x="1067" y="666" width="52" height="40" fill="#5a3a2a" stroke="#0d1a4d"/><text x="1067" y="722">#5a3a2a</text><text x="1067" y="736">skin</text>
|
||||
<rect x="1130" y="666" width="52" height="40" fill="#f4f6ff" stroke="#0d1a4d"/><text x="1130" y="722">#f4f6ff</text><text x="1130" y="736">hair</text>
|
||||
<rect x="815" y="748" width="367" height="7" fill="url(#prism)"/>
|
||||
<text x="815" y="772">Bifrost accent: a thin prismatic arc on the ring, under 10% of the figure</text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 238 KiB |
|
Before Width: | Height: | Size: 119 KiB |
|
Before Width: | Height: | Size: 223 KiB |
|
|
@ -1,137 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<style>
|
||||
.t { font-family: 'Segoe UI', Arial, sans-serif; fill:#2a1424; }
|
||||
.lab { font-family: 'IBM Plex Mono', Consolas, monospace; font-size:13px; letter-spacing:1.5px; fill:#2a1424; }
|
||||
.sm { font-family: 'Segoe UI', Arial, sans-serif; font-size:11px; fill:#6b5566; }
|
||||
.h { font-family: 'IBM Plex Mono', Consolas, monospace; font-size:20px; font-weight:700; letter-spacing:4px; fill:#2a1424; }
|
||||
</style>
|
||||
<defs>
|
||||
|
||||
<filter id="outl" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feMorphology in="SourceAlpha" operator="dilate" radius="3.5" result="d"/>
|
||||
<feFlood flood-color="#4a0f2e"/><feComposite in2="d" operator="in"/>
|
||||
</filter>
|
||||
<filter id="rim" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feMorphology in="SourceAlpha" operator="dilate" radius="3.5" result="d"/>
|
||||
<feOffset in="d" dx="7" dy="-3" result="o"/>
|
||||
<feFlood flood-color="#ff3fa4"/><feComposite in2="o" operator="in"/>
|
||||
</filter>
|
||||
<filter id="black" x="-5%" y="-5%" width="110%" height="110%">
|
||||
<feMorphology in="SourceAlpha" operator="dilate" radius="3.5" result="d"/>
|
||||
<feFlood flood-color="#000000"/><feComposite in2="d" operator="in"/>
|
||||
</filter>
|
||||
|
||||
<clipPath id="card"><polygon points="70,30 770,30 732,780 32,780"/></clipPath>
|
||||
<g id="head-B"><path d="M 390 70 Q 434.4 80.4 480 80 Q 517.6 104.8 560 120 Q 581.8 158.1 612 190 Q 619.2 231.4 636 270 Q 632 314.8 660 350 Q 631.2 379.2 636 420 Q 636.4 467.9 672 500 Q 641.6 522.3 640 560 Q 638.8 608.6 676 640 Q 637 652.7 620 690 Q 595 659 560 640 Q 475 640 390 640 Q 315 645 240 650 Q 197.5 664.5 170 700 Q 172.6 653.4 140 620 Q 138.2 583.4 110 560 Q 145.8 534.1 148 490 Q 149.4 448.8 120 420 Q 143.6 390 140 352 Q 151.4 312.8 150 272 Q 168.6 235.7 178 196 Q 211.1 165.5 236 128 Q 273.5 111.2 306 86 Q 349 83 390 70 Z" fill="#cdbde6" stroke="#4a0f2e" stroke-width="3"/>
|
||||
<path d="M 176 214 Q 152.6 188.4 118 186 Q 153.8 208.8 164 250 Q 173.6 233.2 176 214 Z" fill="#f7f4ff" stroke="#4a0f2e" stroke-width="3"/>
|
||||
<path d="M 612 236 Q 639.6 212.2 676 214 Q 636.4 243.4 628 292 Q 614.4 265.6 612 236 Z" fill="#f7f4ff" stroke="#4a0f2e" stroke-width="3"/>
|
||||
<path d="M 214 216 C 184 150 168 72 160 14 C 228 34 302 84 334 134 Z" fill="#f7f4ff" stroke="#4a0f2e" stroke-width="3" stroke-linejoin="round"/><path d="M 226 192 C 208 140 196 90 190 54 C 238 78 280 110 304 138 Z" fill="#ff9fd0"/><path d="M 226 192 C 208 140 196 90 190 54 C 238 78 280 110 304 138 Z" fill="none" stroke="#c81e7c" stroke-width="2"/><path d="M 452 118 C 500 78 562 36 606 18 C 606 80 594 150 580 204 Z" fill="#f7f4ff" stroke="#4a0f2e" stroke-width="3" stroke-linejoin="round"/><path d="M 472 124 C 512 96 558 64 590 50 C 590 100 578 150 566 182 Z" fill="#ff9fd0"/><path d="M 472 124 C 512 96 558 64 590 50 C 590 100 578 150 566 182 Z" fill="none" stroke="#c81e7c" stroke-width="2"/><path d="M 236 196 Q 253.6 175.6 262 150 Q 268.8 163.2 270 178 Q 285.2 159.2 292 136 Q 299.4 152.2 300 170 Q 311 161.8 318 150 Q 319.6 173.6 312 196 Q 274 196 236 196 Z" fill="#f7f4ff" stroke="#4a0f2e" stroke-width="2"/><path d="M 492 150 Q 509.2 136.8 520 118 Q 524 132.8 522 148 Q 541 131 552 108 Q 556.2 129 552 150 Q 562 146.8 570 140 Q 569.6 164 560 186 Q 526 168 492 150 Z" fill="#f7f4ff" stroke="#4a0f2e" stroke-width="2"/>
|
||||
<path d="M 402 488 L 400 548 L 456 548 L 460 486 Z" fill="#f2c4a8" stroke="#4a0f2e" stroke-width="3"/><path d="M 401 500 C 416 520 446 518 459 498 L 459 538 C 440 550 416 550 401 542 Z" fill="#e09a88"/><clipPath id="fcB"><path d="M 262 290 C 246 376 262 444 330 490 C 362 510 392 516 420 512 C 470 494 506 456 516 410 C 523 380 528 340 522 290 Z"/></clipPath><path d="M 262 290 C 246 376 262 444 330 490 C 362 510 392 516 420 512 C 470 494 506 456 516 410 C 523 380 528 340 522 290 Z" fill="#f2c4a8"/><g clip-path="url(#fcB)"><path d="M 222 360 C 200 220 296 116 410 114 C 524 112 590 196 560 330 Q 549.5 356 552 384 Q 529.2 348 522 306 Q 506 328.6 502 356 Q 481.4 331 472 300 Q 431.1 338.2 416 392 Q 394.7 347.4 396 298 Q 371 322.7 360 356 Q 340 328.8 332 296 Q 304.5 318 290 350 Q 270.8 326.8 262 298 Q 236.1 330.9 228 372 Q 225 366 222 360 Z" fill="#e09a88" transform="translate(6 16)"/></g><path d="M 262 290 C 246 376 262 444 330 490 C 362 510 392 516 420 512 C 470 494 506 456 516 410 C 523 380 528 340 522 290 Z" fill="none" stroke="#4a0f2e" stroke-width="3"/><ellipse cx="322" cy="462" rx="30" ry="11" fill="#ff6fae" opacity="0.45"/><ellipse cx="494" cy="458" rx="15" ry="10" fill="#ff6fae" opacity="0.45"/><path d="M 306 458 l 8 -8 M 320 460 l 8 -8 M 334 462 l 8 -8" stroke="#e0507f" stroke-width="2" stroke-linecap="round"/><clipPath id="ecBn"><path d="M 299 385.3 C 310 354.1 368 348.9 391 374.9 C 393.8 426.9 374.4 456 345 456 C 313.7 456 296.2 426.9 299 385.3 Z"/></clipPath>
|
||||
<path d="M 299 385.3 C 310 354.1 368 348.9 391 374.9 C 393.8 426.9 374.4 456 345 456 C 313.7 456 296.2 426.9 299 385.3 Z" fill="#ffffff"/>
|
||||
<g clip-path="url(#ecBn)">
|
||||
<path d="M 289 342 L 401 342 L 401 389.4 C 363.4 370.7 326.6 377 289 399.8 Z" fill="#e6d6f2"/>
|
||||
<ellipse cx="351.4" cy="411.3" rx="34" ry="44.7" fill="#0b6f8f"/>
|
||||
<ellipse cx="351.4" cy="414.9" rx="29.3" ry="38.5" fill="#26e0ff"/>
|
||||
<path d="M 324.2 418 C 331 453.8 371.9 453.8 378.7 418 C 365.1 438.1 337.8 438.1 324.2 418 Z" fill="#c4f8ff"/>
|
||||
<path d="M 317.4 400.1 C 334.4 384.4 368.5 383.6 385.5 397.9 L 385.5 366.6 L 317.4 366.6 Z" fill="#0b6f8f"/>
|
||||
<ellipse cx="355.1" cy="413.4" rx="14.3" ry="22.4" fill="#4a0f2e"/>
|
||||
<ellipse cx="351.4" cy="411.3" rx="34" ry="44.7" fill="none" stroke="#4a0f2e" stroke-width="2"/>
|
||||
<ellipse cx="338.5" cy="392.5" rx="12.3" ry="12.5" fill="#ffffff" transform="rotate(-20 338.5 392.5)"/>
|
||||
<circle cx="366.8" cy="431.4" r="4.8" fill="#ffffff"/>
|
||||
</g>
|
||||
<path d="M 299 385.3 C 310 354.1 368 348.9 391 374.9 C 393.8 426.9 374.4 456 345 456 C 313.7 456 296.2 426.9 299 385.3 Z" fill="none" stroke="#4a0f2e" stroke-width="1.5"/>
|
||||
<path d="M 280.6 370.7 C 294.4 349.9 345 337.4 396.5 369.7 C 368 352 310 358.2 297.2 391.5 Z" fill="#4a0f2e"/>
|
||||
<path d="M 300.8 424.8 C 310 453.9 335.8 458.1 349.6 457" fill="none" stroke="#4a0f2e" stroke-width="3" stroke-linecap="round"/><clipPath id="ecBf"><path d="M 438 383.8 C 445.7 353.6 486 348.5 502 373.8 C 503.9 424.2 490.5 452.4 470 452.4 C 448.2 452.4 436.1 424.2 438 383.8 Z"/></clipPath>
|
||||
<path d="M 438 383.8 C 445.7 353.6 486 348.5 502 373.8 C 503.9 424.2 490.5 452.4 470 452.4 C 448.2 452.4 436.1 424.2 438 383.8 Z" fill="#ffffff"/>
|
||||
<g clip-path="url(#ecBf)">
|
||||
<path d="M 428 341.6 L 512 341.6 L 512 387.9 C 482.8 369.7 457.2 375.8 428 398 Z" fill="#e6d6f2"/>
|
||||
<ellipse cx="474.5" cy="409.1" rx="23.7" ry="43.4" fill="#0b6f8f"/>
|
||||
<ellipse cx="474.5" cy="412.5" rx="20.4" ry="37.3" fill="#26e0ff"/>
|
||||
<path d="M 455.5 415.6 C 460.3 450.3 488.7 450.3 493.4 415.6 C 484 435.1 465 435.1 455.5 415.6 Z" fill="#c4f8ff"/>
|
||||
<path d="M 450.8 398.2 C 462.6 383 486.3 382.2 498.2 396 L 498.2 365.7 L 450.8 365.7 Z" fill="#0b6f8f"/>
|
||||
<ellipse cx="477" cy="411.1" rx="9.9" ry="21.7" fill="#4a0f2e"/>
|
||||
<ellipse cx="474.5" cy="409.1" rx="23.7" ry="43.4" fill="none" stroke="#4a0f2e" stroke-width="2"/>
|
||||
<ellipse cx="465.5" cy="390.8" rx="8.5" ry="12.1" fill="#ffffff" transform="rotate(-20 465.5 390.8)"/>
|
||||
<circle cx="485.1" cy="428.6" r="3.3" fill="#ffffff"/>
|
||||
</g>
|
||||
<path d="M 438 383.8 C 445.7 353.6 486 348.5 502 373.8 C 503.9 424.2 490.5 452.4 470 452.4 C 448.2 452.4 436.1 424.2 438 383.8 Z" fill="none" stroke="#4a0f2e" stroke-width="1.5"/>
|
||||
<path d="M 514.8 365.7 C 505.2 347.5 470 335.4 435.4 381.8 C 447.6 355.6 486 351.6 503.3 381.8 Z" fill="#4a0f2e"/>
|
||||
<path d="M 500.7 420.2 C 495.6 450.4 476.4 454.5 466.8 453.4" fill="none" stroke="#4a0f2e" stroke-width="3" stroke-linecap="round"/><path d="M 458 436 l 7 8 l -6 2" fill="none" stroke="#4a0f2e" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/><path d="M 422 466 q 12 14 24 0 q 12 14 24 0" fill="none" stroke="#4a0f2e" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M 440 472 l 3 8 l 3 -7" fill="#ffffff" stroke="#4a0f2e" stroke-width="1.5"/>
|
||||
<path d="M 546 318 C 562 400 586 480 600 580 C 570 520 538 456 518 400 Z" fill="#f7f4ff" stroke="#4a0f2e" stroke-width="3" stroke-linejoin="round"/><path d="M 226 316 C 200 400 186 500 196 640 C 214 600 222 560 230 520 C 240 470 258 420 262 380 C 268 350 262 330 254 316 Z" fill="#f7f4ff" stroke="#4a0f2e" stroke-width="3" stroke-linejoin="round"/><path d="M 238 420 C 236 480 246 560 268 610 C 270 560 268 500 262 440 Z" fill="#f7f4ff" stroke="#4a0f2e" stroke-width="3" stroke-linejoin="round"/><clipPath id="bgB"><path d="M 222 360 C 200 220 296 116 410 114 C 524 112 590 196 560 330 Q 549.5 356 552 384 Q 529.2 348 522 306 Q 506 328.6 502 356 Q 481.4 331 472 300 Q 431.1 338.2 416 392 Q 394.7 347.4 396 298 Q 371 322.7 360 356 Q 340 328.8 332 296 Q 304.5 318 290 350 Q 270.8 326.8 262 298 Q 236.1 330.9 228 372 Q 225 366 222 360 Z"/></clipPath><path d="M 222 360 C 200 220 296 116 410 114 C 524 112 590 196 560 330 Q 549.5 356 552 384 Q 529.2 348 522 306 Q 506 328.6 502 356 Q 481.4 331 472 300 Q 431.1 338.2 416 392 Q 394.7 347.4 396 298 Q 371 322.7 360 356 Q 340 328.8 332 296 Q 304.5 318 290 350 Q 270.8 326.8 262 298 Q 236.1 330.9 228 372 Q 225 366 222 360 Z" fill="#f7f4ff"/><g clip-path="url(#bgB)"><path d="M 486 100 C 470 200 486 270 448 400 L 640 400 L 640 100 Z" fill="#cdbde6"/><path d="M 300 150 C 290 190 286 230 292 262 M 360 128 C 350 180 346 230 356 290 M 452 130 C 452 190 440 240 420 300" fill="none" stroke="#4a0f2e" stroke-width="2" stroke-linecap="round"/></g><path d="M 222 360 C 200 220 296 116 410 114 C 524 112 590 196 560 330 Q 549.5 356 552 384 Q 529.2 348 522 306 Q 506 328.6 502 356 Q 481.4 331 472 300 Q 431.1 338.2 416 392 Q 394.7 347.4 396 298 Q 371 322.7 360 356 Q 340 328.8 332 296 Q 304.5 318 290 350 Q 270.8 326.8 262 298 Q 236.1 330.9 228 372 Q 225 366 222 360 Z" fill="none" stroke="#4a0f2e" stroke-width="3" stroke-linejoin="round"/>
|
||||
<path d="M 230 270 C 300 230 500 220 560 262" fill="none" stroke="#ff3fa4" stroke-width="5"/>
|
||||
<path d="M 300 190 C 220 200 150 260 96 250 C 120 290 70 330 40 330" fill="none" stroke="#4a0f2e" stroke-width="20" stroke-linecap="round"/><path d="M 300 190 C 220 200 150 260 96 250 C 120 290 70 330 40 330" fill="none" stroke="#ff3fa4" stroke-width="12" stroke-linecap="round"/>
|
||||
<path d="M 310 214 C 240 250 190 320 130 330 C 150 370 110 400 84 410" fill="none" stroke="#4a0f2e" stroke-width="20" stroke-linecap="round"/><path d="M 310 214 C 240 250 190 320 130 330 C 150 370 110 400 84 410" fill="none" stroke="#ff3fa4" stroke-width="12" stroke-linecap="round"/>
|
||||
<g transform="translate(70 336) scale(1.2)"><path d="M -7 34 L -10 74 L 10 74 L 7 34 Z" fill="#ff3fa4" stroke="#4a0f2e" stroke-width="2"/><circle r="17" fill="#1b1530" stroke="#4a0f2e" stroke-width="2.5"/><circle r="9" fill="none" stroke="#26e0ff" stroke-width="4"/><circle cy="28" r="12" fill="#ffcf3a" stroke="#4a0f2e" stroke-width="2.5"/><path d="M -6 24 a 6 4 0 0 0 12 0" fill="#fff3b0" stroke="none"/><path d="M 0 30 v 9" stroke="#4a0f2e" stroke-width="2.5"/></g>
|
||||
<g transform="translate(404 120) rotate(-16) scale(1.6 1.8)"><clipPath id="mkb"><path d="M -100 -40 L -92 -112 L -40 -64 C -15 -72 15 -72 40 -64 L 92 -112 L 100 -40 C 104 0 72 40 32 70 C 16 82 -16 82 -32 70 C -72 40 -104 0 -100 -40 Z"/></clipPath><path d="M -100 -40 L -92 -112 L -40 -64 C -15 -72 15 -72 40 -64 L 92 -112 L 100 -40 C 104 0 72 40 32 70 C 16 82 -16 82 -32 70 C -72 40 -104 0 -100 -40 Z" fill="#ffffff"/><g clip-path="url(#mkb)"><path d="M 30 -120 C 60 -40 70 20 20 100 L 140 100 L 140 -120 Z" fill="#cdbde6"/></g><path d="M -86 -94 L -80 -54 L -52 -64 Z M 86 -94 L 80 -54 L 52 -64 Z" fill="#ff9fd0" stroke="#c81e7c" stroke-width="2"/><path d="M -12 -60 C -22 -40 -8 -30 0 -20 C 8 -30 22 -40 12 -60 C 8 -48 -8 -48 -12 -60 Z" fill="#ff3fa4"/><path d="M -66 -10 C -50 -26 -28 -26 -14 -10 C -30 -16 -50 -16 -66 -10 Z M 66 -10 C 50 -26 28 -26 14 -10 C 30 -16 50 -16 66 -10 Z" fill="#4a0f2e"/><path d="M -72 -22 C -56 -44 -28 -40 -12 -26 M 72 -22 C 56 -44 28 -40 12 -26" fill="none" stroke="#ff3fa4" stroke-width="6" stroke-linecap="round"/><path d="M -86 8 L -56 16 M -82 26 L -54 28 M 86 8 L 56 16 M 82 26 L 54 28" stroke="#ff3fa4" stroke-width="5" stroke-linecap="round"/><ellipse cx="0" cy="56" rx="11" ry="7" fill="#4a0f2e"/><path d="M -18 68 Q 0 78 18 68" fill="none" stroke="#ff3fa4" stroke-width="4" stroke-linecap="round"/><path d="M -100 -40 L -92 -112 L -40 -64 C -15 -72 15 -72 40 -64 L 92 -112 L 100 -40 C 104 0 72 40 32 70 C 16 82 -16 82 -32 70 C -72 40 -104 0 -100 -40 Z" fill="none" stroke="#4a0f2e" stroke-width="2.1" stroke-linejoin="round"/></g>
|
||||
<g transform="translate(244 236) scale(1.0)"><path d="M -7 34 L -10 74 L 10 74 L 7 34 Z" fill="#ff3fa4" stroke="#4a0f2e" stroke-width="2"/><circle r="17" fill="#1b1530" stroke="#4a0f2e" stroke-width="2.5"/><circle r="9" fill="none" stroke="#26e0ff" stroke-width="4"/><circle cy="28" r="12" fill="#ffcf3a" stroke="#4a0f2e" stroke-width="2.5"/><path d="M -6 24 a 6 4 0 0 0 12 0" fill="#fff3b0" stroke="none"/><path d="M 0 30 v 9" stroke="#4a0f2e" stroke-width="2.5"/></g>
|
||||
<g transform="translate(556 222) scale(0.85)"><path d="M -7 34 L -10 74 L 10 74 L 7 34 Z" fill="#ff3fa4" stroke="#4a0f2e" stroke-width="2"/><circle r="17" fill="#1b1530" stroke="#4a0f2e" stroke-width="2.5"/><circle r="9" fill="none" stroke="#26e0ff" stroke-width="4"/><circle cy="28" r="12" fill="#ffcf3a" stroke="#4a0f2e" stroke-width="2.5"/><path d="M -6 24 a 6 4 0 0 0 12 0" fill="#fff3b0" stroke="none"/><path d="M 0 30 v 9" stroke="#4a0f2e" stroke-width="2.5"/></g></g><g id="bust-B"><g transform="translate(124 62) scale(0.74)"><g transform="translate(0 -36)"><clipPath id="ccB"><path d="M 120 1000 C 150 690 214 610 318 578 C 360 606 492 606 538 576 C 626 606 676 700 700 1000 Z"/></clipPath><path d="M 120 1000 C 150 690 214 610 318 578 C 360 606 492 606 538 576 C 626 606 676 700 700 1000 Z" fill="#1b1530"/><g clip-path="url(#ccB)"><path d="M 548 570 C 590 650 590 740 570 850 L 760 1000 L 760 570 Z" fill="#0e0a1c"/><path d="M 318 570 C 350 640 400 720 438 1000 L 470 1000 C 440 720 390 630 352 580 Z" fill="#ff3fa4" stroke="#4a0f2e" stroke-width="2.5"/><path d="M 540 568 C 520 640 490 720 470 1000 L 440 1000 C 456 720 490 630 506 584 Z" fill="#ff3fa4" stroke="#4a0f2e" stroke-width="2.5"/><path d="M 340 586 C 372 650 414 730 448 1000 M 522 580 C 504 650 478 730 462 1000" fill="none" stroke="#26e0ff" stroke-width="5"/></g><path d="M 120 1000 C 150 690 214 610 318 578 C 360 606 492 606 538 576 C 626 606 676 700 700 1000 Z" fill="none" stroke="#4a0f2e" stroke-width="3"/><path d="M 404 596 C 414 630 446 630 456 596" fill="none" stroke="#ffcf3a" stroke-width="4"/><circle cx="430" cy="640" r="18" fill="#ffcf3a" stroke="#4a0f2e" stroke-width="3"/><path d="M 418 634 a 12 7 0 0 1 24 0" fill="#fff3b0"/><path d="M 430 644 v 12" stroke="#4a0f2e" stroke-width="3"/></g><use href="#head-B"/></g></g>
|
||||
<g id="rimset-B"><use href="#bust-B" filter="url(#rim)"/><use href="#bust-B" filter="url(#outl)"/><use href="#bust-B"/></g>
|
||||
</defs>
|
||||
<rect width="1200" height="800" fill="#f4f0f6"/>
|
||||
<polygon points="70,30 770,30 732,780 32,780" fill="#07111a"/>
|
||||
<g clip-path="url(#card)">
|
||||
<g opacity="0.18" stroke="#ff3fa4" stroke-width="1"><line x1="0" y1="40" x2="800" y2="40"/><line x1="0" y1="52" x2="800" y2="52"/><line x1="0" y1="64" x2="800" y2="64"/><line x1="0" y1="76" x2="800" y2="76"/><line x1="0" y1="88" x2="800" y2="88"/><line x1="0" y1="100" x2="800" y2="100"/><line x1="0" y1="112" x2="800" y2="112"/><line x1="0" y1="124" x2="800" y2="124"/><line x1="0" y1="136" x2="800" y2="136"/><line x1="0" y1="148" x2="800" y2="148"/><line x1="0" y1="160" x2="800" y2="160"/><line x1="0" y1="172" x2="800" y2="172"/><line x1="0" y1="184" x2="800" y2="184"/><line x1="0" y1="196" x2="800" y2="196"/><line x1="0" y1="208" x2="800" y2="208"/><line x1="0" y1="220" x2="800" y2="220"/><line x1="0" y1="232" x2="800" y2="232"/><line x1="0" y1="244" x2="800" y2="244"/><line x1="0" y1="256" x2="800" y2="256"/><line x1="0" y1="268" x2="800" y2="268"/><line x1="0" y1="280" x2="800" y2="280"/><line x1="0" y1="292" x2="800" y2="292"/><line x1="0" y1="304" x2="800" y2="304"/><line x1="0" y1="316" x2="800" y2="316"/><line x1="0" y1="328" x2="800" y2="328"/><line x1="0" y1="340" x2="800" y2="340"/><line x1="0" y1="352" x2="800" y2="352"/><line x1="0" y1="364" x2="800" y2="364"/><line x1="0" y1="376" x2="800" y2="376"/><line x1="0" y1="388" x2="800" y2="388"/><line x1="0" y1="400" x2="800" y2="400"/><line x1="0" y1="412" x2="800" y2="412"/><line x1="0" y1="424" x2="800" y2="424"/><line x1="0" y1="436" x2="800" y2="436"/><line x1="0" y1="448" x2="800" y2="448"/><line x1="0" y1="460" x2="800" y2="460"/><line x1="0" y1="472" x2="800" y2="472"/><line x1="0" y1="484" x2="800" y2="484"/><line x1="0" y1="496" x2="800" y2="496"/><line x1="0" y1="508" x2="800" y2="508"/><line x1="0" y1="520" x2="800" y2="520"/><line x1="0" y1="532" x2="800" y2="532"/><line x1="0" y1="544" x2="800" y2="544"/><line x1="0" y1="556" x2="800" y2="556"/><line x1="0" y1="568" x2="800" y2="568"/><line x1="0" y1="580" x2="800" y2="580"/><line x1="0" y1="592" x2="800" y2="592"/><line x1="0" y1="604" x2="800" y2="604"/><line x1="0" y1="616" x2="800" y2="616"/><line x1="0" y1="628" x2="800" y2="628"/><line x1="0" y1="640" x2="800" y2="640"/><line x1="0" y1="652" x2="800" y2="652"/><line x1="0" y1="664" x2="800" y2="664"/><line x1="0" y1="676" x2="800" y2="676"/><line x1="0" y1="688" x2="800" y2="688"/><line x1="0" y1="700" x2="800" y2="700"/><line x1="0" y1="712" x2="800" y2="712"/><line x1="0" y1="724" x2="800" y2="724"/><line x1="0" y1="736" x2="800" y2="736"/><line x1="0" y1="748" x2="800" y2="748"/><line x1="0" y1="760" x2="800" y2="760"/><line x1="0" y1="772" x2="800" y2="772"/><line x1="0" y1="784" x2="800" y2="784"/></g>
|
||||
<use href="#rimset-B"/>
|
||||
</g>
|
||||
<polygon points="70,30 770,30 732,780 32,780" fill="none" stroke="#ff3fa4" stroke-width="4"/>
|
||||
<polygon points="32,700 300,700 292,744 24,744" fill="#ff3fa4"/>
|
||||
<text x="52" y="731" class="h" fill="#07111a" style="fill:#07111a">KIKO</text>
|
||||
|
||||
<text x="800" y="58" class="h">KIKO / B</text>
|
||||
<text x="800" y="84" class="t" font-size="17" font-weight="600">The Mask</text>
|
||||
<g><g filter="url(#rim)">
|
||||
<g><clipPath id="tlfB0"><path d="M 900 400 Q 895.1 397.4 892 392.9 Q 886.7 391.7 882.5 388.3 Q 877.2 387.4 872.8 384.1 Q 867.4 383.3 863 380.1 Q 857.6 379.2 853.3 375.9 Q 848 374.7 843.8 371.3 Q 838.6 369.8 834.6 366.2 Q 829.5 364.5 825.7 360.6 Q 820.7 358.6 817.1 354.6 Q 812.1 352.5 808.6 348.3 Q 803.6 346.2 800.1 342.1 Q 794.9 340.6 790.9 337 Q 792.6 340.7 792.4 344.8 Q 796.2 351.2 796.7 358.5 Q 800.6 364.1 801.6 370.9 Q 805.8 375.7 807.4 382 Q 811.8 385.9 814 391.4 Q 818.8 394.3 821.8 399 Q 826.9 400.8 830.6 404.7 Q 836.1 405.3 840.6 408.3 Q 846.4 407.8 851.8 410 Q 857.9 408.4 864.1 409.7 Q 870.5 407.1 877.4 407.7 Q 884.1 404 891.8 403.8 Q 895.4 400.9 900 400 Z"/></clipPath><path d="M 900 400 Q 895.1 397.4 892 392.9 Q 886.7 391.7 882.5 388.3 Q 877.2 387.4 872.8 384.1 Q 867.4 383.3 863 380.1 Q 857.6 379.2 853.3 375.9 Q 848 374.7 843.8 371.3 Q 838.6 369.8 834.6 366.2 Q 829.5 364.5 825.7 360.6 Q 820.7 358.6 817.1 354.6 Q 812.1 352.5 808.6 348.3 Q 803.6 346.2 800.1 342.1 Q 794.9 340.6 790.9 337 Q 792.6 340.7 792.4 344.8 Q 796.2 351.2 796.7 358.5 Q 800.6 364.1 801.6 370.9 Q 805.8 375.7 807.4 382 Q 811.8 385.9 814 391.4 Q 818.8 394.3 821.8 399 Q 826.9 400.8 830.6 404.7 Q 836.1 405.3 840.6 408.3 Q 846.4 407.8 851.8 410 Q 857.9 408.4 864.1 409.7 Q 870.5 407.1 877.4 407.7 Q 884.1 404 891.8 403.8 Q 895.4 400.9 900 400 Z" fill="#f7f4ff"/><g clip-path="url(#tlfB0)"><polygon points="900,400 894.1,399.7 888.2,399.5 882.3,399.1 876.6,398.6 870.9,397.9 865.3,397.1 859.8,396.1 854.5,394.8 849.4,393.2 844.4,391.3 839.6,389.2 834.9,386.7 830.5,383.9 826.2,380.8 822.1,377.4 818.2,373.8 814.4,369.8 810.7,365.6 807.2,361.2 803.8,356.6 800.5,351.8 797.3,347 794.1,342 790.9,337 790.9,337 792.4,344.8 794.4,351.8 796.7,358.5 799,364.9 801.6,370.9 804.4,376.6 807.4,382 810.6,386.9 814,391.4 817.8,395.4 821.8,399 826,402.1 830.6,404.7 835.5,406.8 840.6,408.3 846.1,409.4 851.8,410 857.8,410.1 864.1,409.7 870.6,408.9 877.4,407.7 884.4,406 891.8,403.8 900,400" fill="#cdbde6"/></g><polygon points="819,357 814.8,357 814.8,352.8 810.6,352.8 810.6,348.6 806.4,348.6 806.4,344.4 802.2,344.4 798,344.4 798,340.2 793.8,340.2 793.8,336 789.6,336 789.6,340.2 793.8,340.2 793.8,344.4 793.8,348.6 793.8,352.8 793.8,357 798,357 798,361.2 798,365.4 802.2,365.4 802.2,369.6 802.2,373.8 802.2,378 806.4,378 806.4,382.2 819,382.2" fill="#ff3fa4"/><path d="M 900 400 Q 895.1 397.4 892 392.9 Q 886.7 391.7 882.5 388.3 Q 877.2 387.4 872.8 384.1 Q 867.4 383.3 863 380.1 Q 857.6 379.2 853.3 375.9 Q 848 374.7 843.8 371.3 Q 838.6 369.8 834.6 366.2 Q 829.5 364.5 825.7 360.6 Q 820.7 358.6 817.1 354.6 Q 812.1 352.5 808.6 348.3 Q 803.6 346.2 800.1 342.1 Q 794.9 340.6 790.9 337 Q 792.6 340.7 792.4 344.8 Q 796.2 351.2 796.7 358.5 Q 800.6 364.1 801.6 370.9 Q 805.8 375.7 807.4 382 Q 811.8 385.9 814 391.4 Q 818.8 394.3 821.8 399 Q 826.9 400.8 830.6 404.7 Q 836.1 405.3 840.6 408.3 Q 846.4 407.8 851.8 410 Q 857.9 408.4 864.1 409.7 Q 870.5 407.1 877.4 407.7 Q 884.1 404 891.8 403.8 Q 895.4 400.9 900 400 Z" fill="none" stroke="#4a0f2e" stroke-width="3"/><polygon points="819,357 814.8,357 814.8,352.8 810.6,352.8 810.6,348.6 806.4,348.6 806.4,344.4 802.2,344.4 798,344.4 798,340.2 793.8,340.2 793.8,336 789.6,336 789.6,340.2 793.8,340.2 793.8,344.4 793.8,348.6 793.8,352.8 793.8,357 798,357 798,361.2 798,365.4 802.2,365.4 802.2,369.6 802.2,373.8 802.2,378 806.4,378 806.4,382.2 819,382.2" fill="none" stroke="#4a0f2e" stroke-width="3"/></g>
|
||||
<path d="M 882 424 l -2 32 h 20 l 2 -32 Z M 912 424 l 2 32 h 20 l -2 -32 Z" fill="#f2c4a8" stroke="#4a0f2e" stroke-width="2.5"/>
|
||||
<path d="M 878 440 h 24 v 18 h -24 Z M 912 440 h 24 v 18 h -24 Z" fill="#ff3fa4" stroke="#4a0f2e" stroke-width="2"/>
|
||||
<path d="M 874 456 h 30 c 4 10 0 18 -6 18 h -26 c -6 0 -6 -18 2 -18 Z M 910 456 h 30 c 8 0 8 18 2 18 h -26 c -6 0 -10 -8 -6 -18 Z" fill="#1b1530" stroke="#4a0f2e" stroke-width="2.5"/>
|
||||
<path d="M 874 400 L 866 430 L 948 430 L 940 400 Z" fill="#1b1530" stroke="#4a0f2e" stroke-width="2.5"/>
|
||||
<path d="M 868 424 L 946 424" stroke="#ff3fa4" stroke-width="4"/>
|
||||
<path d="M 870 300 C 856 330 850 380 852 414 L 962 414 C 964 380 958 330 944 300 Z" fill="#1b1530" stroke="#4a0f2e" stroke-width="3"/>
|
||||
<path d="M 852 408 L 962 408" stroke="#26e0ff" stroke-width="4"/>
|
||||
<path d="M 880 300 L 906 360 L 932 300" fill="none" stroke="#ff3fa4" stroke-width="7"/>
|
||||
<path d="M 860 312 C 836 340 826 380 830 404 L 862 398 C 860 372 864 346 872 322 Z M 940 312 C 964 340 974 380 970 404 L 938 398 C 940 372 936 346 928 322 Z" fill="#1b1530" stroke="#4a0f2e" stroke-width="2.5"/>
|
||||
<path d="M 830 398 L 862 392 M 970 398 L 938 392" stroke="#ff3fa4" stroke-width="4"/>
|
||||
<circle cx="848" cy="410" r="9" fill="#f2c4a8" stroke="#4a0f2e" stroke-width="2.5"/><circle cx="952" cy="410" r="9" fill="#f2c4a8" stroke="#4a0f2e" stroke-width="2.5"/>
|
||||
<circle cx="906" cy="362" r="7" fill="#ffcf3a" stroke="#4a0f2e" stroke-width="2"/>
|
||||
<use href="#head-B" transform="translate(753.8 115.7) scale(0.36)"/>
|
||||
</g><g filter="url(#outl)">
|
||||
<g><clipPath id="tlfB0"><path d="M 900 400 Q 895.1 397.4 892 392.9 Q 886.7 391.7 882.5 388.3 Q 877.2 387.4 872.8 384.1 Q 867.4 383.3 863 380.1 Q 857.6 379.2 853.3 375.9 Q 848 374.7 843.8 371.3 Q 838.6 369.8 834.6 366.2 Q 829.5 364.5 825.7 360.6 Q 820.7 358.6 817.1 354.6 Q 812.1 352.5 808.6 348.3 Q 803.6 346.2 800.1 342.1 Q 794.9 340.6 790.9 337 Q 792.6 340.7 792.4 344.8 Q 796.2 351.2 796.7 358.5 Q 800.6 364.1 801.6 370.9 Q 805.8 375.7 807.4 382 Q 811.8 385.9 814 391.4 Q 818.8 394.3 821.8 399 Q 826.9 400.8 830.6 404.7 Q 836.1 405.3 840.6 408.3 Q 846.4 407.8 851.8 410 Q 857.9 408.4 864.1 409.7 Q 870.5 407.1 877.4 407.7 Q 884.1 404 891.8 403.8 Q 895.4 400.9 900 400 Z"/></clipPath><path d="M 900 400 Q 895.1 397.4 892 392.9 Q 886.7 391.7 882.5 388.3 Q 877.2 387.4 872.8 384.1 Q 867.4 383.3 863 380.1 Q 857.6 379.2 853.3 375.9 Q 848 374.7 843.8 371.3 Q 838.6 369.8 834.6 366.2 Q 829.5 364.5 825.7 360.6 Q 820.7 358.6 817.1 354.6 Q 812.1 352.5 808.6 348.3 Q 803.6 346.2 800.1 342.1 Q 794.9 340.6 790.9 337 Q 792.6 340.7 792.4 344.8 Q 796.2 351.2 796.7 358.5 Q 800.6 364.1 801.6 370.9 Q 805.8 375.7 807.4 382 Q 811.8 385.9 814 391.4 Q 818.8 394.3 821.8 399 Q 826.9 400.8 830.6 404.7 Q 836.1 405.3 840.6 408.3 Q 846.4 407.8 851.8 410 Q 857.9 408.4 864.1 409.7 Q 870.5 407.1 877.4 407.7 Q 884.1 404 891.8 403.8 Q 895.4 400.9 900 400 Z" fill="#f7f4ff"/><g clip-path="url(#tlfB0)"><polygon points="900,400 894.1,399.7 888.2,399.5 882.3,399.1 876.6,398.6 870.9,397.9 865.3,397.1 859.8,396.1 854.5,394.8 849.4,393.2 844.4,391.3 839.6,389.2 834.9,386.7 830.5,383.9 826.2,380.8 822.1,377.4 818.2,373.8 814.4,369.8 810.7,365.6 807.2,361.2 803.8,356.6 800.5,351.8 797.3,347 794.1,342 790.9,337 790.9,337 792.4,344.8 794.4,351.8 796.7,358.5 799,364.9 801.6,370.9 804.4,376.6 807.4,382 810.6,386.9 814,391.4 817.8,395.4 821.8,399 826,402.1 830.6,404.7 835.5,406.8 840.6,408.3 846.1,409.4 851.8,410 857.8,410.1 864.1,409.7 870.6,408.9 877.4,407.7 884.4,406 891.8,403.8 900,400" fill="#cdbde6"/></g><polygon points="819,357 814.8,357 814.8,352.8 810.6,352.8 810.6,348.6 806.4,348.6 806.4,344.4 802.2,344.4 798,344.4 798,340.2 793.8,340.2 793.8,336 789.6,336 789.6,340.2 793.8,340.2 793.8,344.4 793.8,348.6 793.8,352.8 793.8,357 798,357 798,361.2 798,365.4 802.2,365.4 802.2,369.6 802.2,373.8 802.2,378 806.4,378 806.4,382.2 819,382.2" fill="#ff3fa4"/><path d="M 900 400 Q 895.1 397.4 892 392.9 Q 886.7 391.7 882.5 388.3 Q 877.2 387.4 872.8 384.1 Q 867.4 383.3 863 380.1 Q 857.6 379.2 853.3 375.9 Q 848 374.7 843.8 371.3 Q 838.6 369.8 834.6 366.2 Q 829.5 364.5 825.7 360.6 Q 820.7 358.6 817.1 354.6 Q 812.1 352.5 808.6 348.3 Q 803.6 346.2 800.1 342.1 Q 794.9 340.6 790.9 337 Q 792.6 340.7 792.4 344.8 Q 796.2 351.2 796.7 358.5 Q 800.6 364.1 801.6 370.9 Q 805.8 375.7 807.4 382 Q 811.8 385.9 814 391.4 Q 818.8 394.3 821.8 399 Q 826.9 400.8 830.6 404.7 Q 836.1 405.3 840.6 408.3 Q 846.4 407.8 851.8 410 Q 857.9 408.4 864.1 409.7 Q 870.5 407.1 877.4 407.7 Q 884.1 404 891.8 403.8 Q 895.4 400.9 900 400 Z" fill="none" stroke="#4a0f2e" stroke-width="3"/><polygon points="819,357 814.8,357 814.8,352.8 810.6,352.8 810.6,348.6 806.4,348.6 806.4,344.4 802.2,344.4 798,344.4 798,340.2 793.8,340.2 793.8,336 789.6,336 789.6,340.2 793.8,340.2 793.8,344.4 793.8,348.6 793.8,352.8 793.8,357 798,357 798,361.2 798,365.4 802.2,365.4 802.2,369.6 802.2,373.8 802.2,378 806.4,378 806.4,382.2 819,382.2" fill="none" stroke="#4a0f2e" stroke-width="3"/></g>
|
||||
<path d="M 882 424 l -2 32 h 20 l 2 -32 Z M 912 424 l 2 32 h 20 l -2 -32 Z" fill="#f2c4a8" stroke="#4a0f2e" stroke-width="2.5"/>
|
||||
<path d="M 878 440 h 24 v 18 h -24 Z M 912 440 h 24 v 18 h -24 Z" fill="#ff3fa4" stroke="#4a0f2e" stroke-width="2"/>
|
||||
<path d="M 874 456 h 30 c 4 10 0 18 -6 18 h -26 c -6 0 -6 -18 2 -18 Z M 910 456 h 30 c 8 0 8 18 2 18 h -26 c -6 0 -10 -8 -6 -18 Z" fill="#1b1530" stroke="#4a0f2e" stroke-width="2.5"/>
|
||||
<path d="M 874 400 L 866 430 L 948 430 L 940 400 Z" fill="#1b1530" stroke="#4a0f2e" stroke-width="2.5"/>
|
||||
<path d="M 868 424 L 946 424" stroke="#ff3fa4" stroke-width="4"/>
|
||||
<path d="M 870 300 C 856 330 850 380 852 414 L 962 414 C 964 380 958 330 944 300 Z" fill="#1b1530" stroke="#4a0f2e" stroke-width="3"/>
|
||||
<path d="M 852 408 L 962 408" stroke="#26e0ff" stroke-width="4"/>
|
||||
<path d="M 880 300 L 906 360 L 932 300" fill="none" stroke="#ff3fa4" stroke-width="7"/>
|
||||
<path d="M 860 312 C 836 340 826 380 830 404 L 862 398 C 860 372 864 346 872 322 Z M 940 312 C 964 340 974 380 970 404 L 938 398 C 940 372 936 346 928 322 Z" fill="#1b1530" stroke="#4a0f2e" stroke-width="2.5"/>
|
||||
<path d="M 830 398 L 862 392 M 970 398 L 938 392" stroke="#ff3fa4" stroke-width="4"/>
|
||||
<circle cx="848" cy="410" r="9" fill="#f2c4a8" stroke="#4a0f2e" stroke-width="2.5"/><circle cx="952" cy="410" r="9" fill="#f2c4a8" stroke="#4a0f2e" stroke-width="2.5"/>
|
||||
<circle cx="906" cy="362" r="7" fill="#ffcf3a" stroke="#4a0f2e" stroke-width="2"/>
|
||||
<use href="#head-B" transform="translate(753.8 115.7) scale(0.36)"/>
|
||||
</g>
|
||||
<g><clipPath id="tlfB0"><path d="M 900 400 Q 895.1 397.4 892 392.9 Q 886.7 391.7 882.5 388.3 Q 877.2 387.4 872.8 384.1 Q 867.4 383.3 863 380.1 Q 857.6 379.2 853.3 375.9 Q 848 374.7 843.8 371.3 Q 838.6 369.8 834.6 366.2 Q 829.5 364.5 825.7 360.6 Q 820.7 358.6 817.1 354.6 Q 812.1 352.5 808.6 348.3 Q 803.6 346.2 800.1 342.1 Q 794.9 340.6 790.9 337 Q 792.6 340.7 792.4 344.8 Q 796.2 351.2 796.7 358.5 Q 800.6 364.1 801.6 370.9 Q 805.8 375.7 807.4 382 Q 811.8 385.9 814 391.4 Q 818.8 394.3 821.8 399 Q 826.9 400.8 830.6 404.7 Q 836.1 405.3 840.6 408.3 Q 846.4 407.8 851.8 410 Q 857.9 408.4 864.1 409.7 Q 870.5 407.1 877.4 407.7 Q 884.1 404 891.8 403.8 Q 895.4 400.9 900 400 Z"/></clipPath><path d="M 900 400 Q 895.1 397.4 892 392.9 Q 886.7 391.7 882.5 388.3 Q 877.2 387.4 872.8 384.1 Q 867.4 383.3 863 380.1 Q 857.6 379.2 853.3 375.9 Q 848 374.7 843.8 371.3 Q 838.6 369.8 834.6 366.2 Q 829.5 364.5 825.7 360.6 Q 820.7 358.6 817.1 354.6 Q 812.1 352.5 808.6 348.3 Q 803.6 346.2 800.1 342.1 Q 794.9 340.6 790.9 337 Q 792.6 340.7 792.4 344.8 Q 796.2 351.2 796.7 358.5 Q 800.6 364.1 801.6 370.9 Q 805.8 375.7 807.4 382 Q 811.8 385.9 814 391.4 Q 818.8 394.3 821.8 399 Q 826.9 400.8 830.6 404.7 Q 836.1 405.3 840.6 408.3 Q 846.4 407.8 851.8 410 Q 857.9 408.4 864.1 409.7 Q 870.5 407.1 877.4 407.7 Q 884.1 404 891.8 403.8 Q 895.4 400.9 900 400 Z" fill="#f7f4ff"/><g clip-path="url(#tlfB0)"><polygon points="900,400 894.1,399.7 888.2,399.5 882.3,399.1 876.6,398.6 870.9,397.9 865.3,397.1 859.8,396.1 854.5,394.8 849.4,393.2 844.4,391.3 839.6,389.2 834.9,386.7 830.5,383.9 826.2,380.8 822.1,377.4 818.2,373.8 814.4,369.8 810.7,365.6 807.2,361.2 803.8,356.6 800.5,351.8 797.3,347 794.1,342 790.9,337 790.9,337 792.4,344.8 794.4,351.8 796.7,358.5 799,364.9 801.6,370.9 804.4,376.6 807.4,382 810.6,386.9 814,391.4 817.8,395.4 821.8,399 826,402.1 830.6,404.7 835.5,406.8 840.6,408.3 846.1,409.4 851.8,410 857.8,410.1 864.1,409.7 870.6,408.9 877.4,407.7 884.4,406 891.8,403.8 900,400" fill="#cdbde6"/></g><polygon points="819,357 814.8,357 814.8,352.8 810.6,352.8 810.6,348.6 806.4,348.6 806.4,344.4 802.2,344.4 798,344.4 798,340.2 793.8,340.2 793.8,336 789.6,336 789.6,340.2 793.8,340.2 793.8,344.4 793.8,348.6 793.8,352.8 793.8,357 798,357 798,361.2 798,365.4 802.2,365.4 802.2,369.6 802.2,373.8 802.2,378 806.4,378 806.4,382.2 819,382.2" fill="#ff3fa4"/><path d="M 900 400 Q 895.1 397.4 892 392.9 Q 886.7 391.7 882.5 388.3 Q 877.2 387.4 872.8 384.1 Q 867.4 383.3 863 380.1 Q 857.6 379.2 853.3 375.9 Q 848 374.7 843.8 371.3 Q 838.6 369.8 834.6 366.2 Q 829.5 364.5 825.7 360.6 Q 820.7 358.6 817.1 354.6 Q 812.1 352.5 808.6 348.3 Q 803.6 346.2 800.1 342.1 Q 794.9 340.6 790.9 337 Q 792.6 340.7 792.4 344.8 Q 796.2 351.2 796.7 358.5 Q 800.6 364.1 801.6 370.9 Q 805.8 375.7 807.4 382 Q 811.8 385.9 814 391.4 Q 818.8 394.3 821.8 399 Q 826.9 400.8 830.6 404.7 Q 836.1 405.3 840.6 408.3 Q 846.4 407.8 851.8 410 Q 857.9 408.4 864.1 409.7 Q 870.5 407.1 877.4 407.7 Q 884.1 404 891.8 403.8 Q 895.4 400.9 900 400 Z" fill="none" stroke="#4a0f2e" stroke-width="3"/><polygon points="819,357 814.8,357 814.8,352.8 810.6,352.8 810.6,348.6 806.4,348.6 806.4,344.4 802.2,344.4 798,344.4 798,340.2 793.8,340.2 793.8,336 789.6,336 789.6,340.2 793.8,340.2 793.8,344.4 793.8,348.6 793.8,352.8 793.8,357 798,357 798,361.2 798,365.4 802.2,365.4 802.2,369.6 802.2,373.8 802.2,378 806.4,378 806.4,382.2 819,382.2" fill="none" stroke="#4a0f2e" stroke-width="3"/></g>
|
||||
<path d="M 882 424 l -2 32 h 20 l 2 -32 Z M 912 424 l 2 32 h 20 l -2 -32 Z" fill="#f2c4a8" stroke="#4a0f2e" stroke-width="2.5"/>
|
||||
<path d="M 878 440 h 24 v 18 h -24 Z M 912 440 h 24 v 18 h -24 Z" fill="#ff3fa4" stroke="#4a0f2e" stroke-width="2"/>
|
||||
<path d="M 874 456 h 30 c 4 10 0 18 -6 18 h -26 c -6 0 -6 -18 2 -18 Z M 910 456 h 30 c 8 0 8 18 2 18 h -26 c -6 0 -10 -8 -6 -18 Z" fill="#1b1530" stroke="#4a0f2e" stroke-width="2.5"/>
|
||||
<path d="M 874 400 L 866 430 L 948 430 L 940 400 Z" fill="#1b1530" stroke="#4a0f2e" stroke-width="2.5"/>
|
||||
<path d="M 868 424 L 946 424" stroke="#ff3fa4" stroke-width="4"/>
|
||||
<path d="M 870 300 C 856 330 850 380 852 414 L 962 414 C 964 380 958 330 944 300 Z" fill="#1b1530" stroke="#4a0f2e" stroke-width="3"/>
|
||||
<path d="M 852 408 L 962 408" stroke="#26e0ff" stroke-width="4"/>
|
||||
<path d="M 880 300 L 906 360 L 932 300" fill="none" stroke="#ff3fa4" stroke-width="7"/>
|
||||
<path d="M 860 312 C 836 340 826 380 830 404 L 862 398 C 860 372 864 346 872 322 Z M 940 312 C 964 340 974 380 970 404 L 938 398 C 940 372 936 346 928 322 Z" fill="#1b1530" stroke="#4a0f2e" stroke-width="2.5"/>
|
||||
<path d="M 830 398 L 862 392 M 970 398 L 938 392" stroke="#ff3fa4" stroke-width="4"/>
|
||||
<circle cx="848" cy="410" r="9" fill="#f2c4a8" stroke="#4a0f2e" stroke-width="2.5"/><circle cx="952" cy="410" r="9" fill="#f2c4a8" stroke="#4a0f2e" stroke-width="2.5"/>
|
||||
<circle cx="906" cy="362" r="7" fill="#ffcf3a" stroke="#4a0f2e" stroke-width="2"/>
|
||||
<use href="#head-B" transform="translate(753.8 115.7) scale(0.36)"/>
|
||||
</g>
|
||||
<text x="800" y="508" class="lab">FULL BODY, 2.2 HEADS</text>
|
||||
<g clip-path="url(#card)" filter="url(#black)" transform="translate(1010 108) scale(0.215)"><use href="#bust-B"/></g>
|
||||
<text x="1012" y="306" class="lab">SILHOUETTE</text>
|
||||
<g clip-path="url(#card)" filter="url(#black)" transform="translate(1012 320) scale(0.064)"><use href="#bust-B"/></g>
|
||||
<text x="1070" y="348" class="sm">48 px</text>
|
||||
<text x="800" y="548" class="lab">HOOK</text>
|
||||
<text x="800" y="574" class="t" font-size="15"><tspan x="800" dy="0">Canon Kiko with the kitsune mask turned up: an</tspan><tspan x="800" dy="22">oversized painted mask sits tilted on her crown,</tspan><tspan x="800" dy="22">fox ears doubled above her own. Cat smile.</tspan></text>
|
||||
<text x="800" y="640" class="lab">PALETTE</text>
|
||||
<rect x="800" y="652" width="34" height="34" rx="3" fill="#ff3fa4" stroke="#4a0f2e" stroke-width="1.5"/><text x="842" y="667" class="lab">#ff3fa4</text><text x="842" y="682" class="sm">key, trim, tips</text><rect x="928" y="652" width="34" height="34" rx="3" fill="#4a0f2e" stroke="#4a0f2e" stroke-width="1.5"/><text x="970" y="667" class="lab">#4a0f2e</text><text x="970" y="682" class="sm">line</text><rect x="1056" y="652" width="34" height="34" rx="3" fill="#f7f4ff" stroke="#4a0f2e" stroke-width="1.5"/><text x="1098" y="667" class="lab">#f7f4ff</text><text x="1098" y="682" class="sm">hair, fur, mask</text><rect x="800" y="714" width="34" height="34" rx="3" fill="#26e0ff" stroke="#4a0f2e" stroke-width="1.5"/><text x="842" y="729" class="lab">#26e0ff</text><text x="842" y="744" class="sm">eyes, inner trim</text><rect x="928" y="714" width="34" height="34" rx="3" fill="#1b1530" stroke="#4a0f2e" stroke-width="1.5"/><text x="970" y="729" class="lab">#1b1530</text><text x="970" y="744" class="sm">coat</text><rect x="1056" y="714" width="34" height="34" rx="3" fill="#ffcf3a" stroke="#4a0f2e" stroke-width="1.5"/><text x="1098" y="729" class="lab">#ffcf3a</text><text x="1098" y="744" class="sm">bells</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 220 KiB |
|
Before Width: | Height: | Size: 51 KiB |
|
|
@ -1,101 +0,0 @@
|
|||
# Kiko: proposal notes, round 1
|
||||
|
||||
## The brief changed: canon wins
|
||||
|
||||
Kiko already has an established design: the praxis character sheet at
|
||||
`F:\Projects\gamecult-site\GameCult\static\interactive\cotsc-praxis\character-sheets\kiko-sheet.png`
|
||||
and its sprites in `sprites\kiko\`. It shows white-silver hair, white fox ears, a
|
||||
white kitsune mask worn on the crown, round hair clips with gold bells and
|
||||
magenta tassels, cyan eyes and a fang grin, a black coat trimmed in magenta and
|
||||
cyan with a gold bell at the throat, several fluffy white tails, and a streaming
|
||||
setup of monitors and stickers. `kiko.md` missed it. Its A/B/C (Pixel Tails,
|
||||
Screen Mask, Hood Gremlin) were new designs. Here they are replaced by three
|
||||
takes on the canon design. Each take turns up a different canon element as the
|
||||
hook:
|
||||
|
||||
- **A, Seven Tails:** the tails.
|
||||
- **B, The Mask:** the mask.
|
||||
- **C, On Air:** the streaming gear.
|
||||
|
||||
Things that stay the same across all three: the face construction, cyan eyes,
|
||||
hair, ears, bell clips and coat. That way the three read as one character.
|
||||
|
||||
`kiko-old-A.svg/.png` is the only sheet drawn from the old brief (Pixel Tails,
|
||||
before the canon note arrived): magenta eyes, a black hoodie, and tails in four
|
||||
event colours. It is kept for comparison. The old B and C were never drawn.
|
||||
|
||||
Palette for all three: magenta `#ff3fa4` (key, trims, tail tips), line
|
||||
`#4a0f2e`, white `#f7f4ff` (hair, fur, mask), cyan `#26e0ff` (eyes, inner trim,
|
||||
screen), coat `#1b1530`, gold `#ffcf3a` (bells). Skin is `#f2c4a8`. The skin
|
||||
swatch is left off the sheet because the swatch grid holds six.
|
||||
|
||||
StreamPixels' stepped-pixel shape language is kept, but it lives in the
|
||||
details. It is never the rendering style. It shows up as the staircase tail
|
||||
tips in A, and as the pixel heart and cat stickers and the LIVE tag in C.
|
||||
|
||||
## A: Seven Tails
|
||||
|
||||
- **What it does.** Seven tails fan out behind her head. They are fluffy white
|
||||
with lilac shadow, and each tip is a magenta staircase. In silhouette the fan
|
||||
becomes a spiky crown with ears and mask on top, the most distinctive shape of
|
||||
the three at 48 px. The mask rides small on the crown. The expression is an
|
||||
open fang grin.
|
||||
- **Changed after looking.**
|
||||
- The first canon pass hid the mask behind the bangs, so the mask now draws
|
||||
last.
|
||||
- The tails were angled so they clear the hair mass on both sides; before
|
||||
that, five of the seven sat invisibly behind the head.
|
||||
- The tip steps were refined (grid down to 70 percent of the tail grid), and
|
||||
the bust was scaled down so the fan fits inside the card.
|
||||
- The neck was cut down, because the neck shape was painting over the coat
|
||||
collar.
|
||||
- **Push in round 2.**
|
||||
- The staircase tips still read as coarse blocks where tails overlap. Try
|
||||
fewer, larger steps, plus a thin white gap between neighbouring tails.
|
||||
- The white tails sit against lilac back hair with too little separation.
|
||||
Push the hair shadow cooler or give the tails a cyan rim.
|
||||
|
||||
## B: The Mask
|
||||
|
||||
- **What it does.** The kitsune mask is drawn at about 1.75 times A's size,
|
||||
tilted on the crown. It stacks a second pair of fox ears above her own, so
|
||||
the silhouette is tall and four-pointed. The painted mask face (closed
|
||||
happy eyes) works as a second expression beside her cat smile. A magenta
|
||||
cord with a large bell streams back from the mask.
|
||||
- **Changed after looking.** The mask was enlarged and the cord ribbons were
|
||||
added, to pull the silhouette away from C's. The lone tail was removed from
|
||||
the bust, because only its stepped tip showed and it read as a glitch blob.
|
||||
- **Push in round 2.**
|
||||
- At 48 px, B's silhouette is the closest to the other two: a tall blob with
|
||||
ears. The mask needs a stronger tilt or offset so it breaks the head outline
|
||||
sideways, not just upward.
|
||||
- Try letting the mask's painted face change per expression, as the
|
||||
portrait-set gag.
|
||||
|
||||
## C: On Air
|
||||
|
||||
- **What it does.** She leans out of a stream monitor. This is the canon
|
||||
overlay pose, cropped as a boxy screen behind her head with stickers and a
|
||||
LIVE tag on the bezel. She wears a magenta headset with sticker earcups and a
|
||||
boom mic jutting past her cheek, the mask pushed to the far side, and a cable
|
||||
curling down like a tail. In silhouette the screen makes a rectangle with ears
|
||||
breaking out of the top, which nothing else in the cast does.
|
||||
- **Changed after looking.**
|
||||
- Headset and mic alone left the silhouette identical to B's, so the monitor
|
||||
was added behind her as the shape carrier.
|
||||
- The mic was pushed forward past the face contour.
|
||||
- A stray inner glyph on the far earcup was replaced with an LED ring and a
|
||||
pixel-cat sticker.
|
||||
- The LIVE lettering was redrawn.
|
||||
- **Push in round 2.**
|
||||
- The far earcup is crowded by the far ear and the mask. Simplify to one of
|
||||
those two.
|
||||
- The monitor bezel loses its stickers behind the hair. Move them to the top
|
||||
corners.
|
||||
- The full-body sheet does not show the monitor yet.
|
||||
|
||||
## Strongest
|
||||
|
||||
C is the strongest. It is the most canon-faithful, its boxy silhouette is
|
||||
unique in the cast, and the gear tells you what StreamPixels is. A is the
|
||||
safest iconic read at thumbnail size.
|
||||
|
Before Width: | Height: | Size: 188 KiB |
|
Before Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 313 KiB |
|
|
@ -1,210 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<!-- Libby, take A: The Glowing Tome. Three takes on the canon design (cotsc-praxis character sheet). Hand-authored. -->
|
||||
<defs>
|
||||
<filter id="outline" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feMorphology in="SourceAlpha" operator="dilate" radius="3.2" result="d"/>
|
||||
<feFlood flood-color="#2a1d40"/>
|
||||
<feComposite in2="d" operator="in" result="o"/>
|
||||
<feMerge><feMergeNode in="o"/><feMergeNode in="SourceGraphic"/></feMerge>
|
||||
</filter>
|
||||
<filter id="sil" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feMorphology in="SourceAlpha" operator="dilate" radius="3.2" result="d"/>
|
||||
<feColorMatrix in="d" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0"/>
|
||||
</filter>
|
||||
<radialGradient id="glow" cx="0.46" cy="0.45" r="0.62">
|
||||
<stop offset="0" stop-color="#2d2150"/>
|
||||
<stop offset="1" stop-color="#07111a"/>
|
||||
</radialGradient>
|
||||
<clipPath id="chest"><rect x="-200" y="-100" width="1100" height="890"/></clipPath>
|
||||
|
||||
<g id="backhair" stroke="#2a1d40" stroke-width="3" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M330 118 C200 116 110 200 106 320 C96 372 50 404 72 468 C88 512 36 540 54 604 C66 652 22 692 46 744 C54 764 44 782 38 790 L618 790 C628 770 644 740 628 700 C614 650 654 610 628 556 C610 516 640 466 608 416 C586 376 594 330 568 290 C548 190 452 118 330 118 Z" fill="#a99be0"/>
|
||||
<path d="M196 470 C226 560 206 690 226 790 L474 790 C484 690 462 560 486 470 Z" fill="#7d6fc4" stroke="none"/>
|
||||
<path d="M124 330 C114 420 130 470 114 540 C102 600 122 650 106 724 M156 440 C146 510 166 566 146 646 M564 330 C576 420 560 470 578 540 C590 600 570 660 584 730" fill="none" stroke="#7d6fc4" stroke-width="4"/>
|
||||
<path d="M578 520 C598 570 584 620 596 676" fill="none" stroke="#d8d1f7" stroke-width="4"/>
|
||||
</g>
|
||||
|
||||
<g id="ribbon" transform="translate(0 0) translate(160 205) scale(1.0) translate(-160 -205)" stroke="#2a1d40" stroke-width="3" stroke-linejoin="round">
|
||||
<path d="M150 222 C120 290 108 360 98 432 L122 420 L134 448 C140 370 152 296 166 226 Z" fill="#241a33"/>
|
||||
<path d="M160 204 C112 146 52 140 46 186 C42 222 104 232 160 214 Z" fill="#241a33"/>
|
||||
<path d="M160 210 C104 224 66 262 84 292 C102 316 142 262 164 220 Z" fill="#241a33"/>
|
||||
<path d="M60 190 C66 170 96 168 120 182" fill="none" stroke="#a99be0" stroke-width="3"/>
|
||||
<path d="M86 186 l10 -10 l10 10 l-10 10 Z M104 252 l9 -9 l9 9 l-9 9 Z M124 340 l8 -8 l8 8 l-8 8 Z" fill="none" stroke="#8a6a9a" stroke-width="3"/>
|
||||
<circle cx="162" cy="210" r="15" fill="#241a33"/>
|
||||
<path d="M156 204 l6 -6 l6 6 l-6 6 Z" fill="#c8a24a" stroke="none"/>
|
||||
</g>
|
||||
|
||||
<g id="hairpin" transform="translate(222 214) scale(1.0) rotate(-12)" stroke="#2a1d40" stroke-width="3" stroke-linejoin="round">
|
||||
<g transform="rotate(35)"><path d="M-30 -5 C-38 -14 -50 -8 -44 0 C-50 8 -38 14 -30 5 L30 5 C38 14 50 8 44 0 C50 -8 38 -14 30 -5 Z" fill="#efe6d8"/></g>
|
||||
<g transform="rotate(-35)"><path d="M-30 -5 C-38 -14 -50 -8 -44 0 C-50 8 -38 14 -30 5 L30 5 C38 14 50 8 44 0 C50 -8 38 -14 30 -5 Z" fill="#efe6d8"/></g>
|
||||
<path d="M-20 -4 L20 -4" stroke="#cfc2ae" stroke-width="2" transform="rotate(-35)"/>
|
||||
</g>
|
||||
|
||||
<g id="headfront" stroke-linejoin="round" stroke-linecap="round">
|
||||
<!-- face -->
|
||||
<path d="M172 300 C166 400 184 476 232 518 C268 548 312 562 350 561 C390 557 430 528 450 484 C462 456 470 430 470 398 C476 360 472 330 464 296 Z" fill="#f6d6c4" stroke="#2a1d40" stroke-width="3"/>
|
||||
<path d="M452 404 C466 452 452 500 412 540 C440 514 456 472 448 432 Z" fill="#e6b4a0"/>
|
||||
<clipPath id="faceclip"><path d="M172 300 C166 400 184 476 232 518 C268 548 312 562 350 561 C390 557 430 528 450 484 C462 456 470 430 470 398 C476 360 472 330 464 296 Z"/></clipPath>
|
||||
<path clip-path="url(#faceclip)" transform="translate(-3 11)" d="M200 162 C282 136 424 148 482 228 C506 268 512 320 522 360 C530 396 570 418 594 396 C604 386 600 368 588 366 C592 382 580 396 560 396 C540 396 524 392 510 398 C496 380 478 358 460 344 C458 364 456 386 452 404 C430 380 404 346 380 330 C384 356 382 376 378 394 C356 368 330 336 304 318 C308 340 304 362 300 378 C280 352 252 326 230 318 C224 282 200 252 188 240 C178 210 184 178 200 162 Z" fill="#e6b4a0"/>
|
||||
<path d="M454 440 C460 470 452 500 432 526" fill="none" stroke="#a99be0" stroke-width="4"/>
|
||||
<!-- near ear with gold drop -->
|
||||
<path d="M186 410 C164 398 152 424 160 448 C166 466 180 472 194 462 Z" fill="#f6d6c4" stroke="#2a1d40" stroke-width="3"/>
|
||||
<path d="M178 426 C170 432 172 446 180 452" fill="none" stroke="#e6b4a0" stroke-width="3"/>
|
||||
<circle cx="170" cy="474" r="5" fill="#c8a24a" stroke="#2a1d40" stroke-width="2"/>
|
||||
<path d="M170 480 L176 492 L170 504 L164 492 Z" fill="#c8a24a" stroke="#2a1d40" stroke-width="2"/>
|
||||
<!-- blush -->
|
||||
<ellipse cx="262" cy="508" rx="26" ry="9" fill="#f29aa6" opacity="0.5"/>
|
||||
<ellipse cx="428" cy="506" rx="16" ry="8" fill="#f29aa6" opacity="0.5"/>
|
||||
<path d="M250 504 l6 -8 M262 506 l6 -8 M274 506 l6 -8" stroke="#dd7f8c" stroke-width="2" opacity="0.75"/>
|
||||
|
||||
<clipPath id="eyeN"><path d="M226 420 C244 394 302 390 328 412 L326 476 C306 494 260 496 238 484 Z"/></clipPath>
|
||||
<path d="M226 420 C244 394 302 390 328 412 L326 476 C306 494 260 496 238 484 Z" fill="#ffffff"/>
|
||||
<g clip-path="url(#eyeN)">
|
||||
<ellipse cx="282" cy="448" rx="35" ry="47" fill="#6a64a0" stroke="#2a1d40" stroke-width="3"/>
|
||||
<path d="M248.2 436 A35 47 0 0 1 315.8 436 Q282 450 248.2 436 Z" fill="#2a1d40" opacity="0.85"/>
|
||||
<path d="M255 474 C265 494 299 494 309 474 C297 484 267 484 255 474 Z" fill="#bdb6ec"/>
|
||||
<ellipse cx="283" cy="452" rx="13" ry="21" fill="#2a1d40"/>
|
||||
</g>
|
||||
<ellipse cx="268" cy="430" rx="11" ry="14" fill="#fff"/>
|
||||
<circle cx="300" cy="470" r="5" fill="#fff"/>
|
||||
<path d="M220 428 C238 394 300 386 334 412" fill="none" stroke="#2a1d40" stroke-width="8" stroke-linecap="round"/>
|
||||
<path d="M222 424 L206 414 L224 418 Z M228 412 L214 398 L232 406 Z" fill="#2a1d40" stroke="#2a1d40" stroke-width="2.5" stroke-linejoin="round"/>
|
||||
<path d="M242 486 C264 496 302 494 320 480" fill="none" stroke="#2a1d40" stroke-width="2.5" stroke-linecap="round"/>
|
||||
<clipPath id="eyeF"><path d="M378 414 C394 398 430 398 448 414 L447 474 C434 488 398 490 384 478 Z"/></clipPath>
|
||||
<path d="M378 414 C394 398 430 398 448 414 L447 474 C434 488 398 490 384 478 Z" fill="#ffffff"/>
|
||||
<g clip-path="url(#eyeF)">
|
||||
<ellipse cx="412" cy="448" rx="27" ry="46" fill="#6a64a0" stroke="#2a1d40" stroke-width="3"/>
|
||||
<path d="M385.9 436 A27 46 0 0 1 438.1 436 Q412 450 385.9 436 Z" fill="#2a1d40" opacity="0.85"/>
|
||||
<path d="M393 474 C403 494 421 494 431 474 C419 484 405 484 393 474 Z" fill="#bdb6ec"/>
|
||||
<ellipse cx="413" cy="452" rx="10" ry="20" fill="#2a1d40"/>
|
||||
</g>
|
||||
<ellipse cx="402" cy="430" rx="9" ry="13" fill="#fff"/>
|
||||
<circle cx="422" cy="470" r="4" fill="#fff"/>
|
||||
<path d="M374 418 C392 394 432 392 452 414" fill="none" stroke="#2a1d40" stroke-width="7" stroke-linecap="round"/>
|
||||
<path d="M450 412 L464 404 L455 418 Z" fill="#2a1d40" stroke="#2a1d40" stroke-width="2.5" stroke-linejoin="round"/>
|
||||
<path d="M388 482 C404 490 428 490 440 480" fill="none" stroke="#2a1d40" stroke-width="2.5" stroke-linecap="round"/>
|
||||
<!-- nose and mouth -->
|
||||
<path d="M362 470 L367 480 L360 482" fill="none" stroke="#c98a76" stroke-width="2.5" stroke-linecap="round"/>
|
||||
<path d="M326 500 C342 494 372 492 388 498 C384 528 336 532 326 500 Z" fill="#8c3c4c" stroke="#2a1d40" stroke-width="3" stroke-linejoin="round"/>
|
||||
<path d="M340 518 C350 510 368 510 376 518 C366 524 348 524 340 518 Z" fill="#e0707a"/>
|
||||
<path d="M330 500 L384 498 L382 504 L332 506 Z" fill="#ffffff"/>
|
||||
<!-- round glasses, thin dark frames -->
|
||||
<g fill="none" stroke="#2a1d40">
|
||||
<path d="M224 436 L184 424" stroke-width="4"/>
|
||||
<circle cx="280" cy="444" r="58" stroke-width="4.5"/>
|
||||
<ellipse cx="413" cy="442" rx="43" ry="56" stroke-width="4.5"/>
|
||||
<path d="M338 440 C350 430 360 430 370 438" stroke-width="4.5"/>
|
||||
<path d="M246 404 C256 394 268 390 280 390" stroke="#ffffff" stroke-width="5" opacity="0.75"/>
|
||||
<path d="M392 398 C398 392 406 390 412 390" stroke="#ffffff" stroke-width="4" opacity="0.75"/>
|
||||
</g>
|
||||
<!-- side lock tucked behind the ear -->
|
||||
<path d="M190 236 C170 280 166 330 174 392 C178 408 188 418 198 418 C194 380 204 332 232 316 Z" fill="#a99be0" stroke="#2a1d40" stroke-width="3"/>
|
||||
<!-- long front lock over the far shoulder -->
|
||||
<path d="M468 300 C500 346 502 402 488 452 C476 502 502 544 498 594 C494 644 518 684 508 724 C544 686 536 644 540 602 C544 552 522 502 530 452 C538 392 522 334 492 286 Z" fill="#a99be0" stroke="#2a1d40" stroke-width="3.5"/>
|
||||
<path d="M498 330 C514 380 512 420 506 456 C500 500 520 540 516 590" fill="none" stroke="#7d6fc4" stroke-width="3.5"/>
|
||||
<path d="M532 470 C536 520 528 560 534 610" fill="none" stroke="#d8d1f7" stroke-width="4"/>
|
||||
<!-- swept fringe, parted at the back, hooking into the canon curl at the front -->
|
||||
<path d="M200 162 C282 136 424 148 482 228 C506 268 512 320 522 360 C530 396 570 418 594 396 C604 386 600 368 588 366 C592 382 580 396 560 396 C540 396 524 392 510 398 C496 380 478 358 460 344 C458 364 456 386 452 404 C430 380 404 346 380 330 C384 356 382 376 378 394 C356 368 330 336 304 318 C308 340 304 362 300 378 C280 352 252 326 230 318 C224 282 200 252 188 240 C178 210 184 178 200 162 Z" fill="#a99be0" stroke="#2a1d40" stroke-width="3.5"/>
|
||||
<path d="M236 200 C306 176 386 182 446 214 L440 230 C384 202 306 198 242 216 Z" fill="#d8d1f7"/>
|
||||
<path d="M300 168 C322 230 334 290 352 360 M382 174 C410 240 420 300 426 372 M250 192 C270 240 280 290 290 340 M454 210 C484 270 500 330 520 380" fill="none" stroke="#7d6fc4" stroke-width="3.5"/>
|
||||
<path d="M492 260 C510 300 514 340 520 376" fill="none" stroke="#d8d1f7" stroke-width="4"/>
|
||||
<path d="M248 366 C266 354 296 352 314 360" fill="none" stroke="#6c5fb0" stroke-width="5" stroke-linecap="round"/><path d="M386 352 C402 342 426 342 440 352" fill="none" stroke="#6c5fb0" stroke-width="5" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<g id="bustbody" stroke="#2a1d40" stroke-width="3" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M314 530 L314 600 L384 600 L380 530 Z" fill="#f6d6c4"/>
|
||||
<path d="M314 538 C338 560 362 560 382 546 L383 580 L315 584 Z" fill="#e6b4a0" stroke="none"/>
|
||||
<path d="M92 790 C96 700 148 650 240 628 L300 610 L402 610 L472 628 C554 650 604 700 614 790 Z" fill="#241a33"/>
|
||||
<path d="M470 640 C540 662 584 704 592 790 L614 790 C604 700 554 650 472 628 Z" fill="#150f20" stroke="none"/>
|
||||
<path d="M530 660 C580 690 604 734 610 790" fill="none" stroke="#a99be0" stroke-width="4"/>
|
||||
<path d="M130 700 C150 670 190 648 236 636" fill="none" stroke="#8a6a9a" stroke-width="3"/>
|
||||
<!-- standing collar -->
|
||||
<path d="M290 620 C286 592 296 572 314 564 L386 564 C404 572 412 592 410 622 L350 654 Z" fill="#241a33"/>
|
||||
<path d="M300 612 C300 596 306 584 316 578 L384 578 C394 584 400 596 400 612" fill="none" stroke="#8a6a9a" stroke-width="3"/>
|
||||
<path d="M350 668 L338 790" fill="none" stroke="#8a6a9a" stroke-width="7"/>
|
||||
<path d="M350 668 L338 790" fill="none" stroke="#2a1d40" stroke-width="1.5"/>
|
||||
<path d="M190 724 l14 -14 l14 14 l-14 14 Z M486 724 l14 -14 l14 14 l-14 14 Z" fill="none" stroke="#8a6a9a" stroke-width="3"/>
|
||||
<path d="M204 724 l0 0" fill="none"/>
|
||||
<!-- brooch -->
|
||||
<circle cx="350" cy="652" r="17" fill="#c8a24a"/>
|
||||
<circle cx="350" cy="652" r="9" fill="#b77cff" stroke-width="2"/>
|
||||
<circle cx="347" cy="649" r="3" fill="#ffffff" stroke="none"/>
|
||||
</g>
|
||||
|
||||
<g id="prop" stroke="#2a1d40" stroke-width="3" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M250 676 L232 640 M300 668 L292 626 M444 668 L452 626 M494 676 L512 640" fill="none" stroke="#b77cff" stroke-width="4"/>
|
||||
<path d="M196 704 L372 712 L548 704 L552 784 L372 790 L192 784 Z" fill="#241a33"/>
|
||||
<path d="M196 704 L214 704 L212 722 L196 724 Z M548 704 L532 704 L534 722 L550 724 Z" fill="#c8a24a" stroke-width="2"/>
|
||||
<path d="M214 694 C268 672 322 674 372 694 L372 768 C322 750 268 748 214 768 Z" fill="#efe6d8"/>
|
||||
<path d="M372 694 C424 674 478 672 532 694 L532 768 C478 748 424 750 372 768 Z" fill="#efe6d8"/>
|
||||
<path d="M214 694 C268 672 322 674 372 694 L372 708 C322 690 268 690 214 708 Z" fill="#cfc2ae" stroke="none"/>
|
||||
<g fill="none" stroke="#b77cff" stroke-width="3">
|
||||
<path d="M240 716 L340 712 M240 732 L330 728 M240 748 L346 744 M402 712 L500 716 M398 728 L470 730"/>
|
||||
<rect x="440" y="726" width="36" height="30" transform="rotate(4 458 741)"/>
|
||||
</g>
|
||||
<!-- glyphs rising off the page -->
|
||||
<g fill="none" stroke="#b77cff" stroke-width="4">
|
||||
<rect x="434" y="624" width="40" height="40" rx="5" transform="rotate(45 454 644)"/>
|
||||
<circle cx="454" cy="644" r="10"/>
|
||||
<path d="M262 664 l0 -16 M254 656 l16 0 M518 610 l0 -20 M508 600 l20 0" stroke-width="3"/>
|
||||
</g>
|
||||
<circle cx="454" cy="644" r="4" fill="#ffffff" stroke="none"/>
|
||||
<!-- hands -->
|
||||
<path d="M176 760 C172 732 190 716 212 718 C232 720 238 742 232 762 C226 782 182 784 176 760 Z" fill="#f6d6c4"/>
|
||||
<path d="M568 760 C572 732 554 716 532 718 C512 720 506 742 512 762 C518 782 562 784 568 760 Z" fill="#f6d6c4"/>
|
||||
<path d="M208 726 L222 744 M538 726 L522 744" stroke-width="2.5"/>
|
||||
</g>
|
||||
<g id="bust" clip-path="url(#chest)">
|
||||
<use href="#backhair"/><use href="#ribbon"/><use href="#bustbody"/><use href="#headfront"/><use href="#hairpin"/><use href="#prop"/>
|
||||
</g>
|
||||
|
||||
<g id="chibibody" stroke="#2a1d40" stroke-width="2.5" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M112 186 L76 202 C58 262 48 340 36 404 L192 404 C180 340 170 262 150 202 Z" fill="#241a33"/>
|
||||
<path d="M132 200 L150 202 C170 262 180 340 192 404 L160 404 C150 330 144 260 132 200 Z" fill="#150f20" stroke="none"/>
|
||||
<path d="M114 214 L112 404" fill="none" stroke="#8a6a9a" stroke-width="4"/>
|
||||
<path d="M60 330 l8 -8 l8 8 l-8 8 Z M150 330 l8 -8 l8 8 l-8 8 Z" fill="none" stroke="#8a6a9a" stroke-width="2"/>
|
||||
<path d="M70 404 C70 418 104 418 104 404 Z M124 404 C124 418 158 418 158 404 Z" fill="#150f20"/>
|
||||
<path d="M96 190 C96 180 132 180 132 190 L130 206 L98 206 Z" fill="#241a33"/>
|
||||
<circle cx="114" cy="210" r="6" fill="#c8a24a"/>
|
||||
<circle cx="114" cy="210" r="3" fill="#b77cff" stroke="none"/>
|
||||
<path d="M80 206 C62 230 56 254 58 272 L96 268 C94 250 96 232 100 222 Z" fill="#241a33"/>
|
||||
<path d="M148 206 C166 230 172 254 170 272 L132 268 C134 250 132 232 128 222 Z" fill="#241a33"/>
|
||||
<ellipse cx="114" cy="244" rx="80" ry="34" fill="#b77cff" opacity="0.25" stroke="none"/>
|
||||
<path d="M58 262 L114 266 L170 262 L170 290 L114 294 L58 290 Z" fill="#241a33"/>
|
||||
<path d="M62 256 C82 248 100 250 114 258 L114 284 C100 276 82 276 62 284 Z M114 258 C128 250 146 248 166 256 L166 284 C146 276 128 276 114 284 Z" fill="#efe6d8"/>
|
||||
<rect x="104" y="214" width="20" height="20" rx="2" transform="rotate(45 114 224)" fill="none" stroke="#b77cff" stroke-width="3"/>
|
||||
<circle cx="58" cy="278" r="10" fill="#f6d6c4"/><circle cx="170" cy="278" r="10" fill="#f6d6c4"/>
|
||||
</g>
|
||||
<clipPath id="card"><path d="M58 14 L792 14 L752 786 L18 786 Z"/></clipPath>
|
||||
</defs>
|
||||
<rect width="1200" height="800" fill="#efeae0"/>
|
||||
<path d="M58 14 L792 14 L752 786 L18 786 Z" fill="url(#glow)"/>
|
||||
<g clip-path="url(#card)"><g transform="translate(66 6) scale(0.985)"><use href="#bust" filter="url(#outline)"/></g></g>
|
||||
<path d="M58 14 L792 14 L752 786 L18 786 Z" fill="none" stroke="#a99be0" stroke-width="4"/>
|
||||
<text x="78" y="44" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#a99be0" letter-spacing="4">BUST · FOUND IT</text>
|
||||
|
||||
<text x="820" y="40" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#2a1d40" letter-spacing="3">FULL BODY · 2.5 HEADS</text>
|
||||
<g transform="translate(830 52)" filter="url(#outline)">
|
||||
<g transform="scale(0.34)"><use href="#backhair"/><use href="#ribbon"/></g>
|
||||
<use href="#chibibody"/>
|
||||
<g transform="scale(0.34)"><use href="#headfront"/><use href="#hairpin"/></g>
|
||||
</g>
|
||||
|
||||
<text x="1050" y="40" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#2a1d40" letter-spacing="3">SILHOUETTE</text>
|
||||
<g transform="translate(1040 54) scale(0.19)"><use href="#bust" filter="url(#sil)"/></g>
|
||||
<g transform="translate(1078 230) scale(0.06)"><use href="#bust" filter="url(#sil)"/></g>
|
||||
<text x="1050" y="300" font-family="Segoe UI, Arial, sans-serif" font-size="11" fill="#555">48 px</text>
|
||||
|
||||
<text x="820" y="540" font-family="Segoe UI, Arial, sans-serif" font-size="30" font-weight="700" fill="#2a1d40">LIBBY · A</text>
|
||||
<text x="820" y="570" font-family="Segoe UI, Arial, sans-serif" font-size="18" fill="#2a1d40" letter-spacing="2">THE GLOWING TOME</text>
|
||||
<text font-family="Segoe UI, Arial, sans-serif" font-size="14" fill="#222"><tspan x="820" y="604">Hook: the swept lavender fringe that hooks into a curl,</tspan><tspan x="820" y="623">round glasses, and an open tome glowing up at her face.</tspan></text>
|
||||
<g font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#333">
|
||||
<rect x="820" y="660" width="52" height="52" fill="#a99be0" stroke="#2a1d40" stroke-width="2"/><text x="820" y="728">#a99be0</text>
|
||||
<rect x="880" y="660" width="52" height="52" fill="#2a1d40" stroke="#2a1d40" stroke-width="2"/><text x="880" y="728">#2a1d40</text>
|
||||
<rect x="940" y="660" width="52" height="52" fill="#241a33" stroke="#2a1d40" stroke-width="2"/><text x="940" y="728">#241a33</text>
|
||||
<rect x="1000" y="660" width="52" height="52" fill="#f6d6c4" stroke="#2a1d40" stroke-width="2"/><text x="1000" y="728">#f6d6c4</text>
|
||||
<rect x="1060" y="660" width="52" height="52" fill="#c8a24a" stroke="#2a1d40" stroke-width="2"/><text x="1060" y="728">#c8a24a</text>
|
||||
<rect x="1120" y="660" width="52" height="52" fill="#b77cff" stroke="#2a1d40" stroke-width="2"/><text x="1120" y="728">#b77cff</text>
|
||||
</g>
|
||||
<text x="820" y="760" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#555">hair key · line · robe · skin · gold · tome glow</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 291 KiB |
|
|
@ -1,217 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<!-- Libby, take B: The Skull Stamp. Three takes on the canon design (cotsc-praxis character sheet). Hand-authored. -->
|
||||
<defs>
|
||||
<filter id="outline" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feMorphology in="SourceAlpha" operator="dilate" radius="3.2" result="d"/>
|
||||
<feFlood flood-color="#2a1d40"/>
|
||||
<feComposite in2="d" operator="in" result="o"/>
|
||||
<feMerge><feMergeNode in="o"/><feMergeNode in="SourceGraphic"/></feMerge>
|
||||
</filter>
|
||||
<filter id="sil" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feMorphology in="SourceAlpha" operator="dilate" radius="3.2" result="d"/>
|
||||
<feColorMatrix in="d" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0"/>
|
||||
</filter>
|
||||
<radialGradient id="glow" cx="0.46" cy="0.45" r="0.62">
|
||||
<stop offset="0" stop-color="#2d2150"/>
|
||||
<stop offset="1" stop-color="#07111a"/>
|
||||
</radialGradient>
|
||||
<clipPath id="chest"><rect x="-200" y="-100" width="1100" height="890"/></clipPath>
|
||||
|
||||
<g id="backhair" stroke="#2a1d40" stroke-width="3" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M330 118 C200 116 110 200 106 320 C96 372 50 404 72 468 C88 512 36 540 54 604 C66 652 22 692 46 744 C54 764 44 782 38 790 L618 790 C628 770 644 740 628 700 C614 650 654 610 628 556 C610 516 640 466 608 416 C586 376 594 330 568 290 C548 190 452 118 330 118 Z" fill="#a99be0"/>
|
||||
<path d="M196 470 C226 560 206 690 226 790 L474 790 C484 690 462 560 486 470 Z" fill="#7d6fc4" stroke="none"/>
|
||||
<path d="M124 330 C114 420 130 470 114 540 C102 600 122 650 106 724 M156 440 C146 510 166 566 146 646 M564 330 C576 420 560 470 578 540 C590 600 570 660 584 730" fill="none" stroke="#7d6fc4" stroke-width="4"/>
|
||||
<path d="M578 520 C598 570 584 620 596 676" fill="none" stroke="#d8d1f7" stroke-width="4"/>
|
||||
</g>
|
||||
|
||||
<g id="ribbon" transform="translate(-14 -40) translate(160 205) scale(1.6) translate(-160 -205)" stroke="#2a1d40" stroke-width="3" stroke-linejoin="round">
|
||||
<path d="M150 222 C120 290 108 360 98 432 L122 420 L134 448 C140 370 152 296 166 226 Z" fill="#241a33"/>
|
||||
<path d="M160 204 C112 146 52 140 46 186 C42 222 104 232 160 214 Z" fill="#241a33"/>
|
||||
<path d="M160 210 C104 224 66 262 84 292 C102 316 142 262 164 220 Z" fill="#241a33"/>
|
||||
<path d="M60 190 C66 170 96 168 120 182" fill="none" stroke="#a99be0" stroke-width="3"/>
|
||||
<path d="M86 186 l10 -10 l10 10 l-10 10 Z M104 252 l9 -9 l9 9 l-9 9 Z M124 340 l8 -8 l8 8 l-8 8 Z" fill="none" stroke="#8a6a9a" stroke-width="3"/>
|
||||
<circle cx="162" cy="210" r="15" fill="#241a33"/>
|
||||
<path d="M156 204 l6 -6 l6 6 l-6 6 Z" fill="#c8a24a" stroke="none"/>
|
||||
</g>
|
||||
|
||||
<g id="hairpin" transform="translate(222 214) scale(1.0) rotate(-12)" stroke="#2a1d40" stroke-width="3" stroke-linejoin="round">
|
||||
<g transform="rotate(35)"><path d="M-30 -5 C-38 -14 -50 -8 -44 0 C-50 8 -38 14 -30 5 L30 5 C38 14 50 8 44 0 C50 -8 38 -14 30 -5 Z" fill="#efe6d8"/></g>
|
||||
<g transform="rotate(-35)"><path d="M-30 -5 C-38 -14 -50 -8 -44 0 C-50 8 -38 14 -30 5 L30 5 C38 14 50 8 44 0 C50 -8 38 -14 30 -5 Z" fill="#efe6d8"/></g>
|
||||
<path d="M-20 -4 L20 -4" stroke="#cfc2ae" stroke-width="2" transform="rotate(-35)"/>
|
||||
</g>
|
||||
|
||||
<g id="headfront" stroke-linejoin="round" stroke-linecap="round">
|
||||
<!-- face -->
|
||||
<path d="M172 300 C166 400 184 476 232 518 C268 548 312 562 350 561 C390 557 430 528 450 484 C462 456 470 430 470 398 C476 360 472 330 464 296 Z" fill="#f6d6c4" stroke="#2a1d40" stroke-width="3"/>
|
||||
<path d="M452 404 C466 452 452 500 412 540 C440 514 456 472 448 432 Z" fill="#e6b4a0"/>
|
||||
<clipPath id="faceclip"><path d="M172 300 C166 400 184 476 232 518 C268 548 312 562 350 561 C390 557 430 528 450 484 C462 456 470 430 470 398 C476 360 472 330 464 296 Z"/></clipPath>
|
||||
<path clip-path="url(#faceclip)" transform="translate(-3 11)" d="M200 162 C282 136 424 148 482 228 C506 268 512 320 522 360 C530 396 570 418 594 396 C604 386 600 368 588 366 C592 382 580 396 560 396 C540 396 524 392 510 398 C496 380 478 358 460 344 C458 364 456 386 452 404 C430 380 404 346 380 330 C384 356 382 376 378 394 C356 368 330 336 304 318 C308 340 304 362 300 378 C280 352 252 326 230 318 C224 282 200 252 188 240 C178 210 184 178 200 162 Z" fill="#e6b4a0"/>
|
||||
<path d="M454 440 C460 470 452 500 432 526" fill="none" stroke="#a99be0" stroke-width="4"/>
|
||||
<!-- near ear with gold drop -->
|
||||
<path d="M186 410 C164 398 152 424 160 448 C166 466 180 472 194 462 Z" fill="#f6d6c4" stroke="#2a1d40" stroke-width="3"/>
|
||||
<path d="M178 426 C170 432 172 446 180 452" fill="none" stroke="#e6b4a0" stroke-width="3"/>
|
||||
<circle cx="170" cy="474" r="5" fill="#c8a24a" stroke="#2a1d40" stroke-width="2"/>
|
||||
<path d="M170 480 L176 492 L170 504 L164 492 Z" fill="#c8a24a" stroke="#2a1d40" stroke-width="2"/>
|
||||
<!-- blush -->
|
||||
<ellipse cx="262" cy="508" rx="26" ry="9" fill="#f29aa6" opacity="0.5"/>
|
||||
<ellipse cx="428" cy="506" rx="16" ry="8" fill="#f29aa6" opacity="0.5"/>
|
||||
<path d="M250 504 l6 -8 M262 506 l6 -8 M274 506 l6 -8" stroke="#dd7f8c" stroke-width="2" opacity="0.75"/>
|
||||
|
||||
<clipPath id="eyeN"><path d="M226 420 C244 394 302 390 328 412 L326 476 C306 494 260 496 238 484 Z"/></clipPath>
|
||||
<path d="M226 420 C244 394 302 390 328 412 L326 476 C306 494 260 496 238 484 Z" fill="#ffffff"/>
|
||||
<g clip-path="url(#eyeN)">
|
||||
<ellipse cx="282" cy="448" rx="35" ry="47" fill="#6a64a0" stroke="#2a1d40" stroke-width="3"/>
|
||||
<path d="M248.2 436 A35 47 0 0 1 315.8 436 Q282 450 248.2 436 Z" fill="#2a1d40" opacity="0.85"/>
|
||||
<path d="M255 474 C265 494 299 494 309 474 C297 484 267 484 255 474 Z" fill="#bdb6ec"/>
|
||||
<ellipse cx="283" cy="452" rx="13" ry="21" fill="#2a1d40"/>
|
||||
</g>
|
||||
<ellipse cx="268" cy="430" rx="11" ry="14" fill="#fff"/>
|
||||
<circle cx="300" cy="470" r="5" fill="#fff"/>
|
||||
<path d="M220 428 C238 394 300 386 334 412" fill="none" stroke="#2a1d40" stroke-width="8" stroke-linecap="round"/>
|
||||
<path d="M222 424 L206 414 L224 418 Z M228 412 L214 398 L232 406 Z" fill="#2a1d40" stroke="#2a1d40" stroke-width="2.5" stroke-linejoin="round"/>
|
||||
<path d="M242 486 C264 496 302 494 320 480" fill="none" stroke="#2a1d40" stroke-width="2.5" stroke-linecap="round"/>
|
||||
<clipPath id="eyeF"><path d="M378 414 C394 398 430 398 448 414 L447 474 C434 488 398 490 384 478 Z"/></clipPath>
|
||||
<path d="M378 414 C394 398 430 398 448 414 L447 474 C434 488 398 490 384 478 Z" fill="#ffffff"/>
|
||||
<g clip-path="url(#eyeF)">
|
||||
<ellipse cx="412" cy="448" rx="27" ry="46" fill="#6a64a0" stroke="#2a1d40" stroke-width="3"/>
|
||||
<path d="M385.9 436 A27 46 0 0 1 438.1 436 Q412 450 385.9 436 Z" fill="#2a1d40" opacity="0.85"/>
|
||||
<path d="M393 474 C403 494 421 494 431 474 C419 484 405 484 393 474 Z" fill="#bdb6ec"/>
|
||||
<ellipse cx="413" cy="452" rx="10" ry="20" fill="#2a1d40"/>
|
||||
</g>
|
||||
<ellipse cx="402" cy="430" rx="9" ry="13" fill="#fff"/>
|
||||
<circle cx="422" cy="470" r="4" fill="#fff"/>
|
||||
<path d="M374 418 C392 394 432 392 452 414" fill="none" stroke="#2a1d40" stroke-width="7" stroke-linecap="round"/>
|
||||
<path d="M450 412 L464 404 L455 418 Z" fill="#2a1d40" stroke="#2a1d40" stroke-width="2.5" stroke-linejoin="round"/>
|
||||
<path d="M388 482 C404 490 428 490 440 480" fill="none" stroke="#2a1d40" stroke-width="2.5" stroke-linecap="round"/>
|
||||
<!-- nose and mouth -->
|
||||
<path d="M362 470 L367 480 L360 482" fill="none" stroke="#c98a76" stroke-width="2.5" stroke-linecap="round"/>
|
||||
<path d="M330 506 C342 512 360 511 374 500" fill="none" stroke="#2a1d40" stroke-width="3" stroke-linecap="round"/><path d="M374 500 l6 -3" stroke="#2a1d40" stroke-width="2.5" stroke-linecap="round"/>
|
||||
<!-- round glasses, thin dark frames -->
|
||||
<g fill="none" stroke="#2a1d40">
|
||||
<path d="M224 436 L184 424" stroke-width="4"/>
|
||||
<circle cx="280" cy="444" r="58" stroke-width="4.5"/>
|
||||
<ellipse cx="413" cy="442" rx="43" ry="56" stroke-width="4.5"/>
|
||||
<path d="M338 440 C350 430 360 430 370 438" stroke-width="4.5"/>
|
||||
<path d="M246 404 C256 394 268 390 280 390" stroke="#ffffff" stroke-width="5" opacity="0.75"/>
|
||||
<path d="M392 398 C398 392 406 390 412 390" stroke="#ffffff" stroke-width="4" opacity="0.75"/>
|
||||
</g>
|
||||
<!-- side lock tucked behind the ear -->
|
||||
<path d="M190 236 C170 280 166 330 174 392 C178 408 188 418 198 418 C194 380 204 332 232 316 Z" fill="#a99be0" stroke="#2a1d40" stroke-width="3"/>
|
||||
<!-- long front lock over the far shoulder -->
|
||||
<path d="M468 300 C500 346 502 402 488 452 C476 502 502 544 498 594 C494 644 518 684 508 724 C544 686 536 644 540 602 C544 552 522 502 530 452 C538 392 522 334 492 286 Z" fill="#a99be0" stroke="#2a1d40" stroke-width="3.5"/>
|
||||
<path d="M498 330 C514 380 512 420 506 456 C500 500 520 540 516 590" fill="none" stroke="#7d6fc4" stroke-width="3.5"/>
|
||||
<path d="M532 470 C536 520 528 560 534 610" fill="none" stroke="#d8d1f7" stroke-width="4"/>
|
||||
<!-- swept fringe, parted at the back, hooking into the canon curl at the front -->
|
||||
<path d="M200 162 C282 136 424 148 482 228 C506 268 512 320 522 360 C530 396 570 418 594 396 C604 386 600 368 588 366 C592 382 580 396 560 396 C540 396 524 392 510 398 C496 380 478 358 460 344 C458 364 456 386 452 404 C430 380 404 346 380 330 C384 356 382 376 378 394 C356 368 330 336 304 318 C308 340 304 362 300 378 C280 352 252 326 230 318 C224 282 200 252 188 240 C178 210 184 178 200 162 Z" fill="#a99be0" stroke="#2a1d40" stroke-width="3.5"/>
|
||||
<path d="M236 200 C306 176 386 182 446 214 L440 230 C384 202 306 198 242 216 Z" fill="#d8d1f7"/>
|
||||
<path d="M300 168 C322 230 334 290 352 360 M382 174 C410 240 420 300 426 372 M250 192 C270 240 280 290 290 340 M454 210 C484 270 500 330 520 380" fill="none" stroke="#7d6fc4" stroke-width="3.5"/>
|
||||
<path d="M492 260 C510 300 514 340 520 376" fill="none" stroke="#d8d1f7" stroke-width="4"/>
|
||||
<path d="M250 372 C268 366 296 366 314 372" fill="none" stroke="#6c5fb0" stroke-width="5" stroke-linecap="round"/><path d="M384 344 C398 326 426 324 442 338" fill="none" stroke="#6c5fb0" stroke-width="5" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<g id="bustbody" stroke="#2a1d40" stroke-width="3" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M314 530 L314 600 L384 600 L380 530 Z" fill="#f6d6c4"/>
|
||||
<path d="M314 538 C338 560 362 560 382 546 L383 580 L315 584 Z" fill="#e6b4a0" stroke="none"/>
|
||||
<path d="M92 790 C96 700 148 650 240 628 L300 610 L402 610 L472 628 C554 650 604 700 614 790 Z" fill="#241a33"/>
|
||||
<path d="M470 640 C540 662 584 704 592 790 L614 790 C604 700 554 650 472 628 Z" fill="#150f20" stroke="none"/>
|
||||
<path d="M530 660 C580 690 604 734 610 790" fill="none" stroke="#a99be0" stroke-width="4"/>
|
||||
<path d="M130 700 C150 670 190 648 236 636" fill="none" stroke="#8a6a9a" stroke-width="3"/>
|
||||
<!-- standing collar -->
|
||||
<path d="M290 620 C286 592 296 572 314 564 L386 564 C404 572 412 592 410 622 L350 654 Z" fill="#241a33"/>
|
||||
<path d="M300 612 C300 596 306 584 316 578 L384 578 C394 584 400 596 400 612" fill="none" stroke="#8a6a9a" stroke-width="3"/>
|
||||
<path d="M350 668 L338 790" fill="none" stroke="#8a6a9a" stroke-width="7"/>
|
||||
<path d="M350 668 L338 790" fill="none" stroke="#2a1d40" stroke-width="1.5"/>
|
||||
<path d="M190 724 l14 -14 l14 14 l-14 14 Z M486 724 l14 -14 l14 14 l-14 14 Z" fill="none" stroke="#8a6a9a" stroke-width="3"/>
|
||||
<path d="M204 724 l0 0" fill="none"/>
|
||||
<!-- brooch -->
|
||||
<circle cx="350" cy="652" r="17" fill="#c8a24a"/>
|
||||
<circle cx="350" cy="652" r="9" fill="#b77cff" stroke-width="2"/>
|
||||
<circle cx="347" cy="649" r="3" fill="#ffffff" stroke="none"/>
|
||||
</g>
|
||||
|
||||
<g id="prop" stroke="#2a1d40" stroke-width="3" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M498 790 C496 708 508 632 520 584 L612 580 C624 650 634 722 644 790 Z" fill="#241a33"/>
|
||||
<path d="M590 584 C604 650 616 720 626 790 L644 790 C634 722 624 650 612 580 Z" fill="#150f20" stroke="none"/>
|
||||
<path d="M516 600 L616 594" fill="none" stroke="#8a6a9a" stroke-width="7"/>
|
||||
<path d="M516 600 L616 594" fill="none" stroke-width="1.5"/>
|
||||
<g transform="rotate(10 566 500)">
|
||||
<!-- base and violet rubber face, shown to the viewer -->
|
||||
<path d="M522 556 L612 556 L612 590 L522 590 Z" fill="#c8a24a"/>
|
||||
<path d="M522 576 L612 576 L612 590 L522 590 Z" fill="#957428" stroke="none"/>
|
||||
<path d="M516 590 L618 590 L618 606 L516 606 Z" fill="#b77cff"/>
|
||||
<!-- handle -->
|
||||
<path d="M552 460 L580 460 L584 556 L548 556 Z" fill="#241a33"/>
|
||||
<path d="M546 456 L586 456 L586 470 L546 470 Z" fill="#c8a24a"/>
|
||||
<!-- the skull -->
|
||||
<path d="M534 432 C530 396 548 380 566 380 C584 380 602 396 598 432 C596 446 588 452 584 458 L548 458 C544 452 536 446 534 432 Z" fill="#efe6d8"/>
|
||||
<path d="M584 392 C596 404 598 424 590 444 C588 450 586 454 584 458 L576 458 C590 440 592 412 584 392 Z" fill="#cfc2ae" stroke="none"/>
|
||||
<ellipse cx="554" cy="424" rx="9" ry="10" fill="#2a1d40"/>
|
||||
<ellipse cx="580" cy="424" rx="9" ry="10" fill="#2a1d40"/>
|
||||
<path d="M566 434 L562 444 L570 444 Z" fill="#2a1d40" stroke-width="1.5"/>
|
||||
<path d="M556 452 L556 458 M566 452 L566 458 M576 452 L576 458" stroke-width="2"/>
|
||||
</g>
|
||||
<!-- fist around the handle -->
|
||||
<path d="M520 520 C520 496 540 486 564 488 C588 490 600 504 598 528 C596 552 578 562 556 560 C534 558 520 544 520 520 Z" fill="#f6d6c4"/>
|
||||
<path d="M532 534 C550 530 572 530 592 532 M534 548 C552 546 570 546 588 548" fill="none" stroke-width="2.2"/>
|
||||
<path d="M522 506 C538 494 572 494 592 506 C588 516 560 518 528 518 Z" fill="#f6d6c4"/>
|
||||
<path d="M592 512 C598 530 594 548 582 556" fill="none" stroke="#e6b4a0" stroke-width="4"/>
|
||||
<g fill="#b77cff" stroke="none"><path d="M630 470 l5 -14 l5 14 l14 5 l-14 5 l-5 14 l-5 -14 l-14 -5 Z"/><path d="M628 560 l3 -9 l3 9 l9 3 l-9 3 l-3 9 l-3 -9 l-9 -3 Z"/></g>
|
||||
</g>
|
||||
<g id="bust" clip-path="url(#chest)">
|
||||
<use href="#backhair"/><use href="#ribbon"/><use href="#bustbody"/><use href="#headfront"/><use href="#hairpin"/><use href="#prop"/>
|
||||
</g>
|
||||
|
||||
<g id="chibibody" stroke="#2a1d40" stroke-width="2.5" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M112 186 L76 202 C58 262 48 340 36 404 L192 404 C180 340 170 262 150 202 Z" fill="#241a33"/>
|
||||
<path d="M132 200 L150 202 C170 262 180 340 192 404 L160 404 C150 330 144 260 132 200 Z" fill="#150f20" stroke="none"/>
|
||||
<path d="M114 214 L112 404" fill="none" stroke="#8a6a9a" stroke-width="4"/>
|
||||
<path d="M60 330 l8 -8 l8 8 l-8 8 Z M150 330 l8 -8 l8 8 l-8 8 Z" fill="none" stroke="#8a6a9a" stroke-width="2"/>
|
||||
<path d="M70 404 C70 418 104 418 104 404 Z M124 404 C124 418 158 418 158 404 Z" fill="#150f20"/>
|
||||
<path d="M96 190 C96 180 132 180 132 190 L130 206 L98 206 Z" fill="#241a33"/>
|
||||
<circle cx="114" cy="210" r="6" fill="#c8a24a"/>
|
||||
<circle cx="114" cy="210" r="3" fill="#b77cff" stroke="none"/>
|
||||
<path d="M80 206 C58 236 46 272 42 304 L80 310 C82 278 90 250 100 228 Z" fill="#241a33"/>
|
||||
<circle cx="62" cy="314" r="10" fill="#f6d6c4"/>
|
||||
<path d="M146 208 C168 196 182 176 188 154 L170 146 C164 166 154 182 138 194 Z" fill="#241a33"/>
|
||||
<g transform="rotate(10 184 120)">
|
||||
<path d="M168 128 L200 128 L200 140 L168 140 Z" fill="#c8a24a"/>
|
||||
<path d="M166 140 L202 140 L202 146 L166 146 Z" fill="#b77cff"/>
|
||||
<path d="M178 104 L190 104 L190 128 L178 128 Z" fill="#241a33"/>
|
||||
<path d="M172 92 C170 78 178 72 184 72 C190 72 198 78 196 92 C196 98 192 102 190 104 L178 104 C176 102 172 98 172 92 Z" fill="#efe6d8"/>
|
||||
<circle cx="180" cy="90" r="3" fill="#2a1d40" stroke="none"/><circle cx="189" cy="90" r="3" fill="#2a1d40" stroke="none"/>
|
||||
</g>
|
||||
<circle cx="180" cy="150" r="10" fill="#f6d6c4"/>
|
||||
</g>
|
||||
<clipPath id="card"><path d="M58 14 L792 14 L752 786 L18 786 Z"/></clipPath>
|
||||
</defs>
|
||||
<rect width="1200" height="800" fill="#efeae0"/>
|
||||
<path d="M58 14 L792 14 L752 786 L18 786 Z" fill="url(#glow)"/>
|
||||
<g clip-path="url(#card)"><g transform="translate(66 6) scale(0.985)"><use href="#bust" filter="url(#outline)"/></g></g>
|
||||
<path d="M58 14 L792 14 L752 786 L18 786 Z" fill="none" stroke="#a99be0" stroke-width="4"/>
|
||||
<text x="78" y="44" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#a99be0" letter-spacing="4">BUST · SPECIMEN</text>
|
||||
|
||||
<text x="820" y="40" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#2a1d40" letter-spacing="3">FULL BODY · 2.5 HEADS</text>
|
||||
<g transform="translate(830 52)" filter="url(#outline)">
|
||||
<g transform="scale(0.34)"><use href="#backhair"/><use href="#ribbon"/></g>
|
||||
<use href="#chibibody"/>
|
||||
<g transform="scale(0.34)"><use href="#headfront"/><use href="#hairpin"/></g>
|
||||
</g>
|
||||
|
||||
<text x="1050" y="40" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#2a1d40" letter-spacing="3">SILHOUETTE</text>
|
||||
<g transform="translate(1040 54) scale(0.19)"><use href="#bust" filter="url(#sil)"/></g>
|
||||
<g transform="translate(1078 230) scale(0.06)"><use href="#bust" filter="url(#sil)"/></g>
|
||||
<text x="1050" y="300" font-family="Segoe UI, Arial, sans-serif" font-size="11" fill="#555">48 px</text>
|
||||
|
||||
<text x="820" y="540" font-family="Segoe UI, Arial, sans-serif" font-size="30" font-weight="700" fill="#2a1d40">LIBBY · B</text>
|
||||
<text x="820" y="570" font-family="Segoe UI, Arial, sans-serif" font-size="18" fill="#2a1d40" letter-spacing="2">THE SKULL STAMP</text>
|
||||
<text font-family="Segoe UI, Arial, sans-serif" font-size="14" fill="#222"><tspan x="820" y="604">Hook: the black diamond ribbon, enlarged into a wing</tspan><tspan x="820" y="623">behind her head; the skull stamp raised as evidence.</tspan></text>
|
||||
<g font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#333">
|
||||
<rect x="820" y="660" width="52" height="52" fill="#a99be0" stroke="#2a1d40" stroke-width="2"/><text x="820" y="728">#a99be0</text>
|
||||
<rect x="880" y="660" width="52" height="52" fill="#2a1d40" stroke="#2a1d40" stroke-width="2"/><text x="880" y="728">#2a1d40</text>
|
||||
<rect x="940" y="660" width="52" height="52" fill="#241a33" stroke="#2a1d40" stroke-width="2"/><text x="940" y="728">#241a33</text>
|
||||
<rect x="1000" y="660" width="52" height="52" fill="#f6d6c4" stroke="#2a1d40" stroke-width="2"/><text x="1000" y="728">#f6d6c4</text>
|
||||
<rect x="1060" y="660" width="52" height="52" fill="#c8a24a" stroke="#2a1d40" stroke-width="2"/><text x="1060" y="728">#c8a24a</text>
|
||||
<rect x="1120" y="660" width="52" height="52" fill="#b77cff" stroke="#2a1d40" stroke-width="2"/><text x="1120" y="728">#b77cff</text>
|
||||
</g>
|
||||
<text x="820" y="760" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#555">hair key · line · robe · skin · gold · tome glow</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 278 KiB |
|
|
@ -1,187 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<!-- Libby, take C: Quiet Please. Three takes on the canon design (cotsc-praxis character sheet). Hand-authored. -->
|
||||
<defs>
|
||||
<filter id="outline" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feMorphology in="SourceAlpha" operator="dilate" radius="3.2" result="d"/>
|
||||
<feFlood flood-color="#2a1d40"/>
|
||||
<feComposite in2="d" operator="in" result="o"/>
|
||||
<feMerge><feMergeNode in="o"/><feMergeNode in="SourceGraphic"/></feMerge>
|
||||
</filter>
|
||||
<filter id="sil" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feMorphology in="SourceAlpha" operator="dilate" radius="3.2" result="d"/>
|
||||
<feColorMatrix in="d" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0"/>
|
||||
</filter>
|
||||
<radialGradient id="glow" cx="0.46" cy="0.45" r="0.62">
|
||||
<stop offset="0" stop-color="#2d2150"/>
|
||||
<stop offset="1" stop-color="#07111a"/>
|
||||
</radialGradient>
|
||||
<clipPath id="chest"><rect x="-200" y="-100" width="1100" height="890"/></clipPath>
|
||||
|
||||
<g id="backhair" stroke="#2a1d40" stroke-width="3" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M330 118 C200 116 110 200 106 320 C96 372 50 404 72 468 C88 512 36 540 54 604 C66 652 22 692 46 744 C54 764 44 782 38 790 L618 790 C628 770 644 740 628 700 C614 650 654 610 628 556 C610 516 640 466 608 416 C586 376 594 330 568 290 C548 190 452 118 330 118 Z" fill="#a99be0"/>
|
||||
<path d="M196 470 C226 560 206 690 226 790 L474 790 C484 690 462 560 486 470 Z" fill="#7d6fc4" stroke="none"/>
|
||||
<path d="M124 330 C114 420 130 470 114 540 C102 600 122 650 106 724 M156 440 C146 510 166 566 146 646 M564 330 C576 420 560 470 578 540 C590 600 570 660 584 730" fill="none" stroke="#7d6fc4" stroke-width="4"/>
|
||||
<path d="M578 520 C598 570 584 620 596 676" fill="none" stroke="#d8d1f7" stroke-width="4"/>
|
||||
</g>
|
||||
|
||||
<g id="ribbon" transform="translate(0 0) translate(160 205) scale(1.0) translate(-160 -205)" stroke="#2a1d40" stroke-width="3" stroke-linejoin="round">
|
||||
<path d="M150 222 C120 290 108 360 98 432 L122 420 L134 448 C140 370 152 296 166 226 Z" fill="#241a33"/>
|
||||
<path d="M160 204 C112 146 52 140 46 186 C42 222 104 232 160 214 Z" fill="#241a33"/>
|
||||
<path d="M160 210 C104 224 66 262 84 292 C102 316 142 262 164 220 Z" fill="#241a33"/>
|
||||
<path d="M60 190 C66 170 96 168 120 182" fill="none" stroke="#a99be0" stroke-width="3"/>
|
||||
<path d="M86 186 l10 -10 l10 10 l-10 10 Z M104 252 l9 -9 l9 9 l-9 9 Z M124 340 l8 -8 l8 8 l-8 8 Z" fill="none" stroke="#8a6a9a" stroke-width="3"/>
|
||||
<circle cx="162" cy="210" r="15" fill="#241a33"/>
|
||||
<path d="M156 204 l6 -6 l6 6 l-6 6 Z" fill="#c8a24a" stroke="none"/>
|
||||
</g>
|
||||
|
||||
<g id="hairpin" transform="translate(196 168) scale(1.5) rotate(-12)" stroke="#2a1d40" stroke-width="3" stroke-linejoin="round">
|
||||
<g transform="rotate(35)"><path d="M-30 -5 C-38 -14 -50 -8 -44 0 C-50 8 -38 14 -30 5 L30 5 C38 14 50 8 44 0 C50 -8 38 -14 30 -5 Z" fill="#efe6d8"/></g>
|
||||
<g transform="rotate(-35)"><path d="M-30 -5 C-38 -14 -50 -8 -44 0 C-50 8 -38 14 -30 5 L30 5 C38 14 50 8 44 0 C50 -8 38 -14 30 -5 Z" fill="#efe6d8"/></g>
|
||||
<path d="M-20 -4 L20 -4" stroke="#cfc2ae" stroke-width="2" transform="rotate(-35)"/>
|
||||
</g>
|
||||
|
||||
<g id="headfront" stroke-linejoin="round" stroke-linecap="round">
|
||||
<!-- face -->
|
||||
<path d="M172 300 C166 400 184 476 232 518 C268 548 312 562 350 561 C390 557 430 528 450 484 C462 456 470 430 470 398 C476 360 472 330 464 296 Z" fill="#f6d6c4" stroke="#2a1d40" stroke-width="3"/>
|
||||
<path d="M452 404 C466 452 452 500 412 540 C440 514 456 472 448 432 Z" fill="#e6b4a0"/>
|
||||
<clipPath id="faceclip"><path d="M172 300 C166 400 184 476 232 518 C268 548 312 562 350 561 C390 557 430 528 450 484 C462 456 470 430 470 398 C476 360 472 330 464 296 Z"/></clipPath>
|
||||
<path clip-path="url(#faceclip)" transform="translate(-3 11)" d="M200 162 C282 136 424 148 482 228 C506 268 512 320 522 360 C530 396 570 418 594 396 C604 386 600 368 588 366 C592 382 580 396 560 396 C540 396 524 392 510 398 C496 380 478 358 460 344 C458 364 456 386 452 404 C430 380 404 346 380 330 C384 356 382 376 378 394 C356 368 330 336 304 318 C308 340 304 362 300 378 C280 352 252 326 230 318 C224 282 200 252 188 240 C178 210 184 178 200 162 Z" fill="#e6b4a0"/>
|
||||
<path d="M454 440 C460 470 452 500 432 526" fill="none" stroke="#a99be0" stroke-width="4"/>
|
||||
<!-- near ear with gold drop -->
|
||||
<path d="M186 410 C164 398 152 424 160 448 C166 466 180 472 194 462 Z" fill="#f6d6c4" stroke="#2a1d40" stroke-width="3"/>
|
||||
<path d="M178 426 C170 432 172 446 180 452" fill="none" stroke="#e6b4a0" stroke-width="3"/>
|
||||
<circle cx="170" cy="474" r="5" fill="#c8a24a" stroke="#2a1d40" stroke-width="2"/>
|
||||
<path d="M170 480 L176 492 L170 504 L164 492 Z" fill="#c8a24a" stroke="#2a1d40" stroke-width="2"/>
|
||||
<!-- blush -->
|
||||
<ellipse cx="262" cy="508" rx="26" ry="9" fill="#f29aa6" opacity="0.5"/>
|
||||
<ellipse cx="428" cy="506" rx="16" ry="8" fill="#f29aa6" opacity="0.5"/>
|
||||
<path d="M250 504 l6 -8 M262 506 l6 -8 M274 506 l6 -8" stroke="#dd7f8c" stroke-width="2" opacity="0.75"/>
|
||||
|
||||
<clipPath id="eyeN"><path d="M226 420 C244 394 302 390 328 412 L326 476 C306 494 260 496 238 484 Z"/></clipPath>
|
||||
<path d="M226 420 C244 394 302 390 328 412 L326 476 C306 494 260 496 238 484 Z" fill="#ffffff"/>
|
||||
<g clip-path="url(#eyeN)">
|
||||
<ellipse cx="282" cy="448" rx="35" ry="47" fill="#6a64a0" stroke="#2a1d40" stroke-width="3"/>
|
||||
<path d="M248.2 436 A35 47 0 0 1 315.8 436 Q282 450 248.2 436 Z" fill="#2a1d40" opacity="0.85"/>
|
||||
<path d="M255 474 C265 494 299 494 309 474 C297 484 267 484 255 474 Z" fill="#bdb6ec"/>
|
||||
<ellipse cx="283" cy="452" rx="13" ry="21" fill="#2a1d40"/>
|
||||
</g>
|
||||
<ellipse cx="268" cy="430" rx="11" ry="14" fill="#fff"/>
|
||||
<circle cx="300" cy="470" r="5" fill="#fff"/>
|
||||
<path d="M220 428 C238 394 300 386 334 412" fill="none" stroke="#2a1d40" stroke-width="8" stroke-linecap="round"/>
|
||||
<path d="M222 424 L206 414 L224 418 Z M228 412 L214 398 L232 406 Z" fill="#2a1d40" stroke="#2a1d40" stroke-width="2.5" stroke-linejoin="round"/>
|
||||
<path d="M242 486 C264 496 302 494 320 480" fill="none" stroke="#2a1d40" stroke-width="2.5" stroke-linecap="round"/>
|
||||
<path d="M378 452 C394 428 430 428 450 450" fill="none" stroke="#2a1d40" stroke-width="7" stroke-linecap="round"/>
|
||||
<path d="M448 446 L462 440 L452 454 Z" fill="#2a1d40" stroke="#2a1d40" stroke-width="2.5" stroke-linejoin="round"/>
|
||||
<path d="M384 462 C398 470 426 470 440 462" fill="none" stroke="#2a1d40" stroke-width="2" stroke-linecap="round" opacity="0.6"/>
|
||||
<!-- nose and mouth -->
|
||||
<path d="M362 470 L367 480 L360 482" fill="none" stroke="#c98a76" stroke-width="2.5" stroke-linecap="round"/>
|
||||
<path d="M332 504 C344 512 362 512 376 502" fill="none" stroke="#2a1d40" stroke-width="3" stroke-linecap="round"/>
|
||||
<!-- round glasses, thin dark frames -->
|
||||
<g fill="none" stroke="#2a1d40">
|
||||
<path d="M224 436 L184 424" stroke-width="4"/>
|
||||
<circle cx="280" cy="444" r="58" stroke-width="4.5"/>
|
||||
<ellipse cx="413" cy="442" rx="43" ry="56" stroke-width="4.5"/>
|
||||
<path d="M338 440 C350 430 360 430 370 438" stroke-width="4.5"/>
|
||||
<path d="M246 404 C256 394 268 390 280 390" stroke="#ffffff" stroke-width="5" opacity="0.75"/>
|
||||
<path d="M392 398 C398 392 406 390 412 390" stroke="#ffffff" stroke-width="4" opacity="0.75"/>
|
||||
</g>
|
||||
<!-- side lock tucked behind the ear -->
|
||||
<path d="M190 236 C170 280 166 330 174 392 C178 408 188 418 198 418 C194 380 204 332 232 316 Z" fill="#a99be0" stroke="#2a1d40" stroke-width="3"/>
|
||||
<!-- long front lock over the far shoulder -->
|
||||
<path d="M468 300 C500 346 502 402 488 452 C476 502 502 544 498 594 C494 644 518 684 508 724 C544 686 536 644 540 602 C544 552 522 502 530 452 C538 392 522 334 492 286 Z" fill="#a99be0" stroke="#2a1d40" stroke-width="3.5"/>
|
||||
<path d="M498 330 C514 380 512 420 506 456 C500 500 520 540 516 590" fill="none" stroke="#7d6fc4" stroke-width="3.5"/>
|
||||
<path d="M532 470 C536 520 528 560 534 610" fill="none" stroke="#d8d1f7" stroke-width="4"/>
|
||||
<!-- swept fringe, parted at the back, hooking into the canon curl at the front -->
|
||||
<path d="M200 162 C282 136 424 148 482 228 C506 268 512 320 522 360 C530 396 570 418 594 396 C604 386 600 368 588 366 C592 382 580 396 560 396 C540 396 524 392 510 398 C496 380 478 358 460 344 C458 364 456 386 452 404 C430 380 404 346 380 330 C384 356 382 376 378 394 C356 368 330 336 304 318 C308 340 304 362 300 378 C280 352 252 326 230 318 C224 282 200 252 188 240 C178 210 184 178 200 162 Z" fill="#a99be0" stroke="#2a1d40" stroke-width="3.5"/>
|
||||
<path d="M236 200 C306 176 386 182 446 214 L440 230 C384 202 306 198 242 216 Z" fill="#d8d1f7"/>
|
||||
<path d="M300 168 C322 230 334 290 352 360 M382 174 C410 240 420 300 426 372 M250 192 C270 240 280 290 290 340 M454 210 C484 270 500 330 520 380" fill="none" stroke="#7d6fc4" stroke-width="3.5"/>
|
||||
<path d="M492 260 C510 300 514 340 520 376" fill="none" stroke="#d8d1f7" stroke-width="4"/>
|
||||
<path d="M250 370 C268 362 296 362 314 368" fill="none" stroke="#6c5fb0" stroke-width="5" stroke-linecap="round"/><path d="M386 368 C402 362 426 362 440 370" fill="none" stroke="#6c5fb0" stroke-width="5" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<g id="bustbody" stroke="#2a1d40" stroke-width="3" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M314 530 L314 600 L384 600 L380 530 Z" fill="#f6d6c4"/>
|
||||
<path d="M314 538 C338 560 362 560 382 546 L383 580 L315 584 Z" fill="#e6b4a0" stroke="none"/>
|
||||
<path d="M92 790 C96 700 148 650 240 628 L300 610 L402 610 L472 628 C554 650 604 700 614 790 Z" fill="#241a33"/>
|
||||
<path d="M470 640 C540 662 584 704 592 790 L614 790 C604 700 554 650 472 628 Z" fill="#150f20" stroke="none"/>
|
||||
<path d="M530 660 C580 690 604 734 610 790" fill="none" stroke="#a99be0" stroke-width="4"/>
|
||||
<path d="M130 700 C150 670 190 648 236 636" fill="none" stroke="#8a6a9a" stroke-width="3"/>
|
||||
<!-- standing collar -->
|
||||
<path d="M290 620 C286 592 296 572 314 564 L386 564 C404 572 412 592 410 622 L350 654 Z" fill="#241a33"/>
|
||||
<path d="M300 612 C300 596 306 584 316 578 L384 578 C394 584 400 596 400 612" fill="none" stroke="#8a6a9a" stroke-width="3"/>
|
||||
<path d="M350 668 L338 790" fill="none" stroke="#8a6a9a" stroke-width="7"/>
|
||||
<path d="M350 668 L338 790" fill="none" stroke="#2a1d40" stroke-width="1.5"/>
|
||||
<path d="M190 724 l14 -14 l14 14 l-14 14 Z M486 724 l14 -14 l14 14 l-14 14 Z" fill="none" stroke="#8a6a9a" stroke-width="3"/>
|
||||
<path d="M204 724 l0 0" fill="none"/>
|
||||
<!-- brooch -->
|
||||
<circle cx="350" cy="652" r="17" fill="#c8a24a"/>
|
||||
<circle cx="350" cy="652" r="9" fill="#b77cff" stroke-width="2"/>
|
||||
<circle cx="347" cy="649" r="3" fill="#ffffff" stroke="none"/>
|
||||
</g>
|
||||
|
||||
<g id="prop" stroke="#2a1d40" stroke-width="3" stroke-linejoin="round" stroke-linecap="round">
|
||||
<!-- wide sleeve crossing the chest -->
|
||||
<path d="M300 790 C304 704 322 626 336 576 L410 570 C430 640 450 716 466 790 Z" fill="#241a33"/>
|
||||
<path d="M390 572 C410 640 428 716 440 790 L466 790 C450 716 430 640 410 570 Z" fill="#150f20" stroke="none"/>
|
||||
<path d="M334 588 L412 582" fill="none" stroke="#8a6a9a" stroke-width="7"/>
|
||||
<path d="M334 588 L412 582" fill="none" stroke-width="1.5"/>
|
||||
<!-- hand, index finger to lips -->
|
||||
<path d="M334 562 C332 542 346 532 366 533 C388 534 400 546 398 566 C396 586 380 596 362 594 C344 592 336 580 334 562 Z" fill="#f6d6c4"/>
|
||||
<path d="M384 540 C394 550 396 572 386 588 C380 592 372 594 362 594 C380 582 388 560 384 540 Z" fill="#e6b4a0" stroke="none"/>
|
||||
<path d="M350 544 C347 524 349 504 353 492 C357 482 369 482 371 492 C373 506 371 526 369 542 Z" fill="#f6d6c4"/>
|
||||
<path d="M356 498 C358 492 366 492 368 498" fill="none" stroke="#e6b4a0" stroke-width="3"/>
|
||||
<path d="M346 556 C358 552 374 552 390 556 M344 572 C356 568 372 568 388 572" fill="none" stroke-width="2.2"/>
|
||||
<g fill="#b77cff" stroke="none"><path d="M512 430 l5 -15 l5 15 l15 5 l-15 5 l-5 15 l-5 -15 l-15 -5 Z"/><path d="M546 360 l3 -9 l3 9 l9 3 l-9 3 l-3 9 l-3 -9 l-9 -3 Z"/><path d="M118 520 l3 -9 l3 9 l9 3 l-9 3 l-3 9 l-3 -9 l-9 -3 Z"/></g>
|
||||
</g>
|
||||
<g id="bust" clip-path="url(#chest)">
|
||||
<use href="#backhair"/><use href="#ribbon"/><use href="#bustbody"/><use href="#headfront"/><use href="#hairpin"/><use href="#prop"/>
|
||||
</g>
|
||||
|
||||
<g id="chibibody" stroke="#2a1d40" stroke-width="2.5" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M112 186 L76 202 C58 262 48 340 36 404 L192 404 C180 340 170 262 150 202 Z" fill="#241a33"/>
|
||||
<path d="M132 200 L150 202 C170 262 180 340 192 404 L160 404 C150 330 144 260 132 200 Z" fill="#150f20" stroke="none"/>
|
||||
<path d="M114 214 L112 404" fill="none" stroke="#8a6a9a" stroke-width="4"/>
|
||||
<path d="M60 330 l8 -8 l8 8 l-8 8 Z M150 330 l8 -8 l8 8 l-8 8 Z" fill="none" stroke="#8a6a9a" stroke-width="2"/>
|
||||
<path d="M70 404 C70 418 104 418 104 404 Z M124 404 C124 418 158 418 158 404 Z" fill="#150f20"/>
|
||||
<path d="M96 190 C96 180 132 180 132 190 L130 206 L98 206 Z" fill="#241a33"/>
|
||||
<circle cx="114" cy="210" r="6" fill="#c8a24a"/>
|
||||
<circle cx="114" cy="210" r="3" fill="#b77cff" stroke="none"/>
|
||||
<path d="M80 206 C58 236 46 272 42 304 L80 310 C82 278 90 250 100 228 Z" fill="#241a33"/>
|
||||
<circle cx="62" cy="314" r="10" fill="#f6d6c4"/>
|
||||
<path d="M146 208 C150 196 140 186 128 182 L118 196 C126 200 132 206 132 214 Z" fill="#241a33"/>
|
||||
<circle cx="122" cy="178" r="9" fill="#f6d6c4"/>
|
||||
<path d="M120 172 L120 160" stroke="#f6d6c4" stroke-width="5"/>
|
||||
</g>
|
||||
<clipPath id="card"><path d="M58 14 L792 14 L752 786 L18 786 Z"/></clipPath>
|
||||
</defs>
|
||||
<rect width="1200" height="800" fill="#efeae0"/>
|
||||
<path d="M58 14 L792 14 L752 786 L18 786 Z" fill="url(#glow)"/>
|
||||
<g clip-path="url(#card)"><g transform="translate(14 -40) scale(1.13)"><use href="#bust" filter="url(#outline)"/></g></g>
|
||||
<path d="M58 14 L792 14 L752 786 L18 786 Z" fill="none" stroke="#a99be0" stroke-width="4"/>
|
||||
<text x="78" y="44" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#a99be0" letter-spacing="4">BUST · QUIET PLEASE</text>
|
||||
|
||||
<text x="820" y="40" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#2a1d40" letter-spacing="3">FULL BODY · 2.5 HEADS</text>
|
||||
<g transform="translate(830 52)" filter="url(#outline)">
|
||||
<g transform="scale(0.34)"><use href="#backhair"/><use href="#ribbon"/></g>
|
||||
<use href="#chibibody"/>
|
||||
<g transform="scale(0.34)"><use href="#headfront"/><use href="#hairpin"/></g>
|
||||
</g>
|
||||
|
||||
<text x="1050" y="40" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#2a1d40" letter-spacing="3">SILHOUETTE</text>
|
||||
<g transform="translate(1040 54) scale(0.19)"><use href="#bust" filter="url(#sil)"/></g>
|
||||
<g transform="translate(1078 230) scale(0.06)"><use href="#bust" filter="url(#sil)"/></g>
|
||||
<text x="1050" y="300" font-family="Segoe UI, Arial, sans-serif" font-size="11" fill="#555">48 px</text>
|
||||
|
||||
<text x="820" y="540" font-family="Segoe UI, Arial, sans-serif" font-size="30" font-weight="700" fill="#2a1d40">LIBBY · C</text>
|
||||
<text x="820" y="570" font-family="Segoe UI, Arial, sans-serif" font-size="18" fill="#2a1d40" letter-spacing="2">QUIET PLEASE</text>
|
||||
<text font-family="Segoe UI, Arial, sans-serif" font-size="14" fill="#222"><tspan x="820" y="604">Hook: the crossed-bone hairpin, enlarged, on a close crop</tspan><tspan x="820" y="623">of hair and glasses; finger to lips, one eye shut.</tspan></text>
|
||||
<g font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#333">
|
||||
<rect x="820" y="660" width="52" height="52" fill="#a99be0" stroke="#2a1d40" stroke-width="2"/><text x="820" y="728">#a99be0</text>
|
||||
<rect x="880" y="660" width="52" height="52" fill="#2a1d40" stroke="#2a1d40" stroke-width="2"/><text x="880" y="728">#2a1d40</text>
|
||||
<rect x="940" y="660" width="52" height="52" fill="#241a33" stroke="#2a1d40" stroke-width="2"/><text x="940" y="728">#241a33</text>
|
||||
<rect x="1000" y="660" width="52" height="52" fill="#f6d6c4" stroke="#2a1d40" stroke-width="2"/><text x="1000" y="728">#f6d6c4</text>
|
||||
<rect x="1060" y="660" width="52" height="52" fill="#c8a24a" stroke="#2a1d40" stroke-width="2"/><text x="1060" y="728">#c8a24a</text>
|
||||
<rect x="1120" y="660" width="52" height="52" fill="#b77cff" stroke="#2a1d40" stroke-width="2"/><text x="1120" y="728">#b77cff</text>
|
||||
</g>
|
||||
<text x="820" y="760" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#555">hair key · line · robe · skin · gold · tome glow</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 16 KiB |
|
|
@ -1,356 +0,0 @@
|
|||
# Writes libby-A/B/C.svg: three takes on Libby's canon design (lavender hair,
|
||||
# round glasses, bone hairpin, diamond ribbon, dark violet robe).
|
||||
# Paths are hand-authored; this script only assembles per-take variants.
|
||||
import sys
|
||||
OUT = r"C:\gc-wt\cast-designs\cast-designs\proposals\libby"
|
||||
|
||||
LINE = "#2a1d40"; KEY = "#a99be0"; KEYSH = "#7d6fc4"; KEYHI = "#d8d1f7"
|
||||
ROBE = "#241a33"; ROBESH = "#150f20"; TRIM = "#8a6a9a"
|
||||
SKIN = "#f6d6c4"; SKINSH = "#e6b4a0"; GOLD = "#c8a24a"; GOLDSH = "#957428"
|
||||
GLOW = "#b77cff"; BONE = "#efe6d8"; BONESH = "#cfc2ae"
|
||||
|
||||
def backhair():
|
||||
return f'''
|
||||
<g id="backhair" stroke="{LINE}" stroke-width="3" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M330 118 C200 116 110 200 106 320 C96 372 50 404 72 468 C88 512 36 540 54 604 C66 652 22 692 46 744 C54 764 44 782 38 790 L618 790 C628 770 644 740 628 700 C614 650 654 610 628 556 C610 516 640 466 608 416 C586 376 594 330 568 290 C548 190 452 118 330 118 Z" fill="{KEY}"/>
|
||||
<path d="M196 470 C226 560 206 690 226 790 L474 790 C484 690 462 560 486 470 Z" fill="{KEYSH}" stroke="none"/>
|
||||
<path d="M124 330 C114 420 130 470 114 540 C102 600 122 650 106 724 M156 440 C146 510 166 566 146 646 M564 330 C576 420 560 470 578 540 C590 600 570 660 584 730" fill="none" stroke="{KEYSH}" stroke-width="4"/>
|
||||
<path d="M578 520 C598 570 584 620 596 676" fill="none" stroke="{KEYHI}" stroke-width="4"/>
|
||||
</g>'''
|
||||
|
||||
def ribbon(scale, shift="0 0"):
|
||||
# diamond-patterned bow at the back of the head (screen left), canon
|
||||
return f'''
|
||||
<g id="ribbon" transform="translate({shift}) translate(160 205) scale({scale}) translate(-160 -205)" stroke="{LINE}" stroke-width="3" stroke-linejoin="round">
|
||||
<path d="M150 222 C120 290 108 360 98 432 L122 420 L134 448 C140 370 152 296 166 226 Z" fill="{ROBE}"/>
|
||||
<path d="M160 204 C112 146 52 140 46 186 C42 222 104 232 160 214 Z" fill="{ROBE}"/>
|
||||
<path d="M160 210 C104 224 66 262 84 292 C102 316 142 262 164 220 Z" fill="{ROBE}"/>
|
||||
<path d="M60 190 C66 170 96 168 120 182" fill="none" stroke="{KEY}" stroke-width="3"/>
|
||||
<path d="M86 186 l10 -10 l10 10 l-10 10 Z M104 252 l9 -9 l9 9 l-9 9 Z M124 340 l8 -8 l8 8 l-8 8 Z" fill="none" stroke="{TRIM}" stroke-width="3"/>
|
||||
<circle cx="162" cy="210" r="15" fill="{ROBE}"/>
|
||||
<path d="M156 204 l6 -6 l6 6 l-6 6 Z" fill="{GOLD}" stroke="none"/>
|
||||
</g>'''
|
||||
|
||||
def hairpin(scale, at="222 214"):
|
||||
bone = f'<path d="M-30 -5 C-38 -14 -50 -8 -44 0 C-50 8 -38 14 -30 5 L30 5 C38 14 50 8 44 0 C50 -8 38 -14 30 -5 Z" fill="{BONE}"/>'
|
||||
return f'''
|
||||
<g id="hairpin" transform="translate({at}) scale({scale}) rotate(-12)" stroke="{LINE}" stroke-width="3" stroke-linejoin="round">
|
||||
<g transform="rotate(35)">{bone}</g>
|
||||
<g transform="rotate(-35)">{bone}</g>
|
||||
<path d="M-20 -4 L20 -4" stroke="{BONESH}" stroke-width="2" transform="rotate(-35)"/>
|
||||
</g>'''
|
||||
|
||||
def eyes(kind):
|
||||
"""kind: 'bright' (found it), 'arch' (specimen: far brow up), 'wink' (quiet please: far eye shut)"""
|
||||
near_shape = "M226 420 C244 394 302 390 328 412 L326 476 C306 494 260 496 238 484 Z"
|
||||
far_shape = "M378 414 C394 398 430 398 448 414 L447 474 C434 488 398 490 384 478 Z"
|
||||
def iris(clip, shape, cx, rx, ry, hx, hy, h2x, h2y):
|
||||
dx = rx * (1 - ((436 - 448) / ry) ** 2) ** 0.5
|
||||
return f'''
|
||||
<clipPath id="{clip}"><path d="{shape}"/></clipPath>
|
||||
<path d="{shape}" fill="#ffffff"/>
|
||||
<g clip-path="url(#{clip})">
|
||||
<ellipse cx="{cx}" cy="448" rx="{rx}" ry="{ry}" fill="#6a64a0" stroke="{LINE}" stroke-width="3"/>
|
||||
<path d="M{cx-dx:.1f} 436 A{rx} {ry} 0 0 1 {cx+dx:.1f} 436 Q{cx} 450 {cx-dx:.1f} 436 Z" fill="{LINE}" opacity="0.85"/>
|
||||
<path d="M{cx-rx+8} 474 C{cx-rx+18} 494 {cx+rx-18} 494 {cx+rx-8} 474 C{cx+rx-20} 484 {cx-rx+20} 484 {cx-rx+8} 474 Z" fill="#bdb6ec"/>
|
||||
<ellipse cx="{cx+1}" cy="452" rx="{int(rx*0.38)}" ry="{int(ry*0.45)}" fill="{LINE}"/>
|
||||
</g>
|
||||
<ellipse cx="{hx}" cy="{hy}" rx="{int(rx*0.34)}" ry="{int(ry*0.3)}" fill="#fff"/>
|
||||
<circle cx="{h2x}" cy="{h2y}" r="{max(4,int(rx*0.16))}" fill="#fff"/>'''
|
||||
s = iris("eyeN", near_shape, 282, 35, 47, 268, 430, 300, 470)
|
||||
s += f'''
|
||||
<path d="M220 428 C238 394 300 386 334 412" fill="none" stroke="{LINE}" stroke-width="8" stroke-linecap="round"/>
|
||||
<path d="M222 424 L206 414 L224 418 Z M228 412 L214 398 L232 406 Z" fill="{LINE}" stroke="{LINE}" stroke-width="2.5" stroke-linejoin="round"/>
|
||||
<path d="M242 486 C264 496 302 494 320 480" fill="none" stroke="{LINE}" stroke-width="2.5" stroke-linecap="round"/>'''
|
||||
if kind == "wink":
|
||||
s += f'''
|
||||
<path d="M378 452 C394 428 430 428 450 450" fill="none" stroke="{LINE}" stroke-width="7" stroke-linecap="round"/>
|
||||
<path d="M448 446 L462 440 L452 454 Z" fill="{LINE}" stroke="{LINE}" stroke-width="2.5" stroke-linejoin="round"/>
|
||||
<path d="M384 462 C398 470 426 470 440 462" fill="none" stroke="{LINE}" stroke-width="2" stroke-linecap="round" opacity="0.6"/>'''
|
||||
else:
|
||||
s += iris("eyeF", far_shape, 412, 27, 46, 402, 430, 422, 470)
|
||||
s += f'''
|
||||
<path d="M374 418 C392 394 432 392 452 414" fill="none" stroke="{LINE}" stroke-width="7" stroke-linecap="round"/>
|
||||
<path d="M450 412 L464 404 L455 418 Z" fill="{LINE}" stroke="{LINE}" stroke-width="2.5" stroke-linejoin="round"/>
|
||||
<path d="M388 482 C404 490 428 490 440 480" fill="none" stroke="{LINE}" stroke-width="2.5" stroke-linecap="round"/>'''
|
||||
return s
|
||||
|
||||
def brows(kind):
|
||||
if kind == "bright":
|
||||
n, f = "M248 366 C266 354 296 352 314 360", "M386 352 C402 342 426 342 440 352"
|
||||
elif kind == "arch":
|
||||
n, f = "M250 372 C268 366 296 366 314 372", "M384 344 C398 326 426 324 442 338"
|
||||
else:
|
||||
n, f = "M250 370 C268 362 296 362 314 368", "M386 368 C402 362 426 362 440 370"
|
||||
return f'<path d="{n}" fill="none" stroke="#6c5fb0" stroke-width="5" stroke-linecap="round"/><path d="{f}" fill="none" stroke="#6c5fb0" stroke-width="5" stroke-linecap="round"/>'
|
||||
|
||||
def mouth(kind):
|
||||
if kind == "bright":
|
||||
return f'''<path d="M326 500 C342 494 372 492 388 498 C384 528 336 532 326 500 Z" fill="#8c3c4c" stroke="{LINE}" stroke-width="3" stroke-linejoin="round"/>
|
||||
<path d="M340 518 C350 510 368 510 376 518 C366 524 348 524 340 518 Z" fill="#e0707a"/>
|
||||
<path d="M330 500 L384 498 L382 504 L332 506 Z" fill="#ffffff"/>'''
|
||||
if kind == "arch":
|
||||
return f'<path d="M330 506 C342 512 360 511 374 500" fill="none" stroke="{LINE}" stroke-width="3" stroke-linecap="round"/><path d="M374 500 l6 -3" stroke="{LINE}" stroke-width="2.5" stroke-linecap="round"/>'
|
||||
return f'<path d="M332 504 C344 512 362 512 376 502" fill="none" stroke="{LINE}" stroke-width="3" stroke-linecap="round"/>'
|
||||
|
||||
def headfront(kind):
|
||||
return f'''
|
||||
<g id="headfront" stroke-linejoin="round" stroke-linecap="round">
|
||||
<!-- face -->
|
||||
<path d="M172 300 C166 400 184 476 232 518 C268 548 312 562 350 561 C390 557 430 528 450 484 C462 456 470 430 470 398 C476 360 472 330 464 296 Z" fill="{SKIN}" stroke="{LINE}" stroke-width="3"/>
|
||||
<path d="M452 404 C466 452 452 500 412 540 C440 514 456 472 448 432 Z" fill="{SKINSH}"/>
|
||||
<clipPath id="faceclip"><path d="M172 300 C166 400 184 476 232 518 C268 548 312 562 350 561 C390 557 430 528 450 484 C462 456 470 430 470 398 C476 360 472 330 464 296 Z"/></clipPath>
|
||||
<path clip-path="url(#faceclip)" transform="translate(-3 11)" d="M200 162 C282 136 424 148 482 228 C506 268 512 320 522 360 C530 396 570 418 594 396 C604 386 600 368 588 366 C592 382 580 396 560 396 C540 396 524 392 510 398 C496 380 478 358 460 344 C458 364 456 386 452 404 C430 380 404 346 380 330 C384 356 382 376 378 394 C356 368 330 336 304 318 C308 340 304 362 300 378 C280 352 252 326 230 318 C224 282 200 252 188 240 C178 210 184 178 200 162 Z" fill="{SKINSH}"/>
|
||||
<path d="M454 440 C460 470 452 500 432 526" fill="none" stroke="{KEY}" stroke-width="4"/>
|
||||
<!-- near ear with gold drop -->
|
||||
<path d="M186 410 C164 398 152 424 160 448 C166 466 180 472 194 462 Z" fill="{SKIN}" stroke="{LINE}" stroke-width="3"/>
|
||||
<path d="M178 426 C170 432 172 446 180 452" fill="none" stroke="{SKINSH}" stroke-width="3"/>
|
||||
<circle cx="170" cy="474" r="5" fill="{GOLD}" stroke="{LINE}" stroke-width="2"/>
|
||||
<path d="M170 480 L176 492 L170 504 L164 492 Z" fill="{GOLD}" stroke="{LINE}" stroke-width="2"/>
|
||||
<!-- blush -->
|
||||
<ellipse cx="262" cy="508" rx="26" ry="9" fill="#f29aa6" opacity="0.5"/>
|
||||
<ellipse cx="428" cy="506" rx="16" ry="8" fill="#f29aa6" opacity="0.5"/>
|
||||
<path d="M250 504 l6 -8 M262 506 l6 -8 M274 506 l6 -8" stroke="#dd7f8c" stroke-width="2" opacity="0.75"/>
|
||||
{eyes(kind)}
|
||||
<!-- nose and mouth -->
|
||||
<path d="M362 470 L367 480 L360 482" fill="none" stroke="#c98a76" stroke-width="2.5" stroke-linecap="round"/>
|
||||
{mouth(kind)}
|
||||
<!-- round glasses, thin dark frames -->
|
||||
<g fill="none" stroke="{LINE}">
|
||||
<path d="M224 436 L184 424" stroke-width="4"/>
|
||||
<circle cx="280" cy="444" r="58" stroke-width="4.5"/>
|
||||
<ellipse cx="413" cy="442" rx="43" ry="56" stroke-width="4.5"/>
|
||||
<path d="M338 440 C350 430 360 430 370 438" stroke-width="4.5"/>
|
||||
<path d="M246 404 C256 394 268 390 280 390" stroke="#ffffff" stroke-width="5" opacity="0.75"/>
|
||||
<path d="M392 398 C398 392 406 390 412 390" stroke="#ffffff" stroke-width="4" opacity="0.75"/>
|
||||
</g>
|
||||
<!-- side lock tucked behind the ear -->
|
||||
<path d="M190 236 C170 280 166 330 174 392 C178 408 188 418 198 418 C194 380 204 332 232 316 Z" fill="{KEY}" stroke="{LINE}" stroke-width="3"/>
|
||||
<!-- long front lock over the far shoulder -->
|
||||
<path d="M468 300 C500 346 502 402 488 452 C476 502 502 544 498 594 C494 644 518 684 508 724 C544 686 536 644 540 602 C544 552 522 502 530 452 C538 392 522 334 492 286 Z" fill="{KEY}" stroke="{LINE}" stroke-width="3.5"/>
|
||||
<path d="M498 330 C514 380 512 420 506 456 C500 500 520 540 516 590" fill="none" stroke="{KEYSH}" stroke-width="3.5"/>
|
||||
<path d="M532 470 C536 520 528 560 534 610" fill="none" stroke="{KEYHI}" stroke-width="4"/>
|
||||
<!-- swept fringe, parted at the back, hooking into the canon curl at the front -->
|
||||
<path d="M200 162 C282 136 424 148 482 228 C506 268 512 320 522 360 C530 396 570 418 594 396 C604 386 600 368 588 366 C592 382 580 396 560 396 C540 396 524 392 510 398 C496 380 478 358 460 344 C458 364 456 386 452 404 C430 380 404 346 380 330 C384 356 382 376 378 394 C356 368 330 336 304 318 C308 340 304 362 300 378 C280 352 252 326 230 318 C224 282 200 252 188 240 C178 210 184 178 200 162 Z" fill="{KEY}" stroke="{LINE}" stroke-width="3.5"/>
|
||||
<path d="M236 200 C306 176 386 182 446 214 L440 230 C384 202 306 198 242 216 Z" fill="{KEYHI}"/>
|
||||
<path d="M300 168 C322 230 334 290 352 360 M382 174 C410 240 420 300 426 372 M250 192 C270 240 280 290 290 340 M454 210 C484 270 500 330 520 380" fill="none" stroke="{KEYSH}" stroke-width="3.5"/>
|
||||
<path d="M492 260 C510 300 514 340 520 376" fill="none" stroke="{KEYHI}" stroke-width="4"/>
|
||||
{brows(kind)}
|
||||
</g>'''
|
||||
|
||||
def body():
|
||||
return f'''
|
||||
<g id="bustbody" stroke="{LINE}" stroke-width="3" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M314 530 L314 600 L384 600 L380 530 Z" fill="{SKIN}"/>
|
||||
<path d="M314 538 C338 560 362 560 382 546 L383 580 L315 584 Z" fill="{SKINSH}" stroke="none"/>
|
||||
<path d="M92 790 C96 700 148 650 240 628 L300 610 L402 610 L472 628 C554 650 604 700 614 790 Z" fill="{ROBE}"/>
|
||||
<path d="M470 640 C540 662 584 704 592 790 L614 790 C604 700 554 650 472 628 Z" fill="{ROBESH}" stroke="none"/>
|
||||
<path d="M530 660 C580 690 604 734 610 790" fill="none" stroke="{KEY}" stroke-width="4"/>
|
||||
<path d="M130 700 C150 670 190 648 236 636" fill="none" stroke="{TRIM}" stroke-width="3"/>
|
||||
<!-- standing collar -->
|
||||
<path d="M290 620 C286 592 296 572 314 564 L386 564 C404 572 412 592 410 622 L350 654 Z" fill="{ROBE}"/>
|
||||
<path d="M300 612 C300 596 306 584 316 578 L384 578 C394 584 400 596 400 612" fill="none" stroke="{TRIM}" stroke-width="3"/>
|
||||
<path d="M350 668 L338 790" fill="none" stroke="{TRIM}" stroke-width="7"/>
|
||||
<path d="M350 668 L338 790" fill="none" stroke="{LINE}" stroke-width="1.5"/>
|
||||
<path d="M190 724 l14 -14 l14 14 l-14 14 Z M486 724 l14 -14 l14 14 l-14 14 Z" fill="none" stroke="{TRIM}" stroke-width="3"/>
|
||||
<path d="M204 724 l0 0" fill="none"/>
|
||||
<!-- brooch -->
|
||||
<circle cx="350" cy="652" r="17" fill="{GOLD}"/>
|
||||
<circle cx="350" cy="652" r="9" fill="{GLOW}" stroke-width="2"/>
|
||||
<circle cx="347" cy="649" r="3" fill="#ffffff" stroke="none"/>
|
||||
</g>'''
|
||||
|
||||
# ---------- props, one per take ----------
|
||||
def prop_tome():
|
||||
return f'''
|
||||
<g id="prop" stroke="{LINE}" stroke-width="3" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M250 676 L232 640 M300 668 L292 626 M444 668 L452 626 M494 676 L512 640" fill="none" stroke="{GLOW}" stroke-width="4"/>
|
||||
<path d="M196 704 L372 712 L548 704 L552 784 L372 790 L192 784 Z" fill="{ROBE}"/>
|
||||
<path d="M196 704 L214 704 L212 722 L196 724 Z M548 704 L532 704 L534 722 L550 724 Z" fill="{GOLD}" stroke-width="2"/>
|
||||
<path d="M214 694 C268 672 322 674 372 694 L372 768 C322 750 268 748 214 768 Z" fill="{BONE}"/>
|
||||
<path d="M372 694 C424 674 478 672 532 694 L532 768 C478 748 424 750 372 768 Z" fill="{BONE}"/>
|
||||
<path d="M214 694 C268 672 322 674 372 694 L372 708 C322 690 268 690 214 708 Z" fill="{BONESH}" stroke="none"/>
|
||||
<g fill="none" stroke="{GLOW}" stroke-width="3">
|
||||
<path d="M240 716 L340 712 M240 732 L330 728 M240 748 L346 744 M402 712 L500 716 M398 728 L470 730"/>
|
||||
<rect x="440" y="726" width="36" height="30" transform="rotate(4 458 741)"/>
|
||||
</g>
|
||||
<!-- glyphs rising off the page -->
|
||||
<g fill="none" stroke="{GLOW}" stroke-width="4">
|
||||
<rect x="434" y="624" width="40" height="40" rx="5" transform="rotate(45 454 644)"/>
|
||||
<circle cx="454" cy="644" r="10"/>
|
||||
<path d="M262 664 l0 -16 M254 656 l16 0 M518 610 l0 -20 M508 600 l20 0" stroke-width="3"/>
|
||||
</g>
|
||||
<circle cx="454" cy="644" r="4" fill="#ffffff" stroke="none"/>
|
||||
<!-- hands -->
|
||||
<path d="M176 760 C172 732 190 716 212 718 C232 720 238 742 232 762 C226 782 182 784 176 760 Z" fill="{SKIN}"/>
|
||||
<path d="M568 760 C572 732 554 716 532 718 C512 720 506 742 512 762 C518 782 562 784 568 760 Z" fill="{SKIN}"/>
|
||||
<path d="M208 726 L222 744 M538 726 L522 744" stroke-width="2.5"/>
|
||||
</g>'''
|
||||
|
||||
def prop_stamp():
|
||||
return f'''
|
||||
<g id="prop" stroke="{LINE}" stroke-width="3" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M498 790 C496 708 508 632 520 584 L612 580 C624 650 634 722 644 790 Z" fill="{ROBE}"/>
|
||||
<path d="M590 584 C604 650 616 720 626 790 L644 790 C634 722 624 650 612 580 Z" fill="{ROBESH}" stroke="none"/>
|
||||
<path d="M516 600 L616 594" fill="none" stroke="{TRIM}" stroke-width="7"/>
|
||||
<path d="M516 600 L616 594" fill="none" stroke-width="1.5"/>
|
||||
<g transform="rotate(10 566 500)">
|
||||
<!-- base and violet rubber face, shown to the viewer -->
|
||||
<path d="M522 556 L612 556 L612 590 L522 590 Z" fill="{GOLD}"/>
|
||||
<path d="M522 576 L612 576 L612 590 L522 590 Z" fill="{GOLDSH}" stroke="none"/>
|
||||
<path d="M516 590 L618 590 L618 606 L516 606 Z" fill="{GLOW}"/>
|
||||
<!-- handle -->
|
||||
<path d="M552 460 L580 460 L584 556 L548 556 Z" fill="{ROBE}"/>
|
||||
<path d="M546 456 L586 456 L586 470 L546 470 Z" fill="{GOLD}"/>
|
||||
<!-- the skull -->
|
||||
<path d="M534 432 C530 396 548 380 566 380 C584 380 602 396 598 432 C596 446 588 452 584 458 L548 458 C544 452 536 446 534 432 Z" fill="{BONE}"/>
|
||||
<path d="M584 392 C596 404 598 424 590 444 C588 450 586 454 584 458 L576 458 C590 440 592 412 584 392 Z" fill="{BONESH}" stroke="none"/>
|
||||
<ellipse cx="554" cy="424" rx="9" ry="10" fill="{LINE}"/>
|
||||
<ellipse cx="580" cy="424" rx="9" ry="10" fill="{LINE}"/>
|
||||
<path d="M566 434 L562 444 L570 444 Z" fill="{LINE}" stroke-width="1.5"/>
|
||||
<path d="M556 452 L556 458 M566 452 L566 458 M576 452 L576 458" stroke-width="2"/>
|
||||
</g>
|
||||
<!-- fist around the handle -->
|
||||
<path d="M520 520 C520 496 540 486 564 488 C588 490 600 504 598 528 C596 552 578 562 556 560 C534 558 520 544 520 520 Z" fill="{SKIN}"/>
|
||||
<path d="M532 534 C550 530 572 530 592 532 M534 548 C552 546 570 546 588 548" fill="none" stroke-width="2.2"/>
|
||||
<path d="M522 506 C538 494 572 494 592 506 C588 516 560 518 528 518 Z" fill="{SKIN}"/>
|
||||
<path d="M592 512 C598 530 594 548 582 556" fill="none" stroke="{SKINSH}" stroke-width="4"/>
|
||||
<g fill="{GLOW}" stroke="none"><path d="M630 470 l5 -14 l5 14 l14 5 l-14 5 l-5 14 l-5 -14 l-14 -5 Z"/><path d="M628 560 l3 -9 l3 9 l9 3 l-9 3 l-3 9 l-3 -9 l-9 -3 Z"/></g>
|
||||
</g>'''
|
||||
|
||||
def prop_shush():
|
||||
return f'''
|
||||
<g id="prop" stroke="{LINE}" stroke-width="3" stroke-linejoin="round" stroke-linecap="round">
|
||||
<!-- wide sleeve crossing the chest -->
|
||||
<path d="M300 790 C304 704 322 626 336 576 L410 570 C430 640 450 716 466 790 Z" fill="{ROBE}"/>
|
||||
<path d="M390 572 C410 640 428 716 440 790 L466 790 C450 716 430 640 410 570 Z" fill="{ROBESH}" stroke="none"/>
|
||||
<path d="M334 588 L412 582" fill="none" stroke="{TRIM}" stroke-width="7"/>
|
||||
<path d="M334 588 L412 582" fill="none" stroke-width="1.5"/>
|
||||
<!-- hand, index finger to lips -->
|
||||
<path d="M334 562 C332 542 346 532 366 533 C388 534 400 546 398 566 C396 586 380 596 362 594 C344 592 336 580 334 562 Z" fill="{SKIN}"/>
|
||||
<path d="M384 540 C394 550 396 572 386 588 C380 592 372 594 362 594 C380 582 388 560 384 540 Z" fill="{SKINSH}" stroke="none"/>
|
||||
<path d="M350 544 C347 524 349 504 353 492 C357 482 369 482 371 492 C373 506 371 526 369 542 Z" fill="{SKIN}"/>
|
||||
<path d="M356 498 C358 492 366 492 368 498" fill="none" stroke="{SKINSH}" stroke-width="3"/>
|
||||
<path d="M346 556 C358 552 374 552 390 556 M344 572 C356 568 372 568 388 572" fill="none" stroke-width="2.2"/>
|
||||
<g fill="{GLOW}" stroke="none"><path d="M512 430 l5 -15 l5 15 l15 5 l-15 5 l-5 15 l-5 -15 l-15 -5 Z"/><path d="M546 360 l3 -9 l3 9 l9 3 l-9 3 l-3 9 l-3 -9 l-9 -3 Z"/><path d="M118 520 l3 -9 l3 9 l9 3 l-9 3 l-3 9 l-3 -9 l-9 -3 Z"/></g>
|
||||
</g>'''
|
||||
|
||||
# ---------- chibi bodies (2.5 heads; head drawn at scale 0.34) ----------
|
||||
def chibi(take):
|
||||
base = f'''
|
||||
<path d="M112 186 L76 202 C58 262 48 340 36 404 L192 404 C180 340 170 262 150 202 Z" fill="{ROBE}"/>
|
||||
<path d="M132 200 L150 202 C170 262 180 340 192 404 L160 404 C150 330 144 260 132 200 Z" fill="{ROBESH}" stroke="none"/>
|
||||
<path d="M114 214 L112 404" fill="none" stroke="{TRIM}" stroke-width="4"/>
|
||||
<path d="M60 330 l8 -8 l8 8 l-8 8 Z M150 330 l8 -8 l8 8 l-8 8 Z" fill="none" stroke="{TRIM}" stroke-width="2"/>
|
||||
<path d="M70 404 C70 418 104 418 104 404 Z M124 404 C124 418 158 418 158 404 Z" fill="{ROBESH}"/>
|
||||
<path d="M96 190 C96 180 132 180 132 190 L130 206 L98 206 Z" fill="{ROBE}"/>
|
||||
<circle cx="114" cy="210" r="6" fill="{GOLD}"/>
|
||||
<circle cx="114" cy="210" r="3" fill="{GLOW}" stroke="none"/>'''
|
||||
left_hang = f'''
|
||||
<path d="M80 206 C58 236 46 272 42 304 L80 310 C82 278 90 250 100 228 Z" fill="{ROBE}"/>
|
||||
<circle cx="62" cy="314" r="10" fill="{SKIN}"/>'''
|
||||
if take == "A":
|
||||
arms = f'''
|
||||
<path d="M80 206 C62 230 56 254 58 272 L96 268 C94 250 96 232 100 222 Z" fill="{ROBE}"/>
|
||||
<path d="M148 206 C166 230 172 254 170 272 L132 268 C134 250 132 232 128 222 Z" fill="{ROBE}"/>
|
||||
<ellipse cx="114" cy="244" rx="80" ry="34" fill="{GLOW}" opacity="0.25" stroke="none"/>
|
||||
<path d="M58 262 L114 266 L170 262 L170 290 L114 294 L58 290 Z" fill="{ROBE}"/>
|
||||
<path d="M62 256 C82 248 100 250 114 258 L114 284 C100 276 82 276 62 284 Z M114 258 C128 250 146 248 166 256 L166 284 C146 276 128 276 114 284 Z" fill="{BONE}"/>
|
||||
<rect x="104" y="214" width="20" height="20" rx="2" transform="rotate(45 114 224)" fill="none" stroke="{GLOW}" stroke-width="3"/>
|
||||
<circle cx="58" cy="278" r="10" fill="{SKIN}"/><circle cx="170" cy="278" r="10" fill="{SKIN}"/>'''
|
||||
elif take == "B":
|
||||
arms = left_hang + f'''
|
||||
<path d="M146 208 C168 196 182 176 188 154 L170 146 C164 166 154 182 138 194 Z" fill="{ROBE}"/>
|
||||
<g transform="rotate(10 184 120)">
|
||||
<path d="M168 128 L200 128 L200 140 L168 140 Z" fill="{GOLD}"/>
|
||||
<path d="M166 140 L202 140 L202 146 L166 146 Z" fill="{GLOW}"/>
|
||||
<path d="M178 104 L190 104 L190 128 L178 128 Z" fill="{ROBE}"/>
|
||||
<path d="M172 92 C170 78 178 72 184 72 C190 72 198 78 196 92 C196 98 192 102 190 104 L178 104 C176 102 172 98 172 92 Z" fill="{BONE}"/>
|
||||
<circle cx="180" cy="90" r="3" fill="{LINE}" stroke="none"/><circle cx="189" cy="90" r="3" fill="{LINE}" stroke="none"/>
|
||||
</g>
|
||||
<circle cx="180" cy="150" r="10" fill="{SKIN}"/>'''
|
||||
else:
|
||||
arms = left_hang + f'''
|
||||
<path d="M146 208 C150 196 140 186 128 182 L118 196 C126 200 132 206 132 214 Z" fill="{ROBE}"/>
|
||||
<circle cx="122" cy="178" r="9" fill="{SKIN}"/>
|
||||
<path d="M120 172 L120 160" stroke="{SKIN}" stroke-width="5"/>'''
|
||||
return f'''
|
||||
<g id="chibibody" stroke="{LINE}" stroke-width="2.5" stroke-linejoin="round" stroke-linecap="round">{base}{arms}
|
||||
</g>'''
|
||||
|
||||
TAKES = {
|
||||
"A": dict(name="THE GLOWING TOME", kind="bright", prop=prop_tome, rib=1.0, pin=1.0, frame="translate(66 6) scale(0.985)", label="BUST · FOUND IT",
|
||||
hook=["Hook: the swept lavender fringe that hooks into a curl,", "round glasses, and an open tome glowing up at her face."]),
|
||||
"B": dict(name="THE SKULL STAMP", kind="arch", prop=prop_stamp, rib=1.6, ribshift="-14 -40", pin=1.0, frame="translate(66 6) scale(0.985)", label="BUST · SPECIMEN",
|
||||
hook=["Hook: the black diamond ribbon, enlarged into a wing", "behind her head; the skull stamp raised as evidence."]),
|
||||
"C": dict(name="QUIET PLEASE", kind="wink", prop=prop_shush, rib=1.0, pin=1.5, pinat="196 168", frame="translate(14 -40) scale(1.13)", label="BUST · QUIET PLEASE",
|
||||
hook=["Hook: the crossed-bone hairpin, enlarged, on a close crop", "of hair and glasses; finger to lips, one eye shut."]),
|
||||
}
|
||||
|
||||
def sheet(t):
|
||||
T = TAKES[t]
|
||||
sw = [(KEY, "hair key"), (LINE, "line"), (ROBE, "robe"), (SKIN, "skin"), (GOLD, "gold"), (GLOW, "glow")]
|
||||
swatches = "\n".join(
|
||||
f' <rect x="{820+60*i}" y="660" width="52" height="52" fill="{c}" stroke="{LINE}" stroke-width="2"/><text x="{820+60*i}" y="728">{c}</text>'
|
||||
for i, (c, _) in enumerate(sw))
|
||||
return f'''<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<!-- Libby, take {t}: {T["name"].title()}. Three takes on the canon design (cotsc-praxis character sheet). Hand-authored. -->
|
||||
<defs>
|
||||
<filter id="outline" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feMorphology in="SourceAlpha" operator="dilate" radius="3.2" result="d"/>
|
||||
<feFlood flood-color="{LINE}"/>
|
||||
<feComposite in2="d" operator="in" result="o"/>
|
||||
<feMerge><feMergeNode in="o"/><feMergeNode in="SourceGraphic"/></feMerge>
|
||||
</filter>
|
||||
<filter id="sil" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feMorphology in="SourceAlpha" operator="dilate" radius="3.2" result="d"/>
|
||||
<feColorMatrix in="d" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0"/>
|
||||
</filter>
|
||||
<radialGradient id="glow" cx="0.46" cy="0.45" r="0.62">
|
||||
<stop offset="0" stop-color="#2d2150"/>
|
||||
<stop offset="1" stop-color="#07111a"/>
|
||||
</radialGradient>
|
||||
<clipPath id="chest"><rect x="-200" y="-100" width="1100" height="890"/></clipPath>
|
||||
{backhair()}
|
||||
{ribbon(T["rib"], T.get("ribshift","0 0"))}
|
||||
{hairpin(T["pin"], T.get("pinat","222 214"))}
|
||||
{headfront(T["kind"])}
|
||||
{body()}
|
||||
{T["prop"]()}
|
||||
<g id="bust" clip-path="url(#chest)">
|
||||
<use href="#backhair"/><use href="#ribbon"/><use href="#bustbody"/><use href="#headfront"/><use href="#hairpin"/><use href="#prop"/>
|
||||
</g>
|
||||
{chibi(t)}
|
||||
<clipPath id="card"><path d="M58 14 L792 14 L752 786 L18 786 Z"/></clipPath>
|
||||
</defs>
|
||||
<rect width="1200" height="800" fill="#efeae0"/>
|
||||
<path d="M58 14 L792 14 L752 786 L18 786 Z" fill="url(#glow)"/>
|
||||
<g clip-path="url(#card)"><g transform="{T["frame"]}"><use href="#bust" filter="url(#outline)"/></g></g>
|
||||
<path d="M58 14 L792 14 L752 786 L18 786 Z" fill="none" stroke="{KEY}" stroke-width="4"/>
|
||||
<text x="78" y="44" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="{KEY}" letter-spacing="4">{T["label"]}</text>
|
||||
|
||||
<text x="820" y="40" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="{LINE}" letter-spacing="3">FULL BODY · 2.5 HEADS</text>
|
||||
<g transform="translate(830 52)" filter="url(#outline)">
|
||||
<g transform="scale(0.34)"><use href="#backhair"/><use href="#ribbon"/></g>
|
||||
<use href="#chibibody"/>
|
||||
<g transform="scale(0.34)"><use href="#headfront"/><use href="#hairpin"/></g>
|
||||
</g>
|
||||
|
||||
<text x="1050" y="40" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="{LINE}" letter-spacing="3">SILHOUETTE</text>
|
||||
<g transform="translate(1040 54) scale(0.19)"><use href="#bust" filter="url(#sil)"/></g>
|
||||
<g transform="translate(1078 230) scale(0.06)"><use href="#bust" filter="url(#sil)"/></g>
|
||||
<text x="1050" y="300" font-family="Segoe UI, Arial, sans-serif" font-size="11" fill="#555">48 px</text>
|
||||
|
||||
<text x="820" y="540" font-family="Segoe UI, Arial, sans-serif" font-size="30" font-weight="700" fill="{LINE}">LIBBY · {t}</text>
|
||||
<text x="820" y="570" font-family="Segoe UI, Arial, sans-serif" font-size="18" fill="{LINE}" letter-spacing="2">{T["name"]}</text>
|
||||
<text font-family="Segoe UI, Arial, sans-serif" font-size="14" fill="#222"><tspan x="820" y="604">{T["hook"][0]}</tspan><tspan x="820" y="623">{T["hook"][1]}</tspan></text>
|
||||
<g font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#333">
|
||||
{swatches}
|
||||
</g>
|
||||
<text x="820" y="760" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#555">hair key · line · robe · skin · gold · tome glow</text>
|
||||
</svg>
|
||||
'''
|
||||
|
||||
for t in (sys.argv[1:] or "ABC"):
|
||||
open(rf"{OUT}\libby-{t}.svg", "w", encoding="utf-8").write(sheet(t))
|
||||
print("wrote", t)
|
||||
|
|
@ -1,89 +0,0 @@
|
|||
# Libby: SVG proposals, round 1
|
||||
|
||||
## Change of brief: canon overrides libby.md
|
||||
|
||||
Libby already has an established design: the cotsc-praxis character sheet
|
||||
(`F:\Projects\gamecult-site\GameCult\static\interactive\cotsc-praxis\character-sheets\libby-sheet.png`,
|
||||
sprites in `sprites\libby\`). It has long wavy lavender hair with a swept fringe
|
||||
that hooks into a curl, round thin glasses, a crossed-bone hairpin, a black
|
||||
ribbon bow with diamond motifs at the back of the head, small gold drop
|
||||
earrings, a high-collared dark violet robe with mauve trim and diamond motifs, a
|
||||
gold brooch with a violet gem, and glowing tomes, a skull stamp and skulls as
|
||||
props. The coordinator ruled that canon overrides the brief, its palette rule
|
||||
included. Libby stays lavender/violet, and the three directions in `libby.md`
|
||||
(card-catalogue hat, mesh-weaver braids, reading-lamp shade) are dropped. A, B
|
||||
and C are now three takes on the canon design. Each one changes the hook
|
||||
emphasis, the prop and the framing for a Persona-style chibi bust. All three
|
||||
are drawn fresh from the reference, mirrored to face screen right. None is
|
||||
traced.
|
||||
|
||||
`libby-old-A.svg` / `.png` is the one sheet drawn from the old brief (the
|
||||
card-catalogue hat, second pass) before the ruling. It is kept for the record.
|
||||
It is not a candidate.
|
||||
|
||||
Canon palette used in all three: hair `#a99be0`, line `#2a1d40`, robe
|
||||
`#241a33`, skin `#f6d6c4`, gold `#c8a24a`, glow `#b77cff`. Each material has one
|
||||
shadow tone and one highlight tone. The rim light is lavender.
|
||||
|
||||
`libby-gen.py` assembles the three sheets from hand-written path strings. Change
|
||||
it and rerun it rather than editing the SVGs directly.
|
||||
|
||||
## A: The Glowing Tome ("Found it")
|
||||
|
||||
- **What it does:** the canon idle and research pose as a bust. Open delighted
|
||||
smile, both brows up, an open tome held at chest height with violet glyphs
|
||||
and light rays rising off the pages. The hook emphasis is the hair: the swept
|
||||
fringe, the hooked curl, and the full wavy mass.
|
||||
- **Changed after looking:** the first fringe read as a bowl cut with scalloped
|
||||
tips. It was redrawn as strands that sweep diagonally, each tip pointing down
|
||||
toward the face side, and the curl was made larger. The back hair outline got
|
||||
outward wave lobes, because a smooth helmet shape read as a wig. The cel
|
||||
shadow under the fringe now follows the strands. A translucent glow disc
|
||||
behind the book read as a grey plate and was replaced with light-ray strokes.
|
||||
- **Round 2:** the curl still sinks into the far front lock and disappears in
|
||||
silhouette. Push it out past the hair mass, or thin the far lock. Add violet
|
||||
up-light on the chin and the underside of the glasses so the tome visibly
|
||||
lights her face.
|
||||
|
||||
## B: The Skull Stamp ("Specimen")
|
||||
|
||||
- **What it does:** "she shows the artifact". Far brow arched, a knowing
|
||||
half-smile, the skull-topped stamp raised beside her face toward the text box
|
||||
with its violet rubber face showing. The hook emphasis is the ribbon, scaled
|
||||
1.6x and lifted so the bow rises as a dark wing above the back of the head.
|
||||
- **Changed after looking:** the first fist read as a thumbs-up, with the
|
||||
handle looking like part of the hand. It now has a wrapped thumb across the
|
||||
top and curved finger lines. The ribbon was lifted after the 48 px
|
||||
silhouette showed it hidden inside the hair dome.
|
||||
- **Round 2:** the fist is still the weakest drawing on the sheets. Try a
|
||||
pinch grip on the stamp base with the stamp face turned fully to the viewer.
|
||||
The enlarged bow is the clearest silhouette hook of the three. Consider
|
||||
making it the canon size for every expression.
|
||||
|
||||
## C: Quiet Please
|
||||
|
||||
- **What it does:** a tighter crop (1.13x) so the face and glasses carry the
|
||||
frame. Index finger to the lips, far eye shut in a wink behind the lens,
|
||||
violet sparkles. The hook emphasis is the crossed-bone hairpin, enlarged
|
||||
1.5x and moved onto the crown edge so the bones break the head outline.
|
||||
- **Changed after looking:** the finger was redrawn narrow and centred on the
|
||||
lips, with a nail mark and a shadowed fist below the chin, because the first
|
||||
version read as a thumb. The upper-iris shading was clipped to the iris; at
|
||||
this crop it had shown as a dark box over the white of the eye.
|
||||
- **Round 2:** the bones break the outline at 48 px, but they are small against
|
||||
the hair dome. Try them at 2x, or add the canon's small skull charm to the pin.
|
||||
|
||||
## Shared observations
|
||||
|
||||
- At 128 px all three read as cute and as Libby: lavender mass, round glasses,
|
||||
dark collar.
|
||||
- At 48 px all three silhouettes are a wavy dome with a bow. That suits one
|
||||
established character, but the bow and curl are the only above-the-shoulder
|
||||
breaks in the outline. For the cast-wide silhouette test, the strongest move
|
||||
is B's oversized ribbon, kept across all expressions.
|
||||
- The robe is dark on the dark #07111a card. It depends on the lavender rim
|
||||
light and the trim to separate. Round 2 could widen the rim or add a cooler
|
||||
violet to the card ground behind the shoulders.
|
||||
- Strongest: **B**. It has the clearest silhouette (the ribbon wing), the prop
|
||||
ties to her "specimen over cadence" trait, and the stamp's skull keeps the
|
||||
canon archive motif in the frame.
|
||||
|
Before Width: | Height: | Size: 328 KiB |
|
|
@ -1,271 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<!-- Libby, Direction A: The Card Catalogue. Hand-authored proposal sheet. -->
|
||||
<defs>
|
||||
<filter id="outline" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feMorphology in="SourceAlpha" operator="dilate" radius="3.2" result="d"/>
|
||||
<feFlood flood-color="#0f3d27"/>
|
||||
<feComposite in2="d" operator="in" result="o"/>
|
||||
<feMerge><feMergeNode in="o"/><feMergeNode in="SourceGraphic"/></feMerge>
|
||||
</filter>
|
||||
<filter id="sil" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feMorphology in="SourceAlpha" operator="dilate" radius="3.2" result="d"/>
|
||||
<feColorMatrix in="d" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0"/>
|
||||
</filter>
|
||||
<radialGradient id="glow" cx="0.45" cy="0.42" r="0.6">
|
||||
<stop offset="0" stop-color="#14402a"/>
|
||||
<stop offset="1" stop-color="#07111a"/>
|
||||
</radialGradient>
|
||||
<clipPath id="chest"><rect x="-200" y="-100" width="1100" height="890"/></clipPath>
|
||||
|
||||
<!-- ===== back hair: long blunt hime cut ===== -->
|
||||
<g id="backhair" stroke="#0f3d27" stroke-width="3" stroke-linejoin="round">
|
||||
<path d="M150 290 C118 400 112 600 104 790 L522 790 C510 600 498 400 472 290 Z" fill="#2a2340"/>
|
||||
<path d="M440 330 C470 450 482 620 490 790 L522 790 C510 600 498 400 472 290 Z" fill="#1a1530" stroke="none"/>
|
||||
<path d="M478 330 C494 450 506 620 514 785" fill="none" stroke="#2fbf71" stroke-width="4"/>
|
||||
</g>
|
||||
|
||||
<!-- ===== head front: face, features, sidelocks, fringe, glasses, hat ===== -->
|
||||
<g id="headfront" stroke-linejoin="round" stroke-linecap="round">
|
||||
<!-- far sidelock (behind face) -->
|
||||
<path d="M440 318 L482 318 C488 420 494 540 500 640 L446 640 Z" fill="#2a2340" stroke="#0f3d27" stroke-width="3"/>
|
||||
<path d="M488 380 C492 470 496 560 499 636" fill="none" stroke="#2fbf71" stroke-width="4"/>
|
||||
<!-- face -->
|
||||
<path d="M148 320 C143 420 162 502 214 550 C254 580 300 596 338 595 C378 592 420 566 441 520 C453 494 463 470 463 440 C470 400 468 360 456 316 Z" fill="#f3c9a8" stroke="#0f3d27" stroke-width="3"/>
|
||||
<!-- skin shadows: under fringe, far cheek -->
|
||||
<path d="M152 402 L464 394 L464 418 C400 410 300 418 156 434 Z" fill="#e3a98a"/>
|
||||
<path d="M446 405 C460 455 452 515 406 574 C440 548 456 500 448 460 Z" fill="#e3a98a"/>
|
||||
<path d="M444 470 C452 500 446 530 428 556" fill="none" stroke="#2fbf71" stroke-width="3.5"/>
|
||||
<g transform="translate(0 12)">
|
||||
<!-- blush -->
|
||||
<ellipse cx="246" cy="522" rx="26" ry="9" fill="#ee9a92" opacity="0.55"/>
|
||||
<ellipse cx="410" cy="522" rx="17" ry="8" fill="#ee9a92" opacity="0.55"/>
|
||||
<path d="M232 518 l6 -8 M244 520 l6 -8 M256 521 l6 -8" stroke="#d9786e" stroke-width="2" opacity="0.7"/>
|
||||
|
||||
<!-- near eye -->
|
||||
<clipPath id="eyeN"><path d="M212 446 C230 424 282 418 308 436 L305 500 C286 516 244 518 222 506 Z"/></clipPath>
|
||||
<path d="M212 446 C230 424 282 418 308 436 L305 500 C286 516 244 518 222 506 Z" fill="#ffffff"/>
|
||||
<g clip-path="url(#eyeN)">
|
||||
<ellipse cx="264" cy="470" rx="34" ry="46" fill="#2fbf71" stroke="#0f3d27" stroke-width="3"/>
|
||||
<path d="M226 424 L304 424 L304 458 C290 448 240 448 226 458 Z" fill="#0f3d27" opacity="0.85"/>
|
||||
<path d="M238 492 C250 510 280 510 292 492 C282 500 248 500 238 492 Z" fill="#9be8bd"/>
|
||||
<ellipse cx="265" cy="472" rx="13" ry="21" fill="#0f3d27"/>
|
||||
</g>
|
||||
<ellipse cx="250" cy="455" rx="11" ry="14" fill="#fff"/>
|
||||
<circle cx="282" cy="492" r="5" fill="#fff"/>
|
||||
<path d="M206 452 C222 422 280 410 312 434" fill="none" stroke="#0f3d27" stroke-width="7"/>
|
||||
<path d="M208 448 L196 440 L210 442 Z M212 440 L201 428 L216 434 Z" fill="#0f3d27" stroke="#0f3d27" stroke-width="2"/>
|
||||
<path d="M226 508 C250 518 284 516 300 502" fill="none" stroke="#0f3d27" stroke-width="2.5"/>
|
||||
|
||||
<!-- far eye -->
|
||||
<clipPath id="eyeF"><path d="M362 438 C378 422 410 420 428 436 L427 496 C413 509 381 511 367 499 Z"/></clipPath>
|
||||
<path d="M362 438 C378 422 410 420 428 436 L427 496 C413 509 381 511 367 499 Z" fill="#ffffff"/>
|
||||
<g clip-path="url(#eyeF)">
|
||||
<ellipse cx="394" cy="470" rx="26" ry="45" fill="#2fbf71" stroke="#0f3d27" stroke-width="3"/>
|
||||
<path d="M362 424 L430 424 L430 458 C418 448 378 448 362 458 Z" fill="#0f3d27" opacity="0.85"/>
|
||||
<path d="M375 492 C384 508 404 508 413 492 C405 499 383 499 375 492 Z" fill="#9be8bd"/>
|
||||
<ellipse cx="395" cy="472" rx="10" ry="20" fill="#0f3d27"/>
|
||||
</g>
|
||||
<ellipse cx="384" cy="455" rx="8" ry="12" fill="#fff"/>
|
||||
<circle cx="405" cy="491" r="4" fill="#fff"/>
|
||||
<path d="M358 440 C376 418 412 416 432 436" fill="none" stroke="#0f3d27" stroke-width="6.5"/>
|
||||
<path d="M430 434 L441 428 L433 440 Z" fill="#0f3d27" stroke="#0f3d27" stroke-width="2"/>
|
||||
<path d="M370 502 C386 510 410 510 423 500" fill="none" stroke="#0f3d27" stroke-width="2.5"/>
|
||||
|
||||
<!-- nose and mouth: knowing half-smile -->
|
||||
<path d="M352 482 L357 492 L350 494" fill="none" stroke="#c27d62" stroke-width="2.5"/>
|
||||
<path d="M326 527 C338 533 352 532 366 520" fill="none" stroke="#0f3d27" stroke-width="3"/>
|
||||
<path d="M366 520 l5 -3" stroke="#0f3d27" stroke-width="2.5"/>
|
||||
|
||||
<!-- glasses: small square brass frames -->
|
||||
<g fill="none">
|
||||
<path d="M200 440 L150 432" stroke="#0f3d27" stroke-width="6"/>
|
||||
<path d="M200 440 L150 432" stroke="#c8903a" stroke-width="2.5"/>
|
||||
<rect x="200" y="416" width="116" height="96" rx="9" stroke="#0f3d27" stroke-width="7"/>
|
||||
<rect x="200" y="416" width="116" height="96" rx="9" stroke="#c8903a" stroke-width="3"/>
|
||||
<path d="M352 418 L434 416 L434 510 L355 512 Z" stroke="#0f3d27" stroke-width="7"/>
|
||||
<path d="M352 418 L434 416 L434 510 L355 512 Z" stroke="#c8903a" stroke-width="3"/>
|
||||
<path d="M316 448 C328 438 342 438 352 448" stroke="#0f3d27" stroke-width="6"/>
|
||||
<path d="M316 448 C328 438 342 438 352 448" stroke="#c8903a" stroke-width="2.5"/>
|
||||
<path d="M212 498 L246 426 M226 504 L252 448" stroke="#ffffff" stroke-width="5" opacity="0.5"/>
|
||||
<path d="M364 498 L392 426" stroke="#ffffff" stroke-width="5" opacity="0.5"/>
|
||||
</g>
|
||||
|
||||
</g>
|
||||
<!-- near sidelock (in front of face) -->
|
||||
<path d="M136 310 C130 420 132 540 126 642 L202 642 C199 560 192 470 196 390 L178 312 Z" fill="#2a2340" stroke="#0f3d27" stroke-width="3"/>
|
||||
<path d="M178 330 C186 420 190 520 188 640 L202 642 C199 560 192 470 196 390 Z" fill="#1a1530"/>
|
||||
<!-- fringe: blunt, straight -->
|
||||
<path d="M126 340 C124 240 214 188 318 188 C424 188 494 240 490 340 L470 396 L150 404 Z" fill="#2a2340" stroke="#0f3d27" stroke-width="3"/>
|
||||
<path d="M150 404 L470 396 L470 382 L150 390 Z" fill="#1a1530"/>
|
||||
<path d="M236 360 L236 402 M300 356 L300 400 M372 356 L372 398 M430 358 L430 396" stroke="#1a1530" stroke-width="3"/>
|
||||
<!-- squared hair highlight (one highlight tone) -->
|
||||
<path d="M158 346 C230 326 400 322 474 342 L472 356 C400 338 230 340 160 362 Z" fill="#4a4170"/>
|
||||
<path d="M236 330 L236 350 M300 324 L300 344 M372 324 L372 344 M430 330 L430 348" stroke="#2a2340" stroke-width="5"/>
|
||||
<path d="M470 330 L470 386" stroke="#2fbf71" stroke-width="4"/>
|
||||
<!-- brows over the fringe: near level, far raised (specimen) -->
|
||||
<path d="M226 392 C246 384 276 384 296 390" fill="none" stroke="#2a2340" stroke-width="6"/>
|
||||
<path d="M366 380 C380 366 408 364 426 374" fill="none" stroke="#2a2340" stroke-width="6"/>
|
||||
|
||||
<!-- ===== hat: stack of card-catalogue drawers ===== -->
|
||||
<g transform="translate(0 42) rotate(-4 330 270)" stroke="#0f3d27" stroke-width="3">
|
||||
<!-- top and side faces -->
|
||||
<path d="M170 18 L400 18 L445 30 L215 30 Z" fill="#7ddca5"/>
|
||||
<path d="M170 18 L215 30 L215 272 L170 260 Z" fill="#1f8f52"/>
|
||||
<path d="M215 90 L170 78 M215 150 L170 138 M215 210 L170 198" fill="none" stroke-width="2.5"/>
|
||||
<!-- front face -->
|
||||
<rect x="215" y="30" width="230" height="242" fill="#2fbf71"/>
|
||||
<path d="M215 90 L445 90 M215 150 L445 150 M215 210 L445 210 M330 30 L330 272" fill="none"/>
|
||||
<!-- drawer panels, each with label holder and cup pull -->
|
||||
<g id="drawer">
|
||||
<rect x="222" y="37" width="101" height="46" rx="2" fill="#2fbf71" stroke-width="2"/>
|
||||
<path d="M224 79 L321 79" stroke="#1f8f52" stroke-width="5"/>
|
||||
<rect x="252" y="44" width="42" height="15" fill="#c8903a" stroke-width="2"/>
|
||||
<rect x="257" y="47" width="32" height="9" fill="#f6e7c8" stroke="none"/>
|
||||
<path d="M258 64 C258 78 288 78 288 64 Z" fill="#c8903a" stroke-width="2"/>
|
||||
</g>
|
||||
<use href="#drawer" x="115"/>
|
||||
<use href="#drawer" y="60"/>
|
||||
<use href="#drawer" x="115" y="60"/>
|
||||
<use href="#drawer" y="120"/>
|
||||
<use href="#drawer" y="180"/>
|
||||
<use href="#drawer" x="115" y="180"/>
|
||||
<!-- the open drawer: dark slot, cards, pulled-out front -->
|
||||
<rect x="333" y="153" width="109" height="54" fill="#0f3d27"/>
|
||||
<path d="M333 153 L369 163 L369 223 L333 213 Z" fill="#1f8f52"/>
|
||||
<g fill="#f6e7c8" stroke-width="2.5">
|
||||
<path d="M352 168 L372 108 L420 120 L404 178 Z"/>
|
||||
<path d="M374 172 L388 112 L436 118 L428 176 Z"/>
|
||||
<path d="M398 174 L420 116 L466 128 L448 182 Z"/>
|
||||
<path d="M392 120 L430 125 M394 130 L426 134 M424 132 L456 141" stroke="#c8903a" stroke-width="2"/>
|
||||
</g>
|
||||
<path d="M333 153 L442 153 L478 163 L369 163 Z" fill="#7ddca5"/>
|
||||
<rect x="369" y="163" width="109" height="60" fill="#2fbf71"/>
|
||||
<rect x="376" y="170" width="95" height="46" rx="2" fill="#2fbf71" stroke-width="2"/>
|
||||
<path d="M378 212 L469 212" stroke="#1f8f52" stroke-width="5"/>
|
||||
<rect x="403" y="176" width="42" height="15" fill="#c8903a" stroke-width="2"/>
|
||||
<rect x="408" y="179" width="32" height="9" fill="#f6e7c8" stroke="none"/>
|
||||
<path d="M409 196 C409 210 439 210 439 196 Z" fill="#c8903a" stroke-width="2"/>
|
||||
<!-- brass base rail -->
|
||||
<path d="M170 254 L215 266 L445 266 L445 278 L215 278 L170 266 Z" fill="#c8903a"/>
|
||||
<path d="M445 36 L445 262" stroke="#2fbf71" stroke-width="0"/>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<!-- ===== bust body: cardigan, square collar ===== -->
|
||||
<g id="bustbody" stroke="#0f3d27" stroke-width="3" stroke-linejoin="round">
|
||||
<path d="M298 580 L300 652 L378 652 L374 580 Z" fill="#f3c9a8"/>
|
||||
<path d="M298 584 C326 606 356 606 376 590 L377 628 L299 632 Z" fill="#e3a98a" stroke="none"/>
|
||||
<path d="M110 790 C112 712 150 670 232 652 L300 640 L380 640 L456 652 C528 666 566 710 576 790 Z" fill="#2fbf71"/>
|
||||
<path d="M440 660 C500 676 540 712 548 790 L576 790 C566 710 528 666 456 652 Z" fill="#1f8f52" stroke="none"/>
|
||||
<path d="M300 640 L338 790 L384 640 Z" fill="#f6e7c8"/>
|
||||
<path d="M300 640 L244 652 L258 712 L326 704 Z" fill="#f6e7c8"/>
|
||||
<path d="M384 640 L436 650 L424 708 L352 704 Z" fill="#f6e7c8"/>
|
||||
<path d="M330 704 L340 760 L350 704 Z" fill="#e0cba3" stroke="none"/>
|
||||
<path d="M272 664 L300 662 M402 662 L420 664" stroke="#c8903a" stroke-width="3"/>
|
||||
<path d="M326 704 L338 790 L352 704" fill="none"/>
|
||||
<circle cx="360" cy="730" r="7" fill="#c8903a"/>
|
||||
<circle cx="352" cy="770" r="7" fill="#c8903a"/>
|
||||
<path d="M560 720 C570 750 574 770 576 790" fill="none" stroke="#2fbf71" stroke-width="0"/>
|
||||
</g>
|
||||
|
||||
<!-- ===== raised hand with the index card ===== -->
|
||||
<g id="cardhand" stroke="#0f3d27" stroke-width="3" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M492 790 C488 720 492 650 500 594 L560 590 C566 650 572 720 580 790 Z" fill="#2fbf71"/>
|
||||
<path d="M540 594 C548 660 556 720 562 790 L580 790 C572 720 566 650 560 590 Z" fill="#1f8f52" stroke="none"/>
|
||||
<path d="M496 594 L562 588 L564 610 L498 616 Z" fill="#f6e7c8"/>
|
||||
<g transform="rotate(-9 575 470)">
|
||||
<rect x="488" y="408" width="182" height="122" rx="4" fill="#f6e7c8" stroke-width="4"/>
|
||||
<path d="M488 436 L670 436" stroke="#d9483b" stroke-width="2.5"/>
|
||||
<path d="M500 452 L656 452 M500 470 L656 470 M500 488 L656 488 M500 506 L600 506" stroke="#e0cba3" stroke-width="1.5"/>
|
||||
<text x="499" y="430" font-family="Consolas, 'Courier New', monospace" font-size="15" font-weight="700" fill="#0f3d27" stroke="none">LIBBY.cc</text>
|
||||
<text x="501" y="466" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#2a2340" stroke="none">id u64</text>
|
||||
<text x="501" y="484" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#2a2340" stroke="none">name str</text>
|
||||
<text x="501" y="502" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#2a2340" stroke="none">tags [str]</text>
|
||||
<g transform="translate(14 -26) rotate(-14 622 492)">
|
||||
<rect x="586" y="476" width="74" height="30" rx="3" fill="none" stroke="#d9483b" stroke-width="3"/>
|
||||
<text x="594" y="497" font-family="Consolas, 'Courier New', monospace" font-size="15" font-weight="700" fill="#d9483b" stroke="none">TYPED</text>
|
||||
</g>
|
||||
</g>
|
||||
<!-- hand: fingers behind card edge, thumb in front -->
|
||||
<path d="M496 566 C494 540 506 528 530 528 C554 528 568 542 568 564 C568 584 556 598 532 598 C510 598 498 586 496 566 Z" fill="#f3c9a8"/>
|
||||
<path d="M552 532 C566 540 568 566 556 584 C548 592 540 594 530 596 C548 580 556 556 552 532 Z" fill="#e3a98a" stroke="none"/>
|
||||
<path d="M508 546 C510 528 524 514 540 512 C550 512 550 524 540 532 C530 540 522 544 520 552 Z" fill="#f3c9a8"/>
|
||||
<path d="M520 568 L548 566 M522 582 L546 580" fill="none" stroke-width="2"/>
|
||||
</g>
|
||||
|
||||
<!-- whole bust, clipped at mid-chest -->
|
||||
<g id="bust" clip-path="url(#chest)">
|
||||
<use href="#backhair"/>
|
||||
<use href="#bustbody"/>
|
||||
<use href="#headfront"/>
|
||||
<use href="#cardhand"/>
|
||||
</g>
|
||||
|
||||
<!-- chibi body (2.5 heads), drawn in chibi space, head scaled 0.36 -->
|
||||
<g id="chibibody" stroke="#0f3d27" stroke-width="2.5" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path d="M90 382 L92 424 L104 424 L104 382 Z M128 382 L128 424 L140 424 L142 382 Z" fill="#f3c9a8"/>
|
||||
<path d="M90 400 L104 400 L104 424 L92 424 Z M128 400 L140 400 L140 424 L128 424 Z" fill="#f6e7c8"/>
|
||||
<path d="M84 432 C84 420 108 418 108 428 L108 436 L84 436 Z M124 428 C124 418 148 420 148 432 L148 436 L124 436 Z" fill="#0f3d27"/>
|
||||
<path d="M72 318 L162 318 L178 388 L56 388 Z" fill="#2a2340"/>
|
||||
<path d="M112 318 L130 388 L178 388 L162 318 Z" fill="#1a1530" stroke="none"/>
|
||||
<path d="M78 226 L154 226 C166 256 168 296 164 326 L70 326 C66 296 68 256 78 226 Z" fill="#2fbf71"/>
|
||||
<path d="M100 226 L116 262 L132 226 Z" fill="#f6e7c8"/>
|
||||
<path d="M116 262 L116 326" fill="none"/>
|
||||
<circle cx="122" cy="282" r="3.5" fill="#c8903a"/>
|
||||
<circle cx="122" cy="304" r="3.5" fill="#c8903a"/>
|
||||
<path d="M80 232 C64 256 58 282 62 302 L76 300 C76 282 80 262 90 246 Z" fill="#2fbf71"/>
|
||||
<circle cx="68" cy="308" r="10" fill="#f3c9a8"/>
|
||||
<path d="M150 234 C168 222 180 204 186 186 L172 178 C166 196 156 210 142 220 Z" fill="#2fbf71"/>
|
||||
<g transform="rotate(-10 196 150)">
|
||||
<rect x="160" y="124" width="72" height="50" rx="2" fill="#f6e7c8"/>
|
||||
<path d="M168 140 L224 140 M168 150 L224 150 M168 160 L206 160" stroke="#e0cba3" stroke-width="2"/>
|
||||
<rect x="204" y="152" width="22" height="12" fill="none" stroke="#d9483b" stroke-width="2"/>
|
||||
</g>
|
||||
<circle cx="180" cy="174" r="11" fill="#f3c9a8"/>
|
||||
</g>
|
||||
</defs>
|
||||
|
||||
<!-- ===== sheet ===== -->
|
||||
<rect width="1200" height="800" fill="#efeae0"/>
|
||||
|
||||
<!-- portrait card: GameCult ground, parallelogram, edge-lit in key green -->
|
||||
<path d="M58 14 L792 14 L752 786 L18 786 Z" fill="url(#glow)"/>
|
||||
<path d="M58 14 L792 14 L752 786 L18 786 Z" fill="none" stroke="#2fbf71" stroke-width="4"/>
|
||||
|
||||
<g transform="translate(70 4) scale(0.985)">
|
||||
<use href="#bust" filter="url(#outline)"/>
|
||||
</g>
|
||||
<text x="80" y="46" font-family="Segoe UI, Arial, sans-serif" font-size="14" fill="#2fbf71" letter-spacing="4">BUST · SPECIMEN</text>
|
||||
|
||||
<!-- full-body chibi -->
|
||||
<text x="820" y="40" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#0f3d27" letter-spacing="3">FULL BODY · 2.5 HEADS</text>
|
||||
<g transform="translate(830 50)" filter="url(#outline)">
|
||||
<g transform="scale(0.36)"><use href="#backhair"/></g>
|
||||
<use href="#chibibody"/>
|
||||
<path d="M108 206 L108 232 L130 232 L130 206 Z" fill="#f3c9a8" stroke="#0f3d27" stroke-width="2.5"/>
|
||||
<g transform="scale(0.36)"><use href="#headfront"/></g>
|
||||
</g>
|
||||
|
||||
<!-- silhouettes -->
|
||||
<text x="1050" y="40" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#0f3d27" letter-spacing="3">SILHOUETTE</text>
|
||||
<g transform="translate(1040 52) scale(0.19)"><use href="#bust" filter="url(#sil)"/></g>
|
||||
<g transform="translate(1076 222) scale(0.06)"><use href="#bust" filter="url(#sil)"/></g>
|
||||
<text x="1050" y="290" font-family="Segoe UI, Arial, sans-serif" font-size="11" fill="#555">48 px</text>
|
||||
|
||||
<!-- title, hook, palette -->
|
||||
<text x="820" y="540" font-family="Segoe UI, Arial, sans-serif" font-size="30" font-weight="700" fill="#0f3d27">LIBBY · A</text>
|
||||
<text x="820" y="570" font-family="Segoe UI, Arial, sans-serif" font-size="18" fill="#0f3d27" letter-spacing="2">THE CARD CATALOGUE</text>
|
||||
<text x="820" y="606" font-family="Segoe UI, Arial, sans-serif" font-size="14.5" fill="#222">
|
||||
<tspan x="820">Hook: a hat of card-catalogue drawers as tall</tspan>
|
||||
<tspan x="820" dy="19">as her face, one drawer pulled open on index cards.</tspan>
|
||||
</text>
|
||||
<g font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#333">
|
||||
<rect x="820" y="660" width="52" height="52" fill="#2fbf71" stroke="#0f3d27" stroke-width="2"/><text x="820" y="728">#2fbf71</text>
|
||||
<rect x="880" y="660" width="52" height="52" fill="#0f3d27" stroke="#0f3d27" stroke-width="2"/><text x="880" y="728">#0f3d27</text>
|
||||
<rect x="940" y="660" width="52" height="52" fill="#f6e7c8" stroke="#0f3d27" stroke-width="2"/><text x="940" y="728">#f6e7c8</text>
|
||||
<rect x="1000" y="660" width="52" height="52" fill="#c8903a" stroke="#0f3d27" stroke-width="2"/><text x="1000" y="728">#c8903a</text>
|
||||
<rect x="1060" y="660" width="52" height="52" fill="#2a2340" stroke="#0f3d27" stroke-width="2"/><text x="1060" y="728">#2a2340</text>
|
||||
<rect x="1120" y="660" width="52" height="52" fill="#f3c9a8" stroke="#0f3d27" stroke-width="2"/><text x="1120" y="728">#f3c9a8</text>
|
||||
</g>
|
||||
<text x="820" y="760" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#555">key · line · card stock · brass · hair · skin</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 210 KiB |
|
|
@ -1,340 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<title>Nibu, direction A: Source Slate</title>
|
||||
<defs>
|
||||
<!-- canon Nibu: lavender hair, swoop over one eye, pink bow + circuit clip, violet coat, glitch.
|
||||
palette: key #9a6bff, line #2a1452, hair #b9aef5 (shadow #8576dc, light #e4ddff),
|
||||
coat #4a2d8f (shadow #33206a), ribbon pink #f08cc0 (shadow #c4609a), cyan #7af0ff, skin #f0d3dd (shadow #d6a8bd) -->
|
||||
<filter id="holo" x="-20%" y="-20%" width="140%" height="140%">
|
||||
<feColorMatrix in="SourceGraphic" type="matrix" values="0.35 0.45 0.15 0 0.05 0.25 0.50 0.25 0 0 0.10 0.30 0.40 0 0.30 0 0 0 0.85 0" result="tint"/>
|
||||
<feMorphology in="SourceAlpha" operator="dilate" radius="3" result="fat"/>
|
||||
<feComposite in="fat" in2="SourceAlpha" operator="out" result="ring"/>
|
||||
<feFlood flood-color="#7af0ff"/>
|
||||
<feComposite in2="ring" operator="in" result="edge"/>
|
||||
<feMerge><feMergeNode in="tint"/><feMergeNode in="edge"/></feMerge>
|
||||
</filter>
|
||||
<filter id="black" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feFlood flood-color="#000"/>
|
||||
<feComposite in2="SourceAlpha" operator="in"/>
|
||||
</filter>
|
||||
<pattern id="scan" width="10" height="7" patternUnits="userSpaceOnUse">
|
||||
<rect width="10" height="5" fill="#fff"/>
|
||||
</pattern>
|
||||
<mask id="scanMask" maskUnits="userSpaceOnUse" x="-600" y="-600" width="2400" height="2400">
|
||||
<rect x="-600" y="-600" width="2400" height="2400" fill="url(#scan)"/>
|
||||
</mask>
|
||||
<clipPath id="eyeBand"><rect x="206" y="366" width="128" height="56"/></clipPath>
|
||||
<clipPath id="mouthBand"><rect x="150" y="428" width="140" height="16"/></clipPath>
|
||||
|
||||
<!-- ===== BUST, local space 640 x 770, faces screen right ===== -->
|
||||
<path id="faceP" d="M192,285 C186,370 214,446 300,498 C326,514 356,516 378,502 C432,468 468,410 472,298 Z"/>
|
||||
<clipPath id="faceClip"><use xlink:href="#faceP"/></clipPath>
|
||||
<!-- crown and wispy bangs -->
|
||||
<path id="crownP" d="M126,320 C110,160 212,56 336,56 C470,56 560,160 544,320 C534,314 520,304 510,292
|
||||
L504,338 Q486,300 462,280 Q458,316 452,352 Q430,300 400,272 Q396,322 390,362 Q366,300 330,272
|
||||
Q326,322 318,358 Q298,302 266,280 Q262,312 256,342 Q236,306 206,290 C178,300 152,312 126,320 Z"/>
|
||||
|
||||
<g id="hairBack">
|
||||
<path d="M332,52 C474,50 566,154 558,300 C556,372 600,430 586,512 C574,584 624,640 604,706 C596,734 606,754 614,850 L452,850 C470,700 462,620 446,566 L244,566 C226,640 214,710 210,850 L56,850 C76,720 52,670 72,612 C92,552 58,494 92,430 C112,392 120,350 122,300 C124,150 196,54 332,52 Z" fill="#8576dc" stroke="#2a1452" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M96,470 C80,530 104,580 84,640 M586,540 C574,600 610,650 592,710" fill="none" stroke="#2a1452" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<!-- ribbon bow on her far side -->
|
||||
<path d="M548,272 L586,370 L566,360 L558,384 L530,284 Z M556,270 L620,346 L598,344 L600,368 L540,282 Z" fill="#c4609a" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M540,262 C566,186 640,184 628,238 C622,268 578,276 540,262 Z" fill="#f08cc0" stroke="#2a1452" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M540,262 C600,250 630,300 610,322 C590,340 556,300 540,262 Z" fill="#f08cc0" stroke="#2a1452" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M566,232 C584,214 606,214 612,232 M566,286 C588,296 600,306 604,316" fill="none" stroke="#c4609a" stroke-width="5" stroke-linecap="round"/>
|
||||
<ellipse cx="542" cy="264" rx="17" ry="21" fill="#f08cc0" stroke="#2a1452" stroke-width="5"/>
|
||||
</g>
|
||||
|
||||
<g id="bodyC">
|
||||
<path d="M300,466 L298,580 L394,580 L392,466 Z" fill="#f0d3dd" stroke="#2a1452" stroke-width="5"/>
|
||||
<path d="M298,488 C330,526 370,520 394,486 L394,556 L298,556 Z" fill="#d6a8bd"/>
|
||||
<!-- coat -->
|
||||
<path d="M96,850 C104,660 176,600 280,582 L412,578 C512,598 572,662 584,850 Z" fill="#4a2d8f" stroke="#2a1452" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M430,588 C510,612 562,668 574,850 L494,850 C486,700 464,640 420,604 Z" fill="#33206a"/>
|
||||
<path d="M546,640 C566,680 576,720 580,850" fill="none" stroke="#9a6bff" stroke-width="6" stroke-linecap="round"/>
|
||||
<!-- blouse panel -->
|
||||
<path d="M282,582 L410,578 L384,850 L308,850 Z" fill="#e4ddff" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M318,650 L376,648 L370,730 L322,730 Z" fill="#7af0ff" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M330,668 L362,668 M330,684 L352,684 M330,700 L364,700 M330,714 L346,714" stroke="#2a1452" stroke-width="3" stroke-linecap="round"/>
|
||||
<!-- circuit-glyph trim on the coat front edges -->
|
||||
<path d="M282,584 L270,640 L284,660 L272,720 L276,850 M410,580 L420,636 L406,656 L414,720 L410,850" fill="none" stroke="#f08cc0" stroke-width="5" stroke-linejoin="round"/>
|
||||
<circle cx="270" cy="640" r="6" fill="#f08cc0" stroke="#2a1452" stroke-width="2.5"/>
|
||||
<circle cx="406" cy="656" r="6" fill="#f08cc0" stroke="#2a1452" stroke-width="2.5"/>
|
||||
<!-- standing collar and throat frill -->
|
||||
<path d="M262,520 L240,612 L298,590 Z" fill="#4a2d8f" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M426,512 L462,604 L396,588 Z" fill="#33206a" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M292,548 Q304,566 318,552 Q330,572 346,556 Q360,574 374,554 Q388,568 400,546 L404,590 Q350,606 288,592 Z" fill="#f4f0ff" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<circle cx="346" cy="604" r="11" fill="#9a6bff" stroke="#2a1452" stroke-width="4"/>
|
||||
<circle cx="342" cy="600" r="3.5" fill="#fff"/>
|
||||
<!-- shoulder port ring -->
|
||||
<circle cx="458" cy="616" r="18" fill="#1a1726" stroke="#2a1452" stroke-width="4"/>
|
||||
<circle cx="458" cy="616" r="11" fill="none" stroke="#7af0ff" stroke-width="5"/>
|
||||
</g>
|
||||
|
||||
<g id="headFront">
|
||||
<use xlink:href="#faceP" fill="#f0d3dd" stroke="#2a1452" stroke-width="6"/>
|
||||
<g clip-path="url(#faceClip)">
|
||||
<use xlink:href="#crownP" transform="translate(6,16)" fill="#d6a8bd"/>
|
||||
<path d="M440,330 C452,400 430,460 380,500 L480,520 L500,300 Z" fill="#d6a8bd"/>
|
||||
</g>
|
||||
<path d="M452,360 C448,420 424,466 384,494" fill="none" stroke="#9a6bff" stroke-width="5" stroke-linecap="round"/>
|
||||
<!-- front locks: near one falls over the shoulder, far one frames the jaw -->
|
||||
<path d="M540,300 C546,380 520,440 500,500 C486,548 512,600 498,660 C492,700 500,740 496,850 L452,850 C462,730 446,690 458,640 C470,580 444,540 460,480 C474,420 470,360 462,312 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M128,300 C112,380 146,440 166,500 C186,560 142,620 166,690 C176,720 166,750 158,850 L244,850 C252,720 232,680 244,636 C256,590 226,540 222,480 C216,420 214,360 220,314 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M220,330 C214,400 222,470 238,520 C246,560 230,600 236,640 C222,600 216,560 210,520 C196,460 196,390 206,330 Z" fill="#8576dc"/>
|
||||
<path d="M150,520 C168,560 160,600 154,640" fill="none" stroke="#2a1452" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<use xlink:href="#crownP" fill="#b9aef5" stroke="#2a1452" stroke-width="8" stroke-linejoin="round"/>
|
||||
<!-- one highlight band -->
|
||||
<path d="M262,128 C296,110 336,104 380,108 L370,128 L398,110 L404,128 L430,114 L436,128 C410,118 340,112 262,128 Z" fill="#e4ddff"/>
|
||||
<path d="M170,236 C176,200 194,172 218,152 L214,176 L232,150 C206,176 186,206 170,236 Z" fill="#e4ddff"/>
|
||||
<path d="M512,240 C516,200 506,170 488,146" fill="none" stroke="#9a6bff" stroke-width="5" stroke-linecap="round"/>
|
||||
<!-- circuit hair clip -->
|
||||
<g transform="rotate(-24 372 134)">
|
||||
<rect x="336" y="126" width="72" height="16" rx="5" fill="#f08cc0" stroke="#2a1452" stroke-width="4"/>
|
||||
<rect x="356" y="116" width="32" height="36" rx="4" fill="#f4f0ff" stroke="#2a1452" stroke-width="4"/>
|
||||
<path d="M364,124 L364,134 L372,134 L372,144 M380,122 L380,140" fill="none" stroke="#9a6bff" stroke-width="3" stroke-linecap="round"/>
|
||||
<circle cx="334" cy="134" r="11" fill="#f08cc0" stroke="#2a1452" stroke-width="4"/>
|
||||
<circle cx="410" cy="134" r="11" fill="#f08cc0" stroke="#2a1452" stroke-width="4"/>
|
||||
<circle cx="330" cy="130" r="3.5" fill="#fff"/><circle cx="406" cy="130" r="3.5" fill="#fff"/>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g id="swoop">
|
||||
<path d="M336,112 C268,146 230,224 242,300 C252,356 236,410 192,428 C156,440 120,420 104,382 C136,398 164,390 176,358 C188,322 182,262 202,204 C222,156 276,124 336,112 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M240,300 C252,352 238,400 192,426 C214,400 222,366 214,322 C206,272 214,212 246,160 C228,210 226,262 240,300 Z" fill="#8576dc"/>
|
||||
<path d="M206,196 C216,160 240,132 274,116" fill="none" stroke="#e4ddff" stroke-width="7" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- eyes: same construction for every expression -->
|
||||
<clipPath id="wN"><path d="M226,374 C236,350 300,346 320,370 C324,402 312,434 274,438 C240,434 222,406 226,374 Z"/></clipPath>
|
||||
<clipPath id="wF"><path d="M372,370 C380,350 426,348 440,368 C444,400 434,430 406,434 C382,430 368,404 372,370 Z"/></clipPath>
|
||||
<clipPath id="iN"><ellipse cx="278" cy="400" rx="34" ry="44"/></clipPath>
|
||||
<clipPath id="iF"><ellipse cx="409" cy="397" rx="25" ry="41"/></clipPath>
|
||||
|
||||
<g id="exprCalm">
|
||||
<path d="M240,338 Q272,328 306,334" fill="none" stroke="#2a1452" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M380,332 Q406,326 432,330" fill="none" stroke="#2a1452" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M226,374 C236,350 300,346 320,370 C324,402 312,434 274,438 C240,434 222,406 226,374 Z" fill="#fbf9ff"/>
|
||||
<g clip-path="url(#wN)"><g clip-path="url(#iN)">
|
||||
<rect x="200" y="340" width="140" height="120" fill="#9a6bff"/>
|
||||
<ellipse cx="278" cy="372" rx="42" ry="28" fill="#4b2a99"/>
|
||||
<ellipse cx="282" cy="438" rx="28" ry="14" fill="#e0b6ff"/>
|
||||
<ellipse cx="280" cy="404" rx="13" ry="19" fill="#2a1452"/>
|
||||
</g>
|
||||
<ellipse cx="278" cy="400" rx="34" ry="44" fill="none" stroke="#2a1452" stroke-width="3"/>
|
||||
<ellipse cx="292" cy="386" rx="10" ry="12" fill="#fff"/>
|
||||
<circle cx="266" cy="420" r="5" fill="#fff"/>
|
||||
</g>
|
||||
<!-- half-lidded: heavy upper lid -->
|
||||
<path d="M218,394 C226,354 300,346 330,370 L340,366 L330,384 C306,370 252,368 228,398 Z" fill="#2a1452"/>
|
||||
<path d="M250,438 Q276,446 302,434" fill="none" stroke="#2a1452" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<path d="M372,370 C380,350 426,348 440,368 C444,400 434,430 406,434 C382,430 368,404 372,370 Z" fill="#fbf9ff"/>
|
||||
<g clip-path="url(#wF)"><g clip-path="url(#iF)">
|
||||
<rect x="360" y="340" width="100" height="120" fill="#9a6bff"/>
|
||||
<ellipse cx="409" cy="370" rx="32" ry="27" fill="#4b2a99"/>
|
||||
<ellipse cx="411" cy="434" rx="21" ry="12" fill="#e0b6ff"/>
|
||||
<ellipse cx="411" cy="401" rx="10" ry="18" fill="#2a1452"/>
|
||||
</g>
|
||||
<ellipse cx="409" cy="397" rx="25" ry="41" fill="none" stroke="#2a1452" stroke-width="3"/>
|
||||
<ellipse cx="420" cy="384" rx="8" ry="10" fill="#fff"/>
|
||||
<circle cx="400" cy="416" r="4" fill="#fff"/>
|
||||
</g>
|
||||
<path d="M366,390 C374,352 430,344 448,364 L458,360 L448,380 C430,366 386,366 372,394 Z" fill="#2a1452"/>
|
||||
<path d="M386,432 Q408,440 428,430" fill="none" stroke="#2a1452" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M356,442 Q364,450 356,455" fill="none" stroke="#2a1452" stroke-width="3" stroke-linecap="round"/>
|
||||
<!-- level, unbothered mouth -->
|
||||
<path d="M336,474 Q352,478 368,472" fill="none" stroke="#2a1452" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M244,456 l-9,11 M258,456 l-9,11 M424,450 l-7,9" stroke="#e08aa8" stroke-width="3" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="exprSource">
|
||||
<path d="M234,326 Q262,290 308,316" fill="none" stroke="#2a1452" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M378,342 Q406,336 436,344" fill="none" stroke="#2a1452" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M226,374 C236,350 300,346 320,370 C324,402 312,434 274,438 C240,434 222,406 226,374 Z" fill="#fbf9ff"/>
|
||||
<g clip-path="url(#wN)"><g clip-path="url(#iN)">
|
||||
<rect x="200" y="340" width="140" height="120" fill="#9a6bff"/>
|
||||
<ellipse cx="278" cy="372" rx="42" ry="28" fill="#4b2a99"/>
|
||||
<ellipse cx="282" cy="438" rx="28" ry="14" fill="#e0b6ff"/>
|
||||
<ellipse cx="288" cy="406" rx="13" ry="19" fill="#2a1452"/>
|
||||
</g>
|
||||
<ellipse cx="278" cy="400" rx="34" ry="44" fill="none" stroke="#2a1452" stroke-width="3"/>
|
||||
<ellipse cx="292" cy="386" rx="10" ry="12" fill="#fff"/>
|
||||
<circle cx="266" cy="420" r="5" fill="#fff"/>
|
||||
</g>
|
||||
<!-- half-lidded: heavy upper lid -->
|
||||
<path d="M218,394 C226,354 300,346 330,370 L340,366 L330,384 C306,370 252,368 228,398 Z" fill="#2a1452"/>
|
||||
<path d="M250,438 Q276,446 302,434" fill="none" stroke="#2a1452" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<path d="M372,370 C380,350 426,348 440,368 C444,400 434,430 406,434 C382,430 368,404 372,370 Z" fill="#fbf9ff"/>
|
||||
<g clip-path="url(#wF)"><g clip-path="url(#iF)">
|
||||
<rect x="360" y="340" width="100" height="120" fill="#9a6bff"/>
|
||||
<ellipse cx="409" cy="370" rx="32" ry="27" fill="#4b2a99"/>
|
||||
<ellipse cx="411" cy="434" rx="21" ry="12" fill="#e0b6ff"/>
|
||||
<ellipse cx="418" cy="403" rx="10" ry="18" fill="#2a1452"/>
|
||||
</g>
|
||||
<ellipse cx="409" cy="397" rx="25" ry="41" fill="none" stroke="#2a1452" stroke-width="3"/>
|
||||
<ellipse cx="420" cy="384" rx="8" ry="10" fill="#fff"/>
|
||||
<circle cx="400" cy="416" r="4" fill="#fff"/>
|
||||
</g>
|
||||
<path d="M366,398 C376,364 430,356 448,372 L458,368 L448,388 C430,376 386,376 372,402 Z" fill="#2a1452"/>
|
||||
<path d="M386,432 Q408,440 428,430" fill="none" stroke="#2a1452" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M356,442 Q364,450 356,455" fill="none" stroke="#2a1452" stroke-width="3" stroke-linecap="round"/>
|
||||
<!-- level, unbothered mouth -->
|
||||
<path d="M330,478 Q348,474 362,472 Q370,470 376,460" fill="none" stroke="#2a1452" stroke-width="4" stroke-linecap="round"/>
|
||||
|
||||
</g>
|
||||
|
||||
<g id="exprHostile">
|
||||
<path d="M222,318 L314,350" stroke="#2a1452" stroke-width="11" stroke-linecap="round"/>
|
||||
<path d="M372,350 L446,318" stroke="#2a1452" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M230,388 C250,374 300,372 318,386 C318,408 304,426 274,428 C246,426 230,408 230,388 Z" fill="#fff"/>
|
||||
<ellipse cx="282" cy="402" rx="20" ry="24" fill="#9a6bff"/>
|
||||
<ellipse cx="283" cy="404" rx="5" ry="12" fill="#2a1452"/>
|
||||
<path d="M220,388 L328,374 L332,394 L226,398 Z" fill="#2a1452"/>
|
||||
<path d="M376,386 C392,374 428,372 438,384 C438,406 428,424 406,426 C386,424 376,408 376,386 Z" fill="#fff"/>
|
||||
<ellipse cx="408" cy="402" rx="16" ry="22" fill="#9a6bff"/>
|
||||
<ellipse cx="409" cy="404" rx="4" ry="11" fill="#2a1452"/>
|
||||
<path d="M368,374 L448,384 L446,398 L372,394 Z" fill="#2a1452"/>
|
||||
<path d="M312,458 L394,452 C386,496 334,502 312,458 Z" fill="#2a1452"/>
|
||||
<path d="M316,460 L390,455 L388,466 L378,478 L372,467 L328,470 L322,480 Z" fill="#fff"/>
|
||||
</g>
|
||||
|
||||
<g id="ghostCore" transform="translate(-196,-64) rotate(-7 336 400)">
|
||||
<use xlink:href="#hairBack"/><use xlink:href="#bodyC"/><use xlink:href="#headFront"/><use xlink:href="#exprHostile" transform="translate(336,410) scale(1.12) translate(-336,-410)"/><use xlink:href="#swoop"/>
|
||||
</g>
|
||||
|
||||
<g id="slate">
|
||||
<!-- detached sleeve rising from the frame edge -->
|
||||
<path d="M548,780 C556,730 568,700 584,664 L656,676 C650,710 648,740 650,780 Z" fill="#4a2d8f" stroke="#2a1452" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M622,672 L656,676 C650,710 648,740 650,780 L616,780 C616,740 616,708 622,672 Z" fill="#33206a"/>
|
||||
<path d="M578,672 L662,684 L656,708 L572,698 Z" fill="#33206a" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M576,688 L658,700" stroke="#f08cc0" stroke-width="4"/>
|
||||
<g transform="translate(612,520) rotate(10)">
|
||||
<!-- glove palm behind the slate -->
|
||||
<path d="M-40,110 C-44,150 -20,170 6,168 C34,166 46,140 40,108 Z" fill="#33206a" stroke="#2a1452" stroke-width="6" stroke-linejoin="round"/>
|
||||
<rect x="-86" y="-118" width="172" height="232" rx="10" fill="#1a1726" stroke="#2a1452" stroke-width="8"/>
|
||||
<rect x="-78" y="-110" width="156" height="216" rx="6" fill="none" stroke="#7af0ff" stroke-width="4"/>
|
||||
<rect x="-78" y="-110" width="156" height="26" fill="#7af0ff"/>
|
||||
<text x="-68" y="-91" font-family="Consolas, monospace" font-size="16" font-weight="700" letter-spacing="3" fill="#1a1726">SOURCE?</text>
|
||||
<path d="M-62,-60 L56,-60 M-62,-40 L36,-40 M-62,-20 L62,-20 M-62,0 L16,0" stroke="#9a6bff" stroke-width="6" stroke-linecap="round"/>
|
||||
<path d="M-68,-38 L68,-26" stroke="#f08cc0" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M24,20 C24,0 62,0 62,22 C62,40 42,40 42,58 M42,74 L42,78" fill="none" stroke="#f08cc0" stroke-width="9" stroke-linecap="round"/>
|
||||
<path d="M-62,34 L-24,34 L-24,64 L-4,64 M-44,34 L-44,84" fill="none" stroke="#7af0ff" stroke-width="3" stroke-linecap="round"/>
|
||||
<circle cx="-4" cy="64" r="5" fill="#7af0ff"/>
|
||||
<!-- crack across one corner -->
|
||||
<path d="M86,-70 L60,-58 L66,-40 L44,-30" fill="none" stroke="#e4ddff" stroke-width="3" stroke-linejoin="round"/>
|
||||
<!-- fingertips over the bottom edge, thumb on the near side -->
|
||||
<path d="M-30,104 C-30,92 -14,92 -14,104 L-14,122 L-30,122 Z M-10,102 C-10,90 6,90 6,102 L6,122 L-10,122 Z M10,104 C10,92 26,92 26,104 L26,122 L10,122 Z" fill="#f0d3dd" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M-34,116 L30,116 L32,132 L-36,132 Z" fill="#33206a" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="bust">
|
||||
<g transform="rotate(-5 340 540)"><use xlink:href="#hairBack"/></g>
|
||||
<use xlink:href="#bodyC"/>
|
||||
<g transform="rotate(-5 340 540)">
|
||||
<use xlink:href="#headFront"/>
|
||||
<use xlink:href="#exprSource" transform="translate(336,410) scale(1.12) translate(-336,-410)"/>
|
||||
<use xlink:href="#swoop"/>
|
||||
</g>
|
||||
<use xlink:href="#slate"/>
|
||||
<g fill="#7af0ff"><rect x="630" y="560" width="22" height="7"/><rect x="452" y="300" width="14" height="6" fill="#f08cc0"/><rect x="40" y="520" width="30" height="6" fill="#9a6bff"/></g>
|
||||
</g>
|
||||
<g id="bustSil">
|
||||
<g transform="rotate(-5 340 540)"><use xlink:href="#hairBack"/></g><use xlink:href="#bodyC"/>
|
||||
<g transform="rotate(-5 340 540)"><use xlink:href="#headFront"/><use xlink:href="#swoop"/></g><use xlink:href="#slate"/>
|
||||
</g>
|
||||
|
||||
<!-- ===== FULL BODY, drawn separately (2.3 heads), origin at feet centre ===== -->
|
||||
<g id="fbCore">
|
||||
<path d="M-90,200 C-98,120 -44,78 6,78 C64,78 108,120 98,200 C100,260 122,300 112,360 L70,350 L-60,350 L-108,366 C-120,300 -94,260 -90,200 Z" fill="#8576dc" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<!-- bow -->
|
||||
<path d="M86,152 C96,118 128,118 124,142 C122,156 104,158 86,152 Z M86,152 C112,150 126,172 116,180 C104,188 92,170 86,152 Z" fill="#f08cc0" stroke="#2a1452" stroke-width="3.5" stroke-linejoin="round"/>
|
||||
<!-- legs, thigh-highs, shoes -->
|
||||
<path d="M-24,380 L-22,432 M18,380 L20,432" stroke="#2a1452" stroke-width="22" stroke-linecap="round"/>
|
||||
<path d="M-24,380 L-22,432 M18,380 L20,432" stroke="#33206a" stroke-width="14" stroke-linecap="round"/>
|
||||
<path d="M-40,428 L-10,426 L-8,454 L-46,456 C-50,442 -46,432 -40,428 Z M8,426 L36,428 C44,436 46,446 42,456 L6,454 Z" fill="#4a2d8f" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<!-- coat with flared tails -->
|
||||
<path d="M-34,256 L36,256 L56,330 L84,398 L52,388 L30,400 L-30,400 L-56,388 L-86,398 L-56,330 Z" fill="#4a2d8f" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M-22,258 L24,258 L30,350 L-26,350 Z" fill="#e4ddff" stroke="#2a1452" stroke-width="3.5"/>
|
||||
<path d="M-30,348 L32,348 L38,372 Q30,364 22,374 Q14,364 6,374 Q-2,364 -10,374 Q-18,364 -26,374 Q-32,366 -36,372 Z" fill="#f4f0ff" stroke="#2a1452" stroke-width="3" stroke-linejoin="round"/>
|
||||
<path d="M-36,264 L-44,330 L-34,350 M38,264 L46,330 L36,350" fill="none" stroke="#f08cc0" stroke-width="3.5"/>
|
||||
<!-- detached sleeves, arms crossed loosely -->
|
||||
<path d="M-34,272 L-58,330" stroke="#2a1452" stroke-width="26" stroke-linecap="round"/>
|
||||
<path d="M-34,272 L-58,330" stroke="#4a2d8f" stroke-width="18" stroke-linecap="round"/>
|
||||
<path d="M36,272 L60,330" stroke="#2a1452" stroke-width="26" stroke-linecap="round"/>
|
||||
<path d="M36,272 L60,330" stroke="#4a2d8f" stroke-width="18" stroke-linecap="round"/>
|
||||
<circle cx="-60" cy="338" r="9" fill="#1a1726" stroke="#2a1452" stroke-width="3"/>
|
||||
<circle cx="62" cy="338" r="9" fill="#1a1726" stroke="#2a1452" stroke-width="3"/>
|
||||
<circle cx="36" cy="270" r="6" fill="none" stroke="#7af0ff" stroke-width="3"/>
|
||||
<!-- head -->
|
||||
<path d="M-62,158 C-64,212 -24,246 8,250 C44,248 74,212 74,158 Z" fill="#f0d3dd" stroke="#2a1452" stroke-width="4"/>
|
||||
<path d="M-92,180 C-100,240 -80,300 -66,360 L-40,356 C-50,300 -56,240 -54,184 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M100,180 C104,240 92,300 98,350 L74,346 C70,300 70,240 66,184 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M-92,184 C-104,110 -44,76 6,76 C66,76 110,112 100,184 L90,176 L86,198 Q76,178 66,168 L60,204 Q50,180 38,166 L30,206 Q18,180 6,166 L-4,206 Q-16,180 -28,168 L-34,198 Q-46,182 -60,176 C-70,180 -82,182 -92,184 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M8,92 C-24,110 -42,150 -34,186 C-30,206 -40,222 -58,224 C-72,224 -82,214 -86,200 C-72,208 -60,202 -58,188 C-56,160 -54,130 -30,108 C-18,98 -4,92 8,92 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M-40,110 C-20,96 4,90 30,90 L26,100 L42,90 C14,94 -16,100 -40,110 Z" fill="#e4ddff"/>
|
||||
<g transform="rotate(-24 20 96)"><rect x="4" y="90" width="34" height="9" rx="3" fill="#f08cc0" stroke="#2a1452" stroke-width="2.5"/><circle cx="4" cy="94" r="6" fill="#f08cc0" stroke="#2a1452" stroke-width="2.5"/><circle cx="38" cy="94" r="6" fill="#f08cc0" stroke="#2a1452" stroke-width="2.5"/></g>
|
||||
<ellipse cx="-22" cy="214" rx="13" ry="17" fill="#9a6bff" stroke="#2a1452" stroke-width="3"/>
|
||||
<ellipse cx="-20" cy="217" rx="5" ry="8" fill="#2a1452"/><circle cx="-15" cy="208" r="4" fill="#fff"/>
|
||||
<path d="M-40,212 C-34,196 -8,192 -2,204 L4,200 L-2,212 C-12,204 -28,204 -40,212 Z" fill="#2a1452"/>
|
||||
<ellipse cx="36" cy="212" rx="10" ry="16" fill="#9a6bff" stroke="#2a1452" stroke-width="3"/>
|
||||
<ellipse cx="37" cy="215" rx="4" ry="7" fill="#2a1452"/><circle cx="41" cy="206" r="3" fill="#fff"/>
|
||||
<path d="M24,208 C30,196 48,192 54,202 L58,198 L54,210 C44,202 32,202 24,208 Z" fill="#2a1452"/>
|
||||
<path d="M10,236 L22,234" fill="none" stroke="#2a1452" stroke-width="2.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="fbSlate">
|
||||
<path d="M40,274 L78,246 L86,222" fill="none" stroke="#2a1452" stroke-width="26" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M40,274 L78,246 L86,222" fill="none" stroke="#4a2d8f" stroke-width="18" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<g transform="rotate(-12 100 180)">
|
||||
<rect x="62" y="130" width="70" height="92" rx="5" fill="#1a1726" stroke="#2a1452" stroke-width="4"/>
|
||||
<rect x="66" y="134" width="62" height="84" rx="3" fill="none" stroke="#7af0ff" stroke-width="2.5"/>
|
||||
<rect x="66" y="134" width="62" height="10" fill="#7af0ff"/>
|
||||
<path d="M72,154 L118,154 M72,164 L108,164 M72,174 L120,174" stroke="#9a6bff" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M94,186 C94,178 110,178 110,188 C110,196 102,196 102,204 M102,211 L102,212" fill="none" stroke="#f08cc0" stroke-width="4" stroke-linecap="round"/>
|
||||
</g>
|
||||
<circle cx="84" cy="224" r="10" fill="#1a1726" stroke="#2a1452" stroke-width="3"/>
|
||||
</g>
|
||||
<g id="fbHostile">
|
||||
<path d="M-40,196 L-2,206 M24,206 L56,196" stroke="#2a1452" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M6,232 L28,230 C24,244 10,244 6,232 Z" fill="#2a1452"/>
|
||||
</g>
|
||||
</defs>
|
||||
|
||||
<rect width="1200" height="800" fill="#eceaf2"/>
|
||||
|
||||
<!-- dialogue card (composited frame, shown for context) -->
|
||||
<clipPath id="cardClip"><polygon points="72,18 784,18 744,782 30,782"/></clipPath>
|
||||
<polygon points="72,18 784,18 744,782 30,782" fill="#07111a"/>
|
||||
<g clip-path="url(#cardClip)">
|
||||
<path d="M400,18 L784,18 L770,300 Z" fill="#9a6bff" opacity="0.10"/>
|
||||
<use xlink:href="#bust" transform="translate(112,74) scale(0.9)"/>
|
||||
</g>
|
||||
<polygon points="72,18 784,18 744,782 30,782" fill="none" stroke="#9a6bff" stroke-width="4"/>
|
||||
<g font-family="Consolas, 'Courier New', monospace" fill="#f2f0ff">
|
||||
<text x="92" y="60" font-size="30" letter-spacing="9" font-weight="700" fill="#9a6bff">NIBU</text>
|
||||
<text x="92" y="86" font-size="14" letter-spacing="5">A / SOURCE SLATE</text>
|
||||
</g>
|
||||
|
||||
<g font-family="'Segoe UI', Arial, sans-serif" fill="#2a1452">
|
||||
<text x="808" y="40" font-size="13" letter-spacing="2" font-weight="700">FULL BODY / 2.3 HEADS</text>
|
||||
<g transform="translate(1000,470) scale(0.98) translate(0,-460)">
|
||||
<use xlink:href="#fbCore"/><use xlink:href="#fbSlate"/>
|
||||
</g>
|
||||
<line x1="820" y1="474" x2="1170" y2="474" stroke="#c9c3ea" stroke-width="2"/>
|
||||
|
||||
<text x="808" y="508" font-size="13" letter-spacing="2" font-weight="700">SILHOUETTE</text>
|
||||
<rect x="800" y="518" width="160" height="160" fill="#fff" stroke="#c9c3ea" stroke-width="2"/>
|
||||
<use xlink:href="#bustSil" transform="translate(808,526) scale(0.19)" filter="url(#black)"/>
|
||||
|
||||
<text x="984" y="508" font-size="13" letter-spacing="2" font-weight="700">PALETTE</text>
|
||||
<g font-size="11" font-family="Consolas, monospace">
|
||||
<rect x="984" y="518" width="56" height="40" fill="#9a6bff"/><text x="1046" y="542">#9a6bff key</text>
|
||||
<rect x="984" y="562" width="56" height="20" fill="#b9aef5"/><text x="1046" y="576">#b9aef5 hair</text>
|
||||
<rect x="984" y="586" width="56" height="20" fill="#4a2d8f"/><text x="1046" y="600">#4a2d8f coat</text>
|
||||
<rect x="984" y="610" width="56" height="20" fill="#2a1452"/><text x="1046" y="624">#2a1452 line</text>
|
||||
<rect x="984" y="634" width="56" height="20" fill="#f08cc0"/><text x="1046" y="648">#f08cc0 ribbon</text>
|
||||
<rect x="984" y="658" width="56" height="20" fill="#7af0ff"/><text x="1046" y="672">#7af0ff glitch</text>
|
||||
</g>
|
||||
|
||||
<text x="808" y="718" font-size="13" letter-spacing="2" font-weight="700">HOOK</text>
|
||||
<text x="808" y="740" font-size="15">The lore steward never lowers her slate: a</text>
|
||||
<text x="808" y="760" font-size="15">cracked holo-tablet raised beside her face,</text>
|
||||
<text x="808" y="780" font-size="15">one word on it for every claim. SOURCE?</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 254 KiB |
|
|
@ -1,278 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<title>Nibu, direction B: Glitch Twin</title>
|
||||
<defs>
|
||||
<!-- canon Nibu: lavender hair, swoop over one eye, pink bow + circuit clip, violet coat, glitch.
|
||||
palette: key #9a6bff, line #2a1452, hair #b9aef5 (shadow #8576dc, light #e4ddff),
|
||||
coat #4a2d8f (shadow #33206a), ribbon pink #f08cc0 (shadow #c4609a), cyan #7af0ff, skin #f0d3dd (shadow #d6a8bd) -->
|
||||
<filter id="holo" x="-20%" y="-20%" width="140%" height="140%">
|
||||
<feColorMatrix in="SourceGraphic" type="matrix" values="0.35 0.45 0.15 0 0.05 0.25 0.50 0.25 0 0 0.10 0.30 0.40 0 0.30 0 0 0 0.85 0" result="tint"/>
|
||||
<feMorphology in="SourceAlpha" operator="dilate" radius="3" result="fat"/>
|
||||
<feComposite in="fat" in2="SourceAlpha" operator="out" result="ring"/>
|
||||
<feFlood flood-color="#7af0ff"/>
|
||||
<feComposite in2="ring" operator="in" result="edge"/>
|
||||
<feMerge><feMergeNode in="tint"/><feMergeNode in="edge"/></feMerge>
|
||||
</filter>
|
||||
<filter id="black" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feFlood flood-color="#000"/>
|
||||
<feComposite in2="SourceAlpha" operator="in"/>
|
||||
</filter>
|
||||
<pattern id="scan" width="10" height="7" patternUnits="userSpaceOnUse">
|
||||
<rect width="10" height="5" fill="#fff"/>
|
||||
</pattern>
|
||||
<mask id="scanMask" maskUnits="userSpaceOnUse" x="-600" y="-600" width="2400" height="2400">
|
||||
<rect x="-600" y="-600" width="2400" height="2400" fill="url(#scan)"/>
|
||||
</mask>
|
||||
<clipPath id="eyeBand"><rect x="206" y="366" width="128" height="56"/></clipPath>
|
||||
<clipPath id="mouthBand"><rect x="150" y="428" width="140" height="16"/></clipPath>
|
||||
|
||||
<!-- ===== BUST, local space 640 x 770, faces screen right ===== -->
|
||||
<path id="faceP" d="M192,285 C186,370 214,446 300,498 C326,514 356,516 378,502 C432,468 468,410 472,298 Z"/>
|
||||
<clipPath id="faceClip"><use xlink:href="#faceP"/></clipPath>
|
||||
<!-- crown and wispy bangs -->
|
||||
<path id="crownP" d="M126,320 C110,160 212,56 336,56 C470,56 560,160 544,320 C534,314 520,304 510,292
|
||||
L504,338 Q486,300 462,280 Q458,316 452,352 Q430,300 400,272 Q396,322 390,362 Q366,300 330,272
|
||||
Q326,322 318,358 Q298,302 266,280 Q262,312 256,342 Q236,306 206,290 C178,300 152,312 126,320 Z"/>
|
||||
|
||||
<g id="hairBack">
|
||||
<path d="M332,52 C474,50 566,154 558,300 C556,372 600,430 586,512 C574,584 624,640 604,706 C596,734 606,754 614,850 L452,850 C470,700 462,620 446,566 L244,566 C226,640 214,710 210,850 L56,850 C76,720 52,670 72,612 C92,552 58,494 92,430 C112,392 120,350 122,300 C124,150 196,54 332,52 Z" fill="#8576dc" stroke="#2a1452" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M96,470 C80,530 104,580 84,640 M586,540 C574,600 610,650 592,710" fill="none" stroke="#2a1452" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<!-- ribbon bow on her far side -->
|
||||
<path d="M548,272 L586,370 L566,360 L558,384 L530,284 Z M556,270 L620,346 L598,344 L600,368 L540,282 Z" fill="#c4609a" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M540,262 C566,186 640,184 628,238 C622,268 578,276 540,262 Z" fill="#f08cc0" stroke="#2a1452" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M540,262 C600,250 630,300 610,322 C590,340 556,300 540,262 Z" fill="#f08cc0" stroke="#2a1452" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M566,232 C584,214 606,214 612,232 M566,286 C588,296 600,306 604,316" fill="none" stroke="#c4609a" stroke-width="5" stroke-linecap="round"/>
|
||||
<ellipse cx="542" cy="264" rx="17" ry="21" fill="#f08cc0" stroke="#2a1452" stroke-width="5"/>
|
||||
</g>
|
||||
|
||||
<g id="bodyC">
|
||||
<path d="M300,466 L298,580 L394,580 L392,466 Z" fill="#f0d3dd" stroke="#2a1452" stroke-width="5"/>
|
||||
<path d="M298,488 C330,526 370,520 394,486 L394,556 L298,556 Z" fill="#d6a8bd"/>
|
||||
<!-- coat -->
|
||||
<path d="M96,850 C104,660 176,600 280,582 L412,578 C512,598 572,662 584,850 Z" fill="#4a2d8f" stroke="#2a1452" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M430,588 C510,612 562,668 574,850 L494,850 C486,700 464,640 420,604 Z" fill="#33206a"/>
|
||||
<path d="M546,640 C566,680 576,720 580,850" fill="none" stroke="#9a6bff" stroke-width="6" stroke-linecap="round"/>
|
||||
<!-- blouse panel -->
|
||||
<path d="M282,582 L410,578 L384,850 L308,850 Z" fill="#e4ddff" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M318,650 L376,648 L370,730 L322,730 Z" fill="#7af0ff" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M330,668 L362,668 M330,684 L352,684 M330,700 L364,700 M330,714 L346,714" stroke="#2a1452" stroke-width="3" stroke-linecap="round"/>
|
||||
<!-- circuit-glyph trim on the coat front edges -->
|
||||
<path d="M282,584 L270,640 L284,660 L272,720 L276,850 M410,580 L420,636 L406,656 L414,720 L410,850" fill="none" stroke="#f08cc0" stroke-width="5" stroke-linejoin="round"/>
|
||||
<circle cx="270" cy="640" r="6" fill="#f08cc0" stroke="#2a1452" stroke-width="2.5"/>
|
||||
<circle cx="406" cy="656" r="6" fill="#f08cc0" stroke="#2a1452" stroke-width="2.5"/>
|
||||
<!-- standing collar and throat frill -->
|
||||
<path d="M262,520 L240,612 L298,590 Z" fill="#4a2d8f" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M426,512 L462,604 L396,588 Z" fill="#33206a" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M292,548 Q304,566 318,552 Q330,572 346,556 Q360,574 374,554 Q388,568 400,546 L404,590 Q350,606 288,592 Z" fill="#f4f0ff" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<circle cx="346" cy="604" r="11" fill="#9a6bff" stroke="#2a1452" stroke-width="4"/>
|
||||
<circle cx="342" cy="600" r="3.5" fill="#fff"/>
|
||||
<!-- shoulder port ring -->
|
||||
<circle cx="458" cy="616" r="18" fill="#1a1726" stroke="#2a1452" stroke-width="4"/>
|
||||
<circle cx="458" cy="616" r="11" fill="none" stroke="#7af0ff" stroke-width="5"/>
|
||||
</g>
|
||||
|
||||
<g id="headFront">
|
||||
<use xlink:href="#faceP" fill="#f0d3dd" stroke="#2a1452" stroke-width="6"/>
|
||||
<g clip-path="url(#faceClip)">
|
||||
<use xlink:href="#crownP" transform="translate(6,16)" fill="#d6a8bd"/>
|
||||
<path d="M440,330 C452,400 430,460 380,500 L480,520 L500,300 Z" fill="#d6a8bd"/>
|
||||
</g>
|
||||
<path d="M452,360 C448,420 424,466 384,494" fill="none" stroke="#9a6bff" stroke-width="5" stroke-linecap="round"/>
|
||||
<!-- front locks: near one falls over the shoulder, far one frames the jaw -->
|
||||
<path d="M540,300 C546,380 520,440 500,500 C486,548 512,600 498,660 C492,700 500,740 496,850 L452,850 C462,730 446,690 458,640 C470,580 444,540 460,480 C474,420 470,360 462,312 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M128,300 C112,380 146,440 166,500 C186,560 142,620 166,690 C176,720 166,750 158,850 L244,850 C252,720 232,680 244,636 C256,590 226,540 222,480 C216,420 214,360 220,314 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M220,330 C214,400 222,470 238,520 C246,560 230,600 236,640 C222,600 216,560 210,520 C196,460 196,390 206,330 Z" fill="#8576dc"/>
|
||||
<path d="M150,520 C168,560 160,600 154,640" fill="none" stroke="#2a1452" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<use xlink:href="#crownP" fill="#b9aef5" stroke="#2a1452" stroke-width="8" stroke-linejoin="round"/>
|
||||
<!-- one highlight band -->
|
||||
<path d="M262,128 C296,110 336,104 380,108 L370,128 L398,110 L404,128 L430,114 L436,128 C410,118 340,112 262,128 Z" fill="#e4ddff"/>
|
||||
<path d="M170,236 C176,200 194,172 218,152 L214,176 L232,150 C206,176 186,206 170,236 Z" fill="#e4ddff"/>
|
||||
<path d="M512,240 C516,200 506,170 488,146" fill="none" stroke="#9a6bff" stroke-width="5" stroke-linecap="round"/>
|
||||
<!-- circuit hair clip -->
|
||||
<g transform="rotate(-24 372 134)">
|
||||
<rect x="336" y="126" width="72" height="16" rx="5" fill="#f08cc0" stroke="#2a1452" stroke-width="4"/>
|
||||
<rect x="356" y="116" width="32" height="36" rx="4" fill="#f4f0ff" stroke="#2a1452" stroke-width="4"/>
|
||||
<path d="M364,124 L364,134 L372,134 L372,144 M380,122 L380,140" fill="none" stroke="#9a6bff" stroke-width="3" stroke-linecap="round"/>
|
||||
<circle cx="334" cy="134" r="11" fill="#f08cc0" stroke="#2a1452" stroke-width="4"/>
|
||||
<circle cx="410" cy="134" r="11" fill="#f08cc0" stroke="#2a1452" stroke-width="4"/>
|
||||
<circle cx="330" cy="130" r="3.5" fill="#fff"/><circle cx="406" cy="130" r="3.5" fill="#fff"/>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g id="swoop">
|
||||
<path d="M336,112 C268,146 230,224 242,300 C252,356 236,410 192,428 C156,440 120,420 104,382 C136,398 164,390 176,358 C188,322 182,262 202,204 C222,156 276,124 336,112 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M240,300 C252,352 238,400 192,426 C214,400 222,366 214,322 C206,272 214,212 246,160 C228,210 226,262 240,300 Z" fill="#8576dc"/>
|
||||
<path d="M206,196 C216,160 240,132 274,116" fill="none" stroke="#e4ddff" stroke-width="7" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- eyes: same construction for every expression -->
|
||||
<clipPath id="wN"><path d="M226,374 C236,350 300,346 320,370 C324,402 312,434 274,438 C240,434 222,406 226,374 Z"/></clipPath>
|
||||
<clipPath id="wF"><path d="M372,370 C380,350 426,348 440,368 C444,400 434,430 406,434 C382,430 368,404 372,370 Z"/></clipPath>
|
||||
<clipPath id="iN"><ellipse cx="278" cy="400" rx="34" ry="44"/></clipPath>
|
||||
<clipPath id="iF"><ellipse cx="409" cy="397" rx="25" ry="41"/></clipPath>
|
||||
|
||||
<g id="exprCalm">
|
||||
<path d="M240,338 Q272,328 306,334" fill="none" stroke="#2a1452" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M380,332 Q406,326 432,330" fill="none" stroke="#2a1452" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M226,374 C236,350 300,346 320,370 C324,402 312,434 274,438 C240,434 222,406 226,374 Z" fill="#fbf9ff"/>
|
||||
<g clip-path="url(#wN)"><g clip-path="url(#iN)">
|
||||
<rect x="200" y="340" width="140" height="120" fill="#9a6bff"/>
|
||||
<ellipse cx="278" cy="372" rx="42" ry="28" fill="#4b2a99"/>
|
||||
<ellipse cx="282" cy="438" rx="28" ry="14" fill="#e0b6ff"/>
|
||||
<ellipse cx="280" cy="404" rx="13" ry="19" fill="#2a1452"/>
|
||||
</g>
|
||||
<ellipse cx="278" cy="400" rx="34" ry="44" fill="none" stroke="#2a1452" stroke-width="3"/>
|
||||
<ellipse cx="292" cy="386" rx="10" ry="12" fill="#fff"/>
|
||||
<circle cx="266" cy="420" r="5" fill="#fff"/>
|
||||
</g>
|
||||
<!-- half-lidded: heavy upper lid -->
|
||||
<path d="M218,394 C226,354 300,346 330,370 L340,366 L330,384 C306,370 252,368 228,398 Z" fill="#2a1452"/>
|
||||
<path d="M250,438 Q276,446 302,434" fill="none" stroke="#2a1452" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<path d="M372,370 C380,350 426,348 440,368 C444,400 434,430 406,434 C382,430 368,404 372,370 Z" fill="#fbf9ff"/>
|
||||
<g clip-path="url(#wF)"><g clip-path="url(#iF)">
|
||||
<rect x="360" y="340" width="100" height="120" fill="#9a6bff"/>
|
||||
<ellipse cx="409" cy="370" rx="32" ry="27" fill="#4b2a99"/>
|
||||
<ellipse cx="411" cy="434" rx="21" ry="12" fill="#e0b6ff"/>
|
||||
<ellipse cx="411" cy="401" rx="10" ry="18" fill="#2a1452"/>
|
||||
</g>
|
||||
<ellipse cx="409" cy="397" rx="25" ry="41" fill="none" stroke="#2a1452" stroke-width="3"/>
|
||||
<ellipse cx="420" cy="384" rx="8" ry="10" fill="#fff"/>
|
||||
<circle cx="400" cy="416" r="4" fill="#fff"/>
|
||||
</g>
|
||||
<path d="M366,390 C374,352 430,344 448,364 L458,360 L448,380 C430,366 386,366 372,394 Z" fill="#2a1452"/>
|
||||
<path d="M386,432 Q408,440 428,430" fill="none" stroke="#2a1452" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M356,442 Q364,450 356,455" fill="none" stroke="#2a1452" stroke-width="3" stroke-linecap="round"/>
|
||||
<!-- level, unbothered mouth -->
|
||||
<path d="M336,474 Q352,478 368,472" fill="none" stroke="#2a1452" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M244,456 l-9,11 M258,456 l-9,11 M424,450 l-7,9" stroke="#e08aa8" stroke-width="3" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<g id="exprHostile">
|
||||
<path d="M222,318 L314,350" stroke="#2a1452" stroke-width="11" stroke-linecap="round"/>
|
||||
<path d="M372,350 L446,318" stroke="#2a1452" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M230,388 C250,374 300,372 318,386 C318,408 304,426 274,428 C246,426 230,408 230,388 Z" fill="#fff"/>
|
||||
<ellipse cx="282" cy="402" rx="20" ry="24" fill="#9a6bff"/>
|
||||
<ellipse cx="283" cy="404" rx="5" ry="12" fill="#2a1452"/>
|
||||
<path d="M220,388 L328,374 L332,394 L226,398 Z" fill="#2a1452"/>
|
||||
<path d="M376,386 C392,374 428,372 438,384 C438,406 428,424 406,426 C386,424 376,408 376,386 Z" fill="#fff"/>
|
||||
<ellipse cx="408" cy="402" rx="16" ry="22" fill="#9a6bff"/>
|
||||
<ellipse cx="409" cy="404" rx="4" ry="11" fill="#2a1452"/>
|
||||
<path d="M368,374 L448,384 L446,398 L372,394 Z" fill="#2a1452"/>
|
||||
<path d="M312,458 L394,452 C386,496 334,502 312,458 Z" fill="#2a1452"/>
|
||||
<path d="M316,460 L390,455 L388,466 L378,478 L372,467 L328,470 L322,480 Z" fill="#fff"/>
|
||||
</g>
|
||||
|
||||
<g id="ghostCore" transform="translate(-200,-104) rotate(-8 336 400)">
|
||||
<use xlink:href="#hairBack"/><use xlink:href="#bodyC"/><use xlink:href="#headFront"/><use xlink:href="#exprHostile" transform="translate(336,410) scale(1.12) translate(-336,-410)"/><use xlink:href="#swoop"/>
|
||||
</g>
|
||||
|
||||
<g id="bust">
|
||||
<g filter="url(#holo)" mask="url(#scanMask)"><use xlink:href="#ghostCore"/></g>
|
||||
<use xlink:href="#hairBack"/>
|
||||
<use xlink:href="#bodyC"/>
|
||||
<use xlink:href="#headFront"/>
|
||||
<use xlink:href="#exprCalm" transform="translate(336,410) scale(1.12) translate(-336,-410)"/>
|
||||
<use xlink:href="#swoop"/>
|
||||
<!-- the twin bleeds through: one scanline slice of her near eye belongs to the other timeline -->
|
||||
<g id="slice" clip-path="url(#eyeBand)"><g transform="translate(-18,0)">
|
||||
<use xlink:href="#headFront"/>
|
||||
<use xlink:href="#exprHostile" transform="translate(336,410) scale(1.12) translate(-336,-410)"/>
|
||||
<use xlink:href="#swoop"/>
|
||||
</g></g>
|
||||
<g clip-path="url(#eyeBand)"><rect x="200" y="360" width="140" height="70" fill="#9a6bff" opacity="0.30" mask="url(#scanMask)"/></g>
|
||||
<rect x="206" y="366" width="128" height="56" fill="none" stroke="#7af0ff" stroke-width="3"/>
|
||||
<path d="M334,380 L352,380 M190,404 L206,404" stroke="#7af0ff" stroke-width="3"/>
|
||||
<g filter="url(#holo)" mask="url(#scanMask)" clip-path="url(#mouthBand)"><use xlink:href="#headFront" transform="translate(30,0)"/></g>
|
||||
<g fill="#7af0ff"><rect x="-10" y="300" width="26" height="8"/><rect x="40" y="520" width="40" height="6"/><rect x="590" y="430" width="22" height="7"/><rect x="606" y="190" width="14" height="6" fill="#f08cc0"/><rect x="-40" y="610" width="18" height="6" fill="#9a6bff"/></g>
|
||||
</g>
|
||||
<g id="bustSil">
|
||||
<use xlink:href="#ghostCore"/>
|
||||
<use xlink:href="#hairBack"/><use xlink:href="#bodyC"/><use xlink:href="#headFront"/><use xlink:href="#swoop"/>
|
||||
</g>
|
||||
|
||||
<!-- ===== FULL BODY, drawn separately (2.3 heads), origin at feet centre ===== -->
|
||||
<g id="fbCore">
|
||||
<path d="M-90,200 C-98,120 -44,78 6,78 C64,78 108,120 98,200 C100,260 122,300 112,360 L70,350 L-60,350 L-108,366 C-120,300 -94,260 -90,200 Z" fill="#8576dc" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<!-- bow -->
|
||||
<path d="M86,152 C96,118 128,118 124,142 C122,156 104,158 86,152 Z M86,152 C112,150 126,172 116,180 C104,188 92,170 86,152 Z" fill="#f08cc0" stroke="#2a1452" stroke-width="3.5" stroke-linejoin="round"/>
|
||||
<!-- legs, thigh-highs, shoes -->
|
||||
<path d="M-24,380 L-22,432 M18,380 L20,432" stroke="#2a1452" stroke-width="22" stroke-linecap="round"/>
|
||||
<path d="M-24,380 L-22,432 M18,380 L20,432" stroke="#33206a" stroke-width="14" stroke-linecap="round"/>
|
||||
<path d="M-40,428 L-10,426 L-8,454 L-46,456 C-50,442 -46,432 -40,428 Z M8,426 L36,428 C44,436 46,446 42,456 L6,454 Z" fill="#4a2d8f" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<!-- coat with flared tails -->
|
||||
<path d="M-34,256 L36,256 L56,330 L84,398 L52,388 L30,400 L-30,400 L-56,388 L-86,398 L-56,330 Z" fill="#4a2d8f" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M-22,258 L24,258 L30,350 L-26,350 Z" fill="#e4ddff" stroke="#2a1452" stroke-width="3.5"/>
|
||||
<path d="M-30,348 L32,348 L38,372 Q30,364 22,374 Q14,364 6,374 Q-2,364 -10,374 Q-18,364 -26,374 Q-32,366 -36,372 Z" fill="#f4f0ff" stroke="#2a1452" stroke-width="3" stroke-linejoin="round"/>
|
||||
<path d="M-36,264 L-44,330 L-34,350 M38,264 L46,330 L36,350" fill="none" stroke="#f08cc0" stroke-width="3.5"/>
|
||||
<!-- detached sleeves, arms crossed loosely -->
|
||||
<path d="M-34,272 L-58,330" stroke="#2a1452" stroke-width="26" stroke-linecap="round"/>
|
||||
<path d="M-34,272 L-58,330" stroke="#4a2d8f" stroke-width="18" stroke-linecap="round"/>
|
||||
<path d="M36,272 L60,330" stroke="#2a1452" stroke-width="26" stroke-linecap="round"/>
|
||||
<path d="M36,272 L60,330" stroke="#4a2d8f" stroke-width="18" stroke-linecap="round"/>
|
||||
<circle cx="-60" cy="338" r="9" fill="#1a1726" stroke="#2a1452" stroke-width="3"/>
|
||||
<circle cx="62" cy="338" r="9" fill="#1a1726" stroke="#2a1452" stroke-width="3"/>
|
||||
<circle cx="36" cy="270" r="6" fill="none" stroke="#7af0ff" stroke-width="3"/>
|
||||
<!-- head -->
|
||||
<path d="M-62,158 C-64,212 -24,246 8,250 C44,248 74,212 74,158 Z" fill="#f0d3dd" stroke="#2a1452" stroke-width="4"/>
|
||||
<path d="M-92,180 C-100,240 -80,300 -66,360 L-40,356 C-50,300 -56,240 -54,184 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M100,180 C104,240 92,300 98,350 L74,346 C70,300 70,240 66,184 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M-92,184 C-104,110 -44,76 6,76 C66,76 110,112 100,184 L90,176 L86,198 Q76,178 66,168 L60,204 Q50,180 38,166 L30,206 Q18,180 6,166 L-4,206 Q-16,180 -28,168 L-34,198 Q-46,182 -60,176 C-70,180 -82,182 -92,184 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M8,92 C-24,110 -42,150 -34,186 C-30,206 -40,222 -58,224 C-72,224 -82,214 -86,200 C-72,208 -60,202 -58,188 C-56,160 -54,130 -30,108 C-18,98 -4,92 8,92 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M-40,110 C-20,96 4,90 30,90 L26,100 L42,90 C14,94 -16,100 -40,110 Z" fill="#e4ddff"/>
|
||||
<g transform="rotate(-24 20 96)"><rect x="4" y="90" width="34" height="9" rx="3" fill="#f08cc0" stroke="#2a1452" stroke-width="2.5"/><circle cx="4" cy="94" r="6" fill="#f08cc0" stroke="#2a1452" stroke-width="2.5"/><circle cx="38" cy="94" r="6" fill="#f08cc0" stroke="#2a1452" stroke-width="2.5"/></g>
|
||||
<ellipse cx="-22" cy="214" rx="13" ry="17" fill="#9a6bff" stroke="#2a1452" stroke-width="3"/>
|
||||
<ellipse cx="-20" cy="217" rx="5" ry="8" fill="#2a1452"/><circle cx="-15" cy="208" r="4" fill="#fff"/>
|
||||
<path d="M-40,212 C-34,196 -8,192 -2,204 L4,200 L-2,212 C-12,204 -28,204 -40,212 Z" fill="#2a1452"/>
|
||||
<ellipse cx="36" cy="212" rx="10" ry="16" fill="#9a6bff" stroke="#2a1452" stroke-width="3"/>
|
||||
<ellipse cx="37" cy="215" rx="4" ry="7" fill="#2a1452"/><circle cx="41" cy="206" r="3" fill="#fff"/>
|
||||
<path d="M24,208 C30,196 48,192 54,202 L58,198 L54,210 C44,202 32,202 24,208 Z" fill="#2a1452"/>
|
||||
<path d="M10,236 L22,234" fill="none" stroke="#2a1452" stroke-width="2.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="fbHostile">
|
||||
<path d="M-40,196 L-2,206 M24,206 L56,196" stroke="#2a1452" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M6,232 L28,230 C24,244 10,244 6,232 Z" fill="#2a1452"/>
|
||||
</g>
|
||||
</defs>
|
||||
|
||||
<rect width="1200" height="800" fill="#eceaf2"/>
|
||||
|
||||
<!-- dialogue card (composited frame, shown for context) -->
|
||||
<clipPath id="cardClip"><polygon points="72,18 784,18 744,782 30,782"/></clipPath>
|
||||
<polygon points="72,18 784,18 744,782 30,782" fill="#07111a"/>
|
||||
<g clip-path="url(#cardClip)">
|
||||
<path d="M400,18 L784,18 L770,300 Z" fill="#9a6bff" opacity="0.10"/>
|
||||
<use xlink:href="#bust" transform="translate(178,24) scale(0.93)"/>
|
||||
</g>
|
||||
<polygon points="72,18 784,18 744,782 30,782" fill="none" stroke="#9a6bff" stroke-width="4"/>
|
||||
<polygon points="84,28 330,28 324,98 78,98" fill="#07111a" stroke="#9a6bff" stroke-width="2"/>
|
||||
<g font-family="Consolas, 'Courier New', monospace" fill="#f2f0ff">
|
||||
<text x="92" y="60" font-size="30" letter-spacing="9" font-weight="700" fill="#9a6bff">NIBU</text>
|
||||
<text x="92" y="86" font-size="14" letter-spacing="5">B / GLITCH TWIN</text>
|
||||
</g>
|
||||
|
||||
<g font-family="'Segoe UI', Arial, sans-serif" fill="#2a1452">
|
||||
<text x="808" y="40" font-size="13" letter-spacing="2" font-weight="700">FULL BODY / 2.3 HEADS</text>
|
||||
<g transform="translate(1000,470) scale(0.98) translate(0,-460)">
|
||||
<g filter="url(#holo)" mask="url(#scanMask)" transform="translate(-70,-10)"><use xlink:href="#fbCore"/><use xlink:href="#fbHostile"/></g>
|
||||
<use xlink:href="#fbCore"/>
|
||||
</g>
|
||||
<line x1="820" y1="474" x2="1170" y2="474" stroke="#c9c3ea" stroke-width="2"/>
|
||||
|
||||
<text x="808" y="508" font-size="13" letter-spacing="2" font-weight="700">SILHOUETTE</text>
|
||||
<rect x="800" y="518" width="160" height="160" fill="#fff" stroke="#c9c3ea" stroke-width="2"/>
|
||||
<use xlink:href="#bustSil" transform="translate(846,540) scale(0.175)" filter="url(#black)"/>
|
||||
|
||||
<text x="984" y="508" font-size="13" letter-spacing="2" font-weight="700">PALETTE</text>
|
||||
<g font-size="11" font-family="Consolas, monospace">
|
||||
<rect x="984" y="518" width="56" height="40" fill="#9a6bff"/><text x="1046" y="542">#9a6bff key</text>
|
||||
<rect x="984" y="562" width="56" height="20" fill="#b9aef5"/><text x="1046" y="576">#b9aef5 hair</text>
|
||||
<rect x="984" y="586" width="56" height="20" fill="#4a2d8f"/><text x="1046" y="600">#4a2d8f coat</text>
|
||||
<rect x="984" y="610" width="56" height="20" fill="#2a1452"/><text x="1046" y="624">#2a1452 line</text>
|
||||
<rect x="984" y="634" width="56" height="20" fill="#f08cc0"/><text x="1046" y="648">#f08cc0 ribbon</text>
|
||||
<rect x="984" y="658" width="56" height="20" fill="#7af0ff"/><text x="1046" y="672">#7af0ff glitch</text>
|
||||
</g>
|
||||
|
||||
<text x="808" y="718" font-size="13" letter-spacing="2" font-weight="700">HOOK</text>
|
||||
<text x="808" y="740" font-size="15">Her glitch has a face: a scanline twin from a</text>
|
||||
<text x="808" y="760" font-size="15">failed timeline sits behind her, already angry</text>
|
||||
<text x="808" y="780" font-size="15">about something that has not happened yet.</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 214 KiB |
|
|
@ -1,325 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<title>Nibu, direction C: Console Ring</title>
|
||||
<defs>
|
||||
<!-- canon Nibu: lavender hair, swoop over one eye, pink bow + circuit clip, violet coat, glitch.
|
||||
palette: key #9a6bff, line #2a1452, hair #b9aef5 (shadow #8576dc, light #e4ddff),
|
||||
coat #4a2d8f (shadow #33206a), ribbon pink #f08cc0 (shadow #c4609a), cyan #7af0ff, skin #f0d3dd (shadow #d6a8bd) -->
|
||||
<filter id="holo" x="-20%" y="-20%" width="140%" height="140%">
|
||||
<feColorMatrix in="SourceGraphic" type="matrix" values="0.35 0.45 0.15 0 0.05 0.25 0.50 0.25 0 0 0.10 0.30 0.40 0 0.30 0 0 0 0.85 0" result="tint"/>
|
||||
<feMorphology in="SourceAlpha" operator="dilate" radius="3" result="fat"/>
|
||||
<feComposite in="fat" in2="SourceAlpha" operator="out" result="ring"/>
|
||||
<feFlood flood-color="#7af0ff"/>
|
||||
<feComposite in2="ring" operator="in" result="edge"/>
|
||||
<feMerge><feMergeNode in="tint"/><feMergeNode in="edge"/></feMerge>
|
||||
</filter>
|
||||
<filter id="black" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feFlood flood-color="#000"/>
|
||||
<feComposite in2="SourceAlpha" operator="in"/>
|
||||
</filter>
|
||||
<pattern id="scan" width="10" height="7" patternUnits="userSpaceOnUse">
|
||||
<rect width="10" height="5" fill="#fff"/>
|
||||
</pattern>
|
||||
<mask id="scanMask" maskUnits="userSpaceOnUse" x="-600" y="-600" width="2400" height="2400">
|
||||
<rect x="-600" y="-600" width="2400" height="2400" fill="url(#scan)"/>
|
||||
</mask>
|
||||
<clipPath id="eyeBand"><rect x="206" y="366" width="128" height="56"/></clipPath>
|
||||
<clipPath id="mouthBand"><rect x="150" y="428" width="140" height="16"/></clipPath>
|
||||
|
||||
<!-- ===== BUST, local space 640 x 770, faces screen right ===== -->
|
||||
<path id="faceP" d="M192,285 C186,370 214,446 300,498 C326,514 356,516 378,502 C432,468 468,410 472,298 Z"/>
|
||||
<clipPath id="faceClip"><use xlink:href="#faceP"/></clipPath>
|
||||
<!-- crown and wispy bangs -->
|
||||
<path id="crownP" d="M126,320 C110,160 212,56 336,56 C470,56 560,160 544,320 C534,314 520,304 510,292
|
||||
L504,338 Q486,300 462,280 Q458,316 452,352 Q430,300 400,272 Q396,322 390,362 Q366,300 330,272
|
||||
Q326,322 318,358 Q298,302 266,280 Q262,312 256,342 Q236,306 206,290 C178,300 152,312 126,320 Z"/>
|
||||
|
||||
<g id="hairBack">
|
||||
<path d="M332,52 C474,50 566,154 558,300 C556,372 600,430 586,512 C574,584 624,640 604,706 C596,734 606,754 614,850 L452,850 C470,700 462,620 446,566 L244,566 C226,640 214,710 210,850 L56,850 C76,720 52,670 72,612 C92,552 58,494 92,430 C112,392 120,350 122,300 C124,150 196,54 332,52 Z" fill="#8576dc" stroke="#2a1452" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M96,470 C80,530 104,580 84,640 M586,540 C574,600 610,650 592,710" fill="none" stroke="#2a1452" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<!-- ribbon bow on her far side -->
|
||||
<path d="M548,272 L586,370 L566,360 L558,384 L530,284 Z M556,270 L620,346 L598,344 L600,368 L540,282 Z" fill="#c4609a" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M540,262 C566,186 640,184 628,238 C622,268 578,276 540,262 Z" fill="#f08cc0" stroke="#2a1452" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M540,262 C600,250 630,300 610,322 C590,340 556,300 540,262 Z" fill="#f08cc0" stroke="#2a1452" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M566,232 C584,214 606,214 612,232 M566,286 C588,296 600,306 604,316" fill="none" stroke="#c4609a" stroke-width="5" stroke-linecap="round"/>
|
||||
<ellipse cx="542" cy="264" rx="17" ry="21" fill="#f08cc0" stroke="#2a1452" stroke-width="5"/>
|
||||
</g>
|
||||
|
||||
<g id="bodyC">
|
||||
<path d="M300,466 L298,580 L394,580 L392,466 Z" fill="#f0d3dd" stroke="#2a1452" stroke-width="5"/>
|
||||
<path d="M298,488 C330,526 370,520 394,486 L394,556 L298,556 Z" fill="#d6a8bd"/>
|
||||
<!-- coat -->
|
||||
<path d="M96,850 C104,660 176,600 280,582 L412,578 C512,598 572,662 584,850 Z" fill="#4a2d8f" stroke="#2a1452" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M430,588 C510,612 562,668 574,850 L494,850 C486,700 464,640 420,604 Z" fill="#33206a"/>
|
||||
<path d="M546,640 C566,680 576,720 580,850" fill="none" stroke="#9a6bff" stroke-width="6" stroke-linecap="round"/>
|
||||
<!-- blouse panel -->
|
||||
<path d="M282,582 L410,578 L384,850 L308,850 Z" fill="#e4ddff" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M318,650 L376,648 L370,730 L322,730 Z" fill="#7af0ff" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M330,668 L362,668 M330,684 L352,684 M330,700 L364,700 M330,714 L346,714" stroke="#2a1452" stroke-width="3" stroke-linecap="round"/>
|
||||
<!-- circuit-glyph trim on the coat front edges -->
|
||||
<path d="M282,584 L270,640 L284,660 L272,720 L276,850 M410,580 L420,636 L406,656 L414,720 L410,850" fill="none" stroke="#f08cc0" stroke-width="5" stroke-linejoin="round"/>
|
||||
<circle cx="270" cy="640" r="6" fill="#f08cc0" stroke="#2a1452" stroke-width="2.5"/>
|
||||
<circle cx="406" cy="656" r="6" fill="#f08cc0" stroke="#2a1452" stroke-width="2.5"/>
|
||||
<!-- standing collar and throat frill -->
|
||||
<path d="M262,520 L240,612 L298,590 Z" fill="#4a2d8f" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M426,512 L462,604 L396,588 Z" fill="#33206a" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M292,548 Q304,566 318,552 Q330,572 346,556 Q360,574 374,554 Q388,568 400,546 L404,590 Q350,606 288,592 Z" fill="#f4f0ff" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<circle cx="346" cy="604" r="11" fill="#9a6bff" stroke="#2a1452" stroke-width="4"/>
|
||||
<circle cx="342" cy="600" r="3.5" fill="#fff"/>
|
||||
<!-- shoulder port ring -->
|
||||
<circle cx="458" cy="616" r="18" fill="#1a1726" stroke="#2a1452" stroke-width="4"/>
|
||||
<circle cx="458" cy="616" r="11" fill="none" stroke="#7af0ff" stroke-width="5"/>
|
||||
</g>
|
||||
|
||||
<g id="headFront">
|
||||
<use xlink:href="#faceP" fill="#f0d3dd" stroke="#2a1452" stroke-width="6"/>
|
||||
<g clip-path="url(#faceClip)">
|
||||
<use xlink:href="#crownP" transform="translate(6,16)" fill="#d6a8bd"/>
|
||||
<path d="M440,330 C452,400 430,460 380,500 L480,520 L500,300 Z" fill="#d6a8bd"/>
|
||||
</g>
|
||||
<path d="M452,360 C448,420 424,466 384,494" fill="none" stroke="#9a6bff" stroke-width="5" stroke-linecap="round"/>
|
||||
<!-- front locks: near one falls over the shoulder, far one frames the jaw -->
|
||||
<path d="M540,300 C546,380 520,440 500,500 C486,548 512,600 498,660 C492,700 500,740 496,850 L452,850 C462,730 446,690 458,640 C470,580 444,540 460,480 C474,420 470,360 462,312 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M128,300 C112,380 146,440 166,500 C186,560 142,620 166,690 C176,720 166,750 158,850 L244,850 C252,720 232,680 244,636 C256,590 226,540 222,480 C216,420 214,360 220,314 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M220,330 C214,400 222,470 238,520 C246,560 230,600 236,640 C222,600 216,560 210,520 C196,460 196,390 206,330 Z" fill="#8576dc"/>
|
||||
<path d="M150,520 C168,560 160,600 154,640" fill="none" stroke="#2a1452" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<use xlink:href="#crownP" fill="#b9aef5" stroke="#2a1452" stroke-width="8" stroke-linejoin="round"/>
|
||||
<!-- one highlight band -->
|
||||
<path d="M262,128 C296,110 336,104 380,108 L370,128 L398,110 L404,128 L430,114 L436,128 C410,118 340,112 262,128 Z" fill="#e4ddff"/>
|
||||
<path d="M170,236 C176,200 194,172 218,152 L214,176 L232,150 C206,176 186,206 170,236 Z" fill="#e4ddff"/>
|
||||
<path d="M512,240 C516,200 506,170 488,146" fill="none" stroke="#9a6bff" stroke-width="5" stroke-linecap="round"/>
|
||||
<!-- circuit hair clip -->
|
||||
<g transform="rotate(-24 372 134)">
|
||||
<rect x="336" y="126" width="72" height="16" rx="5" fill="#f08cc0" stroke="#2a1452" stroke-width="4"/>
|
||||
<rect x="356" y="116" width="32" height="36" rx="4" fill="#f4f0ff" stroke="#2a1452" stroke-width="4"/>
|
||||
<path d="M364,124 L364,134 L372,134 L372,144 M380,122 L380,140" fill="none" stroke="#9a6bff" stroke-width="3" stroke-linecap="round"/>
|
||||
<circle cx="334" cy="134" r="11" fill="#f08cc0" stroke="#2a1452" stroke-width="4"/>
|
||||
<circle cx="410" cy="134" r="11" fill="#f08cc0" stroke="#2a1452" stroke-width="4"/>
|
||||
<circle cx="330" cy="130" r="3.5" fill="#fff"/><circle cx="406" cy="130" r="3.5" fill="#fff"/>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g id="swoop">
|
||||
<path d="M336,112 C268,146 230,224 242,300 C252,356 236,410 192,428 C156,440 120,420 104,382 C136,398 164,390 176,358 C188,322 182,262 202,204 C222,156 276,124 336,112 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M240,300 C252,352 238,400 192,426 C214,400 222,366 214,322 C206,272 214,212 246,160 C228,210 226,262 240,300 Z" fill="#8576dc"/>
|
||||
<path d="M206,196 C216,160 240,132 274,116" fill="none" stroke="#e4ddff" stroke-width="7" stroke-linecap="round"/>
|
||||
</g>
|
||||
<!-- eyes: same construction for every expression -->
|
||||
<clipPath id="wN"><path d="M226,374 C236,350 300,346 320,370 C324,402 312,434 274,438 C240,434 222,406 226,374 Z"/></clipPath>
|
||||
<clipPath id="wF"><path d="M372,370 C380,350 426,348 440,368 C444,400 434,430 406,434 C382,430 368,404 372,370 Z"/></clipPath>
|
||||
<clipPath id="iN"><ellipse cx="278" cy="400" rx="34" ry="44"/></clipPath>
|
||||
<clipPath id="iF"><ellipse cx="409" cy="397" rx="25" ry="41"/></clipPath>
|
||||
|
||||
<g id="exprCalm">
|
||||
<path d="M240,338 Q272,328 306,334" fill="none" stroke="#2a1452" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M380,332 Q406,326 432,330" fill="none" stroke="#2a1452" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M226,374 C236,350 300,346 320,370 C324,402 312,434 274,438 C240,434 222,406 226,374 Z" fill="#fbf9ff"/>
|
||||
<g clip-path="url(#wN)"><g clip-path="url(#iN)">
|
||||
<rect x="200" y="340" width="140" height="120" fill="#9a6bff"/>
|
||||
<ellipse cx="278" cy="372" rx="42" ry="28" fill="#4b2a99"/>
|
||||
<ellipse cx="282" cy="438" rx="28" ry="14" fill="#e0b6ff"/>
|
||||
<ellipse cx="280" cy="404" rx="13" ry="19" fill="#2a1452"/>
|
||||
</g>
|
||||
<ellipse cx="278" cy="400" rx="34" ry="44" fill="none" stroke="#2a1452" stroke-width="3"/>
|
||||
<ellipse cx="292" cy="386" rx="10" ry="12" fill="#fff"/>
|
||||
<circle cx="266" cy="420" r="5" fill="#fff"/>
|
||||
</g>
|
||||
<!-- half-lidded: heavy upper lid -->
|
||||
<path d="M218,394 C226,354 300,346 330,370 L340,366 L330,384 C306,370 252,368 228,398 Z" fill="#2a1452"/>
|
||||
<path d="M250,438 Q276,446 302,434" fill="none" stroke="#2a1452" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<path d="M372,370 C380,350 426,348 440,368 C444,400 434,430 406,434 C382,430 368,404 372,370 Z" fill="#fbf9ff"/>
|
||||
<g clip-path="url(#wF)"><g clip-path="url(#iF)">
|
||||
<rect x="360" y="340" width="100" height="120" fill="#9a6bff"/>
|
||||
<ellipse cx="409" cy="370" rx="32" ry="27" fill="#4b2a99"/>
|
||||
<ellipse cx="411" cy="434" rx="21" ry="12" fill="#e0b6ff"/>
|
||||
<ellipse cx="411" cy="401" rx="10" ry="18" fill="#2a1452"/>
|
||||
</g>
|
||||
<ellipse cx="409" cy="397" rx="25" ry="41" fill="none" stroke="#2a1452" stroke-width="3"/>
|
||||
<ellipse cx="420" cy="384" rx="8" ry="10" fill="#fff"/>
|
||||
<circle cx="400" cy="416" r="4" fill="#fff"/>
|
||||
</g>
|
||||
<path d="M366,390 C374,352 430,344 448,364 L458,360 L448,380 C430,366 386,366 372,394 Z" fill="#2a1452"/>
|
||||
<path d="M386,432 Q408,440 428,430" fill="none" stroke="#2a1452" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M356,442 Q364,450 356,455" fill="none" stroke="#2a1452" stroke-width="3" stroke-linecap="round"/>
|
||||
<!-- level, unbothered mouth -->
|
||||
<path d="M336,474 Q352,478 368,472" fill="none" stroke="#2a1452" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M244,456 l-9,11 M258,456 l-9,11 M424,450 l-7,9" stroke="#e08aa8" stroke-width="3" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="exprSmug">
|
||||
<path d="M238,334 Q272,318 308,330" fill="none" stroke="#2a1452" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M380,332 Q406,326 432,330" fill="none" stroke="#2a1452" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M226,374 C236,350 300,346 320,370 C324,402 312,434 274,438 C240,434 222,406 226,374 Z" fill="#fbf9ff"/>
|
||||
<g clip-path="url(#wN)"><g clip-path="url(#iN)">
|
||||
<rect x="200" y="340" width="140" height="120" fill="#9a6bff"/>
|
||||
<ellipse cx="278" cy="372" rx="42" ry="28" fill="#4b2a99"/>
|
||||
<ellipse cx="282" cy="438" rx="28" ry="14" fill="#7af0ff"/>
|
||||
<ellipse cx="280" cy="404" rx="13" ry="19" fill="#2a1452"/>
|
||||
<path d="M356,474 L362,486 L368,472" fill="#fff" stroke="#2a1452" stroke-width="2.5" stroke-linejoin="round"/>
|
||||
</g>
|
||||
<ellipse cx="278" cy="400" rx="34" ry="44" fill="none" stroke="#2a1452" stroke-width="3"/>
|
||||
<ellipse cx="292" cy="386" rx="10" ry="12" fill="#fff"/>
|
||||
<circle cx="266" cy="420" r="5" fill="#fff"/>
|
||||
<path d="M356,474 L362,486 L368,472" fill="#fff" stroke="#2a1452" stroke-width="2.5" stroke-linejoin="round"/>
|
||||
</g>
|
||||
<!-- half-lidded: heavy upper lid -->
|
||||
<path d="M218,394 C226,354 300,346 330,370 L340,366 L330,384 C306,370 252,368 228,398 Z" fill="#2a1452"/>
|
||||
<path d="M250,438 Q276,446 302,434" fill="none" stroke="#2a1452" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<path d="M372,370 C380,350 426,348 440,368 C444,400 434,430 406,434 C382,430 368,404 372,370 Z" fill="#fbf9ff"/>
|
||||
<g clip-path="url(#wF)"><g clip-path="url(#iF)">
|
||||
<rect x="360" y="340" width="100" height="120" fill="#9a6bff"/>
|
||||
<ellipse cx="409" cy="370" rx="32" ry="27" fill="#4b2a99"/>
|
||||
<ellipse cx="411" cy="434" rx="21" ry="12" fill="#7af0ff"/>
|
||||
<ellipse cx="411" cy="401" rx="10" ry="18" fill="#2a1452"/>
|
||||
<path d="M356,474 L362,486 L368,472" fill="#fff" stroke="#2a1452" stroke-width="2.5" stroke-linejoin="round"/>
|
||||
</g>
|
||||
<ellipse cx="409" cy="397" rx="25" ry="41" fill="none" stroke="#2a1452" stroke-width="3"/>
|
||||
<ellipse cx="420" cy="384" rx="8" ry="10" fill="#fff"/>
|
||||
<circle cx="400" cy="416" r="4" fill="#fff"/>
|
||||
<path d="M356,474 L362,486 L368,472" fill="#fff" stroke="#2a1452" stroke-width="2.5" stroke-linejoin="round"/>
|
||||
</g>
|
||||
<path d="M366,398 C376,364 430,356 448,374 L458,370 L448,390 C430,378 386,378 372,402 Z" fill="#2a1452"/>
|
||||
<path d="M386,432 Q408,440 428,430" fill="none" stroke="#2a1452" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M356,442 Q364,450 356,455" fill="none" stroke="#2a1452" stroke-width="3" stroke-linecap="round"/>
|
||||
<!-- level, unbothered mouth -->
|
||||
<path d="M328,468 Q350,488 376,464" fill="none" stroke="#2a1452" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M244,456 l-9,11 M258,456 l-9,11 M424,450 l-7,9" stroke="#e08aa8" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M356,474 L362,486 L368,472" fill="#fff" stroke="#2a1452" stroke-width="2.5" stroke-linejoin="round"/>
|
||||
</g>
|
||||
|
||||
<g id="exprHostile">
|
||||
<path d="M222,318 L314,350" stroke="#2a1452" stroke-width="11" stroke-linecap="round"/>
|
||||
<path d="M372,350 L446,318" stroke="#2a1452" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M230,388 C250,374 300,372 318,386 C318,408 304,426 274,428 C246,426 230,408 230,388 Z" fill="#fff"/>
|
||||
<ellipse cx="282" cy="402" rx="20" ry="24" fill="#9a6bff"/>
|
||||
<ellipse cx="283" cy="404" rx="5" ry="12" fill="#2a1452"/>
|
||||
<path d="M220,388 L328,374 L332,394 L226,398 Z" fill="#2a1452"/>
|
||||
<path d="M376,386 C392,374 428,372 438,384 C438,406 428,424 406,426 C386,424 376,408 376,386 Z" fill="#fff"/>
|
||||
<ellipse cx="408" cy="402" rx="16" ry="22" fill="#9a6bff"/>
|
||||
<ellipse cx="409" cy="404" rx="4" ry="11" fill="#2a1452"/>
|
||||
<path d="M368,374 L448,384 L446,398 L372,394 Z" fill="#2a1452"/>
|
||||
<path d="M312,458 L394,452 C386,496 334,502 312,458 Z" fill="#2a1452"/>
|
||||
<path d="M316,460 L390,455 L388,466 L378,478 L372,467 L328,470 L322,480 Z" fill="#fff"/>
|
||||
</g>
|
||||
|
||||
<g id="ghostCore" transform="translate(-196,-64) rotate(-7 336 400)">
|
||||
<use xlink:href="#hairBack"/><use xlink:href="#bodyC"/><use xlink:href="#headFront"/><use xlink:href="#exprHostile" transform="translate(336,410) scale(1.12) translate(-336,-410)"/><use xlink:href="#swoop"/>
|
||||
</g>
|
||||
|
||||
<clipPath id="ringBack"><rect x="-500" y="-300" width="1000" height="300"/></clipPath>
|
||||
<clipPath id="ringFront"><rect x="-500" y="0" width="1000" height="300"/></clipPath>
|
||||
<g id="ringCore">
|
||||
<ellipse rx="360" ry="104" fill="none" stroke="#2a1452" stroke-width="40"/>
|
||||
<ellipse rx="360" ry="104" fill="none" stroke="#7af0ff" stroke-width="27"/>
|
||||
<ellipse rx="360" ry="104" fill="none" stroke="#2a1452" stroke-width="27" stroke-dasharray="4 40"/>
|
||||
<ellipse rx="318" ry="86" fill="none" stroke="#9a6bff" stroke-width="5" stroke-dasharray="60 14 8 14"/>
|
||||
<!-- glyph tiles riding the ring -->
|
||||
<g stroke="#2a1452" stroke-width="4" stroke-linejoin="round">
|
||||
<rect x="-378" y="-22" width="40" height="40" fill="#f08cc0" transform="rotate(10 -358 -2)"/>
|
||||
<rect x="180" y="70" width="38" height="38" fill="#1a1726"/>
|
||||
<rect x="302" y="-84" width="32" height="32" fill="#1a1726"/>
|
||||
</g>
|
||||
<path d="M190,80 L200,80 L200,96 L210,96 M310,-74 L324,-74 L318,-62" fill="none" stroke="#7af0ff" stroke-width="3"/>
|
||||
<path d="M-366,-10 L-354,0 L-366,10" fill="none" stroke="#2a1452" stroke-width="3"/>
|
||||
</g>
|
||||
<g id="bust">
|
||||
<g transform="translate(330,446) rotate(-15)" clip-path="url(#ringBack)"><use xlink:href="#ringCore"/></g>
|
||||
<use xlink:href="#hairBack"/>
|
||||
<use xlink:href="#bodyC"/>
|
||||
<use xlink:href="#headFront"/>
|
||||
<use xlink:href="#exprSmug" transform="translate(336,410) scale(1.12) translate(-336,-410)"/>
|
||||
<use xlink:href="#swoop"/>
|
||||
<g transform="translate(330,446) rotate(-15)" clip-path="url(#ringFront)"><use xlink:href="#ringCore"/></g>
|
||||
<g fill="#7af0ff"><rect x="600" y="300" width="22" height="7"/><rect x="40" y="250" width="30" height="6" fill="#9a6bff"/><rect x="560" y="140" width="12" height="6" fill="#f08cc0"/></g>
|
||||
</g>
|
||||
<g id="bustSil">
|
||||
<use xlink:href="#hairBack"/><use xlink:href="#bodyC"/><use xlink:href="#headFront"/><use xlink:href="#swoop"/>
|
||||
<g transform="translate(330,446) rotate(-15)"><use xlink:href="#ringCore"/></g>
|
||||
</g>
|
||||
|
||||
<!-- ===== FULL BODY, drawn separately (2.3 heads), origin at feet centre ===== -->
|
||||
<g id="fbCore">
|
||||
<path d="M-90,200 C-98,120 -44,78 6,78 C64,78 108,120 98,200 C100,260 122,300 112,360 L70,350 L-60,350 L-108,366 C-120,300 -94,260 -90,200 Z" fill="#8576dc" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<!-- bow -->
|
||||
<path d="M86,152 C96,118 128,118 124,142 C122,156 104,158 86,152 Z M86,152 C112,150 126,172 116,180 C104,188 92,170 86,152 Z" fill="#f08cc0" stroke="#2a1452" stroke-width="3.5" stroke-linejoin="round"/>
|
||||
<!-- legs, thigh-highs, shoes -->
|
||||
<path d="M-24,380 L-22,432 M18,380 L20,432" stroke="#2a1452" stroke-width="22" stroke-linecap="round"/>
|
||||
<path d="M-24,380 L-22,432 M18,380 L20,432" stroke="#33206a" stroke-width="14" stroke-linecap="round"/>
|
||||
<path d="M-40,428 L-10,426 L-8,454 L-46,456 C-50,442 -46,432 -40,428 Z M8,426 L36,428 C44,436 46,446 42,456 L6,454 Z" fill="#4a2d8f" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<!-- coat with flared tails -->
|
||||
<path d="M-34,256 L36,256 L56,330 L84,398 L52,388 L30,400 L-30,400 L-56,388 L-86,398 L-56,330 Z" fill="#4a2d8f" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M-22,258 L24,258 L30,350 L-26,350 Z" fill="#e4ddff" stroke="#2a1452" stroke-width="3.5"/>
|
||||
<path d="M-30,348 L32,348 L38,372 Q30,364 22,374 Q14,364 6,374 Q-2,364 -10,374 Q-18,364 -26,374 Q-32,366 -36,372 Z" fill="#f4f0ff" stroke="#2a1452" stroke-width="3" stroke-linejoin="round"/>
|
||||
<path d="M-36,264 L-44,330 L-34,350 M38,264 L46,330 L36,350" fill="none" stroke="#f08cc0" stroke-width="3.5"/>
|
||||
<!-- detached sleeves, arms crossed loosely -->
|
||||
<path d="M-34,272 L-58,330" stroke="#2a1452" stroke-width="26" stroke-linecap="round"/>
|
||||
<path d="M-34,272 L-58,330" stroke="#4a2d8f" stroke-width="18" stroke-linecap="round"/>
|
||||
<path d="M36,272 L60,330" stroke="#2a1452" stroke-width="26" stroke-linecap="round"/>
|
||||
<path d="M36,272 L60,330" stroke="#4a2d8f" stroke-width="18" stroke-linecap="round"/>
|
||||
<circle cx="-60" cy="338" r="9" fill="#1a1726" stroke="#2a1452" stroke-width="3"/>
|
||||
<circle cx="62" cy="338" r="9" fill="#1a1726" stroke="#2a1452" stroke-width="3"/>
|
||||
<circle cx="36" cy="270" r="6" fill="none" stroke="#7af0ff" stroke-width="3"/>
|
||||
<!-- head -->
|
||||
<path d="M-62,158 C-64,212 -24,246 8,250 C44,248 74,212 74,158 Z" fill="#f0d3dd" stroke="#2a1452" stroke-width="4"/>
|
||||
<path d="M-92,180 C-100,240 -80,300 -66,360 L-40,356 C-50,300 -56,240 -54,184 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M100,180 C104,240 92,300 98,350 L74,346 C70,300 70,240 66,184 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M-92,184 C-104,110 -44,76 6,76 C66,76 110,112 100,184 L90,176 L86,198 Q76,178 66,168 L60,204 Q50,180 38,166 L30,206 Q18,180 6,166 L-4,206 Q-16,180 -28,168 L-34,198 Q-46,182 -60,176 C-70,180 -82,182 -92,184 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M8,92 C-24,110 -42,150 -34,186 C-30,206 -40,222 -58,224 C-72,224 -82,214 -86,200 C-72,208 -60,202 -58,188 C-56,160 -54,130 -30,108 C-18,98 -4,92 8,92 Z" fill="#b9aef5" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M-40,110 C-20,96 4,90 30,90 L26,100 L42,90 C14,94 -16,100 -40,110 Z" fill="#e4ddff"/>
|
||||
<g transform="rotate(-24 20 96)"><rect x="4" y="90" width="34" height="9" rx="3" fill="#f08cc0" stroke="#2a1452" stroke-width="2.5"/><circle cx="4" cy="94" r="6" fill="#f08cc0" stroke="#2a1452" stroke-width="2.5"/><circle cx="38" cy="94" r="6" fill="#f08cc0" stroke="#2a1452" stroke-width="2.5"/></g>
|
||||
<ellipse cx="-22" cy="214" rx="13" ry="17" fill="#9a6bff" stroke="#2a1452" stroke-width="3"/>
|
||||
<ellipse cx="-20" cy="217" rx="5" ry="8" fill="#2a1452"/><circle cx="-15" cy="208" r="4" fill="#fff"/>
|
||||
<path d="M-40,212 C-34,196 -8,192 -2,204 L4,200 L-2,212 C-12,204 -28,204 -40,212 Z" fill="#2a1452"/>
|
||||
<ellipse cx="36" cy="212" rx="10" ry="16" fill="#9a6bff" stroke="#2a1452" stroke-width="3"/>
|
||||
<ellipse cx="37" cy="215" rx="4" ry="7" fill="#2a1452"/><circle cx="41" cy="206" r="3" fill="#fff"/>
|
||||
<path d="M24,208 C30,196 48,192 54,202 L58,198 L54,210 C44,202 32,202 24,208 Z" fill="#2a1452"/>
|
||||
<path d="M10,236 L22,234" fill="none" stroke="#2a1452" stroke-width="2.5" stroke-linecap="round"/>
|
||||
</g>
|
||||
<g id="fbHostile">
|
||||
<path d="M-40,196 L-2,206 M24,206 L56,196" stroke="#2a1452" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M6,232 L28,230 C24,244 10,244 6,232 Z" fill="#2a1452"/>
|
||||
</g>
|
||||
</defs>
|
||||
|
||||
<rect width="1200" height="800" fill="#eceaf2"/>
|
||||
|
||||
<!-- dialogue card (composited frame, shown for context) -->
|
||||
<clipPath id="cardClip"><polygon points="72,18 784,18 744,782 30,782"/></clipPath>
|
||||
<polygon points="72,18 784,18 744,782 30,782" fill="#07111a"/>
|
||||
<g clip-path="url(#cardClip)">
|
||||
<path d="M400,18 L784,18 L770,300 Z" fill="#9a6bff" opacity="0.10"/>
|
||||
<use xlink:href="#bust" transform="translate(178,64) scale(0.88)"/>
|
||||
</g>
|
||||
<polygon points="72,18 784,18 744,782 30,782" fill="none" stroke="#9a6bff" stroke-width="4"/>
|
||||
<g font-family="Consolas, 'Courier New', monospace" fill="#f2f0ff">
|
||||
<text x="92" y="60" font-size="30" letter-spacing="9" font-weight="700" fill="#9a6bff">NIBU</text>
|
||||
<text x="92" y="86" font-size="14" letter-spacing="5">C / CONSOLE RING</text>
|
||||
</g>
|
||||
|
||||
<g font-family="'Segoe UI', Arial, sans-serif" fill="#2a1452">
|
||||
<text x="808" y="40" font-size="13" letter-spacing="2" font-weight="700">FULL BODY / 2.3 HEADS</text>
|
||||
<g transform="translate(1000,470) scale(0.98) translate(0,-460)">
|
||||
<g transform="translate(4,240) rotate(-15) scale(0.38)" clip-path="url(#ringBack)"><use xlink:href="#ringCore"/></g>
|
||||
<use xlink:href="#fbCore"/>
|
||||
<g transform="translate(4,240) rotate(-15) scale(0.38)" clip-path="url(#ringFront)"><use xlink:href="#ringCore"/></g>
|
||||
</g>
|
||||
<line x1="820" y1="474" x2="1170" y2="474" stroke="#c9c3ea" stroke-width="2"/>
|
||||
|
||||
<text x="808" y="508" font-size="13" letter-spacing="2" font-weight="700">SILHOUETTE</text>
|
||||
<rect x="800" y="518" width="160" height="160" fill="#fff" stroke="#c9c3ea" stroke-width="2"/>
|
||||
<use xlink:href="#bustSil" transform="translate(806,540) scale(0.17)" filter="url(#black)"/>
|
||||
|
||||
<text x="984" y="508" font-size="13" letter-spacing="2" font-weight="700">PALETTE</text>
|
||||
<g font-size="11" font-family="Consolas, monospace">
|
||||
<rect x="984" y="518" width="56" height="40" fill="#9a6bff"/><text x="1046" y="542">#9a6bff key</text>
|
||||
<rect x="984" y="562" width="56" height="20" fill="#b9aef5"/><text x="1046" y="576">#b9aef5 hair</text>
|
||||
<rect x="984" y="586" width="56" height="20" fill="#4a2d8f"/><text x="1046" y="600">#4a2d8f coat</text>
|
||||
<rect x="984" y="610" width="56" height="20" fill="#2a1452"/><text x="1046" y="624">#2a1452 line</text>
|
||||
<rect x="984" y="634" width="56" height="20" fill="#f08cc0"/><text x="1046" y="648">#f08cc0 ribbon</text>
|
||||
<rect x="984" y="658" width="56" height="20" fill="#7af0ff"/><text x="1046" y="672">#7af0ff HUD</text>
|
||||
</g>
|
||||
|
||||
<text x="808" y="718" font-size="13" letter-spacing="2" font-weight="700">HOOK</text>
|
||||
<text x="808" y="740" font-size="15">She is the ship's console: when she takes the</text>
|
||||
<text x="808" y="760" font-size="15">helm a HUD ring locks around her like an orbit,</text>
|
||||
<text x="808" y="780" font-size="15">and nobody else gets their hands on the controls.</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 26 KiB |
|
|
@ -1,69 +0,0 @@
|
|||
# Nibu: SVG proposals, round 1
|
||||
|
||||
## Rebased on canon
|
||||
|
||||
Nibu already has an established design: `gamecult-site\GameCult\static\interactive\cotsc-praxis\character-sheets\nibu-sheet.png`
|
||||
(also `cotsc-praxis\nibu.png`, `sprites\nibu\*` and `AetheriaLore\.voidbot\voice\nibu.png`). The coordinator relayed
|
||||
the operator's ruling that all three directions keep that canon, and that canon overrides the brief's palette rules.
|
||||
So the three directions in `../../nibu.md` (Figurehead, Smeared Hostess, Hull Hood) were dropped as identities.
|
||||
Every sheet keeps the same Nibu: long lavender hair, the big crescent swoop over her near eye, the pink ribbon bow
|
||||
on her far side, the pink circuit hair clip, violet eyes, the purple coat with circuit-glyph trim, the throat
|
||||
frill, the cyan shoulder port and the glitch. Only the hook changes. The brief's B hook (the out-of-sync duplicate)
|
||||
became this round's B.
|
||||
|
||||
`nibu-old-B.svg` is an unfinished draft of the pre-canon Smeared Hostess (bob and pillbox cap). It was never
|
||||
rendered or reviewed, and is kept only because the coordinator asked for old-direction sheets to be kept.
|
||||
|
||||
Shared construction, drawn by hand: three-quarter view facing screen right, light from the upper left, a violet rim
|
||||
on the far jaw and the coat, one shadow tone and one highlight per material, and an outline in `#2a1452` about twice
|
||||
the weight of the inner lines. Canon palette: key `#9a6bff`, hair `#b9aef5`, coat `#4a2d8f`, line `#2a1452`,
|
||||
ribbon `#f08cc0`, glitch/HUD cyan `#7af0ff`, skin `#f0d3dd`. The pink and cyan are near Kiko's and Aqua's hues;
|
||||
each stays under about 10 percent of the figure.
|
||||
|
||||
## A: Source Slate (`nibu-A.svg`)
|
||||
|
||||
- **Design:** the lore steward with a cracked holo-slate raised beside her face. A SOURCE? header, a struck-through
|
||||
claim and a big pink question mark are on it. Her head tilts back, the near brow arches, her pupils slide toward
|
||||
the claim, and the mouth sneers at one corner. This is the "Source?" portrait from the set.
|
||||
- **Silhouette:** the slate is a hard rectangular tab off the lower right, under the bow. At 48 px it reads as
|
||||
"girl holding a sign".
|
||||
- **Changed after looking:** first pass held the slate inside the hair line, so it disappeared in the silhouette,
|
||||
and the glove read as a black blob. Moved the slate out past the hair, angled it outward, gave it a sleeve rising
|
||||
from the frame edge and fingertips over its bottom edge, made it opaque, and lowered the bust to fill the card.
|
||||
- **Round 2:** the slate is a prop, so every expression must hold it or the hook disappears. Test a smaller,
|
||||
clip-on version for Docked and Grudging. Add more visible damage to the slate (the junkyard hull).
|
||||
|
||||
## B: Glitch Twin (`nibu-B.svg`) — strongest
|
||||
|
||||
- **Design:** canon Nibu, calm and half-lidded. Behind her and up to the left is a scanline hologram of herself
|
||||
from a failed timeline, scowling. One slice across her near eye has slipped to the twin's angry eye, boxed in a
|
||||
cyan glitch frame. That is the reset smear, made visible in a single neutral portrait.
|
||||
- **Silhouette:** a stepped double crown, two heads where there should be one. It is the only cast silhouette of
|
||||
this kind.
|
||||
- **Changed after looking:** pass 1 put the twin straight behind her, so only its hair showed, and the
|
||||
bleed-through bands ran across both of her eyes, which looked like a smeared visor. Raised and rotated the twin
|
||||
so its crown steps clear and its eye shows past her hair. Cut the bleed down to one slice over the near eye. Raised
|
||||
the tint's contrast. Moved the swoop out so it covers only the outer corner of the eye. Put a plate behind the
|
||||
nameplate, which the twin now crosses.
|
||||
- **Round 2:** the twin's angry face is still mostly hidden behind her hair. Try mirroring the offset, or a larger,
|
||||
fainter twin looming above, so its expression reads at 128 px. Define how the slice changes per expression; in
|
||||
Recognition the twin should react first, as the brief says. Watch the stacked translucency at small sizes.
|
||||
|
||||
## C: Console Ring (`nibu-C.svg`)
|
||||
|
||||
- **Design:** she is the ship's controls. A segmented cyan HUD ring orbits her at a tilt, passing behind her head
|
||||
and in front of her collar, with glyph tiles riding on it. The eyes reflect cyan, and she gives a smug fanged
|
||||
smile. This is the "control is hers" reading.
|
||||
- **Silhouette:** loops stick out from both sides of a long-hair mass. At 48 px it reads as an orbit, but thinly.
|
||||
- **Changed after looking:** the first ring was too small and sat at the neck like a hula hoop or necklace. Made it
|
||||
larger and thicker, tilted it 15 degrees, lowered it so the front arc clears the chin, and scaled the bust so both
|
||||
ends fit inside the card.
|
||||
- **Round 2:** the ring is the weakest silhouette of the three. Try a thicker band, or a second, partial ring.
|
||||
The front arc competes with the chest panel, so drop or simplify the panel in this direction.
|
||||
|
||||
## Known shared weaknesses (all three)
|
||||
|
||||
- The chest holo panel reads as a sticky note; push it toward the canon's softer blue bodice.
|
||||
- The full-body chibis are simple lock-the-design figures (about 2.3 heads), not finished turnarounds.
|
||||
- The near eye sits close to the swoop, so the face's left half is busy. The canon accepts this, but Docked may
|
||||
want the swoop pulled back one notch.
|
||||
|
|
@ -1,263 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<title>Nibu, direction B: Smeared Hostess</title>
|
||||
<defs>
|
||||
<!-- palette: key #9a6bff, line #2a1452, cyan #7af0ff, white #f2f0ff, hull #1a1726, skin #e9c9d6
|
||||
cel shadows: violet #6a47c9, skin #cf9fb8, white #c9c3ea; hair highlight #c7b2ff -->
|
||||
<filter id="holo" x="-20%" y="-20%" width="140%" height="140%">
|
||||
<feColorMatrix in="SourceGraphic" type="matrix" values="0.20 0.30 0.10 0 0.22 0.12 0.32 0.16 0 0.10 0.08 0.20 0.30 0 0.48 0 0 0 0.62 0" result="tint"/>
|
||||
<feMorphology in="SourceAlpha" operator="dilate" radius="3" result="fat"/>
|
||||
<feComposite in="fat" in2="SourceAlpha" operator="out" result="ring"/>
|
||||
<feFlood flood-color="#7af0ff"/>
|
||||
<feComposite in2="ring" operator="in" result="edge"/>
|
||||
<feMerge><feMergeNode in="tint"/><feMergeNode in="edge"/></feMerge>
|
||||
</filter>
|
||||
<filter id="black" x="-10%" y="-10%" width="120%" height="120%">
|
||||
<feFlood flood-color="#000"/>
|
||||
<feComposite in2="SourceAlpha" operator="in"/>
|
||||
</filter>
|
||||
<pattern id="scan" width="10" height="7" patternUnits="userSpaceOnUse">
|
||||
<rect width="10" height="4.5" fill="#fff"/>
|
||||
</pattern>
|
||||
<mask id="scanMask" maskUnits="userSpaceOnUse" x="-600" y="-600" width="2400" height="2400">
|
||||
<rect x="-600" y="-600" width="2400" height="2400" fill="url(#scan)"/>
|
||||
</mask>
|
||||
<clipPath id="glitchBand"><rect x="-400" y="300" width="1400" height="46"/></clipPath>
|
||||
<clipPath id="glitchBand2"><rect x="-400" y="520" width="1400" height="22"/></clipPath>
|
||||
|
||||
<!-- ===== BUST, local space 640 x 760 ===== -->
|
||||
<path id="faceP" d="M198,285 C192,365 214,440 300,494 C326,510 354,512 374,498 C424,466 454,408 462,298 Z"/>
|
||||
<clipPath id="faceClip"><use xlink:href="#faceP"/></clipPath>
|
||||
<path id="crownP" d="M134,330 C118,168 214,60 336,60 C466,60 552,160 538,322 C530,318 515,305 506,296
|
||||
L500,334 Q480,300 455,280 Q450,312 446,348 Q425,300 392,274 Q388,320 384,356 Q360,300 322,274
|
||||
Q318,320 312,356 Q290,300 255,276 Q250,312 244,346 Q225,305 200,288 C180,300 158,318 134,330 Z"/>
|
||||
|
||||
<g id="hairBack">
|
||||
<path d="M336,58 C470,58 556,160 546,300 C540,390 524,452 508,514 L470,500 L230,470 L200,505 L160,524 C136,450 122,370 126,300 C128,160 210,58 336,58 Z" fill="#6a47c9" stroke="#2a1452" stroke-width="8" stroke-linejoin="round"/>
|
||||
<!-- far lock, behind the face -->
|
||||
<path d="M540,290 C546,392 512,474 450,534 C470,470 470,380 460,300 Z" fill="#9a6bff" stroke="#2a1452" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M528,330 C530,400 510,460 470,508" fill="none" stroke="#7af0ff" stroke-width="4" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<g id="bodyB">
|
||||
<path d="M300,466 L298,566 L394,566 L392,466 Z" fill="#e9c9d6" stroke="#2a1452" stroke-width="5"/>
|
||||
<path d="M298,488 C330,526 370,520 394,486 L394,548 L298,548 Z" fill="#cf9fb8"/>
|
||||
<path d="M116,770 C122,652 190,594 292,568 L400,564 C498,586 558,652 568,770 Z" fill="#f2f0ff" stroke="#2a1452" stroke-width="8" stroke-linejoin="round"/>
|
||||
<path d="M420,574 C502,602 550,662 560,770 L482,770 C478,694 458,632 412,592 Z" fill="#c9c3ea"/>
|
||||
<path d="M526,624 C552,664 562,714 565,770" fill="none" stroke="#9a6bff" stroke-width="6" stroke-linecap="round"/>
|
||||
<path d="M292,570 C302,644 312,704 318,770 M402,566 C390,644 376,704 372,770" fill="none" stroke="#9a6bff" stroke-width="7"/>
|
||||
<!-- near-shoulder wedge epaulette -->
|
||||
<path d="M128,712 C148,646 192,608 246,590 L258,612 C208,630 172,666 160,716 Z" fill="#9a6bff" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<!-- high collar -->
|
||||
<path d="M284,530 L288,592 C322,610 372,610 406,592 L404,528 C372,544 318,546 284,530 Z" fill="#f2f0ff" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M380,540 L404,530 L406,592 L384,600 Z" fill="#c9c3ea"/>
|
||||
<path d="M286,532 C318,548 372,546 404,530" fill="none" stroke="#9a6bff" stroke-width="6"/>
|
||||
<!-- ascot, swept wedge tails -->
|
||||
<path d="M332,610 L292,700 L322,684 L336,716 L352,612 Z M356,610 L404,684 L376,680 L362,614 Z" fill="#9a6bff" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M320,590 L370,590 L364,616 L326,616 Z" fill="#6a47c9" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
</g>
|
||||
|
||||
<g id="headFront">
|
||||
<use xlink:href="#faceP" fill="#e9c9d6" stroke="#2a1452" stroke-width="6"/>
|
||||
<g clip-path="url(#faceClip)">
|
||||
<use xlink:href="#crownP" transform="translate(6,16)" fill="#cf9fb8"/>
|
||||
<path d="M440,330 C452,400 430,460 380,500 L480,520 L500,300 Z" fill="#cf9fb8"/>
|
||||
</g>
|
||||
<path d="M452,360 C448,420 424,466 384,494" fill="none" stroke="#9a6bff" stroke-width="5" stroke-linecap="round"/>
|
||||
<!-- near lock, in front of the cheek -->
|
||||
<path d="M130,300 C126,404 160,484 256,536 C218,472 210,392 216,312 Z" fill="#9a6bff" stroke="#2a1452" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M214,322 C210,396 216,470 252,532 C226,500 196,470 190,430 C186,390 192,350 200,322 Z" fill="#6a47c9"/>
|
||||
<use xlink:href="#crownP" fill="#9a6bff" stroke="#2a1452" stroke-width="8" stroke-linejoin="round"/>
|
||||
<!-- one hair highlight band -->
|
||||
<path d="M176,206 C196,156 246,126 300,116 L292,142 L322,114 L326,136 L356,112 L360,130 L392,114 C330,124 236,150 176,206 Z" fill="#c7b2ff"/>
|
||||
<path d="M190,300 C176,250 190,200 220,166" fill="none" stroke="#6a47c9" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M500,250 C506,214 500,180 482,150" fill="none" stroke="#7af0ff" stroke-width="5" stroke-linecap="round"/>
|
||||
<!-- hostess pillbox cap, tilted -->
|
||||
<g transform="rotate(-14 405 90)">
|
||||
<path d="M338,112 L350,42 L460,42 L472,108 C440,124 368,126 338,112 Z" fill="#f2f0ff" stroke="#2a1452" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M438,44 L460,42 L470,96 L448,102 Z" fill="#c9c3ea"/>
|
||||
<ellipse cx="405" cy="42" rx="55" ry="12" fill="#f2f0ff" stroke="#2a1452" stroke-width="5"/>
|
||||
<path d="M342,90 C380,104 430,104 468,88 L472,108 C440,124 368,126 338,112 Z" fill="#9a6bff" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M374,74 L405,56 L436,74 L405,66 Z" fill="#7af0ff" stroke="#2a1452" stroke-width="3" stroke-linejoin="round"/>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<!-- iris construction, shared by both expressions -->
|
||||
<clipPath id="wN"><path d="M228,372 C238,350 300,346 320,370 C324,402 312,432 274,436 C240,432 224,404 228,372 Z"/></clipPath>
|
||||
<clipPath id="wF"><path d="M372,370 C380,350 426,348 440,368 C444,400 434,430 406,434 C382,430 368,404 372,370 Z"/></clipPath>
|
||||
<clipPath id="iN"><ellipse cx="278" cy="398" rx="33" ry="42"/></clipPath>
|
||||
<clipPath id="iF"><ellipse cx="408" cy="396" rx="25" ry="40"/></clipPath>
|
||||
|
||||
<g id="exprPolite">
|
||||
<path d="M238,334 Q272,320 308,330" fill="none" stroke="#2a1452" stroke-width="6" stroke-linecap="round"/>
|
||||
<path d="M378,328 Q406,318 434,326" fill="none" stroke="#2a1452" stroke-width="5" stroke-linecap="round"/>
|
||||
<!-- near eye -->
|
||||
<path d="M228,372 C238,350 300,346 320,370 C324,402 312,432 274,436 C240,432 224,404 228,372 Z" fill="#f7f5ff"/>
|
||||
<g clip-path="url(#wN)"><g clip-path="url(#iN)">
|
||||
<rect x="200" y="340" width="140" height="120" fill="#9a6bff"/>
|
||||
<ellipse cx="278" cy="372" rx="40" ry="26" fill="#4b2a99"/>
|
||||
<ellipse cx="282" cy="434" rx="26" ry="13" fill="#7af0ff"/>
|
||||
<ellipse cx="280" cy="402" rx="13" ry="19" fill="#2a1452"/>
|
||||
</g>
|
||||
<ellipse cx="278" cy="398" rx="33" ry="42" fill="none" stroke="#2a1452" stroke-width="3"/>
|
||||
<ellipse cx="263" cy="382" rx="10" ry="12" fill="#fff"/>
|
||||
<circle cx="295" cy="420" r="5" fill="#fff"/>
|
||||
</g>
|
||||
<path d="M220,384 C230,346 302,336 328,362 L350,348 L336,376 C314,358 250,358 228,390 Z" fill="#2a1452"/>
|
||||
<path d="M248,436 Q274,444 300,432" fill="none" stroke="#2a1452" stroke-width="3.5" stroke-linecap="round"/>
|
||||
<!-- far eye -->
|
||||
<path d="M372,370 C380,350 426,348 440,368 C444,400 434,430 406,434 C382,430 368,404 372,370 Z" fill="#f7f5ff"/>
|
||||
<g clip-path="url(#wF)"><g clip-path="url(#iF)">
|
||||
<rect x="360" y="340" width="100" height="120" fill="#9a6bff"/>
|
||||
<ellipse cx="408" cy="370" rx="30" ry="25" fill="#4b2a99"/>
|
||||
<ellipse cx="410" cy="432" rx="20" ry="12" fill="#7af0ff"/>
|
||||
<ellipse cx="410" cy="400" rx="10" ry="18" fill="#2a1452"/>
|
||||
</g>
|
||||
<ellipse cx="408" cy="396" rx="25" ry="40" fill="none" stroke="#2a1452" stroke-width="3"/>
|
||||
<ellipse cx="397" cy="381" rx="8" ry="10" fill="#fff"/>
|
||||
<circle cx="419" cy="418" r="4" fill="#fff"/>
|
||||
</g>
|
||||
<path d="M366,384 C376,346 430,336 448,358 L466,348 L452,376 C434,358 386,358 372,392 Z" fill="#2a1452"/>
|
||||
<path d="M386,432 Q408,440 428,430" fill="none" stroke="#2a1452" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M354,440 Q363,448 355,453" fill="none" stroke="#2a1452" stroke-width="3" stroke-linecap="round"/>
|
||||
<!-- polite, dangerous: closed smile with one corner hooked up -->
|
||||
<path d="M326,472 Q350,484 378,468 L386,460" fill="none" stroke="#2a1452" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M238,452 l-9,11 M252,452 l-9,11 M424,446 l-7,9" stroke="#d98aa8" stroke-width="3" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<g id="exprAngry">
|
||||
<path d="M226,316 L314,346" stroke="#2a1452" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M372,346 L444,318" stroke="#2a1452" stroke-width="9" stroke-linecap="round"/>
|
||||
<path d="M232,386 C252,372 300,370 318,384 C318,406 304,424 274,426 C246,424 232,406 232,386 Z" fill="#fff"/>
|
||||
<ellipse cx="282" cy="400" rx="20" ry="24" fill="#9a6bff"/>
|
||||
<ellipse cx="283" cy="402" rx="5" ry="12" fill="#2a1452"/>
|
||||
<path d="M222,384 L328,374 L332,392 L228,396 Z" fill="#2a1452"/>
|
||||
<path d="M376,384 C392,372 428,370 438,382 C438,404 428,422 406,424 C386,422 376,406 376,384 Z" fill="#fff"/>
|
||||
<ellipse cx="408" cy="400" rx="16" ry="22" fill="#9a6bff"/>
|
||||
<ellipse cx="409" cy="402" rx="4" ry="11" fill="#2a1452"/>
|
||||
<path d="M368,372 L448,382 L446,396 L372,392 Z" fill="#2a1452"/>
|
||||
<path d="M314,458 L392,452 C384,494 334,500 314,458 Z" fill="#2a1452"/>
|
||||
<path d="M318,460 L388,455 L386,466 L376,476 L370,466 L324,470 Z" fill="#fff"/>
|
||||
</g>
|
||||
|
||||
<g id="handCard">
|
||||
<g transform="rotate(14 584 440)">
|
||||
<rect x="546" y="370" width="80" height="112" rx="9" fill="#1a1726" stroke="#2a1452" stroke-width="6"/>
|
||||
<rect x="549" y="392" width="74" height="14" fill="#7af0ff"/>
|
||||
<rect x="558" y="420" width="24" height="18" rx="3" fill="#9a6bff" stroke="#7af0ff" stroke-width="2"/>
|
||||
<path d="M594,452 L612,452 M594,462 L606,462" stroke="#9a6bff" stroke-width="4" stroke-linecap="round"/>
|
||||
</g>
|
||||
<path d="M548,770 C552,690 556,630 548,570 L608,562 C616,626 614,694 606,770 Z" fill="#f2f0ff" stroke="#2a1452" stroke-width="7" stroke-linejoin="round"/>
|
||||
<path d="M582,580 L608,576 C614,640 612,700 606,770 L586,770 C590,700 590,640 582,580 Z" fill="#c9c3ea"/>
|
||||
<path d="M544,560 C532,520 552,490 580,492 C608,494 616,524 610,554 C600,576 556,580 544,560 Z" fill="#e9c9d6" stroke="#2a1452" stroke-width="6" stroke-linejoin="round"/>
|
||||
<path d="M560,500 Q565,522 560,544 M576,496 Q582,520 577,544 M592,500 Q598,520 594,540" fill="none" stroke="#2a1452" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M544,568 L612,558 L614,582 L548,592 Z" fill="#9a6bff" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
</g>
|
||||
|
||||
<g id="ghostCore" transform="translate(-178,-16) rotate(-3 336 400)">
|
||||
<use xlink:href="#hairBack"/><use xlink:href="#bodyB"/><use xlink:href="#headFront"/><use xlink:href="#exprAngry"/>
|
||||
</g>
|
||||
|
||||
<g id="bust">
|
||||
<g filter="url(#holo)" mask="url(#scanMask)"><use xlink:href="#ghostCore"/></g>
|
||||
<g filter="url(#holo)" mask="url(#scanMask)" clip-path="url(#glitchBand)"><use xlink:href="#ghostCore" transform="translate(22,0)"/></g>
|
||||
<use xlink:href="#hairBack"/>
|
||||
<use xlink:href="#bodyB"/>
|
||||
<use xlink:href="#headFront"/>
|
||||
<use xlink:href="#exprPolite"/>
|
||||
<use xlink:href="#handCard"/>
|
||||
<!-- the seam: her own outline slips for one band -->
|
||||
<g clip-path="url(#glitchBand2)" opacity="0.85"><use xlink:href="#bodyB" transform="translate(-14,0)" filter="url(#holo)"/></g>
|
||||
</g>
|
||||
<g id="bustSil">
|
||||
<use xlink:href="#ghostCore"/>
|
||||
<use xlink:href="#hairBack"/><use xlink:href="#bodyB"/><use xlink:href="#headFront"/><use xlink:href="#handCard"/>
|
||||
</g>
|
||||
|
||||
<!-- ===== FULL BODY, drawn on its own (2.3 heads), origin at feet centre ===== -->
|
||||
<g id="fbCore">
|
||||
<path d="M-84,210 C-92,128 -40,82 6,82 C60,82 102,124 92,210 L84,250 L-74,256 Z" fill="#6a47c9" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M96,180 C98,226 82,256 52,272 C64,240 66,210 64,180 Z" fill="#9a6bff" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<!-- legs, boots -->
|
||||
<path d="M-26,384 L-24,428 M18,384 L20,428" stroke="#2a1452" stroke-width="20" stroke-linecap="round"/>
|
||||
<path d="M-26,384 L-24,428 M18,384 L20,428" stroke="#e9c9d6" stroke-width="12" stroke-linecap="round"/>
|
||||
<path d="M-40,424 L-12,422 L-10,452 L-46,454 C-50,440 -46,430 -40,424 Z M8,422 L34,424 C42,432 44,442 40,454 L6,452 Z" fill="#9a6bff" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<!-- far arm raised with the keycard -->
|
||||
<path d="M30,272 L66,246 L70,214" fill="none" stroke="#2a1452" stroke-width="20" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M30,272 L66,246 L70,214" fill="none" stroke="#f2f0ff" stroke-width="12" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<g transform="rotate(14 76 186)"><rect x="62" y="164" width="28" height="38" rx="4" fill="#1a1726" stroke="#2a1452" stroke-width="3"/><rect x="63" y="172" width="26" height="6" fill="#7af0ff"/></g>
|
||||
<circle cx="70" cy="210" r="10" fill="#e9c9d6" stroke="#2a1452" stroke-width="3.5"/>
|
||||
<!-- dress -->
|
||||
<path d="M-34,262 L34,262 L46,330 L66,390 L-66,390 L-46,330 Z" fill="#f2f0ff" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M14,262 L34,262 L46,330 L66,390 L30,390 Z" fill="#c9c3ea"/>
|
||||
<path d="M-62,378 L62,378" stroke="#9a6bff" stroke-width="8"/>
|
||||
<path d="M-46,330 L46,330" stroke="#9a6bff" stroke-width="5"/>
|
||||
<path d="M-66,390 L66,390" stroke="#2a1452" stroke-width="5" stroke-linecap="round"/>
|
||||
<!-- near arm -->
|
||||
<path d="M-30,272 L-50,322" fill="none" stroke="#2a1452" stroke-width="20" stroke-linecap="round"/>
|
||||
<path d="M-30,272 L-50,322" fill="none" stroke="#f2f0ff" stroke-width="12" stroke-linecap="round"/>
|
||||
<circle cx="-52" cy="328" r="10" fill="#e9c9d6" stroke="#2a1452" stroke-width="3.5"/>
|
||||
<path d="M-8,262 L-24,300 L-10,294 L-4,312 L6,264 Z M10,264 L30,296 L18,294 Z" fill="#9a6bff" stroke="#2a1452" stroke-width="3" stroke-linejoin="round"/>
|
||||
<!-- head -->
|
||||
<path d="M-62,160 C-64,214 -24,248 8,252 C44,250 74,214 74,160 Z" fill="#e9c9d6" stroke="#2a1452" stroke-width="4"/>
|
||||
<path d="M-86,186 C-88,232 -66,258 -30,272 C-48,240 -54,212 -54,182 Z" fill="#9a6bff" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M-86,186 C-98,112 -40,80 8,80 C64,80 104,116 96,186 L88,180 L84,200 Q76,180 68,170 L60,204 Q50,180 38,168 L30,206 Q18,180 6,168 L-4,206 Q-16,180 -28,170 L-36,200 Q-46,182 -58,176 C-68,180 -78,184 -86,186 Z" fill="#9a6bff" stroke="#2a1452" stroke-width="5" stroke-linejoin="round"/>
|
||||
<path d="M-58,124 C-44,104 -20,94 6,92 L2,104 L18,92 L20,102 L36,94 C10,98 -30,108 -58,124 Z" fill="#c7b2ff"/>
|
||||
<ellipse cx="-24" cy="214" rx="13" ry="17" fill="#9a6bff" stroke="#2a1452" stroke-width="3"/>
|
||||
<ellipse cx="-22" cy="217" rx="5" ry="8" fill="#2a1452"/><circle cx="-29" cy="207" r="4" fill="#fff"/>
|
||||
<path d="M-40,206 C-34,192 -10,190 -4,202 L4,196 L-2,208" fill="#2a1452" stroke="#2a1452" stroke-width="3" stroke-linejoin="round"/>
|
||||
<ellipse cx="36" cy="212" rx="10" ry="16" fill="#9a6bff" stroke="#2a1452" stroke-width="3"/>
|
||||
<ellipse cx="37" cy="215" rx="4" ry="7" fill="#2a1452"/><circle cx="32" cy="206" r="3" fill="#fff"/>
|
||||
<path d="M24,204 C30,192 48,190 52,200 L60,194 L54,206" fill="#2a1452" stroke="#2a1452" stroke-width="3" stroke-linejoin="round"/>
|
||||
<path d="M6,236 Q14,240 22,234 L25,230" fill="none" stroke="#2a1452" stroke-width="2.5" stroke-linecap="round"/>
|
||||
<g transform="rotate(-14 30 80)">
|
||||
<path d="M0,92 L6,58 L58,58 L64,90 C48,98 16,98 0,92 Z" fill="#f2f0ff" stroke="#2a1452" stroke-width="4" stroke-linejoin="round"/>
|
||||
<path d="M2,82 C20,88 44,88 62,80 L64,90 C48,98 16,98 0,92 Z" fill="#9a6bff"/>
|
||||
<path d="M20,72 L32,64 L44,72 L32,69 Z" fill="#7af0ff"/>
|
||||
</g>
|
||||
</g>
|
||||
</defs>
|
||||
|
||||
<rect width="1200" height="800" fill="#eceaf2"/>
|
||||
|
||||
<!-- dialogue card -->
|
||||
<clipPath id="cardClip"><polygon points="72,18 784,18 744,782 30,782"/></clipPath>
|
||||
<polygon points="72,18 784,18 744,782 30,782" fill="#07111a"/>
|
||||
<g clip-path="url(#cardClip)">
|
||||
<path d="M400,18 L784,18 L770,300 Z" fill="#9a6bff" opacity="0.10"/>
|
||||
<use xlink:href="#bust" transform="translate(150,26) scale(0.96)"/>
|
||||
</g>
|
||||
<polygon points="72,18 784,18 744,782 30,782" fill="none" stroke="#9a6bff" stroke-width="4"/>
|
||||
<g font-family="Consolas, 'Courier New', monospace" fill="#f2f0ff">
|
||||
<text x="92" y="60" font-size="30" letter-spacing="9" font-weight="700" fill="#9a6bff">NIBU</text>
|
||||
<text x="92" y="86" font-size="14" letter-spacing="5">B / SMEARED HOSTESS</text>
|
||||
</g>
|
||||
|
||||
<!-- full body -->
|
||||
<g font-family="'Segoe UI', Arial, sans-serif" fill="#2a1452">
|
||||
<text x="808" y="40" font-size="13" letter-spacing="2" font-weight="700">FULL BODY / 2.3 HEADS</text>
|
||||
<g transform="translate(985,470) scale(0.98) translate(0,-460)">
|
||||
<g filter="url(#holo)" mask="url(#scanMask)" transform="translate(-58,-8)"><use xlink:href="#fbCore"/></g>
|
||||
<use xlink:href="#fbCore"/>
|
||||
</g>
|
||||
<line x1="820" y1="474" x2="1170" y2="474" stroke="#c9c3ea" stroke-width="2"/>
|
||||
|
||||
<text x="808" y="508" font-size="13" letter-spacing="2" font-weight="700">SILHOUETTE</text>
|
||||
<rect x="800" y="518" width="160" height="160" fill="#fff" stroke="#c9c3ea" stroke-width="2"/>
|
||||
<use xlink:href="#bustSil" transform="translate(828,526) scale(0.19)" filter="url(#black)"/>
|
||||
|
||||
<text x="984" y="508" font-size="13" letter-spacing="2" font-weight="700">PALETTE</text>
|
||||
<g font-size="11" font-family="Consolas, monospace">
|
||||
<rect x="984" y="518" width="56" height="44" fill="#9a6bff"/><text x="1046" y="544">#9a6bff key</text>
|
||||
<rect x="984" y="566" width="56" height="20" fill="#2a1452"/><text x="1046" y="580">#2a1452 line</text>
|
||||
<rect x="984" y="590" width="56" height="20" fill="#7af0ff"/><text x="1046" y="604">#7af0ff projection</text>
|
||||
<rect x="984" y="614" width="56" height="20" fill="#f2f0ff" stroke="#c9c3ea"/><text x="1046" y="628">#f2f0ff uniform</text>
|
||||
<rect x="984" y="638" width="56" height="20" fill="#1a1726"/><text x="1046" y="652">#1a1726 hull</text>
|
||||
<rect x="984" y="662" width="56" height="16" fill="#e9c9d6"/><text x="1046" y="674">#e9c9d6 skin</text>
|
||||
</g>
|
||||
|
||||
<text x="808" y="718" font-size="13" letter-spacing="2" font-weight="700">HOOK</text>
|
||||
<text x="808" y="740" font-size="15">A hostess hologram with an out-of-sync twin</text>
|
||||
<text x="808" y="760" font-size="15">behind her, already wearing the face she</text>
|
||||
<text x="808" y="780" font-size="15">has not made yet.</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 168 KiB |
|
|
@ -1,80 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1200 800" width="1200" height="800">
|
||||
<defs>
|
||||
<filter id="glow" x="-80%" y="-40%" width="260%" height="180%"><feGaussianBlur stdDeviation="9"/></filter>
|
||||
<filter id="docglow" x="-20%" y="-20%" width="140%" height="140%"><feGaussianBlur stdDeviation="12"/></filter>
|
||||
<filter id="glowS" x="-50%" y="-50%" width="200%" height="200%"><feGaussianBlur stdDeviation="5"/></filter>
|
||||
<filter id="glowS2" x="-100%" y="-50%" width="300%" height="200%"><feMorphology operator="dilate" radius="0" result="a"/><feGaussianBlur in="SourceGraphic" stdDeviation="2.5" result="b"/><feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge></filter>
|
||||
<filter id="black" x="-5%" y="-5%" width="110%" height="110%"><feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0"/></filter>
|
||||
<clipPath id="card"><path d="M70 24 L790 24 L730 776 L10 776 Z"/></clipPath>
|
||||
<g id="figure"><g transform="translate(-70 0)"><path d="M0 0 Z" fill="#f2801f" stroke="#170c3a" stroke-width="7" stroke-linejoin="round"/>
|
||||
<clipPath id="tbclip"><path d="M0 0 Z"/></clipPath>
|
||||
<g clip-path="url(#tbclip)"><path d="M146 258 C152 318 130 380 150 430 C168 478 210 500 262 520 L262 560 C190 530 140 490 124 430 C108 370 136 320 120 250 Z" fill="#b9520e"/><path d="M96 300 C104 360 96 410 118 460" fill="none" stroke="#b9520e" stroke-width="3.5" stroke-linecap="round"/></g>
|
||||
<path d="M100 800 C112 680 160 600 240 580 L600 580 C700 600 744 690 756 800 Z" fill="#4b2fa6" stroke="#170c3a" stroke-width="7" stroke-linejoin="round"/>
|
||||
<clipPath id="robeclip"><path d="M100 800 C112 680 160 600 240 580 L600 580 C700 600 744 690 756 800 Z"/></clipPath>
|
||||
<g clip-path="url(#robeclip)"><path d="M520 540 C640 600 700 690 720 800 L560 800 C580 700 560 620 500 560 Z" fill="#2e1c70"/><path d="M150 800 C160 690 210 600 280 560 C230 620 200 700 196 800 Z" fill="#6c50d0"/><path d="M716 800 C700 700 660 620 600 576" fill="none" stroke="#8e70f2" stroke-width="10"/><g fill="none" stroke="#170c3a" stroke-width="3.5" stroke-linecap="round"><path d="M330 610 C318 680 300 740 290 800"/><path d="M420 630 C424 700 420 760 418 800"/><path d="M500 620 C520 690 540 750 552 800"/></g></g>
|
||||
<g transform="rotate(-3 410 560)"><path d="M330 60 C420 70 560 140 610 280 C650 390 660 480 660 560 C520 580 300 580 160 560 C150 460 160 340 210 240 C250 160 290 100 330 60 Z" fill="#4b2fa6"/><clipPath id="hoodclip"><path d="M330 60 C420 70 560 140 610 280 C650 390 660 480 660 560 C520 580 300 580 160 560 C150 460 160 340 210 240 C250 160 290 100 330 60 Z"/></clipPath><g clip-path="url(#hoodclip)"><path d="M360 50 C520 100 690 260 690 600 L606 600 C626 420 580 220 360 50 Z" fill="#2e1c70"/><path d="M322 72 C270 120 214 220 196 360 C228 260 270 170 332 84 Z" fill="#6c50d0"/><path d="M330 60 C420 70 560 140 610 280 C650 390 660 480 660 560" fill="none" stroke="#8e70f2" stroke-width="12"/></g><path d="M330 60 C420 70 560 140 610 280 C650 390 660 480 660 560 C520 580 300 580 160 560 C150 460 160 340 210 240 C250 160 290 100 330 60 Z" fill="none" stroke="#170c3a" stroke-width="7" stroke-linejoin="round"/><path d="M334 70 C364 110 396 150 420 186" fill="none" stroke="#170c3a" stroke-width="3.5" stroke-linecap="round"/><g fill="none" stroke="#170c3a" stroke-width="3.5" stroke-linecap="round"><path d="M210 470 C214 510 220 540 228 566"/><path d="M630 450 C638 500 640 530 640 566"/></g><path d="M420 186 C470 230 560 300 568 400 C574 470 520 512 444 512 C360 512 296 470 294 404 C292 320 370 250 420 186 Z" fill="#2e1c70" stroke="#2e1c70" stroke-width="26" stroke-linejoin="round"/><path d="M420 186 C470 230 560 300 568 400 C574 470 520 512 444 512 C360 512 296 470 294 404 C292 320 370 250 420 186 Z" fill="none" stroke="#170c3a" stroke-width="3.5" transform="translate(0 0)" stroke-linejoin="round" style="paint-order:stroke" opacity="0"/><path d="M420 186 C470 230 560 300 568 400 C574 470 520 512 444 512 C360 512 296 470 294 404 C292 320 370 250 420 186 Z" fill="#06030d" stroke="#170c3a" stroke-width="3.5" stroke-linejoin="round"/><path d="M420 168 C478 216 576 290 584 400 C590 478 530 526 446 528" fill="none" stroke="#170c3a" stroke-width="3.5" stroke-linecap="round"/><clipPath id="openclip"><path d="M420 186 C470 230 560 300 568 400 C574 470 520 512 444 512 C360 512 296 470 294 404 C292 320 370 250 420 186 Z"/></clipPath><g clip-path="url(#openclip)"><g fill="#b892ff" filter="url(#glow)" opacity="0.95"><rect x="385.0" y="333.0" width="30.0" height="98.0" rx="15.0"/><rect x="473.5" y="329.0" width="25.0" height="98.0" rx="12.5"/></g><g fill="#f7f4ff"><rect x="385.0" y="333.0" width="30.0" height="98.0" rx="15.0"/><rect x="473.5" y="329.0" width="25.0" height="98.0" rx="12.5"/></g></g></g>
|
||||
<path d="M190 528 C320 580 500 584 650 524 C676 560 672 610 640 632 C500 672 320 666 200 622 C172 590 172 556 190 528 Z" fill="#f2801f" stroke="#170c3a" stroke-width="7" stroke-linejoin="round"/>
|
||||
<clipPath id="scclip"><path d="M190 528 C320 580 500 584 650 524 C676 560 672 610 640 632 C500 672 320 666 200 622 C172 590 172 556 190 528 Z"/></clipPath>
|
||||
<g clip-path="url(#scclip)"><path d="M180 600 C320 646 500 650 680 590 L680 700 L180 700 Z" fill="#b9520e"/><path d="M560 600 C600 588 640 570 680 540 L680 510 C640 560 600 576 560 588 Z" fill="#b9520e"/><path d="M214 548 C320 590 460 598 560 580" fill="none" stroke="#ffb15c" stroke-width="8" stroke-linecap="round"/></g>
|
||||
<g fill="none" stroke="#170c3a" stroke-width="3.5" stroke-linecap="round"><path d="M290 604 C360 630 450 634 520 620"/><path d="M240 578 C280 596 310 604 340 608"/></g>
|
||||
<path d="M590 640 C650 650 700 610 730 560 C748 530 760 490 780 450 L776 506 L806 490 L788 546 L816 556 C780 586 760 640 720 676 C680 708 620 712 580 692 Z" fill="#f2801f" stroke="#170c3a" stroke-width="7" stroke-linejoin="round"/>
|
||||
<clipPath id="tfclip"><path d="M590 640 C650 650 700 610 730 560 C748 530 760 490 780 450 L776 506 L806 490 L788 546 L816 556 C780 586 760 640 720 676 C680 708 620 712 580 692 Z"/></clipPath>
|
||||
<g clip-path="url(#tfclip)"><path d="M580 692 C620 712 680 708 720 676 C760 640 780 586 816 556 L830 600 C800 660 760 720 580 740 Z" fill="#b9520e"/><path d="M612 668 C670 670 720 620 752 540" fill="none" stroke="#b9520e" stroke-width="3.5" stroke-linecap="round"/></g></g></g>
|
||||
</defs>
|
||||
<rect width="1200" height="800" fill="#f2eee8"/>
|
||||
<g clip-path="url(#card)">
|
||||
<path d="M70 24 L790 24 L730 776 L10 776 Z" fill="#e7e1f1"/>
|
||||
<path d="M520 24 L790 24 L730 776 L440 776 Z" fill="#dcd3ee"/>
|
||||
<use href="#figure"/>
|
||||
</g>
|
||||
<path d="M70 24 L790 24 L730 776 L10 776 Z" fill="none" stroke="#4b2fa6" stroke-width="6" stroke-linejoin="miter"/>
|
||||
<path d="M10 728 L250 728 L246 776 L10 776 Z" fill="#4b2fa6"/>
|
||||
<text x="34" y="762" font-family="'Segoe UI', system-ui, Arial, sans-serif" font-size="26" font-weight="700" letter-spacing="7" fill="#f7f4ff">VOID</text>
|
||||
<text x="830" y="60" font-family="'Segoe UI', system-ui, Arial, sans-serif" font-size="30" font-weight="700" letter-spacing="6" fill="#170c3a">VOID / A</text>
|
||||
<text x="830" y="86" font-family="'Segoe UI', system-ui, Arial, sans-serif" font-size="16" letter-spacing="3" fill="#b9520e">CLASSIC HOOD</text>
|
||||
<g transform="translate(935 470) scale(1.42)"><path d="M-30 -114 C-60 -126 -84 -150 -118 -156 L-104 -142 L-124 -134 L-102 -126 L-114 -114 C-84 -112 -60 -100 -30 -98 Z" fill="#f2801f" stroke="#170c3a" stroke-width="3" stroke-linejoin="round"/>
|
||||
<ellipse cx="0" cy="4" rx="78" ry="7" fill="#d6cfe4"/>
|
||||
<ellipse cx="-20" cy="0" rx="13" ry="7" fill="#2e1c70" stroke="#170c3a" stroke-width="2.5"/>
|
||||
<ellipse cx="22" cy="0" rx="13" ry="7" fill="#2e1c70" stroke="#170c3a" stroke-width="2.5"/>
|
||||
<path d="M-44 -114 L48 -114 C64 -76 74 -36 82 -2 L68 -10 L58 4 L44 -8 L30 6 L16 -6 L2 6 L-12 -6 L-26 6 L-40 -8 L-54 4 L-68 -10 L-78 -2 C-70 -40 -62 -80 -44 -114 Z" fill="#4b2fa6" stroke="#170c3a" stroke-width="3.5" stroke-linejoin="round"/>
|
||||
<path d="M20 -100 C40 -70 54 -36 60 0 L44 -8 L34 4 C30 -40 26 -70 14 -100 Z" fill="#2e1c70"/>
|
||||
<g fill="none" stroke="#170c3a" stroke-width="1.8" stroke-linecap="round"><path d="M-10 -90 L-20 -10"/><path d="M8 -86 L12 -10"/></g>
|
||||
<path d="M-46 -104 C-60 -80 -64 -60 -62 -44 L-46 -46 C-46 -64 -42 -84 -36 -100 Z" fill="#4b2fa6" stroke="#170c3a" stroke-width="3"/>
|
||||
<path d="M48 -104 C62 -80 66 -60 64 -44 L48 -46 C48 -64 44 -84 38 -100 Z" fill="#2e1c70" stroke="#170c3a" stroke-width="3"/>
|
||||
<circle cx="-54" cy="-40" r="7" fill="#221a33" stroke="#170c3a" stroke-width="2"/>
|
||||
<circle cx="56" cy="-40" r="7" fill="#221a33" stroke="#170c3a" stroke-width="2"/>
|
||||
<path d="M-6 -246 C20 -230 44 -206 54 -176 C62 -152 66 -130 68 -108 L-62 -108 C-62 -140 -50 -180 -30 -210 C-22 -224 -14 -236 -6 -246 Z" fill="#4b2fa6" stroke="#170c3a" stroke-width="3.5" stroke-linejoin="round"/>
|
||||
<path d="M0 -244 C40 -214 66 -170 64 -110 L50 -110 C54 -170 34 -210 0 -244 Z" fill="#2e1c70"/>
|
||||
<path d="M14 -206 C24 -192 46 -176 48 -152 C50 -134 36 -124 16 -124 C-6 -124 -24 -134 -24 -152 C-24 -174 4 -192 14 -206 Z" fill="#06030d" stroke="#2e1c70" stroke-width="5"/>
|
||||
<g fill="#f7f4ff" filter="url(#glowS2)"><rect x="-4" y="-172" width="10" height="28" rx="5"/><rect x="20" y="-173" width="8" height="28" rx="4"/></g>
|
||||
<path d="M-50 -118 C-20 -104 30 -104 58 -118 C62 -108 60 -98 54 -94 C24 -84 -20 -84 -48 -94 C-54 -102 -54 -110 -50 -118 Z" fill="#f2801f" stroke="#170c3a" stroke-width="3"/>
|
||||
<path d="M30 -96 C34 -80 36 -66 34 -52 L44 -60 L50 -50 L52 -64 C48 -76 44 -86 42 -98 Z" fill="#b9520e" stroke="#170c3a" stroke-width="2.5"/></g>
|
||||
<text x="830" y="508" font-family="'Segoe UI', system-ui, Arial, sans-serif" font-size="11" letter-spacing="2" fill="#5b5470">FULL BODY 2.5 HEADS</text>
|
||||
<g filter="url(#black)"><g transform="translate(1032 100) scale(0.2)"><g clip-path="url(#card)"><use href="#figure"/></g></g></g>
|
||||
<text x="1040" y="272" font-family="'Segoe UI', system-ui, Arial, sans-serif" font-size="11" letter-spacing="2" fill="#5b5470">SILHOUETTE</text>
|
||||
<g filter="url(#black)"><g transform="translate(1059.3 294.4) scale(0.0667)"><g clip-path="url(#card)"><use href="#figure"/></g></g></g>
|
||||
<text x="1120" y="326" font-family="'Segoe UI', system-ui, Arial, sans-serif" font-size="11" letter-spacing="2" fill="#5b5470">48 PX</text>
|
||||
<text x="830" y="548" font-family="'Segoe UI', system-ui, Arial, sans-serif" font-size="11" letter-spacing="2" fill="#5b5470">HOOK</text>
|
||||
<text x="830" y="572" font-family="'Segoe UI', system-ui, Arial, sans-serif" font-size="15" fill="#170c3a">Two lamp-white eye slits in a hood of</text>
|
||||
<text x="830" y="592" font-family="'Segoe UI', system-ui, Arial, sans-serif" font-size="15" fill="#170c3a">nothing; the orange scarf streams across the</text>
|
||||
<text x="830" y="612" font-family="'Segoe UI', system-ui, Arial, sans-serif" font-size="15" fill="#170c3a">frame.</text>
|
||||
<text x="830" y="640" font-family="'Segoe UI', system-ui, Arial, sans-serif" font-size="11" letter-spacing="2" fill="#5b5470">PALETTE</text>
|
||||
<rect x="830" y="656" width="40" height="40" rx="6" fill="#4b2fa6" stroke="#170c3a" stroke-width="2"/>
|
||||
<text x="878" y="672" font-family="Consolas, monospace" font-size="12" fill="#170c3a">#4b2fa6</text>
|
||||
<text x="878" y="689" font-family="'Segoe UI', system-ui, Arial, sans-serif" font-size="11" fill="#5b5470">robe, key</text>
|
||||
<rect x="950" y="656" width="40" height="40" rx="6" fill="#170c3a" stroke="#170c3a" stroke-width="2"/>
|
||||
<text x="998" y="672" font-family="Consolas, monospace" font-size="12" fill="#170c3a">#170c3a</text>
|
||||
<text x="998" y="689" font-family="'Segoe UI', system-ui, Arial, sans-serif" font-size="11" fill="#5b5470">line / deep</text>
|
||||
<rect x="1070" y="656" width="40" height="40" rx="6" fill="#06030d" stroke="#170c3a" stroke-width="2"/>
|
||||
<text x="1118" y="672" font-family="Consolas, monospace" font-size="12" fill="#170c3a">#06030d</text>
|
||||
<text x="1118" y="689" font-family="'Segoe UI', system-ui, Arial, sans-serif" font-size="11" fill="#5b5470">void face</text>
|
||||
<rect x="830" y="722" width="40" height="40" rx="6" fill="#f7f4ff" stroke="#170c3a" stroke-width="2"/>
|
||||
<text x="878" y="738" font-family="Consolas, monospace" font-size="12" fill="#170c3a">#f7f4ff</text>
|
||||
<text x="878" y="755" font-family="'Segoe UI', system-ui, Arial, sans-serif" font-size="11" fill="#5b5470">eye light</text>
|
||||
<rect x="950" y="722" width="40" height="40" rx="6" fill="#f2801f" stroke="#170c3a" stroke-width="2"/>
|
||||
<text x="998" y="738" font-family="Consolas, monospace" font-size="12" fill="#170c3a">#f2801f</text>
|
||||
<text x="998" y="755" font-family="'Segoe UI', system-ui, Arial, sans-serif" font-size="11" fill="#5b5470">scarf orange</text>
|
||||
<rect x="1070" y="722" width="40" height="40" rx="6" fill="#b892ff" stroke="#170c3a" stroke-width="2"/>
|
||||
<text x="1118" y="738" font-family="Consolas, monospace" font-size="12" fill="#170c3a">#b892ff</text>
|
||||
<text x="1118" y="755" font-family="'Segoe UI', system-ui, Arial, sans-serif" font-size="11" fill="#5b5470">glow violet</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 188 KiB |