[pack]
name    = "topdown"
version = "1"

# Same palette as the side-view pack; H (hair) and B (shirt) stay as the
# per-agent recolor targets so the existing recolor pipeline works.
[palette]
"." = "transparent"
"H" = "#2a1a0e"   # hair (per-agent recolor target)
"S" = "#f4c79a"   # skin
"e" = "#1a1a1a"   # eyes
"m" = "#a04040"   # mouth
"O" = "#3a1414"   # open-mouth (waiting)
"B" = "#2e62cf"   # shirt (per-agent recolor target)
"P" = "#2a2e44"   # pants (per-agent recolor target — dark navy default)
"c" = "#7ed4e2"   # cyan accent (water cooler tank, coffee display)
"j" = "#1c2a36"   # monitor screen when idle (powered, dark wallpaper)
"w" = "#ececec"   # whiteboard surface (off-white)
"t" = "#d68a4a"   # orange tabby cat
"u" = "#3a2010"   # cat dark (ears, eyes, nose, tail tip)
"M" = "#3a3a40"   # monitor frame
"E" = "#6e7280"   # elevator frame — brushed steel; deliberately lighter
                  # than wall (#383846) and darker than chrome (K) so the
                  # elevator pops as a metal box embedded in the wall
"k" = "#1a1a22"   # keyboard
"D" = "#8b5a2b"   # desk wood
"d" = "#5a3818"   # desk shadow
"n" = "#3a2a1c"   # outline / nose shadow
"f" = "#6a4a26"   # floor mat warm
"F" = "#5a3a20"   # floor mat dark
"l" = "#4a8f3a"   # plant leaf
"L" = "#2f6b25"   # plant leaf shadow
"g" = "#c2734f"   # plant pot terracotta
"C" = "#4f6d77"   # couch fabric — muted slate-teal (cool, pops vs warm floor)
"G" = "#6a8e98"   # couch cushion highlight (lit upper surfaces)
"K" = "#a8a8b0"   # coffee station chrome
"V" = "#c8bea8"   # coffee cup (warm beige, matches desk cup theme color)
"r" = "#a83232"   # book spine red
"b" = "#3a5a9e"   # book spine blue
"y" = "#c8a64c"   # book spine yellow / paperback
"q" = "#1d1d1d"   # marker / whiteboard scribble (distinct from eyes #1a1a1a — each palette key must be a unique RGB; recolor_frame matches by RGB)
"x" = "#c8a060"   # dog tan fur
"z" = "#7a5030"   # dog dark brown (ears, tail tip, nose)
"R" = "#c45050"   # dog nose/tongue
"o" = "#d2402f"   # lobster body red
"N" = "#9e2a20"   # lobster shade (dark red)
"Q" = "#f0895a"   # lobster highlight (orange carapace)
"A" = "#e85540"   # lobster claw (lit)
"a" = "#c83828"   # lobster antenna

[animations.seated]
frames   = ["seated.sprite"]
frame_ms = 600

[animations.typing]
frames   = ["typing_0.sprite", "typing_1.sprite"]
frame_ms = 140

[animations.standing]
frames   = ["standing.sprite"]
frame_ms = 600

[animations.walking]
frames   = ["walking_0.sprite", "walking_1.sprite"]
frame_ms = 220

[animations.walking_back]
frames   = ["walking_back_0.sprite", "walking_back_1.sprite"]
frame_ms = 220

[animations.walking_coffee]
frames   = ["walking_coffee_0.sprite", "walking_coffee_1.sprite"]
frame_ms = 220

[animations.desk]
frames   = ["desk.sprite"]
frame_ms = 600

[animations.plant]
frames   = ["plant.sprite"]
frame_ms = 600

[animations.plant_tall]
frames   = ["plant_tall.sprite"]
frame_ms = 600

[animations.plant_flower]
frames   = ["plant_flower.sprite"]
frame_ms = 600

[animations.plant_succulent]
frames   = ["plant_succulent.sprite"]
frame_ms = 600

[animations.floor_lamp]
frames   = ["floor_lamp.sprite"]
frame_ms = 600

[animations.trash_bin]
frames   = ["trash_bin.sprite"]
frame_ms = 600

[animations.door]
# 3-frame elevator door: closed → half-open → fully open. frame_ms is
# irrelevant — the renderer picks the frame manually each tick based on
# how far through their entry/exit window any agent is, instead of
# auto-cycling. Large `frame_ms` is just a safety so accidental
# cycling won't blink the door.
frames   = ["door.sprite", "door_half.sprite", "door_open.sprite"]
frame_ms = 999999

[animations.bulletin_board]
frames   = ["bulletin_board.sprite"]
frame_ms = 600

[animations.exit_sign]
frames   = ["exit_sign.sprite"]
frame_ms = 600

[animations.filing_cabinet]
frames   = ["filing_cabinet.sprite"]
frame_ms = 600

[animations.cat_walk]
frames   = ["cat_walk_0.sprite", "cat_walk_1.sprite"]
frame_ms = 220

[animations.cat_sit]
frames   = ["cat_sit.sprite"]
frame_ms = 600

[animations.cat_sleep]
frames   = ["cat_sleep.sprite"]
frame_ms = 600

[animations.dog_walk]
frames   = ["dog_walk_0.sprite", "dog_walk_1.sprite"]
frame_ms = 220

[animations.dog_sit]
frames   = ["dog_sit.sprite"]
frame_ms = 600

[animations.dog_sleep]
frames   = ["dog_sleep.sprite"]
frame_ms = 600

[animations.lobster_walk]
# 14x12 top-down lobster — the OpenClaw gateway mascot. Scuttles around the
# floor (presence-gated); the two frames twitch the legs to read as motion.
frames   = ["lobster_walk_0.sprite", "lobster_walk_1.sprite"]
frame_ms = 200

[animations.lobster_rest]
frames   = ["lobster_rest.sprite"]
frame_ms = 600

[animations.meeting_sofa]
# 20x7 3-seat sofa, shared by the meeting room AND the lounge couch.
# Bigger silhouette + visible cushion divisions so the focal furniture
# of the meeting area reads as a sofa rather than a flat plank.
frames   = ["meeting_sofa.sprite"]
frame_ms = 600

[animations.meeting_screen]
frames   = ["meeting_screen.sprite"]
frame_ms = 600

[animations.pantry]
frames   = ["pantry.sprite"]
frame_ms = 600

[animations.pantry_small]
# Fallback for narrow terminals (pantry room width < 36 px). Renderer
# picks this over `pantry` based on layout.pantry_room.width.
frames   = ["pantry_small.sprite"]
frame_ms = 600

[animations.whiteboard]
frames   = ["whiteboard.sprite"]
frame_ms = 600

[animations.bookshelf]
frames   = ["bookshelf.sprite"]
frame_ms = 600

[animations.tv_stand]
frames   = ["tv_stand.sprite"]
frame_ms = 600

[animations.phone_booth]
frames   = ["phone_booth.sprite"]
frame_ms = 600

[animations.standing_desk]
frames   = ["standing_desk.sprite"]
frame_ms = 600

[animations.back_couch]
frames   = ["back_couch.sprite"]
frame_ms = 600

[animations.seated_sleeping]
frames   = ["seated_sleeping.sprite"]
frame_ms = 600

[animations.seated_sleeping_alt]
frames   = ["seated_sleeping_alt.sprite"]
frame_ms = 600

[animations.holding_coffee]
frames   = ["holding_coffee.sprite"]
frame_ms = 600
