# social.twinkl.actor.style

> Published by [kandake.africa](https://lexicon.garden/identity/did:plc:lrphxvv25aibthe7xoc2eeyy)

✓ This is the authoritative definition for this NSID.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:lrphxvv25aibthe7xoc2eeyy/social.twinkl.actor.style)
- [Documentation](https://lexicon.garden/lexicon/did:plc:lrphxvv25aibthe7xoc2eeyy/social.twinkl.actor.style/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:lrphxvv25aibthe7xoc2eeyy/social.twinkl.actor.style/examples)

## Definitions

### `social.twinkl.actor.style`

**Type**: `record`

The actor's visual customization: a selected built-in theme plus optional custom CSS/JS for their home page and post decorations. Custom JS runs only inside a sandboxed iframe; custom CSS is sanitized and scoped server-side before use.

**Key**: `literal:self`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `theme` | `string` | Yes | Selected base theme. |
| `assets` | `array` | No | Blobs referenced by the actor's CSS/tokens (backgrounds, cursors, fonts). Listed here so the PDS keeps them referenced; a CID used in CSS but absent here is rejected on save. |
| `homeJs` | `string` | No | DEPRECATED: superseded by Web Tiles (social.twinkl.homepage.tile) and no longer rendered on profile pages. Custom JS for the actor's home page. Executed only inside a sandboxed iframe with no same-origin access. |
| `tokens` | `unknown` | No | Open map of theme token name to string value, layered on the base theme (validated per-token in code; see social.twinkl.theme.pack `tokens`). |
| `effects` | `array` | No | Enabled first-party page effects for the actor's home page. |
| `homeCss` | `string` | No | Custom CSS applied to the actor's home page (sanitized + scoped before use). |
| `postCss` | `string` | No | CSS-only decoration applied to the actor's posts in feeds (sanitized + scoped). Never executes JS. |
| `updatedAt` | `string` (datetime) | No |  |
| `customBase` | `string` | No | When theme is "custom", the built-in base theme whose tokens the custom CSS layers on top of (light or dark). |
| `sourceTheme` | `string` (at-uri) | No | Provenance: the social.twinkl.theme.pack this style was copied from (attribution only; content is materialized locally). Backlink target for gallery wearer counts. |
| `priorThemeCid` | `string` (cid) | No | CID of the immediately-previous version of this style record, for one-step "revert to previous look" rollback (best-effort; the prior version may be GC'd by the PDS over time). |
| `sourceThemeCid` | `string` (cid) | No | CID of the theme.pack version that was copied. |

## Raw Schema

```json
{
  "id": "social.twinkl.actor.style",
  "defs": {
    "main": {
      "key": "literal:self",
      "type": "record",
      "record": {
        "type": "object",
        "required": [
          "theme"
        ],
        "properties": {
          "theme": {
            "type": "string",
            "default": "y2kringe",
            "description": "Selected base theme.",
            "knownValues": [
              "y2kringe",
              "gyaru",
              "custom"
            ]
          },
          "assets": {
            "type": "array",
            "items": {
              "type": "blob",
              "accept": [
                "image/png",
                "image/jpeg",
                "image/webp",
                "image/gif",
                "font/woff2",
                "font/woff"
              ],
              "maxSize": 5000000
            },
            "maxLength": 16,
            "description": "Blobs referenced by the actor's CSS/tokens (backgrounds, cursors, fonts). Listed here so the PDS keeps them referenced; a CID used in CSS but absent here is rejected on save."
          },
          "homeJs": {
            "type": "string",
            "maxLength": 100000,
            "description": "DEPRECATED: superseded by Web Tiles (social.twinkl.homepage.tile) and no longer rendered on profile pages. Custom JS for the actor's home page. Executed only inside a sandboxed iframe with no same-origin access."
          },
          "tokens": {
            "type": "unknown",
            "description": "Open map of theme token name to string value, layered on the base theme (validated per-token in code; see social.twinkl.theme.pack `tokens`)."
          },
          "effects": {
            "type": "array",
            "items": {
              "ref": "social.twinkl.theme.defs#effect",
              "type": "ref"
            },
            "maxLength": 8,
            "description": "Enabled first-party page effects for the actor's home page."
          },
          "homeCss": {
            "type": "string",
            "maxLength": 100000,
            "description": "Custom CSS applied to the actor's home page (sanitized + scoped before use)."
          },
          "postCss": {
            "type": "string",
            "maxLength": 50000,
            "description": "CSS-only decoration applied to the actor's posts in feeds (sanitized + scoped). Never executes JS."
          },
          "updatedAt": {
            "type": "string",
            "format": "datetime"
          },
          "customBase": {
            "type": "string",
            "default": "y2kringe",
            "description": "When theme is \"custom\", the built-in base theme whose tokens the custom CSS layers on top of (light or dark).",
            "knownValues": [
              "y2kringe",
              "gyaru"
            ]
          },
          "sourceTheme": {
            "type": "string",
            "format": "at-uri",
            "description": "Provenance: the social.twinkl.theme.pack this style was copied from (attribution only; content is materialized locally). Backlink target for gallery wearer counts."
          },
          "priorThemeCid": {
            "type": "string",
            "format": "cid",
            "description": "CID of the immediately-previous version of this style record, for one-step \"revert to previous look\" rollback (best-effort; the prior version may be GC'd by the PDS over time)."
          },
          "sourceThemeCid": {
            "type": "string",
            "format": "cid",
            "description": "CID of the theme.pack version that was copied."
          }
        }
      },
      "description": "The actor's visual customization: a selected built-in theme plus optional custom CSS/JS for their home page and post decorations. Custom JS runs only inside a sandboxed iframe; custom CSS is sanitized and scoped server-side before use."
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1
}
```
