> For the complete documentation index, see [llms.txt](https://feron-scripts.gitbook.io/welcome/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://feron-scripts.gitbook.io/welcome/scripts/feron-multicharacter/config/branding-ui.md).

# Branding & UI

Top-bar identity, color palette, visibility toggles, loading-screen copy, and scene presets.

{% tabs %}
{% tab title="QBCore" %}

```lua
--[[
    ╔══════════════════════════════════════════════════════════════╗
    ║                                                              ║
    ║   FERON · MULTICHARACTER                                     ║
    ║   Configuration                                              ║
    ║                                                              ║
    ║   Edit this file to match your server. Comments explain      ║
    ║   what each option does. Do NOT rename Feron variables.      ║
    ║                                                              ║
    ╚══════════════════════════════════════════════════════════════╝
]]

Config = {}


-- ════════════════════════════════════════════════════════════════
--  BRAND  —  Top-bar identity, footer, logo style.
--  Pure cosmetic — change here to rebrand the UI with your server.
-- ════════════════════════════════════════════════════════════════
Config.Brand = {
    name      = 'FERON',                     -- top-left big title
    subtitle  = '// MULTICHARACTER SYSTEM',  -- small text next to title
    footer    = 'FERON_MULTICHARACTER V1.0', -- bottom-left signature
    logoGlyph = 'diamond',                   -- 'diamond' | 'shield' | 'circle' | 'square'
    showLive  = true,                        -- top-right LIVE indicator
    showPing  = false,                       -- top-right PING indicator (if you wire one)
}


-- ════════════════════════════════════════════════════════════════
--  PALETTE  —  CSS variables pushed into the UI on open.
--  Use any valid CSS color (hex / rgb / rgba). On runtime theme
--  switch (Scene.SetTheme), `accent` rebinds to the new theme
--  primary if syncWithSceneTheme = true.
--
--  Active palette: BACKUP (original red on black).
--  Alternatives are stored as commented-out blocks below — paste
--  one over Config.Palette to switch. Or write your own.
-- ════════════════════════════════════════════════════════════════
Config.Palette = {
    bg            = '#07080B',                       -- deepest background
    ink           = '#F4F3EF',                       -- primary text
    muted         = '#7A7B82',                       -- secondary text
    accent        = '#FF2E4C',                       -- buttons, highlights, ring
    accentHot     = '#FF4864',                       -- hover / pulsing accent
    accentSoft    = 'rgba(255, 46, 76, 0.14)',       -- tinted backgrounds
    accentGlow    = 'rgba(255, 46, 76, 0.45)',       -- shadows, glows
    glass         = 'rgba(12, 13, 18, 0.88)',        -- panel backgrounds
    glassStrong   = 'rgba(8, 9, 14, 0.94)',          -- modal backgrounds
    line          = 'rgba(244, 243, 239, 0.07)',     -- subtle borders
    lineStrong    = 'rgba(244, 243, 239, 0.16)',     -- visible borders
    gold          = '#C9A961',                       -- premium / Tebex CTA
    warn          = '#C25A6A',                       -- delete / destructive

    -- When true, the UI accent automatically follows the active
    -- Scene theme (crimson/arctic/toxic). Changes propagate via
    -- the setTheme NUI callback. Set false to keep UI palette
    -- independent of scene lighting color.
    syncWithSceneTheme = true,
}

--[[ ───── ALTERNATE PALETTES ─────────────────────────────────────
     Replace the Config.Palette block above with one of these
     to swap the entire UI color scheme.

  -- CYAN — cool tactical / cyber blue
  Config.Palette = {
      bg            = '#04080C',
      ink           = '#E8F4FF',
      muted         = '#7A8A98',
      accent        = '#00C8FF',
      accentHot     = '#3DDFFF',
      accentSoft    = 'rgba(0, 200, 255, 0.14)',
      accentGlow    = 'rgba(0, 200, 255, 0.45)',
      glass         = 'rgba(8, 14, 20, 0.88)',
      glassStrong   = 'rgba(4, 9, 14, 0.94)',
      line          = 'rgba(232, 244, 255, 0.07)',
      lineStrong    = 'rgba(232, 244, 255, 0.16)',
      gold          = '#C9A961',
      warn          = '#FF7A8A',
      syncWithSceneTheme = true,
  }

  -- GOLD — luxury dossier / premium
  Config.Palette = {
      bg            = '#0A0805',
      ink           = '#F4EFE0',
      muted         = '#8A7E62',
      accent        = '#D4A647',
      accentHot     = '#F0BD55',
      accentSoft    = 'rgba(212, 166, 71, 0.14)',
      accentGlow    = 'rgba(212, 166, 71, 0.45)',
      glass         = 'rgba(15, 12, 8, 0.88)',
      glassStrong   = 'rgba(10, 8, 5, 0.94)',
      line          = 'rgba(244, 239, 224, 0.07)',
      lineStrong    = 'rgba(244, 239, 224, 0.16)',
      gold          = '#D4A647',
      warn          = '#C25A6A',
      syncWithSceneTheme = true,
  }
─────────────────────────────────────────────────────────────── ]]


-- ════════════════════════════════════════════════════════════════
--  UI BEHAVIOR  —  visibility toggles + slot card content.
--  Disable the parts of the UI you don't want for your server.
-- ════════════════════════════════════════════════════════════════
Config.UI = {
    -- Which UI elements appear at all
    show = {
        liveIndicator   = true,    -- top-right LIVE dot
        pingIndicator   = false,   -- top-right PING readout
        streamerMode    = true,    -- top-right STREAMER MODE toggle (blurs PII for content creators)
        cameraControls  = true,    -- bottom-center CAM 01 + arrows + zoom
        photoMode       = true,    -- "Photo Mode" button
        deleteButton    = true,    -- "Delete Character" button (cosmetic; server-side gate is Config.AllowDeleteCharacter)
        unlockButton    = true,    -- "Unlock Premium Slot" button
        themePicker     = true,    -- 3 dots to switch crimson/arctic/toxic
        keyboardHints   = true,    -- bottom-left key cheat sheet
        cornerBrackets  = true,    -- 4-corner UI brackets
        scanlines       = true,    -- subtle CRT scanline overlay
        grain           = true,    -- film-grain noise overlay
        vignette        = true,    -- corner darkening
    },

    -- Hide minimap (radar) while the multicharacter UI is open.
    -- Restored on character spawn.
    hideRadar = true,

    -- Loading-overlay copy. Override per-mode title / subtitle /
    -- eyebrow / rotation messages. Any field you omit falls back
    -- to the JS defaults in ui/app.js. Add new modes here only if
    -- you also call showLoading('your_mode') from JS.
    loadingScreens = {
        boot = {
            title    = 'LOADING',
            subtitle = 'SYSTEM INITIALIZATION',
            eyebrow  = 'SECURE CHANNEL · ACTIVE',
            rotation = {
                'CONNECTING TO SERVER',
                'VERIFYING ACCOUNT',
                'LOADING CHARACTERS',
                'PREPARING ROSTER',
            },
        },
        create = {
            title    = 'REGISTERING',
            subtitle = 'NEW CHARACTER · INTAKE',
            eyebrow  = 'CREATE OPERATION',
            rotation = {
                'VALIDATING DETAILS',
                'ALLOCATING CITIZEN ID',
                'SAVING TO DATABASE',
                'FINALIZING',
            },
        },
        delete = {
            title    = 'DELETING',
            subtitle = 'REMOVING CHARACTER',
            eyebrow  = 'DESTRUCTIVE OPERATION',
            rotation = {
                'LOCATING RECORDS',
                'REMOVING CHARACTER',
                'CLEANING UP',
                'COMPLETE',
            },
        },
        redeem = {
            title    = 'ACTIVATING',
            subtitle = 'PREMIUM KEY · TEBEX',
            eyebrow  = 'GRANT OPERATION',
            rotation = {
                'CHECKING KEY',
                'CONTACTING TEBEX',
                'UNLOCKING SLOT',
                'CONFIRMED',
            },
        },
        deploy = {
            title    = 'DEPLOYING',
            subtitle = 'ENTERING WORLD',
            eyebrow  = 'DEPLOY OPERATION',
            rotation = {
                'LOADING CHARACTER',
                'PREPARING APPEARANCE',
                'SPAWNING',
                'READY',
            },
        },
    },

    -- Every visible text in the UI lives here. Edit the value to
    -- rebrand / translate; the JS bootstrap walks data-i18n="..."
    -- attributes in index.html and writes these strings on each
    -- UI open. Keys are hierarchical — see ui/index.html for the
    -- exact key associated with each element.
    strings = {
        topbar = {
            live         = 'LIVE',
            streamerMode = 'STREAMER MODE',
        },
        section = {
            roster      = 'ROSTER / CHARACTERS',
            identity    = 'IDENTITY',
            dossier     = 'DOSSIER',
            classified  = 'CLASSIFIED · LVL 2',
            character   = 'CHARACTER',  -- "CHARACTER · 01 OF 05"
            of          = 'OF',
        },
        slot = {
            activeBadge       = 'ACTIVE',
            idleBadge         = 'IDLE',
            openBadge         = 'OPEN',
            lockedBadge       = '—',
            lockedTitle       = 'LOCKED SLOT',
            lockedDesc        = 'Premium tier',
            newCharacterTitle = '+ NEW CHARACTER',
            newCharacterDesc  = 'Vacant · Ready for creation',
        },
        button = {
            deploy           = 'Deploy Character',
            deployGlyph      = '▸ ENTER',
            photoMode        = 'Photo Mode',
            photoModeGlyph   = 'F1',
            deleteCharacter  = 'Delete Character',
            deleteGlyph      = 'DEL',
            unlockPremium    = 'UNLOCK PREMIUM SLOT',
        },
        dossier = {
            birthdate   = 'Birthdate',
            nationality = 'Nationality',
            occupation  = 'Occupation',
            grade       = 'Grade',
            cash        = 'Cash',
            bank        = 'Bank',
        },
        footer = {
            navigate = 'Navigate',
            rotate   = 'Rotate',
            deploy   = 'Deploy',
            new      = 'New',
            delete   = 'Delete',
        },
        photoHint = {
            rotate = 'ROTATE',
            zoom   = 'ZOOM',
            reset  = 'RESET',
            exit   = 'EXIT',
        },
        confirm = {
            eyebrow      = 'DESTRUCTIVE ACTION · CONFIRM REQUIRED',
            title        = 'Delete Character',
            targetLabel  = 'TARGET DOSSIER',
            descriptionHtml = 'This will <b>permanently erase</b> the selected character and all associated records — money, inventory, properties, vehicles. This action cannot be undone.',
            cancel       = 'CANCEL',
            confirm      = 'CONFIRM DELETE',
        },
        premium = {
            eyebrow         = 'PREMIUM · SLOT UNLOCK',
            titleHtml       = 'Unlock <b>Premium</b><br/>Character Slot',
            description     = 'Redeem the activation key you received from the Tebex store. Each key unlocks one additional character slot on your account.',
            keyLabel        = 'Tebex Transaction ID',
            keyPlaceholder  = 'tbx-xxxxxxxxxxxxxx-xxxxxx',
            keyFormat       = 'Format · tbx-XXXXXXXXXXXXXX-XXXXXX',
            cancel          = 'CANCEL',
            activate        = 'ACTIVATE',
        },
    },

    -- Stage markers — the small "POSE · IDLE", "LIGHT · KEY 3200K"
    -- floating labels around the ped. Set show=false on any marker
    -- to hide it; edit `label` to rebrand. Add more entries to
    -- create extra markers (m1 → m4 positions are pre-styled).
    stageMarkers = {
        enabled = true,    -- master toggle (false = hide all)
        pose  = { show = true, slot = 'm1', label = 'POSE · IDLE' },
        light = { show = true, slot = 'm2', label = 'LIGHT · KEY 3200K' },
        angle = { show = true, slot = 'm3', label = 'ANGLE · 02.4°' },
        cam   = { show = false,slot = 'm4', label = 'CAM · LIVE 60FPS' },  -- spare slot, off by default
    },

    -- Per-character card content
    slot = {
        showPlayTime    = true,    -- "34H 06M"
        showLevel       = true,    -- "LVL 19"
        activeBadgeText = 'ACTIVE',
        idleBadgeText   = 'IDLE',
    },

    -- Confirmations
    confirm = {
        delete = true,    -- show "are you sure" modal before delete
        deploy = false,   -- show modal before spawning into the world
    },
}


-- ════════════════════════════════════════════════════════════════
--  SCENE PRESETS  —  Bundled looks. Set Config.ActivePreset to
--  switch the entire vibe in one line. Each preset is merged ON
--  TOP of Config.Scene at boot, so anything not overridden falls
--  back to the base scene config.
-- ════════════════════════════════════════════════════════════════
Config.ScenePresets = {
    forensic = {
        theme           = 'crimson',
        cameraFlash     = true,
        streaks         = false,
        glossDisc       = true,
        groundRing      = true,
        orbitSpot       = true,
    },
    synthwave = {
        theme           = 'arctic',
        cameraFlash     = false,    -- no studio flash
        streaks         = true,     -- falling neon lines
        glossDisc       = true,
        groundRing      = true,
        orbitSpot       = false,
        streakDensity   = 'high',   -- low | medium | high (auto-tunes count/speed)
    },
    showroom = {
        theme           = 'toxic',
        cameraFlash     = false,
        streaks         = false,
        glossDisc       = true,
        groundRing      = false,
        orbitSpot       = true,
    },
    void = {
        theme           = 'crimson',
        cameraFlash     = false,
        streaks         = false,
        glossDisc       = false,
        groundRing      = false,
        orbitSpot       = false,
        -- bare key/fill/rim only — pure portrait studio
    },
}

Config.ActivePreset = 'forensic'   -- nil = no preset, use raw Config.Scene
```

{% endtab %}

{% tab title="ESX" %}

```lua
--[[
    ╔══════════════════════════════════════════════════════════════╗
    ║                                                              ║
    ║   FERON · MULTICHARACTER                                     ║
    ║   Configuration                                              ║
    ║                                                              ║
    ║   Edit this file to match your server. Comments explain      ║
    ║   what each option does. Do NOT rename Feron variables.      ║
    ║                                                              ║
    ╚══════════════════════════════════════════════════════════════╝
]]

Config = {}


-- ════════════════════════════════════════════════════════════════
--  BRAND  —  Top-bar identity, footer, logo style.
--  Pure cosmetic — change here to rebrand the UI with your server.
-- ════════════════════════════════════════════════════════════════
Config.Brand = {
    name      = 'FERON',                     -- top-left big title
    subtitle  = '// MULTICHARACTER SYSTEM',  -- small text next to title
    footer    = 'FERON_MULTICHARACTER V1.0', -- bottom-left signature
    logoGlyph = 'diamond',                   -- 'diamond' | 'shield' | 'circle' | 'square'
    showLive  = true,                        -- top-right LIVE indicator
    showPing  = false,                       -- top-right PING indicator (if you wire one)
}


-- ════════════════════════════════════════════════════════════════
--  PALETTE  —  CSS variables pushed into the UI on open.
--  Use any valid CSS color (hex / rgb / rgba). On runtime theme
--  switch (Scene.SetTheme), `accent` rebinds to the new theme
--  primary if syncWithSceneTheme = true.
--
--  Active palette: BACKUP (original red on black).
--  Alternatives are stored as commented-out blocks below — paste
--  one over Config.Palette to switch. Or write your own.
-- ════════════════════════════════════════════════════════════════
Config.Palette = {
    bg            = '#07080B',                       -- deepest background
    ink           = '#F4F3EF',                       -- primary text
    muted         = '#7A7B82',                       -- secondary text
    accent        = '#FF2E4C',                       -- buttons, highlights, ring
    accentHot     = '#FF4864',                       -- hover / pulsing accent
    accentSoft    = 'rgba(255, 46, 76, 0.14)',       -- tinted backgrounds
    accentGlow    = 'rgba(255, 46, 76, 0.45)',       -- shadows, glows
    glass         = 'rgba(12, 13, 18, 0.88)',        -- panel backgrounds
    glassStrong   = 'rgba(8, 9, 14, 0.94)',          -- modal backgrounds
    line          = 'rgba(244, 243, 239, 0.07)',     -- subtle borders
    lineStrong    = 'rgba(244, 243, 239, 0.16)',     -- visible borders
    gold          = '#C9A961',                       -- premium / Tebex CTA
    warn          = '#C25A6A',                       -- delete / destructive

    -- When true, the UI accent automatically follows the active
    -- Scene theme (crimson/arctic/toxic). Changes propagate via
    -- the setTheme NUI callback. Set false to keep UI palette
    -- independent of scene lighting color.
    syncWithSceneTheme = true,
}

--[[ ───── ALTERNATE PALETTES ─────────────────────────────────────
     Replace the Config.Palette block above with one of these
     to swap the entire UI color scheme.

  -- CYAN — cool tactical / cyber blue
  Config.Palette = {
      bg            = '#04080C',
      ink           = '#E8F4FF',
      muted         = '#7A8A98',
      accent        = '#00C8FF',
      accentHot     = '#3DDFFF',
      accentSoft    = 'rgba(0, 200, 255, 0.14)',
      accentGlow    = 'rgba(0, 200, 255, 0.45)',
      glass         = 'rgba(8, 14, 20, 0.88)',
      glassStrong   = 'rgba(4, 9, 14, 0.94)',
      line          = 'rgba(232, 244, 255, 0.07)',
      lineStrong    = 'rgba(232, 244, 255, 0.16)',
      gold          = '#C9A961',
      warn          = '#FF7A8A',
      syncWithSceneTheme = true,
  }

  -- GOLD — luxury dossier / premium
  Config.Palette = {
      bg            = '#0A0805',
      ink           = '#F4EFE0',
      muted         = '#8A7E62',
      accent        = '#D4A647',
      accentHot     = '#F0BD55',
      accentSoft    = 'rgba(212, 166, 71, 0.14)',
      accentGlow    = 'rgba(212, 166, 71, 0.45)',
      glass         = 'rgba(15, 12, 8, 0.88)',
      glassStrong   = 'rgba(10, 8, 5, 0.94)',
      line          = 'rgba(244, 239, 224, 0.07)',
      lineStrong    = 'rgba(244, 239, 224, 0.16)',
      gold          = '#D4A647',
      warn          = '#C25A6A',
      syncWithSceneTheme = true,
  }
─────────────────────────────────────────────────────────────── ]]


-- ════════════════════════════════════════════════════════════════
--  UI BEHAVIOR  —  visibility toggles + slot card content.
--  Disable the parts of the UI you don't want for your server.
-- ════════════════════════════════════════════════════════════════
Config.UI = {
    -- Which UI elements appear at all
    show = {
        liveIndicator   = true,    -- top-right LIVE dot
        pingIndicator   = false,   -- top-right PING readout
        streamerMode    = true,    -- top-right STREAMER MODE toggle (blurs PII for content creators)
        cameraControls  = true,    -- bottom-center CAM 01 + arrows + zoom
        photoMode       = true,    -- "Photo Mode" button
        deleteButton    = true,    -- "Delete Character" button (cosmetic; server-side gate is Config.AllowDeleteCharacter)
        unlockButton    = true,    -- "Unlock Premium Slot" button
        themePicker     = true,    -- 3 dots to switch crimson/arctic/toxic
        keyboardHints   = true,    -- bottom-left key cheat sheet
        cornerBrackets  = true,    -- 4-corner UI brackets
        scanlines       = true,    -- subtle CRT scanline overlay
        grain           = true,    -- film-grain noise overlay
        vignette        = true,    -- corner darkening
    },

    -- Hide minimap (radar) while the multicharacter UI is open.
    -- Restored on character spawn.
    hideRadar = true,

    -- Loading-overlay copy. Override per-mode title / subtitle /
    -- eyebrow / rotation messages. Any field you omit falls back
    -- to the JS defaults in ui/app.js. Add new modes here only if
    -- you also call showLoading('your_mode') from JS.
    loadingScreens = {
        boot = {
            title    = 'LOADING',
            subtitle = 'SYSTEM INITIALIZATION',
            eyebrow  = 'SECURE CHANNEL · ACTIVE',
            rotation = {
                'CONNECTING TO SERVER',
                'VERIFYING ACCOUNT',
                'LOADING CHARACTERS',
                'PREPARING ROSTER',
            },
        },
        create = {
            title    = 'REGISTERING',
            subtitle = 'NEW CHARACTER · INTAKE',
            eyebrow  = 'CREATE OPERATION',
            rotation = {
                'VALIDATING DETAILS',
                'ALLOCATING CITIZEN ID',
                'SAVING TO DATABASE',
                'FINALIZING',
            },
        },
        delete = {
            title    = 'DELETING',
            subtitle = 'REMOVING CHARACTER',
            eyebrow  = 'DESTRUCTIVE OPERATION',
            rotation = {
                'LOCATING RECORDS',
                'REMOVING CHARACTER',
                'CLEANING UP',
                'COMPLETE',
            },
        },
        redeem = {
            title    = 'ACTIVATING',
            subtitle = 'PREMIUM KEY · TEBEX',
            eyebrow  = 'GRANT OPERATION',
            rotation = {
                'CHECKING KEY',
                'CONTACTING TEBEX',
                'UNLOCKING SLOT',
                'CONFIRMED',
            },
        },
        deploy = {
            title    = 'DEPLOYING',
            subtitle = 'ENTERING WORLD',
            eyebrow  = 'DEPLOY OPERATION',
            rotation = {
                'LOADING CHARACTER',
                'PREPARING APPEARANCE',
                'SPAWNING',
                'READY',
            },
        },
    },

    -- Every visible text in the UI lives here. Edit the value to
    -- rebrand / translate; the JS bootstrap walks data-i18n="..."
    -- attributes in index.html and writes these strings on each
    -- UI open. Keys are hierarchical — see ui/index.html for the
    -- exact key associated with each element.
    strings = {
        topbar = {
            live         = 'LIVE',
            streamerMode = 'STREAMER MODE',
        },
        section = {
            roster      = 'ROSTER / CHARACTERS',
            identity    = 'IDENTITY',
            dossier     = 'DOSSIER',
            classified  = 'CLASSIFIED · LVL 2',
            character   = 'CHARACTER',  -- "CHARACTER · 01 OF 05"
            of          = 'OF',
        },
        slot = {
            activeBadge       = 'ACTIVE',
            idleBadge         = 'IDLE',
            openBadge         = 'OPEN',
            lockedBadge       = '—',
            lockedTitle       = 'LOCKED SLOT',
            lockedDesc        = 'Premium tier',
            newCharacterTitle = '+ NEW CHARACTER',
            newCharacterDesc  = 'Vacant · Ready for creation',
        },
        button = {
            deploy           = 'Deploy Character',
            deployGlyph      = '▸ ENTER',
            photoMode        = 'Photo Mode',
            photoModeGlyph   = 'F1',
            deleteCharacter  = 'Delete Character',
            deleteGlyph      = 'DEL',
            unlockPremium    = 'UNLOCK PREMIUM SLOT',
        },
        dossier = {
            birthdate   = 'Birthdate',
            nationality = 'Nationality',
            occupation  = 'Occupation',
            grade       = 'Grade',
            cash        = 'Cash',
            bank        = 'Bank',
        },
        footer = {
            navigate = 'Navigate',
            rotate   = 'Rotate',
            deploy   = 'Deploy',
            new      = 'New',
            delete   = 'Delete',
        },
        photoHint = {
            rotate = 'ROTATE',
            zoom   = 'ZOOM',
            reset  = 'RESET',
            exit   = 'EXIT',
        },
        confirm = {
            eyebrow      = 'DESTRUCTIVE ACTION · CONFIRM REQUIRED',
            title        = 'Delete Character',
            targetLabel  = 'TARGET DOSSIER',
            descriptionHtml = 'This will <b>permanently erase</b> the selected character and all associated records — money, inventory, properties, vehicles. This action cannot be undone.',
            cancel       = 'CANCEL',
            confirm      = 'CONFIRM DELETE',
        },
        premium = {
            eyebrow         = 'PREMIUM · SLOT UNLOCK',
            titleHtml       = 'Unlock <b>Premium</b><br/>Character Slot',
            description     = 'Redeem the activation key you received from the Tebex store. Each key unlocks one additional character slot on your account.',
            keyLabel        = 'Tebex Transaction ID',
            keyPlaceholder  = 'tbx-xxxxxxxxxxxxxx-xxxxxx',
            keyFormat       = 'Format · tbx-XXXXXXXXXXXXXX-XXXXXX',
            cancel          = 'CANCEL',
            activate        = 'ACTIVATE',
        },
    },

    -- Stage markers — the small "POSE · IDLE", "LIGHT · KEY 3200K"
    -- floating labels around the ped. Set show=false on any marker
    -- to hide it; edit `label` to rebrand. Add more entries to
    -- create extra markers (m1 → m4 positions are pre-styled).
    stageMarkers = {
        enabled = true,    -- master toggle (false = hide all)
        pose  = { show = true, slot = 'm1', label = 'POSE · IDLE' },
        light = { show = true, slot = 'm2', label = 'LIGHT · KEY 3200K' },
        angle = { show = true, slot = 'm3', label = 'ANGLE · 02.4°' },
        cam   = { show = false,slot = 'm4', label = 'CAM · LIVE 60FPS' },  -- spare slot, off by default
    },

    -- Per-character card content
    slot = {
        showPlayTime    = true,    -- "34H 06M"
        showLevel       = true,    -- "LVL 19"
        activeBadgeText = 'ACTIVE',
        idleBadgeText   = 'IDLE',
    },

    -- Confirmations
    confirm = {
        delete = true,    -- show "are you sure" modal before delete
        deploy = false,   -- show modal before spawning into the world
    },
}


-- ════════════════════════════════════════════════════════════════
--  SCENE PRESETS  —  Bundled looks. Set Config.ActivePreset to
--  switch the entire vibe in one line. Each preset is merged ON
--  TOP of Config.Scene at boot, so anything not overridden falls
--  back to the base scene config.
-- ════════════════════════════════════════════════════════════════
Config.ScenePresets = {
    forensic = {
        theme           = 'crimson',
        cameraFlash     = true,
        streaks         = false,
        glossDisc       = true,
        groundRing      = true,
        orbitSpot       = true,
    },
    synthwave = {
        theme           = 'arctic',
        cameraFlash     = false,    -- no studio flash
        streaks         = true,     -- falling neon lines
        glossDisc       = true,
        groundRing      = true,
        orbitSpot       = false,
        streakDensity   = 'high',   -- low | medium | high (auto-tunes count/speed)
    },
    showroom = {
        theme           = 'toxic',
        cameraFlash     = false,
        streaks         = false,
        glossDisc       = true,
        groundRing      = false,
        orbitSpot       = true,
    },
    void = {
        theme           = 'crimson',
        cameraFlash     = false,
        streaks         = false,
        glossDisc       = false,
        groundRing      = false,
        orbitSpot       = false,
        -- bare key/fill/rim only — pure portrait studio
    },
}

Config.ActivePreset = 'forensic'   -- nil = no preset, use raw Config.Scene
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://feron-scripts.gitbook.io/welcome/scripts/feron-multicharacter/config/branding-ui.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
