# Classic UI Kit (ClassicUIKit)

Classic UI Kit gives the game its whole menu interface in a chunky, outlined "Stud" look (white Fredoka One text with a thick ink outline, bevelled colour surfaces, square studs): the same 16 menus, 11 HUD buttons, Changelogs button, plus its own Index menu and Index HUD button (rc: the Index is a menu of its own, no rewards) and a cash counter above the HUD buttons, invite button, effects bar and tooltips as General UI Kit, plus its own copies of Easy Pet System's hatch reveals, Notifications System's notification cards and Sound System's music player. It is a GUI kit (`manifest.kit`) and a standalone product: it needs no other kit. Its menu and HUD logic (opening, tooltips, the HUD widgets, the Shop's buy buttons, hover and press feedback, sounds) is the Kernel's shared UI engine, `ctx.kernel.KitEngine` (Kernel 3.5.0), the same code General UI Kit runs. It has no options, no server code, no remotes and saves no player data. No dependencies.

## In short

Section numbers refer to the main guide, `AI-START-HERE.md`.

Four styles (3.5.0, the kit's curated presets: the font is part of the style, never a free choice): `plain-fredoka` "Plain (Fredoka)", `plain-montserrat` "Plain (Montserrat)", `studded-fredoka` "Studded (Fredoka)" (Valen's design, the kit's default) and `studded-montserrat` "Studded (Montserrat)". Studded is the stud tile on every colour surface, Plain the same without studs; Fredoka is Fredoka One (the kit's own font), Montserrat is Montserrat Black (900, `Enum.FontWeight.Heavy`) with the same thick outline. The game's style is `Config.Game` (`Kit = "ClassicUIKit"`, `Style = "<id>"`; `T.style`, THEMES.md section 6). Every piece gives a slot (`standsInFor`): General UI Kit's own slots (Shop, Settings, Teleport, Changelogs, Upgrades, Rebirth, Trade, TradeInventory, TradeRequest, their HUD buttons, `InviteFriends`, `Effects`, `ButtonDetails`, `EffectDetails`) as `GeneralUIKit.<Piece>`, and the packs' slots (Codes, Spin, Rewards, DailyRewards, Pets, Index, menu and button; `EasyPetSystem.CashCounter`, `HatchReveal` and `HatchRevealTriple`; `NotificationsSystem.NotificationLayer`; `SoundSystem.MusicPlayer`; Datastore & Purchase System's `GiftPanel` and `GiftReceivedPanel`). Its 39 pieces: `ClassicUIKit.ButtonDetails`, `ClassicUIKit.CashCounter`, `ClassicUIKit.ChangelogsButton`, `ClassicUIKit.ChangelogsPanel`, `ClassicUIKit.CodesButton`, `ClassicUIKit.CodesPanel`, `ClassicUIKit.DailyRewardsButton`, `ClassicUIKit.DailyRewardsPanel`, `ClassicUIKit.EffectDetails`, `ClassicUIKit.Effects`, `ClassicUIKit.GiftPanel`, `ClassicUIKit.GiftReceivedPanel`, `ClassicUIKit.HatchReveal`, `ClassicUIKit.HatchRevealTriple`, `ClassicUIKit.IndexButton`, `ClassicUIKit.IndexPanel`, `ClassicUIKit.InviteFriends`, `ClassicUIKit.MusicPlayer`, `ClassicUIKit.NotificationLayer`, `ClassicUIKit.PetsButton`, `ClassicUIKit.PetsPanel`, `ClassicUIKit.RebirthButton`, `ClassicUIKit.RebirthPanel`, `ClassicUIKit.RewardsButton`, `ClassicUIKit.RewardsPanel`, `ClassicUIKit.SettingsButton`, `ClassicUIKit.SettingsPanel`, `ClassicUIKit.ShopButton`, `ClassicUIKit.ShopPanel`, `ClassicUIKit.SpinButton`, `ClassicUIKit.SpinPanel`, `ClassicUIKit.TeleportButton`, `ClassicUIKit.TeleportPanel`, `ClassicUIKit.TradeButton`, `ClassicUIKit.TradeInventoryPanel`, `ClassicUIKit.TradePanel`, `ClassicUIKit.TradeRequestPanel`, `ClassicUIKit.UpgradesButton`, `ClassicUIKit.UpgradesPanel`. With General UI Kit installed too, only the style's kit is used and the other one's pieces are retired (hidden in Edit too, marked `RBLXE_HudHidden`, as are the packs' own copies the kit replaces; 3.5.0); without it, Classic's pieces are their own. Behaviour is General UI Kit's (its map says what each menu does, which Shop items sell something, the stubs and the `CustomHandlers` actions): the same `PanelId`s, `Action`s, roles and template names. The game's actions go in `ReplicatedStorage.RBLXEssentials.Extensions.ClassicUIKit.CustomHandlers`; a game that came from General UI Kit keeps `Extensions.GeneralUIKit.CustomHandlers`, which this kit uses too (its own module wins a shared name).

## Facts

<!-- facts:begin -->
Generated from the code by `lune run tools/pack-facts.luau -- ClassicUIKit`. Do not edit by hand.

### Pieces
| Piece | Kind | Opens | Stands in for | Default copy |
|---|---|---|---|---|
| `ClassicUIKit.ButtonDetails` | HudWidget |  | `GeneralUIKit.ButtonDetails` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Tooltip.ButtonDetails` |
| `ClassicUIKit.CashCounter` | HudWidget |  | `EasyPetSystem.CashCounter` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Widgets.CashFrame` |
| `ClassicUIKit.ChangelogsButton` | HudWidget | `ChangelogsPanel` | `GeneralUIKit.ChangelogsButton` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Interactables.Changelogs Button` |
| `ClassicUIKit.ChangelogsPanel` | Panel |  | `GeneralUIKit.ChangelogsPanel` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Menus.Changelogs` |
| `ClassicUIKit.CodesButton` | HudButton | `CodesPanel` | `CodesSystem.CodesButton` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Interactables.Container.Codes Button` |
| `ClassicUIKit.CodesPanel` | Panel |  | `CodesSystem.CodesPanel` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Menus.Codes` |
| `ClassicUIKit.DailyRewardsButton` | HudButton | `DailyRewardsPanel` | `TimeRewardsSystem.DailyRewardsButton` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Interactables.Container.DailyRewards Button` |
| `ClassicUIKit.DailyRewardsPanel` | Panel |  | `TimeRewardsSystem.DailyRewardsPanel` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Menus.DailyRewards` |
| `ClassicUIKit.EffectDetails` | HudWidget |  | `GeneralUIKit.EffectDetails` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Tooltip.EffectDetails` |
| `ClassicUIKit.Effects` | HudWidget |  | `GeneralUIKit.Effects` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Interactables.Effects` |
| `ClassicUIKit.GiftPanel` | Panel |  | `DatastorePurchaseSystem.GiftPanel` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Menus.Gift` |
| `ClassicUIKit.GiftReceivedPanel` | Panel |  | `DatastorePurchaseSystem.GiftReceivedPanel` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Menus.GiftReceived` |
| `ClassicUIKit.HatchReveal` | HudWidget |  | `EasyPetSystem.HatchReveal` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Widgets.HatchReveal` |
| `ClassicUIKit.HatchRevealTriple` | HudWidget |  | `EasyPetSystem.HatchRevealTriple` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Widgets.HatchRevealTriple` |
| `ClassicUIKit.IndexButton` | HudButton | `IndexPanel` | `EasyPetSystem.IndexButton` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Interactables.Container.Index Button` |
| `ClassicUIKit.IndexPanel` | Panel |  | `EasyPetSystem.IndexPanel` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Menus.Index` |
| `ClassicUIKit.InviteFriends` | HudWidget |  | `GeneralUIKit.InviteFriends` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Interactables.InviteFriends` |
| `ClassicUIKit.MusicPlayer` | Layer |  | `SoundSystem.MusicPlayer` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitMusic` |
| `ClassicUIKit.NotificationLayer` | Layer |  | `NotificationsSystem.NotificationLayer` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitNotifications` |
| `ClassicUIKit.PetsButton` | HudButton | `PetsPanel` | `EasyPetSystem.PetsButton` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Interactables.Container.Pets Button` |
| `ClassicUIKit.PetsPanel` | Panel |  | `EasyPetSystem.PetsPanel` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Menus.Pets` |
| `ClassicUIKit.RebirthButton` | HudButton | `RebirthPanel` | `GeneralUIKit.RebirthButton` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Interactables.Container.Rebirth Button` |
| `ClassicUIKit.RebirthPanel` | Panel |  | `GeneralUIKit.RebirthPanel` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Menus.Rebirth` |
| `ClassicUIKit.RewardsButton` | HudButton | `RewardsPanel` | `TimeRewardsSystem.RewardsButton` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Interactables.Container.Rewards Button` |
| `ClassicUIKit.RewardsPanel` | Panel |  | `TimeRewardsSystem.RewardsPanel` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Menus.Rewards` |
| `ClassicUIKit.SettingsButton` | HudButton | `SettingsPanel` | `GeneralUIKit.SettingsButton` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Interactables.Container.Settings Button` |
| `ClassicUIKit.SettingsPanel` | Panel |  | `GeneralUIKit.SettingsPanel` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Menus.Settings` |
| `ClassicUIKit.ShopButton` | HudButton | `ShopPanel` | `GeneralUIKit.ShopButton` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Interactables.Container.Shop Button` |
| `ClassicUIKit.ShopPanel` | Panel |  | `GeneralUIKit.ShopPanel` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Menus.Shop` |
| `ClassicUIKit.SpinButton` | HudButton | `SpinPanel` | `RouletteSystem.SpinButton` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Interactables.Container.Spin Button` |
| `ClassicUIKit.SpinPanel` | Panel |  | `RouletteSystem.SpinPanel` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Menus.Spin` |
| `ClassicUIKit.TeleportButton` | HudButton | `TeleportPanel` | `GeneralUIKit.TeleportButton` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Interactables.Container.Teleport Button` |
| `ClassicUIKit.TeleportPanel` | Panel |  | `GeneralUIKit.TeleportPanel` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Menus.Teleport` |
| `ClassicUIKit.TradeButton` | HudButton | `TradePanel` | `GeneralUIKit.TradeButton` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Interactables.Container.Trade Button` |
| `ClassicUIKit.TradeInventoryPanel` | Panel |  | `GeneralUIKit.TradeInventoryPanel` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Menus.TradeInventory` |
| `ClassicUIKit.TradePanel` | Panel |  | `GeneralUIKit.TradePanel` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Menus.Trade` |
| `ClassicUIKit.TradeRequestPanel` | Panel |  | `GeneralUIKit.TradeRequestPanel` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Menus.TradeRequest` |
| `ClassicUIKit.UpgradesButton` | HudButton | `UpgradesPanel` | `GeneralUIKit.UpgradesButton` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Interactables.Container.Upgrades Button` |
| `ClassicUIKit.UpgradesPanel` | Panel |  | `GeneralUIKit.UpgradesPanel` | `StarterGui.RBLXEssentials.ClassicUIKit.ClassicUIKitGUI.Menus.Upgrades` |

### Scripts
- `ReplicatedStorage.RBLXEssentials.Packs.ClassicUIKit.Client` (ModuleScript)
- `ReplicatedStorage.RBLXEssentials.Packs.ClassicUIKit.CustomHandlers` (ModuleScript)
- `ReplicatedStorage.RBLXEssentials.Packs.ClassicUIKit.Pieces` (ModuleScript)
- `ReplicatedStorage.RBLXEssentials.Packs.ClassicUIKit.Schema` (ModuleScript)
- `ReplicatedStorage.RBLXEssentials.Packs.ClassicUIKit.manifest` (ModuleScript)

### Config
Game's values: `ReplicatedStorage.RBLXEssentials.Config.ClassicUIKit` (shared) and `ServerScriptService.RBLXEssentials.Config.ClassicUIKit` (server).

Its Schema declares no option.

### World objects
None: this pack places nothing in Workspace or SoundService.

### Remotes
None.

### Data keys
- `Stats.Cash`: `ReplicatedStorage.RBLXEssentials.Packs.ClassicUIKit.Pieces`:54

### Extensions
None: this pack reads nothing from `Extensions.ClassicUIKit`.
<!-- facts:end -->

## How the parts fit

### Who runs what

- `ReplicatedStorage.RBLXEssentials.Packs.ClassicUIKit.Client` only calls `ctx.kernel.KitEngine.boot(ctx, { id = "ClassicUIKit" })`. The engine is the Kernel's (`ReplicatedStorage.RBLXEssentials.Kernel.KitEngine`): it installs and updates with the Kernel, so a game with only this kit has it. When another installed kit is the style, the engine prints one line and does nothing for this kit.
- The defaults ship in `StarterGui.RBLXEssentials.ClassicUIKit`: the ScreenGui `ClassicUIKitGUI` (folders `Menus`, `Interactables` with the HUD `Container`, `Tooltip`, `Widgets` with the hatch reveals) and two layer ScreenGuis, `ClassicUIKitNotifications` (the `NotificationLayer` piece, its `Templates` folder) and `ClassicUIKitMusic` (the `MusicPlayer` piece, its frame tagged `MusicPlayerFrame`). `ReplicatedStorage.RBLXEssentials.Packs.ClassicUIKit.Assets.Templates` holds `BlankMenu`, `BlankHudButton` and `GiftButton`.
- General UI Kit's slot ids are kept: with General UI Kit installed, `ctx.getPiece("ShopPanel")` of that kit and every pack that asks for `GeneralUIKit.ShopPanel` get Classic's Shop; without it the engine asks for `ClassicUIKit.ShopPanel`.

### How it is drawn

- Every piece root is sized in scale of a 1920 x 1080 screen with a `UIAspectRatioConstraint`, and carries `DesignWidth` (its width in the design). Every outline is a `UIStroke` with `StrokeRef` (its thickness at that width) saved as `StrokeSizingMode` `ScaledSize` (`Thickness` a fraction of its parent's shorter side), so outlines keep the design look at any resolution and Edit shows them as Play does; a FixedSize stroke with `StrokeRef` (one the game adds) is scaled by the engine (`StrokeScale`). The ray images behind items (`Rayos`) carry `Animation = "Rotate"` (a turn every 15 s, only while their menu is shown; still in Edit), inside a `CanvasGroup` `RaysClip` where their card clips them. Texts are `TextScaled` in Fredoka One with a Contextual `UIStroke` (round joins); Roblox caps scaled text at 100 px, which only the Spin title reaches on very tall screens.
- A colour surface is a white Frame under a two-stop `UIGradient` (light on top), an ink `UIStroke`, a `Bevel` frame inside (a light `UIStroke`), and a `Studs` layer. Buttons draw that surface on a child `Face`: the button itself is transparent, so a pack that recolours a button never paints over the design. The surfaces a pack recolours on purpose (the Settings toggles and volume segments, Easy Pet System's tabs, Time Rewards System's days and their buttons) keep the colour on the instance under a white-to-grey gradient, so the pack's colour gets the shading.
- Buttons carry `HoverScale` and `PressScale` and a `UIScale` named `Feel`: the engine grows them on hover (1.08 HUD, 1.04 others) and shrinks them while pressed (`ButtonFeel`), always from their centre: before the first tween a button placed by its Position is anchored at (0.5, 0.5) with its Position moved by the same amount (nothing moves at rest), and a button in a `UIListLayout` (a tile's `BuyRow`) goes into a transparent `FeelSlot` of its size so the list never reflows; everything inside scales with it, the studs too (their tile follows the `Feel` scale, Kernel `UI/Finish.lua`). A button with a child `Icon` keeps it where the design put it (the Kernel's Icon tween is only for buttons without `HoverScale`); the Kernel plays `Hover` and `Press` (`Buy_1` with `BuySound`). Menus open with `Bounce` (`SpinReveal` on Spin), as General UI Kit's.
- The HUD `Container` (square buttons in three columns of four, filled top to bottom, placed and sized like General UI Kit's grid; the invite button bottom-left and the Changelogs button bottom-right, as in General UI Kit) carries `RBLXE_HudGrid = true`: in Play the engine gives its geometry to the Kernel's grid (`HudGrid`).

### Pack menus in Classic's look

- **Codes, Rewards, Daily Rewards, Spin, Pets, Gift**: the owner pack drives the menu by role and path (THEMES.md). Daily's days sit in a `UIListLayout` row (Time Rewards System widens today's tile) and the `Days` frame carries its colour tokens (`DayColor_*`, `ButtonColor_*`, `StatusText_*`, `ButtonOutline_*`; CLAIMED has its own darker green button, `ButtonColor_claimed` and `Transparency_claimed_bar`, apart from LOCKED's grey). The Spin wheel is Roulette System's seven-slot wheel drawn from GuiObjects in Classic's colours; a wheel of another size is redrawn by Roulette System in its own look. Pets: one hidden `<Rarity>PetTemplate` per rarity (its surface on a `Face`, the equipped mark `SelectedCheck`, a `SelectionOutline`); only the Collection and Eggs tabs, the Eggs view (`EggsView`) with Easy Pet System's structure in Classic's colours under the tabs. **Index** (`ClassicUIKit.IndexPanel`, PanelId `Index`, gives `EasyPetSystem.IndexPanel`; opened by `ClassicUIKit.IndexButton`): the card grid `IndexView/Grid/Scroll` (role `IndexGrid`, one hidden `CardTemplate`, role `IndexCard`: `Content` with still rays, `Preview`, `Unknown`, `PetName`), the rarity filters `IndexView/Filters` (role `IndexFilters`, one hidden `FilterTemplate`, role `IndexFilter`, with `Label` and `SelectionOutline`) and `IndexView/Count` (role `IndexCount`); Easy Pet System clones a card per pet and a filter per rarity, no rewards. **Rewards**: each gift's time sits at the card's top left over its picture; its `ClaimButton` carries `StateLook` (green CLAIM while Time Rewards System makes it `Active`, grey LOCKED otherwise: `ActiveGradient`/`InactiveGradient`, `ActiveBevel`/`InactiveBevel`, the label's `ActiveText`/`InactiveText`, Kernel `KitEngine/StateLook`). **Settings**: each volume row's `VolumeControl` holds the `VolumeGroup` attribute and its bar `VolumeFrame` with `Volume1`..`Volume9`, the path Sound System paints. **Codes**: the code box and Redeem only (no follow line); `SuccessText` and `ErrorText` show (empty until Codes System writes the verdict), centred under the box. **Settings** - and +: drawn bars (`Glyph`: white bars over ink bars), centred in both fonts. **Spin** (rc, Valen's redesign): a full-screen modal, its 1920 x 1080 design kept at 16:9 and centred, the wheel (700 px) centred on the screen, the title above, the odds `%` button, SPIN and the close button below, YOUR SPINS and GET MORE symmetric left and right, turning rays and a glow behind the wheel, the pointer (`Arrow`, role `SpinArrow`: option B as Valen's mockup: a flat amber triangle with a lighter band at the top, a thick ink outline with slightly rounded corners, a thin white line inside it and a small diamond gem, drawn from UI pieces with no image, its tip 55 px into the wheel; it turns about its centre for the tick), studs on every wedge, readable amounts under each icon. While it is open the HUD hides and its dim takes every click (Kernel `KitEngine/SpinShow`, the menu's `SpinShow = true`: the pointer ticks on every segment, the winning segment flashes, its reward pops with confetti, the Spin button pulses while a spin is available, through its `Feel` (attribute `Pulse`), so its studs keep up; the cash counter and the music player hide too). The odds sheet (`Odds`, role `SpinOdds`) lists Roulette System's live odds. `SpinReveal` animates each part back to where the menu puts it; the timer is role `SpinTimer`. **Daily Rewards**: each day's inner outlines follow its state (`StateLook`, the tile's from its `ClaimButton`'s `Active` through `StateLookSource`). **Cash**: `ClassicUIKit.CashCounter` (`Widgets/CashFrame`, gives `EasyPetSystem.CashCounter`) shows `Stats.Cash` (`UI_DataBind`, `$`, Short) above the HUD grid; Easy Pet System's bottom counter goes. Every menu leaves the HUD grid, the cash counter, the effects bar and the bottom widgets clear (centred when it fits, else moved or made smaller; the full-screen Spin menu's parts sit right of the HUD and under the effects bar; the Spin menu is its design kept at 16:9, so the wheel stays round on every screen). Menus whose content scrolls hold it in a `CanvasGroup` (`Container`, `EggsView`, `IndexView`), so it stays inside the menu while `Bounce` tilts it. The Gift menu's `Container` stacks its parts (`UIListLayout`), so a part the pack hides takes no room.
- **Notifications**: each template carries Notifications System's attributes (`Duration`, `MaxOnScreen`, `Sound`, `Animation`, `SlideFrom`, `StackGroup`, `StackDirection`) and its anchor.
- **Prices**: the Robux glyph (U+E002) is inside the `Amount` label, as General UI Kit's. A pass the player owns shows the button's hidden `OwnedLook` (grey, a check, OWNED).

### Images

Icons are General UI Kit's and the Stud icons Flood Drive uploaded (sheets with `ImageRectOffset`); the stud tile is General UI Kit's (rbxassetid://118347284107187, white, `ImageTransparency` 0.5 on every textured surface, as General UI Kit's headers and buttons; `StudTile` 114). The Spin wheel's wedges and hub carry studs too (each clipped to its wedge, turning with the wheel).

## Change it

There is no configuration: the game changes the kit through its pieces and `CustomHandlers`, exactly as with General UI Kit (its map, "Change it"): `T.content.fork("ClassicUIKit.ShopPanel")` (a fork belongs to this kit and waits unused while another kit is the style), edits in place, deletions, `Visible = false` on a fork. With General UI Kit installed too, `T.content.fork("GeneralUIKit.ShopPanel")` while Classic is the style forks Classic's menu (`fork-kit-menu`). Keep a fork's `Studs` layers, `StrokeRef`, `Face` and `Feel` so the finish and the feel still work.

- **Gift buttons on a forked Shop**: clone `ReplicatedStorage.RBLXEssentials.Packs.ClassicUIKit.Assets.Templates.GiftButton` into each tile beside its `BuyButton`, in the tile's `BuyRow`.
- **A menu of the game's own**: start from `Templates.BlankMenu` and `BlankHudButton` (Classic's Shop shell and Shop button, no `RBLXE_*`), as UI.md's recipe says.

## Remove it

`T.uninstall("ClassicUIKit")` backs up its folders; the game's `Extensions.ClassicUIKit` and its forks stay. With General UI Kit installed, that kit's menus are used again (its forks come back); without any kit each pack shows its own menu. The Kernel keeps the engine (it is the Kernel's).

## Player data

None: the kit saves nothing and has no remotes. It reads `PlayerData` on the client only for its live labels (`UI_DataBind`) and the Rebirth requirement bar (`Stats.Cash`).

## Ideas

1. **Switch a General UI Kit game to Classic** (only when the user asks): `T.style({ kit = "ClassicUIKit", style = "studded-fredoka" })`, then `T.content.reconcile()` and Play. The game's General UI Kit forks wait (`style-kit-edits-wait`) and come back if it switches back; re-make the edits on Classic's forks.
2. **Another of its styles** (only the four presets; a font is never set on its own): `T.style({ kit = "ClassicUIKit", style = "plain-montserrat" })`.
3. **Give the game's own UI the Stud look**: copy a surface (for example a Shop card) with its `Bevel`, `Studs` and `Outline`, keep the tags and attributes, and set `DesignWidth` on the root of the new piece so its outlines scale.
