name: Hellion Chat
author: Jon Kazama (Hellion Forge)
punchline: A Hellion Forge plugin — privacy-focused chat replacement for FFXIV, built for EU, US and JP data rules.
description: |-
    Chat replacement for FINAL FANTASY XIV with privacy controls built around
    EU, US and JP data-protection rules.

    By default only your own conversations are stored. Public chat, NPC
    dialogue and system messages stay out of the database unless you opt in.
    Retention windows are configurable per channel, history can be wiped
    retroactively, and everything can be exported on demand.

    Features:
    - Channel whitelist with a Privacy-First default
    - Per-channel retention with a daily background sweep
    - Retroactive cleanup (Ctrl+Shift confirm)
    - Export to Markdown, JSON or CSV
    - First-run wizard with four preset profiles
    - Multi-language UI (24 locales) with live language switching
    - Own config and database — no shared state with other plugins

    Based on Chat 2 by Infi and Anna (EUPL-1.2).
    Support: https://discord.gg/X9V7Kcv5gR
repo_url: https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat
accepts_feedback: true
icon_url: https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/raw/branch/main/HellionChat/images/icon.png
image_urls:
    - https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/raw/branch/main/HellionChat/images/chatWindow.png
    - https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/raw/branch/main/HellionChat/images/settingsOverview.png
    - https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/raw/branch/main/HellionChat/images/themesPicker.png
tags:
    - Social
    - UI
    - Chat
    - Replacement
    - Privacy
