kawaijs 1.0.0 → 1.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.
Files changed (48) hide show
  1. package/dist/commands/build.js +4 -4
  2. package/dist/commands/build.js.map +1 -1
  3. package/dist/commands/create.d.ts.map +1 -1
  4. package/dist/commands/create.js +3 -1
  5. package/dist/commands/create.js.map +1 -1
  6. package/dist/commands/dev.js +4 -4
  7. package/dist/commands/dev.js.map +1 -1
  8. package/dist/commands/validate.d.ts.map +1 -1
  9. package/dist/commands/validate.js +20 -2
  10. package/dist/commands/validate.js.map +1 -1
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +8 -3
  13. package/dist/config.js.map +1 -1
  14. package/dist/pwa.d.ts +1 -1
  15. package/dist/pwa.d.ts.map +1 -1
  16. package/dist/pwa.js +4 -3
  17. package/dist/pwa.js.map +1 -1
  18. package/dist/runtime-bundle.d.ts +1 -0
  19. package/dist/runtime-bundle.d.ts.map +1 -1
  20. package/dist/runtime-bundle.js +32 -15
  21. package/dist/runtime-bundle.js.map +1 -1
  22. package/package.json +8 -7
  23. package/templates/starter/README.md +11 -0
  24. package/templates/starter/game/assets/audio/bgm_ambient.mp3 +0 -0
  25. package/templates/starter/game/assets/audio/bgm_ambient.wav +0 -0
  26. package/templates/starter/game/assets/audio/bgm_upbeat.mp3 +0 -0
  27. package/templates/starter/game/assets/audio/bgm_upbeat.wav +0 -0
  28. package/templates/starter/game/assets/audio/sfx_click.mp3 +0 -0
  29. package/templates/starter/game/assets/audio/sfx_click.wav +0 -0
  30. package/templates/starter/game/assets/audio/sfx_sparkle.mp3 +0 -0
  31. package/templates/starter/game/assets/audio/sfx_sparkle.wav +0 -0
  32. package/templates/starter/game/assets/backgrounds/cg_celebration.svg +150 -0
  33. package/templates/starter/game/assets/backgrounds/cg_sunset_promise.svg +70 -0
  34. package/templates/starter/game/assets/backgrounds/classroom.svg +47 -0
  35. package/templates/starter/game/assets/backgrounds/rooftop.svg +86 -0
  36. package/templates/starter/game/assets/backgrounds/sunset_courtyard.svg +75 -0
  37. package/templates/starter/game/assets/characters/kaori/happy.svg +40 -0
  38. package/templates/starter/game/assets/characters/kaori/normal.svg +46 -0
  39. package/templates/starter/game/assets/characters/kaori/smug.svg +38 -0
  40. package/templates/starter/game/assets/characters/kaori/thinking.svg +38 -0
  41. package/templates/starter/game/assets/characters/yumia/excited.svg +51 -0
  42. package/templates/starter/game/assets/characters/yumia/happy.svg +48 -0
  43. package/templates/starter/game/assets/characters/yumia/normal.svg +41 -0
  44. package/templates/starter/game/assets/characters/yumia/sad.svg +41 -0
  45. package/templates/starter/game/favicon.svg +8 -0
  46. package/templates/starter/game/script.kawa +160 -0
  47. package/templates/starter/game/style.css +41 -0
  48. package/templates/starter/package.json +14 -0
