@wallarm-org/claude-design 4.13.0 → 4.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/SETUP.md +7 -7
  2. package/dist/UPDATE.md +9 -9
  3. package/dist/project/components/AppShell/stories.js +1 -1
  4. package/dist/project/components/AppShell/stories.md +2 -2
  5. package/dist/project/components/ApprovalCard/README.md +30 -1
  6. package/dist/project/components/ApprovalCard/stories.js +2 -2
  7. package/dist/project/components/Attribute/README.md +48 -0
  8. package/dist/project/components/Attribute/stories.js +2 -2
  9. package/dist/project/components/Avatar/README.md +46 -1
  10. package/dist/project/components/Avatar/stories.js +1 -1
  11. package/dist/project/components/ChainOfThought/README.md +38 -0
  12. package/dist/project/components/ChainOfThought/stories.js +1 -1
  13. package/dist/project/components/Chat/README.md +2 -2
  14. package/dist/project/components/Drawer/README.md +73 -0
  15. package/dist/project/components/Drawer/stories.js +1 -1
  16. package/dist/project/components/DropdownMenu/README.md +64 -1
  17. package/dist/project/components/DropdownMenu/stories.js +1 -1
  18. package/dist/project/components/FilterDropdown/README.md +1014 -0
  19. package/dist/project/components/FilterDropdown/stories.js +1 -1
  20. package/dist/project/components/FilterInput/README.md +6 -0
  21. package/dist/project/components/FilterInput/stories.js +1 -1
  22. package/dist/project/components/FilterInput/stories.md +25 -0
  23. package/dist/project/components/NotificationCenter/stories.md +2 -2
  24. package/dist/project/components/RemoteShell/README.md +2 -2
  25. package/dist/project/components/SearchModal/README.md +4 -4
  26. package/dist/project/components/SearchModal/stories.js +1 -1
  27. package/dist/project/components/Select/README.md +47 -0
  28. package/dist/project/components/Select/stories.js +1 -1
  29. package/dist/project/components/Table/README.md +8 -0
  30. package/dist/project/components/Table/stories.js +2 -2
  31. package/dist/project/components/Table/stories.md +117 -0
  32. package/dist/project/components/Tag/README.md +45 -0
  33. package/dist/project/components/Tag/stories.js +1 -1
  34. package/dist/project/components/Timeline/README.md +75 -0
  35. package/dist/project/components/Timeline/stories.js +1 -1
  36. package/dist/project/components/bundle.css +16 -0
  37. package/dist/project/components/bundle.js +48 -48
  38. package/dist/project/components/index.d.ts +86 -6
  39. package/dist/project/design-system.json +4 -4
  40. package/dist/project/tokens.json +2 -2
  41. package/package.json +4 -4
@@ -82,6 +82,14 @@ the trigger's child to put an analytics id on the ✕.
82
82
 
83
83
  Source: FilterDropdown/FilterDropdown.stories.tsx#Multi
84
84
 
85
+ ### Agent
86
+
87
+ Filter by agent: each option leads with the agent's 16 px glyph through `icon`, and in single
88
+ mode the trigger's `renderIcon` puts the picked agent's glyph before its name. Multi keeps the
89
+ text forms.
90
+
91
+ Source: FilterDropdown/FilterDropdown.stories.tsx#Agent
92
+
85
93
  ### LabelForms
86
94
 
87
95
  Every form the trigger takes: dashed while unset, solid with a shadow once set.
@@ -142,6 +150,8 @@ Source: FilterDropdown/FilterDropdown.stories.tsx#Controlled
142
150
  import { useState } from 'react';
143
151
  import { createListCollection } from '@ark-ui/react/collection';
144
152
  import type { Meta, StoryFn } from 'storybook-react-rsbuild';
153
+ import { CAST } from '../../lib/agent-characters/data.gen';
154
+ import { AgentGlyph } from '../AgentGlyph';
145
155
  import { Button } from '../Button';
146
156
  import { SearchInput } from '../SearchInput';
147
157
  import { SegmentedTabs, SegmentedTabsList, SegmentedTabsTrigger } from '../SegmentedTabs';
@@ -306,6 +316,57 @@ export const Multi: StoryFn<typeof FilterDropdown> = () => (
306
316
  </FilterDropdown>
307
317
  );
308
318
 
