Skip to content

Instantly share code, notes, and snippets.

@ndelangen
Created July 22, 2026 22:40
Show Gist options
  • Select an option

  • Save ndelangen/df0ead23408334488744ae30e1fa8186 to your computer and use it in GitHub Desktop.

Select an option

Save ndelangen/df0ead23408334488744ae30e1fa8186 to your computer and use it in GitHub Desktop.
Dune Zone faction authoring composition prototypes

Faction authoring composition prototypes

Three structurally different concepts compared for Dune Zone's shared Create/Edit faction experience:

  • tabbed-studio.svg — a familiar domain-tabbed studio with a persistent artifact rail.
  • artifact-canvas.svg — an artifact-first canvas where selecting output elements reveals their responsible fields.
  • facet-chapters.svg — one continuous document of domain chapters with local artifact previews.

Selected direction

Facet Chapters was selected as the foundation.

The editor becomes one continuously scrolling document organized as:

  1. Identity & Appearance
  2. Leaders
  3. Alliance
  4. Forces & Worlds
  5. Rules & Advantages

Desktop and tablet use a compact chapter map plus local previews beside the fields that affect them. Mobile removes the chapter rail and artifact previews and renders the same controls vertically in chapter order. A sticky route toolbar owns explicit save and publish state. Ordered collections retain pointer and keyboard reordering. Every FactionInputSchema field is editable except the intentional extras[] exception, whose existing value is preserved unchanged.

The static mockups are discussion artifacts, not implementation code.

