social.twinkl.actor.style
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.
Details · record, key literal:self
| Kind | record |
|---|---|
| Record key | literal:self |
| Authority | actor.twinkl.social |
| Indexed |
Checks
Validunlimited-stringdefs.main.record.properties.customBaseNo maxLength, maxGraphemes or format limits this string.large-stringdefs.main.record.properties.homeCssmaxLength is over 20 KB. Use a blob for content that large.large-stringdefs.main.record.properties.homeJsmaxLength is over 20 KB. Use a blob for content that large.large-stringdefs.main.record.properties.postCssmaxLength is over 20 KB. Use a blob for content that large.unlimited-stringdefs.main.record.properties.themeNo maxLength, maxGraphemes or format limits this string.
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"main": {
"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.",
"key": "literal:self",
"record": {
"properties": {
"assets": {
"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.",
"items": {
"accept": [
"image/png",
"image/jpeg",
"image/webp",
"image/gif",
"font/woff2",
"font/woff"
],
"maxSize": 5000000,
"type": "blob"
},
"maxLength": 16,
"type": "array"
},
"customBase": {
"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"
],
"type": "string"
},
"effects": {
"description": "Enabled first-party page effects for the actor's home page.",
"items": {
"ref": "social.twinkl.theme.defs#effect",
"type": "ref"
},
"maxLength": 8,
"type": "array"
},
"homeCss": {
"description": "Custom CSS applied to the actor's home page (sanitized + scoped before use).",
"maxLength": 100000,
"type": "string"
},
"homeJs": {
"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.",
"maxLength": 100000,
"type": "string"
},
"postCss": {
"description": "CSS-only decoration applied to the actor's posts in feeds (sanitized + scoped). Never executes JS.",
"maxLength": 50000,
"type": "string"
},
"priorThemeCid": {
"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).",
"format": "cid",
"type": "string"
},
"sourceTheme": {
"description": "Provenance: the social.twinkl.theme.pack this style was copied from (attribution only; content is materialized locally). Backlink target for gallery wearer counts.",
"format": "at-uri",
"type": "string"
},
"sourceThemeCid": {
"description": "CID of the theme.pack version that was copied.",
"format": "cid",
"type": "string"
},
"theme": {
"default": "y2kringe",
"description": "Selected base theme.",
"knownValues": [
"y2kringe",
"gyaru",
"custom"
],
"type": "string"
},
"tokens": {
"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`).",
"type": "unknown"
},
"updatedAt": {
"format": "datetime",
"type": "string"
}
},
"required": [
"theme"
],
"type": "object"
},
"type": "record"
}
},
"id": "social.twinkl.actor.style",
"lexicon": 1
}