changelog: |-
    **v1.5.5 — Upstream-Sync Tab-Features (2026-05-21)**

    A backlog-sync cycle: inherited tab-feature items plus a new fox
    banner image and custom notification sounds.

    User-visible:

    - Failed tells now raise a warning toast when a message you sent
      could not be delivered (recipient offline, in an instance, or
      blocking you). Toggle in Settings, Chat tab.
    - Per-tab notification sound: each tab can play a sound when a
      message arrives while you are looking at a different tab. Pick
      one of the 16 game chat sounds or one of three bundled Hellion
      sounds, with a preview button to hear it. Off by default,
      respects the global sound toggle.
    - The tab rename field in the right-click menu now focuses
      itself when the menu opens and accepts up to 512 characters,
      matching the settings-tab rename.
    - A jump-to-latest button appears in the chat log header while
      you are scrolled up from the live end.
    - Map flags and item links can be inserted into the chat input
      from its right-click menu.
    - The Hellion Forge fox banner in the first-run wizard and the
      Information tab is now a real image instead of ASCII art.

    Schema bumped to v18 (additive fields only, no data migration).

    Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).

    ---

    **v1.5.4 — Polish and Motion (2026-05-20)**

    A polish cycle: smoother theme switching, faster theme and tab
    access, and subtle hover motion. Three P3 items plus an
    accessibility toggle.

    User-visible:

    - Theme switches now crossfade smoothly over ~300 ms across every
      Hellion-rendered surface — sidebar, title, buttons, tabs,
      scrollbar, separators. The window background snaps deliberately
      so the per-window opacity override from Dalamud's pinning menu
      stays untouched.
    - New header quick-picker: a palette button left of the cog opens
      a compact popup with two sections — every built-in and custom
      theme, and every tab. The active entry carries a check glyph;
      clicking another switches without closing the popup.
    - Sidebar icons ease their opacity on hover, and card-mode message
      borders highlight per tab while the cursor is over their rows.
      Framerate-independent, so a stalled Wine frame cannot overshoot
      the animation.
    - New "Reduce motion" toggle in Theme & Layout disables the
      crossfade, the hover animations and the unread-tab pulse for
      users who prefer a static UI.

    Under the hood:

    - Two pure-helper lerp paths (ThemeAbgrCacheLerp, FrameLerp) with
      xUnit coverage in the Build Suite, plus a ColourUtil.ApplyAlpha
      alpha modulator. Two new /xlperf self-test steps pin the
      crossfade and quick-picker contracts.

    No schema bump, no migration. Migration v17 stays.

    Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).

    ---

    **v1.5.3 — Localisation Wave + Bundled-Font Overhaul (2026-05-19)**

    Multi-language pass plus a long-standing first-frame HITCH lands
    as a side effect of a font-stack rewrite.

    User-visible:

    - 24 selectable UI languages (was 2). Catalan, Czech, Danish,
      Dutch, English, Finnish, French, German, Greek, Hungarian,
      Italian, Japanese, Korean, Norsk bokmål, Polish, Portuguese
      (BR + PT), Romanian, Russian, Spanish, Swedish, Turkish,
      Ukrainian, Simplified + Traditional Chinese. Sorted by endonym,
      "None" pinned first. Non-native locales are AI-assisted and
      flagged for native-speaker review via the Forge Discord.
    - Bundled Inter Light replaces Exo 2 (SIL OFL 1.1, 343 KB). The
      Inter font ships Latin Extended-A/B, Greek polytonic and
      Cyrillic Supplement coverage; NotoSansCjkRegular joins as a
      third merge layer for Hangul and Simplified-Han glyphs the
      FFXIV Japanese game font does not ship.
    - First-frame HITCH dropped from ~74 ms (v1.5.2 baseline that
      held since v1.4.x) to a median of ~20 ms (5-reload sample
      17.9-23.6 ms, Linux/Wine). The bundled-font path silently
      fell back to the FFXIV Axis font for the entire v1.5.x series
      because of an early-return in the draw loop. The fix that
      routes RegularFont through draw also lands the defer-pattern
      win the v1.5.1 cycle was reaching for.
    - ExtraGlyphRanges auto-activates on language change. Korean,
      ChineseFull and the two new flags (LatinExtended, Greek) toggle
      on without a manual visit to Fonts and Colours.
    - New WarningText under the language dropdown notes FFXIV's
      chat input only fully supports EN/DE/FR/JA character sets.
      Other languages render in HellionChat but may garble when
      typed into in-game chat.

    Under the hood:

    - Three-layer font stack: Inter Light primary, FFXIV
      JapaneseFont merge 1 for kana/kanji style, NotoSansCjkRegular
      merge 2 for everything else CJK.
    - LanguageOverride enum gains ten locales plus three previously
      commented out (Italian, Korean, Norwegian as `nb`). New
      values append to the enum so existing config integers stay
      stable across update.
    - Crowdin gap closed: four post-sync ChatTwo keys backfilled
      into 13 legacy locales with per-key AI markers.
    - Plugin.LoadAsync runs a one-shot migration that ORs in the
      matching ExtraGlyphRanges flag for users already on a
      non-default language. Settings.Apply auto-activates on
      change going forward.
    - Em-dash sweep across the EN source and 18 translations to the
      house style. Russian and Ukrainian keep the typographic norm.

    Migration v17 stays. UseHellionFont users transition from Exo 2
    to Inter Light transparently on first reload.

    Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).

    ---

    **v1.5.2 — First-Run Wizard Rework (2026-05-18)**

    UX patch. The first-run wizard becomes a four-step flow with a
    new Roleplay privacy profile and a power-settings step that
    surfaces previously-hidden defaults. Existing v1.5.1 users see
    the new wizard once on first v1.5.2 boot.

    What changes user-visible:

    - Wizard navigation: Welcome → Privacy profile → Power settings
      → Done. Forge-Bronze pagination dots, dedicated stage for the
      power settings so they are no longer buried in Settings.
    - Fourth privacy profile "Roleplay": Privacy-First plus Say and
      both emote types, with a 30-day window for Say and a 90-day
      window for emotes. Shout, Yell and Novice Network stay out.
    - Privacy picker becomes a 2x2 grid. Casual stays the
      recommended option with a ★ marker.
    - Power-settings step covers Load Previous Session, Filter
      Include Previous Sessions, Auto-Tell-Tabs History Preload,
      Compact Density, Prettier Timestamps and a built-in theme
      picker. All six map to existing Configuration fields — no new
      settings introduced.
    - Staged commit: the wizard only writes to Config on the Finish
      step. Decide-later or X-close at any point leaves the existing
      config untouched.
    - Inline test hint on the done step: "type /tell <Player Name>
      into chat" surfaces the auto-tell-tab spawn mechanism.
    - Window starts at 720x480 (was 900x560) and can shrink to
      600x400; Step 1 keeps the fox banner in a folded TreeNode so
      the onboarding copy stays primary.
    - Existing users get the new wizard surfaced once on first boot
      after the update via the new WizardLastShownVersion config
      field. Future cycles bump the constant only when the wizard
      itself changes shape.

    Under the hood:

    - WizardStateSmokeStep added to /xlperf alongside the FontManager
      and ThemeSwitch self-tests.
    - Twelve new pure-helper xUnit Facts in the Build Suite cover
      all four privacy profile sets and their retention overrides.

    Migration v17 stays (no schema bump). The Configuration grows
    one optional string field (WizardLastShownVersion) which
    defaults to empty for legacy users.

    Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).

    ---

    Full history: https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases
