# Studded Glass UI Kit (StuddedGlassUIKit)

Studded Glass UI Kit gives the game its whole menu interface in a toy-brick look: bright colour pieces (headers, buttons, cards) with studs, a thick ink outline, a light inner rim and a dark lip under them, over dark see-through glass menu bodies the world shows through. It has the same menus, HUD buttons and widgets as General UI Kit and Classic UI Kit: 17 menus (Shop, Settings, Teleport, Changelogs, Pets, Index, Codes, Daily Rewards, Rewards, Spin, Rebirth, Upgrades, Trade, Trade Inventory, Trade Request, Gift, Gift Received), the HUD buttons that open them, the cash counter, the invite button, the effects bar and tooltips, 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 is the Kernel's shared UI engine, `ctx.kernel.KitEngine`, the same code the other kits run, with this kit's motion (Kernel 3.5.3): menus slide up from below the screen when they open and slide down out of it when they close, and buttons grow and darken on hover. 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 (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 shows the stud tile and the diagonal gloss on every colour piece; Plain is the same without them (the glass is the same in both). Fredoka is Fredoka One, Montserrat is Montserrat Black with the same outline. The game's style is `Config.Game` (`Kit = "StuddedGlassUIKit"`, `Style = "<id>"`; `T.style`, THEMES.md section 6). Every piece gives a slot (`standsInFor`), exactly as Classic UI Kit's: General UI Kit's own slots 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`); the Facts block lists its 39 pieces. With another GUI kit installed too, only the style's kit is used and the other one's pieces are retired; without it, this kit's pieces are its 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.StuddedGlassUIKit.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 -- StuddedGlassUIKit`. Do not edit by hand.

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

### Scripts
- `ReplicatedStorage.RBLXEssentials.Packs.StuddedGlassUIKit.Client` (ModuleScript)
- `ReplicatedStorage.RBLXEssentials.Packs.StuddedGlassUIKit.Client.DailyIcons` (ModuleScript)
- `ReplicatedStorage.RBLXEssentials.Packs.StuddedGlassUIKit.Client.MuteIcon` (ModuleScript)
- `ReplicatedStorage.RBLXEssentials.Packs.StuddedGlassUIKit.Client.PanelAnimations.SlideUp` (ModuleScript)
- `ReplicatedStorage.RBLXEssentials.Packs.StuddedGlassUIKit.Client.ShopTabs` (ModuleScript)
- `ReplicatedStorage.RBLXEssentials.Packs.StuddedGlassUIKit.Client.StateVisible` (ModuleScript)
- `ReplicatedStorage.RBLXEssentials.Packs.StuddedGlassUIKit.Client.TextShadow` (ModuleScript)
- `ReplicatedStorage.RBLXEssentials.Packs.StuddedGlassUIKit.CustomHandlers` (ModuleScript)
- `ReplicatedStorage.RBLXEssentials.Packs.StuddedGlassUIKit.Pieces` (ModuleScript)
- `ReplicatedStorage.RBLXEssentials.Packs.StuddedGlassUIKit.Schema` (ModuleScript)
- `ReplicatedStorage.RBLXEssentials.Packs.StuddedGlassUIKit.manifest` (ModuleScript)

### Config
Game's values: `ReplicatedStorage.RBLXEssentials.Config.StuddedGlassUIKit` (shared) and `ServerScriptService.RBLXEssentials.Config.StuddedGlassUIKit` (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.StuddedGlassUIKit.Pieces`:55

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

## How the parts fit

### Who runs what

- `ReplicatedStorage.RBLXEssentials.Packs.StuddedGlassUIKit.Client` calls `ctx.kernel.KitEngine.boot(ctx, { id = "StuddedGlassUIKit", motion = { ... } })` with the kit's motion (no centre scale on open, the slide down on close, a darker hover), then, while it is the style, starts its own three look modules: `TextShadow` (the texts' ink shadows), `ShopTabs` (the Shop's tabs) and `StateVisible` (parts shown by a button's state). The engine is the Kernel's: it installs and updates with the Kernel, so a game with only this kit has it. The kit needs Kernel 3.5.3; it ships it. When another installed kit is the style, the engine prints one line and does nothing for this kit.
- The open animation is the kit's own, `Client.PanelAnimations.SlideUp` (KitEngine registers it by name; each menu asks for it with `Animation = "SlideUp"`): the menu starts one screen below its place and rises into it (Quad Out, 0.3 s). The place it rises to is kept in `RBLXE_SlideRest` the first time, so a menu reopened while it still moves goes to its real place. The Spin menu keeps `SpinReveal`.
- The defaults ship in `StarterGui.RBLXEssentials.StuddedGlassUIKit`: the ScreenGui `StuddedGlassUIKitGUI` (folders `Menus`, `Interactables` with the HUD `Container`, `Tooltip`, `Widgets` with the cash counter and the hatch reveals) and two layer ScreenGuis, `StuddedGlassUIKitNotifications` (the `NotificationLayer` piece) and `StuddedGlassUIKitMusic` (the `MusicPlayer` piece). `ReplicatedStorage.RBLXEssentials.Packs.StuddedGlassUIKit.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 this kit's Shop while it is the style; without it the engine asks for `StuddedGlassUIKit.ShopPanel`.

### How it is drawn

- Every piece root is sized in scale of a 1920 x 1080 screen with a `UIAspectRatioConstraint` and carries `DesignWidth`; every outline is a `UIStroke` with `StrokeRef`, saved as `ScaledSize`, so outlines keep the design look at any resolution and Edit shows them as Play does.
- **A colour piece** (a header, a button, a card) is its layers as drawn in the design: the frame's own colour is the ink contour, `Face` the vertical gradient of its colour (light on top), a darker lip at the bottom, `Rim` the light inner edge, `Studs` the stud tile and `Gloss` the diagonal light bands. `Studs` and `Gloss` are finish layers (attribute `Finish`, tiled with `StudTile`): Studded shows them, Plain hides them. Buttons carry the surface on a child `Face`, so a pack that recolours a button never paints over the design.
- **Glass**: menu bodies, rows and slots are black at about half transparency with a thin light inner edge and the ink outline: the world shows through. Nothing is blurred.
- **Texts** are `TextScaled` in Fredoka One (or Montserrat Black) with a Contextual ink `UIStroke` and an ink copy a few pixels below, `<Name>Shadow` (attributes `ShadowOf` and `ShadowOffset`, tag `StuddedGlassUIKit_TextShadow`). In Play the client keeps each shadow in step with its text (its Text, Visible, Size, Position plus the offset, alignment and outline), so a pack that writes a label moves its shadow too. A game that adds a text of its own needs no shadow; one that copies a label should copy its shadow with it or delete both.
- **Buttons** carry `HoverScale` 1.05 and `PressScale` 0.98 and a `UIScale` named `Feel`: the engine grows them on hover, darkens them (Kernel 3.5.3 `hoverDarken`, the button's own surface and image, never its texts) and shrinks them while pressed, always from their centre. The Kernel plays `Hover` and `Press` (`Buy_1` with `BuySound`).
- The HUD `Container` carries `RBLXE_HudGrid = true`: in Play the engine gives its geometry to the Kernel's grid (`HudGrid`).
- **Images**: icons and pictures are the kit's own. Until they are uploaded to Roblox an image keeps its design hash in `FigmaImage` and draws nothing; the released kit has every image uploaded. Every icon, check, lock, star and gear included, is one of the kit's own images; the only other picture is the example avatar, a `rbxthumb`.

### Pack menus in this look

- **Codes, Rewards, Daily Rewards, Spin, Pets, Index, Gift**: the owner pack drives the menu by role and path (THEMES.md), as with the other kits. **Daily Rewards**: the `Days` frame carries its colour tokens (`DayColor_*`, `ButtonColor_*`, `StatusText_*`, `ButtonOutline_*`), CLAIMED its own yellow, LOCKED grey; a day that shows one of Time Rewards System's default icons (cash, diamonds, spin) shows the kit's own picture instead (`DailyIcons`; Day 3's spin is the HUD Spin button's wheel), and an icon the game set itself is left alone. **Rewards**: each gift's CLAIM button shows while Time Rewards System makes it `Active` and its glass time box while not (`StateVisible`: attributes `ShowWhen` and `ShowSource`). **Spin**: Roulette System's seven-slot wheel drawn in the kit's colours, a full-screen modal with `SpinShow` (the HUD hides while it is open, the pointer ticks, the reward pops) and the odds sheet with the live odds. **Pets**: the Collection and Eggs tabs, the Eggs view with Easy Pet System's structure in the kit's colours, one hidden template per rarity; the panel's glass is its own `Backdrop` under `Container`, so it stays when Easy Pet System hides `Container` (the Collection view) on the Eggs tab. Extra pet space is sold in the Shop only. **Index**: Easy Pet System's card grid, rarity filters and count by role, as in Classic UI Kit. **Settings**: each volume row's `VolumeControl` holds `VolumeGroup` and the segments Sound System paints; while Music or Sound Effects is OFF its two rows show the crossed icon and the toggle is the kit's red piece (`MuteIcon`, following the toggle's `Status` text). **Trade**: the menu opens on its player list, `Container.PlayerContainer` (a `Player` row per player: `Icon`, `DisplayName`, `Username`, `Button`) under a `Hint` that shows with it; the trade sheet is `Container.TradeContainer` (both players' items, the status text and the buttons), hidden until the game starts a trade, the same two views as General UI Kit's Trade. **Cash**: `StuddedGlassUIKit.CashCounter` shows `Stats.Cash` (`UI_DataBind`) above the HUD grid; Easy Pet System's bottom counter goes.
- **Shop**: four tabs, Featured, Passes, Ingots and Boosts (`ShopTabs`). The Shop holds one copy of every tile, because the packs find a pass's buy button by its `Action`, one per Action: a tile's `ShopIn` lists the tabs it shows in and `ShopPos_<tab>` its place in each. A tile of the game's own without `ShopIn` is never hidden by the tabs. Each tile that sells something has a hidden gift button beside its price button, as in the other kits; a pass the player owns shows the button's `OwnedLook` (grey, a check, OWNED).
- **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 at the start of the `Amount` label, as in the other kits. Coloured cash, gem and XP texts carry a vertical `UIGradient`.

## 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("StuddedGlassUIKit.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 this kit is the style forks this kit's menu (`fork-kit-menu`). Keep a fork's `Face`, `Studs`, `Gloss`, `Rim`, `StrokeRef`, `Feel` and the text shadows so the finish, the outlines, the feel and the shadows still work.

- **Gift buttons on a forked Shop**: clone `ReplicatedStorage.RBLXEssentials.Packs.StuddedGlassUIKit.Assets.Templates.GiftButton` into each tile beside its buy button.
- **A menu of the game's own**: start from `Templates.BlankMenu` and `BlankHudButton` (the kit's menu shell and HUD button, no `RBLXE_*`), as UI.md's recipe says; give the menu `Animation = "SlideUp"` so it moves like the others.

## Remove it

`T.uninstall("StuddedGlassUIKit")` backs up its folders; the game's `Extensions.StuddedGlassUIKit` and its forks stay. With another GUI kit installed, that kit's menus are used again (`T.style` to pick it); 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 game to this kit** (only when the user asks): `T.style({ kit = "StuddedGlassUIKit", style = "studded-fredoka" })`, then `T.content.reconcile()` and Play. The other kit's forks wait (`style-kit-edits-wait`) and come back if it switches back; re-make the edits on this kit's forks.
2. **Another of its styles** (only the four presets; a font is never set on its own): `T.style({ kit = "StuddedGlassUIKit", style = "plain-montserrat" })`.
3. **Give the game's own UI the look**: copy a colour piece (for example a Shop card) with its `Face`, `Rim`, `Studs` and `Gloss` and the outline, keep the tags and attributes, and set `DesignWidth` on the root of the new piece so its outlines scale.
