@polycode-projects/the-mechanical-code-talker 4.0.0 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +176 -8
- package/corpus/reference/index.json.gz +0 -0
- package/corpus/reference/manifest.json +8 -8
- package/corpus/reference/shards/ref-00.jsonl.gz +0 -0
- package/corpus/sprites/src/sprite-facts.jsonl +34 -0
- package/corpus/worlds/index.json.gz +0 -0
- package/corpus/worlds/manifest.json +49 -9
- package/corpus/worlds/shards/greyvale-museum.jsonl.gz +0 -0
- package/corpus/worlds/shards/lantern-cottage.jsonl.gz +0 -0
- package/corpus/worlds/shards/mud-hollow.jsonl.gz +0 -0
- package/corpus/worlds/shards/mud-warren.jsonl.gz +0 -0
- package/corpus/worlds/shards/spider-fly.jsonl.gz +0 -0
- package/corpus/worlds/src/greyvale-museum.jsonl +136 -0
- package/corpus/worlds/src/lantern-cottage.jsonl +60 -0
- package/corpus/worlds/src/mud-hollow.jsonl +82 -0
- package/corpus/worlds/src/mud-warren.jsonl +124 -0
- package/corpus/worlds/src/spider-fly.jsonl +1 -1
- package/data/sprites/animal-icon.toml +11 -5
- package/data/sprites/book-icon.toml +9 -5
- package/data/sprites/cabinet-icon.toml +10 -5
- package/data/sprites/cellar-icon.toml +16 -6
- package/data/sprites/container-icon.toml +7 -3
- package/data/sprites/desk-icon.toml +8 -5
- package/data/sprites/dog-icon.toml +8 -5
- package/data/sprites/dog-with-colour-icon.toml +13 -12
- package/data/sprites/drawing-room-icon.toml +14 -5
- package/data/sprites/egg-icon.toml +6 -3
- package/data/sprites/fly-icon.toml +10 -5
- package/data/sprites/furniture-icon.toml +5 -3
- package/data/sprites/garden-icon.toml +10 -3
- package/data/sprites/key-icon.toml +3 -1
- package/data/sprites/kitchen-icon.toml +15 -6
- package/data/sprites/lamp-icon.toml +9 -4
- package/data/sprites/letter-icon.toml +7 -4
- package/data/sprites/library-icon.toml +14 -3
- package/data/sprites/pan-icon.toml +7 -3
- package/data/sprites/person-icon.toml +6 -2
- package/data/sprites/poodle-icon.toml +1 -1
- package/data/sprites/portable-icon.toml +6 -4
- package/data/sprites/portrait-icon.toml +7 -4
- package/data/sprites/room-icon.toml +11 -2
- package/data/sprites/spider-icon.toml +9 -3
- package/data/sprites/study-icon.toml +10 -2
- package/package.json +5 -4
- package/src/domain/grammar/ace.mjs +40 -4
- package/src/domain/grammar/lexicon-core.json +2 -1
- package/src/domain/grammar/lexicon.mjs +18 -0
- package/src/domain/reference-pack.mjs +31 -7
- package/src/domain/spider-fly-world.mjs +1 -1
- package/src/domain/sprite-templates.mjs +8 -6
- package/src/services/adventure-viz.mjs +130 -47
- package/src/services/adventure.mjs +440 -367
- package/src/services/chat-page-viz.mjs +37 -9
- package/src/services/chat.mjs +99 -18
- package/src/services/code-explorer-viz.mjs +52 -14
- package/src/services/extract-facts.mjs +4 -7
- package/src/services/ingest-viz.mjs +54 -26
- package/src/services/ledger-viz.mjs +105 -56
- package/src/services/memory-panel-viz.mjs +24 -0
- package/src/services/mud-viz.mjs +940 -21
- package/src/services/plan-viz.mjs +119 -61
- package/src/services/research-viz.mjs +151 -57
- package/src/services/spider-fly-turn.mjs +1 -1
- package/src/services/spider-fly-viz.mjs +67 -43
- package/src/services/sprite-catalog-viz.mjs +175 -51
- package/src/services/viz-theme.mjs +15 -0
- package/src/surfaces/web/memory-ask-browser.bundle.js +107 -107
- package/src/surfaces/web/mud-browser-entry.mjs +44 -2
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
# cabinet — Ashcombe Hall's own locked cabinet (a container): a two-door
|
|
2
|
-
# wardrobe silhouette, the gap between the doors reading as the seam
|
|
3
|
-
#
|
|
2
|
+
# wardrobe silhouette, the gap between the doors reading as the seam. Each
|
|
3
|
+
# door carries a recessed raised-panel outline, the classic wardrobe-door
|
|
4
|
+
# cue, plus a cornice band above and a plinth below so it reads as a
|
|
5
|
+
# standing piece of furniture rather than a wall panel.
|
|
4
6
|
classes = ["cabinet"]
|
|
5
7
|
svg = """
|
|
6
8
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
7
9
|
<rect x="4.5" y="2.5" width="7.2" height="19" rx="1" fill="currentColor"/>
|
|
8
10
|
<rect x="12.3" y="2.5" width="7.2" height="19" rx="1" fill="currentColor"/>
|
|
9
|
-
<rect x="4.5" y="2.5" width="15" height="1.
|
|
10
|
-
<
|
|
11
|
-
<
|
|
11
|
+
<rect x="4.5" y="2.5" width="15" height="1.6" fill="color-mix(in srgb, currentColor 70%, black)"/>
|
|
12
|
+
<rect x="4.5" y="20.1" width="15" height="1.4" fill="color-mix(in srgb, currentColor 70%, black)"/>
|
|
13
|
+
<rect x="6" y="5.4" width="4.2" height="13.4" rx="0.4" fill="none" stroke="color-mix(in srgb, currentColor 55%, black)" stroke-width="0.6"/>
|
|
14
|
+
<rect x="13.8" y="5.4" width="4.2" height="13.4" rx="0.4" fill="none" stroke="color-mix(in srgb, currentColor 55%, black)" stroke-width="0.6"/>
|
|
15
|
+
<circle cx="10.6" cy="12" r="1" fill="color-mix(in srgb, currentColor 65%, black)"/>
|
|
16
|
+
<circle cx="13.4" cy="12" r="1" fill="color-mix(in srgb, currentColor 65%, black)"/>
|
|
12
17
|
</svg>
|
|
13
18
|
"""
|
|
@@ -1,12 +1,22 @@
|
|
|
1
|
-
# cellar — an underground space: a room box with a stair stepping down
|
|
2
|
-
# stone coursing, so the room-kind icon reads as
|
|
3
|
-
# plain room, matching the underground border.
|
|
1
|
+
# cellar — an underground space: a room box with a stair stepping down into
|
|
2
|
+
# it and stone coursing on the back wall, so the room-kind icon reads as
|
|
3
|
+
# below ground rather than a plain room, matching the underground border.
|
|
4
|
+
# The wash is a fixed white/black tint rather than currentColor-mixed (the
|
|
5
|
+
# same reason room.toml's own wash is fixed): a tint built from currentColor
|
|
6
|
+
# reverses direction between a light and a dark theme, a plain white/black
|
|
7
|
+
# one never does.
|
|
4
8
|
classes = ["cellar"]
|
|
5
9
|
svg = """
|
|
6
10
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
7
|
-
<
|
|
11
|
+
<defs>
|
|
12
|
+
<linearGradient id="cellar-wash" x1="0" y1="0" x2="0.4" y2="1">
|
|
13
|
+
<stop offset="0%" stop-color="#ffffff" stop-opacity="0.06"/>
|
|
14
|
+
<stop offset="100%" stop-color="#000000" stop-opacity="0.22"/>
|
|
15
|
+
</linearGradient>
|
|
16
|
+
</defs>
|
|
17
|
+
<rect x="3" y="3" width="18" height="18" rx="1" fill="url(#cellar-wash)"/>
|
|
8
18
|
<rect x="3" y="3" width="18" height="18" rx="1" fill="none" stroke="currentColor" stroke-width="1.6"/>
|
|
9
|
-
<path d="
|
|
10
|
-
<path d="
|
|
19
|
+
<path d="M8 3 V21 M14 3 V21" stroke="currentColor" stroke-width="0.4" opacity="0.25"/>
|
|
20
|
+
<path d="M6 7.5 H10 V10.5 H14 V13.5 H18 V17.5 H6 Z" fill="currentColor"/>
|
|
11
21
|
</svg>
|
|
12
22
|
"""
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
# container — the generic fallback for any container with no sprite of
|
|
2
2
|
# its own (see cabinet/portrait for Ashcombe Hall's own two): a solid
|
|
3
|
-
# chest silhouette with a carved lid-seam and a latch
|
|
3
|
+
# chest silhouette with a carved lid-seam and a latch plate with its own
|
|
4
|
+
# keyhole cut into it, so "container" reads as a locked chest rather than
|
|
5
|
+
# a plain crate.
|
|
4
6
|
classes = ["container"]
|
|
5
7
|
svg = """
|
|
6
8
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
7
9
|
<path d="M3 10 L5 5 H19 L21 10 Z" fill="currentColor"/>
|
|
8
10
|
<rect x="3" y="10" width="18" height="10" rx="1.2" fill="currentColor"/>
|
|
9
|
-
<rect x="3" y="10" width="18" height="1.
|
|
10
|
-
<rect x="10
|
|
11
|
+
<rect x="3" y="10" width="18" height="1.8" fill="color-mix(in srgb, currentColor 70%, black)"/>
|
|
12
|
+
<rect x="10" y="9" width="4" height="3.2" rx="0.5" fill="color-mix(in srgb, currentColor 55%, black)"/>
|
|
13
|
+
<circle cx="12" cy="10.4" r="0.55" fill="color-mix(in srgb, currentColor 20%, white)"/>
|
|
14
|
+
<path d="M11.8 10.9 L12.2 10.9 L12.45 12 L11.55 12 Z" fill="color-mix(in srgb, currentColor 20%, white)"/>
|
|
11
15
|
</svg>
|
|
12
16
|
"""
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
# desk — Ashcombe Hall's own study desk: a tabletop bar over two drawer
|
|
2
|
-
# blocks with pull-knobs, on tapered legs.
|
|
2
|
+
# blocks with pull-knobs and a drawer-front groove, on tapered legs.
|
|
3
3
|
classes = ["desk"]
|
|
4
4
|
svg = """
|
|
5
5
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
6
6
|
<rect x="3" y="7" width="18" height="2.6" rx="0.6" fill="currentColor"/>
|
|
7
|
-
<rect x="
|
|
8
|
-
<rect x="
|
|
9
|
-
<
|
|
10
|
-
<
|
|
7
|
+
<rect x="3.4" y="7.3" width="17.2" height="0.6" fill="color-mix(in srgb, currentColor 30%, white)"/>
|
|
8
|
+
<rect x="4.4" y="9.6" width="6.6" height="5.6" rx="0.6" fill="currentColor"/>
|
|
9
|
+
<rect x="13" y="9.6" width="6.6" height="5.6" rx="0.6" fill="currentColor"/>
|
|
10
|
+
<path d="M5.4 12.4 H10" stroke="color-mix(in srgb, currentColor 60%, black)" stroke-width="0.5"/>
|
|
11
|
+
<path d="M14 12.4 H18.6" stroke="color-mix(in srgb, currentColor 60%, black)" stroke-width="0.5"/>
|
|
12
|
+
<circle cx="9.6" cy="12.4" r="0.6" fill="color-mix(in srgb, currentColor 55%, black)"/>
|
|
13
|
+
<circle cx="16.4" cy="12.4" r="0.6" fill="color-mix(in srgb, currentColor 55%, black)"/>
|
|
11
14
|
<path d="M4.6 15.2 L3.8 20.5 L5.6 20.5 L6.2 15.2 Z" fill="currentColor"/>
|
|
12
15
|
<path d="M17.8 15.2 L17.2 20.5 L19 20.5 L18.2 15.2 Z" fill="currentColor"/>
|
|
13
16
|
</svg>
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
# dog — the plain-class sprite a taxonomy hop away from poodle/sheepdog.
|
|
2
2
|
# Same body language as poodle's, without the pompom cut, so the family
|
|
3
|
-
# reads as one dog rather than two unrelated animals.
|
|
3
|
+
# reads as one dog rather than two unrelated animals. A muzzle bump breaks
|
|
4
|
+
# the head silhouette and the tail curls up and alert rather than hanging,
|
|
5
|
+
# so the pose itself carries the identity even before any colour is added.
|
|
4
6
|
classes = ["dog"]
|
|
5
7
|
svg = """
|
|
6
8
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
7
9
|
<ellipse cx="13" cy="15" rx="6.4" ry="4.3" fill="currentColor"/>
|
|
10
|
+
<path d="M19 13.4 C22.4 11.6 23.4 14.8 21.4 16.2 C20.6 15 19.8 14.2 19 13.4 Z" fill="currentColor"/>
|
|
8
11
|
<circle cx="7" cy="9" r="3.6" fill="currentColor"/>
|
|
9
|
-
<ellipse cx="
|
|
10
|
-
<path d="M4.
|
|
11
|
-
<
|
|
12
|
-
<g stroke="currentColor" stroke-width="1.
|
|
12
|
+
<ellipse cx="3.3" cy="9.8" rx="1.7" ry="1.3" fill="currentColor"/>
|
|
13
|
+
<path d="M4.6 6.4 C2.8 5 1.8 3.4 2.2 2.4 C4.2 2.6 6 4.4 6.4 6.6 Z" fill="currentColor"/>
|
|
14
|
+
<circle cx="5.3" cy="8.2" r="0.45" fill="color-mix(in srgb, currentColor 20%, black)"/>
|
|
15
|
+
<g stroke="currentColor" stroke-width="1.8" stroke-linecap="round">
|
|
13
16
|
<line x1="9" y1="19" x2="9" y2="22"/>
|
|
14
17
|
<line x1="17" y1="19" x2="17" y2="22"/>
|
|
15
18
|
</g>
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
# dog-with-colour — the parameterized-property worked example: "a dog that
|
|
2
|
-
# is black". Same silhouette as dog.toml
|
|
3
|
-
# color from the instance's
|
|
4
|
-
# mgx:hasProperty value rather than the page's currentColor
|
|
5
|
-
# thin currentColor stroke kept on each shape so a light
|
|
6
|
-
# still reads against a light card background. A property
|
|
7
|
-
# entry in [parameters.colour.values] is not a match for
|
|
8
|
-
# all (see sprite-templates.mjs's own header for the
|
|
9
|
-
# convention) — it falls through to the plain dog.toml
|
|
10
|
-
# guessed color.
|
|
2
|
+
# is black". Same silhouette as dog.toml (muzzle bump, curled alert tail,
|
|
3
|
+
# floppy ear), but every filled shape takes its color from the instance's
|
|
4
|
+
# OWN observed mgx:hasProperty value rather than the page's currentColor
|
|
5
|
+
# accent, with a thin currentColor stroke kept on each shape so a light
|
|
6
|
+
# value (white) still reads against a light card background. A property
|
|
7
|
+
# value with no entry in [parameters.colour.values] is not a match for
|
|
8
|
+
# this template at all (see sprite-templates.mjs's own header for the
|
|
9
|
+
# naming/specificity convention) — it falls through to the plain dog.toml
|
|
10
|
+
# sprite, never a guessed color.
|
|
11
11
|
classes = ["dog"]
|
|
12
12
|
svg = """
|
|
13
13
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
14
14
|
<ellipse cx="13" cy="15" rx="6.4" ry="4.3" fill="{{FILL}}" stroke="currentColor" stroke-width="0.9"/>
|
|
15
|
+
<path d="M19 13.4 C22.4 11.6 23.4 14.8 21.4 16.2 C20.6 15 19.8 14.2 19 13.4 Z" fill="{{FILL}}" stroke="currentColor" stroke-width="0.9"/>
|
|
15
16
|
<circle cx="7" cy="9" r="3.6" fill="{{FILL}}" stroke="currentColor" stroke-width="0.9"/>
|
|
16
|
-
<
|
|
17
|
-
<path d="
|
|
18
|
-
<g stroke="currentColor" stroke-width="1.
|
|
17
|
+
<ellipse cx="3.3" cy="9.8" rx="1.7" ry="1.3" fill="{{FILL}}" stroke="currentColor" stroke-width="0.9"/>
|
|
18
|
+
<path d="M4.6 6.4 C2.8 5 1.8 3.4 2.2 2.4 C4.2 2.6 6 4.4 6.4 6.6 Z" fill="{{FILL}}" stroke="currentColor" stroke-width="0.9"/>
|
|
19
|
+
<g stroke="currentColor" stroke-width="1.8" stroke-linecap="round">
|
|
19
20
|
<line x1="9" y1="19" x2="9" y2="22"/>
|
|
20
21
|
<line x1="17" y1="19" x2="17" y2="22"/>
|
|
21
22
|
</g>
|
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
# drawing-room — a room floor plan marked by a framed picture on the wall (the
|
|
2
2
|
# portrait hangs here), so the room-kind icon reads as the drawing room rather
|
|
3
|
-
# than a plain room.
|
|
3
|
+
# than a plain room. The wash is a fixed white/black tint rather than
|
|
4
|
+
# currentColor-mixed (see room-icon.toml's own header for why), and the
|
|
5
|
+
# canvas behind the framed bust gets its own lighter tone so frame, canvas
|
|
6
|
+
# and figure read as three distinct layers rather than one flat block.
|
|
4
7
|
classes = ["drawing-room"]
|
|
5
8
|
svg = """
|
|
6
9
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
7
|
-
<
|
|
10
|
+
<defs>
|
|
11
|
+
<linearGradient id="drawing-room-wash" x1="0" y1="0" x2="0.4" y2="1">
|
|
12
|
+
<stop offset="0%" stop-color="#ffffff" stop-opacity="0.1"/>
|
|
13
|
+
<stop offset="100%" stop-color="#000000" stop-opacity="0.14"/>
|
|
14
|
+
</linearGradient>
|
|
15
|
+
</defs>
|
|
16
|
+
<rect x="3" y="3" width="18" height="18" rx="1" fill="url(#drawing-room-wash)"/>
|
|
8
17
|
<rect x="3" y="3" width="18" height="18" rx="1" fill="none" stroke="currentColor" stroke-width="1.6"/>
|
|
9
|
-
<rect x="8.5" y="7" width="7" height="6" rx="0.4" fill="
|
|
10
|
-
<circle cx="12" cy="9.4" r="1.1" fill="currentColor"
|
|
11
|
-
<path d="M9.6 12.4 C9.6 10.9 10.6 10 12 10 C13.4 10 14.4 10.9 14.4 12.4 Z" fill="currentColor"
|
|
18
|
+
<rect x="8.5" y="7" width="7" height="6" rx="0.4" fill="color-mix(in srgb, currentColor 22%, white)" stroke="currentColor" stroke-width="1.3"/>
|
|
19
|
+
<circle cx="12" cy="9.4" r="1.1" fill="currentColor"/>
|
|
20
|
+
<path d="M9.6 12.4 C9.6 10.9 10.6 10 12 10 C13.4 10 14.4 10.9 14.4 12.4 Z" fill="currentColor"/>
|
|
12
21
|
</svg>
|
|
13
22
|
"""
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
# egg — the spider-and-fly board's laid egg
|
|
2
|
-
#
|
|
1
|
+
# egg — the spider-and-fly board's laid egg: the plain shell silhouette,
|
|
2
|
+
# lit from the upper left with a lighter highlight and a darker shadow
|
|
3
|
+
# side so the round shell reads as three-dimensional rather than a flat
|
|
4
|
+
# tinted disc.
|
|
3
5
|
classes = ["egg"]
|
|
4
6
|
svg = """
|
|
5
7
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
6
8
|
<path d="M12 2 C7 2 4 10 4 15.5 C4 20 7.6 22 12 22 C16.4 22 20 20 20 15.5 C20 10 17 2 12 2 Z" fill="currentColor"/>
|
|
7
|
-
<
|
|
9
|
+
<path d="M12 2 C16 2 19 8.6 19.9 14 C18.4 15.2 16.6 15.8 15 14.6 C16.2 11 15.6 5.4 12 2 Z" fill="color-mix(in srgb, currentColor 65%, black)"/>
|
|
10
|
+
<ellipse cx="9.4" cy="8.8" rx="1.9" ry="2.8" fill="color-mix(in srgb, currentColor 25%, white)"/>
|
|
8
11
|
</svg>
|
|
9
12
|
"""
|
|
@@ -1,17 +1,22 @@
|
|
|
1
|
-
# fly — the spider-and-fly board's other agent. A round head
|
|
2
|
-
# body with a carved highlight,
|
|
3
|
-
#
|
|
1
|
+
# fly — the spider-and-fly board's other agent. A round head with a pair
|
|
2
|
+
# of large compound eyes, a tapered body with a carved highlight,
|
|
3
|
+
# translucent wings (opacity carries real translucency here, not a
|
|
4
|
+
# decorative wash, so it stays), and two thin trailing legs.
|
|
4
5
|
classes = ["fly"]
|
|
5
6
|
svg = """
|
|
6
7
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
7
8
|
<ellipse cx="12" cy="13.6" rx="3.4" ry="5.2" fill="currentColor"/>
|
|
8
9
|
<circle cx="12" cy="7" r="2.7" fill="currentColor"/>
|
|
9
|
-
<ellipse cx="11.1" cy="12" rx="1.1" ry="1.7" fill="currentColor
|
|
10
|
+
<ellipse cx="11.1" cy="12" rx="1.1" ry="1.7" fill="color-mix(in srgb, currentColor 70%, black)"/>
|
|
10
11
|
<g fill="currentColor" opacity="0.55">
|
|
11
12
|
<path d="M9 10 C3 6 2 4 3 2 C6 2 9 6 10.5 10 Z"/>
|
|
12
13
|
<path d="M15 10 C21 6 22 4 21 2 C18 2 15 6 13.5 10 Z"/>
|
|
13
14
|
</g>
|
|
14
|
-
<g
|
|
15
|
+
<g fill="color-mix(in srgb, currentColor 70%, black)">
|
|
16
|
+
<ellipse cx="10.1" cy="6.1" rx="1.5" ry="1.9" transform="rotate(-18 10.1 6.1)"/>
|
|
17
|
+
<ellipse cx="13.9" cy="6.1" rx="1.5" ry="1.9" transform="rotate(18 13.9 6.1)"/>
|
|
18
|
+
</g>
|
|
19
|
+
<g stroke="currentColor" stroke-width="1.1" stroke-linecap="round">
|
|
15
20
|
<path d="M9.6 17 L7.4 19.4"/>
|
|
16
21
|
<path d="M14.4 17 L16.6 19.4"/>
|
|
17
22
|
</g>
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
# furniture — the generic fallback for any furniture piece with no sprite
|
|
2
|
-
# of its own: a solid console-table silhouette
|
|
3
|
-
#
|
|
2
|
+
# of its own: a solid console-table silhouette with a stretcher bar joining
|
|
3
|
+
# the tapered legs low down, the structural cue that reads as "a table"
|
|
4
|
+
# rather than "a shelf on the wall".
|
|
4
5
|
classes = ["furniture"]
|
|
5
6
|
svg = """
|
|
6
7
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
7
8
|
<rect x="3.5" y="6.5" width="17" height="3.2" rx="0.8" fill="currentColor"/>
|
|
8
|
-
<rect x="3.5" y="6.5" width="17" height="1" fill="currentColor
|
|
9
|
+
<rect x="3.5" y="6.5" width="17" height="1" fill="color-mix(in srgb, currentColor 30%, white)"/>
|
|
9
10
|
<path d="M5.6 9.7 L4.6 20 L6.7 20 L7.2 9.7 Z" fill="currentColor"/>
|
|
10
11
|
<path d="M18.4 9.7 L16.8 20 L18.9 20 L19.4 9.7 Z" fill="currentColor"/>
|
|
12
|
+
<rect x="6.4" y="15.6" width="11.2" height="1.3" rx="0.4" fill="color-mix(in srgb, currentColor 70%, black)"/>
|
|
11
13
|
</svg>
|
|
12
14
|
"""
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
# garden — an outdoor space, so no room box: a tree over a ground line reads
|
|
2
2
|
# as open air rather than an interior, matching the outdoor room-kind border.
|
|
3
|
+
# The canopy is built from three overlapping lobes rather than one plain
|
|
4
|
+
# circle so it reads as foliage, and a couple of grass tufts at the base
|
|
5
|
+
# ground it as cultivated planting rather than bare earth.
|
|
3
6
|
classes = ["garden"]
|
|
4
7
|
svg = """
|
|
5
8
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
6
9
|
<path d="M3 20 H21" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/>
|
|
7
10
|
<path d="M12 20 V12" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/>
|
|
8
|
-
<circle cx="
|
|
9
|
-
<circle cx="
|
|
10
|
-
<circle cx="
|
|
11
|
+
<circle cx="8.4" cy="9.4" r="3.6" fill="currentColor"/>
|
|
12
|
+
<circle cx="15.6" cy="9.4" r="3.6" fill="currentColor"/>
|
|
13
|
+
<circle cx="12" cy="6.6" r="4.2" fill="currentColor"/>
|
|
14
|
+
<g stroke="color-mix(in srgb, currentColor 55%, black)" stroke-width="1" stroke-linecap="round">
|
|
15
|
+
<path d="M5.4 20 C5.4 18.6 6.2 17.8 6.2 17.8"/>
|
|
16
|
+
<path d="M18.2 20 C18.2 18.6 17.4 17.8 17.4 17.8"/>
|
|
17
|
+
</g>
|
|
11
18
|
</svg>
|
|
12
19
|
"""
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# key — Ashcombe Hall's own key (hidden in the portrait, unlocks the
|
|
2
2
|
# cabinet): a classic round-bow skeleton key, bold strokes so it stays
|
|
3
|
-
# legible at a 44px render
|
|
3
|
+
# legible at a 44px render, plus a thin specular arc tracing the bow's own
|
|
4
|
+
# upper-left curve so the ring reads as metal rather than a flat ring.
|
|
4
5
|
classes = ["key"]
|
|
5
6
|
svg = """
|
|
6
7
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
@@ -8,5 +9,6 @@ svg = """
|
|
|
8
9
|
<path d="M10.4 12 L19.5 21.1" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"/>
|
|
9
10
|
<path d="M16.4 17.1 L18.6 14.9" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
|
|
10
11
|
<path d="M18.6 19.3 L20.6 17.3" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
|
|
12
|
+
<path d="M5 6.6 A4.4 4.4 0 0 1 8.6 4.8" fill="none" stroke="color-mix(in srgb, currentColor 25%, white)" stroke-width="1" stroke-linecap="round"/>
|
|
11
13
|
</svg>
|
|
12
14
|
"""
|
|
@@ -1,13 +1,22 @@
|
|
|
1
|
-
# kitchen — a room floor plan marked by a stove with two burners
|
|
2
|
-
# distinguishing cue the large tier uses, so
|
|
3
|
-
# kitchen rather than a plain room.
|
|
1
|
+
# kitchen — a room floor plan marked by a stove with two burners and an
|
|
2
|
+
# oven-door handle, the same distinguishing cue the large tier uses, so
|
|
3
|
+
# the room-kind icon reads as a kitchen rather than a plain room. The wash
|
|
4
|
+
# is a fixed white/black tint rather than currentColor-mixed (see
|
|
5
|
+
# room-icon.toml's own header for why).
|
|
4
6
|
classes = ["kitchen"]
|
|
5
7
|
svg = """
|
|
6
8
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
7
|
-
<
|
|
9
|
+
<defs>
|
|
10
|
+
<linearGradient id="kitchen-wash" x1="0" y1="0" x2="0.4" y2="1">
|
|
11
|
+
<stop offset="0%" stop-color="#ffffff" stop-opacity="0.1"/>
|
|
12
|
+
<stop offset="100%" stop-color="#000000" stop-opacity="0.14"/>
|
|
13
|
+
</linearGradient>
|
|
14
|
+
</defs>
|
|
15
|
+
<rect x="3" y="3" width="18" height="18" rx="1" fill="url(#kitchen-wash)"/>
|
|
8
16
|
<rect x="3" y="3" width="18" height="18" rx="1" fill="none" stroke="currentColor" stroke-width="1.6"/>
|
|
9
17
|
<rect x="8" y="10" width="8" height="7" rx="0.6" fill="none" stroke="currentColor" stroke-width="1.2"/>
|
|
10
|
-
<circle cx="10.5" cy="12.
|
|
11
|
-
<circle cx="13.5" cy="12.
|
|
18
|
+
<circle cx="10.5" cy="12.4" r="1" fill="currentColor"/>
|
|
19
|
+
<circle cx="13.5" cy="12.4" r="1" fill="currentColor"/>
|
|
20
|
+
<path d="M9.4 15.8 H14.6" stroke="currentColor" stroke-width="0.9" stroke-linecap="round"/>
|
|
12
21
|
</svg>
|
|
13
22
|
"""
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
# lamp — Ashcombe Hall's own study lamp: a Victorian hurricane-lamp
|
|
2
|
-
# silhouette — base, glass globe, a neck, and a small
|
|
2
|
+
# silhouette — base, glass globe, a neck, and a small flame. The globe gets
|
|
3
|
+
# its own lighter glass tone plus a specular streak so it reads as glass
|
|
4
|
+
# distinct from the solid metal base and neck, and the flame is a fixed
|
|
5
|
+
# warm amber regardless of theme — a flame's colour comes from what's
|
|
6
|
+
# burning, not from CSS.
|
|
3
7
|
classes = ["lamp"]
|
|
4
8
|
svg = """
|
|
5
9
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
6
10
|
<path d="M9 21 H15 L14 18 H10 Z" fill="currentColor"/>
|
|
7
|
-
<path d="M8.4 18 C7 15.6 7 12.6 8.6 10.4 H15.4 C17 12.6 17 15.6 15.6 18 Z" fill="currentColor"/>
|
|
8
|
-
<
|
|
9
|
-
<
|
|
11
|
+
<path d="M8.4 18 C7 15.6 7 12.6 8.6 10.4 H15.4 C17 12.6 17 15.6 15.6 18 Z" fill="color-mix(in srgb, currentColor 55%, white)"/>
|
|
12
|
+
<path d="M9.2 11.4 C9 13.4 9.1 15.6 9.9 17.4" fill="none" stroke="color-mix(in srgb, currentColor 20%, white)" stroke-width="0.8" stroke-linecap="round"/>
|
|
13
|
+
<rect x="10.6" y="6.4" width="2.8" height="4.4" rx="0.4" fill="currentColor"/>
|
|
14
|
+
<path d="M12 3.2 C13.4 4.6 13.8 6 12 7.4 C10.2 6 10.6 4.6 12 3.2 Z" fill="#f4b73f"/>
|
|
10
15
|
</svg>
|
|
11
16
|
"""
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
# letter — Ashcombe Hall's own objective (hidden in the cabinet): an
|
|
2
|
-
# envelope with a folded flap (a
|
|
3
|
-
#
|
|
2
|
+
# envelope with a folded flap (a darker overlay, the same carved-seam trick
|
|
3
|
+
# as the lid on container.toml) and a wax seal. The seal is a fixed red —
|
|
4
|
+
# a wax seal's colour comes from the wax pressed into it, not the paper
|
|
5
|
+
# underneath, the same reasoning as the flame on lamp.toml.
|
|
4
6
|
classes = ["letter"]
|
|
5
7
|
svg = """
|
|
6
8
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
7
9
|
<rect x="3" y="6" width="18" height="13" rx="1.2" fill="currentColor"/>
|
|
8
|
-
<path d="M3 6 L21 6 L21 6.8 L12 13.8 L3 6.8 Z" fill="currentColor
|
|
9
|
-
<
|
|
10
|
+
<path d="M3 6 L21 6 L21 6.8 L12 13.8 L3 6.8 Z" fill="color-mix(in srgb, currentColor 78%, black)"/>
|
|
11
|
+
<path d="M4 7.6 L11 12.9" stroke="color-mix(in srgb, currentColor 25%, white)" stroke-width="0.5" opacity="0.6"/>
|
|
12
|
+
<circle cx="12" cy="12.4" r="1.15" fill="#8a2e2e"/>
|
|
10
13
|
</svg>
|
|
11
14
|
"""
|
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
# library — a room floor plan marked by an open book, so the room-kind icon
|
|
2
2
|
# reads as a library rather than a plain room: the washed square is room.toml's
|
|
3
3
|
# own shape, the two-page V is the same open-book cue the large tier uses.
|
|
4
|
+
# One page is shaded a touch darker than the other so the spine reads as a
|
|
5
|
+
# fold rather than a seam drawn on a flat card. The wash is a fixed
|
|
6
|
+
# white/black tint rather than currentColor-mixed (see room-icon.toml's own
|
|
7
|
+
# header for why).
|
|
4
8
|
classes = ["library"]
|
|
5
9
|
svg = """
|
|
6
10
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
7
|
-
<
|
|
11
|
+
<defs>
|
|
12
|
+
<linearGradient id="library-wash" x1="0" y1="0" x2="0.4" y2="1">
|
|
13
|
+
<stop offset="0%" stop-color="#ffffff" stop-opacity="0.1"/>
|
|
14
|
+
<stop offset="100%" stop-color="#000000" stop-opacity="0.14"/>
|
|
15
|
+
</linearGradient>
|
|
16
|
+
</defs>
|
|
17
|
+
<rect x="3" y="3" width="18" height="18" rx="1" fill="url(#library-wash)"/>
|
|
8
18
|
<rect x="3" y="3" width="18" height="18" rx="1" fill="none" stroke="currentColor" stroke-width="1.6"/>
|
|
9
|
-
<path d="M12 9 C10.4 7.9 8.2 7.6 6.4 8.1 V15.6 C8.2 15.1 10.4 15.4 12 16.5
|
|
10
|
-
<path d="M12 9
|
|
19
|
+
<path d="M12 9 C10.4 7.9 8.2 7.6 6.4 8.1 V15.6 C8.2 15.1 10.4 15.4 12 16.5 Z" fill="currentColor"/>
|
|
20
|
+
<path d="M12 9 C13.6 7.9 15.8 7.6 17.6 8.1 V15.6 C15.8 15.1 13.6 15.4 12 16.5 Z" fill="color-mix(in srgb, currentColor 78%, black)"/>
|
|
21
|
+
<path d="M12 9 V16.5" stroke="color-mix(in srgb, currentColor 30%, white)" stroke-width="0.4"/>
|
|
11
22
|
</svg>
|
|
12
23
|
"""
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
# pan — the kitchen's default portable: a frying pan seen from above with a
|
|
2
|
-
# long handle
|
|
3
|
-
#
|
|
2
|
+
# long handle. The cooking surface reads darker than the rim (a pan's own
|
|
3
|
+
# interior is seasoned/scorched, its rim stays brighter metal) and the
|
|
4
|
+
# handle carries a rivet, so a taken pan reads as its own thing rather than
|
|
5
|
+
# the generic portable box.
|
|
4
6
|
classes = ["pan"]
|
|
5
7
|
svg = """
|
|
6
8
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
7
9
|
<circle cx="10" cy="14" r="6" fill="currentColor"/>
|
|
8
|
-
<circle cx="10" cy="14" r="
|
|
10
|
+
<circle cx="10" cy="14" r="4.8" fill="color-mix(in srgb, currentColor 70%, black)"/>
|
|
11
|
+
<path d="M6.6 11 A4.8 4.8 0 0 1 13 10" fill="none" stroke="color-mix(in srgb, currentColor 20%, white)" stroke-width="0.6" stroke-linecap="round" opacity="0.6"/>
|
|
9
12
|
<rect x="15" y="13" width="7" height="2" rx="1" fill="currentColor"/>
|
|
13
|
+
<circle cx="16.4" cy="14" r="0.5" fill="color-mix(in srgb, currentColor 55%, black)"/>
|
|
10
14
|
</svg>
|
|
11
15
|
"""
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
# person — the generic fallback for anyone with no NPC sprite of their own
|
|
2
|
-
# (see butler/housekeeper/cook/gardener for the named Ashcombe Hall staff)
|
|
2
|
+
# (see butler/housekeeper/cook/gardener for the named Ashcombe Hall staff):
|
|
3
|
+
# two shoulder notches break the torso silhouette where sleeves would seam,
|
|
4
|
+
# so it reads as a clothed figure rather than a bare blob-with-a-head, while
|
|
5
|
+
# staying deliberately unadorned next to the named staff's own props.
|
|
3
6
|
classes = ["person"]
|
|
4
7
|
svg = """
|
|
5
8
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
6
9
|
<circle cx="12" cy="6.6" r="3.3" fill="currentColor"/>
|
|
7
10
|
<path d="M6 21 C6 15.3 8.7 12.8 12 12.8 C15.3 12.8 18 15.3 18 21 Z" fill="currentColor"/>
|
|
8
|
-
<path d="
|
|
11
|
+
<path d="M7.6 14.4 L9.4 13" stroke="color-mix(in srgb, currentColor 55%, black)" stroke-width="0.7" opacity="0.6" stroke-linecap="round"/>
|
|
12
|
+
<path d="M16.4 14.4 L14.6 13" stroke="color-mix(in srgb, currentColor 55%, black)" stroke-width="0.7" opacity="0.6" stroke-linecap="round"/>
|
|
9
13
|
</svg>
|
|
10
14
|
"""
|
|
@@ -5,7 +5,7 @@ classes = ["poodle"]
|
|
|
5
5
|
svg = """
|
|
6
6
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
7
7
|
<ellipse cx="13" cy="15" rx="6.4" ry="4.6" fill="currentColor"/>
|
|
8
|
-
<ellipse cx="10.8" cy="13.2" rx="1.8" ry="1.3" fill="currentColor
|
|
8
|
+
<ellipse cx="10.8" cy="13.2" rx="1.8" ry="1.3" fill="color-mix(in srgb, currentColor 70%, black)"/>
|
|
9
9
|
<circle cx="7" cy="8.5" r="4" fill="currentColor"/>
|
|
10
10
|
<g fill="currentColor">
|
|
11
11
|
<circle cx="4" cy="6" r="1.6"/>
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
# portable — the generic fallback for any carryable object with no sprite
|
|
2
|
-
# of its own: a drawstring parcel silhouette
|
|
3
|
-
#
|
|
4
|
-
# rather than a gift.
|
|
2
|
+
# of its own: a drawstring parcel silhouette with a small tag hanging from
|
|
3
|
+
# the neck, so it reads as "an unspecified small thing someone packed"
|
|
4
|
+
# rather than a gift or a sack of grain.
|
|
5
5
|
classes = ["portable"]
|
|
6
6
|
svg = """
|
|
7
7
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
8
8
|
<path d="M12 6 C7.5 6 5 9.4 5 13.4 C5 17.7 8.1 20 12 20 C15.9 20 19 17.7 19 13.4 C19 9.4 16.5 6 12 6 Z" fill="currentColor"/>
|
|
9
9
|
<path d="M9.4 6.4 C9.9 4.6 10.8 3.4 12 3.4 C13.2 3.4 14.1 4.6 14.6 6.4" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/>
|
|
10
|
-
<ellipse cx="9.8" cy="11.6" rx="1.6" ry="2.1" fill="currentColor
|
|
10
|
+
<ellipse cx="9.8" cy="11.6" rx="1.6" ry="2.1" fill="color-mix(in srgb, currentColor 25%, white)"/>
|
|
11
|
+
<path d="M14.4 6.6 L17.4 8.8 L15.6 10.4 L14 8 Z" fill="color-mix(in srgb, currentColor 65%, black)"/>
|
|
12
|
+
<circle cx="16.1" cy="8.5" r="0.35" fill="color-mix(in srgb, currentColor 20%, white)"/>
|
|
11
13
|
</svg>
|
|
12
14
|
"""
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
# portrait — Ashcombe Hall's own drawing-room portrait (a container, hiding
|
|
2
2
|
# the key): a gilt arched frame around a lighter canvas, with a bust
|
|
3
|
-
# silhouette so it reads as a picture of someone, not an empty frame.
|
|
3
|
+
# silhouette so it reads as a picture of someone, not an empty frame. Canvas
|
|
4
|
+
# and figure use fixed cream/sepia tones rather than currentColor opacity —
|
|
5
|
+
# a painting's own palette doesn't belong to the page theme, and a flat
|
|
6
|
+
# opacity wash would shift between a light and a dark backdrop anyway.
|
|
4
7
|
classes = ["portrait"]
|
|
5
8
|
svg = """
|
|
6
9
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
7
10
|
<path d="M4 21 V7 C4 4 6.8 2 12 2 C17.2 2 20 4 20 7 V21 Z" fill="currentColor"/>
|
|
8
|
-
<path d="M6.3 19.4 V8.3 C6.3 6.2 8.4 4.8 12 4.8 C15.6 4.8 17.7 6.2 17.7 8.3 V19.4 Z" fill="
|
|
9
|
-
<circle cx="12" cy="10.4" r="2.3" fill="
|
|
10
|
-
<path d="M8 18.4 C8 15.2 9.6 13.4 12 13.4 C14.4 13.4 16 15.2 16 18.4 Z" fill="
|
|
11
|
+
<path d="M6.3 19.4 V8.3 C6.3 6.2 8.4 4.8 12 4.8 C15.6 4.8 17.7 6.2 17.7 8.3 V19.4 Z" fill="#f4ecd8"/>
|
|
12
|
+
<circle cx="12" cy="10.4" r="2.3" fill="#8a6a52"/>
|
|
13
|
+
<path d="M8 18.4 C8 15.2 9.6 13.4 12 13.4 C14.4 13.4 16 15.2 16 18.4 Z" fill="#8a6a52"/>
|
|
11
14
|
</svg>
|
|
12
15
|
"""
|
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
# room — a schematic floor plan: a washed interior (a solid tint, not a
|
|
2
2
|
# hollow box) plus a doorway arch, kept abstract since a room is a space
|
|
3
|
-
# to draw, not an object to render literally.
|
|
3
|
+
# to draw, not an object to render literally. The wash is a fixed
|
|
4
|
+
# white/black tint rather than currentColor-mixed: a tint built from
|
|
5
|
+
# currentColor reverses which side looks lighter between a light and a
|
|
6
|
+
# dark theme, a plain white/black one never does.
|
|
4
7
|
classes = ["room"]
|
|
5
8
|
svg = """
|
|
6
9
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
7
|
-
<
|
|
10
|
+
<defs>
|
|
11
|
+
<linearGradient id="room-wash" x1="0" y1="0" x2="0.4" y2="1">
|
|
12
|
+
<stop offset="0%" stop-color="#ffffff" stop-opacity="0.1"/>
|
|
13
|
+
<stop offset="100%" stop-color="#000000" stop-opacity="0.14"/>
|
|
14
|
+
</linearGradient>
|
|
15
|
+
</defs>
|
|
16
|
+
<rect x="3" y="3" width="18" height="18" rx="1" fill="url(#room-wash)"/>
|
|
8
17
|
<rect x="3" y="3" width="18" height="18" rx="1" fill="none" stroke="currentColor" stroke-width="1.6"/>
|
|
9
18
|
<path d="M9 21 L9 13 A3 3 0 0 1 15 13 L15 21" fill="none" stroke="currentColor" stroke-width="1.6"/>
|
|
10
19
|
</svg>
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
# spider — the spider-and-fly board's own agent. A confident two-lobe body
|
|
2
|
-
# (a
|
|
3
|
-
#
|
|
2
|
+
# (a darker carved patch on the abdomen for shading), two small fixed-dark
|
|
3
|
+
# eye dots (the same restrained fixed-accent technique the large tier's
|
|
4
|
+
# badger/vole use for an identity marking, not a coat colour) and eight
|
|
5
|
+
# thin outward legs.
|
|
4
6
|
classes = ["spider"]
|
|
5
7
|
svg = """
|
|
6
8
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
7
9
|
<ellipse cx="12" cy="16" rx="5.2" ry="4.8" fill="currentColor"/>
|
|
8
|
-
<ellipse cx="10.3" cy="14.3" rx="1.8" ry="1.4" fill="currentColor
|
|
10
|
+
<ellipse cx="10.3" cy="14.3" rx="1.8" ry="1.4" fill="color-mix(in srgb, currentColor 70%, black)"/>
|
|
9
11
|
<circle cx="12" cy="9.6" r="3.2" fill="currentColor"/>
|
|
12
|
+
<g fill="#1c1c1c">
|
|
13
|
+
<circle cx="10.7" cy="8.7" r="0.5"/>
|
|
14
|
+
<circle cx="13.3" cy="8.7" r="0.5"/>
|
|
15
|
+
</g>
|
|
10
16
|
<g stroke="currentColor" stroke-width="1.1" fill="none" stroke-linecap="round">
|
|
11
17
|
<path d="M9.4 8 L2.2 4.4"/>
|
|
12
18
|
<path d="M9 10.2 L1.4 9.4"/>
|
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
# study — a room floor plan marked by a writing desk against one wall, so the
|
|
2
2
|
# room-kind icon reads as the study you start in rather than a plain room.
|
|
3
|
+
# The wash is a fixed white/black tint rather than currentColor-mixed (see
|
|
4
|
+
# room-icon.toml's own header for why).
|
|
3
5
|
classes = ["study"]
|
|
4
6
|
svg = """
|
|
5
7
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
6
|
-
<
|
|
8
|
+
<defs>
|
|
9
|
+
<linearGradient id="study-wash" x1="0" y1="0" x2="0.4" y2="1">
|
|
10
|
+
<stop offset="0%" stop-color="#ffffff" stop-opacity="0.1"/>
|
|
11
|
+
<stop offset="100%" stop-color="#000000" stop-opacity="0.14"/>
|
|
12
|
+
</linearGradient>
|
|
13
|
+
</defs>
|
|
14
|
+
<rect x="3" y="3" width="18" height="18" rx="1" fill="url(#study-wash)"/>
|
|
7
15
|
<rect x="3" y="3" width="18" height="18" rx="1" fill="none" stroke="currentColor" stroke-width="1.6"/>
|
|
8
|
-
<rect x="7" y="11" width="10" height="2.4" fill="currentColor"
|
|
16
|
+
<rect x="7" y="11" width="10" height="2.4" fill="currentColor"/>
|
|
9
17
|
<path d="M8 13.4 V17 M16 13.4 V17" stroke="currentColor" stroke-width="1.2"/>
|
|
10
18
|
<rect x="9.6" y="7.6" width="4.8" height="3" fill="none" stroke="currentColor" stroke-width="1"/>
|
|
11
19
|
</svg>
|