dsh-kingdom 2.0.0 → 3.2.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.
- package/ASSETS_NOTICE.md +22 -22
- package/README.md +246 -243
- package/THIRD_PARTY_NOTICES.md +92 -92
- package/docs/DSH-KINGDOM-3.0-ANNOUNCEMENT.md +13 -0
- package/docs/V2.0-RELEASE-NOTES.md +30 -30
- package/docs/V2.0-USER-GUIDE.md +74 -74
- package/docs/V3.0-RELEASE-NOTES.md +21 -0
- package/docs/V3.0-USER-GUIDE.md +33 -0
- package/docs/V3.1-RELEASE-NOTES.md +76 -0
- package/docs/V3.2-RELEASE-NOTES.md +103 -0
- package/lib/core/binding.js +167 -60
- package/lib/core/binding.js.map +1 -1
- package/lib/core/db.js +582 -546
- package/lib/core/db.js.map +1 -1
- package/lib/core/delivery-ack.js +1356 -0
- package/lib/core/delivery-ack.js.map +1 -0
- package/lib/core/delivery-change.js +1237 -0
- package/lib/core/delivery-change.js.map +1 -0
- package/lib/core/owner-binding-intent.js +14 -25
- package/lib/core/owner-binding-intent.js.map +1 -1
- package/lib/core/owner-window.js +698 -23
- package/lib/core/owner-window.js.map +1 -1
- package/lib/core/task-service.js +144 -5
- package/lib/core/task-service.js.map +1 -1
- package/lib/core/territory.js +43 -9
- package/lib/core/territory.js.map +1 -1
- package/lib/gui/assets/characters/chancellor-idle.svg +67 -67
- package/lib/gui/assets/characters/chancellor-sleeping.svg +67 -67
- package/lib/gui/assets/characters/chancellor-thinking.svg +67 -67
- package/lib/gui/assets/characters/chancellor-working.svg +67 -67
- package/lib/gui/assets/characters/knight-redraw-r1-idle.svg +67 -67
- package/lib/gui/assets/characters/knight-redraw-r1-sleeping.svg +67 -67
- package/lib/gui/assets/characters/knight-redraw-r1-thinking.svg +67 -67
- package/lib/gui/assets/characters/knight-redraw-r1-working.svg +67 -67
- package/lib/gui/assets/characters/supervisor-idle.svg +67 -67
- package/lib/gui/assets/characters/supervisor-sleeping.svg +67 -67
- package/lib/gui/assets/characters/supervisor-thinking.svg +67 -67
- package/lib/gui/assets/characters/supervisor-working.svg +67 -67
- package/lib/gui/console-app.js +7 -1
- package/lib/gui/console-app.js.map +1 -1
- package/lib/gui/contract.js +6 -0
- package/lib/gui/contract.js.map +1 -1
- package/lib/gui/control-contract.js +3 -2
- package/lib/gui/control-contract.js.map +1 -1
- package/lib/gui/owner-control.js +114 -4
- package/lib/gui/owner-control.js.map +1 -1
- package/lib/gui/owner-ui.js +645 -183
- package/lib/gui/owner-ui.js.map +1 -1
- package/lib/gui/server.js +109 -109
- package/lib/gui/snapshot.js +127 -4
- package/lib/gui/snapshot.js.map +1 -1
- package/lib/gui/visual-assets.js +37 -21
- package/lib/gui/visual-assets.js.map +1 -1
- package/lib/gui/visual-system.js +269 -269
- package/lib/gui/workbench-ui.js +549 -136
- package/lib/gui/workbench-ui.js.map +1 -1
- package/lib/gui/workbench.js +133 -0
- package/lib/gui/workbench.js.map +1 -1
- package/lib/index.js +392 -40
- package/lib/index.js.map +1 -1
- package/lib/types/core/binding.d.ts +29 -0
- package/lib/types/core/db.d.ts +14 -0
- package/lib/types/core/delivery-ack.d.ts +688 -0
- package/lib/types/core/delivery-change.d.ts +381 -0
- package/lib/types/core/owner-binding-intent.d.ts +9 -1
- package/lib/types/core/owner-window.d.ts +237 -3
- package/lib/types/core/task-service.d.ts +22 -0
- package/lib/types/core/territory.d.ts +18 -3
- package/lib/types/gui/contract.d.ts +162 -1
- package/lib/types/gui/owner-control.d.ts +61 -1
- package/lib/types/gui/snapshot.d.ts +8 -0
- package/lib/types/gui/visual-assets.d.ts +16 -0
- package/lib/types/gui/workbench.d.ts +47 -1
- package/lib/types/index.d.ts +60 -1
- package/lib/types/worker/governed-executor.d.ts +15 -0
- package/lib/worker/governed-executor.js +21 -0
- package/lib/worker/governed-executor.js.map +1 -1
- package/package.json +80 -75
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 112" width="80" height="112" preserveAspectRatio="xMidYMid meet" role="img" focusable="false" aria-labelledby="character-title character-desc" data-role="knight" data-state="idle">
|
|
2
|
-
<title id="character-title">Kingdom 执行者 · idle</title>
|
|
3
|
-
<desc id="character-desc">护额、分片护甲、短披风和工具。重心就位,抬臂检视工具,回收待续。克制的连续关节动作,支持减少动态效果。</desc>
|
|
4
|
-
<metadata>{"visualVersion":"kingdom-motion-r4-gui","role":"knight","state":"idle","cycleSeconds":8,"viewBox":[0,0,80,112],"origin":"Owner character redesign authorized 2026-09-08"}</metadata>
|
|
5
|
-
<style><![CDATA[
|
|
6
|
-
/* SVG-wide coordinates make every joint pivot explicit and stable. */
|
|
7
|
-
svg{overflow:hidden;--phase:-2.6s}
|
|
8
|
-
.weight,.breath,.head,.cape,.arm-far,.forearm-far,.arm-near,.forearm-near,.hat-follow{transform-box:view-box}
|
|
9
|
-
.weight{transform-origin:40px 99px;animation:weight 8s cubic-bezier(.42,0,.58,1) infinite}
|
|
10
|
-
.breath{transform-origin:40px 87px;animation:breathe 4s cubic-bezier(.37,0,.63,1) var(--phase) infinite}
|
|
11
|
-
.head{transform-origin:40px 44px;animation:idle-look 8s cubic-bezier(.4,0,.4,1) infinite}
|
|
12
|
-
.cape{transform-origin:40px 48px;animation:cloth 8s cubic-bezier(.4,0,.5,1) infinite}
|
|
13
|
-
.arm-far{transform-origin:27px 51px}.forearm-far{transform-origin:22px 64px}
|
|
14
|
-
.arm-near{transform-origin:54px 51px}.forearm-near{transform-origin:58px 63px}
|
|
15
|
-
.hat-follow{transform-origin:49px 18px;animation:hat-settle 8s ease-in-out infinite}
|
|
16
|
-
.eyes-open{transform-box:fill-box;transform-origin:center;animation:blink 8s linear var(--phase) infinite}
|
|
17
|
-
.eyes-closed{display:none}
|
|
18
|
-
svg:is([data-state="idle"],[data-state="ready"],[data-state="available"]) .arm-near{animation:idle-shoulder 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
19
|
-
svg:is([data-state="idle"],[data-state="ready"],[data-state="available"]) .forearm-near{animation:idle-hand 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
20
|
-
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .weight{animation-name:work-weight}
|
|
21
|
-
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .head{animation-name:work-look}
|
|
22
|
-
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .arm-far{animation:steady-page 8s ease-in-out infinite}
|
|
23
|
-
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .arm-near{animation:knight-shoulder 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
24
|
-
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .forearm-near{animation:knight-gesture 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
25
|
-
svg:is([data-state="thinking"],[data-state="confused"],[data-state="planning"],[data-state="waiting-input"]) .head{transform:rotate(-5deg);animation:consider 8s ease-in-out infinite}
|
|
26
|
-
svg:is([data-state="thinking"],[data-state="confused"],[data-state="planning"],[data-state="waiting-input"]) .forearm-near{transform:rotate(-18deg);animation:thinking-hand 8s ease-in-out infinite}
|
|
27
|
-
svg:is([data-state="thinking"],[data-state="confused"],[data-state="planning"],[data-state="waiting-input"]) .arm-near{transform:rotate(-6deg);animation:thinking-shoulder 8s ease-in-out infinite}
|
|
28
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .head{transform:rotate(9deg) translateY(1px);animation:rest-head 8s ease-in-out infinite}
|
|
29
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .arm-near{transform:rotate(9deg)}
|
|
30
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .arm-far{transform:rotate(-5deg)}
|
|
31
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .forearm-near{transform:rotate(8deg)}
|
|
32
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .eyes-open{display:none}
|
|
33
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .eyes-closed{display:inline}
|
|
34
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .weight{animation:none;transform:rotate(.4deg)}
|
|
35
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .breath{animation-duration:4s}
|
|
36
|
-
svg:is([data-state="offline"],[data-state="stopped"],[data-state="absent"]) .figure,svg:is([data-state="offline"],[data-state="stopped"],[data-state="absent"]) .ground-shadow{display:none}
|
|
37
|
-
@keyframes breathe{0%,100%{transform:scale(1,1)}42%{transform:scale(1.01,1.028)}68%{transform:scale(1.005,1.013)}}
|
|
38
|
-
@keyframes weight{0%,100%{transform:rotate(0deg)}20%,35%{transform:rotate(-6deg)}64%,78%{transform:rotate(5deg)}}
|
|
39
|
-
@keyframes work-weight{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(3deg)}28%,39%{transform:rotate(-8deg)}51%{transform:rotate(-3deg)}63%,72%{transform:rotate(4deg)}83%,91%{transform:rotate(-5deg)}}
|
|
40
|
-
@keyframes cloth{0%,100%{transform:rotate(0deg)}16%{transform:rotate(-4deg)}33%,43%{transform:rotate(9deg)}53%{transform:rotate(3deg)}71%,83%{transform:rotate(-7deg)}93%{transform:rotate(3deg)}}
|
|
41
|
-
@keyframes hat-settle{0%,100%{transform:rotate(0deg)}29%{transform:rotate(-12deg)}43%{transform:rotate(5deg)}57%,79%{transform:rotate(0deg)}88%{transform:rotate(-6deg)}}
|
|
42
|
-
@keyframes idle-look{0%,10%,100%{transform:rotate(0deg) translateY(0)}23%,37%{transform:rotate(-16deg) translateY(3px)}49%,66%{transform:rotate(0deg) translateY(0)}80%,90%{transform:rotate(12deg) translateY(2px)}}
|
|
43
|
-
@keyframes idle-shoulder{0%,12%,100%{transform:rotate(0deg)}25%,37%{transform:rotate(-28deg)}49%,68%{transform:rotate(0deg)}80%,89%{transform:rotate(12deg)}}
|
|
44
|
-
@keyframes idle-hand{0%,12%,100%{transform:rotate(0deg)}25%,37%{transform:rotate(14deg)}49%,68%{transform:rotate(0deg)}80%,89%{transform:rotate(-18deg)}}
|
|
45
|
-
@keyframes blink{0%,27%,30%,72%,75%,100%{transform:scaleY(1)}28.5%,73.5%{transform:scaleY(.12)}}
|
|
46
|
-
@keyframes work-look{0%,8%,100%{transform:rotate(0deg) translateY(0)}27%,40%{transform:rotate(20deg) translateY(5px)}54%,68%{transform:rotate(6deg) translateY(1px)}82%,91%{transform:rotate(-13deg) translateY(3px)}}
|
|
47
|
-
@keyframes steady-page{0%,100%{transform:rotate(0deg)}16%{transform:rotate(6deg)}28%,43%{transform:rotate(-8deg)}56%,73%{transform:rotate(0deg)}83%,91%{transform:rotate(-4deg)}}
|
|
48
|
-
@keyframes chancellor-shoulder{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(10deg)}28%,38%{transform:rotate(-58deg)}48%{transform:rotate(-38deg)}60%,71%{transform:rotate(0deg)}83%,90%{transform:rotate(-34deg)}}
|
|
49
|
-
@keyframes chancellor-gesture{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(-12deg)}28%,38%{transform:rotate(28deg)}48%{transform:rotate(18deg)}60%,71%{transform:rotate(0deg)}83%,90%{transform:rotate(14deg)}}
|
|
50
|
-
@keyframes supervisor-shoulder{0%,8%,100%{transform:rotate(0deg)}16%{transform:rotate(-12deg)}27%,41%{transform:rotate(22deg)}54%,67%{transform:rotate(-30deg)}82%,91%{transform:rotate(16deg)}}
|
|
51
|
-
@keyframes supervisor-gesture{0%,8%,100%{transform:rotate(0deg)}17%{transform:rotate(15deg)}26%{transform:rotate(-32deg)}32%{transform:rotate(8deg)}40%{transform:rotate(-26deg)}54%,67%{transform:rotate(34deg)}81%{transform:rotate(-24deg)}90%{transform:rotate(-4deg)}}
|
|
52
|
-
@keyframes knight-shoulder{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(12deg)}28%,38%{transform:rotate(-70deg)}47%{transform:rotate(-44deg)}59%,69%{transform:rotate(0deg)}82%,90%{transform:rotate(-42deg)}}
|
|
53
|
-
@keyframes knight-gesture{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(-14deg)}28%,38%{transform:rotate(36deg)}47%{transform:rotate(18deg)}59%,69%{transform:rotate(0deg)}82%,90%{transform:rotate(22deg)}}
|
|
54
|
-
@keyframes consider{0%,100%{transform:rotate(-5deg) translateY(0)}20%,38%{transform:rotate(-23deg) translateY(7px)}58%,77%{transform:rotate(10deg) translateY(2px)}}
|
|
55
|
-
@keyframes thinking-shoulder{0%,100%{transform:rotate(-6deg)}22%,40%{transform:rotate(-32deg)}60%,78%{transform:rotate(8deg)}}
|
|
56
|
-
@keyframes thinking-hand{0%,100%{transform:rotate(-18deg)}22%,40%{transform:rotate(-40deg)}60%,78%{transform:rotate(10deg)}}
|
|
57
|
-
@keyframes rest-head{0%,100%{transform:rotate(9deg) translateY(1px)}40%,49%{transform:rotate(23deg) translateY(5px)}65%,77%{transform:rotate(5deg) translateY(.5px)}}
|
|
58
|
-
/* The console supplies page-clock phase to preserve motion across node reconstruction. */
|
|
59
|
-
.weight,.head,.cape,.hat-follow,.arm-far,.arm-near,.forearm-near{animation-delay:var(--kingdom-motion-offset,0s)}
|
|
60
|
-
.breath,.eyes-open{animation-delay:calc(var(--kingdom-motion-offset,0s) + var(--phase))}
|
|
61
|
-
/* Keep the state-specific resting pose. No scripts, SMIL, filters or external assets. */
|
|
62
|
-
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
|
|
63
|
-
]]></style>
|
|
64
|
-
<g stroke="#28352f" stroke-width="2.1" stroke-linejoin="round" stroke-linecap="round">
|
|
65
|
-
<ellipse class="ground-shadow" cx="40" cy="104" rx="23" ry="3" fill="#07140e" opacity=".2" stroke="none"/>
|
|
66
|
-
<g class="figure" data-part="figure"><g class="feet" data-part="feet"><path d="M27 91h12v12H23v-6l4-2Z" fill="#655446" /><path d="M43 91h12l2 7v5H41v-8Z" fill="#655446" /><path d="M24 100h14 M43 100h13" fill="none" stroke="#a28b65" stroke-width="2"/></g><g class="weight" data-part="weight"><g class="cape" data-part="cape"><path d="M24 46Q39 41 56 47L62 81L53 86L40 81L21 87L18 76Z" fill="#415e73" /><path d="M22 52l-3 31l5 7l5-42Z" fill="#a8c2cf" stroke="none" opacity=".45"/></g><g class="breath" data-part="breath"><g class="arm-far" data-part="arm-far"><path d="M27 49Q21 47 18 56L18 65l9 1l5-9Z" fill="#658ba3" /><path d="M18 61h10v6H18Z" fill="#a8c2cf" /><g class="forearm-far" data-part="forearm-far"><path d="M18 65l8-1l3 18l-10 1Z" fill="#415e73" /><path d="M18 80h11v5H18Z" fill="#d4b570" /><path d="M16 65q-4 2-2 6l7 1l1-5Z" fill="#efc69a" /></g></g><g class="torso" data-part="torso"><path d="M27 46l13-3l14 4l2 34l-10 7H33l-9-7Z" fill="#415e73" /><path d="M30 48l10 4l12-4l1 23l-13 5l-13-5Z" fill="#658ba3" /><path d="M31 49l9 3l10-3v6l-10 3l-10-3Z" fill="#a8c2cf" stroke="none"/><path d="M26 75h29v7H26Z" fill="#6c5642" /><path d="M37 74h8v9h-8Z" fill="#d4b570" /><path d="M28 83l10 1l-1 13H25Z" fill="#a8c2cf" /><path d="M44 84l11-1l3 14H44Z" fill="#a8c2cf" /><path d="M28 90h9 M45 90h9" fill="none" stroke="#415e73" stroke-width="2"/></g><g class="head" data-part="head"><path d="M27 24 Q27 16 40 16 Q53 16 53 25 L52 35 Q50 44 40 45 Q30 44 28 35Z" fill="#efc69a" /><path d="M48 25 L52 24 L51 36 Q48 42 41 43 L40 39 Q47 36 48 25Z" fill="#cf9970" stroke="none"/><path d="M26 28 Q21 26 24 33 L28 34 M53 28 Q58 26 56 33 L52 34" fill="#efc69a" /><g class="eyes-open" data-part="eyes-open"><path d="M32 29v2 M45 29v2" fill="none" stroke="#28352f" stroke-width="2.6"/></g><g class="eyes-closed" data-part="eyes-closed"><path d="M30.5 30q3 2.5 6 0 M43 30q3 2.5 6 0" fill="none" stroke="#28352f" stroke-width="1.7"/></g><path d="M30 25.5l6-.5 M43 25l5 .7" fill="none" stroke="#28352f" stroke-width="2.3"/><path d="M40 30l-2 5h4" fill="#cf9970" stroke="none"/><path d="M36 38q4 2 7-1" fill="none" stroke="#76533a" stroke-width="1.7"/><g class="hat-follow" data-part="hat-follow"><path d="M40 14Q43 5 53 8L48 16Z" fill="#658ba3" /></g><path d="M24 27V23Q25 10 40 10Q55 11 56 24v9l-7-3V24L40 21L31 24v10l-7-1Z" fill="#a8c2cf" /><path d="M40 11v10l9 3v6l7 3V23Q53 11 40 11Z" fill="#7d9bab" stroke="none"/><path d="M22 25h35v5H22Z" fill="#415e73" /><path d="M37 11h5v14h-5Z" fill="#d4b570" stroke="none"/></g><g class="arm-near" data-part="arm-near"><path d="M53 47q10 0 12 12l-7 6l-9-10Z" fill="#a8c2cf" /><g class="forearm-near" data-part="forearm-near"><path d="M59 60l8 7l-3 11l-9-5Z" fill="#658ba3" /><path d="M57 68l9 2l-1 7l-10-3Z" fill="#a8c2cf" /><g class="tool" data-part="tool"><path d="M62 72l4-22l4 1l-4 22Z" fill="#95724b" /><path d="M61 47l13 2l-1 9l-13-2Z" fill="#a8c2cf" /><path d="M69 48l5 1l-1 9l-5-1Z" fill="#415e73" stroke="none"/></g><path d="M61 68q5-2 7 2l-1 5l-6 1l-3-4Z" fill="#efc69a" /></g></g></g></g></g>
|
|
67
|
-
</g></svg>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 112" width="80" height="112" preserveAspectRatio="xMidYMid meet" role="img" focusable="false" aria-labelledby="character-title character-desc" data-role="knight" data-state="idle">
|
|
2
|
+
<title id="character-title">Kingdom 执行者 · idle</title>
|
|
3
|
+
<desc id="character-desc">护额、分片护甲、短披风和工具。重心就位,抬臂检视工具,回收待续。克制的连续关节动作,支持减少动态效果。</desc>
|
|
4
|
+
<metadata>{"visualVersion":"kingdom-motion-r4-gui","role":"knight","state":"idle","cycleSeconds":8,"viewBox":[0,0,80,112],"origin":"Owner character redesign authorized 2026-09-08"}</metadata>
|
|
5
|
+
<style><![CDATA[
|
|
6
|
+
/* SVG-wide coordinates make every joint pivot explicit and stable. */
|
|
7
|
+
svg{overflow:hidden;--phase:-2.6s}
|
|
8
|
+
.weight,.breath,.head,.cape,.arm-far,.forearm-far,.arm-near,.forearm-near,.hat-follow{transform-box:view-box}
|
|
9
|
+
.weight{transform-origin:40px 99px;animation:weight 8s cubic-bezier(.42,0,.58,1) infinite}
|
|
10
|
+
.breath{transform-origin:40px 87px;animation:breathe 4s cubic-bezier(.37,0,.63,1) var(--phase) infinite}
|
|
11
|
+
.head{transform-origin:40px 44px;animation:idle-look 8s cubic-bezier(.4,0,.4,1) infinite}
|
|
12
|
+
.cape{transform-origin:40px 48px;animation:cloth 8s cubic-bezier(.4,0,.5,1) infinite}
|
|
13
|
+
.arm-far{transform-origin:27px 51px}.forearm-far{transform-origin:22px 64px}
|
|
14
|
+
.arm-near{transform-origin:54px 51px}.forearm-near{transform-origin:58px 63px}
|
|
15
|
+
.hat-follow{transform-origin:49px 18px;animation:hat-settle 8s ease-in-out infinite}
|
|
16
|
+
.eyes-open{transform-box:fill-box;transform-origin:center;animation:blink 8s linear var(--phase) infinite}
|
|
17
|
+
.eyes-closed{display:none}
|
|
18
|
+
svg:is([data-state="idle"],[data-state="ready"],[data-state="available"]) .arm-near{animation:idle-shoulder 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
19
|
+
svg:is([data-state="idle"],[data-state="ready"],[data-state="available"]) .forearm-near{animation:idle-hand 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
20
|
+
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .weight{animation-name:work-weight}
|
|
21
|
+
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .head{animation-name:work-look}
|
|
22
|
+
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .arm-far{animation:steady-page 8s ease-in-out infinite}
|
|
23
|
+
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .arm-near{animation:knight-shoulder 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
24
|
+
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .forearm-near{animation:knight-gesture 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
25
|
+
svg:is([data-state="thinking"],[data-state="confused"],[data-state="planning"],[data-state="waiting-input"]) .head{transform:rotate(-5deg);animation:consider 8s ease-in-out infinite}
|
|
26
|
+
svg:is([data-state="thinking"],[data-state="confused"],[data-state="planning"],[data-state="waiting-input"]) .forearm-near{transform:rotate(-18deg);animation:thinking-hand 8s ease-in-out infinite}
|
|
27
|
+
svg:is([data-state="thinking"],[data-state="confused"],[data-state="planning"],[data-state="waiting-input"]) .arm-near{transform:rotate(-6deg);animation:thinking-shoulder 8s ease-in-out infinite}
|
|
28
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .head{transform:rotate(9deg) translateY(1px);animation:rest-head 8s ease-in-out infinite}
|
|
29
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .arm-near{transform:rotate(9deg)}
|
|
30
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .arm-far{transform:rotate(-5deg)}
|
|
31
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .forearm-near{transform:rotate(8deg)}
|
|
32
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .eyes-open{display:none}
|
|
33
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .eyes-closed{display:inline}
|
|
34
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .weight{animation:none;transform:rotate(.4deg)}
|
|
35
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .breath{animation-duration:4s}
|
|
36
|
+
svg:is([data-state="offline"],[data-state="stopped"],[data-state="absent"]) .figure,svg:is([data-state="offline"],[data-state="stopped"],[data-state="absent"]) .ground-shadow{display:none}
|
|
37
|
+
@keyframes breathe{0%,100%{transform:scale(1,1)}42%{transform:scale(1.01,1.028)}68%{transform:scale(1.005,1.013)}}
|
|
38
|
+
@keyframes weight{0%,100%{transform:rotate(0deg)}20%,35%{transform:rotate(-6deg)}64%,78%{transform:rotate(5deg)}}
|
|
39
|
+
@keyframes work-weight{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(3deg)}28%,39%{transform:rotate(-8deg)}51%{transform:rotate(-3deg)}63%,72%{transform:rotate(4deg)}83%,91%{transform:rotate(-5deg)}}
|
|
40
|
+
@keyframes cloth{0%,100%{transform:rotate(0deg)}16%{transform:rotate(-4deg)}33%,43%{transform:rotate(9deg)}53%{transform:rotate(3deg)}71%,83%{transform:rotate(-7deg)}93%{transform:rotate(3deg)}}
|
|
41
|
+
@keyframes hat-settle{0%,100%{transform:rotate(0deg)}29%{transform:rotate(-12deg)}43%{transform:rotate(5deg)}57%,79%{transform:rotate(0deg)}88%{transform:rotate(-6deg)}}
|
|
42
|
+
@keyframes idle-look{0%,10%,100%{transform:rotate(0deg) translateY(0)}23%,37%{transform:rotate(-16deg) translateY(3px)}49%,66%{transform:rotate(0deg) translateY(0)}80%,90%{transform:rotate(12deg) translateY(2px)}}
|
|
43
|
+
@keyframes idle-shoulder{0%,12%,100%{transform:rotate(0deg)}25%,37%{transform:rotate(-28deg)}49%,68%{transform:rotate(0deg)}80%,89%{transform:rotate(12deg)}}
|
|
44
|
+
@keyframes idle-hand{0%,12%,100%{transform:rotate(0deg)}25%,37%{transform:rotate(14deg)}49%,68%{transform:rotate(0deg)}80%,89%{transform:rotate(-18deg)}}
|
|
45
|
+
@keyframes blink{0%,27%,30%,72%,75%,100%{transform:scaleY(1)}28.5%,73.5%{transform:scaleY(.12)}}
|
|
46
|
+
@keyframes work-look{0%,8%,100%{transform:rotate(0deg) translateY(0)}27%,40%{transform:rotate(20deg) translateY(5px)}54%,68%{transform:rotate(6deg) translateY(1px)}82%,91%{transform:rotate(-13deg) translateY(3px)}}
|
|
47
|
+
@keyframes steady-page{0%,100%{transform:rotate(0deg)}16%{transform:rotate(6deg)}28%,43%{transform:rotate(-8deg)}56%,73%{transform:rotate(0deg)}83%,91%{transform:rotate(-4deg)}}
|
|
48
|
+
@keyframes chancellor-shoulder{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(10deg)}28%,38%{transform:rotate(-58deg)}48%{transform:rotate(-38deg)}60%,71%{transform:rotate(0deg)}83%,90%{transform:rotate(-34deg)}}
|
|
49
|
+
@keyframes chancellor-gesture{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(-12deg)}28%,38%{transform:rotate(28deg)}48%{transform:rotate(18deg)}60%,71%{transform:rotate(0deg)}83%,90%{transform:rotate(14deg)}}
|
|
50
|
+
@keyframes supervisor-shoulder{0%,8%,100%{transform:rotate(0deg)}16%{transform:rotate(-12deg)}27%,41%{transform:rotate(22deg)}54%,67%{transform:rotate(-30deg)}82%,91%{transform:rotate(16deg)}}
|
|
51
|
+
@keyframes supervisor-gesture{0%,8%,100%{transform:rotate(0deg)}17%{transform:rotate(15deg)}26%{transform:rotate(-32deg)}32%{transform:rotate(8deg)}40%{transform:rotate(-26deg)}54%,67%{transform:rotate(34deg)}81%{transform:rotate(-24deg)}90%{transform:rotate(-4deg)}}
|
|
52
|
+
@keyframes knight-shoulder{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(12deg)}28%,38%{transform:rotate(-70deg)}47%{transform:rotate(-44deg)}59%,69%{transform:rotate(0deg)}82%,90%{transform:rotate(-42deg)}}
|
|
53
|
+
@keyframes knight-gesture{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(-14deg)}28%,38%{transform:rotate(36deg)}47%{transform:rotate(18deg)}59%,69%{transform:rotate(0deg)}82%,90%{transform:rotate(22deg)}}
|
|
54
|
+
@keyframes consider{0%,100%{transform:rotate(-5deg) translateY(0)}20%,38%{transform:rotate(-23deg) translateY(7px)}58%,77%{transform:rotate(10deg) translateY(2px)}}
|
|
55
|
+
@keyframes thinking-shoulder{0%,100%{transform:rotate(-6deg)}22%,40%{transform:rotate(-32deg)}60%,78%{transform:rotate(8deg)}}
|
|
56
|
+
@keyframes thinking-hand{0%,100%{transform:rotate(-18deg)}22%,40%{transform:rotate(-40deg)}60%,78%{transform:rotate(10deg)}}
|
|
57
|
+
@keyframes rest-head{0%,100%{transform:rotate(9deg) translateY(1px)}40%,49%{transform:rotate(23deg) translateY(5px)}65%,77%{transform:rotate(5deg) translateY(.5px)}}
|
|
58
|
+
/* The console supplies page-clock phase to preserve motion across node reconstruction. */
|
|
59
|
+
.weight,.head,.cape,.hat-follow,.arm-far,.arm-near,.forearm-near{animation-delay:var(--kingdom-motion-offset,0s)}
|
|
60
|
+
.breath,.eyes-open{animation-delay:calc(var(--kingdom-motion-offset,0s) + var(--phase))}
|
|
61
|
+
/* Keep the state-specific resting pose. No scripts, SMIL, filters or external assets. */
|
|
62
|
+
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
|
|
63
|
+
]]></style>
|
|
64
|
+
<g stroke="#28352f" stroke-width="2.1" stroke-linejoin="round" stroke-linecap="round">
|
|
65
|
+
<ellipse class="ground-shadow" cx="40" cy="104" rx="23" ry="3" fill="#07140e" opacity=".2" stroke="none"/>
|
|
66
|
+
<g class="figure" data-part="figure"><g class="feet" data-part="feet"><path d="M27 91h12v12H23v-6l4-2Z" fill="#655446" /><path d="M43 91h12l2 7v5H41v-8Z" fill="#655446" /><path d="M24 100h14 M43 100h13" fill="none" stroke="#a28b65" stroke-width="2"/></g><g class="weight" data-part="weight"><g class="cape" data-part="cape"><path d="M24 46Q39 41 56 47L62 81L53 86L40 81L21 87L18 76Z" fill="#415e73" /><path d="M22 52l-3 31l5 7l5-42Z" fill="#a8c2cf" stroke="none" opacity=".45"/></g><g class="breath" data-part="breath"><g class="arm-far" data-part="arm-far"><path d="M27 49Q21 47 18 56L18 65l9 1l5-9Z" fill="#658ba3" /><path d="M18 61h10v6H18Z" fill="#a8c2cf" /><g class="forearm-far" data-part="forearm-far"><path d="M18 65l8-1l3 18l-10 1Z" fill="#415e73" /><path d="M18 80h11v5H18Z" fill="#d4b570" /><path d="M16 65q-4 2-2 6l7 1l1-5Z" fill="#efc69a" /></g></g><g class="torso" data-part="torso"><path d="M27 46l13-3l14 4l2 34l-10 7H33l-9-7Z" fill="#415e73" /><path d="M30 48l10 4l12-4l1 23l-13 5l-13-5Z" fill="#658ba3" /><path d="M31 49l9 3l10-3v6l-10 3l-10-3Z" fill="#a8c2cf" stroke="none"/><path d="M26 75h29v7H26Z" fill="#6c5642" /><path d="M37 74h8v9h-8Z" fill="#d4b570" /><path d="M28 83l10 1l-1 13H25Z" fill="#a8c2cf" /><path d="M44 84l11-1l3 14H44Z" fill="#a8c2cf" /><path d="M28 90h9 M45 90h9" fill="none" stroke="#415e73" stroke-width="2"/></g><g class="head" data-part="head"><path d="M27 24 Q27 16 40 16 Q53 16 53 25 L52 35 Q50 44 40 45 Q30 44 28 35Z" fill="#efc69a" /><path d="M48 25 L52 24 L51 36 Q48 42 41 43 L40 39 Q47 36 48 25Z" fill="#cf9970" stroke="none"/><path d="M26 28 Q21 26 24 33 L28 34 M53 28 Q58 26 56 33 L52 34" fill="#efc69a" /><g class="eyes-open" data-part="eyes-open"><path d="M32 29v2 M45 29v2" fill="none" stroke="#28352f" stroke-width="2.6"/></g><g class="eyes-closed" data-part="eyes-closed"><path d="M30.5 30q3 2.5 6 0 M43 30q3 2.5 6 0" fill="none" stroke="#28352f" stroke-width="1.7"/></g><path d="M30 25.5l6-.5 M43 25l5 .7" fill="none" stroke="#28352f" stroke-width="2.3"/><path d="M40 30l-2 5h4" fill="#cf9970" stroke="none"/><path d="M36 38q4 2 7-1" fill="none" stroke="#76533a" stroke-width="1.7"/><g class="hat-follow" data-part="hat-follow"><path d="M40 14Q43 5 53 8L48 16Z" fill="#658ba3" /></g><path d="M24 27V23Q25 10 40 10Q55 11 56 24v9l-7-3V24L40 21L31 24v10l-7-1Z" fill="#a8c2cf" /><path d="M40 11v10l9 3v6l7 3V23Q53 11 40 11Z" fill="#7d9bab" stroke="none"/><path d="M22 25h35v5H22Z" fill="#415e73" /><path d="M37 11h5v14h-5Z" fill="#d4b570" stroke="none"/></g><g class="arm-near" data-part="arm-near"><path d="M53 47q10 0 12 12l-7 6l-9-10Z" fill="#a8c2cf" /><g class="forearm-near" data-part="forearm-near"><path d="M59 60l8 7l-3 11l-9-5Z" fill="#658ba3" /><path d="M57 68l9 2l-1 7l-10-3Z" fill="#a8c2cf" /><g class="tool" data-part="tool"><path d="M62 72l4-22l4 1l-4 22Z" fill="#95724b" /><path d="M61 47l13 2l-1 9l-13-2Z" fill="#a8c2cf" /><path d="M69 48l5 1l-1 9l-5-1Z" fill="#415e73" stroke="none"/></g><path d="M61 68q5-2 7 2l-1 5l-6 1l-3-4Z" fill="#efc69a" /></g></g></g></g></g>
|
|
67
|
+
</g></svg>
|
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 112" width="80" height="112" preserveAspectRatio="xMidYMid meet" role="img" focusable="false" aria-labelledby="character-title character-desc" data-role="knight" data-state="sleeping">
|
|
2
|
-
<title id="character-title">Kingdom 执行者 · sleeping</title>
|
|
3
|
-
<desc id="character-desc">护额、分片护甲、短披风和工具。重心就位,抬臂检视工具,回收待续。克制的连续关节动作,支持减少动态效果。</desc>
|
|
4
|
-
<metadata>{"visualVersion":"kingdom-motion-r4-gui","role":"knight","state":"sleeping","cycleSeconds":8,"viewBox":[0,0,80,112],"origin":"Owner character redesign authorized 2026-09-08"}</metadata>
|
|
5
|
-
<style><![CDATA[
|
|
6
|
-
/* SVG-wide coordinates make every joint pivot explicit and stable. */
|
|
7
|
-
svg{overflow:hidden;--phase:-2.6s}
|
|
8
|
-
.weight,.breath,.head,.cape,.arm-far,.forearm-far,.arm-near,.forearm-near,.hat-follow{transform-box:view-box}
|
|
9
|
-
.weight{transform-origin:40px 99px;animation:weight 8s cubic-bezier(.42,0,.58,1) infinite}
|
|
10
|
-
.breath{transform-origin:40px 87px;animation:breathe 4s cubic-bezier(.37,0,.63,1) var(--phase) infinite}
|
|
11
|
-
.head{transform-origin:40px 44px;animation:idle-look 8s cubic-bezier(.4,0,.4,1) infinite}
|
|
12
|
-
.cape{transform-origin:40px 48px;animation:cloth 8s cubic-bezier(.4,0,.5,1) infinite}
|
|
13
|
-
.arm-far{transform-origin:27px 51px}.forearm-far{transform-origin:22px 64px}
|
|
14
|
-
.arm-near{transform-origin:54px 51px}.forearm-near{transform-origin:58px 63px}
|
|
15
|
-
.hat-follow{transform-origin:49px 18px;animation:hat-settle 8s ease-in-out infinite}
|
|
16
|
-
.eyes-open{transform-box:fill-box;transform-origin:center;animation:blink 8s linear var(--phase) infinite}
|
|
17
|
-
.eyes-closed{display:none}
|
|
18
|
-
svg:is([data-state="idle"],[data-state="ready"],[data-state="available"]) .arm-near{animation:idle-shoulder 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
19
|
-
svg:is([data-state="idle"],[data-state="ready"],[data-state="available"]) .forearm-near{animation:idle-hand 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
20
|
-
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .weight{animation-name:work-weight}
|
|
21
|
-
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .head{animation-name:work-look}
|
|
22
|
-
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .arm-far{animation:steady-page 8s ease-in-out infinite}
|
|
23
|
-
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .arm-near{animation:knight-shoulder 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
24
|
-
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .forearm-near{animation:knight-gesture 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
25
|
-
svg:is([data-state="thinking"],[data-state="confused"],[data-state="planning"],[data-state="waiting-input"]) .head{transform:rotate(-5deg);animation:consider 8s ease-in-out infinite}
|
|
26
|
-
svg:is([data-state="thinking"],[data-state="confused"],[data-state="planning"],[data-state="waiting-input"]) .forearm-near{transform:rotate(-18deg);animation:thinking-hand 8s ease-in-out infinite}
|
|
27
|
-
svg:is([data-state="thinking"],[data-state="confused"],[data-state="planning"],[data-state="waiting-input"]) .arm-near{transform:rotate(-6deg);animation:thinking-shoulder 8s ease-in-out infinite}
|
|
28
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .head{transform:rotate(9deg) translateY(1px);animation:rest-head 8s ease-in-out infinite}
|
|
29
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .arm-near{transform:rotate(9deg)}
|
|
30
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .arm-far{transform:rotate(-5deg)}
|
|
31
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .forearm-near{transform:rotate(8deg)}
|
|
32
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .eyes-open{display:none}
|
|
33
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .eyes-closed{display:inline}
|
|
34
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .weight{animation:none;transform:rotate(.4deg)}
|
|
35
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .breath{animation-duration:4s}
|
|
36
|
-
svg:is([data-state="offline"],[data-state="stopped"],[data-state="absent"]) .figure,svg:is([data-state="offline"],[data-state="stopped"],[data-state="absent"]) .ground-shadow{display:none}
|
|
37
|
-
@keyframes breathe{0%,100%{transform:scale(1,1)}42%{transform:scale(1.01,1.028)}68%{transform:scale(1.005,1.013)}}
|
|
38
|
-
@keyframes weight{0%,100%{transform:rotate(0deg)}20%,35%{transform:rotate(-6deg)}64%,78%{transform:rotate(5deg)}}
|
|
39
|
-
@keyframes work-weight{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(3deg)}28%,39%{transform:rotate(-8deg)}51%{transform:rotate(-3deg)}63%,72%{transform:rotate(4deg)}83%,91%{transform:rotate(-5deg)}}
|
|
40
|
-
@keyframes cloth{0%,100%{transform:rotate(0deg)}16%{transform:rotate(-4deg)}33%,43%{transform:rotate(9deg)}53%{transform:rotate(3deg)}71%,83%{transform:rotate(-7deg)}93%{transform:rotate(3deg)}}
|
|
41
|
-
@keyframes hat-settle{0%,100%{transform:rotate(0deg)}29%{transform:rotate(-12deg)}43%{transform:rotate(5deg)}57%,79%{transform:rotate(0deg)}88%{transform:rotate(-6deg)}}
|
|
42
|
-
@keyframes idle-look{0%,10%,100%{transform:rotate(0deg) translateY(0)}23%,37%{transform:rotate(-16deg) translateY(3px)}49%,66%{transform:rotate(0deg) translateY(0)}80%,90%{transform:rotate(12deg) translateY(2px)}}
|
|
43
|
-
@keyframes idle-shoulder{0%,12%,100%{transform:rotate(0deg)}25%,37%{transform:rotate(-28deg)}49%,68%{transform:rotate(0deg)}80%,89%{transform:rotate(12deg)}}
|
|
44
|
-
@keyframes idle-hand{0%,12%,100%{transform:rotate(0deg)}25%,37%{transform:rotate(14deg)}49%,68%{transform:rotate(0deg)}80%,89%{transform:rotate(-18deg)}}
|
|
45
|
-
@keyframes blink{0%,27%,30%,72%,75%,100%{transform:scaleY(1)}28.5%,73.5%{transform:scaleY(.12)}}
|
|
46
|
-
@keyframes work-look{0%,8%,100%{transform:rotate(0deg) translateY(0)}27%,40%{transform:rotate(20deg) translateY(5px)}54%,68%{transform:rotate(6deg) translateY(1px)}82%,91%{transform:rotate(-13deg) translateY(3px)}}
|
|
47
|
-
@keyframes steady-page{0%,100%{transform:rotate(0deg)}16%{transform:rotate(6deg)}28%,43%{transform:rotate(-8deg)}56%,73%{transform:rotate(0deg)}83%,91%{transform:rotate(-4deg)}}
|
|
48
|
-
@keyframes chancellor-shoulder{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(10deg)}28%,38%{transform:rotate(-58deg)}48%{transform:rotate(-38deg)}60%,71%{transform:rotate(0deg)}83%,90%{transform:rotate(-34deg)}}
|
|
49
|
-
@keyframes chancellor-gesture{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(-12deg)}28%,38%{transform:rotate(28deg)}48%{transform:rotate(18deg)}60%,71%{transform:rotate(0deg)}83%,90%{transform:rotate(14deg)}}
|
|
50
|
-
@keyframes supervisor-shoulder{0%,8%,100%{transform:rotate(0deg)}16%{transform:rotate(-12deg)}27%,41%{transform:rotate(22deg)}54%,67%{transform:rotate(-30deg)}82%,91%{transform:rotate(16deg)}}
|
|
51
|
-
@keyframes supervisor-gesture{0%,8%,100%{transform:rotate(0deg)}17%{transform:rotate(15deg)}26%{transform:rotate(-32deg)}32%{transform:rotate(8deg)}40%{transform:rotate(-26deg)}54%,67%{transform:rotate(34deg)}81%{transform:rotate(-24deg)}90%{transform:rotate(-4deg)}}
|
|
52
|
-
@keyframes knight-shoulder{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(12deg)}28%,38%{transform:rotate(-70deg)}47%{transform:rotate(-44deg)}59%,69%{transform:rotate(0deg)}82%,90%{transform:rotate(-42deg)}}
|
|
53
|
-
@keyframes knight-gesture{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(-14deg)}28%,38%{transform:rotate(36deg)}47%{transform:rotate(18deg)}59%,69%{transform:rotate(0deg)}82%,90%{transform:rotate(22deg)}}
|
|
54
|
-
@keyframes consider{0%,100%{transform:rotate(-5deg) translateY(0)}20%,38%{transform:rotate(-23deg) translateY(7px)}58%,77%{transform:rotate(10deg) translateY(2px)}}
|
|
55
|
-
@keyframes thinking-shoulder{0%,100%{transform:rotate(-6deg)}22%,40%{transform:rotate(-32deg)}60%,78%{transform:rotate(8deg)}}
|
|
56
|
-
@keyframes thinking-hand{0%,100%{transform:rotate(-18deg)}22%,40%{transform:rotate(-40deg)}60%,78%{transform:rotate(10deg)}}
|
|
57
|
-
@keyframes rest-head{0%,100%{transform:rotate(9deg) translateY(1px)}40%,49%{transform:rotate(23deg) translateY(5px)}65%,77%{transform:rotate(5deg) translateY(.5px)}}
|
|
58
|
-
/* The console supplies page-clock phase to preserve motion across node reconstruction. */
|
|
59
|
-
.weight,.head,.cape,.hat-follow,.arm-far,.arm-near,.forearm-near{animation-delay:var(--kingdom-motion-offset,0s)}
|
|
60
|
-
.breath,.eyes-open{animation-delay:calc(var(--kingdom-motion-offset,0s) + var(--phase))}
|
|
61
|
-
/* Keep the state-specific resting pose. No scripts, SMIL, filters or external assets. */
|
|
62
|
-
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
|
|
63
|
-
]]></style>
|
|
64
|
-
<g stroke="#28352f" stroke-width="2.1" stroke-linejoin="round" stroke-linecap="round">
|
|
65
|
-
<ellipse class="ground-shadow" cx="40" cy="104" rx="23" ry="3" fill="#07140e" opacity=".2" stroke="none"/>
|
|
66
|
-
<g class="figure" data-part="figure"><g class="feet" data-part="feet"><path d="M27 91h12v12H23v-6l4-2Z" fill="#655446" /><path d="M43 91h12l2 7v5H41v-8Z" fill="#655446" /><path d="M24 100h14 M43 100h13" fill="none" stroke="#a28b65" stroke-width="2"/></g><g class="weight" data-part="weight"><g class="cape" data-part="cape"><path d="M24 46Q39 41 56 47L62 81L53 86L40 81L21 87L18 76Z" fill="#415e73" /><path d="M22 52l-3 31l5 7l5-42Z" fill="#a8c2cf" stroke="none" opacity=".45"/></g><g class="breath" data-part="breath"><g class="arm-far" data-part="arm-far"><path d="M27 49Q21 47 18 56L18 65l9 1l5-9Z" fill="#658ba3" /><path d="M18 61h10v6H18Z" fill="#a8c2cf" /><g class="forearm-far" data-part="forearm-far"><path d="M18 65l8-1l3 18l-10 1Z" fill="#415e73" /><path d="M18 80h11v5H18Z" fill="#d4b570" /><path d="M16 65q-4 2-2 6l7 1l1-5Z" fill="#efc69a" /></g></g><g class="torso" data-part="torso"><path d="M27 46l13-3l14 4l2 34l-10 7H33l-9-7Z" fill="#415e73" /><path d="M30 48l10 4l12-4l1 23l-13 5l-13-5Z" fill="#658ba3" /><path d="M31 49l9 3l10-3v6l-10 3l-10-3Z" fill="#a8c2cf" stroke="none"/><path d="M26 75h29v7H26Z" fill="#6c5642" /><path d="M37 74h8v9h-8Z" fill="#d4b570" /><path d="M28 83l10 1l-1 13H25Z" fill="#a8c2cf" /><path d="M44 84l11-1l3 14H44Z" fill="#a8c2cf" /><path d="M28 90h9 M45 90h9" fill="none" stroke="#415e73" stroke-width="2"/></g><g class="head" data-part="head"><path d="M27 24 Q27 16 40 16 Q53 16 53 25 L52 35 Q50 44 40 45 Q30 44 28 35Z" fill="#efc69a" /><path d="M48 25 L52 24 L51 36 Q48 42 41 43 L40 39 Q47 36 48 25Z" fill="#cf9970" stroke="none"/><path d="M26 28 Q21 26 24 33 L28 34 M53 28 Q58 26 56 33 L52 34" fill="#efc69a" /><g class="eyes-open" data-part="eyes-open"><path d="M32 29v2 M45 29v2" fill="none" stroke="#28352f" stroke-width="2.6"/></g><g class="eyes-closed" data-part="eyes-closed"><path d="M30.5 30q3 2.5 6 0 M43 30q3 2.5 6 0" fill="none" stroke="#28352f" stroke-width="1.7"/></g><path d="M30 25.5l6-.5 M43 25l5 .7" fill="none" stroke="#28352f" stroke-width="2.3"/><path d="M40 30l-2 5h4" fill="#cf9970" stroke="none"/><path d="M36 38q4 2 7-1" fill="none" stroke="#76533a" stroke-width="1.7"/><g class="hat-follow" data-part="hat-follow"><path d="M40 14Q43 5 53 8L48 16Z" fill="#658ba3" /></g><path d="M24 27V23Q25 10 40 10Q55 11 56 24v9l-7-3V24L40 21L31 24v10l-7-1Z" fill="#a8c2cf" /><path d="M40 11v10l9 3v6l7 3V23Q53 11 40 11Z" fill="#7d9bab" stroke="none"/><path d="M22 25h35v5H22Z" fill="#415e73" /><path d="M37 11h5v14h-5Z" fill="#d4b570" stroke="none"/></g><g class="arm-near" data-part="arm-near"><path d="M53 47q10 0 12 12l-7 6l-9-10Z" fill="#a8c2cf" /><g class="forearm-near" data-part="forearm-near"><path d="M59 60l8 7l-3 11l-9-5Z" fill="#658ba3" /><path d="M57 68l9 2l-1 7l-10-3Z" fill="#a8c2cf" /><g class="tool" data-part="tool"><path d="M62 72l4-22l4 1l-4 22Z" fill="#95724b" /><path d="M61 47l13 2l-1 9l-13-2Z" fill="#a8c2cf" /><path d="M69 48l5 1l-1 9l-5-1Z" fill="#415e73" stroke="none"/></g><path d="M61 68q5-2 7 2l-1 5l-6 1l-3-4Z" fill="#efc69a" /></g></g></g></g></g>
|
|
67
|
-
</g></svg>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 112" width="80" height="112" preserveAspectRatio="xMidYMid meet" role="img" focusable="false" aria-labelledby="character-title character-desc" data-role="knight" data-state="sleeping">
|
|
2
|
+
<title id="character-title">Kingdom 执行者 · sleeping</title>
|
|
3
|
+
<desc id="character-desc">护额、分片护甲、短披风和工具。重心就位,抬臂检视工具,回收待续。克制的连续关节动作,支持减少动态效果。</desc>
|
|
4
|
+
<metadata>{"visualVersion":"kingdom-motion-r4-gui","role":"knight","state":"sleeping","cycleSeconds":8,"viewBox":[0,0,80,112],"origin":"Owner character redesign authorized 2026-09-08"}</metadata>
|
|
5
|
+
<style><![CDATA[
|
|
6
|
+
/* SVG-wide coordinates make every joint pivot explicit and stable. */
|
|
7
|
+
svg{overflow:hidden;--phase:-2.6s}
|
|
8
|
+
.weight,.breath,.head,.cape,.arm-far,.forearm-far,.arm-near,.forearm-near,.hat-follow{transform-box:view-box}
|
|
9
|
+
.weight{transform-origin:40px 99px;animation:weight 8s cubic-bezier(.42,0,.58,1) infinite}
|
|
10
|
+
.breath{transform-origin:40px 87px;animation:breathe 4s cubic-bezier(.37,0,.63,1) var(--phase) infinite}
|
|
11
|
+
.head{transform-origin:40px 44px;animation:idle-look 8s cubic-bezier(.4,0,.4,1) infinite}
|
|
12
|
+
.cape{transform-origin:40px 48px;animation:cloth 8s cubic-bezier(.4,0,.5,1) infinite}
|
|
13
|
+
.arm-far{transform-origin:27px 51px}.forearm-far{transform-origin:22px 64px}
|
|
14
|
+
.arm-near{transform-origin:54px 51px}.forearm-near{transform-origin:58px 63px}
|
|
15
|
+
.hat-follow{transform-origin:49px 18px;animation:hat-settle 8s ease-in-out infinite}
|
|
16
|
+
.eyes-open{transform-box:fill-box;transform-origin:center;animation:blink 8s linear var(--phase) infinite}
|
|
17
|
+
.eyes-closed{display:none}
|
|
18
|
+
svg:is([data-state="idle"],[data-state="ready"],[data-state="available"]) .arm-near{animation:idle-shoulder 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
19
|
+
svg:is([data-state="idle"],[data-state="ready"],[data-state="available"]) .forearm-near{animation:idle-hand 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
20
|
+
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .weight{animation-name:work-weight}
|
|
21
|
+
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .head{animation-name:work-look}
|
|
22
|
+
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .arm-far{animation:steady-page 8s ease-in-out infinite}
|
|
23
|
+
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .arm-near{animation:knight-shoulder 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
24
|
+
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .forearm-near{animation:knight-gesture 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
25
|
+
svg:is([data-state="thinking"],[data-state="confused"],[data-state="planning"],[data-state="waiting-input"]) .head{transform:rotate(-5deg);animation:consider 8s ease-in-out infinite}
|
|
26
|
+
svg:is([data-state="thinking"],[data-state="confused"],[data-state="planning"],[data-state="waiting-input"]) .forearm-near{transform:rotate(-18deg);animation:thinking-hand 8s ease-in-out infinite}
|
|
27
|
+
svg:is([data-state="thinking"],[data-state="confused"],[data-state="planning"],[data-state="waiting-input"]) .arm-near{transform:rotate(-6deg);animation:thinking-shoulder 8s ease-in-out infinite}
|
|
28
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .head{transform:rotate(9deg) translateY(1px);animation:rest-head 8s ease-in-out infinite}
|
|
29
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .arm-near{transform:rotate(9deg)}
|
|
30
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .arm-far{transform:rotate(-5deg)}
|
|
31
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .forearm-near{transform:rotate(8deg)}
|
|
32
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .eyes-open{display:none}
|
|
33
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .eyes-closed{display:inline}
|
|
34
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .weight{animation:none;transform:rotate(.4deg)}
|
|
35
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .breath{animation-duration:4s}
|
|
36
|
+
svg:is([data-state="offline"],[data-state="stopped"],[data-state="absent"]) .figure,svg:is([data-state="offline"],[data-state="stopped"],[data-state="absent"]) .ground-shadow{display:none}
|
|
37
|
+
@keyframes breathe{0%,100%{transform:scale(1,1)}42%{transform:scale(1.01,1.028)}68%{transform:scale(1.005,1.013)}}
|
|
38
|
+
@keyframes weight{0%,100%{transform:rotate(0deg)}20%,35%{transform:rotate(-6deg)}64%,78%{transform:rotate(5deg)}}
|
|
39
|
+
@keyframes work-weight{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(3deg)}28%,39%{transform:rotate(-8deg)}51%{transform:rotate(-3deg)}63%,72%{transform:rotate(4deg)}83%,91%{transform:rotate(-5deg)}}
|
|
40
|
+
@keyframes cloth{0%,100%{transform:rotate(0deg)}16%{transform:rotate(-4deg)}33%,43%{transform:rotate(9deg)}53%{transform:rotate(3deg)}71%,83%{transform:rotate(-7deg)}93%{transform:rotate(3deg)}}
|
|
41
|
+
@keyframes hat-settle{0%,100%{transform:rotate(0deg)}29%{transform:rotate(-12deg)}43%{transform:rotate(5deg)}57%,79%{transform:rotate(0deg)}88%{transform:rotate(-6deg)}}
|
|
42
|
+
@keyframes idle-look{0%,10%,100%{transform:rotate(0deg) translateY(0)}23%,37%{transform:rotate(-16deg) translateY(3px)}49%,66%{transform:rotate(0deg) translateY(0)}80%,90%{transform:rotate(12deg) translateY(2px)}}
|
|
43
|
+
@keyframes idle-shoulder{0%,12%,100%{transform:rotate(0deg)}25%,37%{transform:rotate(-28deg)}49%,68%{transform:rotate(0deg)}80%,89%{transform:rotate(12deg)}}
|
|
44
|
+
@keyframes idle-hand{0%,12%,100%{transform:rotate(0deg)}25%,37%{transform:rotate(14deg)}49%,68%{transform:rotate(0deg)}80%,89%{transform:rotate(-18deg)}}
|
|
45
|
+
@keyframes blink{0%,27%,30%,72%,75%,100%{transform:scaleY(1)}28.5%,73.5%{transform:scaleY(.12)}}
|
|
46
|
+
@keyframes work-look{0%,8%,100%{transform:rotate(0deg) translateY(0)}27%,40%{transform:rotate(20deg) translateY(5px)}54%,68%{transform:rotate(6deg) translateY(1px)}82%,91%{transform:rotate(-13deg) translateY(3px)}}
|
|
47
|
+
@keyframes steady-page{0%,100%{transform:rotate(0deg)}16%{transform:rotate(6deg)}28%,43%{transform:rotate(-8deg)}56%,73%{transform:rotate(0deg)}83%,91%{transform:rotate(-4deg)}}
|
|
48
|
+
@keyframes chancellor-shoulder{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(10deg)}28%,38%{transform:rotate(-58deg)}48%{transform:rotate(-38deg)}60%,71%{transform:rotate(0deg)}83%,90%{transform:rotate(-34deg)}}
|
|
49
|
+
@keyframes chancellor-gesture{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(-12deg)}28%,38%{transform:rotate(28deg)}48%{transform:rotate(18deg)}60%,71%{transform:rotate(0deg)}83%,90%{transform:rotate(14deg)}}
|
|
50
|
+
@keyframes supervisor-shoulder{0%,8%,100%{transform:rotate(0deg)}16%{transform:rotate(-12deg)}27%,41%{transform:rotate(22deg)}54%,67%{transform:rotate(-30deg)}82%,91%{transform:rotate(16deg)}}
|
|
51
|
+
@keyframes supervisor-gesture{0%,8%,100%{transform:rotate(0deg)}17%{transform:rotate(15deg)}26%{transform:rotate(-32deg)}32%{transform:rotate(8deg)}40%{transform:rotate(-26deg)}54%,67%{transform:rotate(34deg)}81%{transform:rotate(-24deg)}90%{transform:rotate(-4deg)}}
|
|
52
|
+
@keyframes knight-shoulder{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(12deg)}28%,38%{transform:rotate(-70deg)}47%{transform:rotate(-44deg)}59%,69%{transform:rotate(0deg)}82%,90%{transform:rotate(-42deg)}}
|
|
53
|
+
@keyframes knight-gesture{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(-14deg)}28%,38%{transform:rotate(36deg)}47%{transform:rotate(18deg)}59%,69%{transform:rotate(0deg)}82%,90%{transform:rotate(22deg)}}
|
|
54
|
+
@keyframes consider{0%,100%{transform:rotate(-5deg) translateY(0)}20%,38%{transform:rotate(-23deg) translateY(7px)}58%,77%{transform:rotate(10deg) translateY(2px)}}
|
|
55
|
+
@keyframes thinking-shoulder{0%,100%{transform:rotate(-6deg)}22%,40%{transform:rotate(-32deg)}60%,78%{transform:rotate(8deg)}}
|
|
56
|
+
@keyframes thinking-hand{0%,100%{transform:rotate(-18deg)}22%,40%{transform:rotate(-40deg)}60%,78%{transform:rotate(10deg)}}
|
|
57
|
+
@keyframes rest-head{0%,100%{transform:rotate(9deg) translateY(1px)}40%,49%{transform:rotate(23deg) translateY(5px)}65%,77%{transform:rotate(5deg) translateY(.5px)}}
|
|
58
|
+
/* The console supplies page-clock phase to preserve motion across node reconstruction. */
|
|
59
|
+
.weight,.head,.cape,.hat-follow,.arm-far,.arm-near,.forearm-near{animation-delay:var(--kingdom-motion-offset,0s)}
|
|
60
|
+
.breath,.eyes-open{animation-delay:calc(var(--kingdom-motion-offset,0s) + var(--phase))}
|
|
61
|
+
/* Keep the state-specific resting pose. No scripts, SMIL, filters or external assets. */
|
|
62
|
+
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
|
|
63
|
+
]]></style>
|
|
64
|
+
<g stroke="#28352f" stroke-width="2.1" stroke-linejoin="round" stroke-linecap="round">
|
|
65
|
+
<ellipse class="ground-shadow" cx="40" cy="104" rx="23" ry="3" fill="#07140e" opacity=".2" stroke="none"/>
|
|
66
|
+
<g class="figure" data-part="figure"><g class="feet" data-part="feet"><path d="M27 91h12v12H23v-6l4-2Z" fill="#655446" /><path d="M43 91h12l2 7v5H41v-8Z" fill="#655446" /><path d="M24 100h14 M43 100h13" fill="none" stroke="#a28b65" stroke-width="2"/></g><g class="weight" data-part="weight"><g class="cape" data-part="cape"><path d="M24 46Q39 41 56 47L62 81L53 86L40 81L21 87L18 76Z" fill="#415e73" /><path d="M22 52l-3 31l5 7l5-42Z" fill="#a8c2cf" stroke="none" opacity=".45"/></g><g class="breath" data-part="breath"><g class="arm-far" data-part="arm-far"><path d="M27 49Q21 47 18 56L18 65l9 1l5-9Z" fill="#658ba3" /><path d="M18 61h10v6H18Z" fill="#a8c2cf" /><g class="forearm-far" data-part="forearm-far"><path d="M18 65l8-1l3 18l-10 1Z" fill="#415e73" /><path d="M18 80h11v5H18Z" fill="#d4b570" /><path d="M16 65q-4 2-2 6l7 1l1-5Z" fill="#efc69a" /></g></g><g class="torso" data-part="torso"><path d="M27 46l13-3l14 4l2 34l-10 7H33l-9-7Z" fill="#415e73" /><path d="M30 48l10 4l12-4l1 23l-13 5l-13-5Z" fill="#658ba3" /><path d="M31 49l9 3l10-3v6l-10 3l-10-3Z" fill="#a8c2cf" stroke="none"/><path d="M26 75h29v7H26Z" fill="#6c5642" /><path d="M37 74h8v9h-8Z" fill="#d4b570" /><path d="M28 83l10 1l-1 13H25Z" fill="#a8c2cf" /><path d="M44 84l11-1l3 14H44Z" fill="#a8c2cf" /><path d="M28 90h9 M45 90h9" fill="none" stroke="#415e73" stroke-width="2"/></g><g class="head" data-part="head"><path d="M27 24 Q27 16 40 16 Q53 16 53 25 L52 35 Q50 44 40 45 Q30 44 28 35Z" fill="#efc69a" /><path d="M48 25 L52 24 L51 36 Q48 42 41 43 L40 39 Q47 36 48 25Z" fill="#cf9970" stroke="none"/><path d="M26 28 Q21 26 24 33 L28 34 M53 28 Q58 26 56 33 L52 34" fill="#efc69a" /><g class="eyes-open" data-part="eyes-open"><path d="M32 29v2 M45 29v2" fill="none" stroke="#28352f" stroke-width="2.6"/></g><g class="eyes-closed" data-part="eyes-closed"><path d="M30.5 30q3 2.5 6 0 M43 30q3 2.5 6 0" fill="none" stroke="#28352f" stroke-width="1.7"/></g><path d="M30 25.5l6-.5 M43 25l5 .7" fill="none" stroke="#28352f" stroke-width="2.3"/><path d="M40 30l-2 5h4" fill="#cf9970" stroke="none"/><path d="M36 38q4 2 7-1" fill="none" stroke="#76533a" stroke-width="1.7"/><g class="hat-follow" data-part="hat-follow"><path d="M40 14Q43 5 53 8L48 16Z" fill="#658ba3" /></g><path d="M24 27V23Q25 10 40 10Q55 11 56 24v9l-7-3V24L40 21L31 24v10l-7-1Z" fill="#a8c2cf" /><path d="M40 11v10l9 3v6l7 3V23Q53 11 40 11Z" fill="#7d9bab" stroke="none"/><path d="M22 25h35v5H22Z" fill="#415e73" /><path d="M37 11h5v14h-5Z" fill="#d4b570" stroke="none"/></g><g class="arm-near" data-part="arm-near"><path d="M53 47q10 0 12 12l-7 6l-9-10Z" fill="#a8c2cf" /><g class="forearm-near" data-part="forearm-near"><path d="M59 60l8 7l-3 11l-9-5Z" fill="#658ba3" /><path d="M57 68l9 2l-1 7l-10-3Z" fill="#a8c2cf" /><g class="tool" data-part="tool"><path d="M62 72l4-22l4 1l-4 22Z" fill="#95724b" /><path d="M61 47l13 2l-1 9l-13-2Z" fill="#a8c2cf" /><path d="M69 48l5 1l-1 9l-5-1Z" fill="#415e73" stroke="none"/></g><path d="M61 68q5-2 7 2l-1 5l-6 1l-3-4Z" fill="#efc69a" /></g></g></g></g></g>
|
|
67
|
+
</g></svg>
|
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 112" width="80" height="112" preserveAspectRatio="xMidYMid meet" role="img" focusable="false" aria-labelledby="character-title character-desc" data-role="knight" data-state="thinking">
|
|
2
|
-
<title id="character-title">Kingdom 执行者 · thinking</title>
|
|
3
|
-
<desc id="character-desc">护额、分片护甲、短披风和工具。重心就位,抬臂检视工具,回收待续。克制的连续关节动作,支持减少动态效果。</desc>
|
|
4
|
-
<metadata>{"visualVersion":"kingdom-motion-r4-gui","role":"knight","state":"thinking","cycleSeconds":8,"viewBox":[0,0,80,112],"origin":"Owner character redesign authorized 2026-09-08"}</metadata>
|
|
5
|
-
<style><![CDATA[
|
|
6
|
-
/* SVG-wide coordinates make every joint pivot explicit and stable. */
|
|
7
|
-
svg{overflow:hidden;--phase:-2.6s}
|
|
8
|
-
.weight,.breath,.head,.cape,.arm-far,.forearm-far,.arm-near,.forearm-near,.hat-follow{transform-box:view-box}
|
|
9
|
-
.weight{transform-origin:40px 99px;animation:weight 8s cubic-bezier(.42,0,.58,1) infinite}
|
|
10
|
-
.breath{transform-origin:40px 87px;animation:breathe 4s cubic-bezier(.37,0,.63,1) var(--phase) infinite}
|
|
11
|
-
.head{transform-origin:40px 44px;animation:idle-look 8s cubic-bezier(.4,0,.4,1) infinite}
|
|
12
|
-
.cape{transform-origin:40px 48px;animation:cloth 8s cubic-bezier(.4,0,.5,1) infinite}
|
|
13
|
-
.arm-far{transform-origin:27px 51px}.forearm-far{transform-origin:22px 64px}
|
|
14
|
-
.arm-near{transform-origin:54px 51px}.forearm-near{transform-origin:58px 63px}
|
|
15
|
-
.hat-follow{transform-origin:49px 18px;animation:hat-settle 8s ease-in-out infinite}
|
|
16
|
-
.eyes-open{transform-box:fill-box;transform-origin:center;animation:blink 8s linear var(--phase) infinite}
|
|
17
|
-
.eyes-closed{display:none}
|
|
18
|
-
svg:is([data-state="idle"],[data-state="ready"],[data-state="available"]) .arm-near{animation:idle-shoulder 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
19
|
-
svg:is([data-state="idle"],[data-state="ready"],[data-state="available"]) .forearm-near{animation:idle-hand 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
20
|
-
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .weight{animation-name:work-weight}
|
|
21
|
-
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .head{animation-name:work-look}
|
|
22
|
-
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .arm-far{animation:steady-page 8s ease-in-out infinite}
|
|
23
|
-
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .arm-near{animation:knight-shoulder 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
24
|
-
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .forearm-near{animation:knight-gesture 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
25
|
-
svg:is([data-state="thinking"],[data-state="confused"],[data-state="planning"],[data-state="waiting-input"]) .head{transform:rotate(-5deg);animation:consider 8s ease-in-out infinite}
|
|
26
|
-
svg:is([data-state="thinking"],[data-state="confused"],[data-state="planning"],[data-state="waiting-input"]) .forearm-near{transform:rotate(-18deg);animation:thinking-hand 8s ease-in-out infinite}
|
|
27
|
-
svg:is([data-state="thinking"],[data-state="confused"],[data-state="planning"],[data-state="waiting-input"]) .arm-near{transform:rotate(-6deg);animation:thinking-shoulder 8s ease-in-out infinite}
|
|
28
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .head{transform:rotate(9deg) translateY(1px);animation:rest-head 8s ease-in-out infinite}
|
|
29
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .arm-near{transform:rotate(9deg)}
|
|
30
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .arm-far{transform:rotate(-5deg)}
|
|
31
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .forearm-near{transform:rotate(8deg)}
|
|
32
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .eyes-open{display:none}
|
|
33
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .eyes-closed{display:inline}
|
|
34
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .weight{animation:none;transform:rotate(.4deg)}
|
|
35
|
-
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .breath{animation-duration:4s}
|
|
36
|
-
svg:is([data-state="offline"],[data-state="stopped"],[data-state="absent"]) .figure,svg:is([data-state="offline"],[data-state="stopped"],[data-state="absent"]) .ground-shadow{display:none}
|
|
37
|
-
@keyframes breathe{0%,100%{transform:scale(1,1)}42%{transform:scale(1.01,1.028)}68%{transform:scale(1.005,1.013)}}
|
|
38
|
-
@keyframes weight{0%,100%{transform:rotate(0deg)}20%,35%{transform:rotate(-6deg)}64%,78%{transform:rotate(5deg)}}
|
|
39
|
-
@keyframes work-weight{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(3deg)}28%,39%{transform:rotate(-8deg)}51%{transform:rotate(-3deg)}63%,72%{transform:rotate(4deg)}83%,91%{transform:rotate(-5deg)}}
|
|
40
|
-
@keyframes cloth{0%,100%{transform:rotate(0deg)}16%{transform:rotate(-4deg)}33%,43%{transform:rotate(9deg)}53%{transform:rotate(3deg)}71%,83%{transform:rotate(-7deg)}93%{transform:rotate(3deg)}}
|
|
41
|
-
@keyframes hat-settle{0%,100%{transform:rotate(0deg)}29%{transform:rotate(-12deg)}43%{transform:rotate(5deg)}57%,79%{transform:rotate(0deg)}88%{transform:rotate(-6deg)}}
|
|
42
|
-
@keyframes idle-look{0%,10%,100%{transform:rotate(0deg) translateY(0)}23%,37%{transform:rotate(-16deg) translateY(3px)}49%,66%{transform:rotate(0deg) translateY(0)}80%,90%{transform:rotate(12deg) translateY(2px)}}
|
|
43
|
-
@keyframes idle-shoulder{0%,12%,100%{transform:rotate(0deg)}25%,37%{transform:rotate(-28deg)}49%,68%{transform:rotate(0deg)}80%,89%{transform:rotate(12deg)}}
|
|
44
|
-
@keyframes idle-hand{0%,12%,100%{transform:rotate(0deg)}25%,37%{transform:rotate(14deg)}49%,68%{transform:rotate(0deg)}80%,89%{transform:rotate(-18deg)}}
|
|
45
|
-
@keyframes blink{0%,27%,30%,72%,75%,100%{transform:scaleY(1)}28.5%,73.5%{transform:scaleY(.12)}}
|
|
46
|
-
@keyframes work-look{0%,8%,100%{transform:rotate(0deg) translateY(0)}27%,40%{transform:rotate(20deg) translateY(5px)}54%,68%{transform:rotate(6deg) translateY(1px)}82%,91%{transform:rotate(-13deg) translateY(3px)}}
|
|
47
|
-
@keyframes steady-page{0%,100%{transform:rotate(0deg)}16%{transform:rotate(6deg)}28%,43%{transform:rotate(-8deg)}56%,73%{transform:rotate(0deg)}83%,91%{transform:rotate(-4deg)}}
|
|
48
|
-
@keyframes chancellor-shoulder{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(10deg)}28%,38%{transform:rotate(-58deg)}48%{transform:rotate(-38deg)}60%,71%{transform:rotate(0deg)}83%,90%{transform:rotate(-34deg)}}
|
|
49
|
-
@keyframes chancellor-gesture{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(-12deg)}28%,38%{transform:rotate(28deg)}48%{transform:rotate(18deg)}60%,71%{transform:rotate(0deg)}83%,90%{transform:rotate(14deg)}}
|
|
50
|
-
@keyframes supervisor-shoulder{0%,8%,100%{transform:rotate(0deg)}16%{transform:rotate(-12deg)}27%,41%{transform:rotate(22deg)}54%,67%{transform:rotate(-30deg)}82%,91%{transform:rotate(16deg)}}
|
|
51
|
-
@keyframes supervisor-gesture{0%,8%,100%{transform:rotate(0deg)}17%{transform:rotate(15deg)}26%{transform:rotate(-32deg)}32%{transform:rotate(8deg)}40%{transform:rotate(-26deg)}54%,67%{transform:rotate(34deg)}81%{transform:rotate(-24deg)}90%{transform:rotate(-4deg)}}
|
|
52
|
-
@keyframes knight-shoulder{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(12deg)}28%,38%{transform:rotate(-70deg)}47%{transform:rotate(-44deg)}59%,69%{transform:rotate(0deg)}82%,90%{transform:rotate(-42deg)}}
|
|
53
|
-
@keyframes knight-gesture{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(-14deg)}28%,38%{transform:rotate(36deg)}47%{transform:rotate(18deg)}59%,69%{transform:rotate(0deg)}82%,90%{transform:rotate(22deg)}}
|
|
54
|
-
@keyframes consider{0%,100%{transform:rotate(-5deg) translateY(0)}20%,38%{transform:rotate(-23deg) translateY(7px)}58%,77%{transform:rotate(10deg) translateY(2px)}}
|
|
55
|
-
@keyframes thinking-shoulder{0%,100%{transform:rotate(-6deg)}22%,40%{transform:rotate(-32deg)}60%,78%{transform:rotate(8deg)}}
|
|
56
|
-
@keyframes thinking-hand{0%,100%{transform:rotate(-18deg)}22%,40%{transform:rotate(-40deg)}60%,78%{transform:rotate(10deg)}}
|
|
57
|
-
@keyframes rest-head{0%,100%{transform:rotate(9deg) translateY(1px)}40%,49%{transform:rotate(23deg) translateY(5px)}65%,77%{transform:rotate(5deg) translateY(.5px)}}
|
|
58
|
-
/* The console supplies page-clock phase to preserve motion across node reconstruction. */
|
|
59
|
-
.weight,.head,.cape,.hat-follow,.arm-far,.arm-near,.forearm-near{animation-delay:var(--kingdom-motion-offset,0s)}
|
|
60
|
-
.breath,.eyes-open{animation-delay:calc(var(--kingdom-motion-offset,0s) + var(--phase))}
|
|
61
|
-
/* Keep the state-specific resting pose. No scripts, SMIL, filters or external assets. */
|
|
62
|
-
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
|
|
63
|
-
]]></style>
|
|
64
|
-
<g stroke="#28352f" stroke-width="2.1" stroke-linejoin="round" stroke-linecap="round">
|
|
65
|
-
<ellipse class="ground-shadow" cx="40" cy="104" rx="23" ry="3" fill="#07140e" opacity=".2" stroke="none"/>
|
|
66
|
-
<g class="figure" data-part="figure"><g class="feet" data-part="feet"><path d="M27 91h12v12H23v-6l4-2Z" fill="#655446" /><path d="M43 91h12l2 7v5H41v-8Z" fill="#655446" /><path d="M24 100h14 M43 100h13" fill="none" stroke="#a28b65" stroke-width="2"/></g><g class="weight" data-part="weight"><g class="cape" data-part="cape"><path d="M24 46Q39 41 56 47L62 81L53 86L40 81L21 87L18 76Z" fill="#415e73" /><path d="M22 52l-3 31l5 7l5-42Z" fill="#a8c2cf" stroke="none" opacity=".45"/></g><g class="breath" data-part="breath"><g class="arm-far" data-part="arm-far"><path d="M27 49Q21 47 18 56L18 65l9 1l5-9Z" fill="#658ba3" /><path d="M18 61h10v6H18Z" fill="#a8c2cf" /><g class="forearm-far" data-part="forearm-far"><path d="M18 65l8-1l3 18l-10 1Z" fill="#415e73" /><path d="M18 80h11v5H18Z" fill="#d4b570" /><path d="M16 65q-4 2-2 6l7 1l1-5Z" fill="#efc69a" /></g></g><g class="torso" data-part="torso"><path d="M27 46l13-3l14 4l2 34l-10 7H33l-9-7Z" fill="#415e73" /><path d="M30 48l10 4l12-4l1 23l-13 5l-13-5Z" fill="#658ba3" /><path d="M31 49l9 3l10-3v6l-10 3l-10-3Z" fill="#a8c2cf" stroke="none"/><path d="M26 75h29v7H26Z" fill="#6c5642" /><path d="M37 74h8v9h-8Z" fill="#d4b570" /><path d="M28 83l10 1l-1 13H25Z" fill="#a8c2cf" /><path d="M44 84l11-1l3 14H44Z" fill="#a8c2cf" /><path d="M28 90h9 M45 90h9" fill="none" stroke="#415e73" stroke-width="2"/></g><g class="head" data-part="head"><path d="M27 24 Q27 16 40 16 Q53 16 53 25 L52 35 Q50 44 40 45 Q30 44 28 35Z" fill="#efc69a" /><path d="M48 25 L52 24 L51 36 Q48 42 41 43 L40 39 Q47 36 48 25Z" fill="#cf9970" stroke="none"/><path d="M26 28 Q21 26 24 33 L28 34 M53 28 Q58 26 56 33 L52 34" fill="#efc69a" /><g class="eyes-open" data-part="eyes-open"><path d="M32 29v2 M45 29v2" fill="none" stroke="#28352f" stroke-width="2.6"/></g><g class="eyes-closed" data-part="eyes-closed"><path d="M30.5 30q3 2.5 6 0 M43 30q3 2.5 6 0" fill="none" stroke="#28352f" stroke-width="1.7"/></g><path d="M30 25.5l6-.5 M43 25l5 .7" fill="none" stroke="#28352f" stroke-width="2.3"/><path d="M40 30l-2 5h4" fill="#cf9970" stroke="none"/><path d="M36 38q4 2 7-1" fill="none" stroke="#76533a" stroke-width="1.7"/><g class="hat-follow" data-part="hat-follow"><path d="M40 14Q43 5 53 8L48 16Z" fill="#658ba3" /></g><path d="M24 27V23Q25 10 40 10Q55 11 56 24v9l-7-3V24L40 21L31 24v10l-7-1Z" fill="#a8c2cf" /><path d="M40 11v10l9 3v6l7 3V23Q53 11 40 11Z" fill="#7d9bab" stroke="none"/><path d="M22 25h35v5H22Z" fill="#415e73" /><path d="M37 11h5v14h-5Z" fill="#d4b570" stroke="none"/></g><g class="arm-near" data-part="arm-near"><path d="M53 47q10 0 12 12l-7 6l-9-10Z" fill="#a8c2cf" /><g class="forearm-near" data-part="forearm-near"><path d="M59 60l8 7l-3 11l-9-5Z" fill="#658ba3" /><path d="M57 68l9 2l-1 7l-10-3Z" fill="#a8c2cf" /><g class="tool" data-part="tool"><path d="M62 72l4-22l4 1l-4 22Z" fill="#95724b" /><path d="M61 47l13 2l-1 9l-13-2Z" fill="#a8c2cf" /><path d="M69 48l5 1l-1 9l-5-1Z" fill="#415e73" stroke="none"/></g><path d="M61 68q5-2 7 2l-1 5l-6 1l-3-4Z" fill="#efc69a" /></g></g></g></g></g>
|
|
67
|
-
</g></svg>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 112" width="80" height="112" preserveAspectRatio="xMidYMid meet" role="img" focusable="false" aria-labelledby="character-title character-desc" data-role="knight" data-state="thinking">
|
|
2
|
+
<title id="character-title">Kingdom 执行者 · thinking</title>
|
|
3
|
+
<desc id="character-desc">护额、分片护甲、短披风和工具。重心就位,抬臂检视工具,回收待续。克制的连续关节动作,支持减少动态效果。</desc>
|
|
4
|
+
<metadata>{"visualVersion":"kingdom-motion-r4-gui","role":"knight","state":"thinking","cycleSeconds":8,"viewBox":[0,0,80,112],"origin":"Owner character redesign authorized 2026-09-08"}</metadata>
|
|
5
|
+
<style><![CDATA[
|
|
6
|
+
/* SVG-wide coordinates make every joint pivot explicit and stable. */
|
|
7
|
+
svg{overflow:hidden;--phase:-2.6s}
|
|
8
|
+
.weight,.breath,.head,.cape,.arm-far,.forearm-far,.arm-near,.forearm-near,.hat-follow{transform-box:view-box}
|
|
9
|
+
.weight{transform-origin:40px 99px;animation:weight 8s cubic-bezier(.42,0,.58,1) infinite}
|
|
10
|
+
.breath{transform-origin:40px 87px;animation:breathe 4s cubic-bezier(.37,0,.63,1) var(--phase) infinite}
|
|
11
|
+
.head{transform-origin:40px 44px;animation:idle-look 8s cubic-bezier(.4,0,.4,1) infinite}
|
|
12
|
+
.cape{transform-origin:40px 48px;animation:cloth 8s cubic-bezier(.4,0,.5,1) infinite}
|
|
13
|
+
.arm-far{transform-origin:27px 51px}.forearm-far{transform-origin:22px 64px}
|
|
14
|
+
.arm-near{transform-origin:54px 51px}.forearm-near{transform-origin:58px 63px}
|
|
15
|
+
.hat-follow{transform-origin:49px 18px;animation:hat-settle 8s ease-in-out infinite}
|
|
16
|
+
.eyes-open{transform-box:fill-box;transform-origin:center;animation:blink 8s linear var(--phase) infinite}
|
|
17
|
+
.eyes-closed{display:none}
|
|
18
|
+
svg:is([data-state="idle"],[data-state="ready"],[data-state="available"]) .arm-near{animation:idle-shoulder 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
19
|
+
svg:is([data-state="idle"],[data-state="ready"],[data-state="available"]) .forearm-near{animation:idle-hand 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
20
|
+
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .weight{animation-name:work-weight}
|
|
21
|
+
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .head{animation-name:work-look}
|
|
22
|
+
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .arm-far{animation:steady-page 8s ease-in-out infinite}
|
|
23
|
+
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .arm-near{animation:knight-shoulder 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
24
|
+
svg:is([data-state="working"],[data-state="running"],[data-state="executing"],[data-state="reviewing"]) .forearm-near{animation:knight-gesture 8s cubic-bezier(.42,0,.24,1) infinite}
|
|
25
|
+
svg:is([data-state="thinking"],[data-state="confused"],[data-state="planning"],[data-state="waiting-input"]) .head{transform:rotate(-5deg);animation:consider 8s ease-in-out infinite}
|
|
26
|
+
svg:is([data-state="thinking"],[data-state="confused"],[data-state="planning"],[data-state="waiting-input"]) .forearm-near{transform:rotate(-18deg);animation:thinking-hand 8s ease-in-out infinite}
|
|
27
|
+
svg:is([data-state="thinking"],[data-state="confused"],[data-state="planning"],[data-state="waiting-input"]) .arm-near{transform:rotate(-6deg);animation:thinking-shoulder 8s ease-in-out infinite}
|
|
28
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .head{transform:rotate(9deg) translateY(1px);animation:rest-head 8s ease-in-out infinite}
|
|
29
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .arm-near{transform:rotate(9deg)}
|
|
30
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .arm-far{transform:rotate(-5deg)}
|
|
31
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .forearm-near{transform:rotate(8deg)}
|
|
32
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .eyes-open{display:none}
|
|
33
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .eyes-closed{display:inline}
|
|
34
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .weight{animation:none;transform:rotate(.4deg)}
|
|
35
|
+
svg:is([data-state="sleeping"],[data-state="paused"],[data-state="resting"]) .breath{animation-duration:4s}
|
|
36
|
+
svg:is([data-state="offline"],[data-state="stopped"],[data-state="absent"]) .figure,svg:is([data-state="offline"],[data-state="stopped"],[data-state="absent"]) .ground-shadow{display:none}
|
|
37
|
+
@keyframes breathe{0%,100%{transform:scale(1,1)}42%{transform:scale(1.01,1.028)}68%{transform:scale(1.005,1.013)}}
|
|
38
|
+
@keyframes weight{0%,100%{transform:rotate(0deg)}20%,35%{transform:rotate(-6deg)}64%,78%{transform:rotate(5deg)}}
|
|
39
|
+
@keyframes work-weight{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(3deg)}28%,39%{transform:rotate(-8deg)}51%{transform:rotate(-3deg)}63%,72%{transform:rotate(4deg)}83%,91%{transform:rotate(-5deg)}}
|
|
40
|
+
@keyframes cloth{0%,100%{transform:rotate(0deg)}16%{transform:rotate(-4deg)}33%,43%{transform:rotate(9deg)}53%{transform:rotate(3deg)}71%,83%{transform:rotate(-7deg)}93%{transform:rotate(3deg)}}
|
|
41
|
+
@keyframes hat-settle{0%,100%{transform:rotate(0deg)}29%{transform:rotate(-12deg)}43%{transform:rotate(5deg)}57%,79%{transform:rotate(0deg)}88%{transform:rotate(-6deg)}}
|
|
42
|
+
@keyframes idle-look{0%,10%,100%{transform:rotate(0deg) translateY(0)}23%,37%{transform:rotate(-16deg) translateY(3px)}49%,66%{transform:rotate(0deg) translateY(0)}80%,90%{transform:rotate(12deg) translateY(2px)}}
|
|
43
|
+
@keyframes idle-shoulder{0%,12%,100%{transform:rotate(0deg)}25%,37%{transform:rotate(-28deg)}49%,68%{transform:rotate(0deg)}80%,89%{transform:rotate(12deg)}}
|
|
44
|
+
@keyframes idle-hand{0%,12%,100%{transform:rotate(0deg)}25%,37%{transform:rotate(14deg)}49%,68%{transform:rotate(0deg)}80%,89%{transform:rotate(-18deg)}}
|
|
45
|
+
@keyframes blink{0%,27%,30%,72%,75%,100%{transform:scaleY(1)}28.5%,73.5%{transform:scaleY(.12)}}
|
|
46
|
+
@keyframes work-look{0%,8%,100%{transform:rotate(0deg) translateY(0)}27%,40%{transform:rotate(20deg) translateY(5px)}54%,68%{transform:rotate(6deg) translateY(1px)}82%,91%{transform:rotate(-13deg) translateY(3px)}}
|
|
47
|
+
@keyframes steady-page{0%,100%{transform:rotate(0deg)}16%{transform:rotate(6deg)}28%,43%{transform:rotate(-8deg)}56%,73%{transform:rotate(0deg)}83%,91%{transform:rotate(-4deg)}}
|
|
48
|
+
@keyframes chancellor-shoulder{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(10deg)}28%,38%{transform:rotate(-58deg)}48%{transform:rotate(-38deg)}60%,71%{transform:rotate(0deg)}83%,90%{transform:rotate(-34deg)}}
|
|
49
|
+
@keyframes chancellor-gesture{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(-12deg)}28%,38%{transform:rotate(28deg)}48%{transform:rotate(18deg)}60%,71%{transform:rotate(0deg)}83%,90%{transform:rotate(14deg)}}
|
|
50
|
+
@keyframes supervisor-shoulder{0%,8%,100%{transform:rotate(0deg)}16%{transform:rotate(-12deg)}27%,41%{transform:rotate(22deg)}54%,67%{transform:rotate(-30deg)}82%,91%{transform:rotate(16deg)}}
|
|
51
|
+
@keyframes supervisor-gesture{0%,8%,100%{transform:rotate(0deg)}17%{transform:rotate(15deg)}26%{transform:rotate(-32deg)}32%{transform:rotate(8deg)}40%{transform:rotate(-26deg)}54%,67%{transform:rotate(34deg)}81%{transform:rotate(-24deg)}90%{transform:rotate(-4deg)}}
|
|
52
|
+
@keyframes knight-shoulder{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(12deg)}28%,38%{transform:rotate(-70deg)}47%{transform:rotate(-44deg)}59%,69%{transform:rotate(0deg)}82%,90%{transform:rotate(-42deg)}}
|
|
53
|
+
@keyframes knight-gesture{0%,7%,100%{transform:rotate(0deg)}14%{transform:rotate(-14deg)}28%,38%{transform:rotate(36deg)}47%{transform:rotate(18deg)}59%,69%{transform:rotate(0deg)}82%,90%{transform:rotate(22deg)}}
|
|
54
|
+
@keyframes consider{0%,100%{transform:rotate(-5deg) translateY(0)}20%,38%{transform:rotate(-23deg) translateY(7px)}58%,77%{transform:rotate(10deg) translateY(2px)}}
|
|
55
|
+
@keyframes thinking-shoulder{0%,100%{transform:rotate(-6deg)}22%,40%{transform:rotate(-32deg)}60%,78%{transform:rotate(8deg)}}
|
|
56
|
+
@keyframes thinking-hand{0%,100%{transform:rotate(-18deg)}22%,40%{transform:rotate(-40deg)}60%,78%{transform:rotate(10deg)}}
|
|
57
|
+
@keyframes rest-head{0%,100%{transform:rotate(9deg) translateY(1px)}40%,49%{transform:rotate(23deg) translateY(5px)}65%,77%{transform:rotate(5deg) translateY(.5px)}}
|
|
58
|
+
/* The console supplies page-clock phase to preserve motion across node reconstruction. */
|
|
59
|
+
.weight,.head,.cape,.hat-follow,.arm-far,.arm-near,.forearm-near{animation-delay:var(--kingdom-motion-offset,0s)}
|
|
60
|
+
.breath,.eyes-open{animation-delay:calc(var(--kingdom-motion-offset,0s) + var(--phase))}
|
|
61
|
+
/* Keep the state-specific resting pose. No scripts, SMIL, filters or external assets. */
|
|
62
|
+
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
|
|
63
|
+
]]></style>
|
|
64
|
+
<g stroke="#28352f" stroke-width="2.1" stroke-linejoin="round" stroke-linecap="round">
|
|
65
|
+
<ellipse class="ground-shadow" cx="40" cy="104" rx="23" ry="3" fill="#07140e" opacity=".2" stroke="none"/>
|
|
66
|
+
<g class="figure" data-part="figure"><g class="feet" data-part="feet"><path d="M27 91h12v12H23v-6l4-2Z" fill="#655446" /><path d="M43 91h12l2 7v5H41v-8Z" fill="#655446" /><path d="M24 100h14 M43 100h13" fill="none" stroke="#a28b65" stroke-width="2"/></g><g class="weight" data-part="weight"><g class="cape" data-part="cape"><path d="M24 46Q39 41 56 47L62 81L53 86L40 81L21 87L18 76Z" fill="#415e73" /><path d="M22 52l-3 31l5 7l5-42Z" fill="#a8c2cf" stroke="none" opacity=".45"/></g><g class="breath" data-part="breath"><g class="arm-far" data-part="arm-far"><path d="M27 49Q21 47 18 56L18 65l9 1l5-9Z" fill="#658ba3" /><path d="M18 61h10v6H18Z" fill="#a8c2cf" /><g class="forearm-far" data-part="forearm-far"><path d="M18 65l8-1l3 18l-10 1Z" fill="#415e73" /><path d="M18 80h11v5H18Z" fill="#d4b570" /><path d="M16 65q-4 2-2 6l7 1l1-5Z" fill="#efc69a" /></g></g><g class="torso" data-part="torso"><path d="M27 46l13-3l14 4l2 34l-10 7H33l-9-7Z" fill="#415e73" /><path d="M30 48l10 4l12-4l1 23l-13 5l-13-5Z" fill="#658ba3" /><path d="M31 49l9 3l10-3v6l-10 3l-10-3Z" fill="#a8c2cf" stroke="none"/><path d="M26 75h29v7H26Z" fill="#6c5642" /><path d="M37 74h8v9h-8Z" fill="#d4b570" /><path d="M28 83l10 1l-1 13H25Z" fill="#a8c2cf" /><path d="M44 84l11-1l3 14H44Z" fill="#a8c2cf" /><path d="M28 90h9 M45 90h9" fill="none" stroke="#415e73" stroke-width="2"/></g><g class="head" data-part="head"><path d="M27 24 Q27 16 40 16 Q53 16 53 25 L52 35 Q50 44 40 45 Q30 44 28 35Z" fill="#efc69a" /><path d="M48 25 L52 24 L51 36 Q48 42 41 43 L40 39 Q47 36 48 25Z" fill="#cf9970" stroke="none"/><path d="M26 28 Q21 26 24 33 L28 34 M53 28 Q58 26 56 33 L52 34" fill="#efc69a" /><g class="eyes-open" data-part="eyes-open"><path d="M32 29v2 M45 29v2" fill="none" stroke="#28352f" stroke-width="2.6"/></g><g class="eyes-closed" data-part="eyes-closed"><path d="M30.5 30q3 2.5 6 0 M43 30q3 2.5 6 0" fill="none" stroke="#28352f" stroke-width="1.7"/></g><path d="M30 25.5l6-.5 M43 25l5 .7" fill="none" stroke="#28352f" stroke-width="2.3"/><path d="M40 30l-2 5h4" fill="#cf9970" stroke="none"/><path d="M36 38q4 2 7-1" fill="none" stroke="#76533a" stroke-width="1.7"/><g class="hat-follow" data-part="hat-follow"><path d="M40 14Q43 5 53 8L48 16Z" fill="#658ba3" /></g><path d="M24 27V23Q25 10 40 10Q55 11 56 24v9l-7-3V24L40 21L31 24v10l-7-1Z" fill="#a8c2cf" /><path d="M40 11v10l9 3v6l7 3V23Q53 11 40 11Z" fill="#7d9bab" stroke="none"/><path d="M22 25h35v5H22Z" fill="#415e73" /><path d="M37 11h5v14h-5Z" fill="#d4b570" stroke="none"/></g><g class="arm-near" data-part="arm-near"><path d="M53 47q10 0 12 12l-7 6l-9-10Z" fill="#a8c2cf" /><g class="forearm-near" data-part="forearm-near"><path d="M59 60l8 7l-3 11l-9-5Z" fill="#658ba3" /><path d="M57 68l9 2l-1 7l-10-3Z" fill="#a8c2cf" /><g class="tool" data-part="tool"><path d="M62 72l4-22l4 1l-4 22Z" fill="#95724b" /><path d="M61 47l13 2l-1 9l-13-2Z" fill="#a8c2cf" /><path d="M69 48l5 1l-1 9l-5-1Z" fill="#415e73" stroke="none"/></g><path d="M61 68q5-2 7 2l-1 5l-6 1l-3-4Z" fill="#efc69a" /></g></g></g></g></g>
|
|
67
|
+
</g></svg>
|