Display the source blob
Display the rendered blob
Raw
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="1100" viewBox="0 0 1600 1100" role="img" aria-labelledby="title desc">
<title id="title">Artifact-first faction studio concept</title>
<desc id="desc">A desktop faction editor mockup with an artifact rail, interactive rendered canvas, contextual field inspector, and a visible background composition pipeline.</desc>
<defs>
<linearGradient id="pageBg" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0" stop-color="#f7f2e8"/>
<stop offset="1" stop-color="#eee4d3"/>
</linearGradient>
<linearGradient id="artifactBg" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0" stop-color="#12302d"/>
<stop offset="1" stop-color="#2a6760"/>
</linearGradient>
<linearGradient id="patternColor" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0" stop-color="#e7b44f"/>
<stop offset="1" stop-color="#bd6b32"/>
</linearGradient>
<linearGradient id="resultBg" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0" stop-color="#143c36"/>
<stop offset="1" stop-color="#2e7167"/>
</linearGradient>
<pattern id="waves" width="30" height="24" patternUnits="userSpaceOnUse">
<path d="M-8 10 Q0 2 8 10 T24 10 T40 10" fill="none" stroke="#f1c463" stroke-width="4" opacity=".75"/>
<path d="M-8 22 Q0 14 8 22 T24 22 T40 22" fill="none" stroke="#d88b3f" stroke-width="3" opacity=".7"/>
</pattern>
<pattern id="wavesMono" width="24" height="18" patternUnits="userSpaceOnUse">
<path d="M-6 8 Q0 2 6 8 T18 8 T30 8" fill="none" stroke="#584b39" stroke-width="3"/>
<path d="M-6 17 Q0 11 6 17 T18 17 T30 17" fill="none" stroke="#584b39" stroke-width="2"/>
</pattern>
<pattern id="grid" width="18" height="18" patternUnits="userSpaceOnUse">
<path d="M18 0H0V18" fill="none" stroke="#dfd4c4" stroke-width="1"/>
</pattern>
<filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
<feDropShadow dx="0" dy="3" stdDeviation="8" flood-color="#3a2e20" flood-opacity=".14"/>
</filter>
<filter id="smallShadow" x="-20%" y="-20%" width="140%" height="140%">
<feDropShadow dx="0" dy="2" stdDeviation="3" flood-color="#2f2518" flood-opacity=".18"/>
</filter>
<marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse">
<path d="M0 0L10 5L0 10Z" fill="#9a8060"/>
</marker>
<clipPath id="tokenClip"><circle cx="703" cy="490" r="139"/></clipPath>
<style>
text { font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #2f2923; }
.eyebrow { font-size: 11px; font-weight: 800; letter-spacing: 1.4px; text-transform: uppercase; fill: #846844; }
.h1 { font-size: 25px; font-weight: 760; }
.h2 { font-size: 16px; font-weight: 740; }
.label { font-size: 12px; font-weight: 700; }
.body { font-size: 12px; fill: #5c5349; }
.small { font-size: 10.5px; fill: #74695d; }
.tiny { font-size: 9px; fill: #776a5e; }
.panel { fill: #fffdf9; stroke: #d9cdbd; stroke-width: 1; }
.field { fill: #fff; stroke: #bba98f; stroke-width: 1; }
.selected { fill: #f8edd5; stroke: #b77d26; stroke-width: 1.5; }
.chip { fill: #f2eadf; stroke: #d5c6b3; stroke-width: 1; }
</style>
</defs>
<rect width="1600" height="1100" fill="url(#pageBg)"/>
<!-- Persistent application chrome -->
<rect x="0" y="0" width="1600" height="48" fill="#25211d"/>
<circle cx="27" cy="24" r="12" fill="#d5a449"/>
<path d="M20 27L27 15L34 27L27 23Z" fill="#25211d"/>
<text x="51" y="29" font-size="14" font-weight="780" fill="#fffaf0">DUNE ZONE</text>
<text x="1250" y="29" font-size="12" fill="#d9cdbd">Catalogue</text>
<text x="1335" y="29" font-size="12" fill="#d9cdbd">Rulesets</text>
<circle cx="1450" cy="24" r="13" fill="#725d44"/>
<text x="1472" y="29" font-size="12" fill="#fffaf0">Niels</text>
<!-- Route header -->
<rect x="0" y="48" width="1600" height="92" fill="#f1e4cf"/>
<text x="32" y="75" class="eyebrow">Faction workshop</text>
<text x="32" y="107" class="h1">Edit Fremen</text>
<text x="32" y="128" class="body">Build the faction by working directly from the artifacts players will see.</text>
<circle cx="1478" cy="94" r="30" fill="#20564f" stroke="#fff" stroke-width="4" filter="url(#smallShadow)"/>
<path d="M1454 85Q1462 77 1470 85T1486 85T1502 85M1454 102Q1462 94 1470 102T1486 102T1502 102" fill="none" stroke="#d99a34" stroke-width="3" opacity=".8"/>
<path d="M1461 99Q1478 72 1495 99Q1480 93 1461 99Z" fill="#fff2ca"/>
<!-- Sticky route toolbar -->
<g filter="url(#smallShadow)">
<rect x="0" y="140" width="1600" height="62" fill="#fffdf9" stroke="#d7c9b5"/>
</g>
<rect x="32" y="155" width="117" height="32" rx="16" fill="#f8edd5" stroke="#e3be79"/>
<circle cx="49" cy="171" r="4" fill="#c88722"/>
<text x="61" y="175" class="label">Unsaved changes</text>
<text x="166" y="175" class="body">Last published 22 Jul 2026, 18:42</text>
<rect x="1224" y="153" width="136" height="36" rx="6" fill="#fff" stroke="#bba98f"/>
<path d="M1245 171h12m-6-6v12" stroke="#594c3e" stroke-width="1.5"/>
<text x="1265" y="176" class="label">View published</text>
<rect x="1372" y="153" width="196" height="36" rx="6" fill="#2f6e5f"/>
<path d="M1393 171l6 6 11-13" fill="none" stroke="#fff" stroke-width="2"/>
<text x="1420" y="176" font-size="12" font-weight="750" fill="#fff">Save &amp; schedule publish</text>
<!-- Main studio frame -->
<rect x="24" y="222" width="1552" height="840" rx="12" fill="#f9f5ed" stroke="#d3c6b4"/>
<!-- Artifact rail -->
<rect x="24" y="222" width="238" height="840" rx="12" class="panel"/>
<text x="44" y="254" class="eyebrow">Start from an output</text>
<text x="44" y="280" class="h2">Artifact library</text>
<text x="44" y="300" class="small">Choose what you want to shape.</text>
<g>
<rect x="38" y="320" width="210" height="70" rx="8" class="selected"/>
<circle cx="71" cy="355" r="22" fill="#20564f"/>
<path d="M52 349Q58 343 64 349T76 349T88 349M52 362Q58 356 64 362T76 362T88 362" fill="none" stroke="#d99a34" stroke-width="2.5" opacity=".8"/>
<path d="M61 360Q71 341 81 360Q72 355 61 360Z" fill="#fff0bd"/>
<text x="104" y="350" class="label">Faction token</text>
<text x="104" y="370" class="small">4 editable elements</text>
</g>
<g>
<rect x="38" y="400" width="210" height="58" rx="8" fill="#fff" stroke="#ded4c6"/>
<rect x="51" y="412" width="37" height="34" rx="5" fill="#f3eadb" stroke="#cbbca7"/>
<path d="M59 438V419h21v19M64 424h11M64 429h11" stroke="#756552" fill="none"/>
<text x="104" y="426" class="label">Faction sheet</text>
<text x="104" y="444" class="small">2 pages · 31 fields</text>
</g>
<g>
<rect x="38" y="468" width="210" height="58" rx="8" fill="#fff" stroke="#ded4c6"/>
<path d="M69 480l17 8-3 20-14 11-14-11-3-20Z" fill="#315e56"/>
<circle cx="69" cy="498" r="8" fill="#efc15d"/>
<text x="104" y="494" class="label">Faction shield</text>
<text x="104" y="512" class="small">Leader, logo, background</text>
</g>
<g>
<rect x="38" y="536" width="210" height="58" rx="8" fill="#fff" stroke="#ded4c6"/>
<rect x="51" y="547" width="37" height="36" rx="5" fill="#244c46"/>
<path d="M56 576l12-22 14 22" fill="none" stroke="#efbd56" stroke-width="2"/>
<text x="104" y="562" class="label">Alliance card</text>
<text x="104" y="580" class="small">Ability, troop, decals</text>
</g>
<g>
<rect x="38" y="604" width="210" height="58" rx="8" fill="#fff" stroke="#ded4c6"/>
<circle cx="63" cy="633" r="15" fill="#d2a64d"/>
<circle cx="78" cy="633" r="15" fill="#315f56" opacity=".9"/>
<text x="104" y="630" class="label">Leaders &amp; traitors</text>
<text x="104" y="648" class="small">Drag to order · 5 items</text>
</g>
<g>
<rect x="38" y="672" width="210" height="58" rx="8" fill="#fff" stroke="#ded4c6"/>
<circle cx="63" cy="701" r="14" fill="#315f56"/>
<circle cx="79" cy="701" r="14" fill="#bd6b32"/>
<text x="104" y="698" class="label">Troop tokens</text>
<text x="104" y="716" class="small">Fronts, backs, counts</text>
</g>
<g>
<rect x="38" y="740" width="210" height="58" rx="8" fill="#fff" stroke="#ded4c6"/>
<circle cx="69" cy="769" r="18" fill="#eee2d0" stroke="#baa78d"/>
<path d="M61 763h16M61 769h13M61 775h10" stroke="#796a58"/>
<text x="104" y="766" class="label">Rules &amp; setup</text>
<text x="104" y="784" class="small">Text, spice, advantages</text>
</g>
<g>
<rect x="38" y="808" width="210" height="58" rx="8" fill="#fff" stroke="#ded4c6"/>
<circle cx="69" cy="837" r="18" fill="#e4d9cb"/>
<path d="M60 837h18M69 828v18" stroke="#6d5c49"/>
<text x="104" y="834" class="label">Faction data</text>
<text x="104" y="852" class="small">Planets, TTS colors, metadata</text>
</g>
<rect x="38" y="893" width="210" height="72" rx="8" fill="#f5f0e8" stroke="#d8ccbb"/>
<text x="51" y="916" class="label">Schema coverage</text>
<rect x="51" y="928" width="184" height="6" rx="3" fill="#ddd1c1"/>
<rect x="51" y="928" width="184" height="6" rx="3" fill="#397d6b"/>
<text x="51" y="952" class="small">54 / 54 editable paths covered</text>
<text x="51" y="969" class="tiny">extras preserved · intentionally hidden</text>
<!-- Canvas -->
<rect x="278" y="222" width="850" height="840" fill="#f4eee4"/>
<rect x="296" y="240" width="814" height="53" rx="8" fill="#fffdf9" stroke="#d9cdbd"/>
<text x="316" y="261" class="small">FACTION TOKEN</text>
<text x="316" y="281" class="h2">Click an element to edit what creates it</text>
<rect x="865" y="250" width="108" height="31" rx="15" class="chip"/>
<circle cx="883" cy="266" r="4" fill="#397d6b"/>
<text x="894" y="270" class="small">Live · unsaved</text>
<rect x="983" y="250" width="111" height="31" rx="6" fill="#fff" stroke="#c8b9a5"/>
<text x="1001" y="270" class="small">Fit to canvas</text>
<rect x="296" y="309" width="814" height="385" rx="10" fill="url(#grid)" stroke="#d8ccbb"/>
<text x="316" y="334" class="eyebrow">Rendered artifact · true output</text>
<circle cx="703" cy="499" r="151" fill="#132e2a" opacity=".12"/>
<circle cx="703" cy="490" r="145" fill="#20564f" stroke="#fff" stroke-width="9" filter="url(#shadow)"/>
<g clip-path="url(#tokenClip)" fill="none" stroke-linecap="round" opacity=".9">
<path d="M530 384Q548 366 566 384T602 384T638 384T674 384T710 384T746 384T782 384T818 384T854 384" stroke="#e4ae46" stroke-width="11"/>
<path d="M530 421Q548 403 566 421T602 421T638 421T674 421T710 421T746 421T782 421T818 421T854 421" stroke="#c87535" stroke-width="8"/>
<path d="M530 458Q548 440 566 458T602 458T638 458T674 458T710 458T746 458T782 458T818 458T854 458" stroke="#e4ae46" stroke-width="11"/>
<path d="M530 495Q548 477 566 495T602 495T638 495T674 495T710 495T746 495T782 495T818 495T854 495" stroke="#c87535" stroke-width="8"/>
<path d="M530 532Q548 514 566 532T602 532T638 532T674 532T710 532T746 532T782 532T818 532T854 532" stroke="#e4ae46" stroke-width="11"/>
<path d="M530 569Q548 551 566 569T602 569T638 569T674 569T710 569T746 569T782 569T818 569T854 569" stroke="#c87535" stroke-width="8"/>
<path d="M530 606Q548 588 566 606T602 606T638 606T674 606T710 606T746 606T782 606T818 606T854 606" stroke="#e4ae46" stroke-width="11"/>
</g>
<path d="M621 540Q703 365 785 540Q706 497 621 540Z" fill="#fff0be" stroke="#253e38" stroke-width="5"/>
<circle cx="703" cy="489" r="150" fill="none" stroke="#d99a34" stroke-width="3" stroke-dasharray="7 6"/>
<rect x="851" y="397" width="198" height="62" rx="7" fill="#fffdf9" stroke="#c68a2e" filter="url(#smallShadow)"/>
<text x="866" y="420" class="label">Background selected</text>
<text x="866" y="439" class="small">Click to inspect its pipeline</text>
<path d="M851 444L812 458" stroke="#c68a2e" stroke-width="1.5" marker-end="url(#arrow)"/>
<rect x="343" y="600" width="193" height="42" rx="7" fill="#fffdf9" stroke="#c8b9a5"/>
<text x="357" y="618" class="label">Logo</text>
<text x="357" y="634" class="small">Used on 6 artifacts</text>
<path d="M536 620L612 548" stroke="#9a8060" marker-end="url(#arrow)"/>
<rect x="925" y="638" width="151" height="31" rx="15" fill="#fff" stroke="#c8b9a5"/>
<text x="941" y="658" class="small">Switch artifact ⇧ A</text>
<!-- Background pipeline -->
<rect x="296" y="711" width="814" height="333" rx="10" class="panel"/>
<text x="316" y="739" class="eyebrow">How this element is made</text>
<text x="316" y="765" class="h2">Background pipeline</text>
<text x="316" y="785" class="small">Every stage is editable; hover or focus a stage to isolate its effect.</text>
<!-- stage 1 -->
<rect x="316" y="808" width="132" height="145" rx="8" fill="#faf7f1" stroke="#d8ccbb"/>
<text x="330" y="829" class="tiny">1 · PATTERN</text>
<rect x="330" y="840" width="104" height="65" rx="5" fill="#eee5d8" stroke="#bbaa94"/>
<path d="M333 855Q343 845 353 855T373 855T393 855T413 855T433 855M333 875Q343 865 353 875T373 875T393 875T413 875T433 875M333 895Q343 885 353 895T373 895T393 895T413 895T433 895" fill="none" stroke="#746553" stroke-width="3"/>
<text x="330" y="925" class="label">Sand waves</text>
<text x="330" y="942" class="small">Change texture</text>
<path d="M452 878H470" stroke="#9a8060" marker-end="url(#arrow)"/>
<!-- stage 2 -->
<rect x="474" y="808" width="132" height="145" rx="8" class="selected"/>
<text x="488" y="829" class="tiny">2 · TREATMENT</text>
<rect x="488" y="840" width="104" height="39" rx="5" fill="#41382e"/>
<path d="M494 853Q502 846 510 853T526 853T542 853T558 853T574 853T590 853M494 869Q502 862 510 869T526 869T542 869T558 869T574 869T590 869" fill="none" stroke="#f3e6cf" stroke-width="3" opacity=".9"/>
<rect x="488" y="891" width="36" height="20" rx="10" fill="#397d6b"/>
<circle cx="514" cy="901" r="7" fill="#fff"/>
<text x="530" y="905" class="small">Invert</text>
<text x="488" y="927" class="small">Definition 68%</text>
<rect x="488" y="937" width="100" height="4" rx="2" fill="#d6c7b4"/>
<rect x="488" y="937" width="68" height="4" rx="2" fill="#b47825"/>
<path d="M610 878H628" stroke="#9a8060" marker-end="url(#arrow)"/>
<!-- stage 3 -->
<rect x="632" y="808" width="132" height="145" rx="8" fill="#faf7f1" stroke="#d8ccbb"/>
<text x="646" y="829" class="tiny">3 · BASE COLOR</text>
<rect x="646" y="840" width="52" height="65" rx="5" fill="#143c36"/>
<rect x="698" y="840" width="52" height="65" rx="5" fill="#2e7167"/>
<text x="646" y="925" class="label">Teal gradient</text>
<text x="646" y="942" class="small">2 stops · 135°</text>
<path d="M768 878H786" stroke="#9a8060" marker-end="url(#arrow)"/>
<!-- stage 4 -->
<rect x="790" y="808" width="132" height="145" rx="8" fill="#faf7f1" stroke="#d8ccbb"/>
<text x="804" y="829" class="tiny">4 · PATTERN COLOR</text>
<rect x="804" y="840" width="52" height="65" rx="5" fill="#e7b44f"/>
<rect x="856" y="840" width="52" height="65" rx="5" fill="#bd6b32"/>
<text x="804" y="925" class="label">Spice gradient</text>
<text x="804" y="942" class="small">Influence 74%</text>
<path d="M926 878H944" stroke="#9a8060" marker-end="url(#arrow)"/>
<!-- stage 5 -->
<rect x="948" y="808" width="142" height="145" rx="8" fill="#eff7f4" stroke="#397d6b" stroke-width="1.5"/>
<text x="962" y="829" class="tiny">5 · COMPOSITE</text>
<rect x="962" y="840" width="114" height="65" rx="5" fill="#20564f"/>
<path d="M964 853Q974 843 984 853T1004 853T1024 853T1044 853T1064 853T1084 853M964 874Q974 864 984 874T1004 874T1024 874T1044 874T1064 874T1084 874M964 895Q974 885 984 895T1004 895T1024 895T1044 895T1064 895T1084 895" fill="none" stroke="#df9b3d" stroke-width="5"/>
<text x="962" y="925" class="label">Result</text>
<text x="962" y="942" class="small">Applied to 23 outputs</text>
<rect x="316" y="971" width="774" height="52" rx="7" fill="#f6f0e6" stroke="#d8ccbb"/>
<text x="330" y="992" class="label">Also visible on</text>
<rect x="330" y="1001" width="63" height="16" rx="8" class="chip"/>
<text x="342" y="1012" class="tiny">Shield</text>
<rect x="399" y="1001" width="89" height="16" rx="8" class="chip"/>
<text x="410" y="1012" class="tiny">Alliance card</text>
<rect x="494" y="1001" width="74" height="16" rx="8" class="chip"/>
<text x="505" y="1012" class="tiny">Leaders</text>
<rect x="574" y="1001" width="64" height="16" rx="8" class="chip"/>
<text x="585" y="1012" class="tiny">Troops</text>
<text x="848" y="1006" class="small">Preview all affected artifacts →</text>
<!-- Contextual inspector -->
<rect x="1128" y="222" width="448" height="840" rx="12" class="panel"/>
<rect x="1128" y="222" width="448" height="77" rx="12" fill="#fffaf1" stroke="#d9cdbd"/>
<text x="1150" y="248" class="eyebrow">Responsible facet</text>
<text x="1150" y="274" class="h2">Identity &amp; Appearance / Background</text>
<text x="1150" y="291" class="small">Changes here update every linked artifact live.</text>
<text x="1150" y="330" class="label">Pattern</text>
<rect x="1150" y="341" width="404" height="42" rx="6" class="field"/>
<rect x="1161" y="351" width="26" height="22" rx="3" fill="#eee5d8"/>
<path d="M1162 358Q1166 354 1170 358T1178 358T1186 358M1162 367Q1166 363 1170 367T1178 367T1186 367" fill="none" stroke="#746553" stroke-width="2"/>
<text x="1198" y="367" class="body">/background/sand-waves.svg</text>
<path d="M1526 357l7 7 7-7" fill="none" stroke="#796956"/>
<rect x="1150" y="398" width="198" height="58" rx="7" fill="#f7f2ea" stroke="#d8ccbb"/>
<text x="1163" y="420" class="label">Invert pattern</text>
<text x="1163" y="440" class="small">Light becomes dark</text>
<rect x="1300" y="412" width="35" height="20" rx="10" fill="#397d6b"/>
<circle cx="1324" cy="422" r="7" fill="#fff"/>
<rect x="1358" y="398" width="196" height="58" rx="7" fill="#f7f2ea" stroke="#d8ccbb"/>
<text x="1371" y="420" class="label">Pattern scale</text>
<text x="1371" y="441" class="small">100%</text>
<path d="M1430 436h106" stroke="#d0c0aa" stroke-width="4" stroke-linecap="round"/>
<circle cx="1509" cy="436" r="6" fill="#b77d26"/>
<text x="1150" y="489" class="label">Treatment</text>
<text x="1515" y="489" class="small">Reset</text>
<rect x="1150" y="501" width="404" height="83" rx="7" fill="#f7f2ea" stroke="#d8ccbb"/>
<text x="1163" y="524" class="body">Definition</text>
<text x="1518" y="524" class="body">68%</text>
<path d="M1164 539h370" stroke="#d0c0aa" stroke-width="5" stroke-linecap="round"/>
<path d="M1164 539h251" stroke="#b77d26" stroke-width="5" stroke-linecap="round"/>
<circle cx="1415" cy="539" r="7" fill="#fff" stroke="#b77d26" stroke-width="2"/>
<text x="1163" y="568" class="tiny">SOFT</text>
<text x="1508" y="568" class="tiny">CRISP</text>
<text x="1150" y="618" class="label">Base color</text>
<rect x="1150" y="630" width="404" height="72" rx="7" class="field"/>
<rect x="1163" y="642" width="42" height="48" rx="5" fill="#143c36"/>
<rect x="1205" y="642" width="42" height="48" rx="5" fill="#2e7167"/>
<text x="1261" y="657" class="label">Linear gradient</text>
<text x="1261" y="676" class="small">#143C36 → #2E7167 · 135°</text>
<text x="1518" y="672" class="body">Edit</text>
<text x="1150" y="737" class="label">Pattern color</text>
<rect x="1150" y="749" width="404" height="72" rx="7" class="field"/>
<rect x="1163" y="761" width="42" height="48" rx="5" fill="#e7b44f"/>
<rect x="1205" y="761" width="42" height="48" rx="5" fill="#bd6b32"/>
<text x="1261" y="776" class="label">Linear gradient</text>
<text x="1261" y="795" class="small">#E7B44F → #BD6B32 · 135°</text>
<text x="1518" y="791" class="body">Edit</text>
<text x="1150" y="856" class="label">Pattern influence</text>
<text x="1518" y="856" class="body">74%</text>
<path d="M1150 874h404" stroke="#d0c0aa" stroke-width="5" stroke-linecap="round"/>
<path d="M1150 874h299" stroke="#b77d26" stroke-width="5" stroke-linecap="round"/>
<circle cx="1449" cy="874" r="7" fill="#fff" stroke="#b77d26" stroke-width="2"/>
<text x="1150" y="897" class="tiny">SUBTLE</text>
<text x="1519" y="897" class="tiny">BOLD</text>
<rect x="1150" y="927" width="404" height="55" rx="7" fill="#edf6f2" stroke="#9bc2b7"/>
<circle cx="1172" cy="954" r="11" fill="#397d6b"/>
<path d="M1167 954l4 4 7-9" stroke="#fff" stroke-width="1.7" fill="none"/>
<text x="1192" y="949" class="label">Visible everywhere this background is used</text>
<text x="1192" y="968" class="small">Token, shield, leaders, troops, alliance card and catalogue</text>
<rect x="1150" y="995" width="192" height="38" rx="6" fill="#fff" stroke="#bba98f"/>
<text x="1170" y="1019" class="label">Try a background preset</text>
<rect x="1354" y="995" width="200" height="38" rx="6" fill="#fff" stroke="#bba98f"/>
<text x="1374" y="1019" class="label">Open all appearance fields</text>
<!-- Single-scroll/mobile note -->
<rect x="24" y="1070" width="1552" height="22" rx="4" fill="#2f2923"/>
<text x="40" y="1085" font-size="10.5" fill="#fff7e8">Responsive contract: one page scrollbar on desktop · no nested preview scroll · mobile removes artifact previews and renders all editable groups vertically with drag handles preserved</text>
</svg>
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment