mcp-avatar-builder 0.1.0

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.
Files changed (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +163 -0
  3. package/build/composer.d.ts +4 -0
  4. package/build/composer.d.ts.map +1 -0
  5. package/build/composer.js +65 -0
  6. package/build/composer.js.map +1 -0
  7. package/build/index.d.ts +3 -0
  8. package/build/index.d.ts.map +1 -0
  9. package/build/index.js +7 -0
  10. package/build/index.js.map +1 -0
  11. package/build/rasterizer.d.ts +2 -0
  12. package/build/rasterizer.d.ts.map +1 -0
  13. package/build/rasterizer.js +12 -0
  14. package/build/rasterizer.js.map +1 -0
  15. package/build/server.d.ts +3 -0
  16. package/build/server.d.ts.map +1 -0
  17. package/build/server.js +118 -0
  18. package/build/server.js.map +1 -0
  19. package/build/styles/chibi/index.d.ts +3 -0
  20. package/build/styles/chibi/index.d.ts.map +1 -0
  21. package/build/styles/chibi/index.js +57 -0
  22. package/build/styles/chibi/index.js.map +1 -0
  23. package/build/styles/chibi/palettes.d.ts +3 -0
  24. package/build/styles/chibi/palettes.d.ts.map +1 -0
  25. package/build/styles/chibi/palettes.js +29 -0
  26. package/build/styles/chibi/palettes.js.map +1 -0
  27. package/build/styles/chibi/parts/accessories.d.ts +3 -0
  28. package/build/styles/chibi/parts/accessories.d.ts.map +1 -0
  29. package/build/styles/chibi/parts/accessories.js +18 -0
  30. package/build/styles/chibi/parts/accessories.js.map +1 -0
  31. package/build/styles/chibi/parts/clothing.d.ts +3 -0
  32. package/build/styles/chibi/parts/clothing.d.ts.map +1 -0
  33. package/build/styles/chibi/parts/clothing.js +21 -0
  34. package/build/styles/chibi/parts/clothing.js.map +1 -0
  35. package/build/styles/chibi/parts/eyebrows.d.ts +3 -0
  36. package/build/styles/chibi/parts/eyebrows.d.ts.map +1 -0
  37. package/build/styles/chibi/parts/eyebrows.js +15 -0
  38. package/build/styles/chibi/parts/eyebrows.js.map +1 -0
  39. package/build/styles/chibi/parts/eyes.d.ts +3 -0
  40. package/build/styles/chibi/parts/eyes.d.ts.map +1 -0
  41. package/build/styles/chibi/parts/eyes.js +29 -0
  42. package/build/styles/chibi/parts/eyes.js.map +1 -0
  43. package/build/styles/chibi/parts/hair.d.ts +4 -0
  44. package/build/styles/chibi/parts/hair.d.ts.map +1 -0
  45. package/build/styles/chibi/parts/hair.js +29 -0
  46. package/build/styles/chibi/parts/hair.js.map +1 -0
  47. package/build/styles/chibi/parts/head.d.ts +3 -0
  48. package/build/styles/chibi/parts/head.d.ts.map +1 -0
  49. package/build/styles/chibi/parts/head.js +15 -0
  50. package/build/styles/chibi/parts/head.js.map +1 -0
  51. package/build/styles/chibi/parts/mouth.d.ts +3 -0
  52. package/build/styles/chibi/parts/mouth.d.ts.map +1 -0
  53. package/build/styles/chibi/parts/mouth.js +12 -0
  54. package/build/styles/chibi/parts/mouth.js.map +1 -0
  55. package/build/styles/cyberpunk/defs.d.ts +3 -0
  56. package/build/styles/cyberpunk/defs.d.ts.map +1 -0
  57. package/build/styles/cyberpunk/defs.js +74 -0
  58. package/build/styles/cyberpunk/defs.js.map +1 -0
  59. package/build/styles/cyberpunk/index.d.ts +3 -0
  60. package/build/styles/cyberpunk/index.d.ts.map +1 -0
  61. package/build/styles/cyberpunk/index.js +81 -0
  62. package/build/styles/cyberpunk/index.js.map +1 -0
  63. package/build/styles/cyberpunk/palettes.d.ts +3 -0
  64. package/build/styles/cyberpunk/palettes.d.ts.map +1 -0
  65. package/build/styles/cyberpunk/palettes.js +43 -0
  66. package/build/styles/cyberpunk/palettes.js.map +1 -0
  67. package/build/styles/cyberpunk/parts/accessories.d.ts +3 -0
  68. package/build/styles/cyberpunk/parts/accessories.d.ts.map +1 -0
  69. package/build/styles/cyberpunk/parts/accessories.js +77 -0
  70. package/build/styles/cyberpunk/parts/accessories.js.map +1 -0
  71. package/build/styles/cyberpunk/parts/background.d.ts +3 -0
  72. package/build/styles/cyberpunk/parts/background.d.ts.map +1 -0
  73. package/build/styles/cyberpunk/parts/background.js +132 -0
  74. package/build/styles/cyberpunk/parts/background.js.map +1 -0
  75. package/build/styles/cyberpunk/parts/clothing.d.ts +3 -0
  76. package/build/styles/cyberpunk/parts/clothing.d.ts.map +1 -0
  77. package/build/styles/cyberpunk/parts/clothing.js +137 -0
  78. package/build/styles/cyberpunk/parts/clothing.js.map +1 -0
  79. package/build/styles/cyberpunk/parts/effects.d.ts +3 -0
  80. package/build/styles/cyberpunk/parts/effects.d.ts.map +1 -0
  81. package/build/styles/cyberpunk/parts/effects.js +33 -0
  82. package/build/styles/cyberpunk/parts/effects.js.map +1 -0
  83. package/build/styles/cyberpunk/parts/eyebrows.d.ts +3 -0
  84. package/build/styles/cyberpunk/parts/eyebrows.d.ts.map +1 -0
  85. package/build/styles/cyberpunk/parts/eyebrows.js +15 -0
  86. package/build/styles/cyberpunk/parts/eyebrows.js.map +1 -0
  87. package/build/styles/cyberpunk/parts/eyes.d.ts +3 -0
  88. package/build/styles/cyberpunk/parts/eyes.d.ts.map +1 -0
  89. package/build/styles/cyberpunk/parts/eyes.js +110 -0
  90. package/build/styles/cyberpunk/parts/eyes.js.map +1 -0
  91. package/build/styles/cyberpunk/parts/face_mods.d.ts +3 -0
  92. package/build/styles/cyberpunk/parts/face_mods.d.ts.map +1 -0
  93. package/build/styles/cyberpunk/parts/face_mods.js +105 -0
  94. package/build/styles/cyberpunk/parts/face_mods.js.map +1 -0
  95. package/build/styles/cyberpunk/parts/hair.d.ts +4 -0
  96. package/build/styles/cyberpunk/parts/hair.d.ts.map +1 -0
  97. package/build/styles/cyberpunk/parts/hair.js +175 -0
  98. package/build/styles/cyberpunk/parts/hair.js.map +1 -0
  99. package/build/styles/cyberpunk/parts/head.d.ts +3 -0
  100. package/build/styles/cyberpunk/parts/head.d.ts.map +1 -0
  101. package/build/styles/cyberpunk/parts/head.js +158 -0
  102. package/build/styles/cyberpunk/parts/head.js.map +1 -0
  103. package/build/styles/cyberpunk/parts/mouth.d.ts +3 -0
  104. package/build/styles/cyberpunk/parts/mouth.d.ts.map +1 -0
  105. package/build/styles/cyberpunk/parts/mouth.js +71 -0
  106. package/build/styles/cyberpunk/parts/mouth.js.map +1 -0
  107. package/build/styles/index.d.ts +4 -0
  108. package/build/styles/index.d.ts.map +1 -0
  109. package/build/styles/index.js +15 -0
  110. package/build/styles/index.js.map +1 -0
  111. package/build/styles/style.d.ts +15 -0
  112. package/build/styles/style.d.ts.map +1 -0
  113. package/build/styles/style.js +2 -0
  114. package/build/styles/style.js.map +1 -0
  115. package/build/types.d.ts +37 -0
  116. package/build/types.d.ts.map +1 -0
  117. package/build/types.js +2 -0
  118. package/build/types.js.map +1 -0
  119. package/package.json +40 -0
@@ -0,0 +1,132 @@
1
+ export const variants = {
2
+ circuit_grid: (c) => {
3
+ const neon = c.neon ?? "#00E5FF";
4
+ return `
5
+ <!-- Dark base -->
6
+ <rect width="400" height="400" fill="#0A0A14" />
7
+ <!-- Circuit grid lines -->
8
+ <g stroke="${neon}" stroke-opacity="0.08" stroke-width="0.5">
9
+ <line x1="0" y1="50" x2="400" y2="50" />
10
+ <line x1="0" y1="100" x2="400" y2="100" />
11
+ <line x1="0" y1="150" x2="400" y2="150" />
12
+ <line x1="0" y1="200" x2="400" y2="200" />
13
+ <line x1="0" y1="250" x2="400" y2="250" />
14
+ <line x1="0" y1="300" x2="400" y2="300" />
15
+ <line x1="0" y1="350" x2="400" y2="350" />
16
+ <line x1="50" y1="0" x2="50" y2="400" />
17
+ <line x1="100" y1="0" x2="100" y2="400" />
18
+ <line x1="150" y1="0" x2="150" y2="400" />
19
+ <line x1="200" y1="0" x2="200" y2="400" />
20
+ <line x1="250" y1="0" x2="250" y2="400" />
21
+ <line x1="300" y1="0" x2="300" y2="400" />
22
+ <line x1="350" y1="0" x2="350" y2="400" />
23
+ </g>
24
+ <!-- Circuit trace accents -->
25
+ <g stroke="${neon}" stroke-opacity="0.15" stroke-width="1" fill="none">
26
+ <path d="M50,400 L50,320 L100,320 L100,280 L150,280" />
27
+ <path d="M350,400 L350,340 L300,340 L300,300 L280,300" />
28
+ <path d="M0,200 L30,200 L30,150 L80,150" />
29
+ <path d="M400,250 L370,250 L370,180 L330,180" />
30
+ </g>
31
+ <!-- Circuit node dots -->
32
+ <g fill="${neon}" fill-opacity="0.2">
33
+ <circle cx="50" cy="320" r="3" />
34
+ <circle cx="100" cy="280" r="3" />
35
+ <circle cx="150" cy="280" r="2" />
36
+ <circle cx="350" cy="340" r="3" />
37
+ <circle cx="300" cy="300" r="3" />
38
+ <circle cx="30" cy="150" r="2" />
39
+ <circle cx="370" cy="180" r="2" />
40
+ </g>
41
+ <!-- Subtle radial vignette -->
42
+ <radialGradient id="bg-vignette" cx="0.5" cy="0.45" r="0.7">
43
+ <stop offset="0%" stop-color="#0A0A14" stop-opacity="0" />
44
+ <stop offset="100%" stop-color="#000005" stop-opacity="0.7" />
45
+ </radialGradient>
46
+ <rect width="400" height="400" fill="url(#bg-vignette)" />
47
+ `;
48
+ },
49
+ rain_city: (c) => {
50
+ const neon = c.neon ?? "#00E5FF";
51
+ return `
52
+ <!-- Dark sky gradient -->
53
+ <linearGradient id="bg-sky" x1="0" y1="0" x2="0" y2="1">
54
+ <stop offset="0%" stop-color="#05050F" />
55
+ <stop offset="60%" stop-color="#0A0A1A" />
56
+ <stop offset="100%" stop-color="#0F0A1E" />
57
+ </linearGradient>
58
+ <rect width="400" height="400" fill="url(#bg-sky)" />
59
+ <!-- Distant cityscape silhouette -->
60
+ <g fill="#12121E">
61
+ <rect x="10" y="280" width="30" height="120" />
62
+ <rect x="45" y="260" width="22" height="140" />
63
+ <rect x="72" y="300" width="18" height="100" />
64
+ <rect x="95" y="270" width="35" height="130" />
65
+ <rect x="135" y="290" width="20" height="110" />
66
+ <rect x="240" y="275" width="28" height="125" />
67
+ <rect x="275" y="255" width="20" height="145" />
68
+ <rect x="300" y="285" width="35" height="115" />
69
+ <rect x="340" y="265" width="25" height="135" />
70
+ <rect x="370" y="295" width="30" height="105" />
71
+ </g>
72
+ <!-- Building window lights -->
73
+ <g fill="${neon}" fill-opacity="0.15">
74
+ <rect x="18" y="290" width="4" height="3" />
75
+ <rect x="26" y="300" width="4" height="3" />
76
+ <rect x="18" y="310" width="4" height="3" />
77
+ <rect x="100" y="280" width="5" height="3" />
78
+ <rect x="110" y="290" width="5" height="3" />
79
+ <rect x="100" y="300" width="5" height="3" />
80
+ <rect x="248" y="285" width="4" height="3" />
81
+ <rect x="256" y="295" width="4" height="3" />
82
+ <rect x="308" y="295" width="5" height="3" />
83
+ <rect x="318" y="305" width="5" height="3" />
84
+ <rect x="345" y="275" width="4" height="3" />
85
+ <rect x="353" y="285" width="4" height="3" />
86
+ </g>
87
+ <!-- Rain streaks -->
88
+ <g stroke="white" stroke-opacity="0.06" stroke-width="0.5">
89
+ <line x1="30" y1="0" x2="25" y2="80" />
90
+ <line x1="80" y1="20" x2="75" y2="100" />
91
+ <line x1="145" y1="5" x2="140" y2="85" />
92
+ <line x1="210" y1="15" x2="205" y2="95" />
93
+ <line x1="260" y1="0" x2="255" y2="75" />
94
+ <line x1="320" y1="10" x2="315" y2="90" />
95
+ <line x1="375" y1="0" x2="370" y2="70" />
96
+ <line x1="55" y1="40" x2="50" y2="120" />
97
+ <line x1="170" y1="30" x2="165" y2="110" />
98
+ <line x1="290" y1="25" x2="285" y2="105" />
99
+ </g>
100
+ <!-- Vignette -->
101
+ <radialGradient id="bg-vignette-rain" cx="0.5" cy="0.4" r="0.65">
102
+ <stop offset="0%" stop-color="black" stop-opacity="0" />
103
+ <stop offset="100%" stop-color="black" stop-opacity="0.6" />
104
+ </radialGradient>
105
+ <rect width="400" height="400" fill="url(#bg-vignette-rain)" />
106
+ `;
107
+ },
108
+ dark_void: () => `
109
+ <!-- Pure dark with subtle gradient -->
110
+ <linearGradient id="bg-void" x1="0" y1="0" x2="0" y2="1">
111
+ <stop offset="0%" stop-color="#06060E" />
112
+ <stop offset="100%" stop-color="#0C0C18" />
113
+ </linearGradient>
114
+ <rect width="400" height="400" fill="url(#bg-void)" />
115
+ <!-- Sparse particles -->
116
+ <g fill="white" fill-opacity="0.04">
117
+ <circle cx="50" cy="60" r="1" />
118
+ <circle cx="340" cy="40" r="1.5" />
119
+ <circle cx="120" cy="350" r="1" />
120
+ <circle cx="280" cy="370" r="1" />
121
+ <circle cx="380" cy="200" r="1.5" />
122
+ <circle cx="20" cy="250" r="1" />
123
+ </g>
124
+ <!-- Radial vignette -->
125
+ <radialGradient id="bg-vignette-void" cx="0.5" cy="0.45" r="0.55">
126
+ <stop offset="0%" stop-color="black" stop-opacity="0" />
127
+ <stop offset="100%" stop-color="black" stop-opacity="0.5" />
128
+ </radialGradient>
129
+ <rect width="400" height="400" fill="url(#bg-vignette-void)" />
130
+ `,
131
+ };
132
+ //# sourceMappingURL=background.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background.js","sourceRoot":"","sources":["../../../../src/styles/cyberpunk/parts/background.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAiC;IACpD,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAClB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;QACjC,OAAO;;;;iBAIM,IAAI;;;;;;;;;;;;;;;;;iBAiBJ,IAAI;;;;;;;eAON,IAAI;;;;;;;;;;;;;;;KAed,CAAC;IACJ,CAAC;IAED,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;QACjC,OAAO;;;;;;;;;;;;;;;;;;;;;;eAsBI,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiCd,CAAC;IACJ,CAAC;IAED,SAAS,EAAE,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;GAsBhB;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PartRenderer } from "../../../types.js";
2
+ export declare const variants: Record<string, PartRenderer>;
3
+ //# sourceMappingURL=clothing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clothing.d.ts","sourceRoot":"","sources":["../../../../src/styles/cyberpunk/parts/clothing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAyIjD,CAAC"}
@@ -0,0 +1,137 @@
1
+ export const variants = {
2
+ techwear: (c) => {
3
+ const accent = c.accent ?? "#4A4A5A";
4
+ const neon = c.neon ?? "#00E5FF";
5
+ return `
6
+ <!-- Techwear jacket — high collar, angular seams -->
7
+ <!-- Shoulders and body -->
8
+ <path d="
9
+ M120,345 Q125,330 145,322 Q165,315 185,312 Q200,310 215,312
10
+ Q235,315 255,322 Q275,330 280,345
11
+ L285,400 L115,400Z
12
+ " fill="${c.clothing}" />
13
+ <!-- Left sleeve -->
14
+ <path d="M120,345 Q110,338 95,340 L85,400 L115,400Z" fill="${c.clothing}" />
15
+ <!-- Right sleeve -->
16
+ <path d="M280,345 Q290,338 305,340 L315,400 L285,400Z" fill="${c.clothing}" />
17
+ <!-- Collar — high standing -->
18
+ <path d="
19
+ M165,312 Q170,298 180,295 Q200,290 220,295 Q230,298 235,312
20
+ L230,315 Q215,308 200,306 Q185,308 170,315Z
21
+ " fill="${c.clothing}" />
22
+ <!-- Collar inner darkness -->
23
+ <path d="
24
+ M170,312 Q175,302 185,300 Q200,296 215,300 Q225,302 230,312
25
+ L226,314 Q215,306 200,304 Q185,306 174,314Z
26
+ " fill="#0A0A14" opacity="0.5" />
27
+ <!-- Seam lines -->
28
+ <g stroke="#00000018" stroke-width="0.8" fill="none">
29
+ <path d="M200,310 L200,400" />
30
+ <path d="M160,320 L145,400" />
31
+ <path d="M240,320 L255,400" />
32
+ </g>
33
+ <!-- Shoulder seam highlight -->
34
+ <path d="M145,322 Q165,315 200,310" stroke="white" stroke-width="0.5" fill="none" opacity="0.06" />
35
+ <path d="M255,322 Q235,315 200,310" stroke="white" stroke-width="0.5" fill="none" opacity="0.06" />
36
+ <!-- Tech accent strip -->
37
+ <path d="M155,335 L155,380" stroke="${neon}" stroke-width="1.5" fill="none" opacity="0.2" />
38
+ <path d="M245,335 L245,380" stroke="${neon}" stroke-width="1.5" fill="none" opacity="0.2" />
39
+ <!-- Zipper line -->
40
+ <g stroke="${accent}" stroke-width="0.6" opacity="0.4">
41
+ <line x1="200" y1="315" x2="200" y2="320" />
42
+ <line x1="200" y1="325" x2="200" y2="330" />
43
+ <line x1="200" y1="335" x2="200" y2="340" />
44
+ <line x1="200" y1="345" x2="200" y2="350" />
45
+ <line x1="200" y1="355" x2="200" y2="360" />
46
+ </g>
47
+ `;
48
+ },
49
+ tactical_vest: (c) => {
50
+ const accent = c.accent ?? "#4A4A5A";
51
+ const neon = c.neon ?? "#00E5FF";
52
+ return `
53
+ <!-- Base layer (undershirt visible at shoulders) -->
54
+ <path d="
55
+ M115,345 Q120,330 140,322 Q165,314 200,310 Q235,314 260,322
56
+ Q280,330 285,345 L290,400 L110,400Z
57
+ " fill="#1A1A2E" />
58
+ <!-- Sleeves (undershirt) -->
59
+ <path d="M115,345 Q105,338 90,340 L80,400 L110,400Z" fill="#1A1A2E" />
60
+ <path d="M285,345 Q295,338 310,340 L320,400 L290,400Z" fill="#1A1A2E" />
61
+ <!-- Tactical vest overlay -->
62
+ <path d="
63
+ M135,330 Q140,322 165,316 Q185,312 200,310 Q215,312 235,316
64
+ Q260,322 265,330
65
+ L270,400 L130,400Z
66
+ " fill="${c.clothing}" />
67
+ <!-- Vest collar / neckline -->
68
+ <path d="M170,314 Q185,308 200,306 Q215,308 230,314"
69
+ stroke="${c.clothing}" stroke-width="2" fill="none" />
70
+ <!-- Chest pockets -->
71
+ <rect x="145" y="342" width="35" height="28" rx="2" fill="${c.clothing}" stroke="${accent}" stroke-width="0.6" />
72
+ <rect x="220" y="342" width="35" height="28" rx="2" fill="${c.clothing}" stroke="${accent}" stroke-width="0.6" />
73
+ <!-- Pocket flaps -->
74
+ <path d="M145,342 L180,342" stroke="${accent}" stroke-width="1.2" />
75
+ <path d="M220,342 L255,342" stroke="${accent}" stroke-width="1.2" />
76
+ <!-- MOLLE webbing straps -->
77
+ <g stroke="${accent}" stroke-width="0.5" opacity="0.35">
78
+ <line x1="145" y1="378" x2="180" y2="378" />
79
+ <line x1="145" y1="384" x2="180" y2="384" />
80
+ <line x1="145" y1="390" x2="180" y2="390" />
81
+ <line x1="220" y1="378" x2="255" y2="378" />
82
+ <line x1="220" y1="384" x2="255" y2="384" />
83
+ <line x1="220" y1="390" x2="255" y2="390" />
84
+ </g>
85
+ <!-- Center zipper -->
86
+ <line x1="200" y1="316" x2="200" y2="400" stroke="${accent}" stroke-width="0.8" opacity="0.3" />
87
+ <!-- Status LED on collar -->
88
+ <circle cx="175" cy="318" r="1.5" fill="${neon}" opacity="0.6" />
89
+ `;
90
+ },
91
+ collar_rig: (c) => {
92
+ const accent = c.accent ?? "#4A4A5A";
93
+ const neon = c.neon ?? "#00E5FF";
94
+ return `
95
+ <!-- Slim bodysuit base -->
96
+ <path d="
97
+ M120,345 Q125,330 150,322 Q170,315 200,312 Q230,315 250,322
98
+ Q275,330 280,345
99
+ L285,400 L115,400Z
100
+ " fill="${c.clothing}" />
101
+ <!-- Sleeves -->
102
+ <path d="M120,345 Q110,338 95,340 L85,400 L115,400Z" fill="${c.clothing}" />
103
+ <path d="M280,345 Q290,338 305,340 L315,400 L285,400Z" fill="${c.clothing}" />
104
+ <!-- Bodysuit seam pattern -->
105
+ <g stroke="#FFFFFF06" stroke-width="0.6" fill="none">
106
+ <path d="M165,320 L155,400" />
107
+ <path d="M235,320 L245,400" />
108
+ <path d="M200,312 L200,400" />
109
+ </g>
110
+ <!-- Heavy collar rig — mechanical collar piece -->
111
+ <path d="
112
+ M148,310 Q155,295 175,288 Q200,282 225,288 Q245,295 252,310
113
+ L260,318 Q258,325 250,325
114
+ L150,325 Q142,325 140,318Z
115
+ " fill="${accent}" />
116
+ <path d="
117
+ M148,310 Q155,295 175,288 Q200,282 225,288 Q245,295 252,310
118
+ L260,318 Q258,325 250,325
119
+ L150,325 Q142,325 140,318Z
120
+ " fill="url(#gradient-metal)" opacity="0.4" />
121
+ <!-- Collar inner rim -->
122
+ <path d="M155,312 Q165,300 185,295 Q200,292 215,295 Q235,300 245,312"
123
+ stroke="#0A0A14" stroke-width="2" fill="none" />
124
+ <!-- Collar LED strips -->
125
+ <path d="M152,315 Q200,308 248,315"
126
+ stroke="${neon}" stroke-width="1" fill="none" opacity="0.35" />
127
+ <path d="M150,320 Q200,312 250,320"
128
+ stroke="${neon}" stroke-width="0.6" fill="none" opacity="0.2" />
129
+ <!-- Collar bolts -->
130
+ <circle cx="155" cy="310" r="2" fill="#555565" />
131
+ <circle cx="245" cy="310" r="2" fill="#555565" />
132
+ <circle cx="155" cy="322" r="1.5" fill="#444454" />
133
+ <circle cx="245" cy="322" r="1.5" fill="#444454" />
134
+ `;
135
+ },
136
+ };
137
+ //# sourceMappingURL=clothing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clothing.js","sourceRoot":"","sources":["../../../../src/styles/cyberpunk/parts/clothing.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAiC;IACpD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;QACd,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC;QACrC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;QACjC,OAAO;;;;;;;cAOG,CAAC,CAAC,QAAQ;;iEAEyC,CAAC,CAAC,QAAQ;;mEAER,CAAC,CAAC,QAAQ;;;;;cAK/D,CAAC,CAAC,QAAQ;;;;;;;;;;;;;;;;0CAgBkB,IAAI;0CACJ,IAAI;;iBAE7B,MAAM;;;;;;;KAOlB,CAAC;IACJ,CAAC;IAED,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;QACnB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC;QACrC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;QACjC,OAAO;;;;;;;;;;;;;;cAcG,CAAC,CAAC,QAAQ;;;gBAGR,CAAC,CAAC,QAAQ;;gEAEsC,CAAC,CAAC,QAAQ,aAAa,MAAM;gEAC7B,CAAC,CAAC,QAAQ,aAAa,MAAM;;0CAEnD,MAAM;0CACN,MAAM;;iBAE/B,MAAM;;;;;;;;;wDASiC,MAAM;;8CAEhB,IAAI;KAC7C,CAAC;IACJ,CAAC;IAED,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE;QAChB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC;QACrC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;QACjC,OAAO;;;;;;cAMG,CAAC,CAAC,QAAQ;;iEAEyC,CAAC,CAAC,QAAQ;mEACR,CAAC,CAAC,QAAQ;;;;;;;;;;;;cAY/D,MAAM;;;;;;;;;;;gBAWJ,IAAI;;gBAEJ,IAAI;;;;;;KAMf,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PartRenderer } from "../../../types.js";
2
+ export declare const variants: Record<string, PartRenderer>;
3
+ //# sourceMappingURL=effects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effects.d.ts","sourceRoot":"","sources":["../../../../src/styles/cyberpunk/parts/effects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAiCjD,CAAC"}
@@ -0,0 +1,33 @@
1
+ export const variants = {
2
+ none: () => "",
3
+ scanlines: () => `
4
+ <!-- Scanline overlay across entire frame -->
5
+ <rect width="400" height="400" fill="url(#scanlines)" />
6
+ <!-- Subtle edge darkening -->
7
+ <rect width="400" height="400" fill="black" opacity="0.03" />
8
+ `,
9
+ glitch: (c) => {
10
+ const neon = c.neon ?? "#00E5FF";
11
+ return `
12
+ <!-- Glitch effect — offset color bars -->
13
+ <g opacity="0.06">
14
+ <!-- Horizontal displacement bars -->
15
+ <rect x="0" y="85" width="400" height="3" fill="${neon}" />
16
+ <rect x="5" y="145" width="395" height="2" fill="#FF2D95" />
17
+ <rect x="-3" y="228" width="403" height="2" fill="${neon}" />
18
+ <rect x="2" y="310" width="398" height="3" fill="#FF2D95" />
19
+ <rect x="-2" y="365" width="402" height="1.5" fill="${neon}" />
20
+ </g>
21
+ <!-- Scanlines on top -->
22
+ <rect width="400" height="400" fill="url(#scanlines)" opacity="0.7" />
23
+ <!-- CRT corner vignette -->
24
+ <radialGradient id="fx-crt-vignette" cx="0.5" cy="0.5" r="0.7">
25
+ <stop offset="0%" stop-color="black" stop-opacity="0" />
26
+ <stop offset="85%" stop-color="black" stop-opacity="0" />
27
+ <stop offset="100%" stop-color="black" stop-opacity="0.15" />
28
+ </radialGradient>
29
+ <rect width="400" height="400" fill="url(#fx-crt-vignette)" />
30
+ `;
31
+ },
32
+ };
33
+ //# sourceMappingURL=effects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effects.js","sourceRoot":"","sources":["../../../../src/styles/cyberpunk/parts/effects.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAiC;IACpD,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE;IAEd,SAAS,EAAE,GAAG,EAAE,CAAC;;;;;GAKhB;IAED,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;QACZ,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;QACjC,OAAO;;;;wDAI6C,IAAI;;0DAEF,IAAI;;4DAEF,IAAI;;;;;;;;;;;KAW3D,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PartRenderer } from "../../../types.js";
2
+ export declare const variants: Record<string, PartRenderer>;
3
+ //# sourceMappingURL=eyebrows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eyebrows.d.ts","sourceRoot":"","sources":["../../../../src/styles/cyberpunk/parts/eyebrows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAcjD,CAAC"}
@@ -0,0 +1,15 @@
1
+ export const variants = {
2
+ sharp: (c) => `
3
+ <!-- Left eyebrow — angular sharp -->
4
+ <path d="M150,180 L165,174 L185,178 L190,176"
5
+ stroke="${c.hair}" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round" />
6
+ <!-- Right eyebrow — angular sharp -->
7
+ <path d="M210,176 L215,178 L235,174 L250,180"
8
+ stroke="${c.hair}" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round" />
9
+ <!-- Subtle brow shadow -->
10
+ <path d="M150,181 Q170,175 190,178" fill="black" opacity="0.04" />
11
+ <path d="M210,178 Q230,175 250,181" fill="black" opacity="0.04" />
12
+ `,
13
+ none: () => "",
14
+ };
15
+ //# sourceMappingURL=eyebrows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eyebrows.js","sourceRoot":"","sources":["../../../../src/styles/cyberpunk/parts/eyebrows.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAiC;IACpD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;;;gBAGA,CAAC,CAAC,IAAI;;;gBAGN,CAAC,CAAC,IAAI;;;;GAInB;IAED,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE;CACf,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PartRenderer } from "../../../types.js";
2
+ export declare const variants: Record<string, PartRenderer>;
3
+ //# sourceMappingURL=eyes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eyes.d.ts","sourceRoot":"","sources":["../../../../src/styles/cyberpunk/parts/eyes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CA8GjD,CAAC"}
@@ -0,0 +1,110 @@
1
+ export const variants = {
2
+ led: (c) => {
3
+ const neon = c.neon ?? "#00E5FF";
4
+ return `
5
+ <!-- Eye sockets — dark shadow -->
6
+ <ellipse cx="172" cy="200" rx="22" ry="15" fill="#00000025" />
7
+ <ellipse cx="228" cy="200" rx="22" ry="15" fill="#00000025" />
8
+ <!-- Sclera -->
9
+ <ellipse cx="172" cy="200" rx="20" ry="13" fill="#0D0D18" />
10
+ <ellipse cx="228" cy="200" rx="20" ry="13" fill="#0D0D18" />
11
+ <!-- Iris glow halo -->
12
+ <ellipse cx="172" cy="200" rx="14" ry="11" fill="${c.eyes}" opacity="0.15" />
13
+ <ellipse cx="228" cy="200" rx="14" ry="11" fill="${c.eyes}" opacity="0.15" />
14
+ <!-- Iris -->
15
+ <ellipse cx="172" cy="200" rx="10" ry="10" fill="${c.eyes}" />
16
+ <ellipse cx="228" cy="200" rx="10" ry="10" fill="${c.eyes}" />
17
+ <!-- Pupil -->
18
+ <circle cx="172" cy="200" r="4" fill="#0A0A14" />
19
+ <circle cx="228" cy="200" r="4" fill="#0A0A14" />
20
+ <!-- LED ring inside iris -->
21
+ <circle cx="172" cy="200" r="8" fill="none" stroke="${c.eyes}" stroke-width="0.8" opacity="0.7" />
22
+ <circle cx="228" cy="200" r="8" fill="none" stroke="${c.eyes}" stroke-width="0.8" opacity="0.7" />
23
+ <!-- Highlight sparks -->
24
+ <circle cx="176" cy="195" r="2.5" fill="white" opacity="0.9" />
25
+ <circle cx="232" cy="195" r="2.5" fill="white" opacity="0.9" />
26
+ <circle cx="169" cy="203" r="1.2" fill="white" opacity="0.5" />
27
+ <circle cx="225" cy="203" r="1.2" fill="white" opacity="0.5" />
28
+ <!-- Neon under-eye accent line -->
29
+ <path d="M155,212 Q172,218 190,212" stroke="${neon}" stroke-width="0.8" fill="none" opacity="0.3" />
30
+ <path d="M210,212 Q228,218 245,212" stroke="${neon}" stroke-width="0.8" fill="none" opacity="0.3" />
31
+ `;
32
+ },
33
+ visor: (c) => {
34
+ const neon = c.neon ?? "#00E5FF";
35
+ const accent = c.accent ?? "#4A4A5A";
36
+ return `
37
+ <!-- Visor band across eyes -->
38
+ <path d="
39
+ M142,188 L258,188
40
+ Q265,188 265,195
41
+ L265,210
42
+ Q265,217 258,217
43
+ L142,217
44
+ Q135,217 135,210
45
+ L135,195
46
+ Q135,188 142,188Z
47
+ " fill="${accent}" />
48
+ <!-- Visor glass -->
49
+ <path d="
50
+ M145,191 L255,191
51
+ Q259,191 259,195
52
+ L259,210
53
+ Q259,214 255,214
54
+ L145,214
55
+ Q141,214 141,210
56
+ L141,195
57
+ Q141,191 145,191Z
58
+ " fill="#0A0A20" opacity="0.9" />
59
+ <!-- Left eye glow through visor -->
60
+ <ellipse cx="172" cy="202" rx="16" ry="8" fill="${c.eyes}" opacity="0.4" />
61
+ <!-- Right eye glow through visor -->
62
+ <ellipse cx="228" cy="202" rx="16" ry="8" fill="${c.eyes}" opacity="0.4" />
63
+ <!-- Visor edge highlights -->
64
+ <line x1="145" y1="191" x2="255" y2="191" stroke="${neon}" stroke-width="0.6" opacity="0.4" />
65
+ <line x1="145" y1="214" x2="255" y2="214" stroke="${neon}" stroke-width="0.6" opacity="0.3" />
66
+ <!-- Visor side screws -->
67
+ <circle cx="139" cy="202" r="2" fill="#666676" />
68
+ <circle cx="261" cy="202" r="2" fill="#666676" />
69
+ <!-- HUD elements inside visor -->
70
+ <rect x="156" y="196" width="8" height="1" fill="${c.eyes}" opacity="0.3" />
71
+ <rect x="156" y="199" width="12" height="1" fill="${c.eyes}" opacity="0.2" />
72
+ <rect x="236" y="196" width="8" height="1" fill="${c.eyes}" opacity="0.3" />
73
+ <rect x="232" y="199" width="12" height="1" fill="${c.eyes}" opacity="0.2" />
74
+ `;
75
+ },
76
+ cyber: (c) => {
77
+ const neon = c.neon ?? "#00E5FF";
78
+ return `
79
+ <!-- Eye sockets -->
80
+ <ellipse cx="172" cy="200" rx="22" ry="15" fill="#00000020" />
81
+ <ellipse cx="228" cy="200" rx="22" ry="15" fill="#00000020" />
82
+ <!-- Sclera with slight glow -->
83
+ <ellipse cx="172" cy="200" rx="19" ry="12" fill="#0F0F1A" />
84
+ <ellipse cx="228" cy="200" rx="19" ry="12" fill="#0F0F1A" />
85
+ <!-- Outer iris ring -->
86
+ <circle cx="172" cy="200" r="10" fill="none" stroke="${c.eyes}" stroke-width="1.5" />
87
+ <circle cx="228" cy="200" r="10" fill="none" stroke="${c.eyes}" stroke-width="1.5" />
88
+ <!-- Inner iris fill -->
89
+ <circle cx="172" cy="200" r="8" fill="${c.eyes}" opacity="0.7" />
90
+ <circle cx="228" cy="200" r="8" fill="${c.eyes}" opacity="0.7" />
91
+ <!-- Digital pupil — hexagonal -->
92
+ <path d="M172,195 L176,197.5 L176,202.5 L172,205 L168,202.5 L168,197.5Z" fill="#0A0A14" />
93
+ <path d="M228,195 L232,197.5 L232,202.5 L228,205 L224,202.5 L224,197.5Z" fill="#0A0A14" />
94
+ <!-- Circuit traces in iris -->
95
+ <path d="M165,198 L168,198 L170,196" stroke="${c.eyes}" stroke-width="0.5" fill="none" opacity="0.5" />
96
+ <path d="M179,202 L176,202 L174,204" stroke="${c.eyes}" stroke-width="0.5" fill="none" opacity="0.5" />
97
+ <path d="M221,198 L224,198 L226,196" stroke="${c.eyes}" stroke-width="0.5" fill="none" opacity="0.5" />
98
+ <path d="M235,202 L232,202 L230,204" stroke="${c.eyes}" stroke-width="0.5" fill="none" opacity="0.5" />
99
+ <!-- Highlight -->
100
+ <circle cx="176" cy="196" r="2" fill="white" opacity="0.85" />
101
+ <circle cx="232" cy="196" r="2" fill="white" opacity="0.85" />
102
+ <circle cx="170" cy="203" r="1" fill="white" opacity="0.4" />
103
+ <circle cx="226" cy="203" r="1" fill="white" opacity="0.4" />
104
+ <!-- Subtle glow beneath -->
105
+ <ellipse cx="172" cy="200" rx="14" ry="10" fill="${neon}" opacity="0.06" filter="url(#soft-glow)" />
106
+ <ellipse cx="228" cy="200" rx="14" ry="10" fill="${neon}" opacity="0.06" filter="url(#soft-glow)" />
107
+ `;
108
+ },
109
+ };
110
+ //# sourceMappingURL=eyes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eyes.js","sourceRoot":"","sources":["../../../../src/styles/cyberpunk/parts/eyes.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAiC;IACpD,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;QACjC,OAAO;;;;;;;;uDAQ4C,CAAC,CAAC,IAAI;uDACN,CAAC,CAAC,IAAI;;uDAEN,CAAC,CAAC,IAAI;uDACN,CAAC,CAAC,IAAI;;;;;0DAKH,CAAC,CAAC,IAAI;0DACN,CAAC,CAAC,IAAI;;;;;;;kDAOd,IAAI;kDACJ,IAAI;KACjD,CAAC;IACJ,CAAC;IAED,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE;QACX,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;QACjC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC;QACrC,OAAO;;;;;;;;;;;cAWG,MAAM;;;;;;;;;;;;;sDAakC,CAAC,CAAC,IAAI;;sDAEN,CAAC,CAAC,IAAI;;wDAEJ,IAAI;wDACJ,IAAI;;;;;uDAKL,CAAC,CAAC,IAAI;wDACL,CAAC,CAAC,IAAI;uDACP,CAAC,CAAC,IAAI;wDACL,CAAC,CAAC,IAAI;KACzD,CAAC;IACJ,CAAC;IAED,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE;QACX,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;QACjC,OAAO;;;;;;;;2DAQgD,CAAC,CAAC,IAAI;2DACN,CAAC,CAAC,IAAI;;4CAErB,CAAC,CAAC,IAAI;4CACN,CAAC,CAAC,IAAI;;;;;mDAKC,CAAC,CAAC,IAAI;mDACN,CAAC,CAAC,IAAI;mDACN,CAAC,CAAC,IAAI;mDACN,CAAC,CAAC,IAAI;;;;;;;uDAOF,IAAI;uDACJ,IAAI;KACtD,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PartRenderer } from "../../../types.js";
2
+ export declare const variants: Record<string, PartRenderer>;
3
+ //# sourceMappingURL=face_mods.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"face_mods.d.ts","sourceRoot":"","sources":["../../../../src/styles/cyberpunk/parts/face_mods.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAyGjD,CAAC"}
@@ -0,0 +1,105 @@
1
+ export const variants = {
2
+ neural_port: (c) => {
3
+ const accent = c.accent ?? "#4A4A5A";
4
+ const neon = c.neon ?? "#00E5FF";
5
+ return `
6
+ <!-- Neural port — circular implant on right temple -->
7
+ <circle cx="255" cy="185" r="10" fill="${accent}" />
8
+ <circle cx="255" cy="185" r="10" fill="url(#gradient-metal)" opacity="0.5" />
9
+ <circle cx="255" cy="185" r="8" fill="#1A1A2E" />
10
+ <circle cx="255" cy="185" r="6" fill="#0D0D18" />
11
+ <!-- Port inner ring -->
12
+ <circle cx="255" cy="185" r="4.5" fill="none" stroke="${accent}" stroke-width="0.8" />
13
+ <!-- Port center LED -->
14
+ <circle cx="255" cy="185" r="2" fill="${neon}" opacity="0.8" />
15
+ <circle cx="255" cy="185" r="4" fill="${neon}" opacity="0.15" />
16
+ <!-- Connection traces from port -->
17
+ <g stroke="${neon}" stroke-width="0.6" fill="none" opacity="0.25">
18
+ <path d="M265,185 L272,185 L278,180" />
19
+ <path d="M265,188 L270,192 L275,192" />
20
+ <path d="M255,175 L255,168 L260,162" />
21
+ </g>
22
+ <!-- Port mounting screws -->
23
+ <circle cx="248" cy="178" r="1" fill="#666676" />
24
+ <circle cx="262" cy="178" r="1" fill="#666676" />
25
+ <circle cx="248" cy="192" r="1" fill="#666676" />
26
+ <circle cx="262" cy="192" r="1" fill="#666676" />
27
+ `;
28
+ },
29
+ led_tattoo: (c) => {
30
+ const neon = c.neon ?? "#00E5FF";
31
+ return `
32
+ <!-- LED tattoo — circuit-like lines on left cheek and temple -->
33
+ <g stroke="${neon}" stroke-width="1" fill="none" opacity="0.5" filter="url(#soft-glow)">
34
+ <!-- Temple circuit -->
35
+ <path d="M148,170 L142,175 L142,190 L148,195" />
36
+ <path d="M142,180 L135,180 L130,185" />
37
+ <!-- Cheek circuit -->
38
+ <path d="M155,230 L150,238 L152,248 L160,252" />
39
+ <path d="M150,238 L142,240" />
40
+ </g>
41
+ <!-- Circuit nodes (bright dots at junctions) -->
42
+ <g fill="${neon}" opacity="0.7">
43
+ <circle cx="148" cy="170" r="1.5" />
44
+ <circle cx="142" cy="180" r="1.2" />
45
+ <circle cx="148" cy="195" r="1.5" />
46
+ <circle cx="130" cy="185" r="1" />
47
+ <circle cx="155" cy="230" r="1.5" />
48
+ <circle cx="152" cy="248" r="1.2" />
49
+ <circle cx="160" cy="252" r="1.5" />
50
+ <circle cx="142" cy="240" r="1" />
51
+ </g>
52
+ <!-- Subtle glow halos at main nodes -->
53
+ <g fill="${neon}" opacity="0.1">
54
+ <circle cx="148" cy="170" r="5" />
55
+ <circle cx="148" cy="195" r="5" />
56
+ <circle cx="155" cy="230" r="5" />
57
+ <circle cx="160" cy="252" r="5" />
58
+ </g>
59
+ `;
60
+ },
61
+ jaw_plate: (c) => {
62
+ const accent = c.accent ?? "#4A4A5A";
63
+ const neon = c.neon ?? "#00E5FF";
64
+ return `
65
+ <!-- Cybernetic jaw plate — metal replacement on right jaw -->
66
+ <path d="
67
+ M218,272 Q225,265 240,260 Q252,258 258,265
68
+ L260,280 Q258,295 248,300
69
+ Q235,305 222,298
70
+ L218,290Z
71
+ " fill="${accent}" />
72
+ <path d="
73
+ M218,272 Q225,265 240,260 Q252,258 258,265
74
+ L260,280 Q258,295 248,300
75
+ Q235,305 222,298
76
+ L218,290Z
77
+ " fill="url(#gradient-metal)" opacity="0.5" />
78
+ <!-- Plate edge -->
79
+ <path d="
80
+ M218,272 Q225,265 240,260 Q252,258 258,265
81
+ L260,280 Q258,295 248,300
82
+ Q235,305 222,298
83
+ L218,290Z
84
+ " fill="none" stroke="${accent}" stroke-width="0.6" opacity="0.5" />
85
+ <!-- Plate seam lines -->
86
+ <path d="M222,275 L252,268" stroke="#00000020" stroke-width="0.5" />
87
+ <path d="M220,285 L255,280" stroke="#00000020" stroke-width="0.5" />
88
+ <!-- Rivets -->
89
+ <circle cx="225" cy="268" r="1.5" fill="#666676" />
90
+ <circle cx="248" cy="263" r="1.5" fill="#666676" />
91
+ <circle cx="255" cy="290" r="1.5" fill="#666676" />
92
+ <circle cx="228" cy="295" r="1.5" fill="#666676" />
93
+ <!-- LED strip along plate edge -->
94
+ <path d="M220,272 Q230,267 242,262"
95
+ stroke="${neon}" stroke-width="0.8" fill="none" opacity="0.3" />
96
+ <!-- Ventilation slots -->
97
+ <g stroke="#1A1A2E" stroke-width="1" opacity="0.4">
98
+ <line x1="232" y1="278" x2="245" y2="275" />
99
+ <line x1="230" y1="284" x2="248" y2="280" />
100
+ <line x1="228" y1="290" x2="246" y2="286" />
101
+ </g>
102
+ `;
103
+ },
104
+ };
105
+ //# sourceMappingURL=face_mods.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"face_mods.js","sourceRoot":"","sources":["../../../../src/styles/cyberpunk/parts/face_mods.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAiC;IACpD,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;QACjB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC;QACrC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;QACjC,OAAO;;6CAEkC,MAAM;;;;;4DAKS,MAAM;;4CAEtB,IAAI;4CACJ,IAAI;;iBAE/B,IAAI;;;;;;;;;;KAUhB,CAAC;IACJ,CAAC;IAED,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE;QAChB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;QACjC,OAAO;;iBAEM,IAAI;;;;;;;;;eASN,IAAI;;;;;;;;;;;eAWJ,IAAI;;;;;;KAMd,CAAC;IACJ,CAAC;IAED,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;QACf,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC;QACrC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;QACjC,OAAO;;;;;;;cAOG,MAAM;;;;;;;;;;;;;4BAaQ,MAAM;;;;;;;;;;;gBAWlB,IAAI;;;;;;;KAOf,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { PartRenderer } from "../../../types.js";
2
+ export declare const backVariants: Record<string, PartRenderer>;
3
+ export declare const frontVariants: Record<string, PartRenderer>;
4
+ //# sourceMappingURL=hair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hair.d.ts","sourceRoot":"","sources":["../../../../src/styles/cyberpunk/parts/hair.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAmGrD,CAAC;AAGF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CA6EtD,CAAC"}