CLYT (.bclyt) is the layout format used on the 3DS. It stands for (Binary) CTR Layout, and is similar to the RLYT format used on the Wii.
| Offset | Size | Type | Description | 
| 0x00 | 0x4 | String | Signature (CLYT) | 
| 0x04 | 0x2 | UInt16 | Byte Order Mark | 
| 0x06 | 0x2 | UInt16 | Header Length | 
| 0x08 | 0x4 | UInt32 | Revision | 
| 0x0C | 0x4 | UInt32 | File Size | 
| 0x10 | 0x2 | UInt16 | Nr Sections | 
| 0x12 | 0x2 | UInt16 | Padding | 
lyt1 (Layout 1)
| Offset | Size | Type | Description | 
| 0x00 | 0x4 | String | Signature (lyt1) | 
| 0x04 | 0x4 | UInt32 | Section Size | 
| 0x08 | 0x4 | UInt32 | Origin type 
| Value | Meaning |  
| 0 | Classic |  
| 1 | Normal |  | 
| 0x0C | 0x8 | Vector2 | Canvas Size | 
txl1 (Texture List 1)
| Offset | Size | Type | Description | 
| 0x00 | 0x4 | String | Signature (txl1) | 
| 0x04 | 0x4 | UInt32 | Section Size | 
| 0x08 | 0x4 | UInt32 | Nr Textures = N | 
| 0x0C | N * 4 | UInt32[] | Texture Name Offsets (relative to the start of this array) | 
After this, the null terminated names follow.
fnl1 (Font List 1)
| Offset | Size | Type | Description | 
| 0x00 | 0x4 | String | Signature (fnl1) | 
| 0x04 | 0x4 | UInt32 | Section Size | 
| 0x08 | 0x4 | UInt32 | Nr Fonts = N | 
| 0x0C | N * 4 | UInt32[] | Font Name Offsets (relative to the start of this array) | 
After this, the null terminated names follow.
mat1 (Materials 1)
| Offset | Size | Type | Description | 
| 0x00 | 0x4 | String | Signature (mat1) | 
| 0x04 | 0x4 | UInt32 | Section Size | 
| 0x08 | 0x4 | UInt32 | Nr Materials = N | 
| 0x0C | N * 4 | UInt32[] | Material Entry Offsets (relative to the start of this section) | 
After this, the material entries follow.
| Offset | Size | Type | Description | 
| 0x00 | 0x14 | String | Material Name | 
| 0x14 | 0x4 | RGBA8 | Tev Color (Buffer Color?) | 
| 0x18 | 0x18 | RGBA8[6] | Tev Constant Colors | 
| 0x30 | 0x4 | UInt32 | Flags / bitfield 
| Bit | Flag / data |  
| 0-1 | Nr texMap |  
| 2-3 | Nr texMatrix |  
| 4-5 | Nr texCoordGen |  
| 6-8 | Nr tevStage |  
| 9 | Has alphaCompare |  
| 10 | Has blendMode |  
| 11 | Use Texture Only |  | 
Texture Map Entry
| Offset | Size | Type | Description | 
| 0x00 | 0x2 | UInt16 | Texture Index | 
| 0x02 | 0x1 | Byte | Bitfield 
| Bit | Data |  
| 0-1 | Wrap S (Clamp = 0, Repeat = 1, Mirror = 2) |  
| 2-3 | Min Filter (0 = Near, 1 = Linear) |  | 
| 0x03 | 0x1 | Byte | Bitfield 
| Bit | Data |  
| 0-1 | Wrap T (Clamp = 0, Repeat = 1, Mirror = 2) |  
| 2-3 | Mag Filter (0 = Near, 1 = Linear) |  | 
Texture Matrix Entry
| Offset | Size | Type | Description | 
| 0x00 | 0x8 | Vector2 | Translation | 
| 0x08 | 0x4 | Single | Rotation | 
| 0x0C | 0x8 | Vector2 | Scale | 
Texture Coordinate Generation Entry
| Offset | Size | Type | Description | 
| 0x00 | 0x1 | UInt8 | Type 
| Value | Meaning |  
| 0 | 2x4 matrix |  | 
| 0x01 | 0x1 | UInt8 | Source (N = Tex N, max 2) | 
| 0x02 | 0x2 | UInt8[] | Padding | 
TODO: tevStage, alphaCompare, blendMode, etc...
pan1(Pane 1)
Defines a Null pane, used mostly to keep panes grouped in hierarchies or to control the children of a given pan1 without having to do so individually.
| Offset | Size | Type | Description | 
| 0x00 | 0x4 | String | Signature (pan1) | 
| 0x04 | 0x4 | UInt32 | Section Size | 
| 0x08 | 0x1 | UInt8 | Flags 
| Bit | Flag |  
| 0 | Visible |  
| 1 | InfluencedAlpha |  
| 2 | LocationAdjust |  | 
| 0x09 | 0x1 | UInt8 | Origin (1 = centered, 2 = right, 3 = left, ) | 
| 0x0A | 0x1 | UInt8 | Alpha | 
| 0x0B | 0x1 | UInt8 | Padding | 
| 0x0C | 0x10 | String | Pane name | 
| 0x1C | 0x8 | String | Data | 
| 0x24 | 0xC | Vector3 | Translation | 
| 0x30 | 0xC | Vector3 | Rotation | 
| 0x3C | 0x8 | Vector2 | Scale | 
| 0x44 | 0x8 | Vector2 | Size | 
pic1(Picture 1)
pic1 represents a picture that can be displayed in a layout. The first 0x4C bytes are defined the same as pan1 with minor differences.
| Offset | Size | Type | Description | 
| 0x00 | 0x4 | String | Signature (pic1) | 
| 0x04 | 0x4 | UInt32 | Section size (including the texture coordinates) | 
| Same as pan1 from 0x8 to 0x4c | 
| 0x4C | 0x4 | RGBA8 | Top left vertex color | 
| 0x50 | 0x4 | RGBA8 | Top right vertex color | 
| 0x54 | 0x4 | RGBA8 | Bottom left vertex color | 
| 0x58 | 0x4 | RGBA8 | Bottom right vertex color | 
| 0x5C | 0x2 | UInt16 | Material ID | 
| 0x5E | 0x2 | UInt16 | Nr texture coordinates = N | 
| Texture coordinates entry | 
| 0x60 + (N-1) * 0x20 | 0x8 | Vector2 | Top left vertex texture coordinate | 
| 0x64 + (N-1) * 0x20 | 0x8 | Vector2 | Top right vertex texture coordinate | 
| 0x68 + (N-1) * 0x20 | 0x8 | Vector2 | Bottom left vertex texture coordinate | 
| 0x6C + (N-1) * 0x20 | 0x8 | Vector2 | Bottom right vertex texture coordinate | 
txt1 (Text 1)
A textbox used in layouts. 
The first 0x4C bytes are defined the same as pan1 with minor differences.
| Offset | Size | Type | Description | 
| 0x00 | 0x4 | String | Signature (txt1) | 
| 0x04 | 0x4 | UInt32 | Section size (including the textbox string) | 
| Same as pan1 from 0x8 to 0x4c | 
| 0x4C | 0x2 | Unknown | Flags (H Direction?) | 
| 0x4E | 0x2 | Unknown | Flags (V Direction?) | 
| 0x50 | 0x4 | UInt32 | Material ID | 
| 0x54 | 0x2 | Unknown | Flags (Line alignment?) | 
| 0x56 | 0x2 | Unknown | Padding | 
| 0x58 | 0x4 | UInt32 | Offset from signature to beginning of the string | 
| 0x5C | 0x4 | RGBA8 | Font top color | 
| 0x60 | 0x4 | RGBA8 | Font bottom color | 
| 0x64 | 0x8 | Vector2 | Font scale | 
| 0x6C | 0x4 | Float | Horizontal font spacing | 
| 0x70 | 0x4 | Float | Vertical font spacing | 
| 0x74 | User defined | String | Textbox text (must be multiple of 4), can be usd1 | 
wnd1 (Window 1)
A more complex type of image pane, where the user can define the content, the corners and the sides of it, depending on what mode it's set to.
| Offset | Size | Type | Description | 
| 0x00 | 0x4 | String | Signature (wnd1) | 
| 0x04 | 0x4 | UInt32 | Section size (including the texture coordinates) | 
| Same as pan1 from 0x8 to 0x4c | 
| 0x4C | 0x4 | float | Coordinate 1 | 
| 0x50 | 0x4 | float | Coordinate 2 | 
| 0x54 | 0x4 | float | Coordinate 3 | 
| 0x58 | 0x4 | float | Coordinate 4 | 
| 0x5C | 0x1 | Byte | Number of frames (n) | 
| 0x5D | 0x1 | Byte | Flag | 
| 0x5E | 0x2 | UInt16 | Padding | 
| 0x60 | 0x4 | UInt32 | Window content offset (Points to 0x68) | 
| 0x64 | 0x4 | UInt32 | Window frame offsets, offset to offsets of the materials for the frames. (W) | 
| 0x68 | 0x4 | RGBA8 | Content box top left vertex color | 
| 0x6C | 0x4 | RGBA8 | Content box top right vertex color | 
| 0x70 | 0x4 | RGBA8 | Content box bottom left vertex color | 
| 0x74 | 0x4 | RGBA8 | Content box bottom right vertex color | 
| 0x78 | 0x2 | UInt16 | Content box Material ID | 
| 0x7A | 0x2 | UInt16 | Number of Texture coordinates (N) | 
| Texture coordinates entry | 
| 0x7C + (N-1) * 0x20 | 0x8 | Vector2 | Top left vertex texture coordinate | 
| 0x84 + (N-1) * 0x20 | 0x8 | Vector2 | Top right vertex texture coordinate | 
| 0x8C + (N-1) * 0x20 | 0x8 | Vector2 | Bottom left vertex texture coordinate | 
| 0x94 + (N-1) * 0x20 | 0x8 | Vector2 | Bottom right vertex texture coordinate | 
| Window frames | 
| 0x(W) | 0x4 * n | UInt32 | Offsets to frame materials | 
| 0x(W) | 0x4 * n | Window frame | 
| Offset | Size | Type | Description |  
| 0x0 | UInt16 | 0x2 | Frame Material ID |  
| 0x2 | Byte | 0x1 | Flip Type |  
| 0x3 | Byte | 0x1 | Padding |  | 
Below is a table of possible material flip types. (From Mario Kart Wii Wiki)
| Type | Description | 
| 0 | None | 
| 1 | Flip (Horizontal) | 
| 2 | Flip (Vertical) | 
| 3 | Rotate 90 Degrees | 
| 4 | Rotate 180 Degrees | 
| 5 | Rotate 270 Degrees | 
bnd1 (Bounding 1)
Same data structure as Panes, but used to limit interaction with buttons.
| Offset | Size | Type | Description | 
| 0x00 | 0x4 | String | Signature (bnd1) | 
| 0x04 | 0x4 | UInt32 | Section size (including the texture coordinates) | 
| Same as pan1 from 0x8 to 0x4c | 
pas1 (Pane Start 1)
Marks the start of a pane hierarchy, with the parent being the previous pane.
| Offset | Size | Type | Description | 
| 0x00 | 0x4 | String | Signature (pas1) | 
| 0x04 | 0x4 | UInt32 | Section Size | 
pae1 (Pane End 1)
Marks the end of a pane hierarchy.
| Offset | Size | Type | Description | 
| 0x00 | 0x4 | String | Signature (pae1) | 
| 0x04 | 0x4 | UInt32 | Section Size | 
grp1 (Group 1)
Starts a pane group, which can be inside other pane groups.
| Offset | Size | Type | Description | 
| 0x00 | 0x4 | String | Signature (grp1) | 
| 0x04 | 0x4 | UInt32 | Section Size | 
| 0x08 | 0x10 | String | Group Name | 
| 0x18 | 0x4 | UInt32 | Nr Pane References (=N) | 
| 0x1C | 0x10 * N | String[N] | Pane References | 
grs1 (Group Start 1)
Starts a group hierarchy.
| Offset | Size | Type | Description | 
| 0x00 | 0x4 | String | Signature (grs1) | 
| 0x04 | 0x4 | UInt32 | Section Size | 
gre1 (Group End 1)
Ends a group hierarchy.
| Offset | Size | Type | Description | 
| 0x00 | 0x4 | String | Signature (gre1) | 
| 0x04 | 0x4 | UInt32 | Section Size | 
usd1 (User Data 1)
Contains a dictionary with strings as keys and variable values
| Offset | Size | Type | Description | 
| 0x00 | 0x4 | String | Signature (usd1) | 
| 0x04 | 0x4 | UInt32 | Section Size | 
| 0x08 | 0x4 | UInt32 | Number of entries (= N) | 
| 0xC | 0xC * N // Variable | Entries[] | Entries | 
User Entries
Where an entry is as follows:
| Offset | Size | Type | Description | 
| 0x0 | 0x4 | UInt32 | Key offset (from start of this entry) to null-terminated ascii string that serves as key. | 
| 0x4 | 0x4 | UInt32 | Value offset (from start of this entry). | 
| 0x8 | 0x2 | UInt16 | Number of entries or string length. | 
| 0xA | 0x2 | UInt16 | Value type 
| Value | Type |  
| 0x0 | String |  
| 0x1 | Int |  
| 0x2 | Float |  | 
Tools
- Every File Explorer and Switch Toolbox both have limited support for viewing these.
- Clypo allows exporting these files to yml and importing back to bclyt but it only supports scale, size, translation and rotation of panes.