# PerfectWorld Experience Theme Pack ZIP

Theme packs change the entire experience, not only the palette. A platform theme ZIP contains `theme.json`, `theme.css`, and optional inert artwork/fonts. Module skins continue to use `theme-pack.json` and identify their module.

## Minimal `theme.json`

```json
{
  "slug": "my-theme",
  "name": "My Theme",
  "version": "1.0",
  "description": "The intended feeling and visual world.",
  "colors": ["#111111", "#FFFFFF", "#222222", "#336655", "#779988", "#FFCC33", "#777777"],
  "experienceSettings": {
    "surfaceStyle": "layered",
    "typeStyle": "rounded",
    "motion": "playful",
    "radius": 18,
    "iconStyle": "custom",
    "cabinetStyle": "custom"
  },
  "assets": {
    "hero": "assets/scene.svg",
    "texture": "assets/texture.svg",
    "cabinet": "assets/cabinet.svg",
    "iconSprite": "assets/icons.svg",
    "referenceImage": "assets/style-guide.png"
  }
}
```

To edit a packaged stock theme without overwriting it, set `"extends"` to `garden`, `t-1000`, `crafty`, `ranch`, or `southwest`. Theme Studio installs it as a protected local layer.

## Icon sprite IDs

An external SVG sprite can provide these symbols:

- `pw-icon-archive`
- `pw-icon-town-square`
- `pw-icon-surveillance`
- `pw-icon-arcade`
- `pw-icon-open-streets`
- `pw-icon-record-remix`
- `pw-icon-modules`
- `pw-icon-admin`

Each symbol should use `viewBox="0 0 24 24"` and inherit `stroke: currentColor` where practical.

## Security and updates

Theme packs may contain CSS, JSON, SVG, PNG, JPG, WEBP, and inert font files. Executable or server-control files are rejected. SVGs containing scripts, event handlers, `foreignObject`, or JavaScript URLs are rejected.

Theme Studio archives the prior custom/local layer before updates. Packaged stock files remain core-owned; `/themes/custom`, `/themes/overrides`, and module theme folders are protected from core releases.