@@ -0,0 +1,150 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
2
+ <defs>
3
+ <linearGradient id="celSky" x1="0" y1="0" x2="1" y2="1">
4
+ <stop offset="0%" stop-color="#1e1b4b"/>
5
+ <stop offset="35%" stop-color="#4c0519"/>
6
+ <stop offset="70%" stop-color="#831843"/>
7
+ <stop offset="100%" stop-color="#042f2e"/>
8
+ </linearGradient>
9
+ <radialGradient id="centerGlow" cx="50%" cy="40%" r="55%">
10
+ <stop offset="0%" stop-color="#f43f5e" stop-opacity="0.55"/>
11
+ <stop offset="55%" stop-color="#fb7185" stop-opacity="0.15"/>
12
+ <stop offset="100%" stop-color="#000000" stop-opacity="0"/>
13
+ </radialGradient>
14
+ <linearGradient id="goldBanner" x1="0" y1="0" x2="1" y2="0">
15
+ <stop offset="0%" stop-color="#f59e0b"/>
16
+ <stop offset="50%" stop-color="#fef08a"/>
17
+ <stop offset="100%" stop-color="#f59e0b"/>
18
+ </linearGradient>
19
+ <linearGradient id="yumiaHair" x1="0" y1="0" x2="0" y2="1">
20
+ <stop offset="0%" stop-color="#fb7185"/>
21
+ <stop offset="100%" stop-color="#e11d48"/>
22
+ </linearGradient>
23
+ <linearGradient id="yumiaUniform" x1="0" y1="0" x2="0" y2="1">
24
+ <stop offset="0%" stop-color="#1e293b"/>
25
+ <stop offset="100%" stop-color="#0f172a"/>
26
+ </linearGradient>
27
+ <linearGradient id="kaoriHair" x1="0" y1="0" x2="0" y2="1">
28
+ <stop offset="0%" stop-color="#38bdf8"/>
29
+ <stop offset="100%" stop-color="#0284c7"/>
30
+ </linearGradient>
31
+ <linearGradient id="kaoriUniform" x1="0" y1="0" x2="0" y2="1">
32
+ <stop offset="0%" stop-color="#312e81"/>
33
+ <stop offset="100%" stop-color="#1e1b4b"/>
34
+ </linearGradient>
35
+ <filter id="glow" x="-20%" y="-20%" width="140%" height="140%">
36
+ <feGaussianBlur stdDeviation="8" result="blur"/>
37
+ <feMerge>
38
+ <feMergeNode in="blur"/>
39
+ <feMergeNode in="SourceGraphic"/>
40
+ </feMerge>
41
+ </filter>
42
+ <filter id="softShadow" x="-30%" y="-10%" width="160%" height="130%">
43
+ <feDropShadow dx="0" dy="18" stdDeviation="16" flood-color="#000" flood-opacity="0.45"/>
44
+ </filter>
45
+ </defs>
46
+
47
+ <rect width="1920" height="1080" fill="url(#celSky)"/>
48
+ <rect width="1920" height="1080" fill="url(#centerGlow)"/>
49
+
50
+ <g opacity="0.18" fill="#ffffff">
51
+ <polygon points="960,420 0,0 150,0"/>
52
+ <polygon points="960,420 400,0 600,0"/>
53
+ <polygon points="960,420 850,0 1070,0"/>
54
+ <polygon points="960,420 1320,0 1520,0"/>
55
+ <polygon points="960,420 1770,0 1920,0"/>
56
+ <polygon points="960,420 1920,280 1920,430"/>
57
+ <polygon points="960,420 1920,620 1920,780"/>
58
+ <polygon points="960,420 0,280 0,430"/>
59
+ <polygon points="960,420 0,620 0,780"/>
60
+ </g>
61
+
62
+ <g filter="url(#glow)">
63
+ <rect x="250" y="180" width="30" height="12" rx="4" fill="#f43f5e" transform="rotate(25 250 180)"/>
64
+ <rect x="420" y="120" width="28" height="10" rx="3" fill="#38bdf8" transform="rotate(-35 420 120)"/>
65
+ <rect x="750" y="150" width="32" height="14" rx="4" fill="#facc15" transform="rotate(15 750 150)"/>
66
+ <rect x="1180" y="110" width="30" height="12" rx="4" fill="#a855f7" transform="rotate(-20 1180 110)"/>
67
+ <rect x="1450" y="170" width="26" height="10" rx="3" fill="#34d399" transform="rotate(40 1450 170)"/>
68
+ <rect x="1680" y="240" width="34" height="14" rx="4" fill="#f43f5e" transform="rotate(-15 1680 240)"/>
69
+ <rect x="180" y="380" width="28" height="12" rx="3" fill="#facc15" transform="rotate(55 180 380)"/>
70
+ <rect x="1750" y="420" width="30" height="12" rx="4" fill="#38bdf8" transform="rotate(-45 1750 420)"/>
71
+ <path d="M 960,150 L 975,190 L 1020,195 L 985,225 L 995,270 L 960,245 L 925,270 L 935,225 L 900,195 L 945,190 Z" fill="#fef08a" opacity="0.95"/>
72
+ <path d="M 320,260 L 330,285 L 360,290 L 335,310 L 342,340 L 320,325 L 298,340 L 305,310 L 280,290 L 310,285 Z" fill="#38bdf8" opacity="0.85"/>
73
+ <path d="M 1600,260 L 1610,285 L 1640,290 L 1615,310 L 1622,340 L 1600,325 L 1578,340 L 1585,310 L 1560,290 L 1590,285 Z" fill="#f43f5e" opacity="0.85"/>
74
+ </g>
75
+
76
+ <!-- Banner -->
77
+ <g transform="translate(960, 250)">
78
+ <rect x="-420" y="-55" width="840" height="110" rx="20" fill="rgba(15, 23, 42, 0.88)" stroke="url(#goldBanner)" stroke-width="4"/>
79
+ <text x="0" y="5" font-family="'Segoe UI', system-ui, sans-serif" font-size="42" font-weight="900" fill="url(#goldBanner)" text-anchor="middle" letter-spacing="2">EVENT CG - PROJECT COMPLETE!</text>
80
+ <text x="0" y="38" font-family="'Segoe UI', system-ui, sans-serif" font-size="18" font-weight="600" fill="#94a3b8" text-anchor="middle" letter-spacing="4">KAWAIJS GAME DEVELOPMENT CLUB</text>
81
+ </g>
82
+
83
+ <!-- YUMIA (left) - matches character sprite: rose hair, ahoge, white collar, red ribbon -->
84
+ <g transform="translate(300, 280)" filter="url(#softShadow)">
85
+ <!-- back hair -->
86
+ <path d="M80 180 C40 450, 70 720, 120 860 C170 720, 140 450, 160 210 Z" fill="url(#yumiaHair)"/>
87
+ <path d="M440 180 C480 450, 450 720, 400 860 C350 720, 380 450, 360 210 Z" fill="url(#yumiaHair)"/>
88
+ <!-- body -->
89
+ <path d="M180 420 L340 420 L390 980 L130 980 Z" fill="url(#yumiaUniform)"/>
90
+ <polygon points="210,420 260,520 310,420 360,420 260,555 160,420" fill="#ffffff"/>
91
+ <polygon points="240,505 280,505 300,585 260,550 220,585" fill="#f43f5e"/>
92
+ <!-- neck + face -->
93
+ <rect x="235" y="350" width="50" height="80" fill="#fed7aa"/>
94
+ <ellipse cx="260" cy="290" rx="105" ry="120" fill="#ffedd5"/>
95
+ <ellipse cx="190" cy="330" rx="20" ry="11" fill="#f43f5e" opacity="0.4"/>
96
+ <ellipse cx="330" cy="330" rx="20" ry="11" fill="#f43f5e" opacity="0.4"/>
97
+ <!-- happy eyes + smile -->
98
+ <path d="M185 285 Q205 262 225 285" fill="none" stroke="#881337" stroke-width="7" stroke-linecap="round"/>
99
+ <path d="M295 285 Q315 262 335 285" fill="none" stroke="#881337" stroke-width="7" stroke-linecap="round"/>
100
+ <path d="M235 345 Q260 385 285 345 Z" fill="#e11d48"/>
101
+ <!-- front hair + bangs + ahoge -->
102
+ <path d="M155 210 C170 100, 350 100, 365 210 C340 245, 310 280, 285 245 C260 290, 240 290, 215 245 C190 280, 160 245, 155 210 Z" fill="url(#yumiaHair)"/>
103
+ <path d="M145 200 C120 320, 135 420, 170 470 C150 400, 150 310, 160 225 Z" fill="url(#yumiaHair)"/>
104
+ <path d="M375 200 C400 320, 385 420, 350 470 C370 400, 370 310, 360 225 Z" fill="url(#yumiaHair)"/>
105
+ <path d="M260 115 Q285 35 325 60 Q295 70 268 115" fill="url(#yumiaHair)"/>
106
+ <!-- wave hand -->
107
+ <g transform="translate(-20, 470) rotate(-18)">
108
+ <ellipse cx="40" cy="40" rx="38" ry="48" fill="#fed7aa"/>
109
+ <path d="M20 10 Q10 -25 35 -30 Q45 -5 40 15" fill="#fed7aa"/>
110
+ <path d="M45 5 Q55 -30 75 -25 Q70 0 55 18" fill="#fed7aa"/>
111
+ </g>
112
+ <!-- name plate -->
113
+ <rect x="170" y="1000" width="180" height="42" rx="21" fill="rgba(15,23,42,0.75)" stroke="#f43f5e" stroke-width="2"/>
114
+ <text x="260" y="1028" text-anchor="middle" font-family="'Segoe UI', system-ui, sans-serif" font-size="22" font-weight="800" fill="#fda4af" letter-spacing="2">YUMIA</text>
115
+ </g>
116
+
117
+ <!-- KAORI (right) - matches sprite: cyan hair, glasses, pale collar, blue tie -->
118
+ <g transform="translate(1120, 280)" filter="url(#softShadow)">
119
+ <!-- back hair halo -->
120
+ <ellipse cx="260" cy="300" rx="150" ry="160" fill="url(#kaoriHair)"/>
121
+ <path d="M90 220 C50 420, 80 700, 130 860 C175 700, 150 420, 160 250 Z" fill="url(#kaoriHair)"/>
122
+ <path d="M430 220 C470 420, 440 700, 390 860 C345 700, 370 420, 360 250 Z" fill="url(#kaoriHair)"/>
123
+ <!-- body -->
124
+ <path d="M180 420 L340 420 L390 980 L130 980 Z" fill="url(#kaoriUniform)"/>
125
+ <polygon points="220,420 260,510 300,420 350,420 260,550 150,420" fill="#e0f2fe"/>
126
+ <polygon points="245,485 275,485 288,590 260,620 232,590" fill="#0284c7"/>
127
+ <!-- neck + face -->
128
+ <rect x="235" y="350" width="50" height="80" fill="#fde68a"/>
129
+ <ellipse cx="260" cy="290" rx="105" ry="120" fill="#fef3c7"/>
130
+ <ellipse cx="190" cy="330" rx="18" ry="10" fill="#38bdf8" opacity="0.4"/>
131
+ <ellipse cx="330" cy="330" rx="18" ry="10" fill="#38bdf8" opacity="0.4"/>
132
+ <!-- glasses -->
133
+ <rect x="175" y="262" width="70" height="46" rx="9" fill="none" stroke="#0f172a" stroke-width="5"/>
134
+ <rect x="275" y="262" width="70" height="46" rx="9" fill="none" stroke="#0f172a" stroke-width="5"/>
135
+ <line x1="245" y1="285" x2="275" y2="285" stroke="#0f172a" stroke-width="5"/>
136
+ <!-- happy eyes + smile -->
137
+ <path d="M190 285 Q210 265 228 285" fill="none" stroke="#0369a1" stroke-width="6" stroke-linecap="round"/>
138
+ <path d="M292 285 Q310 265 328 285" fill="none" stroke="#0369a1" stroke-width="6" stroke-linecap="round"/>
139
+ <path d="M235 350 Q260 375 285 350" fill="none" stroke="#0284c7" stroke-width="5" stroke-linecap="round"/>
140
+ <!-- bangs -->
141
+ <path d="M145 210 C170 100, 350 100, 375 210 C340 235, 310 260, 275 235 C245 270, 225 270, 195 235 C170 260, 145 235, 145 210 Z" fill="url(#kaoriHair)"/>
142
+ <path d="M135 205 C110 320, 130 420, 170 460 C145 390, 145 320, 150 225 Z" fill="url(#kaoriHair)"/>
143
+ <path d="M385 205 C410 320, 390 420, 350 460 C375 390, 375 320, 370 225 Z" fill="url(#kaoriHair)"/>
144
+ <!-- name plate -->
145
+ <rect x="170" y="1000" width="180" height="42" rx="21" fill="rgba(15,23,42,0.75)" stroke="#38bdf8" stroke-width="2"/>
146
+ <text x="260" y="1028" text-anchor="middle" font-family="'Segoe UI', system-ui, sans-serif" font-size="22" font-weight="800" fill="#7dd3fc" letter-spacing="2">KAORI</text>
147
+ </g>
148
+
149
+ <rect width="1920" height="1080" fill="none" stroke="rgba(244, 63, 94, 0.4)" stroke-width="16"/>
150
+ </svg>
@@ -0,0 +1,70 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
2
+ <defs>
3
+ <linearGradient id="promiseSky" x1="0" y1="0" x2="0" y2="1">
4
+ <stop offset="0%" stop-color="#311042"/>
5
+ <stop offset="30%" stop-color="#701a75"/>
6
+ <stop offset="60%" stop-color="#c2410c"/>
7
+ <stop offset="85%" stop-color="#f97316"/>
8
+ <stop offset="100%" stop-color="#fef08a"/>
9
+ </linearGradient>
10
+ <radialGradient id="sunBloom" cx="65%" cy="60%" r="50%">
11
+ <stop offset="0%" stop-color="#fffbeb" stop-opacity="1"/>
12
+ <stop offset="25%" stop-color="#fde047" stop-opacity="0.8"/>
13
+ <stop offset="55%" stop-color="#ea580c" stop-opacity="0.3"/>
14
+ <stop offset="100%" stop-color="#000000" stop-opacity="0"/>
15
+ </radialGradient>
16
+ <linearGradient id="horizonGlow" x1="0" y1="0" x2="1" y2="0">
17
+ <stop offset="0%" stop-color="#ec4899"/>
18
+ <stop offset="50%" stop-color="#f59e0b"/>
19
+ <stop offset="100%" stop-color="#8b5cf6"/>
20
+ </linearGradient>
21
+ </defs>
22
+
23
+ <!-- Sky -->
24
+ <rect width="1920" height="1080" fill="url(#promiseSky)"/>
25
+ <rect width="1920" height="1080" fill="url(#sunBloom)"/>
26
+
27
+ <!-- Clouds glowing in sunset -->
28
+ <path d="M 0,320 Q 300,260 650,330 Q 950,250 1350,340 Q 1650,280 1920,350 L 1920,480 L 0,480 Z" fill="#9d174d" opacity="0.35"/>
29
+ <path d="M 0,420 Q 400,360 850,430 Q 1250,370 1700,440 L 1920,440 L 1920,540 L 0,540 Z" fill="#c2410c" opacity="0.4"/>
30
+
31
+ <!-- Distant City Skyline & Mountains -->
32
+ <polygon points="0,680 200,580 450,680 700,540 1000,680 1300,590 1600,690 1920,620 1920,800 0,800" fill="#4a044e" opacity="0.75"/>
33
+
34
+ <!-- Rooftop Railing & Balcony Platform -->
35
+ <rect x="0" y="720" width="1920" height="360" fill="#18181b"/>
36
+ <!-- Glowing Horizon Line -->
37
+ <rect x="0" y="718" width="1920" height="4" fill="url(#horizonGlow)"/>
38
+
39
+ <!-- Railing Bars -->
40
+ <g stroke="#3f3f46" stroke-width="6" opacity="0.85">
41
+ <line x1="0" y1="780" x2="1920" y2="780"/>
42
+ <line x1="0" y1="860" x2="1920" y2="860"/>
43
+ <!-- Vertical Posts -->
44
+ <line x1="120" y1="720" x2="120" y2="940"/>
45
+ <line x1="320" y1="720" x2="320" y2="940"/>
46
+ <line x1="520" y1="720" x2="520" y2="940"/>
47
+ <line x1="720" y1="720" x2="720" y2="940"/>
48
+ <line x1="920" y1="720" x2="920" y2="940"/>
49
+ <line x1="1120" y1="720" x2="1120" y2="940"/>
50
+ <line x1="1320" y1="720" x2="1320" y2="940"/>
51
+ <line x1="1520" y1="720" x2="1520" y2="940"/>
52
+ <line x1="1720" y1="720" x2="1720" y2="940"/>
53
+ </g>
54
+
55
+ <!-- Atmospheric Cherry Blossom Petals in the Wind -->
56
+ <g fill="#fda4af" opacity="0.8">
57
+ <path d="M 280,450 C 270,430 300,420 310,440 C 315,455 295,470 280,450 Z" transform="rotate(25 280 450)"/>
58
+ <path d="M 520,380 C 510,360 540,350 550,370 C 555,385 535,400 520,380 Z" transform="rotate(-40 520 380)"/>
59
+ <path d="M 850,520 C 840,500 870,490 880,510 C 885,525 865,540 850,520 Z" transform="rotate(15 850 520)"/>
60
+ <path d="M 1200,420 C 1190,400 1220,390 1230,410 C 1235,425 1215,440 1200,420 Z" transform="rotate(65 1200 420)"/>
61
+ <path d="M 1520,490 C 1510,470 1540,460 1550,480 C 1555,495 1535,510 1520,490 Z" transform="rotate(-20 1520 490)"/>
62
+ <path d="M 1750,380 C 1740,360 1770,350 1780,370 C 1785,385 1765,400 1750,380 Z" transform="rotate(35 1750 380)"/>
63
+ </g>
64
+
65
+ <!-- Title Badge in Top Left -->
66
+ <g transform="translate(100, 100)">
67
+ <rect x="0" y="0" width="480" height="70" rx="14" fill="rgba(15, 23, 42, 0.75)" stroke="#fb7185" stroke-width="2"/>
68
+ <text x="24" y="44" font-family="'Plus Jakarta Sans', 'Segoe UI', sans-serif" font-size="24" font-weight="800" fill="#ffffff" letter-spacing="1">EVENT CG • THE SUNSET PROMISE</text>
69
+ </g>
70
+ </svg>
@@ -0,0 +1,47 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
2
+ <defs>
3
+ <linearGradient id="skyGrad" x1="0" y1="0" x2="0" y2="1">
4
+ <stop offset="0%" stop-color="#38bdf8"/>
5
+ <stop offset="60%" stop-color="#bae6fd"/>
6
+ <stop offset="100%" stop-color="#fef08a"/>
7
+ </linearGradient>
8
+ <linearGradient id="wallGrad" x1="0" y1="0" x2="0" y2="1">
9
+ <stop offset="0%" stop-color="#f8fafc"/>
10
+ <stop offset="100%" stop-color="#cbd5e1"/>
11
+ </linearGradient>
12
+ <linearGradient id="floorGrad" x1="0" y1="0" x2="0" y2="1">
13
+ <stop offset="0%" stop-color="#b45309"/>
14
+ <stop offset="100%" stop-color="#78350f"/>
15
+ </linearGradient>
16
+ </defs>
17
+
18
+ <!-- Sky & Window View -->
19
+ <rect x="0" y="0" width="1920" height="1080" fill="#f1f5f9"/>
20
+ <rect x="150" y="100" width="900" height="550" fill="url(#skyGrad)"/>
21
+
22
+ <!-- Clouds -->
23
+ <circle cx="350" cy="250" r="60" fill="#ffffff" opacity="0.8"/>
24
+ <circle cx="420" cy="240" r="80" fill="#ffffff" opacity="0.9"/>
25
+ <circle cx="500" cy="260" r="50" fill="#ffffff" opacity="0.8"/>
26
+
27
+ <!-- Classroom Wall -->
28
+ <rect x="0" y="0" width="1920" height="700" fill="url(#wallGrad)" fill-opacity="0.9"/>
29
+
30
+ <!-- Large Window Frame -->
31
+ <rect x="140" y="90" width="920" height="570" fill="none" stroke="#64748b" stroke-width="16"/>
32
+ <line x1="600" y1="90" x2="600" y2="660" stroke="#64748b" stroke-width="12"/>
33
+ <line x1="140" y1="375" x2="1060" y2="375" stroke="#64748b" stroke-width="12"/>
34
+
35
+ <!-- Blackboard -->
36
+ <rect x="1150" y="120" width="680" height="380" rx="8" fill="#1e293b" stroke="#78350f" stroke-width="14"/>
37
+ <text x="1200" y="240" fill="#f8fafc" font-family="sans-serif" font-size="42" font-weight="bold">Welcome to Kawaijs!</text>
38
+ <text x="1200" y="320" fill="#38bdf8" font-family="sans-serif" font-size="28">Web-native Visual Novel Engine</text>
39
+
40
+ <!-- Wooden Floor -->
41
+ <polygon points="0,700 1920,700 1920,1080 0,1080" fill="url(#floorGrad)"/>
42
+
43
+ <!-- Floor Plank Lines -->
44
+ <line x1="0" y1="780" x2="1920" y2="780" stroke="#451a03" stroke-width="3" opacity="0.4"/>
45
+ <line x1="0" y1="880" x2="1920" y2="880" stroke="#451a03" stroke-width="3" opacity="0.4"/>
46
+ <line x1="0" y1="980" x2="1920" y2="980" stroke="#451a03" stroke-width="3" opacity="0.4"/>
47
+ </svg>
@@ -0,0 +1,86 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
2
+ <defs>
3
+ <linearGradient id="nightSky" x1="0" y1="0" x2="0" y2="1">
4
+ <stop offset="0%" stop-color="#020617"/>
5
+ <stop offset="60%" stop-color="#0f172a"/>
6
+ <stop offset="100%" stop-color="#1e1b4b"/>
7
+ </linearGradient>
8
+ <linearGradient id="moonGlow" x1="0" y1="0" x2="1" y2="1">
9
+ <stop offset="0%" stop-color="#ffffff"/>
10
+ <stop offset="100%" stop-color="#e0f2fe"/>
11
+ </linearGradient>
12
+ <linearGradient id="roofFloor" x1="0" y1="0" x2="0" y2="1">
13
+ <stop offset="0%" stop-color="#334155"/>
14
+ <stop offset="100%" stop-color="#0f172a"/>
15
+ </linearGradient>
16
+ </defs>
17
+
18
+ <!-- Night Sky -->
19
+ <rect x="0" y="0" width="1920" height="1080" fill="url(#nightSky)"/>
20
+
21
+ <!-- Stars -->
22
+ <g fill="#ffffff">
23
+ <circle cx="200" cy="150" r="2.5" opacity="0.9"/>
24
+ <circle cx="350" cy="80" r="1.5" opacity="0.6"/>
25
+ <circle cx="520" cy="220" r="2" opacity="0.8"/>
26
+ <circle cx="780" cy="110" r="3" opacity="0.9"/>
27
+ <circle cx="950" cy="180" r="1.5" opacity="0.7"/>
28
+ <circle cx="1120" cy="90" r="2" opacity="0.8"/>
29
+ <circle cx="1300" cy="240" r="2.5" opacity="0.9"/>
30
+ <circle cx="1580" cy="130" r="1.5" opacity="0.6"/>
31
+ <circle cx="1750" cy="210" r="3" opacity="0.95"/>
32
+ <circle cx="140" cy="300" r="2" opacity="0.5"/>
33
+ <circle cx="450" cy="340" r="1.5" opacity="0.7"/>
34
+ </g>
35
+
36
+ <!-- Glowing Crescent/Full Moon -->
37
+ <circle cx="1550" cy="220" r="90" fill="url(#moonGlow)"/>
38
+ <circle cx="1550" cy="220" r="140" fill="#38bdf8" opacity="0.15"/>
39
+
40
+ <!-- City Skyline in Distance -->
41
+ <g fill="#090d16">
42
+ <rect x="100" y="480" width="140" height="240"/>
43
+ <rect x="280" y="420" width="180" height="300"/>
44
+ <rect x="500" y="520" width="120" height="200"/>
45
+ <rect x="650" y="380" width="220" height="340"/>
46
+ <rect x="910" y="460" width="160" height="260"/>
47
+ <rect x="1100" y="400" width="200" height="320"/>
48
+ <rect x="1340" y="500" width="150" height="220"/>
49
+ <rect x="1520" y="440" width="190" height="280"/>
50
+ <rect x="1740" y="490" width="130" height="230"/>
51
+ </g>
52
+
53
+ <!-- Distant City Lights -->
54
+ <g fill="#fef08a" opacity="0.6">
55
+ <circle cx="140" cy="520" r="2"/>
56
+ <circle cx="180" cy="560" r="2"/>
57
+ <circle cx="320" cy="460" r="2.5" fill="#38bdf8"/>
58
+ <circle cx="360" cy="510" r="2"/>
59
+ <circle cx="400" cy="580" r="2"/>
60
+ <circle cx="700" cy="420" r="2.5" fill="#f43f5e"/>
61
+ <circle cx="750" cy="480" r="2"/>
62
+ <circle cx="800" cy="540" r="2"/>
63
+ <circle cx="1150" cy="440" r="2"/>
64
+ <circle cx="1220" cy="510" r="2.5" fill="#38bdf8"/>
65
+ <circle cx="1560" cy="480" r="2"/>
66
+ <circle cx="1620" cy="550" r="2"/>
67
+ </g>
68
+
69
+ <!-- Rooftop Safety Fence / Mesh -->
70
+ <line x1="0" y1="620" x2="1920" y2="620" stroke="#475569" stroke-width="8"/>
71
+ <line x1="0" y1="520" x2="1920" y2="520" stroke="#475569" stroke-width="6"/>
72
+ <line x1="0" y1="420" x2="1920" y2="420" stroke="#475569" stroke-width="6"/>
73
+ <!-- Fence Poles -->
74
+ <g stroke="#334155" stroke-width="8">
75
+ <line x1="160" y1="380" x2="160" y2="700"/>
76
+ <line x1="480" y1="380" x2="480" y2="700"/>
77
+ <line x1="800" y1="380" x2="800" y2="700"/>
78
+ <line x1="1120" y1="380" x2="1120" y2="700"/>
79
+ <line x1="1440" y1="380" x2="1440" y2="700"/>
80
+ <line x1="1760" y1="380" x2="1760" y2="700"/>
81
+ </g>
82
+
83
+ <!-- Rooftop Concrete Ground -->
84
+ <polygon points="0,680 1920,680 1920,1080 0,1080" fill="url(#roofFloor)"/>
85
+ <rect x="0" y="660" width="1920" height="30" fill="#1e293b"/>
86
+ </svg>
@@ -0,0 +1,75 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
2
+ <defs>
3
+ <linearGradient id="sunsetSky" x1="0" y1="0" x2="0" y2="1">
4
+ <stop offset="0%" stop-color="#4c1d95"/>
5
+ <stop offset="35%" stop-color="#be185d"/>
6
+ <stop offset="70%" stop-color="#fb923c"/>
7
+ <stop offset="100%" stop-color="#fef08a"/>
8
+ </linearGradient>
9
+ <linearGradient id="sunGrad" x1="0" y1="0" x2="0" y2="1">
10
+ <stop offset="0%" stop-color="#ffffff"/>
11
+ <stop offset="100%" stop-color="#f59e0b"/>
12
+ </linearGradient>
13
+ <linearGradient id="groundGrad" x1="0" y1="0" x2="0" y2="1">
14
+ <stop offset="0%" stop-color="#7c2d12"/>
15
+ <stop offset="100%" stop-color="#451a03"/>
16
+ </linearGradient>
17
+ <linearGradient id="schoolWall" x1="0" y1="0" x2="1" y2="0">
18
+ <stop offset="0%" stop-color="#701a75"/>
19
+ <stop offset="100%" stop-color="#831843"/>
20
+ </linearGradient>
21
+ </defs>
22
+
23
+ <!-- Sky -->
24
+ <rect x="0" y="0" width="1920" height="1080" fill="url(#sunsetSky)"/>
25
+
26
+ <!-- Glowing Setting Sun -->
27
+ <circle cx="1400" cy="500" r="140" fill="url(#sunGrad)" opacity="0.9"/>
28
+ <circle cx="1400" cy="500" r="220" fill="#fbbf24" opacity="0.25"/>
29
+
30
+ <!-- Distant Mountains -->
31
+ <polygon points="0,700 350,520 700,700" fill="#581c87" opacity="0.6"/>
32
+ <polygon points="500,700 900,480 1350,700" fill="#4a044e" opacity="0.7"/>
33
+ <polygon points="1100,700 1550,540 1920,680 1920,700" fill="#3b0764" opacity="0.8"/>
34
+
35
+ <!-- School Building Silhouette (Left) -->
36
+ <rect x="0" y="320" width="650" height="480" fill="url(#schoolWall)"/>
37
+ <!-- Windows -->
38
+ <g fill="#fef08a" opacity="0.85">
39
+ <rect x="60" y="380" width="80" height="60" rx="4"/>
40
+ <rect x="180" y="380" width="80" height="60" rx="4"/>
41
+ <rect x="300" y="380" width="80" height="60" rx="4"/>
42
+ <rect x="420" y="380" width="80" height="60" rx="4"/>
43
+
44
+ <rect x="60" y="480" width="80" height="60" rx="4"/>
45
+ <rect x="180" y="480" width="80" height="60" rx="4"/>
46
+ <rect x="300" y="480" width="80" height="60" rx="4"/>
47
+ <rect x="420" y="480" width="80" height="60" rx="4"/>
48
+
49
+ <rect x="60" y="580" width="80" height="60" rx="4"/>
50
+ <rect x="180" y="580" width="80" height="60" rx="4"/>
51
+ <rect x="300" y="580" width="80" height="60" rx="4"/>
52
+ <rect x="420" y="580" width="80" height="60" rx="4"/>
53
+ </g>
54
+
55
+ <!-- Courtyard Ground -->
56
+ <polygon points="0,720 1920,680 1920,1080 0,1080" fill="url(#groundGrad)"/>
57
+ <path d="M 300,1080 Q 900,850 1400,680 L 1550,680 Q 1100,880 700,1080 Z" fill="#b45309" opacity="0.7"/>
58
+
59
+ <!-- Sakura Tree Silhouette (Right) -->
60
+ <path d="M 1650,1080 C 1650,900 1620,820 1680,720 C 1720,660 1680,620 1710,540 C 1670,580 1630,680 1610,750 C 1580,850 1560,940 1540,1080 Z" fill="#292524"/>
61
+ <!-- Sakura Foliage -->
62
+ <circle cx="1680" cy="460" r="160" fill="#f43f5e" opacity="0.85"/>
63
+ <circle cx="1540" cy="480" r="130" fill="#fb7185" opacity="0.9"/>
64
+ <circle cx="1800" cy="500" r="140" fill="#fda4af" opacity="0.8"/>
65
+ <circle cx="1660" cy="380" r="110" fill="#fda4af" opacity="0.95"/>
66
+
67
+ <!-- Floating Sakura Petals -->
68
+ <g fill="#fecdd3" opacity="0.8">
69
+ <ellipse cx="1200" cy="550" rx="14" ry="7" transform="rotate(25 1200 550)"/>
70
+ <ellipse cx="1050" cy="620" rx="12" ry="6" transform="rotate(-35 1050 620)"/>
71
+ <ellipse cx="850" cy="710" rx="15" ry="8" transform="rotate(45 850 710)"/>
72
+ <ellipse cx="600" cy="780" rx="13" ry="7" transform="rotate(15 600 780)"/>
73
+ <ellipse cx="1400" cy="670" rx="16" ry="8" transform="rotate(-20 1400 670)"/>
74
+ </g>
75
+ </svg>
@@ -0,0 +1,40 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 1000" width="600" height="1000">
2
+ <defs>
3
+ <linearGradient id="kaoriHair" x1="0" y1="0" x2="0" y2="1">
4
+ <stop offset="0%" stop-color="#38bdf8"/>
5
+ <stop offset="100%" stop-color="#0284c7"/>
6
+ </linearGradient>
7
+ <linearGradient id="kaoriUniform" x1="0" y1="0" x2="0" y2="1">
8
+ <stop offset="0%" stop-color="#312e81"/>
9
+ <stop offset="100%" stop-color="#1e1b4b"/>
10
+ </linearGradient>
11
+ </defs>
12
+
13
+ <path d="M220 450 L380 450 L420 900 L180 900 Z" fill="url(#kaoriUniform)"/>
14
+ <polygon points="270,450 300,520 330,450 370,450 300,550 230,450" fill="#e0f2fe"/>
15
+ <polygon points="290,490 310,490 318,570 300,590 282,570" fill="#0284c7"/>
16
+
17
+ <rect x="275" y="380" width="50" height="80" fill="#fde68a"/>
18
+ <ellipse cx="300" cy="330" rx="140" ry="150" fill="url(#kaoriHair)"/>
19
+ <ellipse cx="300" cy="320" rx="100" ry="115" fill="#fef3c7"/>
20
+
21
+ <!-- Blush -->
22
+ <ellipse cx="235" cy="355" rx="16" ry="8" fill="#38bdf8" opacity="0.4"/>
23
+ <ellipse cx="365" cy="355" rx="16" ry="8" fill="#38bdf8" opacity="0.4"/>
24
+
25
+ <!-- Glasses -->
26
+ <rect x="220" y="295" width="65" height="42" rx="8" fill="none" stroke="#0f172a" stroke-width="4"/>
27
+ <rect x="315" y="295" width="65" height="42" rx="8" fill="none" stroke="#0f172a" stroke-width="4"/>
28
+ <line x1="285" y1="315" x2="315" y2="315" stroke="#0f172a" stroke-width="4"/>
29
+
30
+ <!-- Happy Curved Eyes -->
31
+ <path d="M235 315 Q252 300 270 315" fill="none" stroke="#0369a1" stroke-width="5" stroke-linecap="round"/>
32
+ <path d="M330 315 Q347 300 365 315" fill="none" stroke="#0369a1" stroke-width="5" stroke-linecap="round"/>
33
+
34
+ <!-- Gentle Smile -->
35
+ <path d="M285 365 Q300 385 315 365" fill="none" stroke="#0284c7" stroke-width="4" stroke-linecap="round"/>
36
+
37
+ <path d="M190 250 C210 160, 390 160, 410 250 C380 270, 350 290, 320 270 C290 300, 270 300, 250 270 C230 290, 200 270, 190 250 Z" fill="url(#kaoriHair)"/>
38
+ <path d="M180 250 C160 350, 180 430, 210 450 C190 390, 190 330, 195 260 Z" fill="url(#kaoriHair)"/>
39
+ <path d="M420 250 C440 350, 420 430, 390 450 C410 390, 410 330, 405 260 Z" fill="url(#kaoriHair)"/>
40
+ </svg>
@@ -0,0 +1,46 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 1000" width="600" height="1000">
2
+ <defs>
3
+ <linearGradient id="kaoriHair" x1="0" y1="0" x2="0" y2="1">
4
+ <stop offset="0%" stop-color="#38bdf8"/>
5
+ <stop offset="100%" stop-color="#0284c7"/>
6
+ </linearGradient>
7
+ <linearGradient id="kaoriUniform" x1="0" y1="0" x2="0" y2="1">
8
+ <stop offset="0%" stop-color="#312e81"/>
9
+ <stop offset="100%" stop-color="#1e1b4b"/>
10
+ </linearGradient>
11
+ </defs>
12
+
13
+ <!-- Body / School Uniform & Cardigan -->
14
+ <path d="M220 450 L380 450 L420 900 L180 900 Z" fill="url(#kaoriUniform)"/>
15
+ <!-- Light Blue Shirt / Tie -->
16
+ <polygon points="270,450 300,520 330,450 370,450 300,550 230,450" fill="#e0f2fe"/>
17
+ <polygon points="290,490 310,490 318,570 300,590 282,570" fill="#0284c7"/>
18
+
19
+ <!-- Neck -->
20
+ <rect x="275" y="380" width="50" height="80" fill="#fde68a"/>
21
+
22
+ <!-- Short Bob Hair (Back) -->
23
+ <ellipse cx="300" cy="330" rx="140" ry="150" fill="url(#kaoriHair)"/>
24
+
25
+ <!-- Face -->
26
+ <ellipse cx="300" cy="320" rx="100" ry="115" fill="#fef3c7"/>
27
+
28
+ <!-- Glasses -->
29
+ <rect x="220" y="295" width="65" height="42" rx="8" fill="none" stroke="#0f172a" stroke-width="4"/>
30
+ <rect x="315" y="295" width="65" height="42" rx="8" fill="none" stroke="#0f172a" stroke-width="4"/>
31
+ <line x1="285" y1="315" x2="315" y2="315" stroke="#0f172a" stroke-width="4"/>
32
+
33
+ <!-- Calm Blue Eyes -->
34
+ <circle cx="252" cy="316" r="14" fill="#0369a1"/>
35
+ <circle cx="250" cy="312" r="5" fill="#ffffff"/>
36
+ <circle cx="347" cy="316" r="14" fill="#0369a1"/>
37
+ <circle cx="345" cy="312" r="5" fill="#ffffff"/>
38
+
39
+ <!-- Neutral Mouth -->
40
+ <line x1="285" y1="375" x2="315" y2="375" stroke="#92400e" stroke-width="4" stroke-linecap="round"/>
41
+
42
+ <!-- Hair (Front Bangs) -->
43
+ <path d="M190 250 C210 160, 390 160, 410 250 C380 270, 350 290, 320 270 C290 300, 270 300, 250 270 C230 290, 200 270, 190 250 Z" fill="url(#kaoriHair)"/>
44
+ <path d="M180 250 C160 350, 180 430, 210 450 C190 390, 190 330, 195 260 Z" fill="url(#kaoriHair)"/>
45
+ <path d="M420 250 C440 350, 420 430, 390 450 C410 390, 410 330, 405 260 Z" fill="url(#kaoriHair)"/>
46
+ </svg>
@@ -0,0 +1,38 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 1000" width="600" height="1000">
2
+ <defs>
3
+ <linearGradient id="kaoriHair" x1="0" y1="0" x2="0" y2="1">
4
+ <stop offset="0%" stop-color="#38bdf8"/>
5
+ <stop offset="100%" stop-color="#0284c7"/>
6
+ </linearGradient>
7
+ <linearGradient id="kaoriUniform" x1="0" y1="0" x2="0" y2="1">
8
+ <stop offset="0%" stop-color="#312e81"/>
9
+ <stop offset="100%" stop-color="#1e1b4b"/>
10
+ </linearGradient>
11
+ </defs>
12
+
13
+ <path d="M220 450 L380 450 L420 900 L180 900 Z" fill="url(#kaoriUniform)"/>
14
+ <polygon points="270,450 300,520 330,450 370,450 300,550 230,450" fill="#e0f2fe"/>
15
+ <polygon points="290,490 310,490 318,570 300,590 282,570" fill="#0284c7"/>
16
+
17
+ <rect x="275" y="380" width="50" height="80" fill="#fde68a"/>
18
+ <ellipse cx="300" cy="330" rx="140" ry="150" fill="url(#kaoriHair)"/>
19
+ <ellipse cx="300" cy="320" rx="100" ry="115" fill="#fef3c7"/>
20
+
21
+ <!-- Glasses -->
22
+ <rect x="220" y="295" width="65" height="42" rx="8" fill="none" stroke="#0f172a" stroke-width="4"/>
23
+ <rect x="315" y="295" width="65" height="42" rx="8" fill="none" stroke="#0f172a" stroke-width="4"/>
24
+ <line x1="285" y1="315" x2="315" y2="315" stroke="#0f172a" stroke-width="4"/>
25
+
26
+ <!-- Smug Half-Closed Eyes -->
27
+ <path d="M230 315 Q252 305 270 312" fill="none" stroke="#0369a1" stroke-width="5" stroke-linecap="round"/>
28
+ <path d="M330 312 Q348 305 370 315" fill="none" stroke="#0369a1" stroke-width="5" stroke-linecap="round"/>
29
+ <circle cx="250" cy="318" r="6" fill="#0369a1"/>
30
+ <circle cx="350" cy="318" r="6" fill="#0369a1"/>
31
+
32
+ <!-- Smug Wavy Cat Mouth -->
33
+ <path d="M285 365 Q295 380 302 368 Q310 380 320 365" fill="none" stroke="#0369a1" stroke-width="4" stroke-linecap="round"/>
34
+
35
+ <path d="M190 250 C210 160, 390 160, 410 250 C380 270, 350 290, 320 270 C290 300, 270 300, 250 270 C230 290, 200 270, 190 250 Z" fill="url(#kaoriHair)"/>
36
+ <path d="M180 250 C160 350, 180 430, 210 450 C190 390, 190 330, 195 260 Z" fill="url(#kaoriHair)"/>
37
+ <path d="M420 250 C440 350, 420 430, 390 450 C410 390, 410 330, 405 260 Z" fill="url(#kaoriHair)"/>
38
+ </svg>
@@ -0,0 +1,38 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 1000" width="600" height="1000">
2
+ <defs>
3
+ <linearGradient id="kaoriHair" x1="0" y1="0" x2="0" y2="1">
4
+ <stop offset="0%" stop-color="#38bdf8"/>
5
+ <stop offset="100%" stop-color="#0284c7"/>
6
+ </linearGradient>
7
+ <linearGradient id="kaoriUniform" x1="0" y1="0" x2="0" y2="1">
8
+ <stop offset="0%" stop-color="#312e81"/>
9
+ <stop offset="100%" stop-color="#1e1b4b"/>
10
+ </linearGradient>
11
+ </defs>
12
+
13
+ <path d="M220 450 L380 450 L420 900 L180 900 Z" fill="url(#kaoriUniform)"/>
14
+ <polygon points="270,450 300,520 330,450 370,450 300,550 230,450" fill="#e0f2fe"/>
15
+ <polygon points="290,490 310,490 318,570 300,590 282,570" fill="#0284c7"/>
16
+
17
+ <rect x="275" y="380" width="50" height="80" fill="#fde68a"/>
18
+ <ellipse cx="300" cy="330" rx="140" ry="150" fill="url(#kaoriHair)"/>
19
+ <ellipse cx="300" cy="320" rx="100" ry="115" fill="#fef3c7"/>
20
+
21
+ <!-- Glasses Pushed Slightly Up / Glint -->
22
+ <rect x="220" y="290" width="65" height="42" rx="8" fill="rgba(255,255,255,0.4)" stroke="#0f172a" stroke-width="4"/>
23
+ <rect x="315" y="290" width="65" height="42" rx="8" fill="rgba(255,255,255,0.4)" stroke="#0f172a" stroke-width="4"/>
24
+ <line x1="285" y1="310" x2="315" y2="310" stroke="#0f172a" stroke-width="4"/>
25
+
26
+ <!-- Analytical / Looking to the side -->
27
+ <circle cx="260" cy="310" r="13" fill="#0369a1"/>
28
+ <circle cx="263" cy="307" r="4" fill="#ffffff"/>
29
+ <circle cx="355" cy="310" r="13" fill="#0369a1"/>
30
+ <circle cx="358" cy="307" r="4" fill="#ffffff"/>
31
+
32
+ <!-- Pensive Mouth -->
33
+ <ellipse cx="300" cy="375" rx="8" ry="6" fill="#0369a1" opacity="0.6"/>
34
+
35
+ <path d="M190 250 C210 160, 390 160, 410 250 C380 270, 350 290, 320 270 C290 300, 270 300, 250 270 C230 290, 200 270, 190 250 Z" fill="url(#kaoriHair)"/>
36
+ <path d="M180 250 C160 350, 180 430, 210 450 C190 390, 190 330, 195 260 Z" fill="url(#kaoriHair)"/>
37
+ <path d="M420 250 C440 350, 420 430, 390 450 C410 390, 410 330, 405 260 Z" fill="url(#kaoriHair)"/>
38
+ </svg>