apply formatting

This commit is contained in:
bakedpotatolord 2025-06-10 21:14:47 -06:00
commit d44ca56d39
17 changed files with 165 additions and 185 deletions

View file

@ -1,7 +1,5 @@
# Parts List
| **Quantity** | **Name** | **Description** | **Product Link** |
| ------------ | ------------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 1 | upper xy belt | | [https://www.amazon.com/Printing-FYSETC-Fiberglass-Rostock-Printers/dp/B07CDDPCM8](https://www.amazon.com/Printing-FYSETC-Fiberglass-Rostock-Printers/dp/B07CDDPCM8) |
@ -9,7 +7,7 @@
| 1 | z belt | 1140-1160 mm | [https://www.amazon.com/gp/product/B018HN8576](https://www.amazon.com/gp/product/B018HN8576) |
| 1 | 24v power supply | | [https://www.amazon.com/EAGWELL-Universal-Regulated-Switching-Computer/dp/B01IOK5FM0](https://www.amazon.com/EAGWELL-Universal-Regulated-Switching-Computer/dp/B01IOK5FM0) |
| 1 | SKR V1.3 | | [https://www.amazon.com/gp/product/B07Z3FZGJ1](https://www.amazon.com/gp/product/B07Z3FZGJ1) |
| 2 | cross bar | | [https://hobbyking.com/en\_us/aluminum-square-tube-diy-multi-rotor-12-8x12-8x600mm-5inch-black.html](https://hobbyking.com/en\_us/aluminum-square-tube-diy-multi-rotor-12-8x12-8x600mm-5inch-black.html) |
| 2 | cross bar | | [https://hobbyking.com/en_us/aluminum-square-tube-diy-multi-rotor-12-8x12-8x600mm-5inch-black.html](https://hobbyking.com/en_us/aluminum-square-tube-diy-multi-rotor-12-8x12-8x600mm-5inch-black.html) |
| 1 | hot end mount | 3d print solid | |
| 1 | bltouch mount | 3d print solid | |
| 3 | level bracket | 3d print solid | |

View file

@ -15,6 +15,4 @@ The [control software](https://github.com/GridSpace/grid-bot) is open source on
A Beta for a [new design](https://cad.onshape.com/documents/d0514606a660a802eb16304a/w/43a797f28bcc004e3e7e7e17/e/61abf70c46004ffbc0134231) is also available. Check [forum.grid.space](https://forum.grid.space) for progress on this and other builds.
![](/img/GridBot-Two-Right.png)

View file

@ -14,7 +14,7 @@ You can access it from the top-right menu:
## Workspace Dimensions
These values define your machines cutting envelope. Use your *actual usable* dimensions here, not the marketing ones.
These values define your machines cutting envelope. Use your _actual usable_ dimensions here, not the marketing ones.
- **X (width)** — Maximum horizontal travel (left to right)
- **Y (depth)** — Maximum front-to-back travel

View file

@ -2,7 +2,8 @@
description: Keyboard Shortcuts and Mouse Controls
label: ops
---
import { ImageCarousel } from '@site/docs/src/components/carousel.js'
import { ImageCarousel } from "@site/docs/src/components/carousel.js";
# Operations

View file

@ -1,7 +1,8 @@
---
description: Process options for the CAM mode
---
import { ImageCarousel } from '@site/docs/src/components/carousel.js'
import { ImageCarousel } from "@site/docs/src/components/carousel.js";
# Process Options

View file

@ -14,6 +14,7 @@ Additionally, tools can be imported and exported as `.km` files. The file format
![](/img/CAM/toolMenu.png)
Kiri:Moto currently supports four types of tools:
- End Mills
- Ball Mills
- Taper Mills

View file

@ -40,24 +40,24 @@ JSON dictionaries can be used for reference from the [CLI package](https://githu
Kiri:Moto is designed to be embedded in a page using an IFrame. The look and feel and other controls are available for the loaded page using a messaging API. An example page is [here](https://grid.space/kiri/frame.html).
| function | description |
| --------------------------- | ------------------------------------------------------------------------------------------------------- |
| setFrame(_id\_obj_) | id or object of IFrame with Kiri:Moto loaded |
| load(_url_) | load an [STL](https://en.wikipedia.org/wiki/STL\_\(file\_format\)) referred to by _url_ |
| clear() | remove all objects from workspace |
| parse(_data_) | parse the text or binary contents of an [STL](https://en.wikipedia.org/wiki/STL\_\(file\_format\)) file |
| setMode(_mode_) | where _mode_ comes from:`[ "CAM", "FDM", "LASER", "SLA" ]` |
| setDevice(_options_) | change default Device options |
| setProcess(options) | change default Process options |
| setController(options) | change default Core options |
| slice() | async slice of loaded object |
| prepare() | async path routing of slice data |
| export() | async gcode generation from routed paths |
| onmessage(_fn_) | function will receive all IFrame messages |
| onevent(_event, data_) | function will receive named messages |
| emit(_event, data_) | send named event with data payload |
| alert(_msg, time_) | show alert message with optional time in seconds |
| process(_percent, message_) | set progress bar (0.0 to 1.0) with optional message |
| function | description |
| --------------------------- | ----------------------------------------------------------------------------------------------------- |
| setFrame(_id_obj_) | id or object of IFrame with Kiri:Moto loaded |
| load(_url_) | load an [STL](<https://en.wikipedia.org/wiki/STL_(file_format)>) referred to by _url_ |
| clear() | remove all objects from workspace |
| parse(_data_) | parse the text or binary contents of an [STL](<https://en.wikipedia.org/wiki/STL_(file_format)>) file |
| setMode(_mode_) | where _mode_ comes from:`[ "CAM", "FDM", "LASER", "SLA" ]` |
| setDevice(_options_) | change default Device options |
| setProcess(options) | change default Process options |
| setController(options) | change default Core options |
| slice() | async slice of loaded object |
| prepare() | async path routing of slice data |
| export() | async gcode generation from routed paths |
| onmessage(_fn_) | function will receive all IFrame messages |
| onevent(_event, data_) | function will receive named messages |
| emit(_event, data_) | send named event with data payload |
| alert(_msg, time_) | show alert message with optional time in seconds |
| process(_percent, message_) | set progress bar (0.0 to 1.0) with optional message |
## Events

View file

@ -4,38 +4,38 @@ label: Engine APIs
---
# Engine APIs
The `Engine` class serves as an abstraction layer for interacting with the `kiri` 3D slicing engine. It handles loading and parsing STL files, manipulating widgets (3D models), configuring slicing parameters, and executing the toolpath generation pipeline: slice, prepare, and export.
This API is designed with method chaining in mind, and provides hooks for custom event listeners.
you can view some example of how to use the engine [here](https://grid.space/kiri/engine.html).
---
## Methods
| Method | Description | Returns |
|--------|-------------|---------|
| `load(url)` | Loads an [STL](https://en.wikipedia.org/wiki/STL\_\(file\_format\)) file from a given URL and centers the model. | `Promise<Engine>` |
| `clear()` | Clears all objects from workspace. | `void` |
| `parse(data)` | Parses raw [STL](https://en.wikipedia.org/wiki/STL\_\(file\_format\)) data and loads it as a centered widget. | `Promise<Engine>` |
| `setListener(listener)` | Sets an event listener function to receive engine progress updates | `Engine` |
| `setRender(bool)` | Enables or disables rendering. | `Engine` |
| `setMode(mode)` | Sets the slicing mode where mode is "CAM"|"FDM"|"LASER"|"SLA" . | `Engine` |
| `setDevice(device)` | Merges a custom device profile into the current settings. | `Engine` |
| `setProcess(process)` | Merges custom slicing process parameters. | `Engine` |
| `setController(controller)` | Sets the slicing controller settings and starts/stops the worker pool accordingly. | `Engine` |
| `setTools(tools)` | Sets the tool definitions (e.g. cutters, extruders). | `Engine` |
| `setStock(stock)` | Sets the stock material dimensions. | `Engine` |
| `setOrigin(x, y, z)` | Defines the origin point for the part. | `Engine` |
| `moveTo(x, y, z)` | Moves the widget to the specified absolute coordinates. | `Engine` |
| `move(x, y, z)` | Moves the widget by the specified delta values. | `Engine` |
| `scale(x, y, z)` | Scales the widget along each axis. | `Engine` |
| `rotate(x, y, z)` | Rotates the widget in degrees along each axis. | `Engine` |
| `slice()` | Starts the slicing process and returns once complete. | `Promise<Engine>` |
| `prepare()` | Prepares the sliced toolpaths for export (e.g. G-code generation). | `Promise<Engine>` |
| `export()` | Exports the toolpaths as a string (e.g. G-code). | `Promise<string>` |
| Method | Description | Returns |
| --------------------------- | -------------------------------------------------------------------------------------------------------------- | ----------------- | ------- | ------- | -------- |
| `load(url)` | Loads an [STL](<https://en.wikipedia.org/wiki/STL_(file_format)>) file from a given URL and centers the model. | `Promise<Engine>` |
| `clear()` | Clears all objects from workspace. | `void` |
| `parse(data)` | Parses raw [STL](<https://en.wikipedia.org/wiki/STL_(file_format)>) data and loads it as a centered widget. | `Promise<Engine>` |
| `setListener(listener)` | Sets an event listener function to receive engine progress updates | `Engine` |
| `setRender(bool)` | Enables or disables rendering. | `Engine` |
| `setMode(mode)` | Sets the slicing mode where mode is "CAM" | "FDM" | "LASER" | "SLA" . | `Engine` |
| `setDevice(device)` | Merges a custom device profile into the current settings. | `Engine` |
| `setProcess(process)` | Merges custom slicing process parameters. | `Engine` |
| `setController(controller)` | Sets the slicing controller settings and starts/stops the worker pool accordingly. | `Engine` |
| `setTools(tools)` | Sets the tool definitions (e.g. cutters, extruders). | `Engine` |
| `setStock(stock)` | Sets the stock material dimensions. | `Engine` |
| `setOrigin(x, y, z)` | Defines the origin point for the part. | `Engine` |
| `moveTo(x, y, z)` | Moves the widget to the specified absolute coordinates. | `Engine` |
| `move(x, y, z)` | Moves the widget by the specified delta values. | `Engine` |
| `scale(x, y, z)` | Scales the widget along each axis. | `Engine` |
| `rotate(x, y, z)` | Rotates the widget in degrees along each axis. | `Engine` |
| `slice()` | Starts the slicing process and returns once complete. | `Promise<Engine>` |
| `prepare()` | Prepares the sliced toolpaths for export (e.g. G-code generation). | `Promise<Engine>` |
| `export()` | Exports the toolpaths as a string (e.g. G-code). | `Promise<string>` |
---

View file

@ -8,7 +8,7 @@ description: Frequently Asked Questions
Entirely.
The source code is on [GitHub](https://github.com/GridSpace/grid-apps) if you want to install and run it yourself. It is available under the [MIT](https://en.wikipedia.org/wiki/MIT\_License) license, which is one of the most liberal in terms of allowing you to do what you want with the code without restriction.
The source code is on [GitHub](https://github.com/GridSpace/grid-apps) if you want to install and run it yourself. It is available under the [MIT](https://en.wikipedia.org/wiki/MIT_License) license, which is one of the most liberal in terms of allowing you to do what you want with the code without restriction.
Multiple live [versions](https://grid.space/choose) (including current development branches) are served free of charge and free of ads on [Grid.Space](https://grid.space/kiri/).
@ -18,10 +18,10 @@ It has similar capabilities to other 3D printing slicers like Cura, Simplify3D,
It is very different in several important ways:
* There is no software to install or maintain. It's just a web page.
* As a web app, it runs in a security sandbox and cannot access data on your hard drive
* It offers several modes of operation for most of the common maker tools, like CNC mills
* It is updated quite frequently (several times a week) with bug fixes and new features
- There is no software to install or maintain. It's just a web page.
- As a web app, it runs in a security sandbox and cannot access data on your hard drive
- It offers several modes of operation for most of the common maker tools, like CNC mills
- It is updated quite frequently (several times a week) with bug fixes and new features
## What language is it written in?
@ -29,7 +29,7 @@ It is almost entirely Javascript. There are a few minor modules compiled into WA
## What file types are supported?
[STL](https://en.wikipedia.org/wiki/STL\_\(file\_format\)), [OBJ](https://en.wikipedia.org/wiki/Wavefront\_.obj\_file), and [3MF](https://github.com/3MFConsortium/spec\_core/blob/master/3MF%20Core%20Specification.md) files are supported for 3D part import. [SVG](https://en.wikipedia.org/wiki/Scalable\_Vector\_Graphics) files import and auto-convert into 3D models. [PNG](https://en.wikipedia.org/wiki/Portable\_Network\_Graphics) files are supported for 2D image to 3D model conversion.
[STL](<https://en.wikipedia.org/wiki/STL_(file_format)>), [OBJ](https://en.wikipedia.org/wiki/Wavefront_.obj_file), and [3MF](https://github.com/3MFConsortium/spec_core/blob/master/3MF%20Core%20Specification.md) files are supported for 3D part import. [SVG](https://en.wikipedia.org/wiki/Scalable_Vector_Graphics) files import and auto-convert into 3D models. [PNG](https://en.wikipedia.org/wiki/Portable_Network_Graphics) files are supported for 2D image to 3D model conversion.
## What if my printer isn't supported?
@ -47,4 +47,3 @@ Kiri comes from Kiri-e, which is the Japanese art of paper-cutting. Moto is shor
- `kmz` stands for **Kiri Moto Zip**, and contains an entire zipped workspace
- `km` stands for **Kiri Moto**, and contains [CAM tool](/CAM/tools) paramers.

View file

@ -19,7 +19,6 @@ description: Variable Substitutions and Expressions in GCode Macros
- \{print-time\} = alias for \{time\} ... deprecated after 2.8
- \{print_time\} = alias for \{time\} ... 2.9 and beyond
## FDM (3D Printing) Mode Only
### FDM Macros
@ -44,10 +43,12 @@ description: Variable Substitutions and Expressions in GCode Macros
- \{e\} = amount of filament extruded
### "Feature" only Macros (v3.4+)
- \{feature\} = feature region of the print (brims, infill, etc)
- \{minx|miny|maxx|maxy\} = position in mm of extents of the print area
### Logical Code Flow (IF / ELIF / ELSE / END)
```
;; IF { layer >= 10 && layer <= 20 }
;; ..... inside 10-20 layer={layer}
@ -59,6 +60,7 @@ description: Variable Substitutions and Expressions in GCode Macros
```
### PREAMBLE control (v3.4+)
Allows for intro comment and config list to be re-positioned after the header or disabled. This was introduced to allow GCode output to work with Ultimaker.
`;; PREAMBLE OFF`
@ -96,24 +98,25 @@ Set decimal precision (n = integer) (v3.8+)
`;; DECIMALS = n`
### Axis Scaling (v3.7+)
Allows for a factor to be applied to X,Y,Z coordinates. Useful for some machines like the Roland MDX-40A that uses an unusual coordinate space. Default axis scale is `1`
_`;; SCALE { "X":100, "Y":100, "Z":100 }`_
## CAM & FDM Modes
## CAM & FDM Modes
### Simple Algebraic Expression Support
### Simple Algebraic Expression Support
- Text inside `{}` is evaluated algebraically with access to JS classes and methods
- `{Math.min(layer/layers, 0.5) + 1}`
- `{token+n} {token-n}`
### Axis Remapping (v3.5+)
Allows for over-riding the default axis names. Useful for swapping axes and changing output for specific firmware targets. The format of the map is a JSON object._
Allows for over-riding the default axis names. Useful for swapping axes and changing output for specific firmware targets. The format of the map is a JSON object.\_
`;; AXISMAP {"X":"Y", "Y":"Z", "E":"E1"}`
## Laser Mode Only
### Laser Macros

View file

@ -12,11 +12,11 @@ Kiri:Moto is focused on privacy, performance, and ease-of-use.
Kiri:Moto has been in continuous development since 2013. It typically gets new development releases a few times a week and major releases every 4-8 weeks.
Please consider supporting this project with a [donation](https://paypal.me/gridspace3d?locale.x=en\_US).
Please consider supporting this project with a [donation](https://paypal.me/gridspace3d?locale.x=en_US).
## Privacy
Kiri:Moto is served free of ads, trackers, and any collection of personal data ([PII](https://en.wikipedia.org/wiki/Personal\_data)). Don't trust that? You can also install and run it yourself from [source](https://github.com/GridSpace/grid-apps).
Kiri:Moto is served free of ads, trackers, and any collection of personal data ([PII](https://en.wikipedia.org/wiki/Personal_data)). Don't trust that? You can also install and run it yourself from [source](https://github.com/GridSpace/grid-apps).
Because Kiri:Moto runs in a browser's security sandbox, it does not have access to the personal and private data on your local hard drive the way installed desktop software does.
@ -29,4 +29,3 @@ Kiri:Moto is a compact, fast-loading page free of bloat. This is achieved by min
## Ease of Use
Creating an interface that is usable for new to advanced users can be a challenge. Kiri:Moto takes a strong editorial stance on complexity. Much of the software in the maker universe is riddled with parameters and controls that are duplicative and work at cross-purposes.

View file

@ -10,7 +10,7 @@ The left menus control workspace, work mode, and objects while.
The right menus control the behavior and settings for slicing, path routing, and path to code exports.
[OBJ](https://www.cs.cmu.edu/\~mbz/personal/graphics/obj.html), [STL](https://en.wikipedia.org/wiki/STL\_\(file\_format\)), and [3MF](https://docs.fileformat.com/3d/3mf/) files import natively. [SVG](https://en.wikipedia.org/wiki/Scalable\_Vector\_Graphics), [JPG](https://en.wikipedia.org/wiki/JPEG\_File\_Interchange\_Format), and [PNG](https://en.wikipedia.org/wiki/Portable\_Network\_Graphics) are auto-extruded into a 3D parts.
[OBJ](https://www.cs.cmu.edu/~mbz/personal/graphics/obj.html), [STL](<https://en.wikipedia.org/wiki/STL_(file_format)>), and [3MF](https://docs.fileformat.com/3d/3mf/) files import natively. [SVG](https://en.wikipedia.org/wiki/Scalable_Vector_Graphics), [JPG](https://en.wikipedia.org/wiki/JPEG_File_Interchange_Format), and [PNG](https://en.wikipedia.org/wiki/Portable_Network_Graphics) are auto-extruded into a 3D parts.
![A minimalist approach](/img/kiri-moto.png)
@ -27,4 +27,3 @@ Application preferences are mode-dependent. For example, CNC preferences show an
![CNC Mode Preferences](/img/preferences-cam.png)
![FDM Mode Preferences](/img/preferences-fdm.png)

View file

@ -15,4 +15,3 @@ Replace all values with correct localized values and submit a [pull request](htt
If you have the time, please consider also localizing `web/kiri/lang/en-help.html`
Test your language by appending `?ln:XX` to your local URL where `XX` is the name of your language file _without_ the `.js` extension.

View file

@ -14,8 +14,6 @@ The `send` button will spool a print directly to OctoPrint where it will sit und
![](/img/gridsend.png)
## Local Sending
OctoPrint has a web api endpoint that can be configured on `Export` when enabled.

View file

@ -6,9 +6,9 @@ description: For Classrooms and Shared Workstations, Maintain Consistent Setups
[Kiri:Moto](https://grid.space/kiri/) stores all settings in our browser's local cache. There are times when you want to share settings between computers or setup a master config that is shared in classroom settings. In order to facilitate this, Kiri:Moto provides two hot keys and a URL short-cut for loading a default configuration at the time the application page loads.
* `U` key (uppercase) to get a unique settings key
* `u` key (lowercase) to restore a setting with a given key
* append `#key` to Kiri's URL to load the app with a given key
- `U` key (uppercase) to get a unique settings key
- `u` key (lowercase) to restore a setting with a given key
- append `#key` to Kiri's URL to load the app with a given key
Using the last method, you can create a master settings configuration then give our or link to Kiri with an url that looks like:

View file

@ -1,76 +1,64 @@
import React from 'react';
import { Carousel } from 'react-responsive-carousel';
import 'react-responsive-carousel/lib/styles/carousel.min.css';
import React from "react";
import { Carousel } from "react-responsive-carousel";
import "react-responsive-carousel/lib/styles/carousel.min.css";
const imageDescripts= {
outline:[
[ '/1.png', 'outline of a complex part'],
[ '/2.png', 'outline of a non-flat part with inside holes'],
[ '/3.png', 'outside-only outline'],
[ '/4.png', 'inside-only outline'],
const imageDescripts = {
outline: [
["/1.png", "outline of a complex part"],
["/2.png", "outline of a non-flat part with inside holes"],
["/3.png", "outside-only outline"],
["/4.png", "inside-only outline"],
],
level:[
[ '/1.png', 'level of a large part'],
[ '/2.png', `level of a square part's stock`],
[ '/3.png', `level of a part with a non-uniform top surface`],
level: [
["/1.png", "level of a large part"],
["/2.png", `level of a square part's stock`],
["/3.png", `level of a part with a non-uniform top surface`],
],
rough:[
[ '/1.png', 'rough cut of two parts'],
[ '/2.png', 'side-view of a rough cut'],
[ '/3.png', 'rough cut of a part with a complex top surface'],
[ '/4.gif', 'animate of complex rough cut'],
rough: [
["/1.png", "rough cut of two parts"],
["/2.png", "side-view of a rough cut"],
["/3.png", "rough cut of a part with a complex top surface"],
["/4.gif", "animate of complex rough cut"],
],
contour:[
[ '/1.png', 'close-up of a precise contour'],
[ '/2.png', 'contour of multiple parts at once'],
[ '/3.png', 'low precision contour'],
contour: [
["/1.png", "close-up of a precise contour"],
["/2.png", "contour of multiple parts at once"],
["/3.png", "low precision contour"],
],
register:[
[ '/1.png', '2-drill register'],
[ '/2.png', '3-drill register'],
[ '/3.png', 'jigsaw register'],
register: [
["/1.png", "2-drill register"],
["/2.png", "3-drill register"],
["/3.png", "jigsaw register"],
],
drill:[
[ '/1.png', 'drills for a robot baseplate'],
[ '/2.png', 'drills for a pegboard'],
[ '/3.png', 'selecting only matching-size holes'],
drill: [
["/1.png", "drills for a robot baseplate"],
["/2.png", "drills for a pegboard"],
["/3.png", "selecting only matching-size holes"],
],
trace:[
[ '/1.png', 'toolpath tracing a design into a part'],
[ '/2.png', 'selecting loops to trace'],
[ '/3.png', 'tracing edges for deburring'],
[ '/4.png', 'trace to clear a pocket'],
[ '/5.png', 'arbitrary offset outline'],
trace: [
["/1.png", "toolpath tracing a design into a part"],
["/2.png", "selecting loops to trace"],
["/3.png", "tracing edges for deburring"],
["/4.png", "trace to clear a pocket"],
["/5.png", "arbitrary offset outline"],
],
pocket:[
[ '/1.png', 'selecting areas to pocket'],
[ '/2.png', 'toolpath for pocket'],
[ '/3.gif', 'pocket animation'],
[ '/4.png', 'toolpath for v-bit carve'],
[ '/5.png', 'many-pocketed part'],
pocket: [
["/1.png", "selecting areas to pocket"],
["/2.png", "toolpath for pocket"],
["/3.gif", "pocket animation"],
["/4.png", "toolpath for v-bit carve"],
["/5.png", "many-pocketed part"],
],
gcode:[
[ '/1.png', 'the gcode editor popup'],
gcode: [["/1.png", "the gcode editor popup"]],
laserOn: [],
laserOff: [],
index: [],
lathe: [],
tabs: [
["/1.png", "tabs added to part"],
["/2.png", "sliced part with tabs"],
],
laserOn:[
],
laserOff:[
],
index:[
],
lathe:[
],
tabs:[
[ '/1.png', 'tabs added to part'],
[ '/2.png', 'sliced part with tabs'],
]
}
};
/**
* A carousel of images.
@ -78,17 +66,15 @@ const imageDescripts= {
* @param {keyof typeof imageDescripts} images - The key to an array of images and descriptions.
* @returns {ReactElement} - A carousel of the given images.
*/
export function ImageCarousel({base,images}) {
export function ImageCarousel({ base, images }) {
return (
<Carousel showThumbs={false} >
{imageDescripts[images].map(([image,caption], index) => (
<div>
<img src={base+image} alt="" />
<p className="caption">{caption}</p>
</div>
<Carousel showThumbs={false}>
{imageDescripts[images].map(([image, caption], index) => (
<div>
<img src={base + image} alt="" />
<p className="caption">{caption}</p>
</div>
))}
</Carousel>
);
}

View file

@ -1,9 +1,7 @@
.navbar{
height:5rem
.navbar {
height: 5rem;
}
.navbar .navbar__items{
height:4.5rem
.navbar .navbar__items {
height: 4.5rem;
}