319
+ const agents = CAST.map(({ id, name }) => ({ value: id, label: name }));
320
+
321
+ /** Agents are known by their character: the option and the single trigger lead with the glyph. */
322
+ const renderAgentGlyph = (item: (typeof agents)[number]) => (
323
+ <AgentGlyph agent={item.value} size={16} />
324
+ );
325
+
326
+ /**
327
+ * Filter by agent: each option leads with the agent's 16 px glyph through `icon`, and in single
328
+ * mode the trigger's `renderIcon` puts the picked agent's glyph before its name. Multi keeps the
329
+ * text forms.
330
+ */
331
+ export const Agent: StoryFn<typeof FilterDropdown> = () => (
332
+ <div className='flex gap-8'>
333
+ <FilterDropdown
334
+ label='Agent'
335
+ allLabel='All agents'
336
+ collection={createListCollection({ items: agents })}
337
+ defaultValue={['radar']}
338
+ data-testid='filter-dropdown-single'
339
+ >
340
+ <FilterDropdownTrigger renderIcon={renderAgentGlyph} />
341
+ <FilterDropdownContent>
342
+ <FilterDropdownAllOption />
343
+ {agents.map(item => (
344
+ <FilterDropdownOption key={item.value} item={item} icon={renderAgentGlyph(item)}>
345
+ {item.label}
346
+ </FilterDropdownOption>
347
+ ))}
348
+ </FilterDropdownContent>
349
+ </FilterDropdown>
350
+ <FilterDropdown
351
+ label='Agent'
352
+ multiple
353
+ collection={createListCollection({ items: agents })}
354
+ defaultValue={['sift']}
355
+ data-testid='filter-dropdown-multi'
356
+ >
357
+ <FilterDropdownTrigger />
358
+ <FilterDropdownContent>
359
+ {agents.map(item => (
360
+ <FilterDropdownOption key={item.value} item={item} icon={renderAgentGlyph(item)}>
361
+ {item.label}
362
+ </FilterDropdownOption>
363
+ ))}
364
+ <FilterDropdownFooter />
365
+ </FilterDropdownContent>
366
+ </FilterDropdown>
367
+ </div>
368
+ );
369
+
309
370
  const LabelFormRow = ({
310
371
  caption,
311
372
  multiple = false,
@@ -540,3 +601,956 @@ export const Controlled: StoryFn<typeof FilterDropdown> = () => {
540
601
  );
541
602
  };
542
603
  ```
604
+
605
+ ### ../lib/agent-characters/data.gen.ts
606
+
607
+ ```tsx
608
+ // GENERATED by scripts/agent-avatars/export-data.ts from the handoff data (reference look v17). Do not edit.
609
+ // Source export: 2026-11-11, look v17, Playwright (playwright-core 1.63.0) with Chrome 157 headless, 1440 x 900 viewport, deviceScaleFactor 2; values read from the page's own constants and functions at runtime
610
+
611
+ // Id unions: the page's own ids (07 §6.2). `cyan` is labelled «teal».
612
+ export type AgentShapeId = 'dome' | 'gumdrop' | 'cushion' | 'pebble' | 'capsule' | 'cloud' | 'egg' | 'mochi' | 'kettle' | 'mug' | 'padlock' | 'safe';
613
+ export type AgentColorId = 'coral' | 'cobalt' | 'sky' | 'cyan' | 'lilac' | 'heather' | 'pink' | 'sand' | 'toffee' | 'powder' | 'lavender' | 'blush' | 'butter' | 'mint' | 'sage' | 'petrol' | 'plum' | 'cocoa' | 'olive' | 'graphite' | 'stone' | 'oat';
614
+ export type AgentEyeStyle = 'round' | 'oval' | 'tall' | 'sleepy';
615
+ export type AgentPropId = 'antennae' | 'dish' | 'glasses' | 'seam' | 'beanie' | 'headlamp' | 'periscope' | 'magnifier' | 'pennant' | 'flowerclip' | 'plaster' | 'sprout' | 'badge' | 'windkey' | 'monocle' | 'quill' | 'none';
616
+ export type AgentCharacterId = 'wally' | 'radar' | 'sift' | 'acquit' | 'trim' | 'lens' | 'bard';
617
+ export type AgentToneId = 'metal' | 'ink' | 'leaf' | 'wood' | 'oat' | 'honey' | 'brass' | 'cocoa' | 'glass' | 'beige';
618
+
619
+ /** A stored look: four ids and a schema version, so a later kit change can migrate stored looks. */
620
+ export interface AgentLook {
621
+ v: 1;
622
+ shape: AgentShapeId;
623
+ color: AgentColorId;
624
+ eyes: AgentEyeStyle;
625
+ prop: AgentPropId;
626
+ }
627
+
628
+ /** A preset: a look plus its default name, role and template (null: Wally, and an agent whose template does not exist yet). */
629
+ export interface AgentPreset extends Omit<AgentLook, 'v'> {
630
+ id: AgentCharacterId;
631
+ name: string;
632
+ role: string;
633
+ templateId: string | null;
634
+ }
635
+
636
+ export interface AgentShapeDef {
637
+ id: AgentShapeId;
638
+ fam: 'soft' | 'object';
639
+ name: string;
640
+ /** body outline on the 120-unit grid */
641
+ d: string;
642
+ /** visor [x, y, width, height] */
643
+ v: [number, number, number, number];
644
+ /** declared top anchor; otherwise measured */
645
+ top?: [number, number];
646
+ parts?: { d: string; tone: AgentToneId; z: 'b' | 'f' }[];
647
+ }
648
+ export interface AgentColorDef {
649
+ id: AgentColorId;
650
+ name: string;
651
+ hex: string;
652
+ g: 'brand' | 'cool' | 'warm' | 'pastel' | 'deep' | 'neutral';
653
+ brand?: boolean;
654
+ }
655
+ export interface PropLayer {
656
+ d: string;
657
+ col: string;
658
+ mat: 'vinyl' | 'felt' | null;
659
+ }
660
+ export interface PropDeco {
661
+ s: string;
662
+ clip?: boolean;
663
+ }
664
+ export interface PropDef {
665
+ layers: PropLayer[];
666
+ deco: PropDeco[];
667
+ anim: { type: string; px: number; py: number } | null;
668
+ fid: { k: string; px: number; py: number };
669
+ }
670
+ export interface EyeBase { w: number; ht: number; hb: number; kt: number; kb: number; lid: number }
671
+
672
+ export const SHAPE_IDS: AgentShapeId[] = [
673
+ "dome",
674
+ "gumdrop",
675
+ "cushion",
676
+ "pebble",
677
+ "capsule",
678
+ "cloud",
679
+ "egg",
680
+ "mochi",
681
+ "kettle",
682
+ "mug",
683
+ "padlock",
684
+ "safe"
685
+ ];
686
+ export const COLOR_IDS: AgentColorId[] = [
687
+ "coral",
688
+ "cobalt",
689
+ "sky",
690
+ "cyan",
691
+ "lilac",
692
+ "heather",
693
+ "pink",
694
+ "sand",
695
+ "toffee",
696
+ "powder",
697
+ "lavender",
698
+ "blush",
699
+ "butter",
700
+ "mint",
701
+ "sage",
702
+ "petrol",
703
+ "plum",
704
+ "cocoa",
705
+ "olive",
706
+ "graphite",
707
+ "stone",
708
+ "oat"
709
+ ];
710
+ export const EYE_STYLES: AgentEyeStyle[] = [
711
+ "round",
712
+ "oval",
713
+ "tall",
714
+ "sleepy"
715
+ ];
716
+ export const PROP_IDS: AgentPropId[] = [
717
+ "antennae",
718
+ "dish",
719
+ "glasses",
720
+ "seam",
721
+ "beanie",
722
+ "headlamp",
723
+ "periscope",
724
+ "magnifier",
725
+ "pennant",
726
+ "flowerclip",
727
+ "plaster",
728
+ "sprout",
729
+ "badge",
730
+ "windkey",
731
+ "monocle",
732
+ "quill",
733
+ "none"
734
+ ];
735
+
736
+ export const SHAPES: AgentShapeDef[] = [
737
+ {
738
+ "id": "dome",
739
+ "fam": "soft",
740
+ "name": "Dome",
741
+ "d": "M16 100C16 56 36 30 60 30C84 30 104 56 104 100Q104 108 96 108H24Q16 108 16 100Z",
742
+ "v": [
743
+ 28,
744
+ 64,
745
+ 64,
746
+ 28
747
+ ]
748
+ },
749
+ {
750
+ "id": "gumdrop",
751
+ "fam": "soft",
752
+ "name": "Gumdrop",
753
+ "d": "M60 16C72 16 106 82 106 97C106 105 100 108 91 108H29C20 108 14 105 14 97C14 82 48 16 60 16Z",
754
+ "v": [
755
+ 34,
756
+ 70,
757
+ 52,
758
+ 26
759
+ ]
760
+ },
761
+ {
762
+ "id": "cushion",
763
+ "fam": "soft",
764
+ "name": "Cushion",
765
+ "d": "M24 32C40 26 80 26 96 32C104 35 106 42 106 58V92C106 104 100 108 88 108H32C20 108 14 104 14 92V58C14 42 16 35 24 32Z",
766
+ "v": [
767
+ 28,
768
+ 60,
769
+ 64,
770
+ 28
771
+ ]
772
+ },
773
+ {
774
+ "id": "pebble",
775
+ "fam": "soft",
776
+ "name": "Pebble",
777
+ "d": "M60 40C90 40 108 62 108 84C108 100 96 108 80 108H40C24 108 12 100 12 84C12 62 30 40 60 40Z",
778
+ "v": [
779
+ 28,
780
+ 66,
781
+ 64,
782
+ 26
783
+ ]
784
+ },
785
+ {
786
+ "id": "capsule",
787
+ "fam": "soft",
788
+ "name": "Capsule",
789
+ "d": "M60 20C80 20 90 34 90 54V96C90 104 84 108 76 108H44C36 108 30 104 30 96V54C30 34 40 20 60 20Z",
790
+ "v": [
791
+ 36,
792
+ 58,
793
+ 48,
794
+ 28
795
+ ]
796
+ },
797
+ {
798
+ "id": "cloud",
799
+ "fam": "soft",
800
+ "name": "Cloud",
801
+ "d": "M30 108C16 108 10 98 13 88C8 76 18 63 31 66C31 50 46 40 60 46C72 36 92 44 92 60C104 60 112 72 107 85C112 98 104 108 92 108Z",
802
+ "v": [
803
+ 30,
804
+ 72,
805
+ 60,
806
+ 26
807
+ ],
808
+ "top": [
809
+ 60,
810
+ 45
811
+ ]
812
+ },
813
+ {
814
+ "id": "egg",
815
+ "fam": "soft",
816
+ "name": "Egg",
817
+ "d": "M60 20C84 20 98 54 98 78C98 98 82 108 60 108C38 108 22 98 22 78C22 54 36 20 60 20Z",
818
+ "v": [
819
+ 32,
820
+ 62,
821
+ 56,
822
+ 26
823
+ ]
824
+ },
825
+ {
826
+ "id": "mochi",
827
+ "fam": "soft",
828
+ "name": "Mochi",
829
+ "d": "M60 50C92 50 112 70 112 88C112 102 100 108 84 108H36C20 108 8 102 8 88C8 70 28 50 60 50Z",
830
+ "v": [
831
+ 26,
832
+ 70,
833
+ 68,
834
+ 24
835
+ ]
836
+ },
837
+ {
838
+ "id": "kettle",
839
+ "fam": "object",
840
+ "name": "Kettle",
841
+ "d": "M18 100C18 66 36 44 60 44C84 44 102 66 102 100Q102 108 94 108H26Q18 108 18 100ZM24 80C14 74 8 64 5 56L9 53C13 61 20 69 28 74Z",
842
+ "v": [
843
+ 30,
844
+ 68,
845
+ 60,
846
+ 26
847
+ ],
848
+ "top": [
849
+ 60,
850
+ 44
851
+ ],
852
+ "parts": [
853
+ {
854
+ "d": "M31 64.07L30.87 57.86L31.66 52.01L33.32 46.78L35.74 42.21L38.82 38.31L42.44 35.13L46.48 32.66L50.83 30.9L55.36 29.85L60 29.5L64.64 29.85L69.17 30.9L73.52 32.66L77.56 35.13L81.18 38.31L84.26 42.21L86.68 46.78L88.34 52.01L89.13 57.86L89 64.07A3 3 0 0 1 83 63.93L83.14 58.17L82.48 53.31L81.14 49.09L79.23 45.47L76.82 42.44L74 39.95L70.82 38.01L67.37 36.62L63.73 35.78L60 35.5L56.27 35.78L52.63 36.62L49.18 38.01L46 39.95L43.18 42.44L40.77 45.47L38.86 49.09L37.52 53.31L36.86 58.17L37 63.93A3 3 0 0 1 31 64.07Z",
855
+ "tone": "ink",
856
+ "z": "b"
857
+ },
858
+ {
859
+ "d": "M55 42A5 4 0 1 1 65 42A5 4 0 1 1 55 42Z",
860
+ "tone": "ink",
861
+ "z": "f"
862
+ }
863
+ ]
864
+ },
865
+ {
866
+ "id": "mug",
867
+ "fam": "object",
868
+ "name": "Mug",
869
+ "d": "M28 34H74A12 12 0 0 1 86 46V96A12 12 0 0 1 74 108H28A12 12 0 0 1 16 96V46A12 12 0 0 1 28 34ZM77 70A15 19 0 1 1 107 70A15 19 0 1 1 77 70ZM87.5 70A6.5 9.5 0 1 0 100.5 70A6.5 9.5 0 1 0 87.5 70Z",
870
+ "v": [
871
+ 22,
872
+ 56,
873
+ 58,
874
+ 28
875
+ ]
876
+ },
877
+ {
878
+ "id": "padlock",
879
+ "fam": "object",
880
+ "name": "Padlock",
881
+ "d": "M36 52H84A16 16 0 0 1 100 68V92A16 16 0 0 1 84 108H36A16 16 0 0 1 20 92V68A16 16 0 0 1 36 52Z",
882
+ "v": [
883
+ 30,
884
+ 66,
885
+ 60,
886
+ 26
887
+ ],
888
+ "top": [
889
+ 60,
890
+ 14
891
+ ],
892
+ "parts": [
893
+ {
894
+ "d": "M34 58V40A26 26 0 0 1 86 40V58H74V40A14 14 0 0 0 46 40V58Z",
895
+ "tone": "metal",
896
+ "z": "b"
897
+ }
898
+ ]
899
+ },
900
+ {
901
+ "id": "safe",
902
+ "fam": "object",
903
+ "name": "Safe",
904
+ "d": "M28 30H92A14 14 0 0 1 106 44V86A14 14 0 0 1 92 100H28A14 14 0 0 1 14 86V44A14 14 0 0 1 28 30Z",
905
+ "v": [
906
+ 26,
907
+ 44,
908
+ 68,
909
+ 26
910
+ ],
911
+ "parts": [
912
+ {
913
+ "d": "M26 96H32A4 4 0 0 1 36 100V104A4 4 0 0 1 32 108H26A4 4 0 0 1 22 104V100A4 4 0 0 1 26 96ZM88 96H94A4 4 0 0 1 98 100V104A4 4 0 0 1 94 108H88A4 4 0 0 1 84 104V100A4 4 0 0 1 88 96Z",
914
+ "tone": "ink",
915
+ "z": "b"
916
+ },
917
+ {
918
+ "d": "M53 86A7 7 0 1 1 67 86A7 7 0 1 1 53 86ZM73.5 83.5H87.5A2.5 2.5 0 0 1 90 86V86A2.5 2.5 0 0 1 87.5 88.5H73.5A2.5 2.5 0 0 1 71 86V86A2.5 2.5 0 0 1 73.5 83.5Z",
919
+ "tone": "metal",
920
+ "z": "f"
921
+ }
922
+ ]
923
+ }
924
+ ];
925
+
926
+ export const COLORS: AgentColorDef[] = [
927
+ {
928
+ "id": "coral",
929
+ "name": "coral, Wally only",
930
+ "hex": "#FF4D2E",
931
+ "g": "brand",
932
+ "brand": true
933
+ },
934
+ {
935
+ "id": "cobalt",
936
+ "name": "cobalt",
937
+ "hex": "#3F63DB",
938
+ "g": "cool"
939
+ },
940
+ {
941
+ "id": "sky",
942
+ "name": "sky",
943
+ "hex": "#62AEEB",
944
+ "g": "cool"
945
+ },
946
+ {
947
+ "id": "cyan",
948
+ "name": "teal",
949
+ "hex": "#2BA6BF",
950
+ "g": "cool"
951
+ },
952
+ {
953
+ "id": "lilac",
954
+ "name": "lilac",
955
+ "hex": "#9A7FE0",
956
+ "g": "cool"
957
+ },
958
+ {
959
+ "id": "heather",
960
+ "name": "heather",
961
+ "hex": "#9E86A8",
962
+ "g": "cool"
963
+ },
964
+ {
965
+ "id": "pink",
966
+ "name": "pink",
967
+ "hex": "#E373A8",
968
+ "g": "warm"
969
+ },
970
+ {
971
+ "id": "sand",
972
+ "name": "sand",
973
+ "hex": "#D8B68A",
974
+ "g": "warm"
975
+ },
976
+ {
977
+ "id": "toffee",
978
+ "name": "toffee",
979
+ "hex": "#A87A62",
980
+ "g": "warm"
981
+ },
982
+ {
983
+ "id": "powder",
984
+ "name": "powder",
985
+ "hex": "#B9D7F0",
986
+ "g": "pastel"
987
+ },
988
+ {
989
+ "id": "lavender",
990
+ "name": "lavender",
991
+ "hex": "#D3C6F3",
992
+ "g": "pastel"
993
+ },
994
+ {
995
+ "id": "blush",
996
+ "name": "blush",
997
+ "hex": "#F2B8C8",
998
+ "g": "pastel"
999
+ },
1000
+ {
1001
+ "id": "butter",
1002
+ "name": "butter",
1003
+ "hex": "#F2D57E",
1004
+ "g": "pastel"
1005
+ },
1006
+ {
1007
+ "id": "mint",
1008
+ "name": "mint",
1009
+ "hex": "#A8DCC8",
1010
+ "g": "pastel"
1011
+ },
1012
+ {
1013
+ "id": "sage",
1014
+ "name": "sage",
1015
+ "hex": "#9BAE8C",
1016
+ "g": "pastel"
1017
+ },
1018
+ {
1019
+ "id": "petrol",
1020
+ "name": "petrol",
1021
+ "hex": "#2D6E8E",
1022
+ "g": "deep"
1023
+ },
1024
+ {
1025
+ "id": "plum",
1026
+ "name": "plum",
1027
+ "hex": "#7C4485",
1028
+ "g": "deep"
1029
+ },
1030
+ {
1031
+ "id": "cocoa",
1032
+ "name": "cocoa",
1033
+ "hex": "#6B4C3F",
1034
+ "g": "deep"
1035
+ },
1036
+ {
1037
+ "id": "olive",
1038
+ "name": "olive",
1039
+ "hex": "#7E7C48",
1040
+ "g": "deep"
1041
+ },
1042
+ {
1043
+ "id": "graphite",
1044
+ "name": "graphite",
1045
+ "hex": "#4C5463",
1046
+ "g": "neutral"
1047
+ },
1048
+ {
1049
+ "id": "stone",
1050
+ "name": "stone",
1051
+ "hex": "#A9A59D",
1052
+ "g": "neutral"
1053
+ },
1054
+ {
1055
+ "id": "oat",
1056
+ "name": "oat",
1057
+ "hex": "#E9E0D0",
1058
+ "g": "neutral"
1059
+ }
1060
+ ];
1061
+
1062
+ export const TONE: Record<AgentToneId, string> = {
1063
+ "metal": "#A3ABBB",
1064
+ "ink": "#262A36",
1065
+ "leaf": "#7F9E66",
1066
+ "wood": "#8E6447",
1067
+ "oat": "#EEE5D6",
1068
+ "honey": "#E8B54E",
1069
+ "brass": "#C8A35E",
1070
+ "cocoa": "#5B3E33",
1071
+ "glass": "#CFE3F2",
1072
+ "beige": "#E9D2B5"
1073
+ };
1074
+
1075
+ export const HARD: ReadonlySet<string> = new Set([
1076
+ "metal",
1077
+ "brass",
1078
+ "ink",
1079
+ "glass"
1080
+ ]);
1081
+
1082
+ export const EYE_BASE: Record<AgentEyeStyle, EyeBase> = {
1083
+ "round": {
1084
+ "w": 1.05,
1085
+ "ht": 1,
1086
+ "hb": 1,
1087
+ "kt": 0.55,
1088
+ "kb": 0.55,
1089
+ "lid": 0
1090
+ },
1091
+ "oval": {
1092
+ "w": 1,
1093
+ "ht": 1.25,
1094
+ "hb": 1.25,
1095
+ "kt": 0.55,
1096
+ "kb": 0.55,
1097
+ "lid": 0
1098
+ },
1099
+ "tall": {
1100
+ "w": 0.8,
1101
+ "ht": 1.6,
1102
+ "hb": 1.6,
1103
+ "kt": 0.6,
1104
+ "kb": 0.6,
1105
+ "lid": 0
1106
+ },
1107
+ "sleepy": {
1108
+ "w": 1.05,
1109
+ "ht": 1.15,
1110
+ "hb": 1.15,
1111
+ "kt": 0.55,
1112
+ "kb": 0.55,
1113
+ "lid": 0.5
1114
+ }
1115
+ };
1116
+
1117
+ export const PROPS: [AgentPropId, string][] = [
1118
+ [
1119
+ "antennae",
1120
+ "Antennae"
1121
+ ],
1122
+ [
1123
+ "dish",
1124
+ "Dish antenna"
1125
+ ],
1126
+ [
1127
+ "glasses",
1128
+ "Glasses"
1129
+ ],
1130
+ [
1131
+ "seam",
1132
+ "Seam"
1133
+ ],
1134
+ [
1135
+ "beanie",
1136
+ "Beanie"
1137
+ ],
1138
+ [
1139
+ "headlamp",
1140
+ "Headlamp"
1141
+ ],
1142
+ [
1143
+ "periscope",
1144
+ "Periscope"
1145
+ ],
1146
+ [
1147
+ "magnifier",
1148
+ "Magnifier"
1149
+ ],
1150
+ [
1151
+ "pennant",
1152
+ "Pennant"
1153
+ ],
1154
+ [
1155
+ "flowerclip",
1156
+ "Flower clip"
1157
+ ],
1158
+ [
1159
+ "plaster",
1160
+ "Plaster"
1161
+ ],
1162
+ [
1163
+ "sprout",
1164
+ "Sprout"
1165
+ ],
1166
+ [
1167
+ "badge",
1168
+ "Badge"
1169
+ ],
1170
+ [
1171
+ "windkey",
1172
+ "Wind-up key"
1173
+ ],
1174
+ [
1175
+ "monocle",
1176
+ "Monocle"
1177
+ ],
1178
+ [
1179
+ "quill",
1180
+ "Quill"
1181
+ ],
1182
+ [
1183
+ "none",
1184
+ "No prop"
1185
+ ]
1186
+ ];
1187
+
1188
+ export const GLYPH_PROPS: ReadonlySet<string> = new Set([
1189
+ "antennae",
1190
+ "dish",
1191
+ "beanie",
1192
+ "periscope",
1193
+ "pennant",
1194
+ "sprout",
1195
+ "windkey",
1196
+ "quill"
1197
+ ]);
1198
+
1199
+ export const CAST: AgentPreset[] = [
1200
+ {
1201
+ "id": "wally",
1202
+ "name": "Wally",
1203
+ "role": "Assistant",
1204
+ "templateId": null,
1205
+ "shape": "dome",
1206
+ "color": "coral",
1207
+ "eyes": "oval",
1208
+ "prop": "antennae"
1209
+ },
1210
+ {
1211
+ "id": "radar",
1212
+ "name": "Radar",
1213
+ "role": "Attack Anomaly Investigator",
1214
+ "templateId": "attack-anomaly-investigation",
1215
+ "shape": "gumdrop",
1216
+ "color": "cobalt",
1217
+ "eyes": "tall",
1218
+ "prop": "dish"
1219
+ },
1220
+ {
1221
+ "id": "sift",
1222
+ "name": "Sift",
1223
+ "role": "False Positives Analyzer",
1224
+ "templateId": "fp-marking",
1225
+ "shape": "cushion",
1226
+ "color": "lilac",
1227
+ "eyes": "round",
1228
+ "prop": "glasses"
1229
+ },
1230
+ {
1231
+ "id": "acquit",
1232
+ "name": "Acquit",
1233
+ "role": "False Positive Resolver",
1234
+ "templateId": "fp-resolver",
1235
+ "shape": "pebble",
1236
+ "color": "sand",
1237
+ "eyes": "sleepy",
1238
+ "prop": "seam"
1239
+ },
1240
+ {
1241
+ "id": "trim",
1242
+ "name": "Trim",
1243
+ "role": "Ruleset Optimizer",
1244
+ "templateId": "ruleset-optimizer",
1245
+ "shape": "capsule",
1246
+ "color": "cyan",
1247
+ "eyes": "oval",
1248
+ "prop": "windkey"
1249
+ },
1250
+ {
1251
+ "id": "lens",
1252
+ "name": "Lens",
1253
+ "role": "API Posture Reviewer",
1254
+ "templateId": null,
1255
+ "shape": "mochi",
1256
+ "color": "mint",
1257
+ "eyes": "tall",
1258
+ "prop": "periscope"
1259
+ },
1260
+ {
1261
+ "id": "bard",
1262
+ "name": "Bard",
1263
+ "role": "Security Posture Briefer",
1264
+ "templateId": null,
1265
+ "shape": "cloud",
1266
+ "color": "powder",
1267
+ "eyes": "oval",
1268
+ "prop": "quill"
1269
+ }
1270
+ ];
1271
+
1272
+ /** propDef() for the presets, keyed `shape|hex|prop`; any other look needs the AgentLookBuilder entry. */
1273
+ export const PRESET_PROPS: Partial<Record<string, PropDef>> = {
1274
+ "dome|#FF4D2E|antennae": {
1275
+ "layers": [
1276
+ {
1277
+ "d": "M49.69 35.73L48.83 34.18L47.97 32.67L47.1 31.2L46.21 29.75L45.32 28.33L44.42 26.95L43.51 25.6L42.59 24.27L41.66 22.98L40.72 21.72L39.77 20.49L38.82 19.29L37.85 18.13L36.86 16.98A1.5 1.5 0 0 1 39.14 15.02L40.14 16.19L41.14 17.4L42.13 18.64L43.11 19.91L44.08 21.21L45.04 22.54L45.99 23.9L46.92 25.29L47.85 26.72L48.76 28.17L49.67 29.65L50.56 31.16L51.44 32.71L52.31 34.27A1.5 1.5 0 0 1 49.69 35.73ZM33.1 14.5A4.4 4.4 0 1 1 41.9 14.5A4.4 4.4 0 1 1 33.1 14.5ZM67.69 34.27L68.56 32.71L69.44 31.16L70.33 29.65L71.24 28.17L72.15 26.72L73.08 25.29L74.01 23.9L74.96 22.54L75.92 21.21L76.89 19.91L77.87 18.64L78.86 17.4L79.86 16.19L80.86 15.02A1.5 1.5 0 0 1 83.14 16.98L82.15 18.13L81.18 19.29L80.23 20.49L79.28 21.72L78.34 22.98L77.41 24.27L76.49 25.6L75.58 26.95L74.68 28.33L73.79 29.75L72.9 31.2L72.03 32.67L71.17 34.18L70.31 35.73A1.5 1.5 0 0 1 67.69 34.27ZM78.1 14.5A4.4 4.4 0 1 1 86.9 14.5A4.4 4.4 0 1 1 78.1 14.5Z",
1278
+ "col": "#262A36",
1279
+ "mat": "vinyl"
1280
+ }
1281
+ ],
1282
+ "deco": [],
1283
+ "anim": {
1284
+ "type": "twitch",
1285
+ "px": 60,
1286
+ "py": 34
1287
+ },
1288
+ "fid": {
1289
+ "k": "twitch",
1290
+ "px": 60,
1291
+ "py": 34
1292
+ }
1293
+ },
1294
+ "gumdrop|#3F63DB|dish": {
1295
+ "layers": [
1296
+ {
1297
+ "d": "M60.73 19.71L63.73 6.71A1.3 1.3 0 0 1 66.27 7.29L63.27 20.29A1.3 1.3 0 0 1 60.73 19.71Z",
1298
+ "col": "#262A36",
1299
+ "mat": "vinyl"
1300
+ },
1301
+ {
1302
+ "d": "M52 0Q65 15 79 2Z",
1303
+ "col": "#a9b9ef",
1304
+ "mat": null
1305
+ },
1306
+ {
1307
+ "d": "M64.13 3.76L67.13 -7.24A0.9 0.9 0 0 1 68.87 -6.76L65.87 4.24A0.9 0.9 0 0 1 64.13 3.76ZM65.6 -8A2.4 2.4 0 1 1 70.4 -8A2.4 2.4 0 1 1 65.6 -8Z",
1308
+ "col": "#262A36",
1309
+ "mat": "vinyl"
1310
+ }
1311
+ ],
1312
+ "deco": [],
1313
+ "anim": {
1314
+ "type": "dish",
1315
+ "px": 63,
1316
+ "py": 18
1317
+ },
1318
+ "fid": {
1319
+ "k": "scan",
1320
+ "px": 63,
1321
+ "py": 18
1322
+ }
1323
+ },
1324
+ "cushion|#9A7FE0|glasses": {
1325
+ "layers": [
1326
+ {
1327
+ "d": "M36.7 74A10.5 10.5 0 1 1 57.7 74A10.5 10.5 0 1 1 36.7 74ZM38.8 74A8.4 8.4 0 1 0 55.6 74A8.4 8.4 0 1 0 38.8 74ZM62.3 74A10.5 10.5 0 1 1 83.3 74A10.5 10.5 0 1 1 62.3 74ZM64.4 74A8.4 8.4 0 1 0 81.2 74A8.4 8.4 0 1 0 64.4 74ZM56.07 71.86L56.57 71.37L57.1 70.93L57.65 70.55L58.21 70.25L58.8 70.03L59.39 69.9L60 69.85L60.61 69.9L61.2 70.03L61.79 70.25L62.35 70.55L62.9 70.93L63.43 71.37L63.93 71.86A0.9 0.9 0 0 1 62.67 73.14L62.22 72.7L61.81 72.36L61.42 72.09L61.04 71.89L60.68 71.75L60.34 71.68L60 71.65L59.66 71.68L59.32 71.75L58.96 71.89L58.58 72.09L58.19 72.36L57.78 72.7L57.33 73.14A0.9 0.9 0 0 1 56.07 71.86Z",
1328
+ "col": "#EEE5D6",
1329
+ "mat": "vinyl"
1330
+ }
1331
+ ],
1332
+ "deco": [
1333
+ {
1334
+ "s": "<path class=\"glint\" d=\"M75.3 67.5l3.2 3.2M49.7 67.5l3.2 3.2\" stroke=\"#fff\" stroke-width=\"1.5\" stroke-linecap=\"round\" opacity=\".55\"/>"
1335
+ }
1336
+ ],
1337
+ "anim": null,
1338
+ "fid": {
1339
+ "k": "bob",
1340
+ "px": 60,
1341
+ "py": 27.5
1342
+ }
1343
+ },
1344
+ "pebble|#D8B68A|seam": {
1345
+ "layers": [],
1346
+ "deco": [
1347
+ {
1348
+ "clip": true,
1349
+ "s": "<path d=\"M26.5 57Q60 47 93.5 57\" stroke=\"#877258\" stroke-width=\"1.3\" fill=\"none\"/><path class=\"stitch\" d=\"M26.5 57Q60 47 93.5 57\" stroke=\"#F4EEE4\" stroke-width=\"3.4\" stroke-dasharray=\"1.6 4.4\" stroke-linecap=\"round\" fill=\"none\"/>"
1350
+ }
1351
+ ],
1352
+ "anim": null,
1353
+ "fid": {
1354
+ "k": "none",
1355
+ "px": 60,
1356
+ "py": 40
1357
+ }
1358
+ },
1359
+ "capsule|#2BA6BF|windkey": {
1360
+ "layers": [
1361
+ {
1362
+ "d": "M59.5 11H60.5A1.5 1.5 0 0 1 62 12.5V21.5A1.5 1.5 0 0 1 60.5 23H59.5A1.5 1.5 0 0 1 58 21.5V12.5A1.5 1.5 0 0 1 59.5 11Z",
1363
+ "col": "#C8A35E",
1364
+ "mat": "vinyl"
1365
+ },
1366
+ {
1367
+ "d": "M47 6A6.5 5.5 0 1 1 60 6A6.5 5.5 0 1 1 47 6ZM50.9 6A2.6 2.2 0 1 0 56.1 6A2.6 2.2 0 1 0 50.9 6ZM60 6A6.5 5.5 0 1 1 73 6A6.5 5.5 0 1 1 60 6ZM63.9 6A2.6 2.2 0 1 0 69.1 6A2.6 2.2 0 1 0 63.9 6Z",
1368
+ "col": "#C8A35E",
1369
+ "mat": "vinyl"
1370
+ }
1371
+ ],
1372
+ "deco": [],
1373
+ "anim": {
1374
+ "type": "wind",
1375
+ "px": 60,
1376
+ "py": 10
1377
+ },
1378
+ "fid": {
1379
+ "k": "spin",
1380
+ "px": 60,
1381
+ "py": 10
1382
+ }
1383
+ },
1384
+ "mochi|#A8DCC8|periscope": {
1385
+ "layers": [
1386
+ {
1387
+ "d": "M59 54L59 33A3 3 0 0 1 65 33L65 54A3 3 0 0 1 59 54Z",
1388
+ "col": "#A3ABBB",
1389
+ "mat": "vinyl"
1390
+ },
1391
+ {
1392
+ "d": "M62.5 23H69.5A3.5 3.5 0 0 1 73 26.5V29.5A3.5 3.5 0 0 1 69.5 33H62.5A3.5 3.5 0 0 1 59 29.5V26.5A3.5 3.5 0 0 1 62.5 23Z",
1393
+ "col": "#A3ABBB",
1394
+ "mat": "vinyl"
1395
+ },
1396
+ {
1397
+ "d": "M67.8 28A2.2 3.2 0 1 1 72.2 28A2.2 3.2 0 1 1 67.8 28Z",
1398
+ "col": "#262A36",
1399
+ "mat": "vinyl"
1400
+ }
1401
+ ],
1402
+ "deco": [],
1403
+ "anim": {
1404
+ "type": "sway",
1405
+ "px": 62,
1406
+ "py": 54
1407
+ },
1408
+ "fid": {
1409
+ "k": "turn",
1410
+ "px": 62,
1411
+ "py": 54
1412
+ }
1413
+ },
1414
+ "cloud|#B9D7F0|quill": {
1415
+ "layers": [
1416
+ {
1417
+ "d": "M66.35 40.76L68.24 39.85L69.7 38.82L70.9 37.7L71.93 36.51L72.82 35.25L73.61 33.92L74.31 32.52L74.95 31.06L75.54 29.53L76.09 27.94L76.63 26.3L77.15 24.6L77.67 22.84L78.18 21.02L78.67 19.13L79 17L79 17L77.21 17.74L75.57 18.66L74 19.68L72.49 20.78L71.05 21.95L69.67 23.2L68.36 24.51L67.15 25.89L66.03 27.33L65.01 28.84L64.12 30.42L63.37 32.06L62.78 33.75L62.37 35.51L62.2 37.33L62.38 39.24Z",
1418
+ "col": "#E8B54E",
1419
+ "mat": null
1420
+ },
1421
+ {
1422
+ "d": "M60.3 51.93L60.46 50.41L60.68 48.87L60.96 47.32L61.31 45.77L61.7 44.22L62.16 42.67L62.67 41.11L63.23 39.57L63.85 38.02L64.52 36.48L65.24 34.95L66 33.43L66.82 31.92L67.68 30.42L68.58 28.93L69.53 27.46L70.52 26.01L71.55 24.58L72.62 23.17L73.72 21.79L74.87 20.43L76.04 19.1A0.7 0.7 0 0 1 77.09 20.02L75.93 21.34L74.81 22.67L73.72 24.03L72.67 25.42L71.66 26.82L70.69 28.24L69.77 29.68L68.88 31.13L68.04 32.6L67.25 34.07L66.5 35.56L65.8 37.06L65.14 38.56L64.54 40.06L63.99 41.57L63.5 43.08L63.05 44.59L62.67 46.1L62.34 47.6L62.06 49.09L61.85 50.58L61.7 52.07A0.7 0.7 0 0 1 60.3 51.93Z",
1423
+ "col": "#5B3E33",
1424
+ "mat": null
1425
+ }
1426
+ ],
1427
+ "deco": [],
1428
+ "anim": {
1429
+ "type": "sway",
1430
+ "px": 61,
1431
+ "py": 52
1432
+ },
1433
+ "fid": {
1434
+ "k": "sway",
1435
+ "px": 60,
1436
+ "py": 48
1437
+ }
1438
+ }
1439
+ };
1440
+
1441
+ export const STATES: { key: string; label: string; product: string; engine: string }[] = [
1442
+ {
1443
+ "key": "idle",
1444
+ "label": "On duty",
1445
+ "product": "Active, waiting for work",
1446
+ "engine": "idle"
1447
+ },
1448
+ {
1449
+ "key": "hello",
1450
+ "label": "Hello",
1451
+ "product": "Chat or drawer opened",
1452
+ "engine": "hello"
1453
+ },
1454
+ {
1455
+ "key": "working",
1456
+ "label": "Working",
1457
+ "product": "Run in progress",
1458
+ "engine": "working"
1459
+ },
1460
+ {
1461
+ "key": "needs",
1462
+ "label": "Needs you",
1463
+ "product": "N pending approval",
1464
+ "engine": "needs"
1465
+ },
1466
+ {
1467
+ "key": "done",
1468
+ "label": "Done",
1469
+ "product": "Run finished, change applied",
1470
+ "engine": "done"
1471
+ },
1472
+ {
1473
+ "key": "failed",
1474
+ "label": "Failed",
1475
+ "product": "Run failed",
1476
+ "engine": "failed"
1477
+ },
1478
+ {
1479
+ "key": "off",
1480
+ "label": "Deactivated",
1481
+ "product": "Deactivated",
1482
+ "engine": "off"
1483
+ },
1484
+ {
1485
+ "key": "box",
1486
+ "label": "Not set up",
1487
+ "product": "Not set up",
1488
+ "engine": "box"
1489
+ },
1490
+ {
1491
+ "key": "invite",
1492
+ "label": "Inviting",
1493
+ "product": "Not set up, inviting",
1494
+ "engine": "invite"
1495
+ },
1496
+ {
1497
+ "key": "partly",
1498
+ "label": "Partial coverage",
1499
+ "product": "Active in some applications",
1500
+ "engine": "idle with the cover flag (setCover(true))"
1501
+ }
1502
+ ];
1503
+
1504
+ export const SPRINGS: Record<string, { T: number; zeta: number }> = {
1505
+ "P_SHAPE": {
1506
+ "T": 0.28,
1507
+ "zeta": 0.8
1508
+ },
1509
+ "P_POP": {
1510
+ "T": 0.32,
1511
+ "zeta": 0.45
1512
+ },
1513
+ "P_DART": {
1514
+ "T": 0.12,
1515
+ "zeta": 0.65
1516
+ },
1517
+ "P_PURSUIT": {
1518
+ "T": 0.3,
1519
+ "zeta": 0.85
1520
+ },
1521
+ "P_BRIGHT": {
1522
+ "T": 0.2,
1523
+ "zeta": 1
1524
+ },
1525
+ "P_SQ": {
1526
+ "T": 0.22,
1527
+ "zeta": 0.3
1528
+ },
1529
+ "P_LAND": {
1530
+ "T": 0.35,
1531
+ "zeta": 0.4
1532
+ },
1533
+ "P_W": {
1534
+ "T": 0.6,
1535
+ "zeta": 1
1536
+ }
1537
+ };
1538
+
1539
+ export const OPTY: Record<AgentShapeId, number> = {
1540
+ "dome": 21.4242,
1541
+ "gumdrop": 17.1466,
1542
+ "cushion": 18.1068,
1543
+ "pebble": 25.1939,
1544
+ "capsule": 15.0188,
1545
+ "cloud": 27.6431,
1546
+ "egg": 15.2563,
1547
+ "mochi": 30.1353,
1548
+ "kettle": 27.8453,
1549
+ "mug": 20.8761,
1550
+ "padlock": 20.3776,
1551
+ "safe": 16.8761
1552
+ };
1553
+
1554
+ /** geom() per shape as the page measures it (top anchor, half-width per row at y = i / 2, footprint at y 104). */
1555
+ export const GEOMS: Record<AgentShapeId, { top: [number, number]; HW: number[]; foot: [number, number] }> = {"dome":{"top":[60,30],"HW":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.5,6.5,9,10.5,11.5,13,14,15,16,17,18,18.5,19.5,20,21,21.5,22,22.5,23,23.5,24,25,25,25.5,26,26.5,27,27.5,28,28.5,28.5,29,29.5,30,30,30.5,31,31.5,31.5,32,32,32.5,33,33,33.5,33.5,34,34,34.5,34.5,35,35,35.5,35.5,36,36,36.5,36.5,37,37,37,37.5,37.5,38,38,38,38.5,38.5,38.5,39,39,39,39.5,39.5,39.5,40,40,40,40,40.5,40.5,40.5,41,41,41,41,41,41.5,41.5,41.5,41.5,42,42,42,42,42,42,42.5,42.5,42.5,42.5,42.5,42.5,43,43,43,43,43,43,43,43.5,43.5,43.5,43.5,43.5,43.5,43.5,43.5,43.5,43.5,43.5,43.5,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,43.5,43.5,43.5,43,43,42.5,42.5,42,41,40.5,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"foot":[17,103]},"gumdrop":{"top":[60,16],"HW":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.5,2.5,3.5,4,5,5.5,6,6.5,7,7.5,8,8.5,9,9.5,9.5,10,10.5,11,11.5,12,12,12.5,13,13.5,13.5,14,14.5,14.5,15,15.5,16,16,16.5,17,17,17.5,18,18,18.5,19,19,19.5,19.5,20,20.5,20.5,21,21,21.5,22,22,22.5,23,23,23.5,23.5,24,24,24.5,25,25,25.5,25.5,26,26,26.5,27,27,27.5,27.5,28,28,28.5,28.5,29,29,29.5,29.5,30,30,30.5,31,31,31.5,31.5,32,32,32.5,32.5,33,33,33.5,33.5,34,34,34.5,34.5,34.5,35,35,35.5,35.5,36,36,36.5,36.5,37,37,37.5,37.5,38,38,38,38.5,38.5,39,39,39.5,39.5,39.5,40,40,40.5,40.5,40.5,41,41,41.5,41.5,41.5,42,42,42.5,42.5,42.5,43,43,43,43.5,43.5,43.5,44,44,44,44.5,44.5,44.5,45,45,45,45,45.5,45.5,45.5,45.5,45.5,46,46,46,46,46,46,46,46,46,46,46,45.5,45.5,45.5,45,45,45,44.5,44,44,43.5,43,42.5,41.5,40.5,39.5,38,35.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"foot":[16.5,103]},"cushion":{"top":[60,27.5],"HW":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10.5,17,21.5,25,27.5,30,32,33.5,35,36.5,37.5,38.5,39.5,40,40.5,41,41.5,42,42.5,43,43,43.5,43.5,43.5,44,44,44.5,44.5,44.5,44.5,45,45,45,45,45,45.5,45.5,45.5,45.5,45.5,45.5,45.5,45.5,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,45.5,45.5,45.5,45.5,45,45,45,45,44.5,44.5,44,44,43.5,43,42.5,42.5,42,41.5,40.5,40,39,37.5,36,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"foot":[18,101.5]},"pebble":{"top":[60,40],"HW":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5.5,9,12,14,16,17,18.5,20,21,22.5,23.5,24.5,25.5,26,27,28,28.5,29.5,30,30.5,31.5,32,32.5,33,33.5,34.5,35,35.5,36,36.5,36.5,37,37.5,38,38.5,39,39.5,39.5,40,40.5,40.5,41,41.5,41.5,42,42.5,42.5,43,43,43.5,43.5,44,44,44.5,44.5,45,45,45,45.5,45.5,45.5,46,46,46,46.5,46.5,46.5,47,47,47,47,47.5,47.5,47.5,47.5,47.5,47.5,47.5,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,47.5,47.5,47.5,47.5,47.5,47,47,47,46.5,46.5,46.5,46,46,46,45.5,45,45,44.5,44.5,44,43.5,43.5,43,42.5,42,41.5,41,40.5,40,39,38.5,37.5,37,36,35,33.5,32,30.5,28.5,25.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"foot":[23,96]},"capsule":{"top":[60,20],"HW":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.5,7.5,9.5,11,12.5,13.5,14.5,15.5,16.5,17.5,18,18.5,19.5,20,20.5,21,21.5,22,22.5,23,23,23.5,24,24.5,24.5,25,25,25.5,26,26,26.5,26.5,27,27,27,27.5,27.5,27.5,28,28,28,28.5,28.5,28.5,29,29,29,29,29,29.5,29.5,29.5,29.5,29.5,29.5,29.5,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29.5,29.5,29.5,29.5,29,29,28.5,28.5,28,28,27.5,27,26.5,26,25,24.5,23,22,19.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"foot":[33,86.5]},"cloud":{"top":[60,45],"HW":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24.5,25,25.5,26,26.5,27,27.5,28,28.5,28.5,29,29,29.5,29.5,30,30,30.5,30.5,30.5,31,31,31,31,31.5,31.5,31.5,31.5,31.5,31.5,35,37,38,39,40,41,41.5,42,42.5,43,43.5,44,44.5,45,45,45.5,46,46,46.5,46.5,46.5,47,47,47,47.5,47.5,47.5,47.5,48,48,48,48,48,48,48,48,48,48,48,48.5,48.5,48.5,48.5,48.5,48.5,48.5,48.5,48,48,48,48,48,47.5,47.5,47.5,47.5,47.5,47.5,47.5,48,48,48,48,48,48,48,48,48,48,48,48,48,47.5,47.5,47.5,47.5,47,47,46.5,46.5,46,46,45.5,45,45,44.5,44,43.5,43,42,41.5,40.5,39.5,38.5,37,34.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"foot":[17.5,103]},"egg":{"top":[60,20],"HW":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3.5,6,7.5,9,10,11.5,12.5,13,14,14.5,15.5,16.5,17,17.5,18,18.5,19,19.5,20,20.5,21,21.5,22,22.5,23,23.5,23.5,24,24.5,24.5,25,25.5,26,26,26.5,27,27,27.5,27.5,28,28.5,28.5,29,29,29.5,29.5,30,30,30.5,30.5,31,31,31,31.5,31.5,32,32,32.5,32.5,32.5,33,33,33,33.5,33.5,33.5,34,34,34,34.5,34.5,34.5,35,35,35,35,35.5,35.5,35.5,36,36,36,36,36,36.5,36.5,36.5,36.5,36.5,37,37,37,37,37,37,37.5,37.5,37.5,37.5,37.5,37.5,37.5,37.5,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,37.5,37.5,37.5,37.5,37.5,37.5,37,37,37,37,36.5,36.5,36.5,36,36,35.5,35.5,35.5,35,35,34.5,34.5,34,33.5,33.5,33,32.5,32.5,32,31.5,31,30.5,30,29.5,29,28.5,27.5,27,26.5,25.5,25,24,23,22,21,19.5,18.5,17,15,13,10.5,6.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"foot":[39,80]},"mochi":{"top":[60,50],"HW":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6.5,10.5,13.5,15.5,17.5,19.5,21,22.5,24,25,26.5,27.5,28.5,29.5,30.5,31.5,32,33,34,34.5,35.5,36,36.5,37.5,38,38.5,39,40,40.5,41,41.5,42,42.5,43,43.5,44,44.5,44.5,45,45.5,46,46,46.5,47,47,47.5,48,48,48.5,48.5,49,49,49.5,49.5,50,50,50,50.5,50.5,50.5,51,51,51,51.5,51.5,51.5,51.5,51.5,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,51.5,51.5,51.5,51.5,51,51,51,50.5,50.5,50.5,50,50,49.5,49,49,48.5,48,47.5,47,46.5,46,45.5,45,44,43.5,42.5,41.5,40.5,39,37.5,36,33.5,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"foot":[17.5,102]},"kettle":{"top":[60,44],"HW":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.5,7.5,9.5,11,13,14,15,16,17,18,19,20,20.5,21.5,22,22.5,23.5,24,24.5,25,25.5,26,26.5,27,27.5,28,28.5,29,29.5,29.5,30,30.5,31,31,31.5,32,32,32.5,33,33,33.5,33.5,34,34.5,34.5,35,35,35.5,35.5,36,36,36.5,36.5,46.5,46,46,45.5,45,44.5,44,43.5,43,42.5,42,41.5,40.5,40,39.5,39.5,39.5,39.5,39.5,40,40,40,40,40.5,40.5,40.5,40.5,40.5,40.5,41,41,41,41,41,41.5,41.5,41.5,41.5,41.5,41.5,41.5,41.5,41.5,41.5,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,41.5,41.5,41.5,41,41,40.5,40.5,40,39,38.5,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"foot":[19,101]},"mug":{"top":[60,34],"HW":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34.5,36,37.5,38,39,39.5,40.5,41,41,41.5,42,42.5,42.5,43,43,43.5,43.5,43.5,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44.5,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44.5,44.5,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,43.5,43.5,43.5,43,43,43,42.5,42,42,41.5,41,41,40.5,39.5,39,38.5,37.5,36.5,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"foot":[19,82.5]},"padlock":{"top":[60,14],"HW":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28.5,30,31,32,33,33.5,34.5,35,35.5,36,36.5,36.5,37,37.5,38,38,38.5,38.5,39,39,39,39.5,39.5,39.5,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,39.5,39.5,39.5,39,39,39,38.5,38.5,38,38,37.5,37.5,37,36.5,36.5,36,35.5,35,34.5,33.5,33,32.5,31.5,30.5,29,27.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"foot":[25.5,94]},"safe":{"top":[60,30],"HW":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34.5,36.5,37.5,38.5,39.5,40.5,41,41.5,42,42.5,43,43.5,44,44,44.5,44.5,45,45,45,45.5,45.5,45.5,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,45.5,45.5,45.5,45.5,45,45,44.5,44.5,44,44,43.5,43.5,43,42.5,42,41.5,41,40.5,40,39,38,36.5,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"foot":[22,97.5]}};
1556
+ ```