Bootstrap
Sleek, intuitive, and powerful front-end framework for faster and easier web development.
Explore Bootstrap docs »
Report bug · Request feature · Themes · Blog
Bootstrap 5
Our default branch is for development of our Bootstrap 5 release. Head to the v4-dev
branch to view the readme, documentation, and source code for Bootstrap 4.
Table of contents
- Quick start
- Status
- What's included
- Bugs and feature requests
- Documentation
- Contributing
- Community
- Versioning
- Creators
- Thanks
- Copyright and license
Quick start
Several quick start options are available:
- Download the latest release
- Clone the repo:
git clone https://github.com/twbs/bootstrap.git
- Install with npm:
npm install bootstrap
- Install with yarn:
yarn add bootstrap
- Install with Composer:
composer require twbs/bootstrap:5.1.3
- Install with NuGet: CSS:
Install-Package bootstrap
Sass:Install-Package bootstrap.sass
Read the Getting started page for information on the framework contents, templates, examples, and more.
Status
What's included
Within the download you'll find the following directories and files, logically grouping common assets and providing both compiled and minified variations.
Download contents
bootstrap/
├── css/
│ ├── bootstrap-grid.css
│ ├── bootstrap-grid.css.map
│ ├── bootstrap-grid.min.css
│ ├── bootstrap-grid.min.css.map
│ ├── bootstrap-grid.rtl.css
│ ├── bootstrap-grid.rtl.css.map
│ ├── bootstrap-grid.rtl.min.css
│ ├── bootstrap-grid.rtl.min.css.map
│ ├── bootstrap-reboot.css
│ ├── bootstrap-reboot.css.map
│ ├── bootstrap-reboot.min.css
│ ├── bootstrap-reboot.min.css.map
│ ├── bootstrap-reboot.rtl.css
│ ├── bootstrap-reboot.rtl.css.map
│ ├── bootstrap-reboot.rtl.min.css
│ ├── bootstrap-reboot.rtl.min.css.map
│ ├── bootstrap-utilities.css
│ ├── bootstrap-utilities.css.map
│ ├── bootstrap-utilities.min.css
│ ├── bootstrap-utilities.min.css.map
│ ├── bootstrap-utilities.rtl.css
│ ├── bootstrap-utilities.rtl.css.map
│ ├── bootstrap-utilities.rtl.min.css
│ ├── bootstrap-utilities.rtl.min.css.map
│ ├── bootstrap.css
│ ├── bootstrap.css.map
│ ├── bootstrap.min.css
│ ├── bootstrap.min.css.map
│ ├── bootstrap.rtl.css
│ ├── bootstrap.rtl.css.map
│ ├── bootstrap.rtl.min.css
│ └── bootstrap.rtl.min.css.map
└── js/
├── bootstrap.bundle.js
├── bootstrap.bundle.js.map
├── bootstrap.bundle.min.js
├── bootstrap.bundle.min.js.map
├── bootstrap.esm.js
├── bootstrap.esm.js.map
├── bootstrap.esm.min.js
├── bootstrap.esm.min.js.map
├── bootstrap.js
├── bootstrap.js.map
├── bootstrap.min.js
└── bootstrap.min.js.map
We provide compiled CSS and JS (bootstrap.*
), as well as compiled and minified CSS and JS (bootstrap.min.*
). Source maps (bootstrap.*.map
) are available for use with certain browsers' developer tools. Bundled JS files (bootstrap.bundle.js
and minified bootstrap.bundle.min.js
) include Popper.
Bugs and feature requests
Have a bug or a feature request? Please first read the issue guidelines and search for existing and closed issues. If your problem or idea is not addressed yet, please open a new issue.
Documentation
Bootstrap's documentation, included in this repo in the root directory, is built with Hugo and publicly hosted on GitHub Pages at https://getbootstrap.com/. The docs may also be run locally.
Documentation search is powered by Algolia's DocSearch. Working on our search? Be sure to set debug: true
in site/assets/js/search.js
.
Running documentation locally
- Run
npm install
to install the Node.js dependencies, including Hugo (the site builder). - Run
npm run test
(or a specific npm script) to rebuild distributed CSS and JavaScript files, as well as our docs assets. - From the root
/bootstrap
directory, runnpm run docs-serve
in the command line. - Open
http://localhost:9001/
in your browser, and voilà.
Learn more about using Hugo by reading its documentation.
Documentation for previous releases
You can find all our previous releases docs on https://getbootstrap.com/docs/versions/.
Previous releases and their documentation are also available for download.
Contributing
Please read through our contributing guidelines. Included are directions for opening issues, coding standards, and notes on development.
Moreover, if your pull request contains JavaScript patches or features, you must include relevant unit tests. All HTML and CSS should conform to the Code Guide, maintained by Mark Otto.
Editor preferences are available in the editor config for easy use in common text editors. Read more and download plugins at https://editorconfig.org/.
Community
Get updates on Bootstrap's development and chat with the project maintainers and community members.
- Follow @getbootstrap on Twitter.
- Read and subscribe to The Official Bootstrap Blog.
- Join the official Slack room.
- Chat with fellow Bootstrappers in IRC. On the
irc.libera.chat
server, in the#bootstrap
channel. - Implementation help may be found at Stack Overflow (tagged
bootstrap-5
). - Developers should use the keyword
bootstrap
on packages which modify or add to the functionality of Bootstrap when distributing through npm or similar delivery mechanisms for maximum discoverability.
Versioning
For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under the Semantic Versioning guidelines. Sometimes we screw up, but we adhere to those rules whenever possible.
See the Releases section of our GitHub project for changelogs for each release version of Bootstrap. Release announcement posts on the official Bootstrap blog contain summaries of the most noteworthy changes made in each release.
Creators
Mark Otto
Jacob Thornton
Thanks
Thanks to BrowserStack for providing the infrastructure that allows us to test in real browsers!
Sponsors
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]
Backers
Thank you to all our backers!
Copyright and license
Code and documentation copyright 2011–2021 the Bootstrap Authors and Twitter, Inc. Code released under the MIT License. Docs released under Creative Commons.
WIP: Bootstrap 3
While our last major version bump (2.0) was a complete rewrite of the docs, CSS, and JavaScript, the move to 3.0 is equally ambitious, but for a different reason: Bootstrap 3 will be mobile-first. This is an ongoing document to identify the changes we'll be making along the way.
Docs and repo
We'll be working to simplify the content of the docs once again. Key changes are around the organization of the pages and the tools powering them.
Repository
dist
folder.css
andjs
, each containing a regular and minified version of Bootstrap's CSS and JavaScript.assets
folder.assets
are documentation assets or third party dependencies.make
commands withgrunt
commands (all the same functionality, just a different tool)General docs changes
{{_i}}
and{{/i}}
in the docs templates, just raw HTML in our Mustache files.Homepage
Getting started
Global JavaScript
Global CSS
At a high level, we're dropping IE7 and FF3.6 support, combining standard and responsive CSS into a single file, and consolidating additional code as appropriate.
Browser support
*
hacks, such as*zoom: 1;
, and other IE7-specific lines of CSS.-moz-box-shadow
instances and related hacks.LESS changes
@body-bg
instead of@bodyBackground
.@navbar-link-color-hover
.@blue
,@orange
, and the like, which we weren't using them much anyway.@brand-primary
,@brand-success
, and others. These are then assigned on a per-component basis (e.g.,@state-warning-text
,@btn-background-primary
, etc).@black
and@white
because#000
and#fff
are 20% shorter and not something that should be controlled via variable..border-radius()
and.border-*-*-radius
mixins..border-left-radius
, are still available..opacity()
mixin instead of whole numbers to match default CSS patterns..opacity(.5)
instead of.opacity(50)
..img-retina()
.@component-active-bg
variable.@link-color
to multiple variables for backgrounds, we have dedicated a new variable to that.@component-active-bg
and customize the active states of nav pills, dropdowns, and more.@start-color
,@start-percent
,@end-color
, and@end-percent
.#gradient > .vertical(@start-color: red; @end-color: blue);
. Doing so will include the default values for any unmentioned variables.Miscellaneous
bootstrap.css
file near. Separate files are no longer required, and have thus been removed..container
styles togrid.less
.!important
to.hide
and.show
.!important
flag. We opted for the latter for fewer lines of code.*-important
for.*-danger
.*-danger
.Grid system
The grid is drastically simpler, yet more powerful, in BS3. We're transitions back to a single grid system, but with all the awesomeness that was present in the old grids. On top of that, we've also added some new features.
.row
) utilizes percentages over pixels,padding
instead ofmargin
, andbox-sizing: border-box
for easy math..span*
and.offset*
, we're now using.col-*
and.col-offset-*
, respectively..col-*
classes for tiny devices (smartphones)..col-sm-*
classes for small devices (tablets).@grid-row-width
and@grid-column-width
variables have been removed. We didn't use the row width (@gridRowWidth
as of v2.3.1) variable anywhere in the source and column widths are now derived via simple calculations in our LESS.@grid-float-breakpoint
variable to customize the point at which the floats and widths kick in for our new mobile-first grid..makeRow()
to.make-row()
..makeColumn()
to.make-column()
. In addition, it includes a media query to apply thefloat
andwidth
when above the@grid-float-breakpoint
value..make-column-offset()
to generate column gaps, similar to the predefined grid classes..col-push-*
and.col-pull-*
modifier classes for easy column source ordering..col-*
classes when used within.table
elements.width: 100%;
to start.max-width
instead ofwidth
on all.container
instances to help prevent some issues with containers in components like navbars.Type
Typography in Bootstrap 3 isn't seeing much change, just a decent amount of cleanup and some small improvements.
Headings
h1, .h1 { … }
).text-rendering: optimizeLegibility
from headings to prevent (inconsistent) broken rendering on some Android and Windows devices.Lists
ul.unstyled
to.list-unstyled
.ul.inline
to.list-inline
..list-unstyled
as a mixin to reset default list styles.Text classes
.muted
to.text-muted
to match the other contextual text colors.LESS
#font
mixins.@font-family-
variables.@altFontFamily
variable.We explored the use of rem units over pixels, but found little benefit to offset the implications of their use. IE8 would still need a pixel fallback, and that's a lot of duplicate lines of code. Moreover, using rems everywhere instead of pixels would exacerbate that problem. Mixing rems and pixels doesn't seem to make sense either right now. However, we can and will continue to evaluate this in future releases.
Tables
table.info
from table state classes.text-align: left;
for<th>
elements (to undo the default center alignment) and removedfont-weight: bold;
from them (bold is a browser default).>
selector, we scope all styles.Images
.img-polaroid
as it duplicated the same styles as.thumbnail
. Now you can use.img-thumbnail
for regular inline(-block) images, or.thumbnail
for composite components.Buttons
Fewer, but better buttons. They're redesigned and we're removing some from the mix because they have no clear and universal semantic purpose.
.btn-default
class.class="btn btn-default"
..btn
class as well, but given the CSS for creating button groups and dropdowns, it's much simpler to keep it around..btn-inverse
..buttonBackground()
mixin since it was no longer in use..btn-pseudo-states()
mixin for setting buttonbackground-color
andborder-color
for the default and:hover
,:focus
,:active
, and variousdisabled
states.<a href="#" class="btn">Button</a>
, and is not compatible with the<button>
element due to some browser lame-itude that keeps buttons from accepting auto widths ontable-cell
buttons.Tables
.active
contextual class.background-color
to any row or cell that gets the.active
class.<thead>
and<tfoot>
cells.Forms
Form controls are now 100% width by default, input groups have been overhauled, and form states simplified.
box-sizing: border-box;
andwidth: 100%;
by default for all textual inputs.input-prepend
andinput-append
for singular.input-group
. The classes have changed for the elements within, and require a bit more markup to use buttons..input-group
as the parent class around the input and addon..input-group-addon
instead of.addon
..input-group-btn
and place your.btn
within that element..form-search
.fieldset[disabled]
. All form controls within a<fieldset>
with thedisabled
attribute will be styled appropriately.cursor: pointer;
from labels and instead only set them on checkbox and radio label options..controls-row
for grid inputs.width: 100%
by default, and since we don't want to implement a separate input grid, we've opted to drop the.controls-row
functionality..row
and individual.span*
columns around each input..input-block-level
mixin and class.width: 100%;
, this is redundant.display: inline-block
, so if you absolutely need them to be block level, you'll need to independently set that yourself..uneditable-input
control. Instead, use a read-only input if you must..inline-help
option.<div>
.label.checkbox
, you'll needdiv.checkbox
with a<label>
within..radio.inline
, you now need a single class,.radio-inline
, for direct use on a<label>
element.<div>
, but the default stacked ones do..placeholder()
mixin for Firefox 19+..help-inline
..help-block
remains.Icons
[class^="glyphicon-"]
, we now require a base class,.glyphicon
..glyphicon-
instead of.icon-
for a more unique class and consistency with the newly required base class.Responsive utilities
Button groups
<input>
s in their markup.Labels and badges
We have differentiated the labels and badges with v3. The gist is that badges no longer have modifier classes and are purely meant as unread counters.
.label-inverse
variation (in conjunction with the inverse button being removed).font-size
.Jumbotron (formly hero unit)
.hero-unit
to.jumbotron
. Associated variables have also been updated to match.font-weight
for headings. Uses semibold instead of bold for headings.font-size
in responsive views.Breadcrumbs
/
from the last item.Navigation
Navs
.nav-list
option. Replaced by the new.list-group
component.<div>
in the pagination component and dropped center and right alignment options. See #6562 for context.Navbars
.navbar-search
. We dropped the.navbar-search
form layout, so it doesn't make sense to have this anymore. Also, this is just a slightly fancier.navbar-form
, which we plan on keeping..navbar-inner
and moved relevant styles to.navbar
. The inner div is no longer required, greatly simplifying our shit..navbar > .nav
to.navbar-nav
..btn-navbar
to.navbar-toggle
..brand
to.navbar-brand
for a more consistent naming schema..navbar-brand
in mobile views, with amax-width: 200px;
to limit hit area given a likely navbar toggle will be very near by.@navbar-link-color-disabled
and@navbar-link-bg-disabled
, along with the inverse options.Dropdowns
.nav-header
and replaced with.dropdown-header
on account of no more.nav-list
and that dropdowns still benefit from section headings.Progress bars
.progress
on the outer<div>
and.progress-bar
on the inner<div>
..progress-bar-info
) in addition to the required.progress-bar
class.Modals
.hide
. We updated the utility classes to use!important
and to avoid clashing, removed the.hide
class from modals. Nowdisplay: none;
is set directly in the modals.less file. When upgrading, be sure to remove the.hide
class from existing modals..modal-open
on the body (so we can nuke the scroll there).modal-dialog
and.modal-content
) so we can scroll the entire modal rather than overflow a section within the modal..modal
is now the wrapper, and.modal-content
is the modal itself. This is so we can still useposition: fixed;
, but make the modal relatively positioned so that scrolling moves the entire modal, not something with it..modal-title
for more consistent and useful targeting of the heading content (previously this was just an<h3>
and selector performance wise that sucked).<body>
scrollbar and shifting content withoverflow: hidden;
.Thumbnails
.thumbnails
meta component. Instead of special HTML and CSS for grid sizing, just use the grid system itself. Individual.thumbnail
styles are still available, but for sizing, require a parent with a setwidth
(e.g., grid columns).Alerts
<hr>
elements within any.alert
component will now be styled to match the border color of the alert.New: List groups
Added a new component, the list group, for creating simple and complex series of components. Perfect for more complex implementations like email inboxes, or simple ones like a list of options.
.list-group
as a parent base class (on a<ul>
,<ol>
, or<div>
).list-group-item
for individual list items<ul class="list-group">
and<li class="list-group-item">
to<div class="list-group">
and<a class="list-group-item">
..list-group-item-heading
and.list-group-item-text
for custom content implementations.Linked list groups replace the nav list component.
List groups can also be used within panels with the
.list-group-flush
class to take them the full width of the parent panel.New: Panels
Added a new component, the panel, for easily containing content within a box with an optional heading. Also included are contextual state classes for success, warning, danger, and info.
Tooltips
Carousel
.carousel-control
class now requires another element within it for the previous/next characters. Those characters are now Glyhpicons icons for improved styling and positioning across browsers and devices.Customizer
bootstrap-dropdown.js clearMenus() needs ; at the end
bootstrap-dropdown.js when minified with JSMin::minify produces error in Firefox error console saying clearMenus()needs ;
on line:
if in source code this is corrected -- no error in minified version
Migrate to MIT License
I'm wanting to include Bootstrap in a Drupal distribution that I'm working on. Because I'm using the Drupal.org packaging system, I cannot include Bootstrap because the APLv2 is not compatible with GPLv2 (which is what all code on Drupal.org must be licensed as, per our license policy: http://drupal.org/licensing/faq#q4)
I was wondering if you'd be willing to either release Bootstrap under another license (in parallel to the Apache license) that would be compatible with our packaging system, or license Bootstrap specifically to Drupal.org contributors under a compatible license.
Button dropdown links don't work on mobile (android, iOS)
I have simple dropdown buttons we built with 2.04
links are A tags, proper quotes, href='#'
Used to work fine.
Upgraded today to 2.1 and the links in any dropdown button don't work. The dropdown menu opens, but clicking on a link closes the menu without any action. tested on Android 2.3 and iOS 5
Rolledback to 2.04 and everything works again. Anyone else has this issue?
Icons as font instead of img
Hi
Any reason you opted to include image based icons in bootstrap which are limited to the 16px dimensions?
For example http://somerandomdude.com/work/iconic/ is available as open source fonts - means you can include icons in headers, buttons of various size etc since its vector based.
Could easily be implemented with the same approach as the current icons:
i.foobar:before { content: "X" }
Expand the Sizing Utility to allow for responsive breakpoints like "w-xl-50" (css, feature, v4)
Currently, the Sizing utility (https://getbootstrap.com/docs/4.1/utilities/sizing/) only allows for the sizing of the height or width of an element without regard to the viewport size.
So for instance the "w-50" class makes a lot of sense on a large device in order to limit the width of, for instance, a help text, but not so much on a small device.
This could be resolved by adding breakpoints to the utility in the same way as it is done for the Spacing utility:
This enhancement would not change existing usage, but would allow more flexibility for various device sizes.
Summary: Add support for the following classes:
w-sm-100, w-sm-75, w-sm-50 and w-sm-25 w-md-100, w-md-75, w-md-50 and w-md-25 w-lg-100, w-lg-75, w-lg-50 and w-lg-25 w-xl-100, w-xl-75, w-xl-50 and w-xl-25 h-sm-100, h-sm-75, h-sm-50 and h-sm-25 h-md-100, h-md-75, h-md-50 and h-md-25 h-lg-100, h-lg-75, h-lg-50 and h-lg-25 h-xl-100, h-xl-75, h-xl-50 and h-xl-25
Grid breakpoint for 480px
The smallest grid column supported at the moment is .col-xs- (<768px), which seems like a big range.
Would it be advisable to have: .col-xs- (>480px and <768px) .col-tn- (<480px)
Reason being it still seems reasonable to have a 2 column grid on 768px (240px - 384px per column), while 480px have a stacked column.
Using the current .col-xs- (<768px) option, putting one stacked column on 768px seems too wide on some cases, and 2 columns on 480px seems ridiculous at times.
Open modal is shifting body content to the left
When launching the modal component (http://getbootstrap.com/javascript/#modals) the entire content will slightly move to the left on mac OS (haven't tried it on windows yet). With the active modal the scrollbar seem to disappear, while the content width still changes.
You can observer the problem on the bootstrap page
Add remote sources support for typeahead
Hi Mark,
the new typeahead component is awesome. But I often have to implement an autocomplete that is fetching data from a remote source. Would it be possible to add a callback, that I can use to query the remote server and return a set of items that match the entered query?
The jQuery UI autocompleter offers returning an array of objects. This is very helpful, as you would often like to display a human friendly title to the user and set an ugly ID in the background as the field's value.
I know, this increases the complexity of the typeahead component, but makes it on the other side very useful.
Thanks Marc
Open modal is shifting fixed navbar to the right
re: https://github.com/twbs/bootstrap/issues/9855 in 3.2.0, when body has a scrollbar, it's content now stays in place when modal is opened (padding is added to the body). But fixed top navbar, having position: fixed, left: 0 and right: 0, now jumps to the right when modal is opened, as it ignores padding-right on the body.
Middle Mouse Button Not Working in Firefox
Issue: middle mouse click on a link in Firefox, nothing happens. Expected behavior: middle mouse click on a link, open in new browser tab. Live example: http://twitter.github.com/bootstrap/
Tested on Win7/Firefox19 Safemode/Non-Safemode failed. IE9/Chrome25 ok. Notice it when I upgrade to bootstrap v2.3.1. Switch back to v2.3 and the middle button works again.
Split CSS to @media-related files to improve performance significantly
Prerequisites
Proposal
When CSS is bundled into one file, even after tree-shaking, it still contains a lot of unused CSS because of different
@media
contexts (mobile, tablet, desktop, dark/light/other themes, etc.).It’s bad for Core Web Vitals: First Input Delay (FID), Largest Contentful Paint (LCP), Cumulative Layout Shift (CLS), as well as other vital performance and usability metrics: First Contentful Paint (FCP), Total Blocking Time (TBT), Time to Interactive (TTI), and DOMContentLoaded event.
There is a way to improve CSS loading and rendering significantly by separating CSS into different files, where every file contains only code needed in that context.
This can be achieved by separating the CSS into different files:
Then, include CSS files like this:
With this approach, modern browsers prioritize CSS loading for the current
@media
conditions, so page rendering starts much faster because users don’t need to wait for the loading of the unused part of the CSS. In cases where you have all the CSS bundled in one file and don’t specify conditions in media attributes of link tags, the browser waits for the entire set of CSS to load before starting page rendering. Which slows down page rendering drastically.Breakpoints in this example are based on Bootstrap 5. This approach will become even more important for Bootstrap soon given that Bootstrap will add support of light/dark/other themes.
Source: https://nednex.com/en/split-your-css-to-media-related-files-to-improve-performance-significantly/
Further reading about this improvement:
Motivation and context
Significant performance improvements, especially noticeable on slow connections and mobile devices.
Docs: missing deprecated callout for `list-group-item-variant()` mixin
Description
This PR suggests to add a deprecate callout in the List group > Sass mixins section for consistency with what's done in Alerts > Sass mixins section.
Indeed
alert-variant()
deprecated mixin got this callout and it's missing forlist-group-item-variant()
deprecated mixin.Type of changes
Checklist
Live previews
Progress bar text doesnt handle the 0% case
Prerequisites
Describe the issue
If you create a progress bar where the progress is not very far (ie 0%) the inner descriptive text will not be displayed.
This has come up before. Most recently(?) it was https://github.com/twbs/bootstrap/issues/24538 (fixed for 4.0 release).
As shown below with the test cases the issue where text will not display appears to have been introduced via 4.4.0.
Reduced test cases
This issue can be seen in (uses bootstrap 5.2.3) https://jsfiddle.net/apw74tx9/2/
I did some looking at older versions of bootstrap and this appears to have been working in 4.3.1 https://jsfiddle.net/3c6uL5hj/
But not the 4.4.0 release https://jsfiddle.net/6pfuokv7/1/
What operating system(s) are you seeing the problem on?
macOS
What browser(s) are you seeing the problem on?
Chrome
What version of Bootstrap are you using?
5.2.3
Grid System should support CSS Container Queries for responsive column sizing
Prerequisites
Proposal
CSS Container Queries are becoming widely supported.
Proposal:
_breakpoints.scss
should be extended to be configurable to use container queries, perhaps defaulting to the body or falling back to media queries where appropriate for backwards compatibility.Motivation and context
I have pages that can be displayed in either modal or full-page and currently there isn't a good way to wire up this sort of functionality.
Layouts with collapsible side navigation or modal dialogs would benefit from Container Queries instead of using normal Media Queries for responsive widths.
Dropdowns not working even after being initialized
Prerequisites
Describe the issue
I initialized the dropdowns (using the
.dropdown-toggle
selector), based on the example in the docs, yet it does not work when I click on it. There are no errors or anything.Reduced test cases
JS:
HTML:
What operating system(s) are you seeing the problem on?
Windows, Linux
What browser(s) are you seeing the problem on?
Chrome, Firefox
What version of Bootstrap are you using?
v5.2.3
There is an unecessary `list-type` on the `.carousel-indicators` element
Right here: https://github.com/twbs/bootstrap/blob/9e17b2b34cdec9dce063bba09b01aa9a63e7dd94/scss/_carousel.scss#L168
I think it could be removed as in the documentation Bootstrap is using a
div
element, not anul
.If you think it's worth the shot, I could make a PR about it.
Should I make it?
One of my 2023 goal is to be more involved in Bootstrap, so it could be a good very first exercice for me!
✌️