diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/11ty-bundle.js b/11ty-bundle.js new file mode 100644 index 000000000..c1c839c19 --- /dev/null +++ b/11ty-bundle.js @@ -0,0 +1,11 @@ + + +function copyAnchorLink() { + if (navigator.clipboard) + navigator.clipboard.writeText(window.location.href.replace(window.location.hash, "")); + else + console.log("Clipboard API not supported"); +} + +const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]') +const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl)) diff --git a/404.html b/404.html new file mode 100644 index 000000000..c867b7957 --- /dev/null +++ b/404.html @@ -0,0 +1,449 @@ + + + + + + + + + + + Page not found | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ +
+

Page not found

+ +
+
+

Strange, we are unable to find the page you have requested.

+ +

+ It might have been removed, lost or never existed. You could try and find it using + search +

+ +

+ Otherwise ask on our + forums +

+
+
+ +
+ +
+ +
+ + + + + + + + + + + + + diff --git a/CNAME b/CNAME new file mode 100644 index 000000000..af72874c0 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +haxeflixel.com diff --git a/blog/00-haxeflixel-has-a-blog/index.html b/blog/00-haxeflixel-has-a-blog/index.html new file mode 100644 index 000000000..a4d400ed6 --- /dev/null +++ b/blog/00-haxeflixel-has-a-blog/index.html @@ -0,0 +1,458 @@ + + + + + + + + + + + HaxeFlixel now has a blog! | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
+
+

+ HaxeFlixel now has a blog! + +

+ +
+ +

The HaxeFlixel project and it's active community of game dev enthusiasts, have opened this +blog up to post about the latest updates, news and anything awesome happening related to +making games with HaxeFlixel and the projects around it.

+

Although most of the HaxeFlixel activity happens on Github, Slack chat (ask for an invite) +and the @haxeflixel twitter and our google groups, this is resource can help keep users +up to date on the most important updates and changes to the codebase and community.

+

Like everything HaxeFlixel, this blog is open for contributions from github by editing the +markdown files, just like our documentation.

+

Feel free to fork and improve these blog posts and the website itself.

+

So if you have ideas or requests shoot them at us ;)

+ + +
+
+
+ + +
+ +
+ + + + + + + + + + + + + diff --git a/blog/01-HaxeFlixel-rendering/index.html b/blog/01-HaxeFlixel-rendering/index.html new file mode 100644 index 000000000..4b5f48efe --- /dev/null +++ b/blog/01-HaxeFlixel-rendering/index.html @@ -0,0 +1,554 @@ + + + + + + + + + + + Tilesheet rendering | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
+
+

+ Tilesheet rendering + +

+ +
+ +

Hi, gamedevsam here, I'm a developer and evangelist of HaxeFlixel.

+

The following blog post was written by Beeblerox (the original creator of HaxeFlixel) and was originally posted on his blog as a two part article (part 1 and part 2). In it, he goes into detail on how HaxeFlixel's rendering system is built on top of OpenFL's Tilesheet API.

+
+

I want to tell you about tilesheet rendering in flixel, which is used on native targets by default (since some of you might me intereseted in it).

+

But let’s start from Tilesheet API and how you work with it (Feel free to skip this part if you know it already).

+

Tilesheet class allows you to draw multiple regions of image in one drawcall reasonably fast. These regions can be transformed (rotated, scaled, skewed) and tinted, plus they can have several blend modes (the most usefull is addition mode, which can be used for effects like fire and smoke).

+

Let’s assume that you have some image you want to draw - “assets/tiles.png”.

+

We are starting from instantiation of Tilesheet object:

+
tilesheet = new Tilesheet(Assets.getBitmap(“assets/tiles.png”));
+
+

Then we should define region of image (or tile) we want to draw. This is achieved with addTileRect() method, which takes 2 arguments:

+ +

Center point argument is optional, and if you omit it then tile will be rotated around it’s middle point.

+
// adding tiles to the tilesheet
+tileID1 = tilesheet.addTileRect(newRectangle(0, 0, 32, 32), new Point(16, 16));
+tileID2 = tilesheet.addTileRect(newRectangle(32, 0, 32, 32), new Point(16, 16));
+
+

Then we should have some Graphics object to draw our tiles on.

+
sprite = new Sprite();
+Lib.current.stage.addChild(sprite);
+graphicsToUse = sprite.graphics;
+
+

To draw the tiles on screen we need three things:

+
    +
  1. +

    Graphics to draw then on

    +
  2. +
  3. +

    Draw flag which tells to the program what tile transformations we want to use on our tiles in this drawcall.

    +
  4. +
+

The simplest case is no transformation (we just draw rectangular region of image on specified position):

+
drawFlag = 0;
+
+

You can add tinting:

+
drawFlag |= Tilesheet.TILE_RGB;
+
+

We can add TILE_ALPHA flag to be able to change tile’s alpha:

+
drawFlag |= Tilesheet.TILE_ALPHA;
+
+

There are also TILE_ROTATION and TILE_SCALE (for uniform tile scaling) constants for “simple” transformations of a tile. But if you want to achieve some more complex transformation (like non-uniform scaling or skewing) then you have TILE_TRANS_2x2 constant.

+

And finally there are TILE_BLEND_ADD constant for addition blending and TILE_SMOOTH for smoothing scaled up graphics.

+
    +
  1. We also need actual information about tile’s type, position and transformation. The second argument of drawTiles() method - data array - is responsible for it.
  2. +
+

The amount of data for each tile depends on drawFlags value:

+ +
data = [x1, y1, tileID1, x2, y2, tileID2];
+
+ +
data = [x1, y1, tileID1, scale1, angle1, x2, y1, tileID2, scale2, angle2];
+
+ +
data = [x1, y1, tileID1, scale1, angle1, red1, green1, blue1, alpha1,  x2, y1, tileID2, scale2, angle2, red2, green2, blue2, alpha2];
+
+

where red, green, blue and alpha are values between 0 and 1 (result color of each pixel will be product of these coefficients and original pixel colors).

+ +
data = [x, y, tileID1, a, b, c, d, red, green, blue, alpha];
+
+

where (a, b, c, d) are the transfromation matrix coefficients. You can get their values in two ways:

+

a) by using Matrix class. For example, if you want to have non-uniform scale and rotation for your tile, then you can get it this way:

+
matrix.identity();
+matrix.scale(scaleX, scaleY);
+matrix.rotate(angle);
+data = [x, y, tileID1, matrix.a, matrix.b, matrix.c, matrix.d, red, green, blue, alpha];
+
+

b) or manually if you want to make some optimizations. That’s why drawing methods in flixels are so bloated - i just wanted to except some redundant calculations from it.

+

So finally you can draw your tiles on the screen:

+
tilesheet.drawTiles(graphicsToUse, data, false, drawFlags);
+
+
+

If you want to see some working example, then i recommend you to look at Tiles sample project in nme library: https://github.com/haxenme/nme/tree/master/samples/20-Tiles

+
+

Now when we know everything we need about Tilesheet class, it’s time to talk about flixel renderer a bit.

+

As you remember we need Graphics object to render our tiles. FlxCamera objects contain flashSprite:Sprite variable inside which we have canvas:Sprite which graphics we use for rendering on the camera. We need canvas spite to be nested inside flashSprite for easy camera rotations. So if you don’t plan to implement such feature then you might use just one sprite without nesting.

+

We also need data to render and render flags, which reflect what types of transformations (like rotation and tinting) apply to rendered tiles. This information is gathered every render cycle: we iterate through each sprite we have in our game. But to keep drawCalls as low as possible we need some sort of batching, which tries to draw everything with the same graphics in one draw call, and when we change graphics it breaks the batch and starts another. This functionality is split between FlxCamera. FlxSprite class and subclasses and DrawStackItem helper class.

+

DrawStackItem objects store information about current batch: Tilesheet object to use for rendering, draw data array, information about draw flags (do we need to tint our tiles in the batch, or use blending), and the link to next DrawStackItem object (DrawStackItems are organized into linked list). Each camera have _headOfDrawStack variable which is head of DrawStackItems linked list.

+

FlxSprite draw() method does the following:

+ +

After we iterate through all sprites in our game state, game engine start actual render process.

+

It iterate through each camera, clear graphics of cameras, fill them with background color (with graphics.drawRect() method), and then each camera iterate through its list of DrawStackItems. This iteration stage takes DrawStackItem’s tilesheet, draw data, draw flag and render it with drawTiles() method on camera’s canvas.graphics.

+

That is how tilesheet rendering works in flixel. Feel free to ask me questions about it.

+
+

You can reach Beeblerox on Twitter @teormech.

+ + +
+
+
+ + +
+ +
+ + + + + + + + + + + + + diff --git a/blog/02-HaxeFlixel-patreon/index.html b/blog/02-HaxeFlixel-patreon/index.html new file mode 100644 index 000000000..3d70a0b27 --- /dev/null +++ b/blog/02-HaxeFlixel-patreon/index.html @@ -0,0 +1,466 @@ + + + + + + + + + + + HaxeFlixel Patreon | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
+
+

+ HaxeFlixel Patreon + +

+ +
+ +

Hello HaxeFlixel enthusiast, gamedevsam here!

+

I have some big news to share with the HaxeFlixel community: HaxeFlixel is now on Patreon.

+

Patreon is a crowd-funding platform that collects monthly donations to support artists and projects that people love. HaxeFlixel has joined Patreon to collect funds in order to reward contributions to the project, and give back to other open source projects that we think are awesome and deserve our support.

+

Asking the community to give us money wasn't an easy decision. HaxeFlixel is a free, open source project, and every single one of our developers loves working on the engine, no one expects to get paid. We don't want our users to think we might some day charge for features or platforms. Every aspect of HaxeFlixel is free, and will always be free, that's the nature of open source projects.

+

The main reason we are now accepting donations is because some members of our community asked us if they could give us money instead of contributing code to the engine (maybe because they've had success with the engine and want to give back, or maybe they don't have time to contribute code). For some time I was worried that dealing with money could lead to tensions within the community, but after thinking long and hard about it, I realized that this could be an opportunity to attract new talent to the project, an opportunity to help other open source projects that are also seeking funding, and an opportunity to reward long term members of this community that made all of this possible in the first place.

+

Dealing with distribution of the funds will likely involve some trial and error. Most well funded open source projects rely on a company that charges for support. We don't have that luxury, so I had to come up with a fair way to distribute the funds.

+

Here's how the money will be distributed:

+ +

The first two points are pretty straight forward. Since I live in the US, I have to pay taxes on any money I receive in exchange for a service (in my case 25%). Another 25% will be sent to Chris (impaler) to cover the expense he incurs from hosting HaxeFlixel.com website. This might seem high to some of you, but keep in mind Chris has been hosting the website out of his own pocket for the last 2 years. This percentage might change with time (depending on how much money is raised, or if Chris wishes to receive a lesser amount).

+

The final point is a bit vague, and that is on purpose. Instead of me deciding what to do with all the money, I'd like the community to have the power to decide who should get money and for what reason. If you think HaxeFlixel should reward someone monetarily for a contribution he/she made to the project, or if you know of a great open source project that could use our funding, send me an email with the subject line HaxeFlixel Funding Request, and include a description or a link to a web page that explains why this person or project deserves funding. If you think a person deserves funding for a contribution he/she made, don't forget to include their contact, or PayPal information in your request.

+

At this point I'm the one responsible for making decisions how the money will be spent, and I will have the final say on whether to distribute the funds (and how much). Obviously if the person making the request is a long time supporter of the project, their request will be more likely to be fulfilled.

+

As a final note, anyone within the owners team has access to the Patreon account, so if I don't do this properly, or something happens to me, someone else can easily take over this role.

+

If you have any questions or concerns please get in touch with me via my website's contact form.

+

Thanks for using HaxeFlixel, and please consider supporting the project on Patreon!

+ + +
+
+
+ + +
+ +
+ + + + + + + + + + + + + diff --git a/blog/03-HaxeFlixel-4-0-0/index.html b/blog/03-HaxeFlixel-4-0-0/index.html new file mode 100644 index 000000000..8198aee71 --- /dev/null +++ b/blog/03-HaxeFlixel-4-0-0/index.html @@ -0,0 +1,468 @@ + + + + + + + + + + + HaxeFlixel 4.0.0 | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
+
+

+ HaxeFlixel 4.0.0 + +

+ +
+ +

We are proud to announce the release of HaxeFlixel 4.0.0! This is without a doubt the biggest release yet, with nearly 2000 new commits on the core repository alone since the last release.

+

The highlights of this release are:

+ +

For a more in-depth breakdown of the changes, have a look at our changelog. If you are mostly interested in the breaking changes to upgrade a project using HaxeFlixel 3.3.x, please refer to the upgrade guide.

+

We would like to thank all contributors who helped with this release in any way, as well as our Patreon supporters. Check out the Financial Summary 06/15 - 02/16 blog post on Patreon if you're wondering what we do with your donations.

+

Going forward, there are two things we want to focus on:

+ +

The HaxeFlixel team

+ + +
+
+
+ + +
+ +
+ + + + + + + + + + + + + diff --git a/blog/04-HaxeFlixel-4-1-0/index.html b/blog/04-HaxeFlixel-4-1-0/index.html new file mode 100644 index 000000000..077536cb8 --- /dev/null +++ b/blog/04-HaxeFlixel-4-1-0/index.html @@ -0,0 +1,460 @@ + + + + + + + + + + + HaxeFlixel 4.1.0 | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
+
+

+ HaxeFlixel 4.1.0 + +

+ +
+ +

HaxeFlixel 4.1.0 has just been released to Haxelib (as well as new versions of flixel-addons, ui and demos)! The full changelog contains a long list of minor improvements and bugfixes.

+

Unlike previous minor releases, this release is intended to be used as a drop-in-replacement - there are no significant breaking changes. If you do encounter any issues, please let us know.

+

The most exciting addition is probably the ability use GLSL shaders on single sprites and tilemaps (only supported with OpenFL Next and on native targets however). You can test this feature by compiling the FlxBunnyMark demo to Cpp or Neko with -Dnext:

+

+

Why Flixel is currently incompatible with OpenFL 4

+

New major versions of OpenFL and Lime have been released yesterday. Installing Flixel 4.1.0 will also install OpenFL 3.6.1 and Lime 2.9.1 because we have locked it to these versions (although older versions still work).

+

This was necessary because this major release of OpenFL includes breaking changes that make it non-trivial for Flixel to support:

+ +

Flixel will definitely be compatible with OpenFL 4 in the future, but this will take some time.

+ + +
+
+
+ + +
+ +
+ + + + + + + + + + + + + diff --git a/blog/05-fundraiser/index.html b/blog/05-fundraiser/index.html new file mode 100644 index 000000000..bf810c57f --- /dev/null +++ b/blog/05-fundraiser/index.html @@ -0,0 +1,1704 @@ + + + + + + + + + + + Fundraiser 2016 | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+

Fundraiser 2016

+ +
+
+
+
+
+ + +

Campaign success

+

+ The Indiegogo campaign of 2016 was a huge + success! +

+
+
+ +
+
+

HaxeFlixel is developed by and is now furtherly funded by, a community of +people who have a geniune passion for the project.

+

We thank everyone for their contributions over the past 5 years, +whether it has been spreading the word, fundraising, admin, testing, +reviewing & submitting code or teaching and supporting others. +All this keeps inspiring the community to continue HaxeFlixel to help +make cross platform games easier and free!

+

Also, none of this fundraiser would have even started without the dedicated effort from +Lars Doucet of Level Up Labs +leading this entire campaign, so a big thanks to Lars!

+

With the larger donations made in the campaign, it has also made it possible for HaxeFlixel to have +official sponsors! After we gather all the logos for the page, we will add a dedicated sponsors page.

+

Read more about the campaign on +our Indiegogo page.

+ +
+
+
+ +

We thank all our Indiegogo backers:

+
  • +

    Blue Bottle Games, LLC

    + + $1000 +
  • +

    Solar Powered Games , e.K.

    + + $500 +
  • +

    Gian Prescilla

    + + $500 +
  • +

    Etienne Bégué

    + + $250 +
  • +

    David Capello

    + + $250 +
  • +

    Ludoko Studios

    + + $250 +
  • +

    Anonymous

    + + $250 +
  • +

    Kevin Purcell

    + + $125 +
  • +

    George Kurelic

    + + $125 +
  • +

    Axel Anceau

    + + $125 +
  • +

    Peter Tripp

    + + $125 +
  • +

    Rotten Mage

    + + $100 +
  • +

    David Gallant

    + + $100 +
  • +

    Justin Ma

    + + $100 +
  • +

    Tiago Ling Alexandre

    + + $100 +
  • +

    Terry Langeveld

    + + $100 +
  • +

    yuto togashi

    + + $100 +
  • +

    franco.ponticelli

    + + $100 +
  • +

    icculus

    + + $100 +
  • +

    Guilherme Medeiros

    + + $50 +
  • +

    Erik Winkels

    + + $50 +
  • +

    Justo Delgado Baudí

    + + $50 +
  • +

    Matt Roszak

    + + $50 +
  • +

    Stickleback Games

    + + $50 +
  • +

    hosey hosey

    + + $50 +
  • +

    Roméo Jr. Labonté

    + + $50 +
  • +

    Benjamin Van Treese

    + + $50 +
  • +

    sano98

    + + $50 +
  • +

    Mark Beiline

    + + $50 +
  • +

    dwlt

    + + $50 +
  • +

    Victor Lee

    + + $50 +
  • +

    Sébastien Bernery

    + + $50 +
  • +

    NME

    + + $50 +
  • +

    Tarwin Stroh-Spijer

    + + $50 +
  • +

    Darran D. Rimron-Soutter

    + + $50 +
  • +

    Ben Morris

    + + $50 +
  • +

    Justin Loudermilk

    + + $50 +
  • +

    Nick Johnson

    + + $50 +
  • +

    Chimango Games

    + + $50 +
  • +

    louisbl

    + + $40 +
  • +

    Sam Twidale

    + + $35 +
  • +

    Nathan Chowning

    + + $35 +
  • +

    Alexander A

    + + $35 +
  • +

    Juan C. Inostroza

    + + $35 +
  • +

    Fernando Bevilacqua

    + + $35 +
  • +

    Chris Porter

    + + $35 +
  • +

    Ruthie Edwards

    + + $35 +
  • +

    Manish Mathai

    + + $35 +
  • +

    Nick Klumpp

    + + $35 +
  • +

    Anonymous

    + + $35 +
  • +

    foolmoron

    + + $35 +
  • +

    Matthew Finnell

    + + $35 +
  • +

    Tommy Brosman

    + + $35 +
  • +

    jeffzaroyko

    + + $35 +
  • +

    Carl Furrow

    + + $35 +
  • +

    John Cooney

    + + $35 +
  • +

    Eric Bernier

    + + $35 +
  • +

    Tim Stoddard

    + + $35 +
  • +

    Vincent Blanchet

    + + $35 +
  • +

    Timothy Hely

    + + $35 +
  • +

    Anonymous

    + + $30 +
  • +

    poVoq

    + + $25 +
  • +

    Dmitriy Barabanschikov

    + + $25 +
  • +

    Dariusz Szlufarski

    + + $25 +
  • +

    Gabriel Diosan

    + + $25 +
  • +

    Marcin Kotz

    + + $25 +
  • +

    Daniel Brüggemann

    + + $25 +
  • +

    Valentin Lemière

    + + $25 +
  • +

    Philippe

    + + $25 +
  • +

    Miguel Murça

    + + $25 +
  • +

    Jérémy Faivre

    + + $25 +
  • +

    Igor S.

    + + $25 +
  • +

    Michael Martin-Smucker

    + + $25 +
  • +

    Waynetron

    + + $25 +
  • +

    Kieran McGrory

    + + $25 +
  • +

    Anonymous

    + + $25 +
  • +

    Chris Burnham

    + + $25 +
  • +

    Sebastian Joseph

    + + $25 +
  • +

    SMRenaud

    + + $25 +
  • +

    Andy Li

    + + $25 +
  • +

    Anonymous

    + + $25 +
  • +

    Thomas van den Berg (noio)

    + + $20 +
  • +

    John Langewisch

    + + $20 +
  • +

    Dmitry Vorobiev

    + + $15 +
  • +

    Osrandil

    + + $15 +
  • +

    Pawel Strejczek

    + + $15 +
  • +

    Miguel Hernandez

    + + $15 +
  • +

    Lachlan Cooper

    + + $15 +
  • +

    numero 15

    + + $15 +
  • +

    Liam Sauvé

    + + $15 +
  • +

    Henry Smith

    + + $15 +
  • +

    T. Anta

    + + $15 +
  • +

    elvis.slavic

    + + $15 +
  • +

    Duy Vo Van

    + + $15 +
  • +

    Daniel Dambrowski

    + + $15 +
  • +

    dj_pale

    + + $15 +
  • +

    Scaine

    + + $15 +
  • +

    C C Magnus Gustavsson

    + + $15 +
  • +

    Sam Bellman

    + + $15 +
  • +

    Adriano Valle

    + + $15 +
  • +

    jhice

    + + $15 +
  • +

    Daniel Pinheiro Lima

    + + $15 +
  • +

    MisterTtocS

    + + $15 +
  • +

    Zachary Knight

    + + $15 +
  • +

    Alvaro S.

    + + $15 +
  • +

    John Doughty

    + + $15 +
  • +

    Anonymous

    + + $15 +
  • +

    Javier San Juan

    + + $15 +
  • +

    Anonymous

    + + $15 +
  • +

    Patrick Oliver

    + + $15 +
  • +

    Ben Reeves

    + + $15 +
  • +

    Cédric Coulon

    + + $15 +
  • +

    Aitor García

    + + $15 +
  • +

    David Johnson

    + + $15 +
  • +

    Austin East

    + + $15 +
  • +

    Tom Platten-Higgins

    + + $15 +
  • +

    system.grand

    + + $15 +
  • +

    Rajasekaran Senthil Kumaran

    + + $15 +
  • +

    Chris Kelly

    + + $15 +
  • +

    Takaaki Takeuchi

    + + $15 +
  • +

    Jim Agett

    + + $15 +
  • +

    John Hattan

    + + $15 +
  • +

    Jonah Wallerstein

    + + $15 +
  • +

    runvs

    + + $15 +
  • +

    Devin Curry

    + + $15 +
  • +

    Kristian Macanga

    + + $15 +
  • +

    Leonardo Cavaletti

    + + $15 +
  • +

    Miguel Mariano

    + + $15 +
  • +

    Erik Letson

    + + $15 +
  • +

    Aaron Styles

    + + $15 +
  • +

    KJB of IBwWG

    + + $15 +
  • +

    Clayton Shaffer

    + + $15 +
  • +

    iLKke

    + + $15 +
  • +

    matej244

    + + $15 +
  • +

    Leandro Maguna

    + + $15 +
  • +

    Sven Camrath

    + + $15 +
  • +

    Daryl Yeo

    + + $15 +
  • +

    LoadUpGames.com

    + + $15 +
  • +

    MouseCaneta

    + + $15 +
  • +

    Simone Conia

    + + $15 +
  • +

    SASANUMA Takashi

    + + $15 +
  • +

    Manno Bult

    + + $15 +
  • +

    Richard Powell

    + + $15 +
  • +

    Christopher Butler

    + + $15 +
  • +

    Photon Storm

    + + $15 +
  • +

    eng.awad

    + + $15 +
  • +

    Patric Vormstein

    + + $15 +
  • +

    Wai Yin Leong

    + + $15 +
  • +

    Benjamín StuMx Martínez

    + + $15 +
  • +

    waneck

    + + $15 +
  • +

    Banagher Links

    + + $15 +
  • +

    Gerritt Dorland

    + + $15 +
  • +

    Edward "Ted" Barton / @MrTeduardo

    + + $15 +
  • +

    Ville Nuutinen

    + + $15 +
  • +

    Matthew Baldo

    + + $15 +
  • +

    Eric Stets

    + + $15 +
  • +

    Andreas Johansson

    + + $15 +
  • +

    Jacek Szymański

    + + $15 +
  • +

    nullzero

    + + $15 +
  • +

    TJ Cordes

    + + $15 +
  • +

    christoph.wolk

    + + $10 +
  • +

    John Fletcher

    + + $10 +
  • +

    cdoty

    + + $5 +
  • +

    Alyssa Arce

    + + $5 +
  • +

    rudibonfiglioli

    + + $5 +
  • +

    Phillip Whitelow

    + + $5 +
  • +

    hodginson

    + + $5 +
  • +

    happymaskmac

    + + $5 +
  • +

    maxion

    + + $4 +
  • +

    Carlos Cárdenas

    + + $4 +
  • +

    Anonymous

    + + $1 +
  • +

    Samuli Saari

    + + $1 +
  • +

    Jeremy Selwyn

    + + $1 +
  • +

    Danilo Junior

    + + $1 +
  • +

    Daniel Lin

    + + Private +
  • +

    Johnny Rivera

    + + Private +
+
+
+ +
+ + + + + + + + + + + + + diff --git a/blog/06-HaxeFlixel-4-2-0/index.html b/blog/06-HaxeFlixel-4-2-0/index.html new file mode 100644 index 000000000..6a150f589 --- /dev/null +++ b/blog/06-HaxeFlixel-4-2-0/index.html @@ -0,0 +1,462 @@ + + + + + + + + + + + HaxeFlixel 4.2.0 | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
+
+

+ HaxeFlixel 4.2.0 + +

+ +
+ +

We've just released HaxeFlixel 4.2.0! There are a lot of small additions and improvements, like exposing the length of FlxSound objects or allowing you to configure their endTime.

+

Apart from that, we also fixed a lot of bugs and took care of some old annoyances, like not being able to control which tweens or timers are paused when entering a substate (see #1934 for a detailed explanation + usage example). This is also one of the improvements that caused some minor breaking changes.

+

The debugger overlay became even more powerful (and can now be opened with F2):

+

+

You can find the full changelog here.

+

Thanks to everybody who contributed to this release in any way!

+

By the way, in case you hadn't noticed: we recently released new versions of flixel-tools and flixel-templates as well, adding support for Visual Studio Code!

+

What happened to OpenFL 4 support?

+

Don't worry, it's still coming! There are two reasons why it's not a part of 4.2.0:

+ +

We're aiming to have support for OpenFL 4 starting with the next minor release (4.3.0).

+ + +
+
+
+ + +
+ +
+ + + + + + + + + + + + + diff --git a/blog/07-haxeflixel-mechanics/index.html b/blog/07-haxeflixel-mechanics/index.html new file mode 100644 index 000000000..d705b1c3e --- /dev/null +++ b/blog/07-haxeflixel-mechanics/index.html @@ -0,0 +1,473 @@ + + + + + + + + + + + HaxeFlixel Mechanics | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
+
+

+ HaxeFlixel Mechanics + +

+ +
+ +

Hey everybody, Tim here to share something with you: Does this sound familiar?

+
+

"I wish I could remember how to do this one, small thing in HaxeFlixel, and that I didn't have to dig through a massive tutorial just to jog my memory."

+
+

Or, how about:

+
+

"What's the 'right' way to handle this, again?"

+
+

Yeah, we've all been there! Wouldn't it be nice if there was some kind of interactive repository of just about every conceivable useful snippet of code that you could use to answer these, and other questions?

+

Well, what if I told you that it already exists!?

+ + +

HaxeFlixel Logo HaxeFlixel Mechanics

+
+

A couple of years back now (wow, time flies!), I had the idea of putting together a website that would showcase a ton of little samples of HaxeFlixel code, along with a demonstration of that code in action. It took some time, but I was able to get a pretty good start on this thing, and I called it HaxeFlixel Mechanics.

+

+

The plan was to get a bunch of samples in the project, and then invite collaborators to add more to help grow and flesh it out... and then Real Life™ got in the way and the project got pushed aside...

+

This year, let's work together to get HFMechanics back up and running again. Let's add more demos and snippets, and try to fill it with lots more good stuff.

+

If you'd like to lend a hand, join us over in the repository. Add an issue for suggestions or requests, or submit pull requests for snippets you've created so we can add them to the site! You can find more detailed information about contributing here!

+

If you want to check out the site in action, you can visit http://hfmechanics.nfshost.com/ for a live version!

+

Thanks! ...and be sure to tell your friends!

+

-Tim I Hely

+
+

Tim is a versatile developer from St Louis, Missouri, who has been using and contributing to HaxeFlixel since at least 2013.

+
+ + +
+
+
+ + +
+ +
+ + + + + + + + + + + + + diff --git a/blog/08-openfl-5-compatibility-status-update/index.html b/blog/08-openfl-5-compatibility-status-update/index.html new file mode 100644 index 000000000..8cdbb1d41 --- /dev/null +++ b/blog/08-openfl-5-compatibility-status-update/index.html @@ -0,0 +1,523 @@ + + + + + + + + + + + OpenFL 5 compatibility status update | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
+
+

+ OpenFL 5 compatibility status update + +

+ +
+ +

Hey, Beeblerox here!

+

As you may know, HaxeFlixel is currently stuck with outdated versions of OpenFL and Lime due to some rendering incompatibilities, and updating it has turned out to be more work than expected. I want to give you a quick status update regarding my work towards making Flixel compatible with the latest versions of OpenFL again.

+

Note: I've switched to working on a new branch and closed the previous pull request. You can follow my progress in the new pull request here.

+

FlxMaterial

+

I've added a FlxMaterial class (see here). Currently, it's just a single render-pass material with multiple textures support. This enables more complex effects like 2D-lighting (by using normal maps generated with tools like SpriteIlluminator). I've updated the flixelighting lib by Pixelbear to make it work with the new material system on my fork here.

+

Here is an example of how it can be used right now:

+
// create regular sprite
+shadedWall = new FlxSprite(100, 200, "assets/rock.png");
+add(shadedWall);
+// create custom lighting material and apply to our sprite
+lightMaterial = new FlxLightingMaterial();
+teapot.material = lightMaterial;
+// tune light material properties
+lightMaterial.setAmbient(FlxColor.YELLOW, 0.2);
+// add light source
+light = new FlxLight(0, 0, 0.3);
+light.lightColor = FlxColor.WHITE;
+add(light);
+lightMaterial.addLight(light);
+// and create normal map and apply it to our material
+var normalMap:FlxNormalMap = new FlxNormalMap(0, 0, "assets/rock_n.png");
+lightMaterial.addNormalMap(normalMap);
+HAXE
+

And here is the result:

+

+

Now a few more details about sprite materials.

+

Each sprite, tilemap, etc. now has a material:FlxMaterial property. A material stores information about an object's blend mode, smoothing, shader to use, data for the shader (values of shader uniforms) and an array of textures to use. So when you do sprite.blend = BlendMode.ADD;, in reality you change the blend mode of its material.

+

By default, objects have materials without shaders (shader is null), which means that the renderer will use default shader and batch this object. If you do set a material's shader property, then the material will create a data object (openfl.display.ShaderData) to store info about shader uniforms which you could set later. Say your shader has a uFill uniform after setting material.shader = myCustomShader, you can set the value of this uniform like this:

+
material.data.uFill.value = [0.5];
+HAXE
+

Setting a material's shader you will break the batch, but if several sprites share the same material, then they will be batched together again.

+

The material class also has a batchable:Bool property which is true by default. This means that the renderer will try to batch objects with this material. But in case you have many sprites with different materials and you want them not to be batched (to minimize the amount of data which will be reuploaded to the GPU), you could set it to false to force this behavior (sprite.material.batchable = false;).

+

Multipass

+

For more complex effects which require multi-pass rendering, I've added FlxRenderTarget which extends the FlxSprite class. Basically it's the same as a FlxSprite, but you can render other sprites to its texture through underlying OpenGL calls (not with BitmapData's draw() method). I took the idea from Phaser's RenderPass object, which has a very simple API. Here is a usage example for it:

+
// create render target with the size of 256 by 512 pixels
+var renderTexture:FlxRenderTarget = new FlxRenderTarget(256, 512);
+// specify camera which will be used for calculation of drawable sprites positions on this render texture.
+renderTexture.renderCamera = FlxG.camera;
+add(renderTexture);
+// set object's renderTarget, so it will be rendered only on its texture and won't appear on any camera.
+teapot.renderTarget = renderTexture;
+// set render pass shader.
+renderTexture.shader = myCustomShader;
+HAXE
+

Camera buffers

+

Since the first iteration of the new renderer I've changed a lot of things. The biggest of them is the way objects are rendered to the camera and to the screen. Now, each camera has its own render texture to which all object are rendered, and then this texture is rendered to the screen.

+

+

This way of rendering helps minimize the number of array iterations, and also made it much easier for other features to be implemented (such as the FlxRenderTarget class).

+

Debug rendering

+

I was disappointed by the performance of drawDebug rendering on native targets, so I've redone it and now it uses OpenGL instead of OpenFL's Graphics API.

+

+

drawTriangles()

+

Last weekend I was busy with rewriting the FlxStrip and FlxTrianglesData classes. They are responsible for rendering complex meshes having hundreds of vertices. +As you may know, FlxStrip is a subclass of FlxSprite. It's only purpose was to call the drawTriangles() method with vertices, uvs, indices and colors arguments specified by the user. Now, it's become much more flexible and easier to use for prototyping. +Each FlxStrip object has a data:FlxTrianglesData property which stores information about added vertices. In addition to getters and setters for vertices, indices, etc., it now has utility methods for adding a single vertex and a single triangle:

+
var data:FlxTrianglesData = mySprite.data;
+// set vertices info in old way
+data.vertices = Vector.ofArray([0.0, 0.0, 100.0, 0.0, 0.0, 100.0]);
+data.colors = Vector.ofArray([FlxColor.RED, FlxColor.GREEN, FlxColor.BLUE]);
+data.indices = Vector.ofArray([0, 1, 2]);
+// and you can add it new way
+data.start();
+data.addVertex(200, 300, 0, 0, FlxColor.RED);
+data.addVertex(300, 300, 0, 0, FlxColor.GREEN);
+data.addVertex(200, 400, 0, 0, FlxColor.BLUE);
+data.addTriangle(0, 1, 2);
+
+// plus you can change data of individual vertex
+data.setVertex(0, newX, newY, 0.0, 0.0, newColor);
+HAXE
+

This new API allows to minimize the iterations through inner data arrays which will be uploaded to GPU, which should result in a noticeable performance improvement. +I also borrowed HaxePunk's code for GPU-accelerated rendering of graphics primitives (Draw class) and adapted it to Flixel, so there is new FlxDraw class for rendering lines, rectangle, circles, polygons and curves.

+

+

Next steps

+

Next, I'll start updating the flixel-addons classes and demos. Meanwhile, I'd be happy about any feedback you have for me - please post it in the OpenFL 5 compatibility pull request!

+ + +
+
+
+ + +
+ +
+ + + + + + + + + + + + + diff --git a/blog/09-msghero-introduction-goals/index.html b/blog/09-msghero-introduction-goals/index.html new file mode 100644 index 000000000..64ea9f3c1 --- /dev/null +++ b/blog/09-msghero-introduction-goals/index.html @@ -0,0 +1,470 @@ + + + + + + + + + + + Introducing Nick (MSGHero) | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
+
+

+ Introducing Nick (MSGHero) + +

+ +
+ +

Hi everyone!

+

I'm Nick (@MSGhero16), and I'll be working for the HaxeFlixel community now. My goal is to drum up engagement with our favorite library by writing regular blog posts and creating new demos.

+

If you're new around these parts, here's a brief intro to what this is all about.

+

(Haxe)Flixel

+

HaxeFlixel is a free cross-platform, open-source library that makes your game-making easier. It's a modernized version of the original Flixel library for Flash, which was hugely popular back in the day for how easy it was to get started with.

+

(I'll be referring to HaxeFlixel as Flixel or HF)

+

To get started making your first game or your 30th prototype, check out the Getting Started page.

+

Me

+

I started coding with Flash about seven years ago, inspired by Newgrounds games like Super Chibi Knight and Castle Crashing the Beard. I made a few games that did pretty well overall, keeping the coding as a hobby for my spare time.

+

I moved on to Haxe when I learned I could get HTML5 and CPP builds for (almost) free. The transition from AS3 to OpenFL was as smooth as silk, and I quickly found and exclusively started using Flixel. I am currently working on a new game, Enki Adventures, in addition to numerous little demos and projects that may one day see the light of day.

+

Flixel is great for me because I no longer have to even think about updating and rendering. Input is taken care of; spritesheets are handled. Life is good.

+

I'm also helping with a UI library called HaxeUI that I'll be talking about in the future, specifically the Flixel backend (haxeui-flixel) that ties into the core library. Stay tuned for that one.

+

+

Short-term goals

+

People love this library; it's tied with its dependency as the most popular haxelib on GitHub. It's used in many Ludum Dare games, and lots of devs swear by it. It's rather easy to pick up, with all the demos highlighting each feature.

+

So as my first demo for the community, I'm thinking about making a game. Something simple, open-source (of course), fun, and kinda cool. I plan on publishing it as an HTML5 game on Newgrounds and on other portals. That way, the demo will get plenty of views outside of its typical audience. Even more if it's actually good and gets front-paged, but y'know, one step at a time.

+

At least on NG, I am seeing a lot of Flash anxiety from devs, especially from people who are just getting started with making games. Spreading the gospel of Flixel is something I am increasingly doing there, and the demo seems like a great next step. I believe that current and future devs can only benefit from giving Flixel a try.

+

Long-term goals

+

From the successful IndieGoGo campaign, it's clear that there is interest in seeing Flixel improve. Aside from that, however, contributions to the library as well as community management have been performed out of the infinite goodness of people's hearts.

+

+

Ultimately, we'd like to drum up support for our _ Patreon _, to give more people more reason to contribute. At the moment, the plan is to allocate funds to people who put in the hours on GitHub or in the general community, as well as positions to increase community size and support, like mine.

+

More people making more games with better versions of Flixel. That's what it's all about.

+ + +
+
+
+ + +
+ +
+ + + + + + + + + + + + + diff --git a/blog/10-HF-community/index.html b/blog/10-HF-community/index.html new file mode 100644 index 000000000..fea0b24a2 --- /dev/null +++ b/blog/10-HF-community/index.html @@ -0,0 +1,468 @@ + + + + + + + + + + + The Flixel Community | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
+
+

+ The Flixel Community + +

+ +
+ +

So you've downloaded Flixel, skipped around in the tutorial, and are wondering what's next. You could start making that game you've been thinking about. Or, better yet, make that game while also talking to other people who are using Flixel! They're not scary, I promise.

+

Join the community

+

There are a number of places where you'll find fellow Flixel-ers. It's really up to you where you want to hang. Here are some of the popular destinations:

+

Forums

+

If you're new and having a bit of trouble getting into things, the forums are a great place to start. Not only will any of your questions be answered, but you also have a nice place to start posting about what you're working on. Get some eyeballs on your cool new content and see what others are up to.

+ +

The forum also just looks really nice. Like, come on. That looks so good.

+

Slack and Discord

+

Slack and Discord are both chat apps. Slack is often used in companies as a team messenger. Discord is built for gamers, with voice chat capabilities. As far as Flixel goes, the Discord channel has more activity, but "activity" can sometimes include 200 off-topic posts about philosophy. The Slack channel is more focused but quieter. Check 'em both out and see for yourself! It's 100 percent possible to be a part of both, even if Kantian philosophy isn't your thing.

+

Click here to join the Discord. Slack requires an invitation, so feel free to message me on Twitter (@MSGhero16) for one.

+

Both Slack and Discord have desktop apps, web interfaces, and mobile apps. Flixel community on any device.

+

Twitter

+

#HaxeFlixel. That's all you need to be a part of this one. Add it to your tweets to let everyone know that you're using an awesome library. The main Flixel account will see this and might retweet your posts, extending your reach. Search that hashtag to find what everyone else is up to, maybe find some inspiration or new devs to follow. Tweets even show up in the Slack and Discord channels!

+

Twitter has the most open audience of the community hangouts: not everyone on Twitter has heard of Flixel. So help spread the word!

+

GitHub

+

GitHub is less of a hangout than the others. It's where the code of Flixel is. The purpose of GitHub is for the community to find issues in the code and help fix them. Now, "issues in the code" and "issues in your code" are two different things. If you're struggling or having problems, the forums, Slack, or Discord are definitely better options if you're new to this kind of thing.

+ +

An example of GitHub being used properly is this code fix. The code of Flixel was actually incomplete, not being able to handle a specific use-case. So a member of the community brought it up and then fixed it. If you're interested in contributing in this way, there are numerous resources you can look up for how to use GitHub and version-control software. Or ask someone in the Slack/Discord!

+

For an itemized version of this post, check out our community docs page. It also mentions a few more, less popular interaction channels such as our IRC and our Subreddit.

+

So there you have it. A good number of ways to talk to everyone else using Flixel. Get to chatting!

+ + +
+
+
+ + +
+ +
+ + + + + + + + + + + + + diff --git a/blog/11-light-puzzle-demo/index.html b/blog/11-light-puzzle-demo/index.html new file mode 100644 index 000000000..7248e6fcd --- /dev/null +++ b/blog/11-light-puzzle-demo/index.html @@ -0,0 +1,464 @@ + + + + + + + + + + + FlxLightPuzzle Demo | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
+
+

+ FlxLightPuzzle Demo + +

+ +
+ +

We have a new demo made by yours truly Nick: a puzzle game of reflecting light and combining colors. Featuring...

+

FlxLightPuzzle Demo

+ +

In addition to being a fully playable game, the FlxLightPuzzle Demo heavily features the FlxVector class. Vector math is a nightmare, and I was actually surprised to see how much of it FlxVector handles for you.

+

The source code is here, which you're free to look at and edit to make your own version of the game. Maybe you add more levels, real graphics, or more obstacles that the player has to solve around. I'll leave that to you.

+

Development and design decisions

+

I think color-based mechanics and reflection-based mechanics are super cool, and that's about all the backstory there is. The graphics are simple shapes (FlxSpriteUtil) to avoid any fuss about art, and the music is a random find that I happened to enjoy (used with permission, of course).

+ +

You'll quickly notice that you can play the game in RBY, RGB, or CMY color spaces. I couldn't really decide whether RBY+orange/green/purple or RGB+yellow/cyan/magenta would be better to play in. On one hand, you have the "normal" primary colors that everyone is used to; on the other, there are the "correct" primary colors for light. So I added both, and CMY for anyone in the printing business playing the game.

+ +

On the third level, you learn that you can mix primary colors to hit secondary targets. On the fourth (my favorite), you learn that secondary colors can't hit primary targets. It wasn't always like that! I asked a number of people who said that it lessened the challenge if, say, green light could hit yellow targets. When that mechanic was changed, I thought that made level four impossible to solve. It was pure coincidence that it resulted in clever level design.

+

Iterating to improve is a big part of level design. I've played through each level dozens of times now, fiddling with numbers and colors until I got to a pretty good result. The first and last levels haven't changed since day one — and you'll see why when you play through — but the middle eight have been through a lot. I still have fun every time I play, even if I can (almost) play through the whole thing without any do-overs. I call that a success.

+

The code

+

You are free to do whatever you want to the code under the MIT license. There are a number of things to learn from, such as vector math, object pooling, subtle tweening effects, physics and optics, and level data files. I added way more comments than I normally do to describe some of that. If you want to keep it simple, though, editing the levels or adding new ones is your best bet. There are a lot of places the code can go, and I limited the scope of the demo so that you could be creative with a solid foundation.

+

So, go be creative! Don't forget to check out the other demos as well. There is plenty to learn from. I'll be back soon with a look at a UI library that recently got Flixel support.

+

Stay tuned.

+ + +
+
+
+ + +
+ +
+ + + + + + + + + + + + + diff --git a/blog/12-HaxeFlixel-4-4-0/index.html b/blog/12-HaxeFlixel-4-4-0/index.html new file mode 100644 index 000000000..58594595d --- /dev/null +++ b/blog/12-HaxeFlixel-4-4-0/index.html @@ -0,0 +1,479 @@ + + + + + + + + + + + HaxeFlixel 4.4.0 | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
+
+

+ HaxeFlixel 4.4.0 + +

+ +
+ +

HaxeFlixel 4.4.0 is now available on Haxelib, adding support for OpenFL 8 and Lime 6.3.0! Breaking changes are mostly limited to blend modes and a slightly different shader syntax. Additionally, 4.4.0 is still fully-backwards-compatible with OpenFL 3.6.1 legacy or next, so even if you don't plan on upgrading to OpenFL 8 just yet, don't let that stop you from taking advantage of the other fixes and improvements in the 4.4.0 release.

+

OpenFL 5 6 7 8 support has been long-awaited. OpenFL 3.6.1 is still working fine for many people, so why be excited about this? Well, there's many reasons:

+ +

Since these reasons have surely managed to excite you as much as us, what else do you need to know about OpenFL 8? Here's a few things:

+ +

Finally, a huge thanks goes to Joshua Granick, the maintainer of OpenFL. He invested a lot of time to make sure that this transition can happen smoothly. The fairly short diff of the pull request on the Flixel end of things doesn't begin to do all the behind-the-scenes improvements and bugfixes that happened in OpenFL and Lime justice!

+

That's all for now. If you have any more questions, get in touch with the community. Keep on making awesome games!

+

- The HaxeFlixel team

+

P.S. Don't forget to check out the livestream of the Haxe US summit that is going on right now!

+ + +
+
+
+ + +
+ +
+ + + + + + + + + + + + + diff --git a/blog/13-HaxeFlixel-DragonBones-Support/index.html b/blog/13-HaxeFlixel-DragonBones-Support/index.html new file mode 100644 index 000000000..66eb3ddb4 --- /dev/null +++ b/blog/13-HaxeFlixel-DragonBones-Support/index.html @@ -0,0 +1,532 @@ + + + + + + + + + + + HaxeFlixel DragonBones Support | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
+
+

+ HaxeFlixel DragonBones Support + +

+ +
+ +

Hi there, I’m Troy (@RouStudios), creator and maintainer of the HaxeFlixel backend for DragonBones. I’m here to write a post about DragonBones support for HaxeFlixel and how to use it.

+

First of all, what is DragonBones? DragonBones is a free *open source alternative to the popular 2D bone animation tool Spine (which Flixel already has support for). Its a tool which allows you to animate static 2D images programmatically (similar to Flash tweening) without having to painstakingly animate each individual frame in a spritesheet. Why would one use it over Spine? Well Spine can potentially be quite expensive for new indie devs, and DragonBones is free. Not only that, DragonBones is a fully featured, intuitive bone animation editor and has Mesh Deformation support just like Spine. Quite a deal for free!

+ +

*One caveat is that DragonBones is not truly open source (if you care about that sort of thing), only the runtime is. If you want a truly open source editor which can export to the DragonBones format while also being fully featured, check out the great alternative COA Tools for Blender. Its DragonBones export should also work with the Flixel backend I’ve created.

+

How exactly do you use DragonBones with Flixel? Well, that’s what I’ll be showing you, so let’s get started.

+

Install

+

First install the library from haxelib using:

+
haxelib install dragonbones
+
+

Although it’s better to install directly from GitHub in order to always keep up with the latest updates:

+
haxelib git dragonbones https://github.com/openfl/dragonbones
+
+

Create Project

+

Then create a new Flixel project template with Flixel Tools, and add DragonBones to your Project.xml. You can also download the sample project instead to follow along.

+
<haxelib name="dragonbones" />
+XML
+

Then create a new animation using DragonBones. For the sake of this tutorial, we’re going to use a premade project that comes with DragonBones called DragonBoy that you can select from the starting menu. Once you’re done, go to File > Export and export the animation using Data Version: 5.0 and Image Type: Texture Atlas. Then save it to the assets folder in your Flixel project.

+ +

Packages

+

First, import the packages we'll be using.

+
import haxe.Json;
+import openfl.Assets;
+import flixel.FlxG;
+import flixel.FlxState;
+import flixel.group.FlxGroup;
+import dragonBones.objects.DragonBonesData;
+import dragonBones.flixel.FlixelTextureAtlasData;
+import dragonBones.flixel.FlixelArmatureDisplay;
+import dragonBones.flixel.FlixelArmatureCollider;
+import dragonBones.flixel.FlixelFactory;
+import dragonBones.flixel.FlixelEvent;
+import dragonBones.animation.WorldClock;
+HAXE
+

Create Factory

+

Then, inside the create function under your FlxState class you have to create a FlixelFactory which generates flixel objects for DragonBones like so:

+
var _factory = new FlixelFactory();
+HAXE
+

Parse Data

+

Then you have to use the factory to parse the animation files that you’ve exported in order to read their data.

+
var dragonBonesData:DragonBonesData = _factory.parseDragonBonesData(
+	Json.parse(Assets.getText("assets/dragonboy_flixel_ske.json"))
+);
+
+_factory.parseTextureAtlasData(
+	Json.parse(Assets.getText("assets/dragonboy_flixel_tex.json")),
+	Assets.getBitmapData("assets/dragonboy_flixel_tex.png")
+);
+HAXE
+

Build Armature

+

Then you have to create a FlxGroup which will contain all the DragonBones Flixel Sprites. You can do so by declaring a variable and then assigning the new FlxGroup to it which you will generate using the factory.

+
var armatureGroup = _factory.buildArmatureDisplay(new FlixelArmatureCollider(250, 250, 27, 25, 13, 8), dragonBonesData.armatureNames[0]);
+HAXE
+

One thing to note is you also have to pass in a collision box similar to the Flixel Spine plugin. This is because with many different sprites, if you want to check the collisions of the entire “character” then you have to have one large collision box. You also pass in the name of the armature (the animations skeleton). Generally you’ll only have one armature, so just pass in the first index of the armatureNames array from the data you got earlier. Otherwise, check your animation in DragonBones to find the name and pass it in as a string.

+

Set Properties

+

Then you iterate through all of the sprites in the FlxGroup to set their initial properties (such as scale, placement in the world, ect.) as you please.

+
armatureGroup.forEach(function(display:FlixelArmatureDisplay) {
+	display.antialiasing = true;
+	display.x = 100;
+	display.y = 100;
+	display.scaleX = 0.50;
+	display.scaleY = 0.50;
+});
+HAXE
+

Start Animation

+

Now you do the same thing to start the initial animation. Again we grab the first index from the list of animation names to keep it simple.

+
armatureGroup.forEach(function(display:FlixelArmatureDisplay) {
+	display.animation.play(display.animation.animationNames[0]);
+});
+HAXE
+

Update Animation

+

Then, inside the update loop of the FlxState class, add FlixelFactory._clock.advanceTime(-1); to update the animation clock so that the factory knows what point it's at on the timeline.

+
override public function update(elapsed:Float):Void
+{
+	FlixelFactory._clock.advanceTime(-1);
+	super.update(elapsed);
+}
+HAXE
+

Render

+

Finally, we add the FlxGroup to the FlxState inside the create function so it can be rendered!

+
add(armatureGroup);
+HAXE
+

Preview

+

That’s it! Once you compile with lime test html5, it should look like this:

+ + + +
+
+
+ + +
+ +
+ + + + + + + + + + + + + diff --git a/blog/14-newgrounds-game-jam/index.html b/blog/14-newgrounds-game-jam/index.html new file mode 100644 index 000000000..0c2ac7e26 --- /dev/null +++ b/blog/14-newgrounds-game-jam/index.html @@ -0,0 +1,452 @@ + + + + + + + + + + + Newgrounds Game Jam | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
+
+

+ Newgrounds Game Jam + +

+ +
+ +

Newgrounds is hosting a HaxeFlixel game jam with a $1,300 prize pool! The theme is "Alone, Together" and submissions have to be uploaded to Newgrounds by Monday, April 27th with the tag "HaxeFlixelJam" included. For more information, check out their official announcement.

+ +

We also modernized our Tutorial to use Ogmo 3, Visual Studio Code and HTML5, so it's a great time to learn HaxeFlixel if you're new to it! If you get stuck, just hop onto our Discord channel.

+

Let's make some amazing games!

+ + +
+
+
+ + +
+ +
+ + + + + + + + + + + + + diff --git a/blog/15-Blog-posts-are-back/index.html b/blog/15-Blog-posts-are-back/index.html new file mode 100644 index 000000000..05bb4f7c4 --- /dev/null +++ b/blog/15-Blog-posts-are-back/index.html @@ -0,0 +1,480 @@ + + + + + + + + + + + Blog Posts are Back | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
+
+

+ Blog Posts are Back + +

+ +
+ +

Hello everyone! George, here, gladly announceing the return of the HaxeFlixel blog after a long hiatus. While there have been many ongoing changes to the HaxeFlixel framework, we've sadly neglected to broadcast those changes on the website. Let's take this time to get everybody up to speed with all we've done these last 3 years.

+

What's New?

+

Since the last release blog post, we have released 24 new versions of HaxeFlixel! There's too many changes to go over in just one blog post, so if you're far behind, be sure to look at the changelog for details on every release. I do want to go over some big milestones from these past few years.

+

Flixel 5.0.0

+

HaxeFlixel's first major release in over 6 years! Be sure to check out the Migration Guide for more info on the bigger changes as well as info on how to upgrade your old projects from version 4. Here's a brief list of the changes (the changelog has them all, of course)

+

FlxPoint absorbed FlxVector

+

Most people never knew we had a FlxVector class with a bunch of incredibly handy math operations, so we moved them all into FlxPoint.

+

Collision Improvements

+

One small tweaks to preserve momentum and a new feature that let's objects ride other non-immovable objects. The dirty minds following us on Twitter got really excited about this. +

+ +Your browser does not support the video tag. + +

Pathfinding Overhaul

+

Create custom pathfinders.

+ +

AssetPaths and FlxSave Overhaul

+

Hard to express with pictures, but AssetPaths is actually usuable now! And FlxSave allows you to use custom directory locations

+

Who's George?

+

It's about time I formally introduced myself. My name is George Kurelic and I've been the lead maintainer of HaxeFlixel since around January 2022. I've used Flixel since the flash days, but I've only started making contributions to HaxeFlixel in late 2018. While I have enourmous shoes to fill, I'm very passionate about open source software, and gamedev, and I have a lot of plans for the framework. You can usually find me in the #flixel channel of the Haxe Discord server

+

What's next?

+

Get used to seeing more blog posts if you wanna see what's cookin, but here's what is currently planned.

+

Flixel 5.4.0 is mostly finished, which is planned to have the abilty to combine altases from separate images, which should make it easier for FNF mods with huge hd character assets.

+

We haven't decided which of these features we'll put in 6.0.0, but many large changes are planned, such as:

+ + + +
+
+
+ + +
+ +
+ + + + + + + + + + + + + diff --git a/blog/16-HaxeFlixel-5-4-0/index.html b/blog/16-HaxeFlixel-5-4-0/index.html new file mode 100644 index 000000000..bf9023f29 --- /dev/null +++ b/blog/16-HaxeFlixel-5-4-0/index.html @@ -0,0 +1,531 @@ + + + + + + + + + + + HaxeFlixel 5.4.0 | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
+
+

+ HaxeFlixel 5.4.0 + +

+ +
+ +

We've finally released Haxeflixel 5.4.0, our largest release in quite some time, arguably larger than the 5.0.0 release! This release focuses heavily on assets and animations, like the new FlxAsepriteUtil and the new Multi-Atlas system.

+

What took so long?

+

We try to release new versions of HaxeFlixel around once a month, and have been, for the most part. This one took much longer, the previous version, 5.3.1, was released in early May, that's almost 5 months! The main reason is because we really wanted to get things right, The Aseprite utils, alone, add around 20+ new types and it's not good to release them prematurely, only to rename, reorganize or retool them in a later patch. This ended being a good call, since we did end up iterating on and organizing these utils, later.

+

Another reason the release was delayed was that George, our lead maintainer finally went on his honeymoon. He didn't feel like touching a computer while visiting his motherland for most of September, with views like this, I'm sure you wouldn't want to either!

+ +

Aseprite Utils

+

By far the biggest development of HaxeFlixel 5.4.0 is the various tools that utilize Aseprite's atlas exporting tools. For those unaware, Aseprite is a very popular animated sprite editor and pixel art tool, we can't recommend it enough for anyone using HaxeFlixel, especially for pixel-art games. The main goal of FlxAsepriteUtil is to allow devs to define animation data using Aseprite's tags rather than in code.

+ +

(Made using the Animated Pixel Adventurer set by rvros)

+

The resulting atlas can easily be applied to a sprite with the following code using the addAseAtlasTagsByPrefix or addAseAtlasTagsByIndex to create an animation for every tag in your .aseprite file.

+
hero = new FlxSprite(50, 50);
+hero.loadAseAtlasAndTagsByPrefix("assets/images/adventurer.png", "assets/images/adventurer.json");
+hero.animation.play("idle");
+add(hero);
+HAXE
+

You can expect more Aseprite focus tools to come now that we've created handy typedefs for Aseprite atlas metadata. One future plan is to use Aseprite's slicing feature to generate 9-slice data or per-frame hitboxes, but it's much easier for you to use this data to roll your own features, for example to see per-frame slice data on an atlas's labelled "attackRect":

+
var atlasData:AseAtlas = Assets.getText(myAtlasJsonPath);
+for (slice in atlasData.meta.slices)
+{
+    if (slice.name == "attackRect")
+    {
+        for (key in slice.keys)
+        {
+            // store per-frame slice data
+            trace('frame: ${key.frame} bounds: ${key.bounds}');
+        }
+    }
+}
+HAXE
+

We have immediate plans to utilize more Aseprite fields, such as the tags' "Repeat" and "Animation Direction" fields. You can expect those in the next release (Update (5.4.1): this change has been added!).

+

Combining Multiple Atlases

+

This feature was specifically made with our Funkin' devs and modders in mind. As the demand for HD atlases with large amounts of animations increase, their atlas image size grows well beyond the limit that flixel can currently handle. By combining multiple atlases at runtime devs can better compartmentalize their animations, ultimately allowing FlxSprites to have more animations without having to switch graphics every time you change a sprite's animation. Splitting up animations also allows you to load them separately, for instance, if you only need certain animations on certain levels.

+

This project's art pipeline could really benefit from multi-atlas since each character is made from about a dozen different aseprite files, each with potentially dozens of frames.

+ +(Art by Adam V., you should [hire him](https://twitter.com/Koolboyman/status/1672366422767591424)!) +

Here's an example of how to add atlases to another

+
// create an atlas for each file
+var idleAtlas = FlxAtlasFrames.fromAseprite('assets/images/snowman-idle.png', 'assets/images/snowman-idle.json');
+var jumpAtlas = FlxAtlasFrames.fromAseprite('assets/images/snowman-jump.png', 'assets/images/snowman-jump.json');
+var walkAtlas = FlxAtlasFrames.fromAseprite('assets/images/snowman-walk.png', 'assets/images/snowman-walk.json');
+var blockAtlas = FlxAtlasFrames.fromAseprite('assets/images/snowman-block.png', 'assets/images/snowman-block.json');
+
+// combine all the atlases by adding to the idle atlas
+idleAtlas.addAtlas(jumpAtlas);
+idleAtlas.addAtlas(walkAtlas);
+idleAtlas.addAtlas(blockAtlas);
+
+// create the FlxSprite
+var snowman = new FlxSprite();
+snowman.frames = idleAtlas;
+
+// add all the anims
+snowman.animation.addByPrefix("idle", "snowman-idle_anim");
+snowman.animation.addByPrefix("jump", "snowman-jump_anim");
+snowman.animation.addByPrefix("walk", "snowman-walk_anim");
+snowman.animation.addByPrefix("block", "snowman-block_anim");
+
+// add it to the state
+add(snowman);
+HAXE
+

Animation Time Scaling

+

We've added a timeScale field to FlxAnimationController. This can be used to slow down or speed up animations. For instance, you can change a walk cycle's animation speed to match the sprite's changing movement speed, or you can easily implement a power up or skill that increases attack rate. Here's an example of 4 sprites using different timescale properties whenever the attack animation is played:

+ +

Update (5.4.1): We've also added the timeScale field to each individual animation, rather than just the animation controller.

+

A List of Every Asset

+

Lastly, we've added the allFiles field to classes generated via FlxAssets.buildFileReferences, AKA: AssetPaths. This is just an easy way to iterate or search a list of every asset included in this build. if you don't like the name allFiles you can specify a custom name in the listField arg of buildFileReferences.

+ +

What's Next?

+ + + +
+
+
+ + +
+ +
+ + + + + + + + + + + + + diff --git a/blog/17-site-update/index.html b/blog/17-site-update/index.html new file mode 100644 index 000000000..519db5adb --- /dev/null +++ b/blog/17-site-update/index.html @@ -0,0 +1,472 @@ + + + + + + + + + + + HaxeFlixel Site Update! | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
+
+

+ HaxeFlixel Site Update! + +

+ +
+ +

The HaxeFlixel site finally got a bit of a facelift! After 4 years of Docpad being deprecated (we were on an even older version!), and 2 years of the initial "Should we replace docpad?" Github issue raised by RichardBray, we have FINALLY migrated the static site generation code fully off Docpad, and we are now using 11ty to generate the Haxeflixel site! This was lead by me, ninjamuffin99, as a small side project that begun the R&D phase in December, and started the serious work near the beginning of February.

+

The goals for the site update I aimed for:

+ +

Total work was a bit on and off over a few weeks, but finally got the site fully updated to have no Docpad related code around February 20th 2024!

+

Removing Docpad wasn't just a case of "old tech bad, new tech fun and good", there are many things that make the developer experience when working on the site much nicer now!

+ +

Now with new site generation backend, we are aiming for some cool new features for the site in future updates

+ +

If you have any suggestions for site features, content, or bug reports, do feel free to file an issue in the haxeflixel/haxeflixel.com repo! https://github.com/HaxeFlixel/haxeflixel.com/issues

+

And if you'd like to contribute to the site, take a look at the readme.md: https://github.com/HaxeFlixel/haxeflixel.com?tab=readme-ov-file#about

+ + +
+
+
+ + +
+ +
+ + + + + + + + + + + + + diff --git a/blog/index.html b/blog/index.html new file mode 100644 index 000000000..de3d9a1ed --- /dev/null +++ b/blog/index.html @@ -0,0 +1,850 @@ + + + + + + + + + + + The HaxeFlixel Blog | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+

The HaxeFlixel Blog

+
+
+ +
+
+

HaxeFlixel Site Update!

+ +
+ +
+

+ The HaxeFlixel site finally got a bit of a facelift! After 4 years of Docpad being deprecated (we were on an even older version!), and 2 years of the initial "Should we replace docpad?" Github issue raised by RichardBray, we have FINALLY migrated the static site generation code fully off Docpad, and we are now using 11ty to generate th... read more +

+ +
+
+ +
+
+

HaxeFlixel 5.4.0

+ +
+ +
+

+ We've finally released Haxeflixel 5.4.0, our largest release in quite some time, arguably larger than the 5.0.0 release! This release focuses heavily on assets and animations, like the new FlxAsepriteUtil and the new Multi-Atlas system. +What took so long? +We try to release new versions of HaxeFlixel around once a month, and have been, for the mo... read more +

+ +
+
+ +
+
+

Blog Posts are Back

+ +
+ +
+

+ Hello everyone! George, here, gladly announceing the return of the HaxeFlixel blog after a long hiatus. While there have been many ongoing changes to the HaxeFlixel framework, we've sadly neglected to broadcast those changes on the website. Let's take this time to get everybody up to speed with all we've done these last 3 years. +What's New? +Sinc... read more +

+ +
+
+ +
+
+

Newgrounds Game Jam

+ +
+ +
+

+ Newgrounds is hosting a HaxeFlixel game jam with a $1,300 prize pool! The theme is "Alone, Together" and submissions have to be uploaded to Newgrounds by Monday, April 27th with the tag "HaxeFlixelJam" included. For more information, check out their official announcement. + +We also modernized our Tutorial to use Ogmo 3, Visual... read more +

+ +
+
+ +
+
+

HaxeFlixel DragonBones Support

+ +
+ +
+

+ Hi there, I’m Troy (@RouStudios), creator and maintainer of the HaxeFlixel backend for DragonBones. I’m here to write a post about DragonBones support for HaxeFlixel and how to use it. +First of all, what is DragonBones? DragonBones is a free *open source alternative to the popular 2D bone animation tool Spine (which Flixel already has support fo... read more +

+ +
+
+ +
+
+

HaxeFlixel 4.4.0

+ +
+ +
+

+ HaxeFlixel 4.4.0 is now available on Haxelib, adding support for OpenFL 8 and Lime 6.3.0! Breaking changes are mostly limited to blend modes and a slightly different shader syntax. Additionally, 4.4.0 is still fully-backwards-compatible with OpenFL 3.6.1 legacy or next, so even if you don't plan on upgrading to OpenFL 8 just yet, don't let that ... read more +

+ +
+
+ +
+
+

FlxLightPuzzle Demo

+ +
+ +
+

+ We have a new demo made by yours truly Nick: a puzzle game of reflecting light and combining colors. Featuring... +FlxLightPuzzle Demo + +In addition to being a fully playable game, the FlxLightPuzzle Demo heavily features the FlxVector class. Vector math is a nightmare, and I was actually surprised to see how much of it FlxVector handles for you. +... read more +

+ +
+
+ +
+
+

The Flixel Community

+ +
+ +
+

+ So you've downloaded Flixel, skipped around in the tutorial, and are wondering what's next. You could start making that game you've been thinking about. Or, better yet, make that game while also talking to other people who are using Flixel! They're not scary, I promise. +Join the community +There are a number of places where you'll find fellow Fli... read more +

+ +
+
+ +
+
+

Introducing Nick (MSGHero)

+ +
+ +
+

+ Hi everyone! +I'm Nick (@MSGhero16), and I'll be working for the HaxeFlixel community now. My goal is to drum up engagement with our favorite library by writing regular blog posts and creating new demos. +If you're new around these parts, here's a brief intro to what this is all about. +(Haxe)Flixel +HaxeFlixel is a free cross-platform, open-source ... read more +

+ +
+
+ +
+
+

OpenFL 5 compatibility status update

+ +
+ +
+

+ Hey, Beeblerox here! +As you may know, HaxeFlixel is currently stuck with outdated versions of OpenFL and Lime due to some rendering incompatibilities, and updating it has turned out to be more work than expected. I want to give you a quick status update regarding my work towards making Flixel compatible with the latest versions of OpenFL again. +... read more +

+ +
+
+ +
+
+

HaxeFlixel Mechanics

+ +
+ +
+

+ Hey everybody, Tim here to share something with you: Does this sound familiar? + +"I wish I could remember how to do this one, small thing in HaxeFlixel, and that I didn't have to dig through a massive tutorial just to jog my memory." + +Or, how about: + +"What's the 'right' way to handle this, again?" + +Yeah, we've all been there! ... read more +

+ +
+
+ +
+
+

HaxeFlixel 4.2.0

+ +
+ +
+

+ We've just released HaxeFlixel 4.2.0! There are a lot of small additions and improvements, like exposing the length of FlxSound objects or allowing you to configure their endTime. +Apart from that, we also fixed a lot of bugs and took care of some old annoyances, like not being able to control which tweens or timers are paused when entering a sub... read more +

+ +
+
+ +
+
+

Fundraiser 2016

+ +
+ +
+

+ HaxeFlixel is developed by and is now furtherly funded by, a community of +people who have a geniune passion for the project. +We thank everyone for their contributions over the past 5 years, +whether it has been spreading the word, fundraising, admin, testing, +reviewing & submitting code or teaching and supporting others. +All this keeps inspir... read more +

+ +
+
+ +
+
+

HaxeFlixel 4.1.0

+ +
+ +
+

+ HaxeFlixel 4.1.0 has just been released to Haxelib (as well as new versions of flixel-addons, ui and demos)! The full changelog contains a long list of minor improvements and bugfixes. +Unlike previous minor releases, this release is intended to be used as a drop-in-replacement - there are no significant breaking changes. If you do encounter any ... read more +

+ +
+
+ +
+
+

HaxeFlixel 4.0.0

+ +
+ +
+

+ We are proud to announce the release of HaxeFlixel 4.0.0! This is without a doubt the biggest release yet, with nearly 2000 new commits on the core repository alone since the last release. +The highlights of this release are: + +an improved API structure +a refactored rendering system +a much improved gamepad API +improved HTML5 support +improved OpenF... read more +

+ +
+
+ +
+
+

HaxeFlixel Patreon

+ +
+ +
+

+ Hello HaxeFlixel enthusiast, gamedevsam here! +I have some big news to share with the HaxeFlixel community: HaxeFlixel is now on Patreon. +Patreon is a crowd-funding platform that collects monthly donations to support artists and projects that people love. HaxeFlixel has joined Patreon to collect funds in order to reward contributions to the proje... read more +

+ +
+
+ +
+
+

Tilesheet rendering

+ +
+ +
+

+ Hi, gamedevsam here, I'm a developer and evangelist of HaxeFlixel. +The following blog post was written by Beeblerox (the original creator of HaxeFlixel) and was originally posted on his blog as a two part article (part 1 and part 2). In it, he goes into detail on how HaxeFlixel's rendering system is built on top of OpenFL's Tilesheet API. + +I wan... read more +

+ +
+
+ +
+
+

HaxeFlixel now has a blog!

+ +
+ +
+

+ The HaxeFlixel project and it's active community of game dev enthusiasts, have opened this +blog up to post about the latest updates, news and anything awesome happening related to +making games with HaxeFlixel and the projects around it. +Although most of the HaxeFlixel activity happens on Github, Slack chat (ask for an invite) +and the @haxeflixel... read more +

+ +
+
+
+ +
+ + +
+ +
+ + + + + + + + + + + + + diff --git a/cdn-scripts/index.html b/cdn-scripts/index.html new file mode 100644 index 000000000..e7329b1ca --- /dev/null +++ b/cdn-scripts/index.html @@ -0,0 +1,6 @@ + + + diff --git a/demos/BSPMapGen/index.html b/demos/BSPMapGen/index.html new file mode 100644 index 000000000..944d3ec99 --- /dev/null +++ b/demos/BSPMapGen/index.html @@ -0,0 +1,522 @@ + + + + + + + + + + + BSPMapGen | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ BSPMapGen + +
+ +
+ + + +
+

+ +

HaxeFlixel port of Timothy Hely's "Using-BSP-Trees-to-Generate-Game-Maps".

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/BlendModeShaders/index.html b/demos/BlendModeShaders/index.html new file mode 100644 index 000000000..b93d5ad7f --- /dev/null +++ b/demos/BlendModeShaders/index.html @@ -0,0 +1,517 @@ + + + + + + + + + + + BlendModeShaders | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ BlendModeShaders + +
+ +
+ + + +
+

+ +

Example of how some blend modes can be replicated using GLSL shaders.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/Breakout/index.html b/demos/Breakout/index.html new file mode 100644 index 000000000..e17443d90 --- /dev/null +++ b/demos/Breakout/index.html @@ -0,0 +1,525 @@ + + + + + + + + + + + Breakout | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ Breakout + +
+ +
+ + + +
+

+ +

A very simple, but solid Breakout clone originally created by Photonstorm (Richard Davey) in 20 minutes.

+ + + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/Calculator/index.html b/demos/Calculator/index.html new file mode 100644 index 000000000..4fb803167 --- /dev/null +++ b/demos/Calculator/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + Calculator | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ Calculator + +
+ +
+ + + +
+

+ +

An interactive calculator implemented using hscript.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/CollisionAndGrouping/index.html b/demos/CollisionAndGrouping/index.html new file mode 100644 index 000000000..b9510c56b --- /dev/null +++ b/demos/CollisionAndGrouping/index.html @@ -0,0 +1,518 @@ + + + + + + + + + + + CollisionAndGrouping | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ CollisionAndGrouping + +
+ +
+ + + +
+

+ +

A port of the Collision and Grouping demo by Zachary Tarvit featured on flixel.org/features.

+

Game objects in Flixel are can be stored in FlxGroups. Groups can be added to the game state to help automate and organize updating, drawing, collisions, camera control, scroll amounts, and more. When you want to avoid calling resource-intensive functions like FlxG.collide() more than a few times in each game loop, you can use nested groups as a way to simplify those calls. For example, let's say your game objects are divided into three different groups: Apples, Pears, and Bananas. And you want to see if the fruit have landed on the ground yet. You might be tempted to call FlxG.collide() three times: FlxG.collide(Apples, ground); FlxG.collide(Pears,ground); and so on. However, you can create a fourth group, called simply Fruit, and add each of the other groups to it. Then you can just call FlxG.collide(Fruit, ground); and you should see your performance improve notably.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/Colors/index.html b/demos/Colors/index.html new file mode 100644 index 000000000..c921b6cdb --- /dev/null +++ b/demos/Colors/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + Colors | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ Colors + +
+ +
+ + + +
+

+ +

A showcase of the various FlxColor features.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/Cursor/index.html b/demos/Cursor/index.html new file mode 100644 index 000000000..7aeca884d --- /dev/null +++ b/demos/Cursor/index.html @@ -0,0 +1,532 @@ + + + + + + + + + + + Cursor | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ Cursor + +
+ +
+ + + +
+

+ +

A demo showcasing keyboard navigation with a flixel-ui instance. You can navigate +between buttons and click on them, as well as change the allowed input methods.

+

Controls:

+

Mouse: Click on stuff +Keyboard:

+
    +
  • TAB: Tab goes forward, Shift+Tab goes back
  • +
  • ARROWS: Arrows for up/down/left/right
  • +
  • WASD: W,A,S,D keys for up/down/left/right
  • +
  • NUMPAD: Numpad(8,4,6,2) keys for up/down/left/right, when NUMLOCK is on
  • +
+

Check "Wrap" to turn wrapping on and off.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/DynamicShadows/index.html b/demos/DynamicShadows/index.html new file mode 100644 index 000000000..9cf67f7b8 --- /dev/null +++ b/demos/DynamicShadows/index.html @@ -0,0 +1,516 @@ + + + + + + + + + + + DynamicShadows | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ DynamicShadows + +
+ +
+ + + +
+

+ + + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/EZPlatformer/index.html b/demos/EZPlatformer/index.html new file mode 100644 index 000000000..86a28daa2 --- /dev/null +++ b/demos/EZPlatformer/index.html @@ -0,0 +1,526 @@ + + + + + + + + + + + EZPlatformer | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ EZPlatformer + +
+ +
+ + + +
+

+ +

EZPlatformer is a really simple platformer which was originally created by Adam "Atomic" Saltsman as a tutorial for creating platformers with flixel.

+ +

Use WASD / the arrow Keys to move the red square around. Your objective is to collect all coins, at which point an exit appears.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FileBrowse/index.html b/demos/FileBrowse/index.html new file mode 100644 index 000000000..d0edb2fbb --- /dev/null +++ b/demos/FileBrowse/index.html @@ -0,0 +1,522 @@ + + + + + + + + + + + FileBrowse | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FileBrowse + +
+ +
+ + + +
+

+ +

Demonstrates how to use file browsing on both Flash and Native (CPP/Neko) targets. The Flash target uses FileReference.browse(), while the Native target uses the systools.Dialogs.openFile(). The Native targets depend on the systools library, available on haxelibs.

+

Use the mouse wheel to zoom in and out, or the number keys to use a specific zoom level (1-5).

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/Filters/index.html b/demos/Filters/index.html new file mode 100644 index 000000000..242776c47 --- /dev/null +++ b/demos/Filters/index.html @@ -0,0 +1,542 @@ + + + + + + + + + + + Filters | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ Filters + +
+ +
+ + + +
+

+ +

A demo showcasing various filter effects, applied to the game using either FlxG.camera.filters or FlxG.game.filters.

+

Filters in this demo:

+ + + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/Flappybalt/index.html b/demos/Flappybalt/index.html new file mode 100644 index 000000000..fb281036e --- /dev/null +++ b/demos/Flappybalt/index.html @@ -0,0 +1,518 @@ + + + + + + + + + + + Flappybalt | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ Flappybalt + +
+ +
+ + + +
+

+ +

Controls: Spacebar

+

A cross-platform port of AdamAtomic's Flappybalt, converted to Haxe and HaxeFlixel. You can play this on your Android by downloading it from the Google Play Store if you'd like.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlipRotationAnimationTiles/index.html b/demos/FlipRotationAnimationTiles/index.html new file mode 100644 index 000000000..08f2f6990 --- /dev/null +++ b/demos/FlipRotationAnimationTiles/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + FlipRotationAnimationTiles | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlipRotationAnimationTiles + +
+ +
+ + + +
+

+ +

This demo showcases how to use FlxTilemapExt and FlxTileSpecial to flip, rotate and animate tiles.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/Flixius/index.html b/demos/Flixius/index.html new file mode 100644 index 000000000..c17865cc3 --- /dev/null +++ b/demos/Flixius/index.html @@ -0,0 +1,517 @@ + + + + + + + + + + + Flixius | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ Flixius + +
+ +
+ + + +
+

+ +

A side-scrolling shooter. Made by @SeiferTim during a 30-min presentation on how easy it is to make prototypes in HaxeFlixel.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FloodFill/index.html b/demos/FloodFill/index.html new file mode 100644 index 000000000..80197b554 --- /dev/null +++ b/demos/FloodFill/index.html @@ -0,0 +1,520 @@ + + + + + + + + + + + FloodFill | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FloodFill + +
+ +
+ + + +
+

+ + + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxAction/index.html b/demos/FlxAction/index.html new file mode 100644 index 000000000..4185bfccd --- /dev/null +++ b/demos/FlxAction/index.html @@ -0,0 +1,517 @@ + + + + + + + + + + + FlxAction | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ FlxAction + +
+ +
+ + + +
+

+ +

Showcases the flixel.input.actions API added in Flixel 4.6.0.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxAsepriteUtil/index.html b/demos/FlxAsepriteUtil/index.html new file mode 100644 index 000000000..e264129aa --- /dev/null +++ b/demos/FlxAsepriteUtil/index.html @@ -0,0 +1,517 @@ + + + + + + + + + + + FlxAsepriteUtil | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ FlxAsepriteUtil + +
+ +
+ + + +
+

+ +

Showcases loading of an Aseprite Sprite Sheet using flixel.graphics.FlxAsepriteUtil API added in Flixel 5.4.0. This demo uses the loadAseAtlasAndTagsByIndex method to create animations.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxAsyncLoop/index.html b/demos/FlxAsyncLoop/index.html new file mode 100644 index 000000000..6f52a63de --- /dev/null +++ b/demos/FlxAsyncLoop/index.html @@ -0,0 +1,523 @@ + + + + + + + + + + + FlxAsyncLoop | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxAsyncLoop + +
+ +
+ + + +
+

+ +

Demonstration for the FlxAsyncLoop class, created by SeiferTim (Tim I Hely). +This utility allows you to setup a loop in a way that still allows update() and draw() to be called so you can show progress bars or whatever, instead of the game freezing and locking up until the loop has completed. +This demo will generate 5000 random little squares, showing a progress bar as it does so.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxAtlas/index.html b/demos/FlxAtlas/index.html new file mode 100644 index 000000000..6d7993d06 --- /dev/null +++ b/demos/FlxAtlas/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + FlxAtlas | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxAtlas + +
+ +
+ + + +
+

+ +

An example of flixel.graphics.atlas.FlxAtlas.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxBitmapText/index.html b/demos/FlxBitmapText/index.html new file mode 100644 index 000000000..d8bd5631b --- /dev/null +++ b/demos/FlxBitmapText/index.html @@ -0,0 +1,523 @@ + + + + + + + + + + + FlxBitmapText | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ FlxBitmapText + +
+ +
+ + + +
+

+ +

Demo showcasing loading flixel.text.FlxBitmapText and flixel.graphics.frames.FlxBitmapFont in different ways.

+
    +
  • mouseX/mouseY is using FlxBitmapFont.fromXNA()
  • +
  • HELLO WORLD!... is using FlxBitmapFont.fromAngelCode() and loading a .fnt file
  • +
  • ROBOCOP RULES!!! is using FlxBitmapFont.fromMonospace()
  • +
  • You can even define and use Unicode Combining Diacritical Marks! is using FlxBitmapFont.fromAngelCode() and loading a .xml file.
  • +
+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxBunnymark/index.html b/demos/FlxBunnymark/index.html new file mode 100644 index 000000000..48faf6081 --- /dev/null +++ b/demos/FlxBunnymark/index.html @@ -0,0 +1,523 @@ + + + + + + + + + + + FlxBunnyMark | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxBunnyMark + +
+ +
+ + + +
+

+ +

This is a HaxeFlixel port of the BunnyMark Benchmark.

+

The initial BunnyMark was created by Iain Lobb (code) and Amanda Lobb (art), then ported to haxe-NME by Joshua Granick, then enhanced by Philippe Elsass, now ported to HaxeFlixel by BeebleRox, and improved by impaler and Gama11.

+

Flash is limited to software rendering so there is a significant performance improvement when you use cpp targets. Cpp targets make use of drawTiles() GPU Acceleration and on a desktop it can display 10 000's of bunnies with additional variations of alpha and scaling. On the flash target however, rendering with alpha and scaling means a severe performance decrease.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxCamera/index.html b/demos/FlxCamera/index.html new file mode 100644 index 000000000..4c81deefc --- /dev/null +++ b/demos/FlxCamera/index.html @@ -0,0 +1,523 @@ + + + + + + + + + + + FlxCamera | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxCamera + +
+ +
+ + + +
+

+ +

This demo showcases different flixel camera features like zoom, lerp, lead and follow styles.

+

Demo created by ProG4mr after adding camera features : lerp and lead.

+

For full-window zoom out, look at the commented source code, note that fps drop significantly.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxCaveGenerator/index.html b/demos/FlxCaveGenerator/index.html new file mode 100644 index 000000000..45271d3c7 --- /dev/null +++ b/demos/FlxCaveGenerator/index.html @@ -0,0 +1,526 @@ + + + + + + + + + + + FlxCaveGenerator | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxCaveGenerator + +
+ +
+ + + +
+

+ +

A demo showing off the capabilites of FlxCaveGenerator.

+

Generating a cave for a FlxTilemap is really simple:

+
var caveData:String = FlxCaveGenerator.generateCaveString(Width, Height, SmoothingIterations, WallRatio);
+HAXE
+

The String generated can be used directly in FlxTilemap's loadMap() method.

+

You can use WASD or the arrow keys to move the little character around. :)

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxClothSprite/index.html b/demos/FlxClothSprite/index.html new file mode 100644 index 000000000..16062541c --- /dev/null +++ b/demos/FlxClothSprite/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + FlxClothSprite | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxClothSprite + +
+ +
+ + + +
+

+ +

An example of flixel.addons.effects.FlxClothSprite.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxCollisions/index.html b/demos/FlxCollisions/index.html new file mode 100644 index 000000000..d08034d06 --- /dev/null +++ b/demos/FlxCollisions/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + FlxCollisions | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxCollisions + +
+ +
+ + + +
+

+ +

A port of FlxCollisions created by Adam Atomic, showing off flixel's 2D physics capabilities.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxEffectSprite/index.html b/demos/FlxEffectSprite/index.html new file mode 100644 index 000000000..012a3a27e --- /dev/null +++ b/demos/FlxEffectSprite/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + FlxEffectSprite | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxEffectSprite + +
+ +
+ + + +
+

+ +

An example of the flixel.addons.effects.chainable package.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxFSM/index.html b/demos/FlxFSM/index.html new file mode 100644 index 000000000..d0c459a57 --- /dev/null +++ b/demos/FlxFSM/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + FlxFSM | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxFSM + +
+ +
+ + + +
+

+ +

An example game using the finite state machine implementation in flixel.addons.util.FlxFSM.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxGameOfLife/index.html b/demos/FlxGameOfLife/index.html new file mode 100644 index 000000000..5920deac2 --- /dev/null +++ b/demos/FlxGameOfLife/index.html @@ -0,0 +1,528 @@ + + + + + + + + + + + FlxGameOfLife | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxGameOfLife + +
+ +
+ + + +
+

+ +

This is a demonstration of Conway's Game of Life recreated in HaxeFlixel.

+

Every 'step' in the simulation, every cell in the grid is checked, and the following rules are applied to the next generation:

+
    +
  1. Any live cell with fewer than two live neighbors dies, as if by underpopulation.
  2. +
  3. Any live cell with two or three live neighbors lives on to the next generation.
  4. +
  5. Any live cell with more than three live neighbors dies, as if by overpopulation.
  6. +
  7. Any dead cell with exactly three live neighbors becomes a live cell, as if by reproduction.
  8. +
+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxInvaders/index.html b/demos/FlxInvaders/index.html new file mode 100644 index 000000000..3dd7a33c7 --- /dev/null +++ b/demos/FlxInvaders/index.html @@ -0,0 +1,526 @@ + + + + + + + + + + + FlxInvaders | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxInvaders + +
+ +
+ + + +
+

+ +

A simple invaders game in flixel originally created by Adam "Atomic" SaltsmanLink to the original GitHub repo. The source code is extremely well documented and thus very hepful for beginners.

+

Controls:

+

Left / right to move and spacebar to shoot.

+

Sound effects created with ChipTone

+

Music: Sauce-y Space by ninjamuffin99

+

Music Licensed under CC BY 3.0 (link to license)

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxLightPuzzle/index.html b/demos/FlxLightPuzzle/index.html new file mode 100644 index 000000000..8ae659d3a --- /dev/null +++ b/demos/FlxLightPuzzle/index.html @@ -0,0 +1,517 @@ + + + + + + + + + + + FlxLightPuzzle | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ FlxLightPuzzle + +
+ +
+ + + +
+

+ +

A small puzzle game demo game made by MSGhero! Mobile phone compatible

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxMouseEvent/index.html b/demos/FlxMouseEvent/index.html new file mode 100644 index 000000000..eb3428321 --- /dev/null +++ b/demos/FlxMouseEvent/index.html @@ -0,0 +1,532 @@ + + + + + + + + + + + FlxMouseEvent | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxMouseEvent + +
+ +
+ + + +
+

+ +

FlxMouseEvent allows FlxSprites to listen to mouse events like MouseDown, MouseUp, MouseOver and MouseOut.

+

To activate it, simply add sprites and implement the event callbacks:

+
import flixel.input.mouse.FlxMouseEvent;
+
+var sprite = new FlxSprite();
+FlxMouseEvent.add(sprite, onMouseDown, onMouseUp, onMouseOver, onMouseOut);
+
+function onMouseDown(sprite:FlxSprite) {}
+function onMouseUp(sprite:FlxSprite) {}
+function onMouseOver(sprite:FlxSprite) {}
+function onMouseOut(sprite:FlxSprite) {}
+HAXE
+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxNape/index.html b/demos/FlxNape/index.html new file mode 100644 index 000000000..41c2bb332 --- /dev/null +++ b/demos/FlxNape/index.html @@ -0,0 +1,523 @@ + + + + + + + + + + + FlxNape | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxNape + +
+ +
+ + + +
+

+ +

This demo showcases the integration of the Nape Physics Engine with HaxeFlixel.

+

Thanks to ProG4mr for his work with these Demos and his work providing FlxNapeSprite and FlxNapeState. See the flixel-addons repository.

+

Thanks to Henry-T for his amazing CutUp demo!

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxNapeTerrain/index.html b/demos/FlxNapeTerrain/index.html new file mode 100644 index 000000000..f22382b74 --- /dev/null +++ b/demos/FlxNapeTerrain/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + FlxNapeTerrain | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxNapeTerrain + +
+ +
+ + + +
+

+ +

A port of Nape's DestructibleTerrain sample to HaxeFlixel.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxNapeTilemap/index.html b/demos/FlxNapeTilemap/index.html new file mode 100644 index 000000000..cc2962f4c --- /dev/null +++ b/demos/FlxNapeTilemap/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + FlxNapeTilemap | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxNapeTilemap + +
+ +
+ + + +
+

+ +

An example of flixel.addons.nape.FlxNapeTilemap.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxPexParser/index.html b/demos/FlxPexParser/index.html new file mode 100644 index 000000000..01db78d10 --- /dev/null +++ b/demos/FlxPexParser/index.html @@ -0,0 +1,522 @@ + + + + + + + + + + + FlxPexParser | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxPexParser + +
+ +
+ + + +
+

+ +

An example of flixel.addons.editors.pex.FlxPexParser. It creates a FlxEmitter from a .pex file created with the Pex Particle Editor.

+

You can drag your mouse to move the fireball.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxPieDial/index.html b/demos/FlxPieDial/index.html new file mode 100644 index 000000000..c0a11022e --- /dev/null +++ b/demos/FlxPieDial/index.html @@ -0,0 +1,517 @@ + + + + + + + + + + + FlxPieDial | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ FlxPieDial + +
+ +
+ + + +
+

+ +

An example of flixel.addons.display.FlxPieDial.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxPongApi/index.html b/demos/FlxPongApi/index.html new file mode 100644 index 000000000..7ba430243 --- /dev/null +++ b/demos/FlxPongApi/index.html @@ -0,0 +1,518 @@ + + + + + + + + + + + FlxPongApi | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ FlxPongApi + +
+ +
+ + + +
+

+ +

FlxPongApi demonstrates usage of the FlxGameJolt class in the flixel-addons package, which allows for simple communication with the GameJolt API. The gameplay itself is a sort of roguelike Pong game with various obstacles and enemy types that are encountered as the player progresses. The game is very simple visually, with no art assets and only four colors, with those colors selected programmatically and change very time you play.

+

You can play FlxPongApi on GameJolt here to see all the functions in action. You can view the source code for FlxGameJolt here.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxRandom/index.html b/demos/FlxRandom/index.html new file mode 100644 index 000000000..446491c2c --- /dev/null +++ b/demos/FlxRandom/index.html @@ -0,0 +1,523 @@ + + + + + + + + + + + FlxRandom | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxRandom + +
+ +
+ + + +
+

+ +

This is simply a collection of functions to test the updated FlxRandom class in HaxeFlixel.

+

The buttons on the right side of the display can be used to run a series of tests relating to each function of FlxRandom. Most of the tests will run the same function many times for benchmarking purposes. Others will compare the new class to the previous FlxRandom (which is stored in the source folder as OldFlxRandom), the new FlxRandom without inline, or pure Math.random().

+

Some tests may take some time to run, please be patient. Note that the 15-second script timeout has been overridden and set to 60 seconds.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxScene/index.html b/demos/FlxScene/index.html new file mode 100644 index 000000000..bd8fd6980 --- /dev/null +++ b/demos/FlxScene/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + FlxScene | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxScene + +
+ +
+ + + +
+

+ +

An example of flixel.addons.util.FlxScene.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxShape/index.html b/demos/FlxShape/index.html new file mode 100644 index 000000000..546354cc5 --- /dev/null +++ b/demos/FlxShape/index.html @@ -0,0 +1,517 @@ + + + + + + + + + + + FlxShape | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ FlxShape + +
+ +
+ + + +
+

+ +

An example of the flixel.addons.display.shape package.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxSimplex/index.html b/demos/FlxSimplex/index.html new file mode 100644 index 000000000..07361c4d9 --- /dev/null +++ b/demos/FlxSimplex/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + FlxSimplex | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxSimplex + +
+ +
+ + + +
+

+ +

Showcases flixel.addons.util.FlxSimplex (added in flixel-addons 2.7.0).

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxSkewedSprite/index.html b/demos/FlxSkewedSprite/index.html new file mode 100644 index 000000000..800696415 --- /dev/null +++ b/demos/FlxSkewedSprite/index.html @@ -0,0 +1,517 @@ + + + + + + + + + + + FlxSkewedSprite | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ FlxSkewedSprite + +
+ +
+ + + +
+

+ +

This is a demo of the FlxSkewedSprite class by Beeblerox. As you probably guessed, it allows you to skew sprites.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxSnake/index.html b/demos/FlxSnake/index.html new file mode 100644 index 000000000..4c9f2dfc5 --- /dev/null +++ b/demos/FlxSnake/index.html @@ -0,0 +1,523 @@ + + + + + + + + + + + FlxSnake | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxSnake + +
+ +
+ + + +
+

+ +

A basic snake game in flixel. Originally created by photonstorm, later ported to HaxeFlixel. Has been largely rewritten by Gama11.

+

Controls:

+

Arrow keys or WASD to control the snake's movement.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxSound/index.html b/demos/FlxSound/index.html new file mode 100644 index 000000000..f8bfeaaff --- /dev/null +++ b/demos/FlxSound/index.html @@ -0,0 +1,523 @@ + + + + + + + + + + + FlxSound | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxSound + +
+ +
+ + + +
+

+ +

Shows how to use flixel.sound.FlxSound, or rather, FlxG.sound, to play and control music and sounds.

+

"Sound Effects and Music" section in the Cheat Sheet documentation is a useful reference.

+

UI is created with flixel-ui

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxSpine/index.html b/demos/FlxSpine/index.html new file mode 100644 index 000000000..ae5b39173 --- /dev/null +++ b/demos/FlxSpine/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + FlxSpine | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxSpine + +
+ +
+ + + +
+

+ +

This is a demo showing off the use of the FlxSpine class to integrate the Spine bone based animation system into HaxeFlixel.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxSpriteFilters/index.html b/demos/FlxSpriteFilters/index.html new file mode 100644 index 000000000..260269087 --- /dev/null +++ b/demos/FlxSpriteFilters/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + FlxSpriteFilters | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxSpriteFilters + +
+ +
+ + + +
+

+ +

This demo shows bitmap filters being applied and updated on FlxSprites using the FlxSpriteFilter class.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxSubState/index.html b/demos/FlxSubState/index.html new file mode 100644 index 000000000..bf8f2092e --- /dev/null +++ b/demos/FlxSubState/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + FlxSubState | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxSubState + +
+ +
+ + + +
+

+ +

An example of flixel.FlxSubState.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxTeroids/index.html b/demos/FlxTeroids/index.html new file mode 100644 index 000000000..067df3515 --- /dev/null +++ b/demos/FlxTeroids/index.html @@ -0,0 +1,524 @@ + + + + + + + + + + + FlxTeroids | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxTeroids + +
+ +
+ + + +
+

+ +

FlxTeroids is a simple Asteroids clone. The original GitHub repo by Adam "Atomic" Saltsman can be found here.

+

Controls:

+

Move - Arrow keys

+

Shoot -Space

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxTextFormat/index.html b/demos/FlxTextFormat/index.html new file mode 100644 index 000000000..4211d9f33 --- /dev/null +++ b/demos/FlxTextFormat/index.html @@ -0,0 +1,517 @@ + + + + + + + + + + + FlxTextFormat | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ FlxTextFormat + +
+ +
+ + + +
+

+ +

FlxTextFormats allow the use of different colors, border colors and font weights on the same FlxText.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxTilemapExt/index.html b/demos/FlxTilemapExt/index.html new file mode 100644 index 000000000..b270a7a41 --- /dev/null +++ b/demos/FlxTilemapExt/index.html @@ -0,0 +1,523 @@ + + + + + + + + + + + FlxTilemapExt | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxTilemapExt + +
+ +
+ + + +
+

+ +

A demo of the sloped tiles possible by using the FlxTilemapExt class created by Peter Christiansen. The original demo can be found here, the original forum thread is here.

+

Controls:

+

Move - WASD / Arrow keys

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxTrailArea/index.html b/demos/FlxTrailArea/index.html new file mode 100644 index 000000000..281c19f1e --- /dev/null +++ b/demos/FlxTrailArea/index.html @@ -0,0 +1,522 @@ + + + + + + + + + + + FlxTrailArea | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxTrailArea + +
+ +
+ + + +
+

+ +

This demo shows the effects that can be accomplished with FlxTrailArea. +For every FlxSprite that is added to the area, a trail effect will be rendered on the area. It's more efficient than a regular FlxTrail due to the fact that it only uses a single bitmap.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxTween/index.html b/demos/FlxTween/index.html new file mode 100644 index 000000000..1456ef65b --- /dev/null +++ b/demos/FlxTween/index.html @@ -0,0 +1,567 @@ + + + + + + + + + + + FlxTween | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxTween + +
+ +
+ + + +
+

+ +

HaxeFlixel has advanced tweening built in for interpolation over time.

+

Tweens are a useful part of any framework and its applications are many. It can be game object movements, color changes and even tweening variables over time. The current tween types include:

+
    +
  • VarTween
  • +
  • MultiVarTween
  • +
  • AngleTween
  • +
  • ColorTween
  • +
  • NumTween
  • +
  • LinearMotion
  • +
  • LinearPath
  • +
  • CircularMotion
  • +
  • CubicMotion
  • +
  • QuadMotion
  • +
  • QuadPath
  • +
+

There is also an impressive choice of Ease types for every Tween type to choose from:

+
    +
  • quadIn
  • +
  • quadOut
  • +
  • cubeIn
  • +
  • cubeOut
  • +
  • cubeInOut
  • +
  • quartIn
  • +
  • quartOut
  • +
  • quartInOut
  • +
  • quintIn
  • +
  • quintOut
  • +
  • quintInOut
  • +
  • sineIn
  • +
  • sineOut
  • +
  • sineInOut
  • +
  • bounceIn
  • +
  • bounceOut
  • +
  • bounceInOut
  • +
  • circIn
  • +
  • circOut
  • +
  • circInOut
  • +
  • expoIn
  • +
  • expoOut
  • +
  • expoInOut
  • +
  • backIn
  • +
  • backOut
  • +
  • backInOut
  • +
  • elasticIn
  • +
  • elasticOut
  • +
  • elasticInOut
  • +
+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FlxTypeText/index.html b/demos/FlxTypeText/index.html new file mode 100644 index 000000000..d229381f2 --- /dev/null +++ b/demos/FlxTypeText/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + FlxTypeText | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FlxTypeText + +
+ +
+ + + +
+

+ +

This demo showcases the effects that can be accomplished with the use of the FlxTypeText class.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/FrameCollections/index.html b/demos/FrameCollections/index.html new file mode 100644 index 000000000..4ffaa1619 --- /dev/null +++ b/demos/FrameCollections/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + FrameCollections | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ FrameCollections + +
+ +
+ + + +
+

+ +

An example of the flixel.graphics.frames package.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/GamepadTest/index.html b/demos/GamepadTest/index.html new file mode 100644 index 000000000..851b527a8 --- /dev/null +++ b/demos/GamepadTest/index.html @@ -0,0 +1,517 @@ + + + + + + + + + + + GamepadTest | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ GamepadTest + +
+ +
+ + + +
+

+ +

A demo showcasing HaxeFlixel's gamepad support.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/GridMovement/index.html b/demos/GridMovement/index.html new file mode 100644 index 000000000..e88e6026b --- /dev/null +++ b/demos/GridMovement/index.html @@ -0,0 +1,518 @@ + + + + + + + + + + + GridMovement | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ GridMovement + +
+ +
+ + + +
+

+ +

This showcases a classic retro grid movement.

+

Thanks to BuzzJeux.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/HeatmapPathfinding/index.html b/demos/HeatmapPathfinding/index.html new file mode 100644 index 000000000..bfb71d8cd --- /dev/null +++ b/demos/HeatmapPathfinding/index.html @@ -0,0 +1,527 @@ + + + + + + + + + + + HeatmapPathfinding | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ HeatmapPathfinding + +
+ +
+ + + +
+

+ +

A demo showcasing an efficient method to have a lot of objects path to one target, using a heatmap. Inspired by this Gamasutra article.

+

Controls:

+
    +
  • Drag objects to place them
  • +
  • Elephants seek the McGuffin when placed
  • +
  • Click to add or remove walls
  • +
+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/MinimalistTD/index.html b/demos/MinimalistTD/index.html new file mode 100644 index 000000000..e1483a88c --- /dev/null +++ b/demos/MinimalistTD/index.html @@ -0,0 +1,522 @@ + + + + + + + + + + + MinimalistTD | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ MinimalistTD + +
+ +
+ + + +
+

+ +

As the name would imply, this is a minimalist tower defense game. This was originally created by Gama11 for Ludum Dare 26. You can find the original source code for that here.

+

This was ported to the latest version of HaxeFlixel and OpenFL by Steve Richey.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/Mode/index.html b/demos/Mode/index.html new file mode 100644 index 000000000..089269f6e --- /dev/null +++ b/demos/Mode/index.html @@ -0,0 +1,527 @@ + + + + + + + + + + + Mode | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ Mode + +
+ +
+ + + +
+

+ +

"A small (but sadly not that simple) demo game built on the flixel framework" by Adam "Atomic" Saltsman, which has later been ported to HaxeFlixel. You can find the GitHub repo of the original AS3 version here.

+

Controls:

+
    +
  • Arrow keys - Move
  • +
  • X - Jump
  • +
  • C - Shoot
  • +
+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/MosaicEffect/index.html b/demos/MosaicEffect/index.html new file mode 100644 index 000000000..cbfe6bba2 --- /dev/null +++ b/demos/MosaicEffect/index.html @@ -0,0 +1,517 @@ + + + + + + + + + + + MosaicEffect | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ MosaicEffect + +
+ +
+ + + +
+

+ +

Example of applying a GLSL shader to a FlxSprite to achieve a mosaic / pixelation effect.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/Parallax/index.html b/demos/Parallax/index.html new file mode 100644 index 000000000..c7f99dd74 --- /dev/null +++ b/demos/Parallax/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + Parallax | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ Parallax + +
+ +
+ + + +
+

+ +

This demo builds several layers of randomized objects (FlxTileblock and FlxSprite) with varying scrollFactor values to achieve a parallax effect when scrolling.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/Particles/index.html b/demos/Particles/index.html new file mode 100644 index 000000000..40edf2069 --- /dev/null +++ b/demos/Particles/index.html @@ -0,0 +1,522 @@ + + + + + + + + + + + Particles | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ Particles + +
+ +
+ + + +
+

+ +

A port of the Particles Demo by Zachary Tarvit featured on flixel.org/features.

+

In games, "particles" and "particle emitters" refer to a whole class of behaviors that are usually used for special effects and flavor. The "emitter" is the source and manager of the actual "particle" objects that are spewed out and/or floating around. FlxParticle is just an extension of FlxSprite, and FlxEmitter is just an extension of FlxGroup, so a particle system in Flixel isn't really that different from any normal group of sprites. It just adds some special behavior for creating and launching particles, and the particles themselves have some optional, special behavior to bounce more believably in platformer situations. FlxEmitter also has built-in variables that let you specify velocity ranges, rotation speeds, gravity, collision behaviors, and more. 

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/Pathfinding/index.html b/demos/Pathfinding/index.html new file mode 100644 index 000000000..e44151039 --- /dev/null +++ b/demos/Pathfinding/index.html @@ -0,0 +1,518 @@ + + + + + + + + + + + Pathfinding | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ Pathfinding + +
+ +
+ + + +
+

+ +

A port and improvement of the Pathfinding Demo by Bengsiswanto Hendrawan  featured on flixel.org/features.

+

Pathfinding just means figuring out how to (or if you can) get from A to B. FlxTilemap has a new function FlxTilemap.findPath() which returns a FlxPath object, which is just a collection of "nodes", or FlxPoint objects. Think of it as a list of (X,Y) coordinates in space, going from the starting location to the ending location. Once you have a valid path, you can pass that data to any FlxPath, along with the object it should follow. That function tells the object to start following the path, and you can specify the speed, direction (backward, yoyo, etc), and even tell the object to only follow the path horizontally (handy for objects with gravity applied). These flags mean that you can use paths for more than just character AI - they're also useful for elevators, moving platforms, and looping background animations. 

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/PixelPerfectCollision/index.html b/demos/PixelPerfectCollision/index.html new file mode 100644 index 000000000..6def6344c --- /dev/null +++ b/demos/PixelPerfectCollision/index.html @@ -0,0 +1,517 @@ + + + + + + + + + + + PixelPerfectCollision | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ PixelPerfectCollision + +
+ +
+ + + +
+

+ +

This demo showcases FlxG.pixelPerfectOverlap() / FlxCollision.pixelPerfectCheck().

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/ProjectJumper/index.html b/demos/ProjectJumper/index.html new file mode 100644 index 000000000..5883c2bd2 --- /dev/null +++ b/demos/ProjectJumper/index.html @@ -0,0 +1,583 @@ + + + + + + + + + + + ProjectJumper | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ ProjectJumper + +
+ +
+ + + +
+

+ +

"Project Jumper" has been created by Chipacabra as a tutorial on developing a platformer game with flixel and has later been ported to Haxe(Flixel).

+

Controls:

+
    +
  • Move - W + A / Left + Right
  • +
  • Shoot - J / X
  • +
  • Jump - L / C
  • +
  • Select entry on the menu - space
  • +
+

The original tutorial series by Chipacabra:

+

Note that this tutorial is was originally written for AS3-Flixel. The concepts are still valid for HaxeFlixel you can see the entire demo was ported to HaxeFlixel to work the same.

+ + + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/RPGInterface/index.html b/demos/RPGInterface/index.html new file mode 100644 index 000000000..56c0af47a --- /dev/null +++ b/demos/RPGInterface/index.html @@ -0,0 +1,527 @@ + + + + + + + + + + + RPGInterface | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ RPGInterface + +
+ +
+ + + +
+

+ +

This is a simple demonstration of the flixel-ui engine in a fictional RPG.

+

It demonstrates how you can create flixel-ui's from xml layout files, and is also integrated with the firetongue localization library. Not only does this do automatic text replacements, but it also lets you specify UI tweaks for each locale. This example uses both English and Norwegian.

+

The Norwegian text on certain buttons is too long and would wrap in an ugly way without adjustment, so there are several tweaks to extend button widths if the current locale is Norwegian.

+

flixel-ui has many common UI widgets available, including:

+
    +
  • Buttons (both normal and toggle-able)
  • +
  • Checkboxes
  • +
  • Radio button groups
  • +
  • 9-slice chrome, in both scaling and tiling varieties
  • +
  • Tabbed menus (which can contain other flixel-ui widgets)
  • +
+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/Replay/index.html b/demos/Replay/index.html new file mode 100644 index 000000000..cfdcef114 --- /dev/null +++ b/demos/Replay/index.html @@ -0,0 +1,518 @@ + + + + + + + + + + + Replay | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ Replay + +
+ +
+ + + +
+

+ +

A port of the Replay demo by Guoboism featured on flixel.org/features..

+

Replays are a powerful new feature in Flixel. Replays are essentially a list of what keyboard keys were pressed, and what mouse inputs were given, during a specific time frame. Because Flixel is largely deterministic, we can use that information to recreate a gameplay session that someone else recorded, as long as we have the same SWF. Replays can be used for debugging, arcade-style "attract modes" or in-game demos, and even for cutscenes. Replays can be manipulated using the "VCR" panel on the debugger overlay, or directly through functions like FlxG.vcr.loadReplay(), FlxG.vcr.startRecording(), and FlxG.vcr.reloadReplay(). Adventurous game makers can also check out the more complex Mode source code to see an example of loading a replay from a file to create an "attract mode". 

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/Revenge/index.html b/demos/Revenge/index.html new file mode 100644 index 000000000..17cd5e112 --- /dev/null +++ b/demos/Revenge/index.html @@ -0,0 +1,523 @@ + + + + + + + + + + + Revenge | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ Revenge + +
+ +
+ + + +
+

+ +

This is a port of Revenge by Yadu Rajiv. You can find a presentation by him on making games with flixel here.

+

Controls:

+

Move - WASD or arrow keys

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/Save/index.html b/demos/Save/index.html new file mode 100644 index 000000000..21652d528 --- /dev/null +++ b/demos/Save/index.html @@ -0,0 +1,518 @@ + + + + + + + + + + + Save | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ Save + +
+ +
+ + + +
+

+ +

A port of the Save Demo by Zachary Tarvit featured on flixel.org/features.

+

Flash includes a simple way to save data locally, and the FlxSave object allows you to interface with it. This system is not ideal for all things; for example, if you are doing online high scores, this won't really work. If you want players to be able to move and trade save game files, this isn't a good fit either. However, for fast and simple saving of local data, especially things like unlocked progress or user preferences, FlxSave is an easy and built-in option.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/ScaleModes/index.html b/demos/ScaleModes/index.html new file mode 100644 index 000000000..9b82a2b2e --- /dev/null +++ b/demos/ScaleModes/index.html @@ -0,0 +1,517 @@ + + + + + + + + + + + ScaleModes | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ ScaleModes + +
+ +
+ + + +
+

+ +

This demo showcases HaxeFlixel's scale modes, which are especially handy for mobile devices where a lot of different screen sizes have to be accounted for, or desktop games that can be resized.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/SetTileProperties/index.html b/demos/SetTileProperties/index.html new file mode 100644 index 000000000..ce110ce78 --- /dev/null +++ b/demos/SetTileProperties/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + SetTileProperties | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ SetTileProperties + +
+ +
+ + + +
+

+ +

Showases the setTileProperties() method of FlxTilemap.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/SplitScreen/index.html b/demos/SplitScreen/index.html new file mode 100644 index 000000000..59e202fa5 --- /dev/null +++ b/demos/SplitScreen/index.html @@ -0,0 +1,519 @@ + + + + + + + + + + + SplitScreen | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ SplitScreen + +
+ +
+ + + +
+

+ +

A port and improvement of the Split Screen demo by Philippe Mongeau featured on flixel.org/features.

+

One of the new features in Flixel is the introduction of a flexible and powerful camera class called (unsurprisingly) FlxCamera. By default, a new Flixel game project starts with one camera that is the same size as the Flash Player window, which can be referenced at FlxG.camera. You can replace that camera or add additional cameras to create effects like "split screen" views, or "picture in picture" style displays, or even mini-maps.

+

Each camera is an independent display object, with its own zoom, color tint, rotation, and scaling values. Finally, each game object maintains its own camera list, so you can easily instruct certain objects to only display on certain cameras. Adventurous game makers can also check out the more complex Mode source code for more ways to use cameras in-game.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/TexturePackerAtlas/index.html b/demos/TexturePackerAtlas/index.html new file mode 100644 index 000000000..6fffe807c --- /dev/null +++ b/demos/TexturePackerAtlas/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + TexturePackerAtlas | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ TexturePackerAtlas + +
+ +
+ + + +
+

+ +

This demo showcases how to load TexturePacker data with a FlxSprite.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/TileMap/index.html b/demos/TileMap/index.html new file mode 100644 index 000000000..e9d4b14b4 --- /dev/null +++ b/demos/TileMap/index.html @@ -0,0 +1,518 @@ + + + + + + + + + + + Tilemap | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ Tilemap + +
+ +
+ + + +
+

+ +

A port and improvement of the Tilemap demo by Tim Plummer featured on flixel.org/features.

+

Flixel's FlxTilemap class was inspired by old video games, in which the environment was constructed using a grid of square "tiles". Each grid cell gets a number, or index, which refers to a particular square graphic. That tile graphic is then placed at the appropriate grid number. Tilemaps have many advantages: it is easy to figure out what tiles should be drawn on screen, what tiles an object overlaps, and what special properties each tile might have. Flixel also includes some built-in algorithms for automatically placing wall tiles and floor tiles based on a simple binary (1s and 0s) array of tile data. It is a simple system with a lot of flexibility, which makes it perfect for rapid prototyping.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/TiledEditor/index.html b/demos/TiledEditor/index.html new file mode 100644 index 000000000..712c156fa --- /dev/null +++ b/demos/TiledEditor/index.html @@ -0,0 +1,526 @@ + + + + + + + + + + + TiledEditor | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ TiledEditor + +
+ +
+ + + +
+

+ +

This sample shows how to load a map from the Tiled Map Editor.

+

Demo Controls:

+
    +
  • Arrow Keys - Move
  • +
  • Space - Jump
  • +
+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/Tooltips/index.html b/demos/Tooltips/index.html new file mode 100644 index 000000000..ba49e9fef --- /dev/null +++ b/demos/Tooltips/index.html @@ -0,0 +1,517 @@ + + + + + + + + + + + Tooltips | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + +
+ +
+
+
+ +

+ Tooltips + +
+ +
+ + + +
+

+ +

An example showcasing how tooltips can be used in flixel-ui.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/Transitions/index.html b/demos/Transitions/index.html new file mode 100644 index 000000000..1ae57b25c --- /dev/null +++ b/demos/Transitions/index.html @@ -0,0 +1,521 @@ + + + + + + + + + + + Transitions | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ Transitions + +
+ +
+ + + +
+

+ +

A showcase of the transition effects possible with the flixel.addons.effect.transition package.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/TurnBasedRPG/index.html b/demos/TurnBasedRPG/index.html new file mode 100644 index 000000000..6db0900ab --- /dev/null +++ b/demos/TurnBasedRPG/index.html @@ -0,0 +1,523 @@ + + + + + + + + + + + TurnBasedRPG | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + +
+ +
+
+
+ +

+ TurnBasedRPG + +
+ +
+ + + +
+

+ +

The Turn Based RPG game from this tutorial by SeiferTim.

+ + +
+
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/demos/index.html b/demos/index.html new file mode 100644 index 000000000..8c549fc7f --- /dev/null +++ b/demos/index.html @@ -0,0 +1,1068 @@ + + + + + + + + + + + Demos | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Demos + +

+ +
+ + +

BSPMapGen

+ + {{demo.data.title}} +
+ + +

BlendModeShaders

+ + {{demo.data.title}} +
+ + +

Breakout

+ + {{demo.data.title}} +
+ + +

Calculator

+ + {{demo.data.title}} +
+ + +

CollisionAndGrouping

+ + {{demo.data.title}} +
+ + +

Colors

+ + {{demo.data.title}} +
+ + +

Cursor

+ + {{demo.data.title}} +
+ + +

DynamicShadows

+ + {{demo.data.title}} +
+ + +

EZPlatformer

+ + {{demo.data.title}} +
+ + +

FileBrowse

+ + {{demo.data.title}} +
+ + +

Filters

+ + {{demo.data.title}} +
+ + +

Flappybalt

+ + {{demo.data.title}} +
+ + +

FlipRotationAnimationTiles

+ + {{demo.data.title}} +
+ + +

Flixius

+ + {{demo.data.title}} +
+ + +

FloodFill

+ + {{demo.data.title}} +
+ + +

FlxAction

+ + {{demo.data.title}} +
+ + +

FlxAsepriteUtil

+ + {{demo.data.title}} +
+ + +

FlxAsyncLoop

+ + {{demo.data.title}} +
+ + +

FlxAtlas

+ + {{demo.data.title}} +
+ + +

FlxBitmapText

+ + {{demo.data.title}} +
+ + +

FlxBunnyMark

+ + {{demo.data.title}} +
+ + +

FlxCamera

+ + {{demo.data.title}} +
+ + +

FlxCaveGenerator

+ + {{demo.data.title}} +
+ + +

FlxClothSprite

+ + {{demo.data.title}} +
+ + +

FlxCollisions

+ + {{demo.data.title}} +
+ + +

FlxEffectSprite

+ + {{demo.data.title}} +
+ + +

FlxFSM

+ + {{demo.data.title}} +
+ + +

FlxGameOfLife

+ + {{demo.data.title}} +
+ + +

FlxInvaders

+ + {{demo.data.title}} +
+ + +

FlxLightPuzzle

+ + {{demo.data.title}} +
+ + +

FlxMouseEvent

+ + {{demo.data.title}} +
+ + +

FlxNape

+ + {{demo.data.title}} +
+ + +

FlxNapeTerrain

+ + {{demo.data.title}} +
+ + +

FlxNapeTilemap

+ + {{demo.data.title}} +
+ + +

FlxPexParser

+ + {{demo.data.title}} +
+ + +

FlxPieDial

+ + {{demo.data.title}} +
+ + +

FlxPongApi

+ + {{demo.data.title}} +
+ + +

FlxRandom

+ + {{demo.data.title}} +
+ + +

FlxScene

+ + {{demo.data.title}} +
+ + +

FlxShape

+ + {{demo.data.title}} +
+ + +

FlxSimplex

+ + {{demo.data.title}} +
+ + +

FlxSkewedSprite

+ + {{demo.data.title}} +
+ + +

FlxSnake

+ + {{demo.data.title}} +
+ + +

FlxSound

+ + {{demo.data.title}} +
+ + +

FlxSpine

+ + {{demo.data.title}} +
+ + +

FlxSpriteFilters

+ + {{demo.data.title}} +
+ + +

FlxSubState

+ + {{demo.data.title}} +
+ + +

FlxTeroids

+ + {{demo.data.title}} +
+ + +

FlxTextFormat

+ + {{demo.data.title}} +
+ + +

FlxTilemapExt

+ + {{demo.data.title}} +
+ + +

FlxTrailArea

+ + {{demo.data.title}} +
+ + +

FlxTween

+ + {{demo.data.title}} +
+ + +

FlxTypeText

+ + {{demo.data.title}} +
+ + +

FrameCollections

+ + {{demo.data.title}} +
+ + +

GamepadTest

+ + {{demo.data.title}} +
+ + +

GridMovement

+ + {{demo.data.title}} +
+ + +

HeatmapPathfinding

+ + {{demo.data.title}} +
+ + +

MinimalistTD

+ + {{demo.data.title}} +
+ + +

Mode

+ + {{demo.data.title}} +
+ + +

MosaicEffect

+ + {{demo.data.title}} +
+ + +

Parallax

+ + {{demo.data.title}} +
+ + +

Particles

+ + {{demo.data.title}} +
+ + +

Pathfinding

+ + {{demo.data.title}} +
+ + +

PixelPerfectCollision

+ + {{demo.data.title}} +
+ + +

ProjectJumper

+ + {{demo.data.title}} +
+ + +

RPGInterface

+ + {{demo.data.title}} +
+ + +

Replay

+ + {{demo.data.title}} +
+ + +

Revenge

+ + {{demo.data.title}} +
+ + +

Save

+ + {{demo.data.title}} +
+ + +

ScaleModes

+ + {{demo.data.title}} +
+ + +

SetTileProperties

+ + {{demo.data.title}} +
+ + +

SplitScreen

+ + {{demo.data.title}} +
+ + +

TexturePackerAtlas

+ + {{demo.data.title}} +
+ + +

Tilemap

+ + {{demo.data.title}} +
+ + +

TiledEditor

+ + {{demo.data.title}} +
+ + +

Tooltips

+ + {{demo.data.title}} +
+ + +

Transitions

+ + {{demo.data.title}} +
+ + +

TurnBasedRPG

+ + {{demo.data.title}} +
+ +
+ + +
+ + + + + + + + + + + + + diff --git a/documentation/about/index.html b/documentation/about/index.html new file mode 100644 index 000000000..cc709cc47 --- /dev/null +++ b/documentation/about/index.html @@ -0,0 +1,1134 @@ + + + + + + + + + + + About | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

About

+ +

HaxeFlixel is an open source 2D game engine written for use with the Open Flash Library and the Haxe Toolkit, it is completely free for personal or commercial use. It enables multi-platform development for native targets on mobile and desktop as well as Flash and HTML5 on web platforms.

+

This project was founded by Alexander Hohlov, also known on Beeblerox on GitHub, who continues to be the project lead for the HaxeFlixel Organisation group. The project itself also has an active community with contributions from highly valued developers (by GitHub names) GameDevSam, impaler, Werdn, ProG4mr, Gama11, sergey-miryanov and more.

+
+

Haxe and OpenFL improves the longevity and opportunities for your Flixel Games.

+
+

HaxeFlixel is largely based on the AS3 version of Flixel written by Adam “Atomic” Saltsman. One of the major motivations for creating HaxeFlixel is overcoming the limitations of the ActionScript 3 language and the Adobe Flash and AIR runtime targets. HaxeFlixel has been able to incorporate and continues to add new language features of Haxe and incorporate exciting new runtime targets through OpenFL.

+

The aim of this website is to provide HaxeFlixel with a friendly and connected web presence. It has been developed by Chris Decoster with great input from the community. It provides a place for experienced developers and beginners alike, to easily share their experiences in developing and learning how to make games. We have seen the website form a central location to share resources and improve HaxeFlixel itself.

+

Everyone is highly encouraged to contribute to HaxeFlixel itself and the resources on this website.

+

+
+
+

Features Overview

+
    +
  • Display thousands of moving objects
  • +
  • Basic collisions between objects
  • +
  • Group objects together for simplicity
  • +
  • Easily generate and emit particles
  • +
  • Create game levels using Tilemaps
  • +
  • Text display and Bitmap Fonts
  • +
  • Math & Color utilities
  • +
  • Record and play back replays
  • +
  • Powerful interactive debugger
  • +
  • Path finding and following
  • +
  • Easy object recycling
  • +
+
+
+

Enhancements over AS3

+
    +
  • Use of a robust and powerful open source language [Haxe](http://www.haxe.org)
  • +
  • Cross platform development to Linux, Mac and Windows
  • +
  • Compile to Mobile and Desktop targets with native code
  • +
  • Impressive Native Performance using GPU acceleration
  • +
  • Advanced Physics with inbuilt Nape support
  • +
  • Improved debugger and interactive console
  • +
  • Texture batching and cache enhancements
  • +
  • Access to OpenFL native extensions
  • +
  • Flexible Asset Management System
  • +
  • Integrated Tweening system
  • +
+
+
+

Core Members

+
    +

  • + +

    Beeblerox

    +
    + +

    The founding member and Author of HaxeFlixel, Alexander completed the first version of HaxeFlixel during 2011, his work is the reason for the project's success.

    +
  • +
  • + +

    Chris

    +
    + +

    Chris is a generalist developer who has worked on various features and bug fixes for the engine and tools. Chris is also responsible for our logo, website and forum and is a long time member of the project.

    +
  • +
  • + +

    GameDevSam

    +
    + +

    Sam is a formidable programmer who spends his working days doing GUI programming with AAA titles. Sam is also a passionate Indie developer and community organiser in the Baltimore area. He is responsible for many optimisations and improvements to the engine and has been a part of HaxeFlixel shortly after it began.

    +
  • +
  • + +

    Gama11

    +
    + +

    Gama11 is a highly valued contributor who has taken great pride in making our codebase consistent and structured. He took the lead on the HaxeFlixel 3.x API refactor and improvements to the codebase structure general.

    +
  • +
  • + +

    Larsiusprime

    +
    + +

    Lars is veteran Flixel developer who is best known for his main Indie game Defender's Quest. Lars is also the main dev behind making the flixel-ui framework.

    +
  • +
  • + +

    ProG4mr

    +
    + +

    Tiago is the programmer to thank for our Nape Physics support. Tiago has a flair for great demos and style and is a great multi talented developer.

    +
  • +
  • + +

    Sergey Miryanov

    +
    + +

    Sergey is an accomplished programmer who is a highly valued voice in discussions and planning for changes in the codebase. Sergey is a long time participator in the HaxeFlixel project.

    +
  • +
+ + + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/actions/index.html b/documentation/actions/index.html new file mode 100644 index 000000000..4c606e510 --- /dev/null +++ b/documentation/actions/index.html @@ -0,0 +1,1303 @@ + + + + + + + + + + + Actions | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Actions

+ +

Players & designers care about actions (Mario jumps, Samus shoots, Captain +Falcon turns, brakes, and accelerates), whereas computers care about +inputs (The W key is PRESSED, the left mouse button was JUST_RELEASED, +gamepad #2's analog stick is MOVED with values x=0.4, y=-0.5).

+

The FlxAction API provides several benefits over handling every input case +directly:

+
    +
  • Declutter logic by focusing on actions, not inputs
  • +
  • Remove tight coupling between specific input bindings and actions
  • +
  • Makes it easy to refactor your input code
  • +
  • Makes it easy to support player-defined input bindings
  • +
  • Makes it easy to handle multiple input devices simultaneously
  • +
  • Allows use of the Steam Input API
  • +
  • Makes it easier to implement: +
      +
    • AI-controlled players/bots
    • +
    • Replay systems (record actions, not inputs, then play them back)
    • +
    +
  • +
+

FlxAction

+

FlxActions come in two varieties: digital and analog. Digital is for on/off +actions like "JUMP" and "SHOOT". Analog is for things that need a range of +values, like jumping with more or less force, or moving a player or camera +around. (FlxActions are triggered by attached FlxActionInputs, described in +the next section).

+

Digital actions let you do things like: if(SHOOT.check()) doShoot(); in your +update loop rather than have a big ugly block that accounts for every input +device you support.

+

Analog actions let you do things like moveCharacter(MOVE.x, MOVE.y) or +fireLaserBeam(LASER_INTENSITY.x), nicely hiding whatever devices are actually +driving the input, and just providing you with the resulting floating point +values.

+

To create a FlxAction:

+
var jump = new FlxActionDigital();
+var move = new FlxActionAnalog();
+HAXE
+

You can optionally pass in a name and a callback in the constructor. If you +provide a callback, it will fire whenever the action is triggered.

+

If you are managing FlxActions yourself (as opposed to using the action +manager), you will need to update the actions every frame, either by doing +something like this:

+
function updateLoop()
+{
+    if (jump.check()) doJump();
+    if (move.check()) doMove(move.x, move.y);
+}
+HAXE
+

...or this:

+
function updateLoop()
+{
+    jump.update();
+    move.update();
+    if (jump.triggered) doJump();
+    if (move.triggered) doMove(move.x, move.y);
+}
+HAXE
+

FlxAction.update() will update the triggered property, fire the callback +if present, and update the x and y values (if an analog action).

+

FlxAction.check() will update the triggered property, fire the callback if present, update the x and y values (if an analog action), and return the +value of triggered.

+

Either is sufficient to keep the action updated. You must update each +action at least once per global update tick to ensure accurate input, but if you +accidentally update an action more than once per tick, it's okay -- an internal +safety check ensures that nothing bad happens.

+

If you don't want to manually update FlxActions, use the FlxActionManager, +which will keep them updated for you.

+

FlxActionInput

+

A FlxActionInput represents a specific input event on a specific input device, +like "when the A button on gamepad #1 is JUST_PRESSED", which you can use to +trigger a FlxAction.

+

These come in digital and analog forms for every device that Flixel supports. +The following are provided by default, but you can create your own by extending FlxActionInputDigital and FlxActionInputAnalog:

+
    +
  • FlxActionInputDigitalKeyboard
  • +
  • FlxActionInputDigitalMouse
  • +
  • FlxActionInputDigitalMouseWheel
  • +
  • FlxActionInputDigitalGamepad
  • +
  • FlxActionInputDigitalIFlxInput
  • +
  • FlxActionInputAnalogMouse
  • +
  • FlxActionInputAnalogMouseMotion
  • +
  • FlxActionInputAnalogMousePosition
  • +
  • FlxActionInputAnalogClickAndDragMouseMotion
  • +
  • FlxActionInputAnalogGamepad
  • +
+

You can attach inputs like this:

+
jump.addKey(SPACE, JUST_PRESSED);
+jump.addMouse(LEFT, JUST_PRESSED);
+jump.addGamepad(A, JUST_PRESSED, FIRST_ACTIVE);
+HAXE
+

These helper functions are a shorthand for this equivalent:

+
jump.add(new FlxActionInputDigitalKeyboard(SPACE, JUST_PRESSED));
+jump.add(new FlxActionInputDigitalMouse(LEFT, JUST_PRESSED));
+jump.add(new FlxActionInputDigitalGamepad(A, JUST_PRESSED, FIRST_ACTIVE);
+HAXE
+

This will cause the "jump" action to trigger on the frame where any of the +following conditions is met: space bar was just pressed, left mouse button was +just clicked, or the bottom face button on any gamepad was just pressed.

+

Each FlxActionInput class has its own parameters that let you define exactly +when the action should fire. For instance, here is the constructor for FlxActionInputDigitalKeyboard:

+
public function new(Key:FlxKey, Trigger:FlxInputState)
+HAXE
+

This requires you to specify a specific key, as well as an input state (PRESSED, +JUST_PRESSED, RELEASED, JUST_RELEASED).

+

Now here's the constructor for FlxActionInputDigitalGamepad, note that in +addition to specifying the button and the trigger state, we also have to specify +which gamepad we're listening for, since there could be more than one:

+
public function new(InputID:FlxGamepadInputID, Trigger:FlxInputState, GamepadID:Int = FlxInputDeviceID.FIRST_ACTIVE)
+HAXE
+

Now let's take a quick look at some analog inputs.

+

Here's FlxActionInputAnalogGamepad:

+
public function new(InputID:FlxGamepadInputID, Trigger:FlxAnalogState, Axis:FlxAnalogAxis = EITHER, GamepadID:Int = FlxInputDeviceID.FIRST_ACTIVE)
+HAXE
+

In addition to having to specify the input (left/right stick or left/right +trigger), the trigger state, and the gamepad ID, we also have to specify which +analog axis we care about (X, Y, EITHER, BOTH). (Note that for +single-axis analog inputs, such as analog triggers, only the x value will change +and the y value will always be zero).

+

Another example is FlxActionInputAnalogMousePosition:

+
public function new(Trigger:FlxAnalogState, Axis:FlxAnalogAxis = EITHER)
+HAXE
+

Since there's only ever one mouse, we don't need to specify the device, and we don't +need to specify a button since we just want the position. Whenever this action +updates the x and y values will match the mouse position.

+

FlxActionSet

+

A FlxActionSet is little more than a glorified array of FlxActions. There's +little reason to use them directly unless you are using the FlxActionManager, +but they can still be a convenient way to call update() on all your actions +at once.

+

FlxActionManager

+

FlxActionManager lets you manage multiple actions without having to update +them manually, and also lets you control action sets. Action sets are groups of +actions that can be selectively activated for specific input devices at specific times, which is great for local multiplayer games, games with complex input, and +games using the Steam Input API.

+

FlxActionManager is not initialized in Flixel by default, you have to add it yourself in your initialization code:

+
var actionManager = new FlxActionManager();
+FlxG.inputs.add(actionManager);
+HAXE
+

Once the action manager has been set up, you can simply add actions to it, and +it will ensure that all your actions are kept up to date:

+
//add actions one by one:
+actionManager.addAction(jump);
+actionManager.addAction(shoot);
+
+//add several actions at once:
+actionManager.addActions([action1, action2, action3, action4, action5]);
+HAXE
+

Then in your update loop you can simply check the triggered property, or just +wait for callbacks to fire, if you've set any.

+
function updateLoop()
+{
+    if (jump.triggered) doJump();
+    if (shoot.triggered) doShoot();
+}
+HAXE
+

Default action set

+

What's actually happening when you call addAction or addActions is that the +manager is asking for both actions and the action set you want to add them to:

+
public function addAction(Action:FlxAction, ActionSet:Int = 0):Bool
+HAXE
+

If you don't provide an action set, it assumes you want to add them to the first +one (index 0). And if you haven't defined any action sets, it will create one +for you at index 0, name it "default", and immediately activate it for all +devices.

+

NOTE: +By default, when you change FlxStates, the default action set, including all referenced actions and inputs, will be cleared out and destroyed. You can change +this behavior by modifying the FlxActionManager.resetOnStateSwitch policy.

+

If you're not juggling multiple action sets, you will probably never need to +worry about any of this -- just add new actions at the start of every state. +We like to explain what's going on under the hood just in case you encounter unexpected behavior.

+

Working with action sets

+

Only ONE action set is considered active at a given time for any given device, +but multiple devices can be subscribed to the same action set.

+

For instance, in an asymetrical co-op game where one person drives a tank +and the other mans the turret, gamepad #1 could use action set "drive" and +gamepad #2 could use action set "gunner". The same could go for the mouse, +the keyboard, etc. And in a single-player game you might want to just change +the action set of ALL input devices every time you switch to a different +screen, such as a menu.

+

FlxActionManager lets you:

+
    +
  • ADD action sets
  • +
  • REMOVE action sets
  • +
  • ACTIVATE an action set for a specific device
  • +
  • UPDATE all your action sets at once
  • +
  • ENFORCE the "only one action set active per device at a time" rule
  • +
+

To create and add an action set, do something like:

+
//where up, down, left, right, select are digital actions
+var set = new FlxActionSet("menu", [up, down, left, right, select]);
+var menuSetIndex = actionManager.addSet(set);
+HAXE
+

Note that addSet returns the action set's index. All operations on action sets +require the action set's index (an Int), not its name (a String). This is +for performance reasons. If you forget to store the action set, or otherwise +lose track of an action set's index, you can query it at any time by passing the +set's name to getSetIndex(). Just be sure not to do this repeatedly in +frequently called loops.

+

Steam Input

+

If you are using the steamwrap library, FlxActionManager gains the ability +to automatically create action sets from a steamwrap object derived from the +master vdf game actions file that Steam makes you set up. You must then ACTIVATE +one of those action sets for any connected steam controllers, which will +automatically attach the proper steam action inputs to the actions in the set. +You can also add as many regular FlxActionInputs as you like to any actions in +the sets.

+
var config = steamwrap.data.ControllerConfig.fromVDF(myVDF);
+actionManager.initSteam(config, digitalCallback, analogCallback);
+HAXE
+

NOTE: +If you are using the Steam Input API and/or a Steam Controller, you MUST use FlxActionManager in order to properly process Steam's API via FlxActions. +The only other alternative is to call the steamwrap functions directly.

+

JSON parsing

+

FlxActionManager can generate a JSON string representation of your action sets via exportToJson() You can also initialize your action sets by calling +initFromJson(), feeding in the parsed object representation of the same format.

+

The format is:

+
typedef ActionSetJsonArray = 
+{
+    @:optional var actionSets:Array<ActionSetJSON>;
+}
+
+typedef ActionSetJson =
+{
+    @:optional var name:String;
+    @:optional var analogActions:Array<String>;
+    @:optional var digitalActions:Array<String>;
+}
+HAXE
+

Which would look something like this in practice:

+
{
+    "actionSets" : [
+        {
+            "name" : "SomeSet",
+            "analogActions" : [
+                "some_analog_action_1",
+                "some_analog_action_2"
+            ],
+            "digitalActions" : [
+                "some_digital_action_1",
+                "some_digital_action_2"
+            ]
+        },
+        {
+            "name" : "AnotherSet",
+            "analogActions" : [
+                "another_analog_action_1",
+                "another_analog_action_2"
+            ],
+            "digitalActions" : [
+                "another_digital_action_1",
+                "another_digital_action_2"
+            ]
+        }
+    ]
+}
+JSON
+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/android/index.html b/documentation/android/index.html new file mode 100644 index 000000000..906c34f2b --- /dev/null +++ b/documentation/android/index.html @@ -0,0 +1,1083 @@ + + + + + + + + + + + Android | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Android

+ + +

The Android target makes use of a chain of frameworks to compile your native Android game from Haxe code. OpenFL uses the Hxcpp and the Android NDK specifically so no virtual machine is involved.

+

To set up android, run lime setup android after installing HaxeFlixel. You can choose to download necessary components (eg. Android SDK and NDK) or use existing installations.

+

The Haxe compiler uses its cpp target to compile your Haxe code for the LibSDL OpenGL library so that the Android NDK can then use this "native-code" for your Android game. You can read more about the Android NDK from Google here, however this process is completely automated by OpenFL. Android is part of the cpp group of targets and when developers mention cpp the topic may be relevant to HaxeFlixel Android.

+

With OpenFL using native-code and OpenGL with LibSDL, the rendering methods are different to where Flixel started with Flash. Android uses GPU accelerated Texture Batching for the best possible performance on mobile devices.

+

Conditionals

+
#if cpp
+//your android code
+#end
+
+#if android
+//your android code
+#end
+
+#if mobile
+//your android code
+#end
+
+

Project XML settings

+

Mobile platforms can use a window width and height of 0, which is a special value that uses the full resolution of the current display.

+
<window width="0" height="0" background="#FFFFFF" fps="60" />
+
+

OpenFL also exposes the following specific settings for the Android target:

+
<android target-sdk-version="17" />
+<window hardware="true" allow-shaders="true" require-shaders="true" if="cpp"/>
+<window vsync="true" antialiasing="4" if="cpp" />
+<window orientation="portrait" /> || <window orientation="landscape" if="cpp"/>
+
+

Custom PNG icons: (Check Iconography / Android Developers for more info)

+
<icon path="36.png" size="36" if="android" />
+<icon path="48.png" size="48" if="android" />
+<icon path="72.png" size="72" if="android" />
+<icon path="96.png" size="96" if="android" />
+
+

Compile Commands

+

Visual Studio Code, FlashDevelop and IntelliJ IDEA support Android compilation through their GUI.

+

Command line

+

The basic command to compile and test Android:

+
lime test android
+
+

Run this command from the root folder of your project; the default project.xml will be used automatically. For the test command to run on your device you should have it connected with ADB working correctly.

+

If you want to use the Android simulator, add -simulator when running/testing. Be sure your virtual device is API >=15 and has GPU enabled.

+
lime test android -simulator
+
+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/cheat-sheet/index.html b/documentation/cheat-sheet/index.html new file mode 100644 index 000000000..b0a43ca8b --- /dev/null +++ b/documentation/cheat-sheet/index.html @@ -0,0 +1,1546 @@ + + + + + + + + + + + Cheat Sheet | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Cheat Sheet

+ +

FlxSprite (Base)

+
package;
+
+import flixel.FlxSprite;
+import flixel.FlxG;
+
+class MySprite extends FlxSprite
+{
+	public function new()
+	{
+		super();
+	}
+
+	override public function update(elapsed:Float):Void
+	{
+		super.update(elapsed);
+	}
+}
+HAXE
+

FlxState (Base)

+
package;
+
+import flixel.FlxState;
+import flixel.FlxG;
+
+class MyState extends FlxState
+{
+    override public function create():Void
+    {
+    	super.create();
+    }
+
+    override public function update(elapsed:Float):Void
+    {
+    	super.update(elapsed);
+    }
+}
+HAXE
+

Switch FlxState

+
FlxG.switchState(new MyState());
+HAXE
+

Load FlxSprite

+
loadGraphic("assets/my_sprite.png");
+
+// OR dynamically create a rect
+makeGraphic(100, 100, 0xFFFFFFFF); // width, height, color (AARRGGBB hexadecimal)
+
+// to update bounding box by default (positioned on top left corner of the sprite)
+updateHitbox(); // or offset.set(10, 5); to shift bounding box 10 pixels horizontally and 5 pixels vertically
+HAXE
+

FlxText

+
    +
  • setFormat(font, size, color, alignment)
  • +
  • setBorderStyle(style, color, size)
  • +
+
import flixel.text.FlxText;
+import flixel.util.FlxColor;
+HAXE
+
myText = new FlxText(0, 0, 500); // x, y, width
+myText.text = "Hello World";
+myText.setFormat("assets/font.ttf", 20, FlxColor.WHITE, CENTER);
+myText.setBorderStyle(OUTLINE, FlxColor.RED, 1);
+HAXE
+

FlxButton

+
import flixel.ui.FlxButton;
+HAXE
+
myButton = new FlxButton(0, 0, "Label", myCallback);
+
+// Custom graphics (sprite sheet with 3 frames for normal / highlight / pressed)
+myButton.loadGraphic("assets/custom.png", true, width, height);
+HAXE
+
function myCallback():Void
+{
+}
+HAXE
+
    +
  • myButton.label is a FlxText, use setFormat() and setBorderStyle() to customise.
  • +
+

Sound Effects and Music

+

With the stock Project.xml, simply place them in your project's assets/music and assets/sounds subfolders and they're ready to use.

+

Sound effects are usually in WAV format (44.1 kHz source).

+

Music must be in MP3 format (44.1 kHz source) for Flash, and OGG for everything else. To support both Flash and non-Flash platforms without bundling both formats in your output, you can replace the stock <assets> tag in your Project.xml with this:

+
<assets path="assets" exclude="*.ogg" if="flash"/>
+<assets path="assets" exclude="*.mp3" unless="flash"/>
+XML
+

Play in your code:

+
// Play sound effect using AssetPaths
+FlxG.sound.play(AssetPaths.mySound__wav);
+// Play sound effect without AssetPaths
+FlxG.sound.play("assets/sounds/mySound.wav");
+
+// Loop music, Flash only
+FlxG.sound.playMusic(AssetPaths.myMusic__mp3);
+// Loop music, non-Flash only
+FlxG.sound.playMusic(AssetPaths.myMusic__ogg);
+// Loop music, Flash or non (getSound() adds .mp3 on Flash and .ogg otherwise)
+FlxG.sound.playMusic(FlxAssets.getSound("assets/music/myMusic"));
+HAXE
+

Keyboard Input

+
// 'A' key
+if (FlxG.keys.justPressed.A) {}
+if (FlxG.keys.pressed.A) {}
+if (FlxG.keys.justReleased.A) {}
+
+// Checking multiple keys:
+if (FlxG.keys.anyPressed([RIGHT, D])) {}
+HAXE
+

Keys

+

ANY

+

A...Z

+

UP DOWN LEFT RIGHT

+

SPACE ENTER ESCAPE

+

ZERO ONE TWO THREE...NINE

+

F1...F12

+

ALT +BACKSLASH +BACKSPACE +CAPSLOCK +CONTROL +DELETE +HOME +INSERT +QUOTE +PERIOD +PLUS +MINUS +PAGEUP +PAGEDOWN +RBRACKET +GRAVEACCENT +TAB +SLASH +SEMICOLON

+

NUMPADZERO NUMPADONE NUMPADTWO...NUMPADNINE

+

Mouse Input

+
if (FlxG.mouse.pressed) {}
+if (FlxG.mouse.justPressed) {}
+if (FlxG.mouse.justReleased) {}
+HAXE
+

Positional Data

+
// Relative to world space
+FlxG.mouse.x;
+FlxG.mouse.y;
+
+// Relative to screen
+FlxG.mouse.screenX;
+FlxG.mouse.screenY;
+HAXE
+

Wheel (mouse scroll)

+

Current "delta" value of mouse wheel. If the wheel was just scrolled up, it will have a positive value. If it was just scrolled down, it will have a negative value. If it wasn't just scroll this frame, it will be 0.

+
FlxG.mouse.wheel;
+HAXE
+

Up, Down, Over, Out Callbacks per Object

+
var clickableSprite:FlxSprite;
+
+// ...
+
+// register plugin in PlayState.create()
+FlxMouseEventManager.init();
+
+// ...
+
+// register callbacks
+var pixelPerfect = false;
+FlxMouseEventManager.add(clickableSprite, mousePressedCallback, mouseReleasedCallback, null, null, false, true, pixelPerfect, [FlxMouseButtonID.LEFT, FlxMouseButtonID.RIGHT]);
+
+// ...
+
+function mousePressedCallback(sprite:FlxSprite)
+{
+	if (FlxG.mouse.justPressed)
+	{
+		// left button was pressed
+	}
+	else if (FlxG.mouse.justPressedRight)
+	{
+		// right button was pressed
+	}
+}
+
+function mouseReleasedCallback(sprite:FlxSprite)
+{
+}
+HAXE
+

Touch Input

+
for (touch in FlxG.touches.list)
+{
+	if (touch.justPressed) {}
+	if (touch.pressed) {}
+	if (touch.justReleased) {}
+}
+HAXE
+

Positional Data

+
// Relative to world space
+touch.x;
+touch.y;
+        
+// Relative to screen
+touch.screenX;
+touch.screenY;
+HAXE
+
    +
  • +

    touchPointID: The unique ID of this touch.

    +
  • +
  • +

    overlaps(objectOrGroup): Checks for overlap between this touch and another FlxObject or FlxGroup.

    +
  • +
+

Swipes (Input)

+

"Swipes" from both mouse and touch input that have just been released:

+
for (swipe in FlxG.swipes)
+{
+    // swipe.startPosition (FlxPoint)
+    // swipe.endPosition (FlxPoint)
+    
+    // swipe.id (Int)
+
+    // swipe.distance (Float)
+    // swipe.angle (Float)
+    // swipe.duration (Float)
+}
+HAXE
+

FlxSignal

+
import flixel.util.FlxSignal;
+HAXE
+
// for signals that don't need data, use FlxSignal
+var signal = new FlxSignal();
+// for signals that need data, use FlxTypedSignal with the correct function type
+var stringSignal = new FlxTypedSignal<String->Void>();
+HAXE
+

Note: FlxSignal is nothing but a convenient shortcut for FlxTypedSignal<Void->Void>

+
signal.add(voidCallback); // type must be Void->Void
+stringSignal.add(stringCallback); // type must be String->Void
+HAXE
+
function voidCallback()
+{
+	trace("Hello");
+}
+
+function stringCallback(text:String)
+{
+	trace(text);
+}
+HAXE
+
// this will print "Hello World"
+signal.dispatch();
+stringSignal.dispatch("World");
+HAXE
+

You can have up to 4 parameters in your signal:

+
var collisionNotify = new FlxTypedSignal<FlxObject->FlxObject->Bool->Bool->Void>();
+collisionNotify.add(collisionCallback);
+
+function collisionCallback(source:FlxObject, target:FlxObject, shouldKillSource:Bool, shouldKillTarget:Bool):Void (...)
+HAXE
+

FlxTimer

+
import flixel.util.FlxTimer;
+HAXE
+
// time (seconds), callback, loops
+new FlxTimer().start(10.0, myCallback, 3);
+HAXE
+
function myCallback(timer:FlxTimer):Void
+{
+}
+HAXE
+
    +
  • Setting loops to 0 results in an endless loop.
  • +
  • reset(?NewTime) restarts the timer, optionally with a new duration.
  • +
  • cancel() stops the timer and removes it from the timer manager.
  • +
+

FlxRandom

+
// (Int) between 0 and 10
+FlxG.random.int(0, 10);
+
+// (Float) between 0.0 and 10.0
+FlxG.random.float(0.0, 10.0);
+
+// (Bool) Chance by percent
+FlxG.random.bool(50); // 50% chance to return 'true'
+FlxG.random.bool(10); // 10% chance to return 'true'
+HAXE
+

FlxTween

+

Check the demo to visualize all FlxTween types.

+
    +
  • tween(Object, Values, Duration, ?Options)
  • +
+
import flixel.tweens.FlxTween;
+import flixel.tweens.FlxEase;
+HAXE
+
// Moves sprite to position (100, 200) in 3 seconds
+FlxTween.tween(sprite, {x: 100, y: 200}, 3.0, {ease: FlxEase.quadInOut, complete: myCallback});
+HAXE
+
function myCallback(tween:FlxTween):Void
+{
+}
+HAXE
+

FlxTween Options

+

ease

+
{ease: FlxEase.quadInOut}
+HAXE
+

complete

+
{complete: callbackFunction}
+HAXE
+
function callbackFunction(tween:FlxTween):Void
+{
+}
+HAXE
+

type

+
{type: FlxTweenType.PINGPONG}
+HAXE
+
    +
  • FlxTweenType.BACKWARD: plays tween in reverse direction
  • +
  • FlxTweenType.LOOPING: restarts immediately when it finishes.
  • +
  • FlxTweenType.ONESHOT: stops and remove itself from its core container when it finishes.
  • +
  • FlxTweenType.PERSIST: stops when it finishes.
  • +
  • FlxTweenType.PINGPONG: plays tween hither and thither
  • +
+

loopDelay

+
{loopDelay: 1.0} // 1 second
+HAXE
+

startDelay

+
{startDelay: 2.0} // 2 seconds
+HAXE
+

FlxEase List

+

Check the demo to visualize all FlxEase types.

+
    +
  • +

    backIn, backInOut, backOut

    +
  • +
  • +

    bounceIn, bounceInOut, bounceOut

    +
  • +
  • +

    circIn, circInOut, circOut

    +
  • +
  • +

    cubeIn, cubeInOut, cubeOut

    +
  • +
  • +

    elasticIn, elasticInOut, elasticOut

    +
  • +
  • +

    expoIn, expoInOut, expoOut

    +
  • +
  • +

    quadIn, quadInOut, quadOut

    +
  • +
  • +

    quartIn, quartInOut, quartOut

    +
  • +
  • +

    quintIn, quintInOut, quintOut

    +
  • +
  • +

    sineIn, sineInOut, sineOut

    +
  • +
+

Containers (FlxGroup)

+

FlxGroup is a shortcut for FlxTypedGroup<FlxBasic>. Use FlxTypedGroup<MyOwnClass> if you need to access your own variables and functions when iterating over the container.

+

Iteration

+
for (member in myGroup)
+{
+	member.x += 10;
+	member.mySpecificFunction(); // myGroup = FlxTypedGroup<MyOwnClass>
+}
+HAXE
+

Collision

+
FlxG.overlap(objectOrGroup1, objectOrGroup2, myCallback);
+HAXE
+
function myCallback(object1:FlxObject, object2:FlxObject):Void
+{
+}
+HAXE
+

Or use FlxG.collide() which calls FlxG.overlap() and presets the processCallback parameter to FlxObject.separate().

+

Setting World Bounds

+
// collision won't work outside the bounds, and by default they are only size of one screen
+FlxG.worldBounds.set(tilemap.x, tilemap.y, tilemap.width, tilemap.height);
+HAXE
+

Quick check whether there was a collision

+
// sets the touching flags
+FlxG.collide(player, level);
+
+if (player.isTouching(DOWN))
+{
+	// player stands on the ground and can jump 
+}
+
+// will reset touching flags when called
+super.update(elapsed);
+HAXE
+

Teleport sprite

+
// after setting the sprite's new position
+setPosition(10, 100);
+// don't forget to update 'last' variable if you don't want overlap callbacks for objects between old and new positions of the sprite
+last.set(x, y);
+HAXE
+

Pixel Perfect Collision

+
var overlapping = FlxG.pixelPerfectOverlap(sprite1, sprite2);
+HAXE
+

Drawing Shapes

+

Dynamically draw: circle, ellipse, line, polygon, triangle, rect, round rect and rect complex.

+
using flixel.util.FlxSpriteUtil;
+HAXE
+

Haxe docs about the using keyword: haxe.org/manual/lf-static-extension.html.

+
var canvas = new FlxSprite();
+canvas.makeGraphic(FlxG.width, FlxG.height, FlxColor.TRANSPARENT, true);
+add(canvas);
+HAXE
+

The last argument of makeGraphic() is Unique, whether the graphic should be an unique instance in the graphics cache, if you create multiple graphics like this, set it to true to avoid conflicts.

+
var lineStyle:LineStyle = {color: FlxColor.RED, thickness: 1};
+var drawStyle:DrawStyle = {smoothing: true};
+HAXE
+
// Circle
+canvas.drawCircle(x, y, radius, color, lineStyle, drawStyle);
+
+// Ellipse
+canvas.drawEllipse(x, y, width, height, color, lineStyle, drawStyle);
+
+// Line
+canvas.drawLine(startX, startY, endX, endY, lineStyle);
+
+// Polygon
+var vertices = new Array<FlxPoint>();
+vertices[0] = new FlxPoint(0, 0);
+vertices[1] = new FlxPoint(100, 0);
+vertices[2] = new FlxPoint(100, 300);
+vertices[3] = new FlxPoint(0, 100);
+canvas.drawPolygon(vertices, color, lineStyle, drawStyle);
+
+// Triangle
+canvas.drawTriangle(x, y, height, color, lineStyle, drawStyle);
+
+// Rect
+canvas.drawRect(x, y, width, height, color, lineStyle, drawStyle);
+
+// Round Rect
+canvas.drawRoundRect(x, y, width, height, ellipseWidth, ellipseHeight, color, lineStyle, drawStyle);
+
+// Rect Complex
+canvas.drawRoundRectComplex(x, y, width, height, topLeftRadius, topRightRadius, bottomLeftRadius, bottomRightRadius, color, lineStyle, drawStyle);
+HAXE
+

Use canvas.fill(FlxColor.TRANSPARENT); to clear the canvas.

+

HUD

+
// prevents the sprite to scroll with the camera
+scrollFactor.set(0, 0);
+HAXE
+

Zooming game while leaving HUD intact

+
// create a new camera for the HUD
+uiCamera = new FlxCamera(0, 0, screenWidth, screenHeight);
+uiCamera.bgColor = FlxColor.TRANSPARENT;
+
+// add camera to list and set 'DefaultDrawTarget' to false
+FlxG.cameras.add(uiCamera, false);
+
+// add element to the camera
+hudElement.cameras = [uiCamera];
+
+FlxG.camera.bgColor = 0xff626a71;
+FlxG.camera.zoom = 0.5; // zoom only on the default camera
+HAXE
+

Debugger

+

Press ~ key to open it during runtime, or open by code with FlxG.debugger.visible = true.

+
// Log
+FlxG.log.add("My var: " + myVar);
+// or
+FlxG.log.redirectTraces = true;
+trace("My var: ", myVar);
+
+// Watch
+FlxG.watch.add(object, "property");
+
+// Add world space mouse position to watch list
+FlxG.watch.addMouse();
+
+// Create a tracker window for player (of class Player) showing "x", "y" and custom fields "jumping" and "ladder"
+FlxG.debugger.addTrackerProfile(new TrackerProfile(Player, ["x", "y", "jumping", "ladder"], []));
+FlxG.debugger.track(player, "Hero");
+HAXE
+

Hiding Cursor

+
FlxG.mouse.visible = false;
+HAXE
+

Adding Gravity

+
acceleration.y = 600;
+HAXE
+

Sort objects in FlxGroup

+
// sort by Y for top-down game
+group.sort(FlxSort.byY, FlxSort.ASCENDING);
+
+// sort with custom function (here: by Z)
+var group = new FlxTypedGroup<ZSprite>();
+group.sort(
+	function(order:Int, sprite1:ZSprite, sprite2:ZSprite):Int
+	{
+		return FlxSort.byValues(order, sprite1.z, sprite2.z);
+	},
+	FlxSort.ASCENDING
+);
+HAXE
+

FlxPoint Pool

+
// get from FlxPoint pool
+var tileSize = FlxPoint.get(16, 16);
+
+var actionTileset = FlxTileFrames.fromGraphic(FlxG.bitmap.add("assets/images/ui/actions.png"), tileSize);
+
+// release it back in pool to reuse
+tileSize.put();
+HAXE
+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/code-contributions/index.html b/documentation/code-contributions/index.html new file mode 100644 index 000000000..92ca6f4ae --- /dev/null +++ b/documentation/code-contributions/index.html @@ -0,0 +1,1066 @@ + + + + + + + + + + + Code Contributions | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Code Contributions

+ +

Contributing code to HaxeFlixel is done all through the official git repositories on GitHub.

+

Use the Dev Branches

+

All repositories except the website and documentation use a dev branch which is the main entry point for features and bugfixes to accepted into the codebase. When the code is tested by the community it is then merged into master and released on haxelib.

+

To clarify: the dev branch on flixel-addons and flixel-demos is only compatible with the dev branch of flixel.

+

If you are making changes to the codebase that could include breaking changes or a new API, we make use of the pull request feature and suggest developers use a feature branch model. Feature branches are simply new branches with your code that are named with a title relating to your code.

+

Merge Approval

+

Before a major feature is merged into core our general workflow is to get approval from a core-contributor with push access.

+

Developers do have limited time so keep in mind some simple steps to get your pull request accepted:

+
    +
  • Clearly describe your use case or the problem/issue your code is developed for.
  • +
  • Conduct as much testing as possible on the supported targets of HaxeFlixel. If the code is for a specific target only make a clear note for developers to test.
  • +
  • Provide a link to a working, compilable demo of your code.
  • +
+

Contribute to the Stack

+

Everything about the technology stack of HaxeFlixel is open-source so you can contribute directly to the language, compiler and upstream libraries:

+ +

If you are wanting to contribute code, please review the style guide.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/code-style/index.html b/documentation/code-style/index.html new file mode 100644 index 000000000..5c45885cb --- /dev/null +++ b/documentation/code-style/index.html @@ -0,0 +1,1156 @@ + + + + + + + + + + + Code Style | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Code Style

+ +

This page contains a few notes on HaxeFlixel's code style. Note that we use haxe-formatter to enforce consistent whitespace usage, bracket placement etc, so this page only focuses on naming conventions and other good practices not covered by an auto-formatter.

+

Functions

+

Function Names

+
function shootEnemy(target:Enemy, bullet:BulletType):Void
+HAXE
+

...is easier to read than

+
function shootAtASpecificEnemyWithABulletTypeOf(target:Enemy, bullet:BulletType):Void
+HAXE
+

...but still gets the idea of what this function does across. The second example has a lot of "noise"-words that don't provide any additional value. The following function name would still be acceptable, more accurate than example 1 even:

+
function shootBulletAtEnemy(target:Enemy, bullet:BulletType):Void
+HAXE
+

However, function names should also not be too short - you should be able to roughly know what a function does simply by reading its name - reading its description, if existent, should ideally not be necessary.

+

An example for a bad / too simple name would be shoot() instead of shootEnemy().

+

Parameter Names

+

Use lowerCamelCases for function parameters and use this to explicitly reference to class members (only when necessary):

+
function translate(words:String, bableFish:BableFish):Void
+{
+	this.words = words;
+}
+HAXE
+

Instead of:

+
function translate(Words:String, BableFish:BableFish):Void
+{
+	words = Words;
+}
+HAXE
+

In the core of HaxeFlixel, a lot of method parameters are capitalized (not preferred in Haxe). This is mostly legacy from the AS3 Flixel's code style and hard to change them all. However, newly written functions should follow the lowerCamelCase style.

+

Leveraging Type Inference

+

The Haxe compiler does not require you to declare the type of a variable (read more).

+
//This is unnecessary
+var name:String = "Merlin";
+var number:Int = 32;
+
+//This is preferred
+var name = "Merlin";
+var number = 32;
+HAXE
+

In some contexts however, doing so improves the readability of the code, for example because it's not immediately obvious what return type a function has:

+
var mystery:Answer = createAnAnswer();
+HAXE
+

Keyword Order

+

The original AS3 Flixel codebase ordered keywords like static public function. +HaxeFlixel has changed this convention to be more like every other (Haxe) library, the order of importance is as follows:

+
    +
  1. override
  2. +
  3. public / private
  4. +
  5. static
  6. +
  7. inline
  8. +
+

So static public function is changed to public static function. This also applies to variables eg public static var.

+

Field Order / Class Outline

+

The following rules apply, sorted by priority:

+
    +
  1. static fields before instance fields
  2. +
  3. public fields before private fields
  4. +
  5. regular variables before properties
  6. +
  7. getters and setters are the very end of a class (as they should always be private)
  8. +
+

Comments

+

Comments should only be used when you can't find a way to express the same thing in code. They tend to add noise to the code base and rarely get updated when the code changes, which results in misinformation and inaccurate comments.

+

Take the following comment section for example, it does not provide any additional value beyond what the code and the class / parameter names already tell you (one of the reasons why choosing good names is so important!). It should thus be removed completely.

+
/**
+ * Sets the position.
+ *
+ * @param	x	The x coordinate.
+ * @param	y 	The y coordinate.
+ */
+public function setPosition(x:Int, y:Int):Void
+HAXE
+

Class Names

+

All type names should be prefixed by Flx, e.g.:

+
    +
  • FlxBasic
  • +
  • FlxObject
  • +
  • FlxSprite
  • +
  • etc..
  • +
+

Even though this is widely regarded as bad style, it still makes sense to follow this convention since it is so deeply ingrained into the flixel workflow and doing otherwise would be very inconsistent and confusing.

+

This convention does not come without its advantages, for example you can easily tell which classes belong to the engine and which ones don't when writing a game.

+

Under the hood types that HaxeFlixel devs will likely never see or use should not have the Flx prefix, this will serve as an indicator that they are off the beaten path.

+

Enum Value Names

+

The names of enum values are capitalized. The same convention applies to abstract enums.

+
enum FlxCameraFollowStyle
+{
+	LOCKON;
+	PLATFORMER;
+	TOPDOWN;
+	TOPDOWN_TIGHT;
+	SCREEN_BY_SCREEN;
+	NO_DEAD_ZONE;
+}
+HAXE
+

Using switch-case as an expression

+

Unlike in most other languages with object-oriented syntax, everything in Haxe is an expression. This extends to switch-case, meaning that it evaluates to a value. This value can be assigned to a variable, passed to a function or simply returned by a function:

+
function getColor(color:Color):Int
+{
+	return switch (color)
+	{
+		case Color.RED: 0xff0000;
+		case Color.BLUE: 0x0000ff;
+		case Color.GREEN: 0x00ff00;
+	}
+}
+HAXE
+

This is preferable to how this code would look like in a lot of other languages, for example C#:

+
int getColor(Color color) {
+	switch (color) {
+		case Color.RED:
+			return 0xff0000;
+		case Color.BLUE:
+			return 0x0000ff;
+		case Color.GREEN:
+			return 0x00ff00;
+	}
+	return 0x000000;
+}
+CSHARP
+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/community-tutorials/index.html b/documentation/community-tutorials/index.html new file mode 100644 index 000000000..426d61a7c --- /dev/null +++ b/documentation/community-tutorials/index.html @@ -0,0 +1,1046 @@ + + + + + + + + + + + Community Tutorials | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Community Tutorials

+ +

While we try our best to make good documentation and a good example tutorial, we can only do so much! +So this will be a big list to various external Community Tutorials made by other people!

+

Written

+ +

Videos

+ + + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/community/index.html b/documentation/community/index.html new file mode 100644 index 000000000..352565927 --- /dev/null +++ b/documentation/community/index.html @@ -0,0 +1,1048 @@ + + + + + + + + + + + Community | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Community

+ +

HaxeFlixel is a collaborative project from contributors all over the world.

+

If you need help or just want to chat , HaxeFlixel has a...

+ +

Other HaxeFlixel-related pages:

+ + + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/compiler-conditionals/index.html b/documentation/compiler-conditionals/index.html new file mode 100644 index 000000000..72d40da1c --- /dev/null +++ b/documentation/compiler-conditionals/index.html @@ -0,0 +1,1076 @@ + + + + + + + + + + + Compiler Conditionals | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Compiler Conditionals

+ +

The Haxe compiler provides a robust solution for cross-platform development where you can use operators to define what targets receive your code. This functionality is invaluable for HaxeFlixel since we are targeting native mobile / desktop and web targets, all with different capabilities.

+

Conditional Compilation in the Haxe Manual

+

A basic example may include logic like this:

+
#if desktop
+
+// desktop only code
+
+#elseif mobile
+
+// mobile only code
+
+#end
+HAXE
+

Conditionals relevant to your HaxeFlixel games may include:

+
    +
  • mobile, desktop, web
  • +
  • ios, android, windows, mac, linux, html5
  • +
  • flash, cpp, neko, js
  • +
+

Multiple targets can be used together:

+
#if (mac || linux || android)
+
+// code specific for these platforms
+
+#end
+HAXE
+

To define your own it is as easy as adding to your Project.xml:

+
<haxedef name="magic" />
+XML
+

Now this will work:

+
#if magic
+// Create a dragon
+#end
+HAXE
+

Since Haxe lets you use some logic with the conditionals you can enable something just for mobile, as in:

+
<haxedef name="magic" if="mobile"/>
+XML
+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/conclusion/index.html b/documentation/conclusion/index.html new file mode 100644 index 000000000..96a5c4289 --- /dev/null +++ b/documentation/conclusion/index.html @@ -0,0 +1,1042 @@ + + + + + + + + + + + Conclusion | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Conclusion

+ +

Now we have a pretty complete, working game! It's not too complex, but it should give you a full, well-rounded idea of how to make your own games in HaxeFlixel. I really hope you've enjoyed this tutorial, and take the time to play around with the code some more to try expanding the game even further. You could add more levels, add stairway objects to move between them, add more enemy types, and collectibles, and upgrades… the list goes on.

+

As mentioned previously, you can grab the complete source code for the game here.

+

The power of HaxeFlixel comes from it's balance of simplicity and versatility. With only a few lines of code you can do almost anything you can think of.

+

If you want to learn more about using HaxeFlixel, take a look at the documentation, and API for lots more in-depth information.

+

I'd like to thank Jens Fischer, Justo Delgado Baudí, the STL IGDA, and the HaxeFlixel Dev Community for helping me get this tutorial finished - a lot of editing and suggestions for improvement came from these people.

+

If you enjoyed this tutorial, if it helped you in some way, or if you have suggestions, I always appreciate feedback. You can let me know at seifertim@gmail.com or on twitter: @seifertim.

+

Thanks, and happy coding!

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/contributing/index.html b/documentation/contributing/index.html new file mode 100644 index 000000000..6a6c0e1c5 --- /dev/null +++ b/documentation/contributing/index.html @@ -0,0 +1,1061 @@ + + + + + + + + + + + Contributing | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Contributing

+ +

We welcome new contributors to this project. +Being open source and followed by people all over the world, you can help in many ways.

+

HaxeFlixel is a an open-source project with humble beginnings +sparked from a passion for the technology and game development. Everyone working on this project has come together +to create a friendly and flexible approach so that this library and community is not only enjoyable, but a robust solution for cross-platform 2D games.

+

Contribute Code

+

We are built on code contributions, which we gladly welcome - see the code contributions page.

+

Publicize HaxeFlixel

+

Help spread the word! What you can do to help:

+
    +
  • Star our GitHub Repository.
  • +
  • Follow us on Twitter.
  • +
  • Talk about us on social media: Twitter, blogs, forums.
  • +
  • Write about your experiences of HaxeFlixel on your favorite blog, social network.
  • +
  • Write about what you are doing with HaxeFlixel to inspire others by using our forum or your own site.
  • +
  • Record a video about your use or tutorial using HaxeFlixel.
  • +
  • Make an awesome game and attribute HaxeFlixel as the technology that helped make it happen ;)
  • +
+

Donations

+

HaxeFlixel is currently accepting donations via its Patreon page.

+

Please read this blog post to understand how the funds will be distributed.

+

@gamedevsam is the current treasurer for HaxeFlixel, contact him if you have any questions or suggestions regarding the use of donated funds.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/creating-a-new-project/index.html b/documentation/creating-a-new-project/index.html new file mode 100644 index 000000000..56c3950e7 --- /dev/null +++ b/documentation/creating-a-new-project/index.html @@ -0,0 +1,1087 @@ + + + + + + + + + + + 2 - Creating a new project | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

2 - Creating a new project

+ +

Now we want to make sure that everything is installed properly - and we want to set up the framework for our game. So we're going to make a new project, open it with VSCode and test that it builds and runs.

+
    +
  1. +

    In the command prompt, enter:

    +
    flixel tpl -n "TurnBasedRPG" -ide vscode
    +BASH
    +

    This will create a new Flixel project using the blank template in the directory TurnBasedRPG (as well as naming the project TurnBasedRPG).

    +
  2. +
  3. +

    Depending on how you've configured flixel-tools and whether the code command is available, flixel tpl might already have opened a VSCode window with the right folder automatically.

    +

    If not, simply open the TurnBasedRPG folder with File > Open Folder....

    +
  4. +
  5. +

    Over on the left side of the screen, you should see your project. This will contain all the files that the template generated for us.

    +

    +
  6. +
  7. +

    Next, let's make sure that our project builds and runs properly. By default, a fresh, new Flixel template project will launch the game in the PlayState. So go ahead and double-click to open that file from the project list. +This file is a very basic (and empty) example of a FlxState subclass. You can think of a FlxState a little bit like a 'scene'. When your game is running, one - and only one - state will be the active state. Anything 'added' to that state will be visible and accessible by the player, and, for the most part, will be segregated from other states in your game.

    +

    They are great for having different sections of your game that are sort of in a bubble from one another, such as a MenuState (which we will add later) and the PlayState (where the game is actually played).

    +

    You'll see that, at least for now, the PlayState only has two functions in it: create() and update(). When a state is loaded, its create() function is called. This is where you want to initialize all of the things in your state.

    +

    update() is where all the real magic happens - it is called every 'frame' in your game (by default 60 times per second). When a FlxState's update() is called, it will call update() on all of the objects that have been added to it. This is basically how everything in your game actually 'happens'. We will get to play with this more later on. +For now, we JUST want to see that the whole thing works, so, we're going to add a simple FlxText object to this state.

    +
  8. +
  9. +

    In create(), right before the line that says super.create();, type out the following two lines:

    +
    var text = new FlxText(10, 10, 100, "Hello, World!");
    +add(text);
    +HAXE
    +

    While you're typing, code completion should pop up and suggest FlxText.

    +

    +

    Here, press Enter or simply type a ( - notice how the following lines has automatically been added to your imports at the top of the file:

    +
    import flixel.text.FlxText;
    +HAXE
    +

    Then save your changes (or simply enable auto-save via File > Auto Save).

    +
  10. +
  11. +

    The moment of truth! Go down to the status bar in VSCode and verify that the HTML5 target is selected in the lower left:

    +

    +

    Then run the "build task" (or press the keyboard shortcut for it)!

    +

    +

    After a short moment, your default browser should pop up with a HaxeFlixel splash screen and then the text we just added:

    +

    +

    It worked! You've built and ran your first HaxeFlixel project!

    +

    At this point, you could try building it for Neko, Windows and Android to make sure they all work as well. If you run into problems with any of those, double-check your code, check out the OpenFL installation information, and if that doesn't help, get in touch with the community.

    +

    This is only a small step towards bigger and better things! In the next part, we'll actually define the game we're going to be building, and start putting it together!

    +
  12. +
+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/creating-a-tilemap/index.html b/documentation/creating-a-tilemap/index.html new file mode 100644 index 000000000..dfb331e66 --- /dev/null +++ b/documentation/creating-a-tilemap/index.html @@ -0,0 +1,1084 @@ + + + + + + + + + + + 5 - Creating a Tilemap | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

5 - Creating a Tilemap

+ +

Now it's time to make some maps for the player to move around in! To do this, we're going to use a tool called Ogmo Editor. Ogmo is a free tilemap editor that works very nicely with HaxeFlixel. For this part of the tutorial, we're just going to use a simple 2-tile tilesheet with a tile for walls and a tile for floors.

+

You can make your own, with 16x16 pixel tiles, or use this one:

+

+

(Note: the first tile should be empty!)

+
    +
  1. +

    Download and install Ogmo Editor 3, then launch it.

    +
  2. +
  3. +

    Click on New Project and navigate to assets/data - save the project as turnBasedRPG.ogmo.

    +
  4. +
  5. +

    On the General tab, you can rename your project, set the default level sizes, and more. Set it up like this:

    + +
  6. +
  7. +

    On the Layers tab, make an Entity Layer called entities and a Tile Layer called walls:

    + +
  8. +
  9. +

    On the Entities tab, make an entity called player:

    + +
  10. +
  11. +

    Finally, on the Tilesets tab, make a new tileset called tiles and load the tiles from earlier:

    + +
  12. +
  13. +

    When you're done, click on Save and you'll be brought to this screen:

    + +
  14. +
  15. +

    Make sure you're on the walls layer, and using the tools at the top, draw out a simple map. Make sure it's completely encircled by walls (so the player can't wander off the map), and make the insides filled with floor tiles. You should end up with something like this:

    + +
  16. +
  17. +

    Now, switch over to the 'entities' layer, and place your player entity somewhere in one of your rooms:

    + +
  18. +
  19. +

    Hit Ctrl+S (Cmd+S on Mac), and save this level as room-001.json in assets/data.

    +
  20. +
+

We're done with Ogmo for now, so save all your changes and exit.

+

In the next part, we will learn how to load the newly created tilemap into our game.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/debugger-interaction/index.html b/documentation/debugger-interaction/index.html new file mode 100644 index 000000000..478091536 --- /dev/null +++ b/documentation/debugger-interaction/index.html @@ -0,0 +1,1057 @@ + + + + + + + + + + + Debugger - Interaction | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Debugger - Interaction

+ +

The interaction tool (enabled by the button in the debugger overlay) allows you to change game elements, e.g. move sprites, while the game is still running.

+

It is highly recommended, however, that you pause the game using VCR's pause button before using the interaction tool. You can always resume the game by clicking VCR's play button after you are done with the interaction. If the game is not paused during the interaction, objects affected by acceleration, for instance, will continue to move, making your work harder.

+

Interaction tools

+

When the interaction is enabled, a toolbar containing a few related tools is displayed on the left side of the screen. Below is a description of each tool.

+

Pointer

+

The pointer tool allows you to select game elements. In order to use it, simply click elements on the screen:

+

+

Currently only elements that extend FlxSprite can be selected (which exclude tiles of a tilemap, for instance). Elements that belong to your selection will be highlighted in red. If you click an empty space, the selection will be discarded.

+

You can add/remove elements to/from your existing selection by holding CTRL when you click elements. It is also possible to add/remove a group of elements by clicking and dragging the mouse cursor to create a selection area:

+

+

If you press the DELETE key when elements are selected, the debugger will invoke the kill() method of each element in that selection. You can also press DELETE while holding SHIFT to invoke the kill() method and additionally remove the elements from memory, i.e. elements will be removed from Flixel's display list.

+

Mover

+

The mover tool allows you to move game objects that were selected by the pointer tool. In order to use this functionality, select any element(s) using the pointer tool, then pick the mover tool and click-and-drag anywhere on the screen:

+

+

The selected elements will follow the movement of the mouse cursor until you release the mouse button.

+

The mover tool is also activated while the SHIFT key is kept pressed, so you can move selected elements at any time, even when any other tool is active. After performing a selection, hold SHIFT then click-and-drag anywhere on the screen to move the selected element(s):

+

+

When you stop pressing SHIFT, the element(s) will stop moving and your previously active tool will become effective again.

+

Transform

+

The transform tool allows you to resize and rotate a selected game object. In order to use this functionality, select a single element using the pointer tool, then pick the transform tool and click-and-drag any of the markers around the object:

+

+

The circular marker at the top-left corner of the selected object can be used to rotate it, while the squared markers can be used to resize it.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/debugger/index.html b/documentation/debugger/index.html new file mode 100644 index 000000000..af5ef1310 --- /dev/null +++ b/documentation/debugger/index.html @@ -0,0 +1,1161 @@ + + + + + + + + + + + Debugger | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Debugger

+ +

Flixel comes with a fairly powerful debugging overlay. You can open it with one of the default toggle keys (F2, ` and \ with a QWERTY keyboard layout). Note that these are configurable via FlxG.debugger.toggleKeys. Alternatively, you can do the same in code via the FlxG.debugger.visible flag.

+

Note that the debugger does not exist when compiling with FLX_NO_DEBUG. With the default Project.xml, this is the case in release mode. On the command line, use the -debug flag to build in debug mode instead (e.g. lime test neko -debug).

+

+

Debug draw

+

FlxG.debugger.drawDebug can be enabled to display the hitboxes of every FlxObject added to the state (alternatively, press the cube button in the upper right corner of the debugger).

+

+

The hitboxes are color-coded based on the collision properties. For FlxObject and FlxSprite this means:

+
    +
  • Blue for allowCollisions == NONE
  • +
  • Green for immovable objects
  • +
  • Red otherwise
  • +
+

The color is customizable via the debugBoundingBoxColor property.

+

The behavior of tiles in FlxTilemap is slightly different:

+
    +
  • Blue for allowCollisions == NONE
  • +
  • Green for allowCollisions == ANY
  • +
  • Pink for other values of allowCollisions
  • +
+

The Log Window

+

The log window is used to display traces and can be accessed via FlxG.log. You can also redirect any trace()-calls to it with FlxG.log.redirectTraces = true;. Using it is mostly a matter of preference, some people prefer to have their traces displayed in their IDE of choice (FlashDevelop's output panel for example).

+

Some flixel-internal errors will also be output to the log window.

+

Log styles

+

It's possible to customize things like text color, size, style or add a prefix by using log styles. FlxG.log.warn(), error() and notice() use pre-defined log styles.

+

Here's an example of how you could differentiate each trace by the player from others by adding a [Player] prefix and printing it in green:

+
var playerAction = new LogStyle("[Player]", "00FF40");
+FlxG.log.advanced(" Shoot", playerAction);
+HAXE
+

The Watch Window

+

It's very common to use trace()-calls to output the value of certain variables for debugging. However, this approach doesn't scale very well - at 60 fps, tracing the values of multiple variables results in a flood of messages. Breakpoints-debugging is great to inspect a game's internal state, but doesn't help when interrupting the execution is not an option, for example when debugging input logic.

+

This is where the watch window comes into play. It displays the values of variables using reflection. For example, to keep track of the player's position:

+
FlxG.watch.add(_player, "x");
+FlxG.watch.add(_player, "y");
+HAXE
+

The display string does not have to be the same as the variable's name, "numEnemies" is much more descriptive than "length" in this example:

+
FlxG.watch.add(_enemies, "length", "numEnemies");
+HAXE
+

+

For static variables, you pass the class instead of an object:

+
FlxG.watch.add(FlxG, "height");
+HAXE
+

It's also possible to edit the displayed values by clicking on them, entering a new value in the text field and pressing enter to confirm. This even works with FlxPoint objects.

+

To remove a watch entry again, simply call FlxG.watch.remove(object, variableName).

+

Quick watches

+

Quick watches are a lightweight alternative to a regular watch entry. They don't require a variable, they simply store a value for a String name. The following example stores the result of FlxG.keys.anyPressed(["UP", "W"]) under the name "Up key pressed" - this is updated every frame since it happens in update().

+
override public function update():Void
+{
+	super.update();
+	FlxG.watch.addQuick("Up key pressed", FlxG.keys.anyPressed(["UP", "W"]));
+}
+HAXE
+

To remove a quick watch entry, call FlxG.watch.removeQuick(name). +Quick watch values can not be modified.

+

Mouse watch

+

FlxG.watch.addMouse() is a convenient helper to display the current mouse position in the watch window. This can be useful to find the right coordinates to position UI elements at. You can also use the console command watchMouse to call this function.

+

The Stats Window

+

The stats window displays some basic profiling info:

+
    +
  1. FPS value
  2. +
  3. Memory usage in MB
  4. +
  5. The amount of update() calls this frame (and the time it took in ms)
  6. +
  7. The amount of draw() calls this frame (and the time it took in ms)
  8. +
  9. The size of the FlxQuadtree pool for collision detection
  10. +
  11. The size of the FlxList (used for quad trees) pool
  12. +
+

3 and 4 are especially useful when it comes to performance optimization ("Do I need to optimize my rendering or my update-logic?"). Of course this is only very basic data, profiling tools like Adobe Scout or hxScout provide much more detailed information.

+

+

The Bitmap Log Window

+

The Bitmap Log can be used to display BitmapData objects via FlxG.bitmapLog.add(bitmapData). This can be useful to debug logic that manipulates some BitmapData. The window provides a slideshow to scroll through logged bitmaps. You can use the middle mouse button to move the graphic around and the mouse wheel to zoom in and out.

+

You can also inspect flixel's internal BitmapData cache by calling FlxG.bitmapLog.viewCache() or entering the console command viewCache.

+

+

The Console Window

+

The console allows a limited subset of Haxe code to be parsed and executed at runtime via hscript. Commands like state._player.x = 50 or state._player.jump() as you'd expect. Especially on targets with long compile times, this can speed up development substantially.

+

It also supports auto completion for class fields and registered functions / objects / classes, similar to the completion popups in IDEs (albeit without documentation, which is not available at runtime).

+

+

state is the starting point for hscript and needs to be registered to the console to be available - Flixel already does this for you. The same goes for a few classes like FlxG or Math. To register further objects or classes, call FlxG.console.registerObject().

+

By default, the game is paused when the console text field receives focus. After a command is executed, the game progresses one frame so the effects can be seen.

+

The console stores executed commands (use the up and down keys to cycle through them). This history is persistent across executions of your game (but not across different target platforms).

+

Adding custom commands

+

Functions can also be registered to the console directly as commands via FlxG.console.registerFunction(). Here's an example with a function called "spawnEnemy", spawning a new enemy at the current mouse position in the Mode demo.

+
// in PlayState#create()
+FlxG.console.registerFunction("spawnEnemy", function() {
+	var mousePos = FlxG.mouse.getWorldPosition();
+	var enemy = _enemies.recycle(Enemy);
+	enemy.init(Std.int(mousePos.x), Std.int(mousePos.y), _enemyBullets, _bigGibs, _player);
+});
+HAXE
+

Tracker Windows

+

Tracker windows are a convenient way to inspect the most important properties of a class / object. Each tracker window is basically a watch window instance. It's the only window type that can be closed.

+

A tracker profile defines the properties that should be watched for a specific class. Let's take a look at the pre-defined tracker profile for FlxSprite:

+
new TrackerProfile(FlxSprite, ["frameWidth", "frameHeight", "alpha", "origin", "offset", "scale"], [FlxObject])
+HAXE
+

The first argument determines the class the profile belongs to, the second is an Array<String> containing the property names. The third argument is a list of extensions - in this case just FlxObject. This means that the properties defined in the tracker profile of FlxObject will be added to tracker windows for FlxSprite as well. This works recursively - FlxObject "extends" the FlxBasic tracker profile, so any properties of that profile will be added as well. This is why FlxG.debugger.track(_player) in Mode's PlayState#create() creates a window with a longer list of properties than you'd initially expect from the FlxSprite profile:

+

+

Alternatively, you can use the console to create tracker windows at runtime:

+

track(FlxG.state._player)

+

The real power of tracker windows comes with the ability to define custom profiles, for example for the Player class in Mode:

+
FlxG.debugger.addTrackerProfile(new TrackerProfile(Player, ["isReadyToJump", "_shootCounter", "_jumpPower"], [FlxBasic]));
+HAXE
+

(Note: calling addTrackerProfile() causes a crash on the latest haxelib release due to a bug. As a workaround, you can call FlxG.debugger.track(null); beforehand).

+

+

The VCR

+

Flixel's VCR feature (recording and replaying via FlxG.vcr) is mostly disabled by default and can be activated with the FLX_RECORD define. Even so, a few features are still available by default via the middle three buttons of the debugger:

+

+

The left button resets the current state via FlxG.resetState().

+

The middle button pauses / unpauses the game.

+

The right button pauses the game if it isn't already paused and skips ahead exactly one frame (one update() and one draw() call). This can be very useful for debugging certain issues.

+

If FLX_RECORD is defined, two more buttons are available:

+

+

The circle starts a new recording - it also resets the current state, since the VCR does not support recordings that start mid-state. If a recording has already been started, the button stops it and opens a file dialog to save it.

+

The button with the folder icon right allows loading record files and replaying them.

+

Adding Debugger Buttons

+

You can add custom buttons to the debugger header using FlxG.debugger.addButton(). This is what FlxNapeState from flixel-addons does if you use it - it adds a convenient "N" button to toggle Nape's debug draw.

+

+

Debugger buttons are persistent across states - FlxG.debugger.removeButton() has to be called manually to remove state-specific buttons.

+

Debugger Layouts

+

A debugger layout determines the initial position and size of each debugger window. The available layouts are described in the FlxDebuggerLayout enum. You can change the current layout by calling FlxG.debugger.setLayout().

+

Here's an example of FlxDebuggerLayout.RIGHT:

+

+

The Interaction Tool

+

The Interaction Tool, enabled by the icon in the debugger overlay, allows you to change game elements, e.g. move sprites, while the game is still running. Click here to learn more about the interaction tool.

+

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/desktop-targets/index.html b/documentation/desktop-targets/index.html new file mode 100644 index 000000000..26dd9dfaf --- /dev/null +++ b/documentation/desktop-targets/index.html @@ -0,0 +1,1069 @@ + + + + + + + + + + + Desktop Targets | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Desktop Targets

+ +

The desktop targets of HaxeFlixel run on all mainstream operating systems (OSX, Windows and Linux). They are all compiled to C++ through the Hxcpp library and are rendered through interfacing with the Simple DirectMedia Layer. The code for this part of the library is developed through NME which provides dll libs that openfl interfaces with.

+

The biggest advantage of desktop targets compared to web and mobile is the power of desktop CPU and GPU processors. More complex scenes, physics and number of objects rendered can give a larger creative freedom in the games you create.

+

Rendering in HaxeFlixel is done through the drawTiles API. OpenGL textures are used with the GPU to render Flixel sprites. This native C++ code and use of the GPU outperforms runtimes such as the Flash Player and Adobe AIR in most circumstances substantially.

+

Conditionals

+
#if cpp
+//your desktop code
+#end
+
+#if desktop
+//your desktop code
+#end
+
+

Project XML Settings

+

Desktop platforms can use a window width and height of 0, which is a special value that uses the full resolution of the current display.

+
<window width="0" height="0" background="#FFFFFF" fps="60" />
+XML
+

OpenFL also exposes the following specific settings for the desktop target:

+
<window hardware="true" allow-shaders="true" require-shaders="true" if="cpp"/>
+<window vsync="true" antialiasing="4" if="cpp" />
+<window orientation="portrait" /> || <window orientation="landscape" if="cpp"/>
+XML
+

Compile Commands

+

Visual Studio Code, FlashDevelop and IntelliJ IDEA support CPP desktop compilation through their GUI.

+

Command Line

+

The basic command to compile and test a native desktop target:

+
lime test windows
+lime test mac
+lime test linux -64
+
+

Run this command from the root folder of your project, the default project.xml will be used automatically. Using the test command will automatically launch the application created.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/enemies-and-basic-ai/index.html b/documentation/enemies-and-basic-ai/index.html new file mode 100644 index 000000000..0030c3ca7 --- /dev/null +++ b/documentation/enemies-and-basic-ai/index.html @@ -0,0 +1,1302 @@ + + + + + + + + + + + 9 - Enemies and Basic AI | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

9 - Enemies and Basic AI

+ +

What would a dungeon game be without enemies? Let's add some!

+
    +
  1. +

    This should be second nature by now - add two new entity types in your Ogmo project, enemy and boss:

    + +
  2. +
  3. +

    Then scatter some enemies and a boss around the map.

    + +
  4. +
  5. +

    So we want to have 2 different enemies in our game. We'll need spritesheets for both of them, with 16x16 pixel frames and the same animation frames as our player. Name them enemy.png and boss.png and put them in the assets/images folder. You can use these, if you want (thanks, again, Vicky!):

    +

    +

    +

    Note: make sure that your enemy sprites are functionally the same - they should have the same number of frames for each facing animation.

    +
  6. +
  7. +

    Let's add a new some code for enemies. Since we're going to have two different types of enemies, regular enemies and the boss, let's start by creating an EnemyType enumeration:

    +
    enum EnemyType
    +{
    +	REGULAR;
    +	BOSS;
    +}
    +HAXE
    +

    This basically just gives us two handy constants that we can use to distuingish them. We will put both the enum and our Enemy class into the same Enemy.hx "module" (that's what .hx files are called). The class is going to look very similar to our Player:

    +
    package;
    +
    +import flixel.FlxSprite;
    +
    +enum EnemyType
    +{
    +	REGULAR;
    +	BOSS;
    +}
    +
    +class Enemy extends FlxSprite
    +{
    +	static inline var WALK_SPEED:Float = 40;
    +	static inline var CHASE_SPEED:Float = 70;
    +
    +	var type:EnemyType;
    +
    +	public function new(x:Float, y:Float, type:EnemyType)
    +	{
    +		super(x, y);
    +		this.type = type;
    +		var graphic = if (type == BOSS) AssetPaths.boss__png else AssetPaths.enemy__png;
    +		loadGraphic(graphic, true, 16, 16);
    +		setFacingFlip(LEFT, false, false);
    +		setFacingFlip(RIGHT, true, false);
    +		animation.add("d_idle", [0]);
    +		animation.add("lr_idle", [3]);
    +		animation.add("u_idle", [6]);
    +		animation.add("d_walk", [0, 1, 0, 2], 6);
    +		animation.add("lr_walk", [3, 4, 3, 5], 6);
    +		animation.add("u_walk", [6, 7, 6, 8], 6);
    +		drag.x = drag.y = 10;
    +		setSize(8, 8);
    +		offset.x = 4;
    +		offset.y = 8;
    +	}
    +
    +	override public function update(elapsed:Float)
    +	{
    +		var action = "idle";
    +		if (velocity.x != 0 || velocity.y != 0)
    +		{
    +			action = "walk";
    +			if (Math.abs(velocity.x) > Math.abs(velocity.y))
    +			{
    +				if (velocity.x < 0)
    +					facing = LEFT;
    +				else
    +					facing = RIGHT;
    +			}
    +			else
    +			{
    +				if (velocity.y < 0)
    +					facing = UP;
    +				else
    +					facing = DOWN;
    +			}
    +		}
    +
    +		switch (facing)
    +		{
    +			case LEFT, RIGHT:
    +				animation.play("lr_" + action);
    +
    +			case UP:
    +				animation.play("u_" + action);
    +
    +			case DOWN:
    +				animation.play("d_" + action);
    +
    +			case _:
    +		}
    +
    +		super.update(elapsed);
    +	}
    +}
    +HAXE
    +

    The main difference is that we have a new type variable, which we will use to figure out which enemy sprite to load, and which one we're dealing with, etc.

    +
  8. +
  9. +

    Next, we'll make a FlxGroup in our PlayState to hold our enemies, and load them into the map, very much the same way we did our coins.

    +

    At the top of our class, add:

    +
    var enemies:FlxTypedGroup<Enemy>;
    +HAXE
    +

    In the create function, right after we add our coin group:

    +
    enemies = new FlxTypedGroup<Enemy>();
    +add(enemies);
    +HAXE
    +

    We will also need to add two more cases to our placeEntities() function:

    +
    else if (entity.name == "enemy")
    +{
    +	enemies.add(new Enemy(entity.x + 4, entity.y, REGULAR));
    +}
    +else if (entity.name == "boss")
    +{
    +	enemies.add(new Enemy(entity.x + 4, entity.y, BOSS));
    +}
    +HAXE
    +

    Go ahead and test out your game to make sure the enemies are added properly.

    +
  10. +
  11. +

    (optional step) Our placeEntities() is starting to get a bit repetitive. Each if checks entity.name, and each time we use entity.x and entity.y.

    +

    Let's fix this by using a switch-case instead of an if/else-chain, as well as adding some temporary x and y variables:

    +
    var x = entity.x;
    +var y = entity.y;
    +
    +switch (entity.name)
    +{
    +	case "player":
    +		player.setPosition(x, y);
    +
    +	case "coin":
    +		coins.add(new Coin(x + 4, y + 4));
    +
    +	case "enemy":
    +		enemies.add(new Enemy(x + 4, y, REGULAR));
    +
    +	case "boss":
    +		enemies.add(new Enemy(x + 4, y, BOSS));
    +}
    +HAXE
    +

    There, that's a lot easier to read!

    +
  12. +
+

Now let's give our enemies some brains.

+

In order to let our enemies 'think', we're going to utilize a very simple Finite-state Machine (FSM). Basically, the FSM works by saying that a given machine (or entity) can only be in one state at a time. For our enemies, we're going to give them 2 possible states: Idle and Chase. When they can't 'see' the player, they will be Idle - wandering around aimlessly. Once the player is in view, however, they will switch to the Chase state and run towards the player.

+
    +
  1. +

    Shouldn't be that hard! First, we'll make our FSM class:

    +
    class FSM
    +{
    +	public var activeState:Float->Void;
    +
    +	public function new(initialState:Float->Void)
    +	{
    +		activeState = initialState;
    +	}
    +
    +	public function update(elapsed:Float)
    +	{
    +		activeState(elapsed);
    +	}
    +}
    +HAXE
    +
  2. +
  3. +

    Next, we'll change our Enemy class a little.

    +

    We need to define these variables at the top of the class:

    +
    var brain:FSM;
    +var idleTimer:Float;
    +var moveDirection:Float;
    +var seesPlayer:Bool;
    +var playerPosition:FlxPoint;
    +HAXE
    +
  4. +
  5. +

    At the end of the constructor, add:

    +
    brain = new FSM(idle);
    +idleTimer = 0;
    +playerPosition = FlxPoint.get();
    +HAXE
    +
  6. +
  7. +

    And then add the following functions:

    +
    function idle(elapsed:Float)
    +{
    +	if (seesPlayer)
    +	{
    +		brain.activeState = chase;
    +	}
    +	else if (idleTimer <= 0)
    +	{
    +		// 95% chance to move
    +		if (FlxG.random.bool(95))
    +		{
    +			moveDirection = FlxG.random.int(0, 8) * 45;
    +
    +			velocity.setPolarDegrees(WALK_SPEED, moveDirection);
    +		}
    +		else
    +		{
    +			moveDirection = -1;
    +			velocity.x = velocity.y = 0;
    +		}
    +		idleTimer = FlxG.random.int(1, 4);
    +	}
    +	else
    +		idleTimer -= elapsed;
    +	
    +}
    +
    +function chase(elapsed:Float)
    +{
    +	if (!seesPlayer)
    +	{
    +		brain.activeState = idle;
    +	}
    +	else
    +	{
    +		FlxVelocity.moveTowardsPoint(this, playerPosition, CHASE_SPEED);
    +	}
    +}
    +HAXE
    +

    Also add this line to update() before super.update(elapsed):

    +
    brain.update(elapsed);
    +HAXE
    +

    The way this is going to work is that each enemy will start in the Idle state. In the PlayState we will have each enemy check to see if it can see the player or not. If it can, it will switch to the Chase state, until it can't see the player anymore. While in the Idle state, every so often (in random intervals) it will choose a random direction to move in for a little while (with a small chance to just stand still). While in the Chase state, they will move directly towards the player.

    +
  8. +
  9. +

    Let's jump over to the PlayState to add our player's vision logic. In update(), under the overlap and collision checks, add:

    +
    FlxG.collide(enemies, walls);
    +enemies.forEachAlive(checkEnemyVision);
    +HAXE
    +
  10. +
  11. +

    Next, add the checkEnemyVision() function:

    +
    function checkEnemyVision(enemy:Enemy)
    +{
    +	if (walls.ray(enemy.getMidpoint(), player.getMidpoint()))
    +	{
    +		enemy.seesPlayer = true;
    +		enemy.playerPosition = player.getMidpoint();
    +	}
    +	else
    +	{
    +		enemy.seesPlayer = false;
    +	}
    +}
    +HAXE
    +

    Note how we need to modify two enemy variables for this. The default visibility in Haxe is private, so the compiler doesn't allow this. We will have to make them public instead:

    +
    public var seesPlayer:Bool;
    +public var playerPosition:FlxPoint;
    +HAXE
    +
  12. +
+

That's all there is to it! Try out your game and make sure it works.

+

+

Next, we'll add some UI to the game, and add our RPG-style combat so you can fight the enemies!

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/faq/index.html b/documentation/faq/index.html new file mode 100644 index 000000000..a898f8f6a --- /dev/null +++ b/documentation/faq/index.html @@ -0,0 +1,1056 @@ + + + + + + + + + + + FAQ | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

FAQ

+ +

Do I have to learn Flixel (AS3) before HaxeFlixel?

+

No, you have to learn HaxeFlixel to use HaxeFlixel, although previous experience with the AS3 version will help.

+

Do I have to learn OpenFL to use HaxeFlixel?

+

No, HaxeFlixel abstracts it completely.

+

Are there any more tutorials?

+

We have a dedicated Community Tutorials page that links to many external community made tutorials!

+

You can find the official HaxeFlixel "Dungeon Crawler" tutorial here.

+

I found a bug, where do I report it?

+

On the official GitHub repository.

+

My sounds are lagging!?

+

On some platforms, it helps to manually cache sounds: FlxG.sound.cache("sound"); or FlxG.sound.cacheAll(); to do all at once.

+

My player falls off-screen after walking a certain distance!

+

Collisions are limited to the area defined by FlxG.worldBounds. For example in platformers where this area needs to be larger, you need to adjust it manually.

+

Can I make 3D games with HaxeFlixel?

+

No, the framework is limited to 2D graphics. Well. Except for some crazy people.

+

How do I protect my assets from being stolen?

+

If you add embed="true" to the <assets path="assets"> tag of the Project.xml, the asset files are embedded into the .exe.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/flixel-addons/index.html b/documentation/flixel-addons/index.html new file mode 100644 index 000000000..bf15c562a --- /dev/null +++ b/documentation/flixel-addons/index.html @@ -0,0 +1,1059 @@ + + + + + + + + + + + Flixel Addons | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Flixel Addons

+ +

The addons are a set of very useful, but nevertheless optional classes that not every game is going to need. That is why they are not quite important enough to be a part of HaxeFlixel's core.

+

Installing flixel-addons

+

The addons are designed to be used with haxelib and are hosted on the main HaxeFlixel GitHub account.

+
haxelib install flixel-addons
+
+

Now to verify you can see if flixel-addons is in your haxelib list:

+
haxelib list
+
+

To use the addons in a project simply add the following XML node to your OpenFL Project.xml file.

+
<haxelib name="flixel-addons" />
+
+

What's in the addons?

+ + + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/flixel-display-list/index.html b/documentation/flixel-display-list/index.html new file mode 100644 index 000000000..aeded522c --- /dev/null +++ b/documentation/flixel-display-list/index.html @@ -0,0 +1,1046 @@ + + + + + + + + + + + Flixel Display List | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Flixel Display List

+ +

The Flixel Display list is a specially designed structure for your game's sprites to be rendered.

+

FlxSprite != flash.display.Sprite

+

The Flash API has a display list that is populated by adding display objects in a parent child relationship. Sprites are an extended form of display objects that have extended features. They can be added, removed and can have their parent and children's depth changed with an easy to use API.

+

It is a common misconception for Flash developers to assume that FlxSprites in Flixel work like the Flash Sprites. FlxSprites also do not share the event system Flash Sprites have, so addEventListener() is also not available or necessary in most situations.

+

For performance reasons, Flixel has its own independent display list and it renders all of its FlxSprites onto a single Flash DisplayObject with each FlxCamera. For this reason, you cannot add a flash.display.sprite to a FlxState and you cannot add a FlxSprite to the main Flash stage.

+

You can see the display objects used in a typical Flixel game in this diagram. Note you can still place display objects above or below Flixel's camera. It is recommended to use FlxG.addChildBelowMouse() and FlxG.removeChild() for that.

+ + + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/flixel-tools/index.html b/documentation/flixel-tools/index.html new file mode 100644 index 000000000..e8d7f0cf6 --- /dev/null +++ b/documentation/flixel-tools/index.html @@ -0,0 +1,1059 @@ + + + + + + + + + + + Flixel Tools | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Flixel Tools

+ +

To make HaxeFlixel development easier, a set of command line tools has been developed with Haxe and Neko. With it you can easily create our demo projects, templates and more. Just like HaxeFlixel it is an open-source tool and additions/improvements from the community are welcome at the flixel-tools GitHub repository.

+

Installation

+

The tools are available on haxelib:

+
haxelib install flixel-tools
+BASH
+

Setup

+

To set the tools up initially / to be able to use the flixel alias in your console:

+
haxelib run flixel-tools setup
+BASH
+

Commands

+

create (c)

+

Create a new demo (in the current directory):

+
flixel create <name_or_number>
+BASH
+

If no name or number is given, it will list all demos and prompt you for a choice, by number or name.

+

template (tpl)

+

To create a new project from the default template:

+
flixel tpl -n <name>
+BASH
+

Any folder in the flixel-templates haxelib is treated as a template and can be created with the flixel tpl <foldername> syntax. This makes it easy to create custom templates.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/flxgroup/index.html b/documentation/flxgroup/index.html new file mode 100644 index 000000000..3f23ec72f --- /dev/null +++ b/documentation/flxgroup/index.html @@ -0,0 +1,1080 @@ + + + + + + + + + + + FlxGroup | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

FlxGroup

+ +
import flixel.group.FlxGroup;
+HAXE
+

FlxGroups are an invaluable method of grouping your game objects in Flixel. In fact, there is no way around them, as FlxState itself extends FlxGroup. +The use cases for groups are vast: pooling to reuse objects, collision detection and setting up easy ways to access particular collections of objects. A great feature of FlxGroups are their ability to be nested when using collision detection. Doing collisions is also way more efficient than doing it for individual objects.

+

The API for FlxGroups is similar to other places in Flixel. Here is a basic example using a group to pool bullet objects, represented by a Bullet class, holding a maximum of 100 bullets:

+
var poolSize = 100;
+var bullets = new FlxTypedGroup<Bullet>(poolSize);
+
+for (i in 0...poolSize)
+{
+	var bullet = new Bullet();
+	bullet.kill();
+	bullets.add(bullet);
+}
+HAXE
+

Note how we did not use a regular FlxGroup, but a FlxTypedGroup<Bullet>. This means that this particular group can only store objects that are instances of the Bullet class or instances of Bullet subclasses. FlxGroup itself is nothing but a shortcut for FlxTypedGroup<FlxBasic>.

+

Now, say we want to retrieve bullet instance to use in a shoot method:

+
var bullet = bullets.recycle(Bullet);
+HAXE
+

If we had used a regular group here, we would have had to cast the return value of recycle() to a Bullet. By using a FlxTypedGroup<Bullet>, we have the benefit of type-safety.

+

add(Object:T):T;

+

You can add any type of Object that extends the base FlxGroup type, if you use FlxGroup this is FlxBasic.

+

remove(Object:T):T

+

Removes an object from a group, it will return the object you removed.

+

getFirstAvailable(ObjectClass:Class<T> = null):T

+

This will let you get the first FlxBasic object that has exists == false, this is typically used in object pooling when object may have used the kill() method. Note if you destroy() objects they will be made null in the FlxGroup and you wont be able to reuse them.

+

kill();

+

This will recursively kill() all objects so that they will be ready for use with getFirstAvailable.

+

sort(Function:Int->T->T->Int, Order:Int = FlxSort.ASCENDING);

+

Call this function to sort the group according to a particular value and order. You will need to specify a sorting function to do so. If you want to sort by something other than y, you will have to write a custom sorting function.

+

Otherwise, you can just use the pre-made FlxSort.byY() like so for Zelda-style-sorting:

+
group.sort(FlxSort.byY);
+HAXE
+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/flxsave/index.html b/documentation/flxsave/index.html new file mode 100644 index 000000000..14dcc054c --- /dev/null +++ b/documentation/flxsave/index.html @@ -0,0 +1,1085 @@ + + + + + + + + + + + FlxSave | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

FlxSave

+ +
import flixel.util.FlxSave;
+HAXE
+

HaxeFlixel gives you the FlxSave class to manage saving and loading your game's data. You might use it to save and load a high score table, or the position and status of the player and enemies, or custom settings the player has selected. Like most of HaxeFlixel, FlxSave is cross-platform in functionality.

+

To use FlxSave you need a variable typed to that class. You can create your own variable (perhaps in your registry class, in your gameplay FlxState, or as a local variable in your save/load functions). You may also use the one that HaxeFlixel itself uses (FlxG.save).

+

The example code used below is largely taken from the HaxeFlixel save demo. If you have already installed HaxeFlixel, then to install the demo project just open a command line utility, navigate to the folder you would like to install into, and enter the command flixel create Save, or download the source via GitHub using the link on the demo web page.

+

Saving

+

So how can you save some of your game data? Once you have your variable, you will need to initialize, then bind it:

+
_gameSave = new FlxSave(); // initialize
+_gameSave.bind("SaveDemo"); // bind to the named save slot
+HAXE
+

Note the string "SaveDemo". This is how HaxeFlixel tracks what save slot you are binding to in local storage. If you want to have multiple saves, you will probably want to define a series of strings to identify each slot, eg. "SaveSlot1", "SaveSlot2", etc. and bind to the appropriate one. For more information on using multiple save slots, take a look at Wolfgang's article on the subject for AS3 Flixel, but keep in mind that the AS3 syntax is a little different from Haxe.

+

Note: If you plan to use FlxG.save you can skip the initializing and binding steps, as HaxeFlixel has done it for you.

+

Once bound, the save is essentially "live". To write to it you use the .data property of variable, treating it as an object:

+
_gameSave.data.boxPositions = new Array<FlxPoint>();
+_gameSave.data.boxPositions.push(box.getPosition());
+
+_gameSave.data.enemy = myEnemy;
+
+// save data
+_gameSave.flush();
+HAXE
+
flush()
+

Writes the local shared object to disk immediately. +Required on non-Flash targets.

+
Serialization
+

In certain cases you may need to serialize and unserialize your data (fancy words for "take my data and turn it into a specially formatted string, or back into data") to avoid errors, but you may want to try it without serialization unless you experience problems.

+

Loading

+

In order to retrieve your saved data, you simply make sure you have a correctly bound FlxSave variable and read each value from the .data property.

+
var position = _gameSave.data.boxPositions[tempCount];
+box.setPosition(position.x, position.y);
+HAXE
+

This means that, depending on your save needs, when loading a save slot you may need to loop through a long list of data to assign each of the values back to it's correct home.

+

Existing save data

+

When you save data to a given FlxSave save slot there is, of course, the possibility that data already exists in that slot (hopefully your saved data from an earlier save). One way to test for this is to check if one of your variables is null. If save data does already exist and you plan to save an entire fresh set of new data, then to avoid carrying over values from an earlier save you may wish to either go through and initialize or reset each of the potentially saved variables to some default value (or null) before saving your new set, or you may wish to erase the save data entirely (probably not a good idea if you're using FlxG.save).

+

FlxSave provides an .erase() method to help with this process, but keep in mind that calling it on a bound FlxSave variable will: immediately erase all the data in .data, save the slot in the erased state (any earlier data is now completely gone), and also destroy the binding to the save slot. This last point is important to note, as after the binding has been broken FlxSave may still let you assign to .data and even call other methods without errors to indicate that the data is not actually being stored at all. So if you do use the .erase() method, don't forget to call .bind() again before you save or load any further data.

+

Other methods

+

In the Save demo the application creates and binds a FlxSave variable when the demo state initializes (see PlayState#create()), and then leaves this variable accessible for loading and saving from that point on. This allows you to continually update the save object when necessary, but it's equally valid to create, initialize, and bind a FlxSave variable only when loading and saving. In that case you should familiarize yourself with .close() and .destroy()for safe and efficient handling of your FlxSave.

+

To review these additional methods and check out any other FlxSave functionality in more detail, take a look at the API documentation or look at the class definition itself (currently under the util package in the flixel library).

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/flxsprite/index.html b/documentation/flxsprite/index.html new file mode 100644 index 000000000..b263152f3 --- /dev/null +++ b/documentation/flxsprite/index.html @@ -0,0 +1,1109 @@ + + + + + + + + + + + FlxSprite | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

FlxSprite

+ +
import flixel.FlxSprite;
+HAXE
+

FlxSprites are the core building blocks of all Flixel games. They offer a friendly API to add animation, movement and features for the needs of most games.

+

It is pretty common place to extend FlxSprite for your own game's needs; for example a SpaceShip class may extend FlxSprite but could have additional variables for the game like shieldStrength or shieldPower. When you extend FlxSprite it is important to remember to use super.update() if you override the update method, as you would do for any other FlxBasic.

+

loadGraphic()

+

This method is the easiest way to use a single image for your FlxSprite. Using the OpenFL asset system defined in the project xml file you simply have to define a path to your image and the compiler will do the rest.

+
var player = new FlxSprite();
+player.loadGraphic("assets/player.png");
+add(player);
+HAXE
+

makeGraphic()

+

This method is a handy way to make a simple color fill to quickly test a feature or have the basic shape.

+
var whiteSquare = new FlxSprite();
+whiteSquare.makeGraphic(200, 200, FlxColor.WHITE);
+add(whiteSquare);
+HAXE
+

Properties

+

Position: x, y

+
whiteSquare.x = 100;
+whiteSquare.y = 300;
+HAXE
+

Size: width, height

+

Automatically set in loadGraphic() or makeGraphic(), changing this will only affect the hitbox of this sprite, use scale to change the graphic's size.

+
// get
+var getWidth = whiteSquare.width;
+
+// set
+whiteSquare.width = 100;
+whiteSquare.height = 100;
+HAXE
+

Scale

+

(FlxPoint) +Change the size of your sprite's graphic. NOTE: The hitbox is not automatically adjusted, use updateHitbox() for that (or setGraphicSize()).

+
// twice as big
+whiteSquare.scale.set(2, 2);
+
+// 50%
+whiteSquare.scale.set(0.5, 0.5);
+HAXE
+

Offset

+

(FlxPoint) +Controls the position of the sprite's hitbox. Likely needs to be adjusted after changing a sprite's width, height or scale.

+
whiteSquare.offset.set(50, 50);
+HAXE
+

Origin

+

(FlxPoint) +Rotation axis. Default: center.

+

WARNING: If you change this, the visuals and the collisions will likely be pretty out-of-sync if you do any rotation.

+
// rotate from top-left corner instead of center
+whiteSquare.origin.set(0, 0);
+HAXE
+

​kill()

+

This method is useful for when you want to hide a sprite from the stage but keep it available to reuse later. For example you may want to respawn an enemy the player has killed.

+

destroy()

+

This method is destructive to the sprite and should be used when you want to make sure that the sprite will be cleared from memory. It is commonly used inside a FlxState's overridden destroy method.

+

Animation

+

Flixel supports spritesheet animation.

+

+
player.loadGraphic("assets/player.png", true, 32, 36);
+player.animation.add("walk", [0, 1, 0, 2], 5, true);
+player.animation.play("walk");
+HAXE
+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/flxstate/index.html b/documentation/flxstate/index.html new file mode 100644 index 000000000..ebc512922 --- /dev/null +++ b/documentation/flxstate/index.html @@ -0,0 +1,1128 @@ + + + + + + + + + + + FlxState | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

FlxState

+ +

This is the basis for your game's levels and menus, each described in a "state" structure. The state is a way of organising your game objects for the state that the game is currently in. For example, when you create level 0 of your game it's much more organized to only have the code for that level, not every level. Also it's good to use switching states to clear your memory, to avoid memory leaks. A typical Flixel game will have a separate FlxState class for every level and menu.

+ +

In each FlxState all the FlxSprites are added to be rendered.

+ +

Important Methods

+

create()

+

This is where you setup and create all your state's objects; for example your level tilemaps, your player sprites, spawn your initial enemies. Flixel runs this method before it starts to render your state so its the perfect place.

+

add(object:FlxBasic)

+

This is the place where you add your sprites, tilemaps etc to your state to be rendered. It works similar to OpenFL's display list API with addChild().

+

remove(object:FlxBasic)

+

This is the place where you remove sprites etc you have added to your state. Everything you remove still exists so you can add it back later. If you're not going to use the removed object again you might want to consider removing it from memory by setting it as null for example.

+

update(elapsed:Float)

+

This is the place where you can run code on every frame of your game. It's where you setup your input controls, trigger movement and almost all of your gameplay logic.

+
package;
+
+import flixel.FlxState;
+
+class FlxExampleState extends FlxState
+{
+	override public function create():Void
+	{
+		//create your state objects here
+	}
+
+	override public function update(elapsed:Float):Void
+	{
+		//call super to update the core state class
+		super.update(elapsed);
+	}
+}
+HAXE
+

Here is an example of a simple game state;

+
package;
+
+import flixel.tile.FlxTilemap;
+import flixel.FlxG;
+import flixel.FlxSprite;
+import flixel.FlxState;
+import flixel.graphics.FlxGraphic;
+
+class FlxExampleState extends FlxState
+{
+	var wizard:FlxSprite;
+	var level:FlxTilemap;
+
+	override public function create():Void
+	{
+		//create a main player
+		wizard = new FlxSprite(200, 200, 'assets/player.png');
+		wizard.maxVelocity.set(80, 200);
+		wizard.acceleration.y = 200; // gravity
+		wizard.drag.x = wizard.maxVelocity.x * 4;
+		add(wizard);
+
+		//create a tilemap level
+		level = new FlxTilemap();
+		level.loadMap('assets/level.csv', FlxGraphic.fromClass(GraphicAuto), 0, 0, AUTO);
+		add(level);
+	}
+
+	override public function update(elapsed:Float):Void
+	{
+		//control the player with keyboard
+		wizard.acceleration.x = 0;
+
+		if (FlxG.keys.pressed.LEFT)
+		{
+			wizard.acceleration.x = -wizard.maxVelocity.x * 4;
+		}
+		if (FlxG.keys.pressed.RIGHT)
+		{
+			wizard.acceleration.x = wizard.maxVelocity.x * 4;
+		}
+		if (FlxG.keys.justPressed.SPACE && wizard.isTouching(FLOOR))
+		{
+			wizard.velocity.y = -wizard.maxVelocity.y / 2;
+		}
+		super.update(elapsed);
+	}
+}
+HAXE
+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/flxtween/index.html b/documentation/flxtween/index.html new file mode 100644 index 000000000..652323cd8 --- /dev/null +++ b/documentation/flxtween/index.html @@ -0,0 +1,1154 @@ + + + + + + + + + + + FlxTween | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

FlxTween

+ +

A FlxTween allows you to create smooth interpolations and animations easily. Tweening is short for inbetweening: you only have to specify start and end values and the FlxTween class will generate all values between those two. If you want to see a FlxTween in action, this tween demo is available.

+

For example, if you want to move a FlxSprite across the screen, this code snippet would do it:

+
sprite.x = 200;
+sprite.y = 200;
+
+FlxTween.tween(sprite, { x: 600, y: 800 }, 2);
+HAXE
+

The first two lines specify the start position of the sprite, because the tween() method assumes the current position is the starting position.

+

The first parameter is the object you want to act upon; the second parameter is the map which contains the properties you want to interpolate, and their desired target values. Here, we want to translate the sprite in x to position 600 and in y to position 800. The third parameter specifies the duration of the tween in seconds, which in this case is 2 seconds.

+

Cancelling a Tween

+

If you start a tween using the code above, it will run until the desired values are reached, then stop. As the tween() method returns an object of type FlxTween, keeping this object in a variable allows you to access the current tween running if you wish to control it.

+

For example, this code stops the translation of the sprite if the player presses the spacebar of their keyboard:

+
var tween:FlxTween;
+
+public function new()
+{
+	super();
+	// set up sprite
+	tween = FlxTween.tween(sprite, { x:600, y:800 }, 2);
+}
+
+override public function update(elapsed:Float)
+{
+	super.update(elapsed);
+	
+	if (FlxG.keys.justPressed.SPACE)
+		tween.cancel();
+}
+HAXE
+

Tweening Options

+

The tween() method takes an optional fourth parameter which is a map of options.

+

Possible values are:

+
    +
  • +

    type: choose one of these:

    +
      +
    • +

      FlxTween.ONESHOT: stops and removes itself from its core container when it finishes;

      +
    • +
    • +

      FlxTween.PERSIST: stops when it finishes. Unlike ONESHOT, this type of tween stays attached to the core container when it finishes. This means you can keep a reference to this tween and call start() whenever you need it. This does not work with ONESHOT;

      +
    • +
    • +

      FlxTween.LOOPING: restarts immediately when it finishes;

      +
    • +
    • +

      FlxTween.PINGPONG: plays tween "hither and thither". This is like LOOPING, but every second execution is in reverse direction;

      +
    • +
    • +

      FlxTween.BACKWARD: plays tween in reverse direction.

      +
    • +
    +
  • +
  • +

    onComplete: a callback function, which is called once the tween has finished. This is called every time the tween has finished one execution and comes in handy for repeating tweens (LOOPING and PINGPONG). The method must take a FlxTween and return nothing.

    +
  • +
  • +

    ease: an optional easer function. This can be used to make the beginning and end of a tween smoother. The FlxEase class provides many static methods for this which should cover most cases. The following list shows all functions from FlxEase. In all of these, In can be replaced by Out or InOut, depending on where you want to apply the easing effect: at the beginning of the animation, at the end or at both sides.

    +
      +
    • backIn
    • +
    • bounceIn
    • +
    • circIn
    • +
    • cubeIn
    • +
    • elasticIn
    • +
    • expoIn
    • +
    • quadIn
    • +
    • quartIn
    • +
    • quintIn
    • +
    • sineIn
    • +
    +
  • +
  • +

    startDelay: time to wait before starting this tween, in seconds.

    +
  • +
  • +

    loopDelay: time to wait before this tween is repeated, in seconds. This only applies to LOOPING and PINGPONG.

    +
  • +
+

For example:

+
public function new()
+{
+	super();
+	// set up sprite
+	sprite.x = 200;
+	sprite.y = 200;
+	FlxTween.tween(sprite, { x: 600, y: 800 }, 2, { type: FlxTween.PINGPONG, ease: FlxEase.quadInOut, onComplete: changeColor, startDelay: 1, loopDelay: 2 });
+}
+
+function changeColor(tween:FlxTween):Void
+{
+	// change the color of the sprite here
+}
+HAXE
+

This code moves the sprite constantly between the two points (200|200) and (600|800), smoothly accelerating and decelerating. Each time the sprite arrives at one of those two points, its color changes. The animation starts after 1 second and then the sprite pauses at each point for 2 seconds.

+

Special Tweens

+

There are many more tweening methods in FlxTween, which are used for special cases:

+

color()

+

Tweens the red, green and blue part of a color independently, because normal tweening would screw up the colors.

+

Usage: color(Sprite : FlxSprite, Duration : Float, FromColor : Int, ToColor : Int, ?FromAlpha : Float, ?ToAlpha : Float, ?Options : TweenOptions)

+

Notice that unlike in the tween() method, the duration is specified before the color values and you have to enter the start and the end value. The options are the same as described above.

+

angle()

+

This method is for tweening the angle of a FlxSprite.

+

Usage: angle(Sprite : FlxSprite, FromAngle : Float, ToAngle : Float, Duration : Float, ?Options : TweenOptions)

+

Motion and Path Tweens

+

The FlxTween class also contains the methods linearMotion(), quadMotion(), cubicMotion() and circularMotion(), which make objects follow straight lines, smooth paths or circles.

+

The methods linearPath() and quadPath() can be used for longer paths defined through an array of points, instead of a fixed number of points.

+

If you want to use these methods please refer to the FlxTween API.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/game-development-tools/index.html b/documentation/game-development-tools/index.html new file mode 100644 index 000000000..4d4f933ec --- /dev/null +++ b/documentation/game-development-tools/index.html @@ -0,0 +1,1102 @@ + + + + + + + + + + + Game Development Tools | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Game Development Tools

+ +

A concise list of tools useful to HaxeFlixel developers.This list is under construction. Suggest more, here.

+

External Flixel Libraries

+

A list of repos and libraries made with the purpose of extending HaxeFlixel's capabilities. One day, these may be officially incorporated into HaxeFlixel, but for now they serve a niche demand on their own.

+

Zerolib-flixel

+

A library of extensions, utilities, and other helpful classes for making games quickly in haxeflixel! There's also a framework agnostic version simply called Zerolib

+

djFlixel

+

djFlixel is a small library with some helpful tools for HaxeFlixel, including a multi-page menu system, keyboard/gamepad helpers, and very fun effects.

+

FlxAnimate

+

A repository made by CheemsAndFriends and DotWith made for playing all spritesheet formats and the mysterious but interesting export called Texture Atlas

+

FlxGif

+

Yagp's Gif Player for HaxeFlixel.

+

HxCodec

+

A library which adds native video support for OpenFL and HaxeFlixel.

+

flixel-depth

+

Flixel Depth is a fun 3D hack for making orthogonally 3D looking games using haxeflixel. It does so primarily by offsetting sprites according to the camera's current angle and scaling the primary game window down. This is NOT real 3D, you will still be making a 2D game, so expect a lot of edge cases!

+

depth-flixel (not to be confused with flixel-depth!)

+

A library aimed at making Stacked Sprites easy with Haxeflixel!

+

Graphics Editors

+

Gimp

+

An advanced bitmap based image editor that has many capabilities similar to commercial software. It can be used as a simple paint program, an expert quality photo retouching program, an online batch processing system, a mass production image renderer, an image format converter, etc.

+

Paint.NET

+

With an easy-to-learn but powerful set of tools, Paint.NET can be used for photo retouching, tilemap editing, pixel art editing, and so on. It contains advanced features such as levels and curves editing, noise addition and reduction, fractal and Perlin noise generation and more, but can also be used as a simple image editor.

+

Inkscape

+

An advanced vector image editor with an advanced editing toolset. Inkscape has capabilities similar to commercial software such as Adobe Illustrator, CorelDraw, or Xara X. Inkscape leverages the W3C standard Scalable Vector Graphics (SVG) file format. +Inkscape supports many advanced SVG features (markers, clones, alpha blending, etc.) and great care is taken in designing a streamlined interface. It is very easy to edit nodes, perform complex path operations, trace bitmaps and much more.

+

Krita

+

Krita is a free digital painting and illustration application. Krita offers CMYK support, HDR painting, perspective grids, dockers, filters, painting assistants, and many other features you would expect.

+

Aseprite

+

Aseprite is a program designed for drawing pixel art. It has layers, animation tools, tile map tools, blend modes, atlases, and many more useful features. It's not free, but it's a favorite for many developers.

+

Shoebox

+

ShoeBox is a free Adobe Air based app for Windows and Mac OS X with game and UI related tools. It has many utilities that make asset management easier, such as sprite packing, sprite extraction, texture ripping, bitmap font creation, and more.

+

Texture Packer

+

Texture Packer does one thing very well - it packs several sprites into one large image to help reduce load times for your game. It's easy to use and easy to integrate with HaxeFlixel. This demo shows how to use a TexturePackerAtlas.

+

Free Texture Packer

+

Free Texture Packer is an open source tool that allows you to pack multiple images into one atlas for you games or sites.

+

Sound Editors

+

Audacity

+

Audacity is free, open source, cross-platform audio software for multi-track recording and editing.

+

LMMS

+

LMMS is a free cross-platform software which allows you to produce music with your computer.

+

ChipTone

+

An OpenFL based sound effects generator for video games, build by Tom Vian of SFBGames. Available on HTML5, Windows, and Mac!

+

LabChirp

+

LabChirp is a program for creating sound effects.

+

Map Editors

+

Tiled Map Editor

+

Tiled is a general purpose tile map editor. It is meant to be used for editing maps of any tile-based game, be it an RPG, a platformer or a Breakout clone. This demo shows how to load a Tiled map.

+

Source code: https://github.com/mapeditor/tiled

+

Ogmo Editor

+

Ogmo Editor is a generic level editor for indie game developers who use Windows. It also happens to be free and open source. The editor is built to be reconfigurable, so you can set it up to work well for your game project. This HaxeFlixel tutorial demonstrates how to create a simple top-down level with Ogmo.

+

Source code: https://github.com/Ogmo-Editor-3/OgmoEditor3-CE

+

LDtk

+

LDtk is a level editor created by the lead game designer of Dead Cells. This editor has some extra features work nicely with Haxe and HaxeFlixel, and focuses on being easy to use. This tutorial shows you how to use LDtk tile maps with HaxeFlixel.

+

Source code: https://github.com/deepnight/ldtk

+

More Resources

+

ellisonleao/magictools

+

🎮 📝 A Github list of Game Development resources to make magic happen.

+

Newgrounds Wiki: Creator Resources

+

Curated list of tools and software of all kind, useful for non-programming related things such as art, animation and music!

+

(Archive.org) Ludum Dare List

+

(Likely outdated) Ludum Dare hosts a great list of tools for general game development.

+

(Archive.org)PixelProspector

+

(Likely outdated) Huge list of resources for game dev. A must read for indie developers.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/game-over-menu/index.html b/documentation/game-over-menu/index.html new file mode 100644 index 000000000..414742f1b --- /dev/null +++ b/documentation/game-over-menu/index.html @@ -0,0 +1,1165 @@ + + + + + + + + + + + 11 - Game Over Menu | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

11 - Game Over Menu

+ +

Our game is really starting to come together! Now we need it to feel more like a 'game' with a win and lose scenario. For our (very simple) game, we'll just make it so that if you ever die in combat, you get a Game Over, and when you beat the boss enemy, you win. Both of these conditions will take you to the same FlxState to show you your score and allow you to play again if you want.

+
    +
  1. +

    Let's start with PlayState. We need to add some flags to see if we're ending the game, and if the player has 'won' or not. So, add:

    +
    var ending:Bool;
    +var won:Bool;
    +HAXE
    +

    To the top of the class.

    +
  2. +
  3. +

    Next, in update(), right under super.update(elapsed) add:

    +
    if (ending)
    +{
    +	return;
    +}
    +HAXE
    +

    We don't want to allow anything else to go on if we're ending the game and getting ready to switch states.

    +
  4. +
  5. +

    Next, still in update(), we're going to change our logic in if (inCombat) to this:

    +
    if (!combatHud.visible)
    +{
    +	health = combatHud.playerHealth;
    +	hud.updateHUD(health, money);
    +	if (combatHud.outcome == DEFEAT)
    +	{
    +		ending = true;
    +		FlxG.camera.fade(FlxColor.BLACK, 0.33, false, doneFadeOut);
    +	}
    +	else
    +	{
    +		if (combatHud.outcome == VICTORY)
    +		{
    +			combatHud.enemy.kill();
    +			if (combatHud.enemy.type == BOSS)
    +			{
    +				won = true;
    +				ending = true;
    +				FlxG.camera.fade(FlxColor.BLACK, 0.33, false, doneFadeOut);
    +			}
    +		}
    +		else
    +		{
    +			combatHud.enemy.flicker();
    +		}
    +		inCombat = false;
    +		player.active = true;
    +		enemies.active = true;
    +	}
    +}
    +HAXE
    +

    This will now check to see if the outcome was DEFEAT, and if it was, it will set our ending flag to true, and then tell the camera to start fading out - calling doneFadeOut() when it's done.

    +

    Similarly, if the outcome was VICTORY, and the enemy that was just defeated was type 1 (the boss), we set our won flag to true, and also start fading out.

    +
  6. +
  7. +

    When the camera is done fading to black, we call this function, which will switch the state to our GameOverState (which you'll make in a second), passing it if the player won or not, and how much money they have.

    +
    function doneFadeOut()
    +{
    +	FlxG.switchState(new GameOverState(won, money));
    +}
    +HAXE
    +
  8. +
  9. +

    Finally, we need to add the GameOverState. This is going to be a pretty simple FlxState where we show a message - either "Game Over" or "You Win!", depending on our won flag, and the final score for this player. We will also use flixel's save/load functionality to compare the previous highscores, and, if the new score is higher, replace the saved highscore, and show the highscore on the screen.

    +

    Finally, we have a button to take the player back to the main menu.

    +

    Here is the code for that State:

    +

    GameOverState.hx

    +
  10. +
+

If you test your game, you should be able to trigger the GameOverState by either dying in combat or defeating the boss, and then clicking on the button in the GameOverState will take you back to our MenuState so you can play again. If all of that works, you're on the right track! But… our MenuState is looking a little bland, now… let's fix that up!

+

+
    +
  1. +

    Let's add a title and an options-button to the MenuState:

    +
    var titleText:FlxText;
    +var optionsButton:FlxButton;
    +HAXE
    +
  2. +
  3. +

    Then, in create(), we'll add them to the state (and move the play-button as well):

    +
    titleText = new FlxText(20, 0, 0, "HaxeFlixel\nTutorial\nGame", 22);
    +titleText.alignment = CENTER;
    +titleText.screenCenter(X);
    +add(titleText);
    +
    +playButton = new FlxButton(0, 0, "Play", clickPlay);
    +playButton.x = (FlxG.width / 2) - playButton.width - 10;
    +playButton.y = FlxG.height - playButton.height - 10;
    +add(playButton);
    +
    +optionsButton = new FlxButton(0, 0, "Options", clickOptions);
    +optionsButton.x = (FlxG.width / 2) + 10;
    +optionsButton.y = FlxG.height - optionsButton.height - 10;
    +add(optionsButton);
    +HAXE
    +
  4. +
  5. +

    Add the function that gets called when the options-button is clicked:

    +
    function clickOptions()
    +{
    +	FlxG.switchState(new OptionsState());
    +}
    +HAXE
    +
  6. +
  7. +

    The OptionsState that is called from the options button is fairly simple. It will contain a button to allow the user to clear the saved data (highscores, etc), as well as a simple FlxBar to show the user the current volume level of the game with buttons to adjust it up or down. It will save the volume values so that each time the game starts, it will 'remember' what volume it was last set to (I know there's no sound…. yet ;))

    +

    The code for this State looks like this:

    +

    OptionsState.hx

    +

    The OptionsState class uses a different spritesheet for the volume adjustment buttons (because they should appear smaller than the default buttons). This asset must have 3 frames, one to represent each button state: NORMAL, HIGHLIGHT, and PRESSED. As long as we set up the frames in that order, the FlxButton class will handle the rest.

    +

    Once again, you can make your own, or use the image below. Place it in the assets/images folder, and you should be all set.

    +

    +

    Finally, we want our game to load the stored volume (if there is any) each time the game starts, so, go to Main.hx, and add this after the addChild() call:

    +
    var save = new FlxSave();
    +save.bind("TurnBasedRPG");
    +if (save.data.volume != null)
    +{
    +	FlxG.sound.volume = save.data.volume;
    +}
    +save.close();
    +HAXE
    +

    Pretty simple: it makes a new FlxSave object, binds it to our "TurnBasedRPG" and then checks if there is a volume value stored in it, and if there is, sets our game's volume to match, and then closes the save.

    +
  8. +
+

Test everything out, make sure it's working, and that if you change your volume under options and then exit the game, it retains the value the next time to get into the options screen.

+

+

Looking good! Next time we'll give our volume something to do by adding sound and music!

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/gamepads/index.html b/documentation/gamepads/index.html new file mode 100644 index 000000000..224db03c3 --- /dev/null +++ b/documentation/gamepads/index.html @@ -0,0 +1,1115 @@ + + + + + + + + + + + Gamepads | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Gamepads

+ +

Gamepad input for HaxeFlixel is provided through the FlxGamepad class and is available through FlxG.gamepads and the InputFrontEnd.

+

Since gamepads have a variety of manufacturers their keycodes provided to HaxeFlixel API differ from model to model. HaxeFlixel provides mappings that map buttons and sticks to common IDs for convenient use. Mappings are available for:

+
    +
  • XInput (Xbox 360, Xbox One, etc)
  • +
  • PS4
  • +
  • OUYA
  • +
  • Switch Joycons/Pro Controllers
  • +
  • Logitech
  • +
  • WiiRemote
  • +
  • Mayflash WiiRemote
  • +
  • MFi
  • +
  • PS Vita
  • +
+

For most gamepads HaxeFlixel will automatically detect the model and abstract the API inputs under a common "universal" gamepad model based on the Xbox 360 layout. The underlying device-specific "raw" inputs are still available for you to poll directly, if you choose.

+

Here's some example logic for basic detection using the "universal" gamepad API:

+
import flixel.FlxG;
+import flixel.FlxState;
+import flixel.input.gamepad.FlxGamepad;
+
+class PlayState extends FlxState
+{
+    override public function update(elapsed:Float):Void 
+    {
+        super.update(elapsed);
+
+        // Important: can be null if there's no active gamepad yet!
+        var gamepad:FlxGamepad = FlxG.gamepads.lastActive;
+        if (gamepad != null)
+        {
+            updateGamepadInput(gamepad);
+        }
+    }
+
+    function updateGamepadInput(gamepad:FlxGamepad):Void
+    {
+        if (gamepad.pressed.A)
+        {
+            trace("The bottom face button of the controller is pressed.");
+        }
+		
+        if (gamepad.analog.justMoved.LEFT_STICK_X)
+        {
+            trace("The x axis of the left analog stick of the controller has been moved.");
+        }
+    }
+}
+HAXE
+

In this case, gamepad.pressed.A checks whether the bottom face button is pressed. On a PS4 controller this would be the "X" button, on an XBox 360 or XBox One controller this would be the "A" button.

+

Also, the gamepad.pressed.A syntax is shorthand for gamepad.pressed.check(FlxGamepadInputID.A). You want to use the latter syntax if you need to check a variable (which would be the case if the user can customize their inputs).

+

If you wanted to check a device-specific input, you would use the checkRaw function, like this: gamepad.pressed.checkRaw(PS4ID.X)

+

Device-specific inputs can be found in the flixel.input.gamepad.id package.

+

If you want to support a controller that HaxeFlixel doesn't provide the IDs for, the following methods of FlxGamePad methods should be helpful for working out what those IDs are:

+

Return the FlxGamepadInputID value under the "universal" gamepad model:

+
    +
  • firstPressedButtonID()
  • +
  • firstJustPressedButtonID()
  • +
  • firstJustReleasedButtonID()
  • +
+

Return the device-specific input ID value:

+
    +
  • firstPressedButtonRawID()
  • +
  • firstJustPressedButtonRawID()
  • +
  • firstJustReleasedButtonRawID()
  • +
+

Conditional to remove gamepads

+
FLX_NO_GAMEPAD
+HAXE
+

HaxeFlixel includes a conditional to omit using gamepads for optimization purposes if you are developing for a platform such as mobile, or your game just isn't designed for them.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/getting-started/index.html b/documentation/getting-started/index.html new file mode 100644 index 000000000..1a4701631 --- /dev/null +++ b/documentation/getting-started/index.html @@ -0,0 +1,1052 @@ + + + + + + + + + + + Getting Started | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Getting Started

+ +

Welcome to HaxeFlixel! To setup your Windows, Linux or Mac system to start making games, there are three steps:

+
    +
  1. Install Haxe
  2. +
  3. Install HaxeFlixel
  4. +
  5. Run Hello World
  6. +
+

After that, you have to choose an editor / IDE to work in. The most popular option is Visual Studio Code (VS Code) which has it's own pages here:

+ +

A more comprehensive list of options can be found on haxe.org.

+
+

Time to complete this installation is close to 20 minutes (depending on the speed of your Internet connection for downloading the components).

+

If you need more help, reach out via any of the communication channels.

+
+

Note: this guide is a community effort. If you think you can help us improve it, please submit a pull request on +GitHub - each page has an "Edit" button in the upper right corner for this.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/groundwork/index.html b/documentation/groundwork/index.html new file mode 100644 index 000000000..ce1dd62f4 --- /dev/null +++ b/documentation/groundwork/index.html @@ -0,0 +1,1257 @@ + + + + + + + + + + + 3 - Groundwork | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

3 - Groundwork

+ +

Now it's time to think about what we actually want our game to be, and how we're going to pull it off.

+

The game we're going to help you build will be a very simple top-down 'dungeon crawler' game, where the player controls a single character, moves around a map, fights enemies and collects gold.

+

So, what does that all actually translate to in HaxeFlixel?

+
    +
  • First, we're going to need to setup our 'world' - this just means we'll need to have a FlxState where all the action happens, and figure out what we're going to put in the world.
  • +
  • For the dungeon itself, it will simply be a FlxTilemap - and we'll draw our maps in another tool.
  • +
  • We will need a FlxSprite to represent the player on the screen. This will be the sprite that player will be able to control.
  • +
  • Enemies will be FlxSprite objects as well, and we'll have a 'fancy' way to have different types of enemies.
  • +
  • We'll also need a HUD/Interface for the player to do stuff with and see what's going on. These will be a combination of FlxGroup, FlxSprite, FlxText, FlxButton objects and some other things.
  • +
+

We'll tackle each of these things one-by-one.

+

First up, let's create a simple menu. Eventually, we'll want a fancy MenuState with a button for options, but for right now, we'll just have a button that says "Play" and switches to our PlayState.

+
    +
  1. +

    Go ahead and delete the line we added for our "Hello World" test within the PlayState.

    +
  2. +
  3. +

    Now, right-click the source folder in VSCode's Explorer, select New File and enter MenuState.hx.

    +

    Then, you can just copy the content of PlayState.hx over, but replace the class name with MenuState:

    +
    class MenuState extends FlxState
    +{
    +HAXE
    +

    Right after the class declaration, we're going define a new variable. This is where you would define all the variables that you intend to use throughout a given class. We need to define a new FlxButton variable to use as our 'play' button. So, type:

    +
    var playButton:FlxButton;
    +HAXE
    +

    As before with FlxText, the import should be added automatically. If not, you can also add missing imports via the light bulb that should appear after saving the file when you have your cursor over FlxButton.

    +
  4. +
  5. +

    Now, type the following on the lines before or after super.create(); within the create() method:

    +
    playButton = new FlxButton(0, 0, "Play", clickPlay);
    +add(playButton);
    +HAXE
    +

    (import flixel.ui.FlxButton;)

    +

    This creates a FlxButton object and assigns it to the playButton variable. We're telling it to make the button at position (0, 0) (the top left corner of the screen), to make it say "Play" on it, and to call the function clickPlay() when a user clicks the button (we yet have to implement clickPlay()). +Then we add the object to our state so that it can be shown and interacted with. +Don't worry about the position of the button right now, we're going to move it in a second.

    +
  6. +
  7. +

    Now we need to define our clickPlay() function. Somewhere in the class, outside of any existing functions, type:

    +
    function clickPlay()
    +{
    +	FlxG.switchState(new PlayState());
    +}
    +HAXE
    +

    (import flixel.FlxG;)

    +

    This function calls FlxG.switchState(), which switches the state from whatever the current state is (MenuState) to a new instance of PlayState.

    +
  8. +
  9. +

    Technically, at this point, the functionality would work - you could run your game and it would do what we want it to do, but we're missing a few things. +First, we want the button to be in a nicer place. Sure, we could set the x and y coordinates when we create it, but there's a simpler way to do it.

    +

    Back in create(), add a new line somewhere after we create our FlxButton, and before super.create(); type:

    +
    playButton.screenCenter();
    +HAXE
    +

    screenCenter() is a function which takes an object and centers it on the screen either horizontally, vertically or (by default) both. By calling it on our button, the button will be placed in the center of the screen.

    +
  10. +
  11. +

    Next, we need to make sure that the game actually starts with our MenuState. Open Main.hx and replace the PlayState reference with MenuState.

    +
  12. +
  13. +

    If you test your game out now, it should go straight to a black screen with our 'Play' button in the middle, and clicking the button will take you to another black screen. If that's what you get, it works! So far, so good!

    +
  14. +
+

Next, let's make a simple player sprite that you can move around on the screen.

+

First, we need to make a new Player class. You can think of classes as sort of a functional template. You can use them as-is in a project, but you also have the ability to extend them into new versions. You can kind of think of it as using tracing paper - when you extend a class, you put a new sheet of tracing paper on top - you can still see and use all the stuff in the original class (unless you draw over it), and you can add your own stuff.

+

We're going to be extending the FlxSprite class to create our Player class.

+
    +
  1. +

    Create another new file in the source folder, this time called Player.hx.

    +
  2. +
  3. +

    Let's create a very basic class which extends FlxSprite:

    +
    package;
    +
    +import flixel.FlxSprite;
    +
    +class Player extends FlxSprite
    +{
    +	public function new(x:Float = 0, y:Float = 0)
    +	{
    +		super(x, y);
    +	}
    +}
    +HAXE
    +

    With classes, we use the super keyword to refer to the parent class. So by calling super(x, y) within our constructor (called new), we are basically saying to go up the chain to our parent class, in this case FlxSprite, and call its constructor, passing it the x and y arguments that were passed to us.

    +
  4. +
  5. +

    Next, we'll want to create a placeholder image to show us where our sprite is, so under super(x, y);, add:

    +
    makeGraphic(16, 16, FlxColor.BLUE);
    +HAXE
    +

    (import flixel.util.FlxColor;)

    +

    All we're doing here is saying that we want to make this sprite's graphic be a 16x16 pixel blue square.

    +
  6. +
  7. +

    For right now, we just want to get the Player class initialized, make sure that it works, and try adding it to our PlayState. It's not going to move or do anything yet, that will come in a minute. So save the changes to our Player class, and go back to the PlayState. +We need to define our Player variable, so underneath the class line, add:

    +
    var player:Player;
    +HAXE
    +

    And in create(), before super.create(); add:

    +
    player = new Player(20, 20);
    +add(player);
    +HAXE
    +

    This simply assigns a new instance of our Player sprite to our player variable, telling it to be placed at (20, 20) on the screen, and adds it to our PlayState.

    +
  8. +
  9. +

    If you run your project right now, you should see our blue player on the screen!

    +

    +

    Now let's get it to move around!

    +
  10. +
+

So, how do we actually want our player to move around on the screen? Let's support both arrow keys and WASD keys, in 8 directions: up, down, left, right, and diagonally. The player should move at a relatively fixed speed, but have a slight deceleration before stopping to give it just a little bit of 'feeling'.

+

First, define our player's movement speed and deceleration amounts:

+
    +
  1. +

    In your player class, above the constructor, add:

    +
    static inline var SPEED:Float = 100;
    +HAXE
    +

    Since this is a constant value that won't change, we make it static inline as well as following the UPPER_CASE naming convention.

    +

    Then, in the constructor, after you call makeGraphic(), we need to add some drag:

    +
    drag.x = drag.y = 800;
    +HAXE
    +

    drag, in HaxeFlixel, is sort of a way to slow down an object when it's not being moved. This will prevent our player sprite from just running forever in the same direction when the user stops pressing any movement keys. +This is somewhat arbitrary based on what 'feels' right - we can come back and tweak the numbers later on.

    +
  2. +
  3. +

    While there are plenty of ways to handle player movement, it can be simpler to add it to the Player class. We'll want to add a new function that will watch for player input and respond to it, so, make a new function:

    +
    function updateMovement()
    +{
    +}
    +HAXE
    +
  4. +
  5. +

    First, inside that new function, we want to define some helper variables so we can easily tell which keys were pressed later on in the function:

    +
    var up:Bool = false;
    +var down:Bool = false;
    +var left:Bool = false;
    +var right:Bool = false;
    +HAXE
    +
  6. +
  7. +

    Next, we want to actually find out which of these directions the player wants to move in. We'll do that by checking whether certain keys are currently being pressed:

    +
    up = FlxG.keys.anyPressed([UP, W]);
    +down = FlxG.keys.anyPressed([DOWN, S]);
    +left = FlxG.keys.anyPressed([LEFT, A]);
    +right = FlxG.keys.anyPressed([RIGHT, D]);
    +HAXE
    +

    (import flixel.FlxG;)

    +

    The anyPressed() function allows us to ask if any keys out of a list of keys are currently being pressed. You send it an array of keys (their names) and it will return true if any of them are pressed. There are a couple of similar functions to check for other key states we might use later on.

    +
  8. +
  9. +

    Next, we want to cancel out opposing directions - if the player is pressing up and down at the same time, we're not going to move anywhere:

    +
    if (up && down)
    +	up = down = false;
    +if (left && right)
    +	left = right = false;
    +HAXE
    +
  10. +
  11. +

    Next, we'll want to do something when the player is actually moving:

    +
    if (up || down || left || right)
    +{
    +
    +}
    +HAXE
    +
  12. +
  13. +

    After that, we need to determine which direction to move the player in, and by how much. A common mistake in games that allow diagonal movement is something like this:

    +
    velocity.x = speed;
    +velocity.y = speed;
    +HAXE
    +

    While this will, technically, move something diagonally down and right, it will actually move much FASTER than it really should be moving. This is because of the way triangles work. So, for our player to move, we're not just going to set its velocity to speed - that would be too easy! Instead, we're going to calculate exactly what its velocity should be with angles!

    +

    The first part of this is to figure out what angle we want to have the player move based on the keys that are being pressed. With our player sprite's asset, angle 0 is to the right, and -90 (or 270) is up.

    +
    var newAngle:Float = 0;
    +if (up)
    +{
    +	newAngle = -90;
    +	if (left)
    +		newAngle -= 45;
    +	else if (right)
    +		newAngle += 45;
    +}
    +else if (down)
    +{
    +	newAngle = 90;
    +	if (left)
    +		newAngle += 45;
    +	else if (right)
    +		newAngle -= 45;
    +}
    +else if (left)
    +	newAngle = 180;
    +else if (right)
    +	newAngle = 0;
    +HAXE
    +

    All this will do is create a temporary variable to hold our angle, and then, based on which direction(s) the player is pressing, set that angle to the direction we plan on moving the player.

    +
  14. +
  15. +

    Now that we know which angle the player should be moving in, we need to figure out with how much velocity it needs to move that way. We're going to do this by setting velocity.x to speed and velocity.y to 0. Then we rotate that point around (0, 0) by newAngle degrees.

    +
    velocity.setPolarDegrees(SPEED, newAngle);
    +HAXE
    +

    (import flixel.math.FlxPoint;)

    +

    ...and that's the end of our updateMovement() function!

    +
  16. +
  17. +

    The only thing left to do is to override the update() function in Player.hx as well and call updateMovement() from it. VSCode can generate the necessary boilerplate code for you, just type override and a space, after which a completion popup should appear:

    +

    +

    Select update and press enter.

    +

    Now you just need to add the function call, after which it should look like this:

    +
    override function update(elapsed:Float)
    +{
    +	updateMovement();
    +	super.update(elapsed);
    +}
    +HAXE
    +

    The update() function, as you should remember, is called each 'frame' of the game. So, each time our PlayState gets its update() called, it calls update() on all of its members, including the player's update(). This in turn will run our updateMovement() logic and adjust the player's velocity accordingly. After that, it call its super.update(), which will take the velocity that we've just changed into account and figures out where the player sprite should move to.

    +
  18. +
+

Whew! It sounds a lot more complicated than it really is - if you try out the game right now, you'll see that you can run around the screen by pressing any combination of arrow keys and WASD!

+

Next, we'll work on making the player sprite actually look like something!

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/haxeflixel-conditionals/index.html b/documentation/haxeflixel-conditionals/index.html new file mode 100644 index 000000000..8ff5f199f --- /dev/null +++ b/documentation/haxeflixel-conditionals/index.html @@ -0,0 +1,1082 @@ + + + + + + + + + + + HaxeFlixel Conditionals | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

HaxeFlixel Conditionals

+ +

What is "conditional compilation"?

+

Conditional compilation flags are a powerful feature Haxe offers to optimize your code by only compiling certain parts of it. For example, the following pseudo-code optimizes inputs based on the target platform:

+
#if (web || desktop)
+keyboardControls();
+mouseControls();
+#end
+
+#if desktop
+gamepadControls();
+#end
+
+#if mobile
+touchControls();
+#end
+HAXE
+

Basically, this means that for web or desktop targets, we want to have mouse and keyboard controls. In case of a mobile target, we want touch input. Like you can see, these so-called defines can also be nested: We only want gamepad controls to be available on non-web targets (line 4). So, all in all, these defines can be used largely like traditional if-statements, except their syntax varies slightly.

+

For more information on what defines are available, by default check out the OpenFL documentation on this topic.

+

HaxeFlixel specific defines

+

If you had a look at the OpenFL documentation, you might have found out that you can also set your own defines. When working with OpenFL, it's convenient to do so in the Project XML file. +HaxeFlixel makes use of this feature and allows you to optimize your game using the following defines (a list of them can also be found in the template):

+
// Example xml node to enable to Flixel record system.
+<haxedef name="FLX_RECORD" />
+
+

FLX_RECORD

+

Flixel features a powerful recording / playback feature which captures mouse and keyboard input. Since it's used rarely, we decided that it makes sense to turn it off by default. Setting this define however will enable it again.

+

FLX_MOUSE_ADVANCED

+

This define is required for middle and right mouse button input. On the flash target, a minimum flash player version of 11.2 is required. Listening to right click input will also disable the right-click menu of the flash player. There is currently no HTML5 support for this feature.

+

FLX_NO_NATIVE_CURSOR

+

By default, flixel uses the flash native cursor API. This gets rid of the almost unbearable mouse lag that is unavoidable otherwise. This define allows you to disable that - reasons for this might be that you want to target a flash player version older than 10.2 or that you need to use a cursor bigger than 32x32, which is not possible using the native cursor API.

+

FLX_NO_MOUSE

+

This allows you to optimize your game by compiling it without any mouse-related code, which can make sense for mobile targets. This is why in the template, if="mobile" is added to the haxedef set tag. Keep in mind that this might require you to use conditionals in your own code for anything related to FlxG.mouse, which does not exist if this define is set.

+

FLX_NO_KEYBOARD

+

This allows you to optimize your game by compiling it without any keyboard-related code, which can make sense for mobile targets. This is why in the template, if="mobile" is added to the haxedef set tag. Keep in mind that this might require you to use conditionals in your own code for anything related to FlxG.keyboard or FlxG.keys, which do not exist if this define is set.

+

FLX_NO_TOUCH

+

This allows you to optimize your game by compiling it without any touch-related code, which can make sense for desktop targets. This is why in the template, if="desktop" is added to the haxedef set tag. Keep in mind that this might require you to use conditionals in your own code for anything related to FlxG.touches, which does not exist if this define is set.

+

FLX_NO_GAMEPAD

+

This allows you to optimize your game by compiling it without any gamepad-related code. Keep in mind that this might require you to use conditionals in your own code for anything related to FlxG.gamepads, which does not exist if this define is set.

+

FLX_NO_SOUND_TRAY

+

This disables the flixel core sound tray, which appears whenever your adjust the volume via the 0 (mute the game), + or - keys. Note that this does not disable the ability to control the game's volume using these hotkeys, just the soundtray itself. You can disable volume control entirely by setting FlxG.sound.muteKeys, FlxG.sound.volumeUpKeys and FlxG.sound.volumeDownKeys to null.

+

FLX_NO_FOCUS_LOST_SCREEN

+

Flixel automatically pauses the game when it loses focus and shows its so-called "focus lost screen", which is basically an overlay darkening the screen area with a white "play-button" in the middle. Using this define disables that screen, but not the feature to automatically pause - use the FlxG.autoPause Bool for that.

+

FLX_NO_DEBUG

+

This disables the flixel core debugger, which you can toggle using the \ and ` keys. It makes sense to do so for release build, which is why unless="debug" is added to this tag in the template. It basically means that the flixel debugger is disabled when compiling a release, and enabled when compiling a debug build.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/haxeflixel-handbook/index.html b/documentation/haxeflixel-handbook/index.html new file mode 100644 index 000000000..43a95ffb3 --- /dev/null +++ b/documentation/haxeflixel-handbook/index.html @@ -0,0 +1,1039 @@ + + + + + + + + + + + HaxeFlixel Handbook | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

HaxeFlixel Handbook

+ +

Welcome to the HaxeFlixel handbook. These pages are intended to answer common questions and explain the main ideas and structures behind most HaxeFlixel games. +As the types of games and use cases of HaxeFlixel are vast we appreciate developers making additions and improvements to this documentation through GitHub.

+

If you are familiar with AS3 and new to Haxe, we encourage you to read the AS3 and Haxe comparison.

+

HaxeFlixel's API is similar to the AS3 version, so existing documentation and resources for ActionScript 3 are still relevant.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/haxeflixel-targets/index.html b/documentation/haxeflixel-targets/index.html new file mode 100644 index 000000000..6ea494c3c --- /dev/null +++ b/documentation/haxeflixel-targets/index.html @@ -0,0 +1,1068 @@ + + + + + + + + + + + HaxeFlixel Targets | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

HaxeFlixel Targets

+ +

HaxeFlixel currently supports the following targets through OpenFL:

+

Desktop

+
    +
  • Windows
  • +
  • Mac
  • +
  • Linux
  • +
+

Mobile

+ +

Web

+
    +
  • Flash
  • +
  • HTML5
  • +
+

Using these targets requires the appropriate SDK's and system setup assisted through the Lime setup commands.

+
lime setup windows
+lime setup mac
+lime setup android
+
+

HTML5

+

General HTML5 Guidelines

+
    +
  • Text: For now, you might prefer using bitmap fonts to avoid text issues. With regular fonts, you may favor larger text size (>12) in order to avoid blurriness, and try some manual adjustments if you have a scaling problem (or when you are trying to embed fonts, which is not supported).
  • +
  • Audio: You should use regular .ogg files . Though .mp3 and .wav files are supported, SoundJS may not recognise them and might stop your project from running until you delete/replace them.
  • +
  • Particles: You should keep the particle count low and not expect much in terms of performance.
  • +
+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/hello-world/index.html b/documentation/hello-world/index.html new file mode 100644 index 000000000..d969cada6 --- /dev/null +++ b/documentation/hello-world/index.html @@ -0,0 +1,1091 @@ + + + + + + + + + + + Hello World | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Hello World

+ +

"Hello World" is a common example of getting started with programming, here we will show you how to add Hello World with HaxeFlixel's FlxText. You can compile this test for any supported target platform.

+

Make sure you have installed Flixel, as well as set up the lime and flixel commands as explained previously.

+

Create a new HaxeFlixel Project

+

HaxeFlixel requires a basic structure of files for any project that can be created automatically for you. First open a command prompt and switch to the directory where you'd like to have the project using cd, for example:

+
cd C:\Users\<User>\Projects
+BASH
+

Then run the template command (tpl for short):

+
flixel tpl -n "HelloWorld"
+BASH
+

You will now see a new folder named "HelloWorld" with all the files for your project being created automatically.

+

Add the "Hello World" FlxText

+

Adding the text is as simple as opening the PlayState.hx file in the newly created source folder. The file should look like this:

+
package;
+
+import flixel.FlxState;
+
+class PlayState extends FlxState
+{
+	override public function create()
+	{
+		super.create();
+	}
+
+	override public function update(elapsed:Float)
+	{
+		super.update(elapsed);
+	}
+}
+HAXE
+

All you need to do is add the following three lines to the create() function (and save the file):

+
override public function create()
+{
+	super.create();
+
+	var text = new flixel.text.FlxText(0, 0, 0, "Hello World", 64);
+	text.screenCenter();
+	add(text);
+}
+HAXE
+

This will create a new FlxText instance with font size 64, center it on the screen and add() it so it is displayed.

+

Test the Project

+

Return to your command line window - now we can compile the project. First switch to the directory containing the Project.xml file:

+
cd HelloWorld
+BASH
+

You can then compile to HTML5, Neko and Flash out of the box with these commands:

+
lime test html5
+lime test neko
+lime test flash
+BASH
+

Other targets require further setup. For more details, check the "Advanced Setup" section of the Lime documentation.

+

If you struggled through any part of this tutorial, get in touch with the community for support.

+

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/images/00_getting_started/fd-appman-flixel.jpg b/documentation/images/00_getting_started/fd-appman-flixel.jpg new file mode 100644 index 000000000..7a5d61b86 Binary files /dev/null and b/documentation/images/00_getting_started/fd-appman-flixel.jpg differ diff --git a/documentation/images/00_getting_started/fd-flixel-screenshots.psd b/documentation/images/00_getting_started/fd-flixel-screenshots.psd new file mode 100644 index 000000000..f43d91621 Binary files /dev/null and b/documentation/images/00_getting_started/fd-flixel-screenshots.psd differ diff --git a/documentation/images/00_getting_started/fd-flixel-template.jpg b/documentation/images/00_getting_started/fd-flixel-template.jpg new file mode 100644 index 000000000..92c3817f9 Binary files /dev/null and b/documentation/images/00_getting_started/fd-flixel-template.jpg differ diff --git a/documentation/images/00_getting_started/hello-world.png b/documentation/images/00_getting_started/hello-world.png new file mode 100644 index 000000000..73d33fc49 Binary files /dev/null and b/documentation/images/00_getting_started/hello-world.png differ diff --git a/documentation/images/00_getting_started/vscode/change-config.gif b/documentation/images/00_getting_started/vscode/change-config.gif new file mode 100644 index 000000000..65dab8300 Binary files /dev/null and b/documentation/images/00_getting_started/vscode/change-config.gif differ diff --git a/documentation/images/00_getting_started/vscode/completion.png b/documentation/images/00_getting_started/vscode/completion.png new file mode 100644 index 000000000..297225256 Binary files /dev/null and b/documentation/images/00_getting_started/vscode/completion.png differ diff --git a/documentation/images/00_getting_started/vscode/flash-debugging.png b/documentation/images/00_getting_started/vscode/flash-debugging.png new file mode 100644 index 000000000..3f602828a Binary files /dev/null and b/documentation/images/00_getting_started/vscode/flash-debugging.png differ diff --git a/documentation/images/00_getting_started/vscode/launch-configs.png b/documentation/images/00_getting_started/vscode/launch-configs.png new file mode 100644 index 000000000..fcfb32057 Binary files /dev/null and b/documentation/images/00_getting_started/vscode/launch-configs.png differ diff --git a/documentation/images/00_getting_started/vscode/lime-dropdowns.png b/documentation/images/00_getting_started/vscode/lime-dropdowns.png new file mode 100644 index 000000000..fac1265c5 Binary files /dev/null and b/documentation/images/00_getting_started/vscode/lime-dropdowns.png differ diff --git a/documentation/images/00_getting_started/vscode/lime-installation.png b/documentation/images/00_getting_started/vscode/lime-installation.png new file mode 100644 index 000000000..7a485ee6b Binary files /dev/null and b/documentation/images/00_getting_started/vscode/lime-installation.png differ diff --git a/documentation/images/00_getting_started/vscode/problems.png b/documentation/images/00_getting_started/vscode/problems.png new file mode 100644 index 000000000..682642d55 Binary files /dev/null and b/documentation/images/00_getting_started/vscode/problems.png differ diff --git a/documentation/images/00_getting_started/vscode/run-build-task.png b/documentation/images/00_getting_started/vscode/run-build-task.png new file mode 100644 index 000000000..05cc962d3 Binary files /dev/null and b/documentation/images/00_getting_started/vscode/run-build-task.png differ diff --git a/documentation/images/00_getting_started/vscode/tasks.png b/documentation/images/00_getting_started/vscode/tasks.png new file mode 100644 index 000000000..5585bfaba Binary files /dev/null and b/documentation/images/00_getting_started/vscode/tasks.png differ diff --git a/documentation/images/00_getting_started/vscode/terminal.png b/documentation/images/00_getting_started/vscode/terminal.png new file mode 100644 index 000000000..085a18cc9 Binary files /dev/null and b/documentation/images/00_getting_started/vscode/terminal.png differ diff --git a/documentation/images/00_getting_started/vscode/vscode-plus-extensions.png b/documentation/images/00_getting_started/vscode/vscode-plus-extensions.png new file mode 100644 index 000000000..cb74618c7 Binary files /dev/null and b/documentation/images/00_getting_started/vscode/vscode-plus-extensions.png differ diff --git a/documentation/images/01_tutorial/browser_animated_player.gif b/documentation/images/01_tutorial/browser_animated_player.gif new file mode 100644 index 000000000..13e530256 Binary files /dev/null and b/documentation/images/01_tutorial/browser_animated_player.gif differ diff --git a/documentation/images/01_tutorial/browser_blue_dot.png b/documentation/images/01_tutorial/browser_blue_dot.png new file mode 100644 index 000000000..de5822b8d Binary files /dev/null and b/documentation/images/01_tutorial/browser_blue_dot.png differ diff --git a/documentation/images/01_tutorial/browser_blue_square.png b/documentation/images/01_tutorial/browser_blue_square.png new file mode 100644 index 000000000..de5822b8d Binary files /dev/null and b/documentation/images/01_tutorial/browser_blue_square.png differ diff --git a/documentation/images/01_tutorial/browser_coins.png b/documentation/images/01_tutorial/browser_coins.png new file mode 100644 index 000000000..74acfe52d Binary files /dev/null and b/documentation/images/01_tutorial/browser_coins.png differ diff --git a/documentation/images/01_tutorial/browser_combat_hud.png b/documentation/images/01_tutorial/browser_combat_hud.png new file mode 100644 index 000000000..f1ee5cd08 Binary files /dev/null and b/documentation/images/01_tutorial/browser_combat_hud.png differ diff --git a/documentation/images/01_tutorial/browser_enemy_brain.png b/documentation/images/01_tutorial/browser_enemy_brain.png new file mode 100644 index 000000000..2e96beada Binary files /dev/null and b/documentation/images/01_tutorial/browser_enemy_brain.png differ diff --git a/documentation/images/01_tutorial/browser_hello_world.png b/documentation/images/01_tutorial/browser_hello_world.png new file mode 100644 index 000000000..db0c07489 Binary files /dev/null and b/documentation/images/01_tutorial/browser_hello_world.png differ diff --git a/documentation/images/01_tutorial/browser_hud.png b/documentation/images/01_tutorial/browser_hud.png new file mode 100644 index 000000000..706795fa3 Binary files /dev/null and b/documentation/images/01_tutorial/browser_hud.png differ diff --git a/documentation/images/01_tutorial/browser_map_debugger.png b/documentation/images/01_tutorial/browser_map_debugger.png new file mode 100644 index 000000000..e5ccae7aa Binary files /dev/null and b/documentation/images/01_tutorial/browser_map_debugger.png differ diff --git a/documentation/images/01_tutorial/browser_options.png b/documentation/images/01_tutorial/browser_options.png new file mode 100644 index 000000000..56c43ad54 Binary files /dev/null and b/documentation/images/01_tutorial/browser_options.png differ diff --git a/documentation/images/01_tutorial/browser_zoomed.png b/documentation/images/01_tutorial/browser_zoomed.png new file mode 100644 index 000000000..14197c68f Binary files /dev/null and b/documentation/images/01_tutorial/browser_zoomed.png differ diff --git a/documentation/images/01_tutorial/ogmo_editor_blank.png b/documentation/images/01_tutorial/ogmo_editor_blank.png new file mode 100644 index 000000000..37da506d3 Binary files /dev/null and b/documentation/images/01_tutorial/ogmo_editor_blank.png differ diff --git a/documentation/images/01_tutorial/ogmo_editor_entities.png b/documentation/images/01_tutorial/ogmo_editor_entities.png new file mode 100644 index 000000000..3b9ead979 Binary files /dev/null and b/documentation/images/01_tutorial/ogmo_editor_entities.png differ diff --git a/documentation/images/01_tutorial/ogmo_editor_entities_coins.png b/documentation/images/01_tutorial/ogmo_editor_entities_coins.png new file mode 100644 index 000000000..7f0a77556 Binary files /dev/null and b/documentation/images/01_tutorial/ogmo_editor_entities_coins.png differ diff --git a/documentation/images/01_tutorial/ogmo_editor_entities_enemies.png b/documentation/images/01_tutorial/ogmo_editor_entities_enemies.png new file mode 100644 index 000000000..588cdb2da Binary files /dev/null and b/documentation/images/01_tutorial/ogmo_editor_entities_enemies.png differ diff --git a/documentation/images/01_tutorial/ogmo_editor_tiles.png b/documentation/images/01_tutorial/ogmo_editor_tiles.png new file mode 100644 index 000000000..ba298310c Binary files /dev/null and b/documentation/images/01_tutorial/ogmo_editor_tiles.png differ diff --git a/documentation/images/01_tutorial/ogmo_project_entities.png b/documentation/images/01_tutorial/ogmo_project_entities.png new file mode 100644 index 000000000..ed8d1c8a7 Binary files /dev/null and b/documentation/images/01_tutorial/ogmo_project_entities.png differ diff --git a/documentation/images/01_tutorial/ogmo_project_entities_coin.png b/documentation/images/01_tutorial/ogmo_project_entities_coin.png new file mode 100644 index 000000000..f51d94610 Binary files /dev/null and b/documentation/images/01_tutorial/ogmo_project_entities_coin.png differ diff --git a/documentation/images/01_tutorial/ogmo_project_entities_enemies.png b/documentation/images/01_tutorial/ogmo_project_entities_enemies.png new file mode 100644 index 000000000..4898f9b6e Binary files /dev/null and b/documentation/images/01_tutorial/ogmo_project_entities_enemies.png differ diff --git a/documentation/images/01_tutorial/ogmo_project_general.png b/documentation/images/01_tutorial/ogmo_project_general.png new file mode 100644 index 000000000..c75d0500e Binary files /dev/null and b/documentation/images/01_tutorial/ogmo_project_general.png differ diff --git a/documentation/images/01_tutorial/ogmo_project_layers.png b/documentation/images/01_tutorial/ogmo_project_layers.png new file mode 100644 index 000000000..7699c14f3 Binary files /dev/null and b/documentation/images/01_tutorial/ogmo_project_layers.png differ diff --git a/documentation/images/01_tutorial/ogmo_project_tilesets.png b/documentation/images/01_tutorial/ogmo_project_tilesets.png new file mode 100644 index 000000000..4b7d3b893 Binary files /dev/null and b/documentation/images/01_tutorial/ogmo_project_tilesets.png differ diff --git a/documentation/images/01_tutorial/vscode_files.png b/documentation/images/01_tutorial/vscode_files.png new file mode 100644 index 000000000..3d9575084 Binary files /dev/null and b/documentation/images/01_tutorial/vscode_files.png differ diff --git a/documentation/images/01_tutorial/vscode_flxtext_completion.png b/documentation/images/01_tutorial/vscode_flxtext_completion.png new file mode 100644 index 000000000..02a279f7e Binary files /dev/null and b/documentation/images/01_tutorial/vscode_flxtext_completion.png differ diff --git a/documentation/images/01_tutorial/vscode_override_completion.png b/documentation/images/01_tutorial/vscode_override_completion.png new file mode 100644 index 000000000..f73409ec6 Binary files /dev/null and b/documentation/images/01_tutorial/vscode_override_completion.png differ diff --git a/documentation/images/01_tutorial/vscode_run_build_task.png b/documentation/images/01_tutorial/vscode_run_build_task.png new file mode 100644 index 000000000..f629cbd55 Binary files /dev/null and b/documentation/images/01_tutorial/vscode_run_build_task.png differ diff --git a/documentation/images/01_tutorial/vscode_target_selection.png b/documentation/images/01_tutorial/vscode_target_selection.png new file mode 100644 index 000000000..aaf4b2cda Binary files /dev/null and b/documentation/images/01_tutorial/vscode_target_selection.png differ diff --git a/documentation/images/02_handbook/debugger/console-completion.png b/documentation/images/02_handbook/debugger/console-completion.png new file mode 100644 index 000000000..f5d6cc8b8 Binary files /dev/null and b/documentation/images/02_handbook/debugger/console-completion.png differ diff --git a/documentation/images/02_handbook/debugger/debugger-overlay.png b/documentation/images/02_handbook/debugger/debugger-overlay.png new file mode 100644 index 000000000..628f56c00 Binary files /dev/null and b/documentation/images/02_handbook/debugger/debugger-overlay.png differ diff --git a/documentation/images/02_handbook/debugger/draw-debug.png b/documentation/images/02_handbook/debugger/draw-debug.png new file mode 100644 index 000000000..47b4ee9ae Binary files /dev/null and b/documentation/images/02_handbook/debugger/draw-debug.png differ diff --git a/documentation/images/02_handbook/debugger/icons/arrowRight.png b/documentation/images/02_handbook/debugger/icons/arrowRight.png new file mode 100644 index 000000000..970662e07 Binary files /dev/null and b/documentation/images/02_handbook/debugger/icons/arrowRight.png differ diff --git a/documentation/images/02_handbook/debugger/icons/cursorCross.png b/documentation/images/02_handbook/debugger/icons/cursorCross.png new file mode 100644 index 000000000..350ec400b Binary files /dev/null and b/documentation/images/02_handbook/debugger/icons/cursorCross.png differ diff --git a/documentation/images/02_handbook/debugger/icons/interactive.png b/documentation/images/02_handbook/debugger/icons/interactive.png new file mode 100644 index 000000000..cfa294b48 Binary files /dev/null and b/documentation/images/02_handbook/debugger/icons/interactive.png differ diff --git a/documentation/images/02_handbook/debugger/icons/mover.png b/documentation/images/02_handbook/debugger/icons/mover.png new file mode 100644 index 000000000..03ee7cfc4 Binary files /dev/null and b/documentation/images/02_handbook/debugger/icons/mover.png differ diff --git a/documentation/images/02_handbook/debugger/icons/pause.png b/documentation/images/02_handbook/debugger/icons/pause.png new file mode 100644 index 000000000..249f61c27 Binary files /dev/null and b/documentation/images/02_handbook/debugger/icons/pause.png differ diff --git a/documentation/images/02_handbook/debugger/icons/transform.png b/documentation/images/02_handbook/debugger/icons/transform.png new file mode 100644 index 000000000..86ca88111 Binary files /dev/null and b/documentation/images/02_handbook/debugger/icons/transform.png differ diff --git a/documentation/images/02_handbook/debugger/interaction-mover-shortcut.gif b/documentation/images/02_handbook/debugger/interaction-mover-shortcut.gif new file mode 100644 index 000000000..27a4c8803 Binary files /dev/null and b/documentation/images/02_handbook/debugger/interaction-mover-shortcut.gif differ diff --git a/documentation/images/02_handbook/debugger/interaction-mover.gif b/documentation/images/02_handbook/debugger/interaction-mover.gif new file mode 100644 index 000000000..1ce34fe82 Binary files /dev/null and b/documentation/images/02_handbook/debugger/interaction-mover.gif differ diff --git a/documentation/images/02_handbook/debugger/interaction-pointer-fine-picking.gif b/documentation/images/02_handbook/debugger/interaction-pointer-fine-picking.gif new file mode 100644 index 000000000..95918b0d4 Binary files /dev/null and b/documentation/images/02_handbook/debugger/interaction-pointer-fine-picking.gif differ diff --git a/documentation/images/02_handbook/debugger/interaction-pointer-simple-select.gif b/documentation/images/02_handbook/debugger/interaction-pointer-simple-select.gif new file mode 100644 index 000000000..bf898d411 Binary files /dev/null and b/documentation/images/02_handbook/debugger/interaction-pointer-simple-select.gif differ diff --git a/documentation/images/02_handbook/debugger/interaction-transform.gif b/documentation/images/02_handbook/debugger/interaction-transform.gif new file mode 100644 index 000000000..42882b456 Binary files /dev/null and b/documentation/images/02_handbook/debugger/interaction-transform.gif differ diff --git a/documentation/images/02_handbook/debugger/layout-right.png b/documentation/images/02_handbook/debugger/layout-right.png new file mode 100644 index 000000000..0eac6a290 Binary files /dev/null and b/documentation/images/02_handbook/debugger/layout-right.png differ diff --git a/documentation/images/02_handbook/debugger/nape-button.png b/documentation/images/02_handbook/debugger/nape-button.png new file mode 100644 index 000000000..1e6afb625 Binary files /dev/null and b/documentation/images/02_handbook/debugger/nape-button.png differ diff --git a/documentation/images/02_handbook/debugger/stats-window.png b/documentation/images/02_handbook/debugger/stats-window.png new file mode 100644 index 000000000..4fc038b2d Binary files /dev/null and b/documentation/images/02_handbook/debugger/stats-window.png differ diff --git a/documentation/images/02_handbook/debugger/track-player-custom.png b/documentation/images/02_handbook/debugger/track-player-custom.png new file mode 100644 index 000000000..56576ee02 Binary files /dev/null and b/documentation/images/02_handbook/debugger/track-player-custom.png differ diff --git a/documentation/images/02_handbook/debugger/track-player.png b/documentation/images/02_handbook/debugger/track-player.png new file mode 100644 index 000000000..fd42f10a7 Binary files /dev/null and b/documentation/images/02_handbook/debugger/track-player.png differ diff --git a/documentation/images/02_handbook/debugger/vcr-disabled.png b/documentation/images/02_handbook/debugger/vcr-disabled.png new file mode 100644 index 000000000..07c8a59d1 Binary files /dev/null and b/documentation/images/02_handbook/debugger/vcr-disabled.png differ diff --git a/documentation/images/02_handbook/debugger/vcr-enabled.png b/documentation/images/02_handbook/debugger/vcr-enabled.png new file mode 100644 index 000000000..ffc12b79e Binary files /dev/null and b/documentation/images/02_handbook/debugger/vcr-enabled.png differ diff --git a/documentation/images/02_handbook/debugger/view-cache.png b/documentation/images/02_handbook/debugger/view-cache.png new file mode 100644 index 000000000..fca01208a Binary files /dev/null and b/documentation/images/02_handbook/debugger/view-cache.png differ diff --git a/documentation/images/02_handbook/debugger/watch-window.png b/documentation/images/02_handbook/debugger/watch-window.png new file mode 100644 index 000000000..b68a6debe Binary files /dev/null and b/documentation/images/02_handbook/debugger/watch-window.png differ diff --git a/documentation/images/02_handbook/flixel-display-list.png b/documentation/images/02_handbook/flixel-display-list.png new file mode 100644 index 000000000..a9ba68599 Binary files /dev/null and b/documentation/images/02_handbook/flixel-display-list.png differ diff --git a/documentation/images/02_handbook/flixel-state-0.png b/documentation/images/02_handbook/flixel-state-0.png new file mode 100644 index 000000000..1a389b254 Binary files /dev/null and b/documentation/images/02_handbook/flixel-state-0.png differ diff --git a/documentation/images/02_handbook/flixel-state-1.png b/documentation/images/02_handbook/flixel-state-1.png new file mode 100644 index 000000000..17dce4283 Binary files /dev/null and b/documentation/images/02_handbook/flixel-state-1.png differ diff --git a/documentation/images/02_handbook/nekovm-logo.png b/documentation/images/02_handbook/nekovm-logo.png new file mode 100644 index 000000000..e00bef374 Binary files /dev/null and b/documentation/images/02_handbook/nekovm-logo.png differ diff --git a/documentation/images/02_handbook/sprite-animation-example.png b/documentation/images/02_handbook/sprite-animation-example.png new file mode 100644 index 000000000..689bf2550 Binary files /dev/null and b/documentation/images/02_handbook/sprite-animation-example.png differ diff --git a/documentation/images/04_community/about-haxeflixel.png b/documentation/images/04_community/about-haxeflixel.png new file mode 100644 index 000000000..49de9bfab Binary files /dev/null and b/documentation/images/04_community/about-haxeflixel.png differ diff --git a/documentation/images/04_community/developers/Beeblerox.jpeg b/documentation/images/04_community/developers/Beeblerox.jpeg new file mode 100644 index 000000000..b6ea83359 Binary files /dev/null and b/documentation/images/04_community/developers/Beeblerox.jpeg differ diff --git a/documentation/images/04_community/developers/Gama11.png b/documentation/images/04_community/developers/Gama11.png new file mode 100644 index 000000000..26b4dd505 Binary files /dev/null and b/documentation/images/04_community/developers/Gama11.png differ diff --git a/documentation/images/04_community/developers/ProG4mr.jpeg b/documentation/images/04_community/developers/ProG4mr.jpeg new file mode 100644 index 000000000..d0703f367 Binary files /dev/null and b/documentation/images/04_community/developers/ProG4mr.jpeg differ diff --git a/documentation/images/04_community/developers/crazysam.png b/documentation/images/04_community/developers/crazysam.png new file mode 100644 index 000000000..59b14057c Binary files /dev/null and b/documentation/images/04_community/developers/crazysam.png differ diff --git a/documentation/images/04_community/developers/impaler.jpeg b/documentation/images/04_community/developers/impaler.jpeg new file mode 100644 index 000000000..bf98d9efe Binary files /dev/null and b/documentation/images/04_community/developers/impaler.jpeg differ diff --git a/documentation/images/04_community/developers/larsiusprime.jpeg b/documentation/images/04_community/developers/larsiusprime.jpeg new file mode 100644 index 000000000..9b0d409ea Binary files /dev/null and b/documentation/images/04_community/developers/larsiusprime.jpeg differ diff --git a/documentation/images/04_community/developers/sergey-miryanov.jpeg b/documentation/images/04_community/developers/sergey-miryanov.jpeg new file mode 100644 index 000000000..819346ba7 Binary files /dev/null and b/documentation/images/04_community/developers/sergey-miryanov.jpeg differ diff --git a/documentation/images/04_community/haxe-logo.png b/documentation/images/04_community/haxe-logo.png new file mode 100644 index 000000000..335c2a2fd Binary files /dev/null and b/documentation/images/04_community/haxe-logo.png differ diff --git a/documentation/images/04_community/upgrade-guide/openfl3-shaders.png b/documentation/images/04_community/upgrade-guide/openfl3-shaders.png new file mode 100644 index 000000000..277517d0a Binary files /dev/null and b/documentation/images/04_community/upgrade-guide/openfl3-shaders.png differ diff --git a/documentation/images/04_community/upgrade-guide/openfl8-shaders.png b/documentation/images/04_community/upgrade-guide/openfl8-shaders.png new file mode 100644 index 000000000..e3bcdca4b Binary files /dev/null and b/documentation/images/04_community/upgrade-guide/openfl8-shaders.png differ diff --git a/documentation/index.html b/documentation/index.html new file mode 100644 index 000000000..a7d8c716e --- /dev/null +++ b/documentation/index.html @@ -0,0 +1,1226 @@ + + + + + + + + + + + Documentation | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Documentation + + +

+ +

+ The HaxeFlixel documentation is provided from the + flixel-docs repository and is open for + contributions on GitHub that will be pushed here. +

+ + + +
+ + + + + + + + + + + + + + + +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + +

+ + Discover HaxeFlixel Book +

+ +
+ + +
+ + + + + + + + + + + + + diff --git a/documentation/install-development-flixel/index.html b/documentation/install-development-flixel/index.html new file mode 100644 index 000000000..ab96488ec --- /dev/null +++ b/documentation/install-development-flixel/index.html @@ -0,0 +1,1066 @@ + + + + + + + + + + + Install development Flixel | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Install development Flixel

+ +

Developers may want to contribute and / or stay updated with the bleeding edge code of HaxeFlixel. Like any development code we caution the use of it as it may not have the same amount of testing as the stable version.

+

All new development is done on the dev branches of HaxeFlixel's GitHub repositories.

+

Prerequisites

+
    +
  • +

    You must have completed the Getting Started guide to have the necessary dependencies (Haxe and OpenFL).

    +

    If you want to use development builds of OpenFL and Lime, please refer to these instructions:

    + +
  • +
  • +

    Install Git

    +

    Windows-only note: ensure that during the installation process, you select the non-default option that allows you to use Git from the Windows command prompt (you'll also need to re-open your command prompt window after installation for Git to become available there).

    +
  • +
+

Install Flixel from GitHub

+

To obtain the newest version, please input the following command into your console:

+
haxelib git flixel https://github.com/HaxeFlixel/flixel
+BASH
+

The same applies for any additional Flixel libraries:

+
haxelib git flixel-demos https://github.com/HaxeFlixel/flixel-demos
+haxelib git flixel-addons https://github.com/HaxeFlixel/flixel-addons
+haxelib git flixel-ui https://github.com/HaxeFlixel/flixel-ui
+BASH
+

Should you want to use haxelib set <library> <version> to switch back to released versions, be sure to run haxelib dev <library> beforehand. haxelib git enables the "development directory" for a library, which overrides haxelib set commands.

+

Testing the installation with the Mode demo

+

Navigate to flixel-demos/Platformers/Mode. Compile and run the game with lime test <target>.

+

Need more help?

+

Get in touch with the community.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/install-haxeflixel/index.html b/documentation/install-haxeflixel/index.html new file mode 100644 index 000000000..dd1d38c95 --- /dev/null +++ b/documentation/install-haxeflixel/index.html @@ -0,0 +1,1068 @@ + + + + + + + + + + + Install HaxeFlixel | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Install HaxeFlixel

+ +

To install the latest stable version of HaxeFlixel, open a command prompt and run the following Haxelib commands:

+
haxelib install lime
+haxelib install openfl
+haxelib install flixel
+BASH
+

After the installation is complete, you can compile games to HTML5, Flash and Neko out of the box.

+

To easily install additional libraries (addons, ui, demos, tools, templates...) in a single step, just run:

+
haxelib run lime setup flixel
+BASH
+

Install the lime command

+
haxelib run lime setup
+BASH
+

This makes lime available as a command (alias for haxelib run lime).

+

To compile to desktop and mobile targets, you have to make sure you have run the respective lime setup +commands. Each are specified in the +Lime "Advanced Setup" docs.

+

Install the flixel command

+

Run the following two commands to install flixel-tools (needed for project templates among other things):

+
haxelib install flixel-tools
+haxelib run flixel-tools setup
+BASH
+

Updating HaxeFlixel

+

If a new version of Flixel has been released, and you want to update to it, you can use the following command to do so:

+
haxelib update flixel
+BASH
+

If you wanted to update e.g. flixel-addons instead, just replace flixel with flixel-addons.

+

To stay informed about new releases, you can follow @HaxeFlixel on Twitter or check out our Blog from time to time.

+

Development version

+

If you are interested in using bleeding edge code from the development branch on GitHub, see instructions here.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/introduction-to-haxe/index.html b/documentation/introduction-to-haxe/index.html new file mode 100644 index 000000000..f0b1c9045 --- /dev/null +++ b/documentation/introduction-to-haxe/index.html @@ -0,0 +1,1048 @@ + + + + + + + + + + + Introduction to Haxe | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Introduction to Haxe

+ +

Haxe is a cross-platform toolkit for developing applications, games, multimedia and server side code natively. Cross-compiling your code offers longevity to your code base that is not possible for other methods of cross-platform development.

+

The Haxe programming language itself is high level and strictly typed. It allows for Object Orientated programming with similar to syntax in AS3 and Java. Haxe is often learnt quickly and loved by developers coming from similar languages. Haxe is a valuable language to learn not only for games, but server-side development, command line tools and various other technologies.

+

Haxe is an open source technology, free to use and modify. The Haxe Toolkit provides a powerful cross-platform standard library that lets your code solve problems and have a codebase that is more versatile.

+

Backed by the Haxe Foundation, industry sponsors and partners, it receives enterprise support and is sponsored and recognized by developers at a growing number of large companies such as Nickelodeon, Disney, TiVo, Stencyl and more.

+

Haxe is being developed on GitHub:

+
    +
  • https://github.com/HaxeFoundation
  • +
+

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/introduction-to-openfl/index.html b/documentation/introduction-to-openfl/index.html new file mode 100644 index 000000000..73fa7f021 --- /dev/null +++ b/documentation/introduction-to-openfl/index.html @@ -0,0 +1,1045 @@ + + + + + + + + + + + Introduction to OpenFL | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Introduction to OpenFL

+ + +

The Open Flash Library (OpenFL) previously known as NME, is an innovative framework designed to provide fast, productive development for Windows, Mac, Linux, iOS, Android, Flash and HTML5 – all using the same source code.

+

OpenFL has a history of providing the Flash API wherever possible however it is also used to extend upon that API. OpenFL is powered by the Haxe Toolkit's cross-compiler that lets it produce native code such as C++ for its target platforms.

+

OpenFL has a an active community of developers building games for the web, consoles, desktop and mobile devices. OpenFL is free to use and modify and it is currently being developed openly on GitHub. The project made from the combined work of talented and passionate developers over many years has resulted in a mature and advanced platform.

+

OpenFL targets include native cross-compiled C++ for desktop and mobile targets, as well as web targets such as Flash, HTML5 and experimental support for Emscripten. OpenFL is written primarily in the Haxe language as well as platform specific code integrating with SDKs and native APIs.

+

OpenFL provides HaxeFlixel with a familiar Flash API as well as an extended set of features for native targets. This includes the use of GPU accelerated texture batching through drawTiles, multi-threading and more.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/ios/index.html b/documentation/ios/index.html new file mode 100644 index 000000000..fe20e174d --- /dev/null +++ b/documentation/ios/index.html @@ -0,0 +1,1095 @@ + + + + + + + + + + + iOS | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

iOS

+ + +

The iOS target makes use of a chain of frameworks to compile your native iOS game from Haxe code. OpenFL uses the Hxcpp and XCode natively so no virtual machine is involved. +When you compile an iOS project an XCode project file is also automatically generated in the build directly so you can make use of the XCode profiler and toolset.

+

The Haxe compiler uses it's cpp target to compile your Haxe code for the LibSDL OpenGL library. +iOS is is part of the cpp group of targets so when developers mention cpp the topic will may be relevant to HaxeFlixel iOS.

+

With OpenFL using native-code and OpenGL with LibSDL, the rendering methods are different to where Flixel started with Flash. +iOS uses GPU accelerated Texture Batching for the best possible performance in mobile devices.

+

Conditionals

+
+
#if cpp
+//your iOS code
+#end
+
+#if ios
+//your iOS code
+#end
+
+#if mobile
+//your iOS code
+#end
+
+

Project XML settings

+

Mobile platforms can use a window width and height of 0, which is a special value that uses the full resolution of the current display.

+
<window width="0" height="0" background="#FFFFFF" fps="60" />
+
+

OpenFL also exposes the following specific settings for the iOS target:

+
<window hardware="true" allow-shaders="true" require-shaders="true" if="cpp"/>
+<window vsync="true" antialiasing="4" if="cpp" />
+<window orientation="portrait" /> || <window orientation="landscape" if="cpp"/>
+
+

Custom PNG icons and launch images: (Check iOS Icon and Image Sizes Guidelines for more info)

+
<set name="PRERENDERED_ICON" value="true" />
+
+<icon path="Icon.png" size="57" if="ios" />
+<icon path="Icon@2x.png" size="114" if="ios" />
+<icon path="Icon-72.png" size="72" if="ios" />
+<icon path="Icon-72@2x.png" size="144" if="ios" />
+
+<launchImage path="Default.png" width="320" height="480" if="ios" />
+<launchImage path="Default@2x.png" width="640" height="960" />
+<launchImage path="Default-Portrait~ipad.png" width="768" height="1024" if="ios" />
+<launchImage path="Default-Portrait@2x~ipad.png" width="1536" height="2048" if="ios" />
+<launchImage path="Default-Landscape~ipad.png" width="1024" height="768" if="ios" />
+<launchImage path="Default-Landscape@2x~ipad.png" width="2048" height="1536" if="ios" />
+<launchImage path="Default-568h@2x.png" width="640" height="1136" if="ios" />
+
+

Compile Commands

+

Visual Studio Code, FlashDevelop and IntelliJ IDEA support iOS compilation through their GUI.

+

Command line

+

The basic command to compile and test iOS:

+
lime test ios
+
+

Run this command from the root folder of your project, the default Project.xml will be used automatically.

+

If you want to use the iOS simulator, add -simulator when running/testing.

+
lime test ios -simulator
+
+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/keyboard/index.html b/documentation/keyboard/index.html new file mode 100644 index 000000000..4d4aadf30 --- /dev/null +++ b/documentation/keyboard/index.html @@ -0,0 +1,1100 @@ + + + + + + + + + + + Keyboard | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Keyboard

+ +

Keyboard input for HaxeFlixel is provided through the FlxKeyboard class and is available through FlxG.keys.

+

Key Lists

+

An object of type FlxKeyList contains a Bool for each key on the keyboard. The values are kept as an array internally, but you can easily refer to them by using special instance variables named after the key. For a full list of all available names look at the FlxKeyList documentation here.

+

FlxKeyboard uses the three key lists pressed, justPressed and justReleased to keep track of the keys. pressed contains true for all keys that are currently pressed. justPressed only contains true for all keys that have been pressed since the last frame.

+

Here's an example of how to put it all together:

+
override public function update(elapsed:Float):Void
+{
+	if (FlxG.keys.pressed.UP)
+	{
+		// The up arrow key is currently pressed
+		// This code is executed every frame, while the key is pressed
+	}
+	
+	if (FlxG.keys.justPressed.LEFT)
+	{
+		// The left arrow key has just been pressed
+		// This code is only executed once, on the frame immediately after the key has been pressed
+	}
+	
+	if (FlxG.keys.justReleased.LEFT)
+	{
+		// The left arrow key has just been released
+		// This code is only executed once, on the frame immediately after the key has been released
+	}
+
+	super.update(elapsed);
+}
+HAXE
+

Checking multiple keys

+

You can check multiple keys at once using the anyPressed(), anyJustPressed() and anyJustReleased() methods of FlxKeyboard. This allows you to bind multiple keys to one action easily, for example controlling the player with either WASD or the arrow keys. These methods take an Array of key names (as Strings) and return true if any of the given keys have the desired property.

+
override public function update(elapsed:Float):Void
+{
+	if (FlxG.keys.anyPressed([LEFT, A]))
+	{
+		// Move left
+	}
+	
+	if (FlxG.keys.anyPressed([RIGHT, D]))
+	{
+		// Move right
+	}
+
+	super.update(elapsed);
+}
+HAXE
+

Conditionals

+

For general information on conditionals, please refer to this page.

+
    +
  • +

    FLX_NO_KEYBOARD

    +

    This can be used to remove all keyboard-related logic from HaxeFlixel for optimization purposes, which can make sense on mobile targets, which is why it is combined with if="mobile" in the default Project.xml.

    +
  • +
+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/loading-the-tilemap/index.html b/documentation/loading-the-tilemap/index.html new file mode 100644 index 000000000..69998bce6 --- /dev/null +++ b/documentation/loading-the-tilemap/index.html @@ -0,0 +1,1120 @@ + + + + + + + + + + + 6 - Loading the Tilemap | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

6 - Loading the Tilemap

+ +

One of the great things about using Ogmo with HaxeFlixel is that there is already a built-in class to load and use the maps. However, it's not in the 'standard' HaxeFlixel library - we have to install the flixel-addons library to get access to it.

+
    +
  1. +

    Open up a new command prompt and enter:

    +
    haxelib install flixel-addons
    +BASH
    +

    This should run and install the new library. Close the command prompt window when it's finished.

    +
  2. +
  3. +

    Jump back into VSCode and open up your Project.xml file. We need to tell our project to include flixel-addons in the libraries.

    +
  4. +
  5. +

    Look for a line that says:

    +
    <!--<haxelib name="flixel-addons" />-->
    +XML
    +

    and change it to:

    +
    <haxelib name="flixel-addons" />
    +XML
    +

    Save this change - you're now playing with flixel-addons!

    +
  6. +
  7. +

    Go back to your PlayState, and, underneath where the player variable is defined, add:

    +
    var map:FlxOgmo3Loader;
    +var walls:FlxTilemap;
    +HAXE
    +

    We're basically just creating an object to hold our Ogmo map, and then another one to hold the FlxTilemap that we will generate from the Ogmo map.

    +
  8. +
  9. +

    In create(), before we setup the player object, add:

    +
    map = new FlxOgmo3Loader(AssetPaths.turnBasedRPG__ogmo, AssetPaths.room_001__json);
    +walls = map.loadTilemap(AssetPaths.tiles__png, "walls");
    +walls.follow();
    +walls.setTileProperties(1, NONE);
    +walls.setTileProperties(2, ANY);
    +add(walls);
    +HAXE
    +

    This just loads our room file into our FlxOgmo3Loader object, generates our FlxTilemap from the 'walls' layer, and then sets tile 1 (our floor tile) to not collide, and tile 2 (walls) to collide from any direction. Then we add our tilemap to the state.

    +
  10. +
  11. +

    Now, we need to make our player object get placed in the right location on the map. So, change where we initialize our player from:

    +
    player = new Player(20, 20);
    +HAXE
    +

    to:

    +
    player = new Player();
    +map.loadEntities(placeEntities, "entities");
    +HAXE
    +

    We're simply telling our map object to loop through all of the entities in our 'entities' layer, and call the placeEntities() for each one (which we're about to make now).

    +
  12. +
  13. +

    Let's make the placeEntities() function now. When we call loadEntities() on our map, it will pass the data of all of the placed entities to whatever function we want. In our function, we need to take this information and do something with it. It will look like this now:

    +
    function placeEntities(entity:EntityData)
    +{
    +	if (entity.name == "player")
    +	{
    +		player.setPosition(entity.x, entity.y);
    +	}
    +}
    +HAXE
    +

    So, if this function gets passed an entity with the name "player", it will set our player object's x and y values to the entity's x and y values.

    +
  14. +
  15. +

    Now, we want to add collisions to our state, so the player will bump into walls instead of just walking through them. So, in update(), after super.update(elapsed); add:

    +
    FlxG.collide(player, walls);
    +HAXE
    +

    All this does is check for overlaps between our player and the walls tilemap each update() call. If there are any overlaps, the objects are automatically separated from each other.

    +
  16. +
  17. +

    Finally, we want to make a small tweak to the player sprite. It's a good idea to make sure that your player has a decent chance of making it through doorways. Since by default, our player sprite is the same size as our tiles (16x16 pixels), it makes it so the player has to thread the needle to make it through 1-tile wide doorways. To remedy this, we're going to change the player sprite's size and offsets. This won't change what is actually displayed for the player's graphic, only its hitbox.

    +

    So, in the Player class, in the constructor, under where we set the drag, add:

    +
    setSize(8, 8);
    +offset.set(4, 4);
    +HAXE
    +
  18. +
  19. +

    Since we just changed the player's hitbox, we want to visualize it! Switch to HTML5 / Debug in the status bar and build the project. You can now press F2 to bring up HaxeFlixel's powerful debugging overlay.

    +

    Press the 3D-ish looking cube button in the upper right corner to render hitboxes:

    +

    +

    If you look closely, you can see that the player's is smaller than the tiles now.

    +
  20. +
+

In the next part, we'll talk about some small tweaks to the camera.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/mobile-targets/index.html b/documentation/mobile-targets/index.html new file mode 100644 index 000000000..6cfe0a5d9 --- /dev/null +++ b/documentation/mobile-targets/index.html @@ -0,0 +1,1192 @@ + + + + + + + + + + + Mobile Targets | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Mobile Targets

+ +

With the penetration of mobile devices in the world ignoring mobile targets for your games and applications is ignoring a huge audience.

+

Mobile devices even though amazing have particular bottlenecks not present on desktop targets. The bottleneck most significant to HaxeFlixel games is the low powered CPU. HaxeFlixel's answer to this is to make use of GPU acceleration provided by OpenFL.

+

CPU

+

The processing power of mobile CPUs are often the biggest bottleneck when compared to a desktop target. Mobile CPUs are constrained by low power architectures and are simply not as powerful. Manipulating pixels like bitmap filters do with Flash software rendering is simply too slow for mobile devices. HaxeFlixel has answered this for Flixel games to use the GPU for rendering your sprites instead of using software rendering like its done with Flash.

+

Memory

+

Memory on mobile devices as you can imagine does not compare to the desktop. When we talk about memory it relates to how many textures your game can store to render as well as the amount of raw data and objects in your game's runtime state. Memory lets you cache objects for quick runtime access instead of creating objects during your gameplay which may cause skipping and low performance. This is why HaxeFlixel uses destroy method and has implemented support for texture atlas'.

+

Texture Size Limits

+

Due to the nature of mobile hardware there are often maximum sizes for textures that are much lower than desktop hardware. There is no definitive guide to size limits as it depends on the hardware of each device individually.

+

Here you can see an overview of size limits obtained from WebGL browsers http://webglstats.com/#h_texsize

+

You can also look up a device on glxbench.com, under the GL config tab look for GL_MAX_TEXTURE_SIZE.

+

Here is an overview of the variety in devices, feel free to add to the list;

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
**Device****Processor****Max Texture Size****Display Resolution****Memory**
+

iPhone

+

+

Armv6

+

+

1024x1024

+

+

480x320

+

+

128MB

+

+

iPhone 3G

+

+

Armv6

+

+

1024x1024

+

+

480x320

+

+

128MB

+

+

iPhone 3GS

+

+

Cortex-A8

+

+

2048x2048

+

+

480x320

+

+

256MB

+

+

iPhone 4

+

+

Cortex-A8

+

+

2048x2048

+

+

960x640

+

+

512MB

+

+

iPhone 4S

+

+

Cortex-A9 Dual-Core

+

+

4096x4096

+

+

960x640

+

+

512MB

+

+

iPad

+

+

Cortex-A8

+

+

2048x2048

+

+

1024x768

+

+

512MB

+

+

iPad 2

+

+

Cortex-A9 Dual-Core

+

+

2048x2048

+

4096x4096 (iOS 5.1)

+

+

1024x768

+

+

512MB

+

iPad 3Cortex-A9 Dual-Core4096x40962048x15361024MB
+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/mouse/index.html b/documentation/mouse/index.html new file mode 100644 index 000000000..e76d041d9 --- /dev/null +++ b/documentation/mouse/index.html @@ -0,0 +1,1153 @@ + + + + + + + + + + + Mouse | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Mouse

+ +

Mouse input for HaxeFlixel is provided through the FlxMouse class and is available through FlxG.mouse. It is worth noting that it extends FlxPoint.

+

On non-mobile targets, the mouse starts out by being visible by default. You can set the visibility via FlxG.mouse.visible.

+

Left mouse button

+

The most common use of FlxG.mouse is checking the state of the left mouse button.

+
override public function update(elapsed:Float):Void
+{
+	if (FlxG.mouse.pressed)
+	{
+		// The left mouse button is currently pressed
+	}
+	
+	if (FlxG.mouse.justPressed)
+	{
+		// The left mouse button has just been pressed
+	}
+	
+	if (FlxG.mouse.justReleased)
+	{
+		// The left mouse button has just been released
+	}
+
+	super.update(elapsed);
+}
+
+HAXE
+

Exactly the same logic can be used for the middle and right mouse buttons. The properties are postfixed by Middle / Right, e.g. FlxG.mouse.pressedRight.

+

Cursor

+
import flixel.util.FlxColor;
+using flixel.util.FlxSpriteUtil;
+
+// Create a white circle to use as a cursor graphic
+var sprite = new FlxSprite();
+sprite.makeGraphic(15, 15, FlxColor.TRANSPARENT);
+sprite.drawCircle();
+
+// Load the sprite's graphic to the cursor
+FlxG.mouse.load(sprite.pixels);
+
+// Use the default mouse cursor again
+FlxG.mouse.unload();
+
+// To use the system cursor:
+FlxG.mouse.useSystemCursor = true;
+HAXE
+

Positional data

+

There are two kinds of position data available:

+
    +
  • +

    World position (absolute)

    +
    FlxG.mouse.x
    +FlxG.mouse.y
    +FlxG.mouse.getWorldPosition(); // returns x / y as a FlxPoint
    +HAXE
    +
  • +
  • +

    Screen position (relative)

    +
    FlxG.mouse.screenX
    +FlxG.mouse.screenY
    +FlxG.mouse.getScreenPosition(); // returns screenX / screenY as a FlxPoint
    +HAXE
    +
  • +
+

Mouse wheel

+

The current "delta" value of mouse wheel is provided in a simple Int property. If the wheel has just been scrolled up, it will have a positive value and vice versa. If it wasn't scrolled during the current frame, it's 0.

+
if (FlxG.mouse.wheel != 0)
+{
+	// Mouse wheel logic goes here, for example zooming in / out:
+	FlxG.camera.zoom += (FlxG.mouse.wheel / 10);
+}
+HAXE
+

Flash native cursor API

+

AS3-Flixel used a simple Sprite to display a bitmap graphic that is synchronized with the mouse position every frame. This approach is not optimal, as it causes what is commonly referred to as "mouse lag" - the cursor sprite lags behind the actual mouse position. Depending on the game's framerate and the player's mouse speed, this can be very noticeable and thus have a negative impact on the overall experience.

+

HaxeFlixel leverages the flash native cursor API for better mouse cursor performance. However, there are certain restrictions to native cursors:

+
    +
  • They can not exceed 32x32 pixels
  • +
  • No negative cursors are allowed, and the positive offsets are limited to the size
  • +
  • The targeted flash player version must be 10.2 or higher
  • +
+

Because of this, using the native cursor API is completely optional, see the section on the FLX_NO_NATIVE_CURSOR conditional.

+

Custom native cursors

+

You can use FlxG.mouse.load() for native cursors as usual, but if you want more fine-grained control, you can use the following functions:

+
FlxG.mouse.setSimpleNativeCursorData("custom", BitmapData);
+FlxG.mouse.registerNativeCursor("custom", MouseCursorData);
+HAXE
+

You can find more information on the MouseCursorData object here.

+

Use FlxG.mouse.setNativeCursor() to switch to an already registered native cursor.

+

Conditionals

+

For general information on conditionals, please refer to this page.

+
    +
  • +

    FLX_NO_MOUSE_ADVANCED

    +

    By default, there are event listeners set up for both the middle and the right mouse button. There are two reasons for wanting to disable this:

    +
      +
    • it requires a minimum flash player version of 11.2
    • +
    • it removes the right-click menu of the flash-player
    • +
    +
  • +
  • +

    FLX_NO_NATIVE_CURSOR

    +

    This disables the native cursor API on the flash target. For more info, check the "Flash native cursor API"-section above.

    +
  • +
  • +

    FLX_NO_MOUSE

    +

    This can be used to remove all mouse-cursor-related logic from HaxeFlixel for optimization purposes, which can make sense on mobile targets, which is why it makes sense to combine this with if="mobile" in your Project.xml.

    +
  • +
+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/multiple-platforms/index.html b/documentation/multiple-platforms/index.html new file mode 100644 index 000000000..bed40764d --- /dev/null +++ b/documentation/multiple-platforms/index.html @@ -0,0 +1,1215 @@ + + + + + + + + + + + 13 - Multiple Platforms | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

13 - Multiple Platforms

+ +

One of the big advantages of using HaxeFlixel is the ability to build your games for multiple platforms. You can build a working HTML5, Windows, Linux, Mac, Android and iOS game - all from the same code! So far, we've been working with HTML5, and, for the most part, you don't have to do too much to get your game working on other platforms - if you test it under Windows right now, it should mostly work just fine (although, without music, which we'll discuss later). However, you might run into some issues if you try to build it for a mobile device - at the very least, you won't be able to play it without a keyboard. We'll focus on Windows and Android in this tutorial and add a few things to make them work better on those platforms.

+

HaxeFlixel comes equipped with a powerful feature called conditionals. By adding some conditionals to your code, you can make it so that only certain pieces of code will be compiled depending on the conditionals you use. For example, if you are building for Android, which would probably not have a mouse, you could setup a conditional to skip over all mouse-related code. Alternately, you might also add some code to deal with touches, which would only work on mobile platforms, so you would make sure to wrap that logic in conditionals so that it doesn't try to build on Windows or HTML5.

+

It's not all that complicated. We'll start with something simple: adding the ability to toggle fullscreen mode on Windows.

+

Let's add a button to the OptionsState:

+
    +
  1. +

    When we initialize and interact with our button, we only want to do it on desktop platforms. So, at the top of the class, add:

    +
    #if desktop
    +var fullscreenButton:FlxButton;
    +#end
    +HAXE
    +
  2. +
  3. +

    In create(), somewhere after we add our volumeBar object, add:

    +
    #if desktop
    +fullscreenButton = new FlxButton(0, volumeBar.y + volumeBar.height + 8, FlxG.fullscreen ? "FULLSCREEN" : "WINDOWED", clickFullscreen);
    +fullscreenButton.screenCenter(X);
    +add(fullscreenButton);
    +#end
    +HAXE
    +
  4. +
  5. +

    Then we need to add our callback function for that button:

    +
    #if desktop
    +function clickFullscreen()
    +{
    +	FlxG.fullscreen = !FlxG.fullscreen;
    +	fullscreenButton.text = FlxG.fullscreen ? "FULLSCREEN" : "WINDOWED";
    +	save.data.fullscreen = FlxG.fullscreen;
    +}
    +#end
    +HAXE
    +

    Yes, we wrap the entire function in our conditional - if we're not building for desktop, this function will not exist. You'll also notice that we are saving the value of FlxG.fullscreen - this will be used to 'remember' the game's screen state when they next launch the game.

    +
  6. +
  7. +

    Next, let's change around our Main.hx so that when the game starts it will launch into whatever state the game was last in - fullscreen or not. We need to move things around a little, since we need to find out if we're going into fullscreen or not BEFORE we call new FlxGame(), but we need to set the volume AFTER, so new() should look like this:

    +
    var startFullscreen:Bool = false;
    +var save:FlxSave = new FlxSave();
    +save.bind("TurnBasedRPG");
    +#if desktop
    +if (save.data.fullscreen != null)
    +{
    +	startFullscreen = save.data.fullscreen;
    +}
    +#end
    +
    +super();
    +addChild(new FlxGame(320, 240, MenuState, 1, 60, 60, false, startFullscreen));
    +
    +if (save.data.volume != null)
    +{
    +	FlxG.sound.volume = save.data.volume;
    +}
    +save.close();
    +HAXE
    +
  8. +
  9. +

    Next, we need to give players a way to exit the game if they're in fullscreen mode - since they won't easily have access to the close-button anymore. +We do that by adding a new button to the MenuState:

    +
    #if desktop
    +var exitButton:FlxButton;
    +#end
    +HAXE
    +

    And in create():

    +
    #if desktop
    +exitButton = new FlxButton(FlxG.width - 28, 8, "X", clickExit);
    +exitButton.loadGraphic(AssetPaths.button__png, true, 20, 20);
    +add(exitButton);
    +#end
    +HAXE
    +

    Then our callback function just looks like:

    +
    #if desktop
    +function clickExit()
    +{
    +	Sys.exit(0);
    +}
    +#end
    +HAXE
    +
  10. +
+

There you go! Now try it out on both HTML5 and Windows targets and notice the differences - you can't go fullscreen in HTML5, and you can in Windows. You also get the button to exit the game on the MenuState while on Windows.

+

To make our game work with Android, we have to make a few more changes. First, we need to make sure that our Project.xml is setup correctly so that our settings are right for Android.

+
    +
  1. +

    In your app tag, at the very top of the file, add this attribute:

    +
    package="com.haxeflixel.turnBasedRPG"
    +XML
    +

    This will give your app a package name to be used on the Android device - it's best to be as unique as possible.

    +
  2. +
  3. +

    You might be wondering how we're going to allow the user to move around in our game on a device without the keyboard or mouse. Well, HaxeFlixel comes with a FlxVirtualPad class which we can use to accept touch input from the user and translate it into movement. Head over to PlayState.hx:

    +

    Define:

    +
    #if mobile
    +public static var virtualPad:FlxVirtualPad;
    +#end
    +HAXE
    +

    Create and add (in create):

    +
    #if mobile
    +virtualPad = new FlxVirtualPad(FULL, NONE);
    +add(virtualPad);
    +#end
    +HAXE
    +
  4. +
  5. +

    Since the player can't move while they're in combat, we're going to remove the distraction of our virtual pad while combat is happening. In the startCombat() function, add:

    +
    #if mobile
    +virtualPad.visible = false;
    +#end
    +HAXE
    +

    And, to make it reappear, in update(), somewhere around where we set inCombat to false, add:

    +
    #if mobile
    +virtualPad.visible = true;
    +#end
    +HAXE
    +
  6. +
  7. +

    The only place where we actually check for button presses is in our Player class, in the updateMovement() function. We currently have a section of code that is setting different gs to true based on keyboard input - but since the keyboard might be disabled on some platforms, we need to change that to look like this:

    +
    #if FLX_KEYBOARD
    +up = FlxG.keys.anyPressed([UP, W]);
    +down = FlxG.keys.anyPressed([DOWN, S]);
    +left = FlxG.keys.anyPressed([LEFT, A]);
    +right = FlxG.keys.anyPressed([RIGHT, D]);
    +#end
    +HAXE
    +
  8. +
  9. +

    Right after that logic, we'll add our logic that checks each of the buttons of our virtual pad to see which ones are pressed:

    +
    #if mobile
    +var virtualPad = PlayState.virtualPad;
    +up = up || virtualPad.buttonUp.pressed;
    +down = down || virtualPad.buttonDown.pressed;
    +left  = left || virtualPad.buttonLeft.pressed;
    +right = right || virtualPad.buttonRight.pressed;
    +#end
    +HAXE
    +

    Because of the way we've structured our movement logic, we don't need to make any other changes! Getting up set to true via keyboard or our virtual pad will do the same thing.

    +
  10. +
  11. +

    Things are a little different for our combat screen. We could setup the virtual pad to work with our combat menu, but that would feel a little clunky, given that the user has the power to tap on whatever they want on the screen. Instead, we're going to utilize touches to figure out what the player wants to do.

    +

    This means, in our update function, we need to wrap everything that's currently inside updateKeyboardInput() with:

    +
    #if FLX_KEYBOARD
    +...
    +#end
    +HAXE
    +
  12. +
  13. +

    Inside of our if (!wait) statement, add:

    +
    updateTouchInput();
    +HAXE
    +

    And

    +
    function updateTouchInput()
    +{
    +	#if FLX_TOUCH
    +	for (touch in FlxG.touches.justReleased())
    +	{
    +		for (choice in choices.keys())
    +		{
    +			var text = choices[choice];
    +			if (touch.overlaps(text))
    +			{
    +				selectSound.play();
    +				selected = choice;
    +				movePointer();
    +				makeChoice();
    +				return;
    +			}
    +		}
    +	}
    +	#end
    +}
    +HAXE
    +

    What this does is gets a list of all the touches that were just released this update and checks them one at a time to see if any were on top of one of our choices texts. If one of them is, we play our select sound, and act on the selection - ignoring any other touches that might have happened this update.

    +
  14. +
+

And that's everything! You should be able to run your game on HTML5, Windows (Neko, too!), and Android and have it work on each with slight variations. And you only have one project and one codebase!

+

Next we'll polish up our game and add a little juice to make it POP!

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/neko/index.html b/documentation/neko/index.html new file mode 100644 index 000000000..58e2fbbee --- /dev/null +++ b/documentation/neko/index.html @@ -0,0 +1,1071 @@ + + + + + + + + + + + Neko | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Neko

+ + +

Neko is a high-level dynamically typed programming language and virtual machine. Neko as a target of HaxeFlixel and OpenFL supports an API close to the CPP builds of HaxeFlixel.

+

The NekoVM itself is part of the Haxe Toolkit and is used throughout Haxelib, Lime, OpenFL and flixel-tools to easily create cross-platform tools. Neko gives the power of the Haxe standard library to cross platform development tools.

+

Neko itself is also used server-side in websites and general backend systems like the Haxelib. It contains a fully featured threading and socket API as well as integration with the Apache server.

+

Joshua Granick:

+
+

"When NME (Now known as Lime/OpenFL) was first created, it was designed to provide graphics, sound and other media for the NekoVM, but since the performance was not yet ideal, Hugh then decided (if I have my order of events correct) to experiment with a C++ target for Haxe. It worked, and HXCPP was born."

+
+

Its advantages:

+
    +
  • Extremely fast compilation time that can run on Linux, Mac or Windows.
  • +
  • Since it uses almost the same API as the CPP builds, it is a quicker way to test. +When you test with Flash it will use a much different part of the Haxe API.
  • +
+

Its disadvantages:

+
    +
  • Being a virtual machine, it is does not perform as well as a native build using the SDL builds of Lime. +Performance can be close to the Flash Player depending on the context.
  • +
+

Conditionals

+
#if neko
+//your neko code
+#end
+
+#if desktop
+//your neko code
+#end
+
+

Command line

+

The basic command to compile and test the Neko target:

+
lime test neko
+
+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/openfl-project-xml-format/index.html b/documentation/openfl-project-xml-format/index.html new file mode 100644 index 000000000..85c6c0ede --- /dev/null +++ b/documentation/openfl-project-xml-format/index.html @@ -0,0 +1,1043 @@ + + + + + + + + + + + XML Project Format | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

XML Project Format

+ +

Every OpenFL project uses an XML file to setup the compile settings for your projects depending on your chosen target. This includes stage size, source paths, asset paths and more.

+

Click here to see the Project.xml from the default HaxeFlixel template.

+

This is a complete specification of the XML file:

+

Lime XML Project Format

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/pickups/index.html b/documentation/pickups/index.html new file mode 100644 index 000000000..08e39ca54 --- /dev/null +++ b/documentation/pickups/index.html @@ -0,0 +1,1134 @@ + + + + + + + + + + + 8 - Pickups | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

8 - Pickups

+ +

Now that we have our little guy running around our map, lets give him something to pick up. We'll add some simple coins that will add to the player's score when they are picked up.

+
    +
  1. +

    Open up your project in Ogmo again, and click Edit Project.

    +
  2. +
  3. +

    On the Entities tab, add a new entity:

    + +
  4. +
  5. +

    Open up the level we used before, and, on the 'entities' layer, scatter a bunch of coins around:

    + +
  6. +
  7. +

    We're going to make our coins be 8x8 pixels. For the coin's graphic, you can use this image , or make your own. Make sure you save this in assets/images.

    +
  8. +
  9. +

    Get back into VSCode, and make a new Coin class:

    +
    package;
    +
    +import flixel.FlxSprite;
    +
    +class Coin extends FlxSprite
    +{
    +	public function new(x:Float, y:Float) 
    +	{
    +		super(x, y);
    +		loadGraphic(AssetPaths.coin__png, false, 8, 8);
    +	}
    +}
    +HAXE
    +
  10. +
  11. +

    Now, head back to the PlayState. We need to change our map logic so that when it's loading the entities and sees a coin in our Ogmo file, it will add a Coin object to our state.

    +
  12. +
  13. +

    First, let's make a group to hold all the coins in. At the top of our class, where we defined all our variables so far, add:

    +
    var coins:FlxTypedGroup<Coin>;
    +HAXE
    +

    Groups are like arrays of Flixel objects which can be used in a lot of different ways. In this case, since our group will only be containing coins, we will make it a FlxTypedGroup<Coin>.

    +

    In create(), after we add our walls, and before we initialize our player, we need to initialize and add our coin group:

    +
    coins = new FlxTypedGroup<Coin>();
    +add(coins);
    +HAXE
    +
  14. +
  15. +

    Next, we just want to change our placeEntities() function to put a coin into our group every time it encounters one in our Ogmo file. At the end of our if statement, add:

    +
    else if (entity.name == "coin")
    +{
    +	coins.add(new Coin(entity.x + 4, entity.y + 4));
    +}
    +HAXE
    +

    This will simply create a new coin, tell it to be at the position defined in the Ogmo file (+4 to x and y to center it on the tile), and add it to the coin group.

    +
  16. +
  17. +

    Now we need to have the player be able to collect the coins. We're going to use an overlap check to do this. In update(), after your FlxG.collide() call, add:

    +
    FlxG.overlap(player, coins, playerTouchCoin);
    +HAXE
    +

    This just says: every frame, check if there are any overlaps between the player and the coin group, and if there are, call playerTouchCoin.

    +
  18. +
  19. +

    Let's add the playerTouchCoin() callback now:

    +
    function playerTouchCoin(player:Player, coin:Coin)
    +{
    +	if (player.alive && player.exists && coin.alive && coin.exists)
    +	{
    +		coin.kill();
    +	}
    +}
    +HAXE
    +

    This function simply verifies that the player and the coin that overlap each other are both alive and exist. If so, the coin is killed (we'll add the score a little later on).

    +

    If you run the game right now, as you walk around the map, each coin you touch will disappear. Works great, but it's a little boring… Let's add a little style!

    +
  20. +
  21. +

    Go back to your Coin class, and add these functions:

    +
    override function kill()
    +{
    +	alive = false;
    +	FlxTween.tween(this, {alpha: 0, y: y - 16}, 0.33, {ease: FlxEase.circOut, onComplete: finishKill});
    +}
    +
    +function finishKill(_)
    +{
    +	exists = false;
    +}
    +HAXE
    +

    First, we override the kill() function - normally, by calling .kill() on an object, it will set both the alive and exists properties to false. In this case, we want to set alive to false, but we don't want to set exists to false just yet (objects which exists == false don't get drawn or updated). Instead, we initialize a FlxTween.

    +

    FlxTween is a powerful tool that lets you animate an object's properties. For our coins, we want to make it fade out while also rising up.

    +

    We set the duration to 0.33 seconds, and we are using the circOut easing style, to make the tween look a little nicer. Also we want to call finishKill() when the tween has completed, which just sets the coin's exists property to false, effectively removing it from the screen. By default, the tween type is set to ONESHOT so it is only executed once (instead of looping). You can change this by specifying a different type in the tween options, but in our case the default behavior is just what we need.

    +

    The type of the FlxTween complete callback is FlxTween->Void (receives a single FlxTween argument and returns nothing). In this case, we named it _ to indicate that we don't care about it, which is a common Haxe idiom (other than that, there's nothing special about it - to the compiler it's just an argument named _).

    +
  22. +
+

Try out the game now, and you'll notice the difference when you pick up coins! We'll do some more of this later on when we start adding 'juice' to our game.

+

+

In the next part, we'll talk about enemies!

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/polish/index.html b/documentation/polish/index.html new file mode 100644 index 000000000..62180470a --- /dev/null +++ b/documentation/polish/index.html @@ -0,0 +1,1107 @@ + + + + + + + + + + + 14 - Polish | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

14 - Polish

+ +

In this section, you're going to learn a few simple tricks to add some polish and juice to your game. Some of those have already been added here and there, but we'll go through a few places now to talk about them.

+

First up, there's a simple effect we can do with our camera to have it fade in or out. This works nice for transitions between states or screens. +We can add it to each of our states' create() function like so (right before super.create()):

+
FlxG.camera.fade(FlxColor.BLACK, 0.33, true);
+HAXE
+

Then, if you want to fade out (when switching states), you can do something like this:

+
FlxG.camera.fade(FlxColor.BLACK, 0.33, false, function()
+{
+	FlxG.switchState(new PlayState());
+});
+HAXE
+

Try adding this logic to all of your states and then see how much of an improvement it gives the flow of your game.

+

Next, let's give the player a little feedback whenever they get hurt in combat. We're going to make the screen shake briefly. So, go into the enemyAttack() function in CombatHUD and, right after we call FlxG.camera.flash (another neat little effect you can use in other projects), add:

+
FlxG.camera.shake(0.01, 0.2);
+HAXE
+

So, each time the player gets hurt in combat, the screen will flash white, and will shake a little bit for 0.2 seconds. Try it out!

+

I know we've used tweens a few times already, but lets add one to show the enemy getting hurt in combat. We're simply going to make a tween that moves the enemy a few pixels to the right, then triggers a second tween to move the enemy back - each one taking 0.1 seconds to complete. So, in the makeChoice() function of CombatHUD, right before we play the hurt sound for the enemy, add:

+
FlxTween.tween(enemySprite, {x: enemySprite.x + 4}, 0.1, {
+	onComplete: function(_)
+	{
+		FlxTween.tween(enemySprite, {x: enemySprite.x - 4}, 0.1);
+	}
+});
+HAXE
+

Check out how that looks. Tweens are a very simple and powerful tool to make your game feel more active when used properly.

+

Next, let's add a background effect to our CombatHUD to help bring our the combat screen out from the map a little bit. We're going to copy what's on the camera's buffer, desaturate it, and then apply a FlxWaveEffect to give it a wavy effect. HaxeFlixel has several effects like this that can be used for a number of effects (FlxGlitchEffect, FlxRainbowEffect...).

+
    +
  1. +

    Open up the CombatHUD class and add this variable:

    +
    var screen:FlxSprite;
    +HAXE
    +
  2. +
  3. +

    In the constructor, we'll initialize these two variables (add this before we create our background):

    +
    screen = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.TRANSPARENT);
    +var waveEffect = new FlxWaveEffect(FlxWaveMode.ALL, 4, -1, 4);
    +var waveSprite = new FlxEffectSprite(screen, [waveEffect]);
    +add(waveSprite);
    +HAXE
    +

    First, we make our screen, make it the size of the window, and just leave it empty for now. Then we create a FlxEffectSprite, tell it to target our screen, and set its properties. It only uses a single effect, our waveEffect instance (it's possible to chain multiple effects using FlxEffectSprite).

    +
  4. +
  5. +

    Next, in initCombat we want to make our screen take a copy of whatever is on the camera's buffer and apply it to itself, and then desaturate the image. Our effect sprite will always copy whatever is on our screen every update automatically.

    +
    screen.drawFrame();
    +var screenPixels = screen.framePixels;
    +
    +if (FlxG.renderBlit)
    +	screenPixels.copyPixels(FlxG.camera.buffer, FlxG.camera.buffer.rect, new Point());
    +else
    +	screenPixels.draw(FlxG.camera.canvas, new Matrix(1, 0, 0, 1, 0, 0));
    +
    +var rc:Float = 1 / 3;
    +var gc:Float = 1 / 2;
    +var bc:Float = 1 / 6;
    +screenPixels.applyFilter(screenPixels, screenPixels.rect, new Point(), new ColorMatrixFilter([rc, gc, bc, 0, 0, rc, gc, bc, 0, 0, rc, gc, bc, 0, 0, 0, 0, 0, 1, 0]));
    +HAXE
    +
  6. +
+

That's all there is to it! Our effect sprite will fade in and out with the CombatHUD already. Try our the effect to see how it looks!

+

+

You might have noticed, while testing the game, that the mouse cursor can get in the way - especially since it's not needed outside of the menu states. We can remedy this pretty easily. +In the PlayState's create(), add:

+
#if FLX_MOUSE
+FlxG.mouse.visible = false;
+#end
+HAXE
+

And be sure to do the reverse (= true) in GameOverState's create() No more pesky mouse cursor when we don't need it!

+

There are plenty of other tweaks and tricks you can add to your games. Try playing around with the different addons special effects classes in HaxeFlixel and see what else you can come up with. Take a look at the demos for more examples.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/resources/index.html b/documentation/resources/index.html new file mode 100644 index 000000000..c39ad5447 --- /dev/null +++ b/documentation/resources/index.html @@ -0,0 +1,1037 @@ + + + + + + + + + + + Resources | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Resources

+ +

Developing games in general is made easier by making the most of the resources in communities both online and offline.

+

We are here collecting resources to help you learn and make games. Code snippets, tutorials and general information for game development is all wanted, so please make a pull request to these pages and make these resources even better!

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/setup/index.html b/documentation/setup/index.html new file mode 100644 index 000000000..0d2ac2ed8 --- /dev/null +++ b/documentation/setup/index.html @@ -0,0 +1,1048 @@ + + + + + + + + + + + 1 - Setup | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

1 - Setup

+ +

The first things we need to do is install all of the components we need to work with HaxeFlixel. For that, please follow our general Getting Started guide. This will get you:

+
    +
  • Haxe
  • +
  • Lime
  • +
  • OpenFL
  • +
  • HaxeFlixel
  • +
+

In this tutorial we will be using Visual Studio Code (VSCode) as our editor. See here for setup and general usage instructions.

+

Assuming everything went smoothly, you should be all set - now we can actually get to the fun part and start coding!

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/sound-and-music/index.html b/documentation/sound-and-music/index.html new file mode 100644 index 000000000..c4dd9ac4c --- /dev/null +++ b/documentation/sound-and-music/index.html @@ -0,0 +1,1200 @@ + + + + + + + + + + + 12 - Sound and Music | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

12 - Sound and Music

+ +

Our game is really coming together now, but it's still missing something… there's no sound yet!

+

For this game, we're going to keep it simple (as usual). We're going to have a single, continuously looping track that plays while our game is running. We will also have several, simple sound effects that play for different actions. Playing sounds and music in HaxeFlixel is pretty easy, so this will go quickly!

+

First, you'll need to make your music and sounds. Patrick Crecelius from Fat Bard has provided some music for this tutorial - feel free to use it for this tutorial, or make your own.

+

We've also created some sound effects using Bfxr, which you can use if you like, or, make your own!

+

If you've been following along since the UI and Combat section, you already downloaded a few of these, but be sure you have them all.

+
    +
  • +

    coin.wav - new! to be used when the player picks up a coin

    +
  • +
  • +

    combat.wav - to be used when combat starts

    +
  • +
  • +

    fled.wav - will play when the player successfully flees from combat

    +
  • +
  • +

    hurt.wav - will play whenever either the player or the enemy hits with an attack

    +
  • +
  • +

    lose.wav - will play when the player dies in combat

    +
  • +
  • +

    miss.wav - will play whenever either the player or the enemy misses with an attack

    +
  • +
  • +

    select.wav - used by buttons and when the player makes a selection

    +
  • +
  • +

    step.wav - new! used by the player and the enemies for 'footstep' sounds

    +
  • +
  • +

    win.wav - used when the player wins in combat

    +
  • +
+

Once you have your music, place it in assets/music, and your sound files should go in assets/sounds.

+

Now let's change our code to use these sounds:

+
    +
  1. +

    First, open up MenuState.hx. Since we want our music to start as soon as the game starts, and loop continuously no matter what happens, we're going to add this to create().

    +
    if (FlxG.sound.music == null) // don't restart the music if it's already playing
    +{
    +	FlxG.sound.playMusic(AssetPaths.HaxeFlixel_Tutorial_Game__ogg, 1, true);
    +}
    +HAXE
    +

    We're also checking if the music is already playing, since we don't want to restart it unnecessarily in that case.

    +

    If you try your game out right now, it should play music!

    +
  2. +
  3. +

    Next, we want to make our buttons all make a sound when they get clicked. This is simple, we just tell the button's onUp to load our sound. In the MenuState's create(), after you initialize the play-button, add this:

    +
    playButton.onUp.sound = FlxG.sound.load(AssetPaths.select__wav);
    +HAXE
    +
  4. +
  5. +

    Now, you can do the same for the options button (changing playButton to optionsButton).

    +

    For each of the other buttons in our game - four of them in OptionsState, and one in GameOverState - the code already exists, but as a learning exercise, you can go through those files and see what was done.

    +
  6. +
  7. +

    Next, let's give our player some footsteps. We don't want to create and destroy a new sound object every time we want to play the same sound, so we will create a FlxSound object to be used over and over. At the top of the Player class, add:

    +
    var stepSound:FlxSound;
    +HAXE
    +
  8. +
  9. +

    Then, we need to load the footstep sound somewhere in the constructor:

    +
    stepSound = FlxG.sound.load(AssetPaths.step__wav);
    +HAXE
    +
  10. +
  11. +

    Now go to our updateMovement() function, and, after we check if the player is moving (if ((velocity.x != 0 || velocity.y != 0) && touching == NONE)), add:

    +
    stepSound.play();
    +HAXE
    +

    A neat little property of FlxSound objects is that if you ever tell one to play, if it's already playing (and you haven't set the forceRestart flag), it won't play again. This means we can easily call play on our sound every frame, and it will sound as if the sound is just being looped - for as long as the player is moving, but will finish if the player has stopped moving, and not start up again while they are stationary.

    +
  12. +
  13. +

    Now, let's give enemies their own footsteps, too. The difference is, instead of just always playing the step sound at full volume, we're going to change the volume based on the proximity of the enemy to the player. This will be easier than it sounds. First, add our sound variable to the top of Enemy.hx:

    +
    var stepSound:FlxSound;
    +HAXE
    +
  14. +
  15. +

    And then, similarly to how we setup the Player class, add this to our constructor:

    +
    stepSound = FlxG.sound.load(AssetPaths.step__wav, 0.4);
    +stepSound.proximity(x, y, FlxG.camera.target, FlxG.width * 0.6);
    +HAXE
    +

    You'll notice that we are setting the volume to 0.4 (40%) this is because there will be plenty of enemies on the map, and there footsteps can get kind of annoying and loud (besides, they're probably walking around the dungeon barefoot, right?).

    +
  16. +
  17. +

    We then setup our proximity for our sounds, setting it's position to the x and y position of this enemy, and telling it to target the FlxG.camera.target object (which happens to be our player!). Finally, we say that the radius of our footstep sound is a little bit more than half of the screen's width - so we should be able to hear enemies that are just off the screen, and all the enemies' footsteps will sound louder/softer based on their distance from the camera target.

    +
  18. +
  19. +

    Next, similarly to where we added the player's step sounds, we're going to have the enemy play sounds, when it's playing it's walk animation. For these sounds, however, we will give the sound a position in the world.

    +
    stepSound.setPosition(x + frameWidth / 2, y + height);
    +stepSound.play();
    +HAXE
    +
  20. +
  21. +

    Next, let's head over to PlayState. We really only need one sound to be in the PlayState itself, and that's the one for picking up a coin. While you could put this into the Coin class, because there could be a lot of coins loaded at once, and because we really can't pick up more than one coin at a time (so the sounds don't need to overlap), putting a single coin sound effect in our PlayState saves us a bit of overhead.

    +

    So, just like our other sounds, initialize the variable:

    +
    var coinSound:FlxSound;
    +HAXE
    +

    Load the sound in create():

    +
    coinSound = FlxG.sound.load(AssetPaths.coin__wav);
    +HAXE
    +

    And in playerTouchCoin(), inside the if-statement, add:

    +
    coinSound.play(true);
    +HAXE
    +

    This time we will use forceRestart so that if the player happens to pickup several coins close to each other the sound will keep up with them.

    +
  22. +
  23. +

    All of the rest of our sounds, because they deal with combat, will be in our CombatHUD class.

    +

    Assuming you downloaded the CombatHUD file, the sounds should already be there, but as a learning exercise, it's a good idea to go through and check. This will help you better understand sounds for when you're working on your next game.

    +

    To initialize them:

    +
    var fledSound:FlxSound;
    +var hurtSound:FlxSound;
    +var loseSound:FlxSound;
    +var missSound:FlxSound;
    +var selectSound:FlxSound;
    +var winSound:FlxSound;
    +var combatSound:FlxSound;
    +HAXE
    +

    To load them:

    +
    fledSound = FlxG.sound.load(AssetPaths.fled__wav);
    +hurtSound = FlxG.sound.load(AssetPaths.hurt__wav);
    +loseSound = FlxG.sound.load(AssetPaths.lose__wav);
    +missSound = FlxG.sound.load(AssetPaths.miss__wav);
    +selectSound = FlxG.sound.load(AssetPaths.select__wav);
    +winSound = FlxG.sound.load(AssetPaths.win__wav);
    +combatSound = FlxG.sound.load(AssetPaths.combat__wav);
    +HAXE
    +

    You can probably figure out where they all go, but I'll go through them anyway.

    +

    In initCombat():

    +
    combatSound.play();
    +HAXE
    +

    In finishFadeIn():

    +
    selectSound.play();
    +HAXE
    +

    In update(), inside each of our three if statements related to button presses (if (_fire), else if (up), else if (down)):

    +
    selectSound.play();
    +HAXE
    +

    In makeChoice(), in our logic for a 'hit' (after _damages[1].text = "1";):

    +
    hurtSound.play();
    +HAXE
    +

    and in our miss logic:

    +
    missSound.play();
    +HAXE
    +

    Further down, if the player escapes (after outcome = ESCAPE):

    +
    fledSound.play();
    +HAXE
    +

    In enemyAttack(), if the enemy hits:

    +
    hurtSound.play();
    +HAXE
    +

    and if they miss:

    +
    missSound.play();
    +HAXE
    +

    Finally, in doneDamageOut(), after outcome = DEFEAT:

    +
    loseSound.play();
    +HAXE
    +

    and after outcome = VICTORY:

    +
    winSound.play();
    +HAXE
    +
  24. +
+

And that's it for sound! Play your game now, and you should hear all of the effects we've added (make sure your volume is up high enough, too!) It's starting to look like a real game! Next time, we'll get it working on multiple platforms!

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/sprites-and-animation/index.html b/documentation/sprites-and-animation/index.html new file mode 100644 index 000000000..589d84ed4 --- /dev/null +++ b/documentation/sprites-and-animation/index.html @@ -0,0 +1,1140 @@ + + + + + + + + + + + 4 - Sprites and Animation | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

4 - Sprites and Animation

+ +

So we have a player sprite that moves around the screen. Great! But… we don't want it to just look like a block… so let's add some graphics!

+

First, you need to have the sprite's graphic. Using your image editor of choice, you can draw pretty much anything you want, and save it as a transparent .png. For our player sprite, we're going to have it be made up of 16x16 pixel frames, with two different frames for each of the 4-possible facing directions (left and right are used by the same 2 frames, since we will be flipping them later).

+

You can draw it yourself, if you want, or use this image, created by my friend Vicky Hedgecock for this tutorial:

+

+

Save your file in assets/images.

+

Now we need to actually load the player's graphic into the sprite. So, bring up your Player class again.

+
    +
  1. +

    Remove the makeGraphic() call from your constructor, and replace it with:

    +
    loadGraphic(AssetPaths.player__png, true, 16, 16);
    +HAXE
    +

    This tells your sprite to use the player.png graphic, that it's animated, and that each frame is 16x16 pixels. AssetPaths is a class generated by a neat Haxe macro which builds its variables from the contents of your Project.xml's assets tag. Macros are a little complicated, but worth taking a look into at some point. In this case, we use AssetPaths as an easy way to reference our assets in code. Note that we could also just use a raw string path like "assets/images/player.png".

    +
  2. +
  3. +

    Next, we want to allow the sprite to be flipped based on its facing value. This makes it so we only need sprites for one direction (left), and not two (left and right).

    +

    Add the following:

    +
    setFacingFlip(LEFT, false, false);
    +setFacingFlip(RIGHT, true, false);
    +HAXE
    +

    All we're doing here is saying that we don't want to flip anything when facing left (because our sprite already faces left), and to flip horizontally when facing right. We could do the same for up and down if we wanted.

    +
  4. +
  5. +

    Then, we want to make the hitbox match the graphics. With this more top down perspective, it's good practice for the hitbox to match the feet, so let's set ours to the bottom middle of the sprite:

    +
    setSize(8, 8);
    +offset.set(4, 8);
    +HAXE
    +
  6. +
  7. +

    Now, we need to define our animations. In our case, we want a unique animation for each direction, except the right-facing one will be a mirrored version of the left-facing animation. We also want a "idle" and "walk" animations, depending on whether the player is moving. So, add:

    +
    animation.add("d_idle", [0]);
    +animation.add("lr_idle", [3]);
    +animation.add("u_idle", [6]);
    +animation.add("d_walk", [0, 1, 0, 2], 6);
    +animation.add("lr_walk", [3, 4, 3, 5], 6);
    +animation.add("u_walk", [6, 7, 6, 8], 6);
    +HAXE
    +

    We're finished with the constructor changes, the final step is to change our updateMovement() function to tell the player sprite which way to face. So, modify our section which deals with setting the player's angle so that it will also set its facing, accordingly:

    +
    if (up || down || left || right)
    +{
    +	var newAngle:Float = 0;
    +	if (up)
    +	{
    +		newAngle = -90;
    +		if (left)
    +			newAngle -= 45;
    +		else if (right)
    +			newAngle += 45;
    +		facing = UP;
    +	}
    +	else if (down)
    +	{
    +		newAngle = 90;
    +		if (left)
    +			newAngle += 45;
    +		else if (right)
    +			newAngle -= 45;
    +		facing = DOWN;
    +	}
    +	else if (left)
    +	{
    +		newAngle = 180;
    +		facing = LEFT;
    +	}
    +	else if (right)
    +	{
    +		newAngle = 0;
    +		facing = RIGHT;
    +	}
    +
    +	// determine our velocity based on angle and speed
    +	velocity.setPolarDegrees(SPEED, newAngle);
    +}
    +HAXE
    +

    Now we can use this facing value to determine which animation to use, but we also need to know whether the player is currently moving or not. Using these values we will determine with animation to use:

    +
    var action = "idle";
    +// check if the player is moving, and not walking into walls
    +if ((velocity.x != 0 || velocity.y != 0) && touching == NONE)
    +{
    +	action = "walk";
    +}
    +
    +switch (facing)
    +{
    +	case LEFT, RIGHT:
    +		animation.play("lr_" + action);
    +	case UP:
    +		animation.play("u_" + action);
    +	case DOWN:
    +		animation.play("d_" + action);
    +	case _:
    +}
    +HAXE
    +

    Every time this function gets called, it will check to see which of the directions the player is pressing, and, based on those, which way the sprite should be facing, and which animation should be playing.

    +

    Note: Calling animation.play with an animation name matching the current animation will not restart the animation.

    +
  8. +
  9. +

    Save your changes and run your project, and you should see your player sprite animate while being moved, and facing the right direction!

    +

    +
  10. +
+

Next, we'll talk about maps and collision!

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/the-power-of-haxeflixel/index.html b/documentation/the-power-of-haxeflixel/index.html new file mode 100644 index 000000000..ccf5b6bce --- /dev/null +++ b/documentation/the-power-of-haxeflixel/index.html @@ -0,0 +1,1053 @@ + + + + + + + + + + + The Power of HaxeFlixel | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

The Power of HaxeFlixel

+ +

First, let me talk a bit about why you should use HaxeFlixel.

+

HaxeFlixel gets its roots from the AS3 Flixel Framework created by +Adam ‘Atomic’ Saltsman. If you’ve played Canabalt, +you’ve seen the early version of this framework in action. HaxeFlixel takes the idea and the general structure of +Flixel, separates it from Flash, and combines it with the power and freedom of Haxe - which is a +multi-platform language, so that you can write games that can be easily published to all sorts of platforms +(Windows, Linux, Mac, HTML5, iOS, Android, and more).

+

HaxeFlixel comes with a ton of built-in features - classes, utilities, and functions - that handle a lot +of common or complex things that you might need to do. And, because it’s open-source, if you find something that it +can’t do, it’s really easy to change the code - and if your changes would benefit others, +add them to the library.

+

It is a library that is easy to use, but offers the freedom and power to do anything you can think of without +limitations caused by a rigid interface.

+

You can find out more about HaxeFlixel here.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/troubleshooting/index.html b/documentation/troubleshooting/index.html new file mode 100644 index 000000000..81256ba01 --- /dev/null +++ b/documentation/troubleshooting/index.html @@ -0,0 +1,1064 @@ + + + + + + + + + + + Troubleshooting | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Troubleshooting

+ +

Unexpected behaviour one one may find with sources that are hard to determine.

+

Timestep

+

By default the library performs calculations with a fixed timestep, to change this set FlxG.fixedTimestep = false

+

Explanation of timesteps

+

If you are unfamiliar with timesteps, here is a quick explanation.

+

A fixed timestep results in FlxG.elapsed always returning the same value in each update() iteration. The result is that the game runs "slower" if the computer can't keep up with the update speed. So for example, if the game is supposed to run at 60 FPS and it's running at 30 FPS, the user will perceive it to run at half the expected speed.

+

A variable timestep results in FlxG.elapsed returning a value according to the time that passed since the last update() call, and the game running at perceivably the expected speed for the user. However if the framerate is too low and the coder hasn't been careful (or studied Numerical Analysis), it could result in unpredicted behaviour and a game that doesn't run slow but is simply unplayable or broken.

+

Framerate inconsistency in an empty FlxState

+

A possible cause for this is related to input handling. To fix, you may want to disable any inputs you don't use in your target platforms at compile time. +The library offers some conditional compilation flags for this:

+
    +
  • FLX_NO_MOUSE
  • +
  • FLX_NO_KEYBOARD
  • +
  • FLX_NO_TOUCH
  • +
  • FLX_NO_GAMEPAD
  • +
+

These can be passed as parameters preceded by -D if compiling via command line (for example -D FLX_NO_MOUSE), or passed by adding them to your Project.XML file if you have one. For example, someone who is publishing to multiple platforms could have:

+
<haxedef name="FLX_NO_MOUSE" if="mobile" />
+<haxedef name="FLX_NO_KEYBOARD" />
+<haxedef name="FLX_NO_TOUCH" if="desktop"/>
+<haxedef name="FLX_NO_GAMEPAD" if="web"/>
+XML
+

If you created your Project.XML from a template, these options are most likely already in the file but commented out.

+

Undesired stretching when window size varies

+

Assigning a new instance of any of the classes that inherit from BaseScaleMode to FlxG.scalemode will set this to the desired scaling. However these settings may override the zoom value set when instancing a FlxGame.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/tutorial/index.html b/documentation/tutorial/index.html new file mode 100644 index 000000000..549c54af3 --- /dev/null +++ b/documentation/tutorial/index.html @@ -0,0 +1,1043 @@ + + + + + + + + + + + Tutorial | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Tutorial

+ +

Welcome to HaxeFlixel! In this tutorial, you will learn how to create a complete game in HaxeFlixel from start to finish, and then some. Each step is broken into smaller chunks to help you get through even the most complicated and daunting steps.

+

This tutorial is geared towards building for HTML5, Windows, and Android. We will work primarily with HTML5 most of the time.

+

We are going to be building a small dungeon crawler. You can see the finished product here:

+
+ +
+

If you have any questions or get stuck during this tutorial, you can get help here. Also, the finished game is part of flixel-demos, so you can always compare to the source code of the finished game if you're unsure about something.

+

So let's go ahead and get started!

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/ui-and-combat/index.html b/documentation/ui-and-combat/index.html new file mode 100644 index 000000000..355f5c9d8 --- /dev/null +++ b/documentation/ui-and-combat/index.html @@ -0,0 +1,1251 @@ + + + + + + + + + + + 10 - UI and Combat | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

10 - UI and Combat

+ +

Now we want to show the player what's going on. So we need to have some kind of HUD on the screen to tell them what their current/max health is, and how many coins they have. For the health icon you can use this image , or make your own. Make sure you save this in assets/images.

+
    +
  1. +

    We'll start by making a new HUD class which will hold all our HUD elements:

    +
    package;
    +
    +import flixel.FlxG;
    +import flixel.FlxSprite;
    +import flixel.group.FlxGroup.FlxTypedGroup;
    +import flixel.text.FlxText;
    +import flixel.util.FlxColor;
    +
    +using flixel.util.FlxSpriteUtil;
    +
    +class HUD extends FlxTypedGroup<FlxSprite>
    +{
    +	var background:FlxSprite;
    +	var healthCounter:FlxText;
    +	var moneyCounter:FlxText;
    +	var healthIcon:FlxSprite;
    +	var moneyIcon:FlxSprite;
    +
    +	public function new()
    +	{
    +		super();
    +		background = new FlxSprite().makeGraphic(FlxG.width, 20, FlxColor.BLACK);
    +		background.drawRect(0, 19, FlxG.width, 1, FlxColor.WHITE);
    +		healthCounter = new FlxText(16, 2, 0, "3 / 3", 8);
    +		healthCounter.setBorderStyle(SHADOW, FlxColor.GRAY, 1, 1);
    +		moneyCounter = new FlxText(0, 2, 0, "0", 8);
    +		moneyCounter.setBorderStyle(SHADOW, FlxColor.GRAY, 1, 1);
    +		healthIcon = new FlxSprite(4, healthCounter.y + (healthCounter.height/2)  - 4, AssetPaths.health__png);
    +		moneyIcon = new FlxSprite(FlxG.width - 12, moneyCounter.y + (moneyCounter.height/2)  - 4, AssetPaths.coin__png);
    +		moneyCounter.alignment = RIGHT;
    +		moneyCounter.x = moneyIcon.x - moneyCounter.width - 4;
    +		add(background);
    +		add(healthIcon);
    +		add(moneyIcon);
    +		add(healthCounter);
    +		add(moneyCounter);
    +		forEach(function(sprite) sprite.scrollFactor.set(0, 0));
    +	}
    +
    +	public function updateHUD(health:Int, money:Int)
    +	{
    +		healthCounter.text = health + " / 3";
    +		moneyCounter.text = Std.string(money);
    +		moneyCounter.x = moneyIcon.x - moneyCounter.width - 4;
    +	}
    +}
    +HAXE
    +

    This class extends FlxTypedGroup<FlxSprite> so that it can hold all of our FlxSprite objects. It is composed of 5 different items: a background (black, with a 1-pixel thick white line along the bottom), 2 FlxText objects: 1 for health, and 1 for money, and two FlxSprite objects, for the icons to go next to the FlxText objects. At the end of our constructor, we have a forEach() call - we use this to iterate through each of the items in this group, and it just sets their scrollFactor.x and scrollFactor.y to 0, meaning, even if the camera scrolls, all of these items will stay at the same position relative to the screen.

    +

    Finally, we have a function that we can call from anywhere to tell the HUD what it should display.

    +
  2. +
  3. +

    Now let's get it to work and have it update whenever we pick up a coin. In your PlayState, add this to the top of the class:

    +
    var hud:HUD;
    +var money:Int = 0;
    +var health:Int = 3;
    +HAXE
    +
  4. +
  5. +

    In create(), before super.create(), add:

    +
    hud = new HUD();
    +add(hud);
    +HAXE
    +
  6. +
  7. +

    Finally, in the playerTouchCoin() function we added earlier, somewhere inside the if-statement, add:

    +
    money++;
    +hud.updateHUD(health, money);
    +HAXE
    +
  8. +
+

Go ahead and test out your game, and the HUD should update each time you pick up a coin!

+

+

If we had a way to 'hurt' the player, we could also update the health on the HUD… but in order to do that, we need to figure out how we're going to do combat!

+

Let's begin by establishing what we want our combat system to achieve. First, we're not going to be making the next Final Fantasy game here, this is just a basic demonstration to show how a few different elements can work. So, I think all we want to do is have a simple interface that appears when the player touches an enemy that shows the player's health, and the enemy's health (in a health bar, for obfuscation), and gives the player 2 options: FIGHT or FLEE.

+

If they choose to fight, we'll roll some random chance checks to see if the player hits the enemy, and if the enemy hits the player - a hit will do 1 damage. Once the enemy dies, we'll continue on. If they choose to flee, we'll do a check to see if they do flee or not - if they do, the interface closes and the enemy will be stunned for a few seconds so the player can move away. If they fail to flee, the enemy will get a free hit against the player. We'll also show the damage and misses on the interface.

+

This all seems simple enough, but it's actually going to require several components working together to make it work. It's the most complicated piece of our game so far.

+
    +
  1. +

    The first component will be our CombatHUD class. This is a pretty big class - it's going to do most of the heavy lifting with our combat logic. You can see the complete class here:

    +

    CombatHUD.hx

    +

    Take some time to read through it to see how it works, then add it to your project.

    +

    We already have most of the assets used by the CombatHUD, but there is one image file we still need - an arrow the player can use to select a choice. Download it from this link (or make your own), name it pointer.png and add it to the assets/images folder.

    +

    The CombatHUD also uses something we haven't discussed yet: sounds. We'll dig in to this more in the Sound and Music section. For now, just download these files and place them in the assets/sounds folder. This will ensure the code compiles.

    + +
  2. +
  3. +

    Now, you will need to add a small function to our Enemy class:

    +
    public function changeType(type:EnemyType)
    +{
    +	if (this.type != type)
    +	{
    +		this.type = type;
    +		var graphic = if (type == BOSS) AssetPaths.boss__png else AssetPaths.enemy__png;
    +		loadGraphic(graphic, true, 16, 16);
    +	}
    +}
    +HAXE
    +
  4. +
  5. +

    Next, we need to get our CombatHUD into our PlayState. Add this to the top of the PlayState class:

    +
    var inCombat:Bool = false;
    +var combatHud:CombatHUD;
    +HAXE
    +
  6. +
  7. +

    Move down to create(), and, after we add the HUD, and before we call super.create(), add:

    +
    combatHud = new CombatHUD();
    +add(combatHud);
    +HAXE
    +
  8. +
  9. +

    Go down to our update(), and change it so that we're ONLY checking for collisions and overlaps when we're not in combat. Everything after the super.update() should look like this:

    +
    if (inCombat)
    +{
    +	if (!combatHud.visible)
    +	{
    +		health = combatHud.playerHealth;
    +		hud.updateHUD(health, money);
    +		if (combatHud.outcome == VICTORY)
    +		{
    +			combatHud.enemy.kill();
    +		}
    +		else
    +		{
    +			combatHud.enemy.flicker();
    +		}
    +		inCombat = false;
    +		player.active = true;
    +		enemies.active = true;
    +	}
    +}
    +else
    +{
    +	FlxG.collide(player, walls);
    +	FlxG.overlap(player, coins, playerTouchCoin);
    +	FlxG.collide(enemies, walls);
    +	enemies.forEachAlive(checkEnemyVision);
    +	FlxG.overlap(player, enemies, playerTouchEnemy);
    +}
    +HAXE
    +

    So, we're adding a check to see if the player touches an enemy. If they do, we'll call a callback to see if we should start combat or not.

    +

    If we're in combat, we're simply going to keep checking to see if the combat HUD is still visible - once it becomes invisible, we know that combat has finished, and we can determine the outcome. If the outcome is VICTORY (one of our four enum values), we will kill the enemy, but if the player fled the battle, we will make the enemy flicker, to show that the player is safe from fighting it again for a short amount of time.

    +
  10. +
  11. +

    You may have noticed that our Enemy class does not have a flicker() function. That's because we're going to use one found in the FlxSpriteUtil class. Haxe has a nice feature to help us do so. Add this line at the top of the PlayState file, just after your imports:

    +
    using flixel.util.FlxSpriteUtil;
    +HAXE
    +

    This will allow us to use the APIs in the FlxSpriteUtil class, such as flicker(), which can be used on any FlxObject. For more on how this works, take a look at the Haxe documentation.

    +
  12. +
  13. +

    Next, let's add the functions to handle the player touching an enemy:

    +
    function playerTouchEnemy(player:Player, enemy:Enemy)
    +{
    +	if (player.alive && player.exists && enemy.alive && enemy.exists && !enemy.isFlickering())
    +	{
    +		startCombat(enemy);
    +	}
    +}
    +
    +function startCombat(enemy:Enemy)
    +{
    +	inCombat = true;
    +	player.active = false;
    +	enemies.active = false;
    +	combatHud.initCombat(health, enemy);
    +}
    +HAXE
    +

    All we're doing here is verify that both the player and the enemy are alive and exist, as well as that the enemy is not flickering (flickering enemies are those we've just fled from). If so, we start combat.

    +

    The startCombat() function simply sets our inCombat flag (so we know not to do collisions), and sets the player and all the enemies to inactive, so they no longer update.

    +

    Finally, we call initCombat() in our CombatHUD, which initializes it and makes it start working.

    +
  14. +
  15. +

    Finally, we want enemies that are flickering to not move - they should act kind of stunned for a second after the enemy flees.

    +

    In the Enemy class, under update(), add:

    +
    if (this.isFlickering())
    +	return;
    +HAXE
    +

    At the very top, before doing anything else in that function.

    +

    Note that isFlickering() comes from FlxSpriteUtil. So, just like before, you will also need to add the using line at the top of the Enemy class file:

    +
    using flixel.util.FlxSpriteUtil;
    +HAXE
    +
  16. +
+

And that should do it! Test out your game and make sure that it works!

+

+

Next, we'll cover winning and losing and setting up all our different states.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/upgrade-guide-3-x/index.html b/documentation/upgrade-guide-3-x/index.html new file mode 100644 index 000000000..749d47ac4 --- /dev/null +++ b/documentation/upgrade-guide-3-x/index.html @@ -0,0 +1,1866 @@ + + + + + + + + + + + Upgrade Guide 3.x | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Upgrade Guide 3.x

+ +

3.3.0

+

The minimum Haxe version for this release is 3.1.0.

+

On flash, gamepad support has been added. For your project to work, you have to modify your Project.xml so that either:

+
    +
  • <set name="SWF_VERSION" value="11.8" /> is used (min. flash player version 11.8) or
  • +
  • <haxedef name="FLX_NO_GAMEPAD" if="flash" /> is used.
  • +
+

When compiling to HTML5, make sure to remove <haxelib name="openfl" /> from your Project.xml. This is already being handled in flixel's own include.xml.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 3.2.xHaxeFlixel 3.3.0
FlxTween.multiVar()FlxTween.tween()
FlxTween.singleVar()FlxTween.tween()
FlxTween.fader(0, 5);FlxTween.tween(FlxG.sound, {volume: 0}, 5);
FlxSound.surviveFlxSound.persist
MouseEventManager.addSprite()MouseEventManager.add()
FlxObject.forceComplexRender = true;FlxObject.pixelPerfectRender = false;
FlxText.widthFlxText.fieldWidth
FlxSprite.setOriginToCenter()FlxSprite.centerOrigin()
FlxG.safeDestroy()FlxDestroyUtil.destroy()
FlxTilemap.scaleXFlxTilemap.scale.x
FlxTilemap.scaleYFlxTilemap.scale.y
sprite.animation.addByIndicies()sprite.animation.addByIndices()
sprite.animation.addByStringIndicies()sprite.animation.addByStringIndices()
FlxTimer.userDataremoved
FlxTween.userDataremoved
FlxG.sound.add()FlxG.sound.cache()
+

There has also been a slight optimization for simple FlxSprites in FLX_RENDER_BLIT mode (flash and HTML5). This might require an additional dirty = true; for the change to show up if you manipulate the sprite's BitmapData directly.

+

FlxSprite flipping

+

Flipping sprite graphics now works differently - the flipped variable has been removed, as well as the Reverse parameter of loadGraphic() and loadGraphicFromTexture(). You can now directly manipulate the new flipX and flipY variables (flipping vertically is now possible).

+

If you want to continue to use facing to flip the graphic (e.g. in a platformer), you can use the following logic:

+
sprite.setFacingFlip(RIGHT, false, false);
+sprite.setFacingFlip(LEFT, true, false);
+HAXE
+

FlxTimer and FlxPath

+

FlxPath and FlxTimer were being pooled internally, which could lead to buggy behaviour in certain use cases. Due to that, pooling has been removed from these classes.

+ + + + + + + + + + + + + + + + + +
HaxeFlixel 3.2.xHaxeFlixel 3.3.0
start()new FlxTimer() / FlxPath()
run()start()
+

Also, the following API changes have been made for consistency:

+ + + + + + + + + + + + + + + + + +
HaxeFlixel 3.2.xHaxeFlixel 3.3.0
pausedactive
abort()cancel()
+

3.2.0

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 3.1.0HaxeFlixel 3.2.0
FlxTween.multiVar(object, vars, duration, { delay: 1});FlxTween.multiVar(object, vars, duration, { startDelay: 1});
FlxG.camera.followAdjust(4, 5);FlxG.cameras.followLead.set(4, 5);
FlxTilemap.arrayToCSV()FlxStringUtil.arrayToCSV()
FlxTilemap.bitmapToCSV()FlxStringUtil.bitmapToCSV()
FlxTilemap.imageToCSV()FlxStringUtil.imageToCSV()
FlxMath.computeVelocity()FlxVelocity.computeVelocity()
FlxState.setSubState()FlxState.openSubState()
+

3.1.0

+

HaxeFlixel 3.1 is a continuation of our efforts of making the API cleaner and more intuitive, keeping the amount of bugs as low as possible and adding new features. It is one of the biggest releases so far.

+

This page is a summary of all breaking changes - for a more in-depth list of changes, please refer to the changelog.

+

FlxTypedButton / FlxButton refactor

+

FlxTypedButton has been completely refactored, which includes the following breaking API changes:

+
    +
  • +

    A new FlxButtonEvent class was added for the onDown, onUp, onOver and onOut events. Instead of the setCallback()-functions, you now set callbacks like this:

    +

    button.onDown.callback = someFunction;

    +

    This class also contains a sound property:

    +

    button.onDown.sound = FlxG.sound.load("pathToASound");

    +

    You might say: "What happened to custom callback arguments? The callback has the type Void->Void!" +While that's true, you can still use callback arguments by leveraging function binding:

    +

    button.onDown.callback = someFunction.bind(1);

    +

    In that example, someFunction is of type Int->Void and will always be called with 1.

    +
  • +
  • +

    labelOffset:FlxPoint is now an array (labelOffsets:Array<FlxPoint>) which uses the button status constants as indices for more control over the button position.

    +
  • +
  • +

    The highlight frame of the button spritesheet is now ignored by default on mobile devices, since it does not make much sense there - you can't hover over a button on a touchscreen.

    +
  • +
  • +

    It is now possible to "swipe-press" a button, which means you can press it if the input (mouse or touch) has been moved over the button and then released. Previously, you could only press a button if the press happened while you were already hovering over the button. This especially makes FlxVirtualPad more usable.

    +
  • +
+

FlxG.keys and FlxG.keyboard

+

In 3.0.0, FlxG.keyboard has been introduced. However, we realized that this does not make for an intuitive API - you can't tell the difference between the two from their name alone. In fact, even if you have been using the two for a while, it still seems confusing.

+

This is why me merged the two classes again. This required removing the following functions:

+
    +
  • FlxG.keyboard.pressed()
  • +
  • FlxG.keyboard.justPressed()
  • +
  • FlxG.keyboard.justReleased()
  • +
+

You should use the following functions instead:

+
    +
  • FlxG.keys.anyPressed()
  • +
  • FlxG.keys.anyJustPressed()
  • +
  • FlxG.keys.anyJustReleased()
  • +
+

Please note that those functions take an Array<String> instead of a variable amount of Strings. So the following...

+
if (FlxG.keyboard.pressed("LEFT", "RIGHT")) {}
+HAXE
+

...becomes:

+
if (FlxG.keys.anyPressed(["LEFT", "RIGHT"])) {}
+HAXE
+

FlxMouse refactor

+

The following breaking changes were made during the refactor of FlxMouse:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 3.0.xHaxeFlixel 3.1.0
FlxG.mouse.show();FlxG.mouse.visible = true;
FlxG.mouse.load();
FlxG.mouse.hide();FlxG.mouse.visible = false;
FlxState.useMouseremoved
+

Also, the mouse cursor is now visible by default on non-mobile devices.

+

The middle and right click event listeners are now set up by default, which means FLX_MOUSE_ADVANCED has turned into FLX_NO_MOUSE_ADVANCED.

+

The recording system and FlxRandom

+

To put it bluntly... FlxRandom was a bit of a mess in 3.0. Some of the functions were deterministic, others weren't, which as a result made it very difficult to create deterministic games suitable for the recording system.

+

In 3.1.0, FlxRandom has been refactored to be completely deterministic. A new algorithm for pseudo-random-number-generation was implemented, which makes old replays incompatible / they will have unpredictable results.

+

Additionally, the following functions have been added to FlxRandom:

+
    +
  • weightedPick()
  • +
  • weightedGetObject()
  • +
  • colorExt()
  • +
+

FlxSprite renamings

+

A noteworthy amount of fields inside of FlxSprite have been renamed to increase the consistency with other parts of the API:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 3.0.xHaxeFlixel 3.1.0
loadfromSprite()loadGraphicFromSprite()
setGraphicDimensions()setGraphicSize()
bakedRotationbakedRotationAngle
pixelsOverlapPoint()overlapsPoint()
loadImageFromTexture()loadGraphicFromTexture()
loadRotatedImageFromTexture()loadRotatedGraphicFromTexture()
setColorTransformation()setColorTransform()
+

Scale Modes

+

HaxeFlixel 3.1.0 introduces scale modes to simplify targeting multiple resolutions. FlxG.scaleMode can be an instance of the following classes:

+
    +
  • RatioScaleMode (default!)
  • +
  • FillScaleMode
  • +
  • FixedScaleMode
  • +
  • RelativeScaleMode
  • +
  • StageSizeScaleMode
  • +
+

This change made FlxG.autoResize obsolete and it has thus been removed.

+

You can also write a custom scale mode that extends BaseScaleMode.

+

Be sure to check out the ScaleModes demo.

+

FlxTypedGroup.sort()

+

The way FlxTypedGroup.sort() has been changed for a significant performance improvement. If you want to sort by y, you now have to use the following syntax:

+
group.sort(FlxSort.byY, FlxSort.ASCENDING);
+HAXE
+

Instead of:

+
group.sort("y", FlxSort.ASCENDING);
+// or
+group.sort();
+HAXE
+

If you want to sort by anything other than y, you'll have to write a custom sorting function, as can be seen in this example:

+
function sortByAlpha(Order:Int, Sprite1:FlxSprite, Sprite2:FlxSprite):Int
+{
+	return FlxSort.byValues(Order, Sprite1.alpha, Sprite2.alpha);
+}
+
+// usage on a FlxTypedGroup<FlxSprite>:
+group.sort(sortByAlpha);
+HAXE
+

Other breaking changes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 3.0HaxeFlixel 3.1
FlxTypedGroup.autoReviveMembersremoved
FlxG.gameFramerateFlxG.updateFramerate
FlxG.flashFramerateFlxG.drawFramerate
FlxG.gamepads.get()FlxG.gamepads.getByID()
FlxG.debugger.visualDebugFlxG.debugger.drawDebug
FlxG.pausedremoved (didn't have any functionality)
FlxArrayUtil.intToString()FlxStringUtil.toIntArray()
FlxArrayUtil.floatToString()FlxStringUtil.toFloatArray()
FlxMisc.openURL()FlxG.openURL()
FlxMiscremoved
FlxSoundUtilremoved (use a FlxTimer instead)
+

The classes from flixel.system.input have been moved to flixel.input.

+

FlxPoints in FlxObject and FlxSprite are now read-only / (default, null), which means you need to use .set() on them if you were previously creating new points. The following...

+
sprite.velocity = new FlxPoint(100, 50);
+HAXE
+

...becomes:

+
sprite.velocity.set(100, 50);
+HAXE
+

3.0.0

+

HaxeFlixel 3.0 is an evolution of the original Flixel API and while most of the API is very similar and quickly learnt, it requires some renames and modifications to update your code.

+

Major changes from version 2.10

+

We wanted to slim down up the core classes, which meant moving non-essential functionality into separate classes. We've also continued to focus on improving stability and adding features to the engine. Here's a quick overview of the biggest changes:

+ +
mySprite.animation.add(...);
+
+mySprite.animation.play(...);
+
+mySprite.animation.frameName = "String";
+
+mySprite.animation.frameIndex = Int;
+
+//inspect the advanced api features such as
+addByNames, addByStringIndicies, addByIndicies, addByPrefix, findSpriteFrame, randomFrame ...
+
+
+
    +
  • +

    Added new FlxKeyShortcuts class, which replaces FlxG.keys. FlxG.keys.pressed is no longer a function, it's now an object, ex: if( FlxG.keys.pressed.ANY ) {...}

    +
  • +
  • +

    Added new FlxSpriteGroup class, which allows an FlxGroup to behave like an FlxSprite. This is a powerful new construct that will simplify building UI controls.

    +
  • +
  • +

    FlxU is now gone, we've moved all its functionality to several utility classes that specific contain functionality, ex: FlxArrayUtil, FlxAngle, FlxMath, FlxRandom, FlxSpriteUtil, FlxVelocity, etc.

    +
  • +
  • +

    FlxSprite Filters are now in a separate FlxSpriteFilter utility class.

    +
  • +
+

Package Structure

+

HaxeFlixel no longer has an org package. Everything is now included as flixel.package.Class. For most cases you can just remove org. from your import statements.

+

This was a decision the core developers agreed upon, to make the package structure simpler and detach HaxeFlixel from old flash conventions.

+

FrontEnds and the FlxG refactor

+

Frontends in HaxeFlixel 3.x are a new structure to the core of Flixel and which tackles the often criticized bloated collection of static methods in FlxG.

+

Frontends are accessed in FlxG.frontend in a similar fashion to what Flixel devs are used to. Careful thought has been given to organise them into logical shortcuts. This way the api will be easier browse, remember and maintain.

+

For example in HaxeFlixel 2.x to add a FlxCamera you would use FlxG.addCamera(camera:FlxCamera);, this addCamera method has been moved into a camera frontend with all the other camera related shortcuts. +So the code in HaxeFlixel 3.x to add a FlxCamera is now FlxG.cameras.add(camera:FlxCamera).

+

The Flixel FrontEnds are as follows:

+
    +
  • FlxG.inputs
  • +
  • FlxG.console
  • +
  • FlxG.log
  • +
  • FlxG.bmpLog
  • +
  • FlxG.watch
  • +
  • FlxG.debugger
  • +
  • FlxG.vcr
  • +
  • FlxG.bitmap
  • +
  • FlxG.cameras
  • +
  • FlxG.plugins
  • +
  • FlxG.sound
  • +
+

More detail on the FrontEnds can be read on the FrontEnd docs page.

+

Core Assets

+

HaxeFlixel has system Assets for its debugger buttons, system sounds, etc. These assets were previously stored in every project in the assets/data folder. HaxeFlixel 3.x uses the OpenFL include.xml in core HaxeFlixel to omit the need to include them in every project.

+

So you do not need to have system assets anymore, everything in your project's ./assets/* folder should only be the assets you create.

+

New Debugger and Interactive Console

+

HaxeFlixel 3.x includes a powerful console and improved debugger. The new debugger system by default redirects the core trace() command to the log. Alternatively you can use FlxG.log.add() , FlxG.watch.add(), FlxG.log.warn and more.

+

New Flixel Command Line Tools

+

Our command line tools have been moved to an optional repository, so the old haxelib run flixel new command will not work. +Install the tools from haxelib just like flixel and run setup and follow the prompts:

+
haxelib install flixel-tools
+
+haxelib run flixel-tools setup
+
+

Now you can use the commands with just flixel, try the help command for more info.

+
flixel help
+
+//see the new template tool options with:
+flixel help template
+
+//Shorthand version to create a template with a custom name
+flixel tpl -n "CustomProject"
+
+

Automatic find and replace

+

A collection of most of the API name changes were collected for the flixel-tools command line tool. +You can see what it replaces here.

+

To run the find and replace the command is simple:

+
flixel convert
+
+

FlxG Changes

+

The main changes that developers will notice are as follows:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 2.xHaxeFlixel 3.x
FlxG.getLibraryName()FlxG.libraryName
FlxG.setDebuggerLayoutFlxG.debugger.setLayout
FlxG.logtrace()
FlxG.resetDebuggerLayoutFlxG.debugger.resetLayout
FlxG.visualDebugFlxG.debugger.visualDebug
FlxG.toggleKeysFlxG.debugger.toggleKeys
FlxG.DEBUGGER_STANDARDFlxDebugger.STANDARD
FlxG.DEBUGGER_MICROFlxDebugger.MICRO
FlxG.DEBUGGER_BIGFlxDebugger.BIG
FlxG.DEBUGGER_TOPFlxDebugger.TOP
FlxG.DEBUGGER_LEFTFlxDebugger.LEFT
FlxG.DEBUGGER_RIGHTFlxDebugger.RIGHT
FlxG.randomFlxRandom.float
FlxG.shuffleFlxArrayUtil.shuffle
FlxG.getRandomFlxArrayUtil.getRandom
FlxG.globalSeedFlxRandom.globalSeed
FlxG.tweenFlxTween.multiVar
FlxG.resetInputFlxG.inputs.reset
FlxG.REDFlxColor.RED
FlxG.GREENFlxColor.GREEN
FlxG.BLUEFlxColor.BLUE
FlxG.PINKFlxColor.PINK
FlxG.WHITEFlxColor.WHITE
FlxG.BLACKFlxColor.BLACK
FlxG.TRANSPARENTFlxColor.TRANSPARENT
FlxG.DEGFlxAngle.TO_DEG
FlxG.RADFlxAngle.TO_RAD
FlxG.flashGfxFlxSpriteUtil.flashGfx
FlxG.flashGfxSpriteFlxSpriteUtil.flashGfxSprite
FlxG.levelsReg.levels
FlxG.scoresReg.scores
FlxG.scoreReg.score
FlxG.savesReg.saves
FlxG.saveReg.save
FlxG.addCameraFlxG.cameras.add
FlxG.useBufferLockingFlxG.cameras.useBufferLocking
FlxG.lockCamerasFlxG.cameras.lock
FlxG.renderCamerasFlxG.cameras.render
FlxG.unlockCamerasFlxG.cameras.unlock
FlxG.removeCameraFlxG.cameras.remove
FlxG.resetCamerasFlxG.cameras.reset
FlxG.shakeFlxG.cameras.shake
FlxG.bgColorFlxG.cameras.bgColor
FlxG.warnFlxG.log.warn
FlxG.errorFlxG.log.error
FlxG.noticeFlxG.log.notice
FlxG.advancedLogFlxG.log.advanced
FlxG.clearLogFlxG.log.clear
FlxG.watchFlxG.watch.add
FlxG.unwatchFlxG.watch.remove
FlxG.playFlxG.sound.play
FlxG.playMusicFlxG.sound.playMusic
FlxG.loadSoundFlxG.sound.load
FlxG.addSoundFlxG.sound.add
FlxG.streamFlxG.sound.stream
FlxG.destroySoundsFlxG.sound.destroySounds
FlxG.updateSoundsFlxG.sound.updateSounds
FlxG.pauseSoundsFlxG.sound.pauseSounds
FlxG.resumeSoundsFlxG.sound.resumeSounds
FlxG.musicFlxG.sound.music
FlxG.soundsFlxG.sound.list
FlxG.muteFlxG.sound.muted
FlxG.volumeFlxG.sound.volume
FlxG.volumeHandlerFlxG.sound.volumeHandler
FlxG.keyVolumeUpFlxG.sound.keyVolumeUp
FlxG.keyVolumeDownFlxG.sound.keyVolumeDown
FlxG.keyMuteFlxG.sound.keyMute
FlxG.addPluginFlxG.plugins.add
FlxG.getPluginFlxG.plugins.get
FlxG.removePluginFlxG.plugins.remove
FlxG.removePluginTypeFlxG.plugins.removeType
FlxG.updatePluginsFlxG.plugins.update
FlxG.drawPluginsFlxG.plugins.draw
FlxG.pluginsFlxG.plugins.list
FlxG.loadReplayFlxG.vcr.loadReplay
FlxG.reloadReplayFlxG.vcr.reloadReplay
FlxG.stopReplayFlxG.vcr.stopReplay
FlxG.recordReplayFlxG.vcr.startRecording
FlxG.stopRecordingFlxG.vcr.stopRecording
FlxG.checkBitmapCacheFlxG.bitmap.checkCache
FlxG.createBitmapFlxG.bitmap.create
FlxG.addBitmapFlxG.bitmap.add
FlxG.removeBitmapFlxG.bitmap.remove
FlxG.getCacheKeyForFlxG.bitmap.getCacheKeyFor
FlxG.getUniqueBitmapKeyFlxG.bitmap.getUniqueKey
FlxG.clearBitmapCacheFlxG.bitmap.clearCache
FlxG.clearAssetsCacheFlxG.bitmap.clearAssetsCache
+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/upgrade-guide-4-0-0/index.html b/documentation/upgrade-guide-4-0-0/index.html new file mode 100644 index 000000000..15ebf8e07 --- /dev/null +++ b/documentation/upgrade-guide-4-0-0/index.html @@ -0,0 +1,1791 @@ + + + + + + + + + + + Upgrade Guide 4.0.0 | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Upgrade Guide 4.0.0

+ +

4.4.0

+

Breaking changes in 4.4.0 are limited to usage with OpenFL 8. OpenFL 3.6.1 (Legacy or Next) is still fully supported. The breaking changes when upgrading to OpenFL 8.0.0 and Lime 6.3.0 are as follows:

+
    +
  • There is no support for blend modes (FlxSprite.blend). This is because drawQuads() (the rendering API replacing drawTiles() in OpenFL 8), doesn't support them. In some cases, blend modes may be emulated using shaders. An example of this can be seen in our BlendModeShaders demo.
  • +
  • Like already the case in OpenFL 3.6.1 + Next, the flixel.effects.postprocess API is not supported in OpenFL 8. As a replacement, a shader filter can be applied to the FlxGame instance or a FlxCamera as shown in the Filters demo.
  • +
  • OpenFL 3.6.1 with -Dnext had support for per-sprite, per-camera or game-wide GLSL shaders. All of these are still fully supported, but the syntax has changed a bit.
  • +
+

Here's a simple example of a shader found in FlxBunnyMark:

+

With OpenFL 3.6.1 + Next:

+
import openfl.display.Shader;
+
+class Invert extends Shader
+{
+	@fragment var fragment = '
+		void main()
+		{
+			vec4 color = texture2D(${Shader.uSampler}, ${Shader.vTexCoord});
+			gl_FragColor = vec4((1.0 - color.r) * color.a, (1.0 - color.g) * color.a, (1.0 - color.b) * color.a, color.a);
+		}';
+	
+	public function new()
+	{
+		super();
+	}
+}
+HAXE
+

With OpenFL 8:

+
import flixel.system.FlxAssets.FlxShader;
+
+class Invert extends FlxShader
+{
+	@:glFragmentSource('
+		#pragma header
+
+		void main()
+		{
+			vec4 color = flixel_texture2D(bitmap, openfl_TextureCoordv);
+			gl_FragColor = vec4((1.0 - color.r) * color.a, (1.0 - color.g) * color.a, (1.0 - color.b) * color.a,   color.a);
+		}'
+	)
+	
+	public function new()
+	{
+		super();
+	}
+}
+HAXE
+

To summarize the differences, shaders should...

+
    +
  • extend flixel.system.FlxAssets.FlxShader instead of openfl.display.Shader
  • +
  • use @:glFragmentSource() metadata for the shader source rather than a @fragment var
  • +
  • have #pragma header before main()
  • +
+

Attributes have changed as follows:

+ + + + + + + + + + + + + + + + + + + + + +
With OpenFL 3.6.1 + NextWith OpenFL 8
${Shader.uSampler}bitmap
${Shader.vTexCoord}openfl_TextureCoordv
${Shader.uTextureSize}openfl_TextureSize
+

You may also have noticed that in the invert shader example, texture2D() has been replaced with flixel_texture2D(). The former still works, but when using flixel_texture2D() in per-sprite shaders, the alpha and color transforms of a FlxSprite are already applied on the returned color, which was previously not supported. The effect of this can be seen when activating shaders as well as toggling "Simple" to "Complex" in FlxBunnyMark:

+ + + + + + + + + + + + + +
With OpenFL 3.6.1 + NextWith OpenFL 8
+

Further shader examples can be found in these demos, which are all compatible with both OpenFL 3.6.1 + Next and OpenFL 8:

+ +

4.2.0

+
    +
  • FlxTween.manager is now FlxTween.globalManager.
  • +
  • FlxTimer.manager is now FlxTimer.globalManager.
  • +
  • FlxCamera's scroll bounds now account for zoom. This means that you may need to adjust calls to setScrollBounds(), setScrollBoundsRect() or changes to the minScrollX / Y / maxScrollX / Y properties if they manually accounted for zoom.
  • +
  • The active variable of objects in flixel.util.helpers now defaults to true instead of false.
  • +
+

4.0.0

+

This guide is intended for users upgrading projects from version 3.3.x to 4.0.0. For non-breaking changes, please refer to the changelog.

+

The minimum required Haxe version for this release is 3.2.0.

+

A lot of changes can be handled with a simple find-and-replace in the editor of your choice.

+

elapsed argument added to update()

+

The function signature of update() changed to update(elapsed:Float). FlxG.elapsed is still available, but it is recommended to use the argument value instead.

+ + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 3.3.xHaxeFlixel 4.0.0
override public function update():Voidoverride public function update(elapsed:Float):Void
super.update();super.update(elapsed);
x += 100 * FlxG.elapsed;x += 100 * elapsed;
+

Introduction of flixel.math

+

A new flixel.math package was added. A number of flixel.util classes have been moved there:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 3.3.xHaxeFlixel 4.0.0
import flixel.util.FlxMathimport flixel.math.FlxMath
import flixel.util.FlxPointimport flixel.math.FlxPoint
import flixel.util.FlxVectorimport flixel.math.FlxVector
import flixel.util.FlxRectimport flixel.math.FlxRect
import flixel.util.FlxAngleimport flixel.math.FlxAngle
import flixel.util.FlxVelocityimport flixel.math.FlxVelocity
import flixel.util.FlxRandomimport flixel.math.FlxRandom
+

Move of "typed" classes:

+

Typed classes have been moved into the modules of the non-typed versions:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 3.3.xHaxeFlixel 4.0.0
import flixel.group.FlxTypedGroupimport flixel.group.FlxGroup
import flixel.group.FlxTypedSpriteGroupimport flixel.group.FlxSpriteGroup
import flixel.effects.particles.FlxTypedEmitterimport flixel.effects.particles.FlxEmitter
import flixel.ui.FlxTypedButtonimport flixel.ui.FlxButton
+

Changed integer constants to enums:

+

ActionScript 3 does not have enums, which is why a lot of these "value sets" were implemented using integer constants. For improved type-safety and to better fit the Haxe coding style, they have been converted to enums:

+

As long as it's not ambiguous, Haxe allows using just the enum value name without the enum's name. In the first case, the enum also does not need to be imported. For example, this means that both of these syntaxes are valid:

+
FlxG.camera.follow(LOCKON);
+FlxG.camera.follow(FlxCameraFollowStyle.LOCKON);
+HAXE
+

Which of these two styles is used is mostly a matter of personal preference.

+

FlxCamera shake modes:

+ + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 3.3.xHaxeFlixel 4.0.0
FlxCamera.SHAKE_BOTH_AXESflixel.util.FlxAxes.XY
FlxCamera.SHAKE_HORIZONTAL_ONLYflixel.util.FlxAxes.X
FlxCamera.SHAKE_VERTICAL_ONLYflixel.util.FlxAxes.Y
+

FlxCamera follow styles:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 3.3.xHaxeFlixel 4.0.0
FlxCamera.STYLE_LOCKONFlxCameraFollowStyle.LOCKON
FlxCamera.STYLE_NO_DEAD_ZONEFlxCameraFollowStyle.NO_DEAD_ZONE
FlxCamera.STYLE_PLATFORMERFlxCameraFollowStyle.PLATFORMER
FlxCamera.STYLE_SCREEN_BY_SCREENFlxCameraFollowStyle.SCREEN_BY_SCREEN
FlxCamera.STYLE_TOPDOWNFlxCameraFollowStyle.TOPDOWN
FlxCamera.STYLE_TOPDOWN_TIGHTFlxCameraFollowStyle.TOPDOWN_TIGHT
+

FlxText border styles:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 3.3.xHaxeFlixel 4.0.0
FlxText.BORDER_NONEFlxTextBorderStyle.NONE
FlxText.BORDER_OUTLINEFlxTextBorderStyle.OUTLINE
FlxText.BORDER_OUTLINE_FASTFlxTextBorderStyle.OUTLINE_FAST
FlxText.BORDER_SHADOWFlxTextBorderStyle.SHADOW
+

FlxTilemap auto-tiling options:

+ + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 3.3.xHaxeFlixel 4.0.0
FlxTilemap.ALTFlxTilemapAutoTiling.ALT
FlxTilemap.AUTOFlxTilemapAutoTiling.AUTO
FlxTilemap.OFFFlxTilemapAutoTiling.OFF
+

FlxBar fill directions:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 3.3.xHaxeFlixel 4.0.0
FlxBar.FILL_BOTTOM_TO_TOPFlxBarFillDirection.BOTTOM_TO_TOP
FlxBar.FILL_HORIZONTAL_INSIDE_OUTFlxBarFillDirection.HORIZONTAL_INSIDE_OUT
FlxBar.FILL_HORIZONTAL_OUTSIDE_INFlxBarFillDirection.HORIZONTAL_OUTSIDE_IN
FlxBar.FILL_LEFT_TO_RIGHTFlxBarFillDirection.LEFT_TO_RIGHT
FlxBar.FILL_RIGHT_TO_LEFTFlxBarFillDirection.RIGHT_TO_LEFT
FlxBar.FILL_TOP_TO_BOTTOMFlxBarFillDirection.TOP_TO_BOTTOM
FlxBar.FILL_VERTICAL_INSIDE_OUTFlxBarFillDirection.VERTICAL_INSIDE_OUT
FlxBar.FILL_VERTICAL_OUTSIDE_INFlxBarFillDirection.VERTICAL_OUTSIDE_IN
+

FlxG.html5 browser types:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 3.3.xHaxeFlixel 4.0.0
HTML5FrontEnd.INTERNET_EXPLORERFlxBrowser.INTERNET_EXPLORER
HTML5FrontEnd.CHROMEFlxBrowser.CHROME
HTML5FrontEnd.FIREFOXFlxBrowser.FIREFOX
HTML5FrontEnd.SAFARIFlxBrowser.SAFARI
HTML5FrontEnd.OPERAFlxBrowser.OPERA
+

Changed String constants to abstract enums:

+

Some static String constants have been changed to abstract enums. This is not a breaking changes, since the old String values are still compatible, but for the sake of type safety it is recommended to use the enum values instead:

+

As with regular enums, the enum name may be omitted.

+

FlxText alignment:

+ + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 3.3.xHaxeFlixel 4.0.0
text.alignment = "left";text.alignment = FlxTextAlign.LEFT;
text.alignment = "center";text.alignment = FlxTextAlign.CENTER;
text.alignment = "right";text.alignment = FlxTextAlign.RIGHT;
+

FlxG.keys keys:

+ + + + + + + + + + + + + + + + + +
HaxeFlixel 3.3.xHaxeFlixel 4.0.0
FlxG.keys.anyPressed(["SPACE", "W"])FlxG.keys.anyPressed([FlxKey.SPACE, FlxKey.W])
FlxG.keys.anyPressed(["SPACE", "W"])FlxG.keys.anyPressed([SPACE, W])
+

FlxSprite:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 3.3.xHaxeFlixel 4.0.0
getScreenXY()getScreenPosition()
cachedGraphicsgraphic
resetFrameBitmaps()removed (set dirty to true to regen graphic)
getFlxFrameBitmapData()updateFramePixels()
loadGraphicFromTexture()removed (assign a frames collection to frames)
loadRotatedGraphicFromTexture()removed (assign a frames collection to frames)
+

FlxCamera:

+ + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 3.3.xHaxeFlixel 4.0.0
boundsminScrollX, minScrollY, maxScrollX and maxScrollY
setBounds()setScrollBoundsRect()
follow()'s Offset argumentremoved
+

FlxTilemap:

+

loadMap() has been split up into loadMapFromArray() and loadMapFromCSV().

+

FlxGroup:

+

callAll() and setAll() have been removed - use forEach() instead:

+
// 3.3.x
+group.setAll("scrollFactor", FlxPoint.get(0, 0));
+group.callAll("kill");
+HAXE
+
// 4.0.0
+group.forEach(function(basic:FlxBasic)
+{
+	basic.scrollFactor.set(0, 0);
+	basic.kill();
+});
+HAXE
+

flixel.input.gamepad:

+

The hardware IDs of the different controller types are now mapped to a common FlxGamepadInputID. This avoids the need of having to handle multiple controller types - this now happens automatically under the hood.

+
// 3.3.x
+if (gamepad.pressed(XboxButtonID.A) ||
+	gamepad.pressed(OUYAButtonID.O) ||
+	gamepad.pressed(LogitechButtonID.TWO)) {} 
+HAXE
+
// 4.0.0
+if (gamepad.anyPressed([FlxGamepadInputID.A])) {}
+// or
+if (gamepad.pressed.A) {}
+HAXE
+

It is still possible to use the IDs from the flixel.input.gamepad.id classes via the functions with the Raw suffix.

+

Because of the poor driver support, the PS3 ID class / support for PS3 controllers have been removed.

+

FlxTimer:

+

Timers cannot be started right at construction anymore, instead you need to call start():

+
// 3.3.x
+new FlxTimer(time, onComplete, loops);
+HAXE
+
// 4.0.0
+new FlxTimer().start(time, onComplete, loops);
+HAXE
+

FlxPath:

+

FlxPath#start() no longer takes a FlxObject argument, instead, FlxObject now has a path property. This means FlxObject takes care of updating the path, taking care of the issue that paths are not paused along with the objects they work on in substates.

+
// 3.3.x
+var path = new FlxPath().start(object, points);
+HAXE
+
// 4.0.0
+object.path = new FlxPath().start(points);
+HAXE
+

FlxColor / FlxColorUtil refactor:

+

FlxColor is now an abstract, which means it can be used like an object, while the underlying type is still a regular Int. The static FlxColorUtil functions can now be used as member methods or properties:

+
// 3.3.x
+var color:Int = 0x008080;
+trace(FlxColorUtil.getGreen(color));
+HAXE
+
// 4.0.0
+var color:FlxColor = 0x008080;
+trace(color.green);
+HAXE
+

The amount of colors presets (FlxColor.RED etc..) has been reduced.

+

FlxEmitter refactor:

+

FlxEmitterExt has been merged into FlxEmitter. For circular emitters, FlxEmitterMode.CIRCLE can be used.

+

Most properties are now FlxRangeBounds objects which have a min and a max FlxRange object.

+

The separate color component Bounds have been merged into a FlxRangeBounds<FlxColor>.

+ + + + + + + + + + + + + + + + + +
HaxeFlixel 3.3.xHaxeFlixel 4.0.0
at()focusOn()
onemitting
+

FlxParticle changes:

+

Most properties are now FlxRange objects which have a start and an end value (for example velocityRange).

+ + + + + + + + + + + + + + + + + +
HaxeFlixel 3.3.xHaxeFlixel 4.0.0
maxLifespanlifespan
lifespanage (counts up instead of down)
+

FlxRandom refactor:

+

FlxRandom can now be instantiated and the static functions are now member methods. A pre-created instance is available via FlxG.random.

+

Some methods have also been renamed or removed:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 3.3.xHaxeFlixel 4.0.0
FlxRandom.intRanged(min, max)FlxG.random.int(min, max)
FlxRandom.floatRanged(min, max)FlxG.random.float(min, max)
FlxRandom.chanceRoll(chance)FlxG.random.bool(chance)
FlxRandom.weightedGetObject()removed (getObject() now has a range argument)
FlxRandom.colorExt()removed
+

FlxAngle changes:

+ + + + + + + + + + + + + + + + + +
HaxeFlixel 3.3.xHaxeFlixel 4.0.0
FlxAngle.getAngle(point1, point2)point1.angleBetween(point2)
FlxAngle.angleLimit()removed (use FlxMath.bound() instead)
+

There have been several changes to FlxAngle.rotatePoint():

+
    +
  • the y-axis is no longer inverted
  • +
  • rotation is now clockwise
  • +
  • moved to FlxPoint (rotate())
  • +
+
// 3.3.x
+var angle = 45;
+var point = FlxPoint.get(10, 5);
+FlxAngle.rotatePoint(x, y, pivotX, pivotY, angle, point);
+HAXE
+
// 4.0.0
+var angle = 45;
+var point = FlxPoint.get(10 + x, 5 + y);
+var pivot = FlxPoint.weak(pivotX, pivotY);
+point.rotate(pivot, angle);
+HAXE
+

FlxMath changes:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 3.3.xHaxeFlixel 4.0.0
newAmount = FlxMath.wrapValue(value, amount, max + 1)newAmount = FlxMath.wrapValue(value + amount, min, max)
FlxMath.getDistance(point1, point2)point1.distanceTo(point2)
FlxMath.MIN_VALUEFlxMath.MIN_VALUE_FLOAT
FlxMath.MAX_VALUEFlxMath.MAX_VALUE_FLOAT
+

Other:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HaxeFlixel 3.3.xHaxeFlixel 4.0.0
import flixel.text.FlxTextFieldimport flixel.addons.text.FlxTextField
FlxPoint#inFlxRect()FlxPoint#inRect()
FlxRect#containsFlxPoint()FlxRect#containsPoint()
flixel.plugin.MouseEventManagerflixel.input.mouse.FlxMouseEventManager
flixel.util.loaders.CachedGraphicsflixel.graphics.FlxGraphic
FlxArrayUtil.getRandom()FlxG.random.getObject()
+

FlxVelocity's accelerateTowards*()-functions now only take a single maxSpeed argument (instead of x and y).

+

The complete option of FlxTween is now called onComplete.

+

flixel-addons

+

Not all flixel-addons changes are covered here. Please check the changelog for the rest.

+

FlxNapeState refactor:

+

FlxNapeState is now FlxNapeSpace and no longer extends FlxState. This makes it possible to use the flixel.addons.nape package along with other FlxState subclasses (for example FlxUIState).

+
// flixel-addons 1.x.x
+import flixel.addons.nape.FlxNapeState;
+
+class PlayState extends FlxNapeState
+{
+	override public function create():Void
+	{
+		super.create();
+	}
+}
+HAXE
+
// flixel-addons 2.0.0
+import flixel.FlxState;
+import flixel.addons.nape.FlxNapeSpace;
+
+class PlayState extends FlxState
+{
+	override public function create():Void
+	{
+		super.create();
+		FlxNapeSpace.init();
+	}
+}
+HAXE
+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/using-haxelib/index.html b/documentation/using-haxelib/index.html new file mode 100644 index 000000000..c4f2d7dad --- /dev/null +++ b/documentation/using-haxelib/index.html @@ -0,0 +1,1065 @@ + + + + + + + + + + + Using Haxelib | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Using Haxelib

+ +

Haxelib is a package manager and utility that comes with your Haxe install. Here are the most used commands, the full usage docs are available here.

+

Installing a Library

+

Install a Haxelib library from lib.haxe.org:

+
haxelib install <library>
+
+

Install a Haxelib library from Git:

+
haxelib git <library> <url> <branch>
+
+

Note: haxelib git enables the development directory for that library, which silently prevents haxelib set from working. Use haxelib dev <library> to disable it.

+

Update your Haxelib libraries, including the ones from Git:

+
haxelib upgrade
+
+

Change to different version of a library:

+
haxelib set <library> <version>
+
+

Remove a library:

+
haxelib remove <library>
+
+

Using An Installed Library

+

To use a library in your HaxeFlixel project, add it to your project.xml:

+
<haxelib name="<library>" />
+XML
+

Updating Haxelib itself

+

To make sure you are using the latest version of Haxelib you can run the selfupdate command.

+
haxelib selfupdate
+
+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/visual-studio-code/index.html b/documentation/visual-studio-code/index.html new file mode 100644 index 000000000..49d2b8474 --- /dev/null +++ b/documentation/visual-studio-code/index.html @@ -0,0 +1,1120 @@ + + + + + + + + + + + Visual Studio Code | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Visual Studio Code

+ +

+

Visual Studio Code is an open-source, cross-platform, lightweight code editor by Microsoft. The Haxe extension seamlessly integrates with the compiler's IDE services and uses them for:

+
    +
  • Code Completion
  • +
  • Go to Definition
  • +
  • Go to Symbol
  • +
  • Find Usages
  • +
  • Finding Unused Imports
  • +
  • etc...
  • +
+

You can find detailed documentation for the Haxe extension in the Wiki, this page focuses on the Flixel-specific parts.

+

Installation

+
    +
  • +

    Download and install the latest version of Visual Studio Code.

    +
  • +
  • +

    Go to the Extensions tab and install the Lime extension. This automatically installs the Haxe extension as well.

    +

    +
  • +
+

Project Configuration

+

VSCode stores its project-specific settings in a .vscode subfolder - flixel-tools can create one with sensible defaults for Flixel projects. Just select VSCode as your preferred editor during the setup command, or add -ide vscode to the command you're running.

+

Note: make sure you have the latest versions of flixel-tools and flixel-templates:

+
haxelib update flixel-tools
+haxelib update flixel-templates
+
+

You have several options for creating projects with a .vscode configuration:

+
    +
  1. +

    Create a new, empty project:

    +
    flixel template -n "VSCodeTest" -ide vscode
    +
    +
  2. +
  3. +

    Create a new project based on one of the demos:

    +
    flixel create -ide vscode
    +
    +
  4. +
  5. +

    Add the .vscode folder to a project that already exists, for instance the current working directory:

    +
    flixel configure . -ide vscode
    +
    +
  6. +
  7. +

    Add VSCode config files to an entire directory of projects, like flixel-demos:

    +
    flixel configure C:\HaxeToolkit\haxe\lib\flixel-demos\git -ide vscode
    +
    +
  8. +
+

Code Completion

+

Once you've installed the Lime extension and have a project with a .vscode folder, just open it with File -> Open Folder. If the workspace was correctly detected as a Lime project (needs a Project.xml file), you should notice these dropdown menus appearing in the status bar:

+

+

Code completion features should work out of the box now:

+

+

If you're having trouble, please refer to the Haxe extension's Troubleshooting guide.

+

Building

+

Building and running your projects in VSCode is done through tasks. You can view the list of available tasks via Tasks -> Run Task...:

+

+

To build and run your project, select the lime: test task. With Flixel's template, this is configured as the default build task, so you can also invoke it directly via Tasks -> Run Build Task... or by pressing Ctrl+Shift+B:

+

+

You may want to assign a shortcut to Run Task... or change the shortcut for Run Build Task... to something more convenient such as F5. You can do so in File -> Preferences -> Keyboard Shortcuts.

+

Finally, you can change the current configuration (combination of target and Debug/Release/Final) by using the dropdown menu in the status bar:

+

+

Compiler Errors / Problems View

+

By default, compiler errors and warnings are shown in the Terminal view at the bottom of the screen. You can navigate to the source of the error via Ctrl+Click on the file path:

+

+

Alternatively, you can switch to the Problems tab which has a nicer presentation. It shows errors / warnings from compilation as well as diagnostics that are updated each time you save a file:

+

+

Debugging

+

The .vscode template from flixel-tools already includes the launch.json needed for debugging. The Lime "Build + Debug" / "Debug" launch configurations support debugging with the following targets / extensions:

+ +

Simply "Start Debugging" with the "Build + Debug" launch configuration (make sure the "Debug" configuration for the target you want to debug is selected in the status bar). This first builds the project and then starts the debugger.

+

+

Here's what it should look like when you hit a breakpoint:

+ +

There is also a Macro launch configuration for debugging Haxe Macros.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/website-docs/index.html b/documentation/website-docs/index.html new file mode 100644 index 000000000..d616cc15a --- /dev/null +++ b/documentation/website-docs/index.html @@ -0,0 +1,1052 @@ + + + + + + + + + + + HaxeFlixel Website | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

HaxeFlixel Website

+ +

This website is built using 11ty static site generator which compiles the files to a static site on a community sponsored host. +Extensions and help with improving the website and our documentation are greatly appreciated.

+

Our Documentation

+

These documentation pages are an open-source project for the community to improve and extend. Notice the Edit button in the top right hand corner of every page. +This will link you right to the GitHub page of the documentation where you can fork and edit the pages right in the GitHub editor. +Anyone of the HaxeFlixel team can merge pull requests and changes will be uploaded to our host.

+

Everything is written in the GitHub flavoured markdown format. You can see the files written in markdown from the extension *.md.

+ +

You can see a guide for the markdown syntax here.

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/where-to-now/index.html b/documentation/where-to-now/index.html new file mode 100644 index 000000000..119ea3022 --- /dev/null +++ b/documentation/where-to-now/index.html @@ -0,0 +1,1044 @@ + + + + + + + + + + + Where to now? | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Where to now?

+ +

If you have successfully compiled a Hello World sample, there are multiple places to jump to from here:

+
    +
  • Follow our step-by-step tutorial to learn how to make a simple turn based RPG.
  • +
  • Check out our large collection of demos to learn by example. Try improving a game and pulling one apart to see how it works!
  • +
  • Read about different aspects of Flixel in our handbook.
  • +
  • Browse our API documentation.
  • +
+

Also be sure to get in touch with the community if you have any questions along the way!

+

Furthermore, this documentation and website are open source and we welcome additions from users like you. :)

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/why-haxe/index.html b/documentation/why-haxe/index.html new file mode 100644 index 000000000..f70a65f9f --- /dev/null +++ b/documentation/why-haxe/index.html @@ -0,0 +1,1054 @@ + + + + + + + + + + + Why a Haxe Version | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

Why a Haxe Version

+ +

The original ActionScript 3 version of Flixel has proven to be an effective codebase to make 2D games quickly and easily for the Adobe Flash and AIR runtimes. Haxe and the Open Flash Library provide significant enhancements and opportunities that ActionScript 3, AIR and Flash are limited by. Haxe and the OpenFL offers more efficient and open source native runtimes to your code base that ActionScript 3 and Adobe Flash/Air are not able to provide. HaxeFlixel still retains the same Flash Player target, but you gain a familiar, yet superior open source language Haxe.

+

Use of a superior open source, cross-compiled language

+

Haxe as a toolkit and language provides features today that ActionScript developers have been seeking for years (ActionScript 4, cancelled code name "Next" compiler). The language ActionScript 3, although proven to be effective and easy to learn, can be a barrier itself.

+

The Haxe language offers a familiar syntax whilst being able to cross-compile to different target languages such as native C++, Neko, HTML5, PHP, Java and more. For example OpenFL is letting you target Linux natively where Adobe has discontinued their AIR support some time ago.

+

Haxe still lets you target Flash and AIR runtimes, whilst also opening the doors to much more. You gain the benefits of a superior language and open source runtime. For example, C++ works with OpenFL and LibSDL, which would not be possible with Adobe's workflow. HaxeFlixel is far from the only ActionScript library being ported to Haxe. HaxePunk and other projects can be found on GitHub and haxelib.

+

Native Targets are not a Virtual Machine

+

Haxe is a cross-compiled language which is unlike solutions such as Adobe Air that use a virtual machine to run on different platforms. When you compile your Haxe code to a native target, it is translated into the native language itself, such as C++. Native code running on your target runtime does not share the same overheads in performance that a virtual machine has, so your code is often much faster in comparison. HaxeFlixel also takes advantage of OpenFL's use of GPU accelerated rendering through their drawTiles api.

+

Open Source Extendible Framework

+

By using the Haxe Toolkit and OpenFL, advanced developers can extend and modify anything in the toolchain right down from the compiler and the native runtime code such as HXCPP and SDL. The developers and the community behind these tools have shown a constant improvement to the projects over many years. History has shown commercial solutions do not always prioritize developer requests, and even advanced developers can't just fix their issues or bugs they find themselves.

+

The source code for everything in the toolchain is available on GitHub:

+ + + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/documentation/zoom-and-cameras/index.html b/documentation/zoom-and-cameras/index.html new file mode 100644 index 000000000..daf1b37aa --- /dev/null +++ b/documentation/zoom-and-cameras/index.html @@ -0,0 +1,1060 @@ + + + + + + + + + + + 7 - Zoom and Cameras | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+
+
+
+
Documentation
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+

7 - Zoom and Cameras

+ +

When you run your game now, you'll notice that everything is really, really small. We're going to make it more visible by applying some zoom to our game so that we can get a better look at the action. This is a pretty quick change:

+
    +
  1. +

    Open the Main.hx file. This class initializes your game, and there are a few things here that you could play with, if you want. We just need to change a couple of the arguments.

    +
  2. +
  3. +

    Change the width and height arguments of new FlxGame() to 320 and 240 (half of their original values).

    +
  4. +
  5. +

    If you ran the game right now, everything would be zoomed in, but the player would run off the screen pretty quick - we need to tell the camera to follow the player around. So, open the PlayState again.

    +
  6. +
  7. +

    In the create function, after you add the player and before super.create(), add:

    +
    FlxG.camera.follow(player, TOPDOWN, 1);
    +HAXE
    +

    This simply tells the camera to follow the player using the TOPDOWN style, with a lerp of 1 (which helps the camera move a little more smoother).

    +
  8. +
+

That's it! Test out the game and see how it looks!

+

+

Next, let's give the player something to pickup around the map!

+ + +
+
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + diff --git a/finances/HaxeFlixel Balance Sheet 2015-06-01.csv b/finances/HaxeFlixel Balance Sheet 2015-06-01.csv new file mode 100644 index 000000000..451683c5a --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2015-06-01.csv @@ -0,0 +1,16 @@ +account,balance +Asset, +Bank, +Patreon,90.59 +Total for Bank,90.59 +Total Assets,90.59 +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,0.00 +Current Year Earnings,90.59 +Total equity,90.59 +, +Total Liabilities and Equity,90.59 diff --git a/finances/HaxeFlixel Balance Sheet 2015-07-01.csv b/finances/HaxeFlixel Balance Sheet 2015-07-01.csv new file mode 100644 index 000000000..b9a4aee2c --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2015-07-01.csv @@ -0,0 +1,16 @@ +account,balance +Asset, +Bank, +Patreon,182.17 +Total for Bank,182.17 +Total Assets,182.17 +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,0.00 +Current Year Earnings,182.17 +Total equity,182.17 +, +Total Liabilities and Equity,182.17 diff --git a/finances/HaxeFlixel Balance Sheet 2015-08-01.csv b/finances/HaxeFlixel Balance Sheet 2015-08-01.csv new file mode 100644 index 000000000..439a8f9c9 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2015-08-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,119.81 +Treasurer,0.00 +Total for Bank,119.81 +Total Assets,119.81 +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,0.00 +Current Year Earnings,119.81 +Total equity,119.81 +, +Total Liabilities and Equity,119.81 diff --git a/finances/HaxeFlixel Balance Sheet 2015-09-01.csv b/finances/HaxeFlixel Balance Sheet 2015-09-01.csv new file mode 100644 index 000000000..7d8c06182 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2015-09-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,205.63 +Treasurer,0.00 +Total for Bank,205.63 +Total Assets,205.63 +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,0.00 +Current Year Earnings,205.63 +Total equity,205.63 +, +Total Liabilities and Equity,205.63 diff --git a/finances/HaxeFlixel Balance Sheet 2015-10-01.csv b/finances/HaxeFlixel Balance Sheet 2015-10-01.csv new file mode 100644 index 000000000..d4813cbbd --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2015-10-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,296.33 +Treasurer,0.00 +Total for Bank,296.33 +Total Assets,296.33 +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,0.00 +Current Year Earnings,296.33 +Total equity,296.33 +, +Total Liabilities and Equity,296.33 diff --git a/finances/HaxeFlixel Balance Sheet 2015-11-01.csv b/finances/HaxeFlixel Balance Sheet 2015-11-01.csv new file mode 100644 index 000000000..653772eac --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2015-11-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,402.71 +Treasurer,0.00 +Total for Bank,402.71 +Total Assets,402.71 +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,0.00 +Current Year Earnings,402.71 +Total equity,402.71 +, +Total Liabilities and Equity,402.71 diff --git a/finances/HaxeFlixel Balance Sheet 2015-12-01.csv b/finances/HaxeFlixel Balance Sheet 2015-12-01.csv new file mode 100644 index 000000000..037016c01 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2015-12-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,515.38 +Treasurer,0.00 +Total for Bank,515.38 +Total Assets,515.38 +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,0.00 +Current Year Earnings,515.38 +Total equity,515.38 +, +Total Liabilities and Equity,515.38 diff --git a/finances/HaxeFlixel Balance Sheet 2016-01-01.csv b/finances/HaxeFlixel Balance Sheet 2016-01-01.csv new file mode 100644 index 000000000..6177945e3 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2016-01-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,632.72 +Treasurer,0.00 +Total for Bank,632.72 +Total Assets,632.72 +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,515.38 +Current Year Earnings,117.34 +Total equity,632.72 +, +Total Liabilities and Equity,632.72 diff --git a/finances/HaxeFlixel Balance Sheet 2016-02-01.csv b/finances/HaxeFlixel Balance Sheet 2016-02-01.csv new file mode 100644 index 000000000..f116d3859 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2016-02-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,117.81 +Treasurer,374.42 +Total for Bank,492.23 +Total Assets,492.23 +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,515.38 +Current Year Earnings,(23.15) +Total equity,492.23 +, +Total Liabilities and Equity,492.23 diff --git a/finances/HaxeFlixel Balance Sheet 2016-03-01.csv b/finances/HaxeFlixel Balance Sheet 2016-03-01.csv new file mode 100644 index 000000000..92c4fdc51 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2016-03-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,244.43 +Treasurer,374.42 +Total for Bank,618.85 +Total Assets,618.85 +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,515.38 +Current Year Earnings,103.47 +Total equity,618.85 +, +Total Liabilities and Equity,618.85 diff --git a/finances/HaxeFlixel Balance Sheet 2016-04-01.csv b/finances/HaxeFlixel Balance Sheet 2016-04-01.csv new file mode 100644 index 000000000..362036526 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2016-04-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,380.88 +Treasurer,223.67 +Total for Bank,604.55 +Total Assets,604.55 +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,515.38 +Current Year Earnings,89.17 +Total equity,604.55 +, +Total Liabilities and Equity,604.55 diff --git a/finances/HaxeFlixel Balance Sheet 2016-05-01.csv b/finances/HaxeFlixel Balance Sheet 2016-05-01.csv new file mode 100644 index 000000000..098e76638 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2016-05-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,526.95 +Treasurer,223.67 +Total for Bank,750.62 +Total Assets,750.62 +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,515.38 +Current Year Earnings,235.24 +Total equity,750.62 +, +Total Liabilities and Equity,750.62 diff --git a/finances/HaxeFlixel Balance Sheet 2016-06-01.csv b/finances/HaxeFlixel Balance Sheet 2016-06-01.csv new file mode 100644 index 000000000..9d02fd670 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2016-06-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,663.94 +Treasurer,346.75 +Total for Bank,"1,010.69" +Total Assets,"1,010.69" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,515.38 +Current Year Earnings,495.31 +Total equity,"1,010.69" +, +Total Liabilities and Equity,"1,010.69" diff --git a/finances/HaxeFlixel Balance Sheet 2016-07-01.csv b/finances/HaxeFlixel Balance Sheet 2016-07-01.csv new file mode 100644 index 000000000..17c205485 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2016-07-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,811.96 +Treasurer,358.48 +Total for Bank,"1,170.44" +Total Assets,"1,170.44" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,515.38 +Current Year Earnings,655.06 +Total equity,"1,170.44" +, +Total Liabilities and Equity,"1,170.44" diff --git a/finances/HaxeFlixel Balance Sheet 2016-08-01.csv b/finances/HaxeFlixel Balance Sheet 2016-08-01.csv new file mode 100644 index 000000000..aab8be026 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2016-08-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,980.85 +Treasurer,358.48 +Total for Bank,"1,339.33" +Total Assets,"1,339.33" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,515.38 +Current Year Earnings,823.95 +Total equity,"1,339.33" +, +Total Liabilities and Equity,"1,339.33" diff --git a/finances/HaxeFlixel Balance Sheet 2016-09-01.csv b/finances/HaxeFlixel Balance Sheet 2016-09-01.csv new file mode 100644 index 000000000..2461f5ab8 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2016-09-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,"1,138.37" +Treasurer,370.17 +Total for Bank,"1,508.54" +Total Assets,"1,508.54" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,515.38 +Current Year Earnings,993.16 +Total equity,"1,508.54" +, +Total Liabilities and Equity,"1,508.54" diff --git a/finances/HaxeFlixel Balance Sheet 2016-10-01.csv b/finances/HaxeFlixel Balance Sheet 2016-10-01.csv new file mode 100644 index 000000000..4b257ac1d --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2016-10-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,"1,311.89" +Treasurer,337.50 +Total for Bank,"1,649.39" +Total Assets,"1,649.39" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,515.38 +Current Year Earnings,"1,134.01" +Total equity,"1,649.39" +, +Total Liabilities and Equity,"1,649.39" diff --git a/finances/HaxeFlixel Balance Sheet 2016-11-01.csv b/finances/HaxeFlixel Balance Sheet 2016-11-01.csv new file mode 100644 index 000000000..91bf51916 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2016-11-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,"1,460.22" +Treasurer,384.22 +Total for Bank,"1,844.44" +Total Assets,"1,844.44" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,515.38 +Current Year Earnings,"1,329.06" +Total equity,"1,844.44" +, +Total Liabilities and Equity,"1,844.44" diff --git a/finances/HaxeFlixel Balance Sheet 2016-12-01.csv b/finances/HaxeFlixel Balance Sheet 2016-12-01.csv new file mode 100644 index 000000000..3a921ba2d --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2016-12-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,"1,612.38" +Treasurer,384.22 +Total for Bank,"1,996.60" +Total Assets,"1,996.60" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,515.38 +Current Year Earnings,"1,481.22" +Total equity,"1,996.60" +, +Total Liabilities and Equity,"1,996.60" diff --git a/finances/HaxeFlixel Balance Sheet 2017-01-01.csv b/finances/HaxeFlixel Balance Sheet 2017-01-01.csv new file mode 100644 index 000000000..1d104edb0 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2017-01-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,"1,769.11" +Treasurer,413.50 +Total for Bank,"2,182.61" +Total Assets,"2,182.61" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,"2,030.30" +Current Year Earnings,152.31 +Total equity,"2,182.61" +, +Total Liabilities and Equity,"2,182.61" diff --git a/finances/HaxeFlixel Balance Sheet 2017-02-01.csv b/finances/HaxeFlixel Balance Sheet 2017-02-01.csv new file mode 100644 index 000000000..5ce167405 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2017-02-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,"1,911.29" +Treasurer,413.50 +Total for Bank,"2,324.79" +Total Assets,"2,324.79" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,"2,030.30" +Current Year Earnings,294.49 +Total equity,"2,324.79" +, +Total Liabilities and Equity,"2,324.79" diff --git a/finances/HaxeFlixel Balance Sheet 2017-03-01.csv b/finances/HaxeFlixel Balance Sheet 2017-03-01.csv new file mode 100644 index 000000000..237eaae1e --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2017-03-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,"2,052.60" +Treasurer,113.20 +Total for Bank,"2,165.80" +Total Assets,"2,165.80" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,"2,030.30" +Current Year Earnings,135.50 +Total equity,"2,165.80" +, +Total Liabilities and Equity,"2,165.80" diff --git a/finances/HaxeFlixel Balance Sheet 2017-04-01.csv b/finances/HaxeFlixel Balance Sheet 2017-04-01.csv new file mode 100644 index 000000000..90a79e82a --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2017-04-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,"2,192.46" +Treasurer,113.20 +Total for Bank,"2,305.66" +Total Assets,"2,305.66" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,"2,030.30" +Current Year Earnings,275.36 +Total equity,"2,305.66" +, +Total Liabilities and Equity,"2,305.66" diff --git a/finances/HaxeFlixel Balance Sheet 2017-05-01.csv b/finances/HaxeFlixel Balance Sheet 2017-05-01.csv new file mode 100644 index 000000000..3842808d3 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2017-05-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,"2,331.44" +Treasurer,113.20 +Total for Bank,"2,444.64" +Total Assets,"2,444.64" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,"2,030.30" +Current Year Earnings,414.34 +Total equity,"2,444.64" +, +Total Liabilities and Equity,"2,444.64" diff --git a/finances/HaxeFlixel Balance Sheet 2017-06-01.csv b/finances/HaxeFlixel Balance Sheet 2017-06-01.csv new file mode 100644 index 000000000..10275060a --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2017-06-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,"2,464.45" +Treasurer,113.20 +Total for Bank,"2,577.65" +Total Assets,"2,577.65" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,"2,030.30" +Current Year Earnings,547.35 +Total equity,"2,577.65" +, +Total Liabilities and Equity,"2,577.65" diff --git a/finances/HaxeFlixel Balance Sheet 2017-07-01.csv b/finances/HaxeFlixel Balance Sheet 2017-07-01.csv new file mode 100644 index 000000000..78548a408 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2017-07-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,"2,598.39" +Treasurer,139.39 +Total for Bank,"2,737.78" +Total Assets,"2,737.78" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,"2,030.30" +Current Year Earnings,707.48 +Total equity,"2,737.78" +, +Total Liabilities and Equity,"2,737.78" diff --git a/finances/HaxeFlixel Balance Sheet 2017-08-01.csv b/finances/HaxeFlixel Balance Sheet 2017-08-01.csv new file mode 100644 index 000000000..8b9ff2bd3 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2017-08-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,"2,724.37" +Treasurer,139.39 +Total for Bank,"2,863.76" +Total Assets,"2,863.76" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,"2,030.30" +Current Year Earnings,833.46 +Total equity,"2,863.76" +, +Total Liabilities and Equity,"2,863.76" diff --git a/finances/HaxeFlixel Balance Sheet 2017-09-01.csv b/finances/HaxeFlixel Balance Sheet 2017-09-01.csv new file mode 100644 index 000000000..31210a7c4 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2017-09-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,125.88 +Treasurer,"2,117.50" +Total for Bank,"2,243.38" +Total Assets,"2,243.38" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,"2,029.08" +Current Year Earnings,214.30 +Total equity,"2,243.38" +, +Total Liabilities and Equity,"2,243.38" diff --git a/finances/HaxeFlixel Balance Sheet 2017-10-01.csv b/finances/HaxeFlixel Balance Sheet 2017-10-01.csv new file mode 100644 index 000000000..1a9179956 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2017-10-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,251.76 +Treasurer,"1,999.55" +Total for Bank,"2,251.31" +Total Assets,"2,251.31" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,"2,029.08" +Current Year Earnings,222.23 +Total equity,"2,251.31" +, +Total Liabilities and Equity,"2,251.31" diff --git a/finances/HaxeFlixel Balance Sheet 2017-11-01.csv b/finances/HaxeFlixel Balance Sheet 2017-11-01.csv new file mode 100644 index 000000000..dc444c906 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2017-11-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,373.20 +Treasurer,"1,999.55" +Total for Bank,"2,372.75" +Total Assets,"2,372.75" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,"2,029.08" +Current Year Earnings,343.67 +Total equity,"2,372.75" +, +Total Liabilities and Equity,"2,372.75" diff --git a/finances/HaxeFlixel Balance Sheet 2017-12-01.csv b/finances/HaxeFlixel Balance Sheet 2017-12-01.csv new file mode 100644 index 000000000..04b824568 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2017-12-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,490.20 +Treasurer,"1,999.55" +Total for Bank,"2,489.75" +Total Assets,"2,489.75" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,"2,029.08" +Current Year Earnings,460.67 +Total equity,"2,489.75" +, +Total Liabilities and Equity,"2,489.75" diff --git a/finances/HaxeFlixel Balance Sheet 2018-01-01.csv b/finances/HaxeFlixel Balance Sheet 2018-01-01.csv new file mode 100644 index 000000000..bead6ac14 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2018-01-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,607.40 +Treasurer,"1,999.55" +Total for Bank,"2,606.95" +Total Assets,"2,606.95" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,"2,489.75" +Current Year Earnings,117.20 +Total equity,"2,606.95" +, +Total Liabilities and Equity,"2,606.95" diff --git a/finances/HaxeFlixel Balance Sheet 2018-02-01.csv b/finances/HaxeFlixel Balance Sheet 2018-02-01.csv new file mode 100644 index 000000000..048db07db --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2018-02-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,724.65 +Treasurer,"1,699.55" +Total for Bank,"2,424.20" +Total Assets,"2,424.20" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,"2,489.75" +Current Year Earnings,(65.55) +Total equity,"2,424.20" +, +Total Liabilities and Equity,"2,424.20" diff --git a/finances/HaxeFlixel Balance Sheet 2018-03-01.csv b/finances/HaxeFlixel Balance Sheet 2018-03-01.csv new file mode 100644 index 000000000..7453177fc --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2018-03-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,842.04 +Treasurer,"1,699.55" +Total for Bank,"2,541.59" +Total Assets,"2,541.59" +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,"2,489.75" +Current Year Earnings,51.84 +Total equity,"2,541.59" +, +Total Liabilities and Equity,"2,541.59" diff --git a/finances/HaxeFlixel Balance Sheet 2018-04-01.csv b/finances/HaxeFlixel Balance Sheet 2018-04-01.csv new file mode 100644 index 000000000..502635b87 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2018-04-01.csv @@ -0,0 +1,17 @@ +account,balance +Asset, +Bank, +Patreon,115.55 +Treasurer,(75.24) +Total for Bank,40.31 +Total Assets,40.31 +, +Liability, +Total Liabilities,0.00 +, +Equity, +Previous Year(s) Earnings,"2,489.75" +Current Year Earnings,"(2,449.44)" +Total equity,40.31 +, +Total Liabilities and Equity,40.31 diff --git a/finances/HaxeFlixel Balance Sheet 2018-05-01.csv b/finances/HaxeFlixel Balance Sheet 2018-05-01.csv new file mode 100644 index 000000000..cd66a0087 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2018-05-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2018-05-01 +ACCOUNT NUMBER,ACCOUNTS,"May 01, 2018" +,Assets, +,Cash and Bank, +,Patreon,$225.38 +,Treasurer,-$75.24 +,Total Cash and Bank,$150.14 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$150.14 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,"$2,489.75" +,"Profit between Jan 1, 2018 and May 1, 2018","-$2,339.61" +,Total Retained Earnings,$150.14 +,Total Equity,$150.14 diff --git a/finances/HaxeFlixel Balance Sheet 2018-06-01.csv b/finances/HaxeFlixel Balance Sheet 2018-06-01.csv new file mode 100644 index 000000000..f4c402325 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2018-06-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2018-06-01 +ACCOUNT NUMBER,ACCOUNTS,"Jun 01, 2018" +,Assets, +,Cash and Bank, +,Patreon,$100.65 +,Treasurer,-$107.90 +,Total Cash and Bank,-$7.25 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,-$7.25 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,"$2,489.75" +,"Profit between Jan 1, 2018 and Jun 1, 2018","-$2,497.00" +,Total Retained Earnings,-$7.25 +,Total Equity,-$7.25 diff --git a/finances/HaxeFlixel Balance Sheet 2018-07-01.csv b/finances/HaxeFlixel Balance Sheet 2018-07-01.csv new file mode 100644 index 000000000..1f99599cf --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2018-07-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2018-07-01 +ACCOUNT NUMBER,ACCOUNTS,"Jul 01, 2018" +,Assets, +,Cash and Bank, +,Patreon,$205.89 +,Treasurer,-$107.90 +,Total Cash and Bank,$97.99 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$97.99 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,"$2,489.75" +,"Profit between Jan 1, 2018 and Jul 1, 2018","-$2,391.76" +,Total Retained Earnings,$97.99 +,Total Equity,$97.99 diff --git a/finances/HaxeFlixel Balance Sheet 2018-08-01.csv b/finances/HaxeFlixel Balance Sheet 2018-08-01.csv new file mode 100644 index 000000000..7bc278129 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2018-08-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2018-08-01 +ACCOUNT NUMBER,ACCOUNTS,"Aug 01, 2018" +,Assets, +,Cash and Bank, +,Patreon,$311.16 +,Treasurer,-$107.90 +,Total Cash and Bank,$203.26 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$203.26 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,"$2,489.75" +,"Profit between Jan 1, 2018 and Aug 1, 2018","-$2,286.49" +,Total Retained Earnings,$203.26 +,Total Equity,$203.26 diff --git a/finances/HaxeFlixel Balance Sheet 2018-09-01.csv b/finances/HaxeFlixel Balance Sheet 2018-09-01.csv new file mode 100644 index 000000000..700634ce5 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2018-09-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2018-09-01 +ACCOUNT NUMBER,ACCOUNTS,"Sep 01, 2018" +,Assets, +,Cash and Bank, +,Patreon,$97.98 +,Treasurer,$72.41 +,Total Cash and Bank,$170.39 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$170.39 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,"$2,489.75" +,"Profit between Jan 1, 2018 and Sep 1, 2018","-$2,319.36" +,Total Retained Earnings,$170.39 +,Total Equity,$170.39 diff --git a/finances/HaxeFlixel Balance Sheet 2018-10-01.csv b/finances/HaxeFlixel Balance Sheet 2018-10-01.csv new file mode 100644 index 000000000..76f07f17e --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2018-10-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2018-10-01 +ACCOUNT NUMBER,ACCOUNTS,"Oct 01, 2018" +,Assets, +,Cash and Bank, +,Patreon,$195.96 +,Treasurer,$72.41 +,Total Cash and Bank,$268.37 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$268.37 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,"$2,489.75" +,"Profit between Jan 1, 2018 and Oct 1, 2018","-$2,221.38" +,Total Retained Earnings,$268.37 +,Total Equity,$268.37 diff --git a/finances/HaxeFlixel Balance Sheet 2018-11-01.csv b/finances/HaxeFlixel Balance Sheet 2018-11-01.csv new file mode 100644 index 000000000..3f73a5fb0 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2018-11-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2018-11-01 +ACCOUNT NUMBER,ACCOUNTS,"Nov 01, 2018" +,Assets, +,Cash and Bank, +,Patreon,$280.95 +,Treasurer,$22.41 +,Total Cash and Bank,$303.36 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$303.36 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,"$2,489.75" +,"Profit between Jan 1, 2018 and Nov 1, 2018","-$2,186.39" +,Total Retained Earnings,$303.36 +,Total Equity,$303.36 diff --git a/finances/HaxeFlixel Balance Sheet 2018-12-01.csv b/finances/HaxeFlixel Balance Sheet 2018-12-01.csv new file mode 100644 index 000000000..59c7868c7 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2018-12-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2018-12-01 +ACCOUNT NUMBER,ACCOUNTS,"Dec 01, 2018" +,Assets, +,Cash and Bank, +,Patreon,$361.31 +,Treasurer,$22.41 +,Total Cash and Bank,$383.72 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$383.72 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,"$2,489.75" +,"Profit between Jan 1, 2018 and Dec 1, 2018","-$2,106.03" +,Total Retained Earnings,$383.72 +,Total Equity,$383.72 diff --git a/finances/HaxeFlixel Balance Sheet 2019-01-01.csv b/finances/HaxeFlixel Balance Sheet 2019-01-01.csv new file mode 100644 index 000000000..1498d6e44 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2019-01-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2019-01-01 +ACCOUNT NUMBER,ACCOUNTS,"Jan 01, 2019" +,Assets, +,Cash and Bank, +,Patreon,$438.33 +,Treasurer,$22.41 +,Total Cash and Bank,$460.74 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$460.74 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$383.72 +,"Profit between Jan 1, 2019 and Jan 1, 2019",$77.02 +,Total Retained Earnings,$460.74 +,Total Equity,$460.74 diff --git a/finances/HaxeFlixel Balance Sheet 2019-02-01.csv b/finances/HaxeFlixel Balance Sheet 2019-02-01.csv new file mode 100644 index 000000000..7b4e7ebc4 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2019-02-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2019-02-01 +ACCOUNT NUMBER,ACCOUNTS,"Feb 01, 2019" +,Assets, +,Cash and Bank, +,Patreon,$514.42 +,Treasurer,$22.41 +,Total Cash and Bank,$536.83 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$536.83 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$383.72 +,"Profit between Jan 1, 2019 and Feb 1, 2019",$153.11 +,Total Retained Earnings,$536.83 +,Total Equity,$536.83 diff --git a/finances/HaxeFlixel Balance Sheet 2019-03-01.csv b/finances/HaxeFlixel Balance Sheet 2019-03-01.csv new file mode 100644 index 000000000..89859c280 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2019-03-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2019-03-01 +ACCOUNT NUMBER,ACCOUNTS,"Mar 01, 2019" +,Assets, +,Cash and Bank, +,Patreon,$590.56 +,Treasurer,$22.41 +,Total Cash and Bank,$612.97 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$612.97 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$383.72 +,"Profit between Jan 1, 2019 and Mar 1, 2019",$229.25 +,Total Retained Earnings,$612.97 +,Total Equity,$612.97 diff --git a/finances/HaxeFlixel Balance Sheet 2019-04-01.csv b/finances/HaxeFlixel Balance Sheet 2019-04-01.csv new file mode 100644 index 000000000..ecdbee6a5 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2019-04-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2019-04-01 +ACCOUNT NUMBER,ACCOUNTS,"Apr 01, 2019" +,Assets, +,Cash and Bank, +,Patreon,$662.00 +,Treasurer,$22.41 +,Total Cash and Bank,$684.41 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$684.41 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$383.72 +,"Profit between Jan 1, 2019 and Apr 1, 2019",$300.69 +,Total Retained Earnings,$684.41 +,Total Equity,$684.41 diff --git a/finances/HaxeFlixel Balance Sheet 2019-05-01.csv b/finances/HaxeFlixel Balance Sheet 2019-05-01.csv new file mode 100644 index 000000000..b0117dff3 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2019-05-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2019-05-01 +ACCOUNT NUMBER,ACCOUNTS,"May 01, 2019" +,Assets, +,Cash and Bank, +,Patreon,$733.45 +,Treasurer,$22.41 +,Total Cash and Bank,$755.86 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$755.86 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$383.72 +,"Profit between Jan 1, 2019 and May 1, 2019",$372.14 +,Total Retained Earnings,$755.86 +,Total Equity,$755.86 diff --git a/finances/HaxeFlixel Balance Sheet 2019-06-01.csv b/finances/HaxeFlixel Balance Sheet 2019-06-01.csv new file mode 100644 index 000000000..8b01e307a --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2019-06-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2019-06-01 +ACCOUNT NUMBER,ACCOUNTS,"Jun 01, 2019" +,Assets, +,Cash and Bank, +,Patreon,$804.95 +,Treasurer,$22.41 +,Total Cash and Bank,$827.36 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$827.36 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$383.72 +,"Profit between Jan 1, 2019 and Jun 1, 2019",$443.64 +,Total Retained Earnings,$827.36 +,Total Equity,$827.36 diff --git a/finances/HaxeFlixel Balance Sheet 2019-07-01.csv b/finances/HaxeFlixel Balance Sheet 2019-07-01.csv new file mode 100644 index 000000000..153777ecb --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2019-07-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2019-07-01 +ACCOUNT NUMBER,ACCOUNTS,"Jul 01, 2019" +,Assets, +,Cash and Bank, +,Patreon,$876.45 +,Treasurer,$22.41 +,Total Cash and Bank,$898.86 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$898.86 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$383.72 +,"Profit between Jan 1, 2019 and Jul 1, 2019",$515.14 +,Total Retained Earnings,$898.86 +,Total Equity,$898.86 diff --git a/finances/HaxeFlixel Balance Sheet 2019-08-01.csv b/finances/HaxeFlixel Balance Sheet 2019-08-01.csv new file mode 100644 index 000000000..5c85ee4c8 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2019-08-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2019-08-01 +ACCOUNT NUMBER,ACCOUNTS,"Aug 01, 2019" +,Assets, +,Cash and Bank, +,Patreon,$947.86 +,Treasurer,$22.41 +,Total Cash and Bank,$970.27 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$970.27 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$383.72 +,"Profit between Jan 1, 2019 and Aug 1, 2019",$586.55 +,Total Retained Earnings,$970.27 +,Total Equity,$970.27 diff --git a/finances/HaxeFlixel Balance Sheet 2019-09-01.csv b/finances/HaxeFlixel Balance Sheet 2019-09-01.csv new file mode 100644 index 000000000..80f73fc65 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2019-09-01.csv @@ -0,0 +1,25 @@ +Balance Sheet +HaxeFlixel +As of 2019-09-01 +ACCOUNT NUMBER,ACCOUNTS,"Sep 01, 2019" +,Assets, +,Cash and Bank, +,Patreon,$71.42 +,Total Cash and Bank,$71.42 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$71.42 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$383.72 +,"Profit between Jan 1, 2019 and Sep 1, 2019",-$312.30 +,Total Retained Earnings,$71.42 +,Total Equity,$71.42 diff --git a/finances/HaxeFlixel Balance Sheet 2019-10-01.csv b/finances/HaxeFlixel Balance Sheet 2019-10-01.csv new file mode 100644 index 000000000..7383bdd10 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2019-10-01.csv @@ -0,0 +1,25 @@ +Balance Sheet +HaxeFlixel +As of 2019-10-01 +ACCOUNT NUMBER,ACCOUNTS,"Oct 01, 2019" +,Assets, +,Cash and Bank, +,Patreon,$142.82 +,Total Cash and Bank,$142.82 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$142.82 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$383.72 +,"Profit between Jan 1, 2019 and Oct 1, 2019",-$240.90 +,Total Retained Earnings,$142.82 +,Total Equity,$142.82 diff --git a/finances/HaxeFlixel Balance Sheet 2019-11-01.csv b/finances/HaxeFlixel Balance Sheet 2019-11-01.csv new file mode 100644 index 000000000..7d276ce92 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2019-11-01.csv @@ -0,0 +1,25 @@ +Balance Sheet +HaxeFlixel +As of 2019-11-01 +ACCOUNT NUMBER,ACCOUNTS,"Nov 01, 2019" +,Assets, +,Cash and Bank, +,Patreon,$214.23 +,Total Cash and Bank,$214.23 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$214.23 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$383.72 +,"Profit between Jan 1, 2019 and Nov 1, 2019",-$169.49 +,Total Retained Earnings,$214.23 +,Total Equity,$214.23 diff --git a/finances/HaxeFlixel Balance Sheet 2019-12-01.csv b/finances/HaxeFlixel Balance Sheet 2019-12-01.csv new file mode 100644 index 000000000..0e602ba2d --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2019-12-01.csv @@ -0,0 +1,25 @@ +Balance Sheet +HaxeFlixel +As of 2019-12-01 +ACCOUNT NUMBER,ACCOUNTS,"Dec 01, 2019" +,Assets, +,Cash and Bank, +,Patreon,$290.25 +,Total Cash and Bank,$290.25 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$290.25 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$383.72 +,"Profit between Jan 1, 2019 and Dec 1, 2019",-$93.47 +,Total Retained Earnings,$290.25 +,Total Equity,$290.25 diff --git a/finances/HaxeFlixel Balance Sheet 2020-01-01.csv b/finances/HaxeFlixel Balance Sheet 2020-01-01.csv new file mode 100644 index 000000000..005621981 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2020-01-01.csv @@ -0,0 +1,25 @@ +Balance Sheet +HaxeFlixel +As of 2020-01-01 +ACCOUNT NUMBER,ACCOUNTS,"Jan 01, 2020" +,Assets, +,Cash and Bank, +,Patreon,$366.28 +,Total Cash and Bank,$366.28 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$366.28 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$290.25 +,"Profit between Jan 1, 2020 and Jan 1, 2020",$76.03 +,Total Retained Earnings,$366.28 +,Total Equity,$366.28 diff --git a/finances/HaxeFlixel Balance Sheet 2020-02-01.csv b/finances/HaxeFlixel Balance Sheet 2020-02-01.csv new file mode 100644 index 000000000..1e15bcaa0 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2020-02-01.csv @@ -0,0 +1,25 @@ +Balance Sheet +HaxeFlixel +As of 2020-02-01 +ACCOUNT NUMBER,ACCOUNTS,"Feb 01, 2020" +,Assets, +,Cash and Bank, +,Patreon,$442.32 +,Total Cash and Bank,$442.32 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$442.32 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$290.25 +,"Profit between Jan 1, 2020 and Feb 1, 2020",$152.07 +,Total Retained Earnings,$442.32 +,Total Equity,$442.32 diff --git a/finances/HaxeFlixel Balance Sheet 2020-03-01.csv b/finances/HaxeFlixel Balance Sheet 2020-03-01.csv new file mode 100644 index 000000000..fbfc7195b --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2020-03-01.csv @@ -0,0 +1,25 @@ +Balance Sheet +HaxeFlixel +As of 2020-03-01 +ACCOUNT NUMBER,ACCOUNTS,"Mar 01, 2020" +,Assets, +,Cash and Bank, +,Patreon,$518.35 +,Total Cash and Bank,$518.35 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$518.35 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$290.25 +,"Profit between Jan 1, 2020 and Mar 1, 2020",$228.10 +,Total Retained Earnings,$518.35 +,Total Equity,$518.35 diff --git a/finances/HaxeFlixel Balance Sheet 2020-04-01.csv b/finances/HaxeFlixel Balance Sheet 2020-04-01.csv new file mode 100644 index 000000000..92d0d9ba2 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2020-04-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2020-04-01 +ACCOUNT NUMBER,ACCOUNTS,"Apr 01, 2020" +,Assets, +,Cash and Bank, +,Patreon,$84.71 +,Treasurer,$13.16 +,Total Cash and Bank,$97.87 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$97.87 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$290.25 +,"Profit between Jan 1, 2020 and Apr 1, 2020",-$192.38 +,Total Retained Earnings,$97.87 +,Total Equity,$97.87 diff --git a/finances/HaxeFlixel Balance Sheet 2020-05-01.csv b/finances/HaxeFlixel Balance Sheet 2020-05-01.csv new file mode 100644 index 000000000..e5fc39cbb --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2020-05-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2020-05-01 +ACCOUNT NUMBER,ACCOUNTS,"May 01, 2020" +,Assets, +,Cash and Bank, +,Patreon,$174.17 +,Treasurer,$13.16 +,Total Cash and Bank,$187.33 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$187.33 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$290.25 +,"Profit between Jan 1, 2020 and May 1, 2020",-$102.92 +,Total Retained Earnings,$187.33 +,Total Equity,$187.33 diff --git a/finances/HaxeFlixel Balance Sheet 2020-06-01.csv b/finances/HaxeFlixel Balance Sheet 2020-06-01.csv new file mode 100644 index 000000000..b520ab1a2 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2020-06-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2020-06-01 +ACCOUNT NUMBER,ACCOUNTS,"Jun 01, 2020" +,Assets, +,Cash and Bank, +,Patreon,$263.65 +,Treasurer,$13.16 +,Total Cash and Bank,$276.81 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$276.81 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$290.25 +,"Profit between Jan 1, 2020 and Jun 1, 2020",-$13.44 +,Total Retained Earnings,$276.81 +,Total Equity,$276.81 diff --git a/finances/HaxeFlixel Balance Sheet 2020-07-01.csv b/finances/HaxeFlixel Balance Sheet 2020-07-01.csv new file mode 100644 index 000000000..a8141a511 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2020-07-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2020-07-01 +ACCOUNT NUMBER,ACCOUNTS,"Jul 01, 2020" +,Assets, +,Cash and Bank, +,Patreon,$353.11 +,Treasurer,$13.16 +,Total Cash and Bank,$366.27 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$366.27 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$290.25 +,"Profit between Jan 1, 2020 and Jul 1, 2020",$76.02 +,Total Retained Earnings,$366.27 +,Total Equity,$366.27 diff --git a/finances/HaxeFlixel Balance Sheet 2020-08-01.csv b/finances/HaxeFlixel Balance Sheet 2020-08-01.csv new file mode 100644 index 000000000..b9b44b552 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2020-08-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2020-08-01 +ACCOUNT NUMBER,ACCOUNTS,"Aug 01, 2020" +,Assets, +,Cash and Bank, +,Patreon,$440.52 +,Treasurer,$13.16 +,Total Cash and Bank,$453.68 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$453.68 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$290.25 +,"Profit between Jan 1, 2020 and Aug 1, 2020",$163.43 +,Total Retained Earnings,$453.68 +,Total Equity,$453.68 diff --git a/finances/HaxeFlixel Balance Sheet 2020-09-01.csv b/finances/HaxeFlixel Balance Sheet 2020-09-01.csv new file mode 100644 index 000000000..def9d5718 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2020-09-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2020-09-01 +ACCOUNT NUMBER,ACCOUNTS,"Sep 01, 2020" +,Assets, +,Cash and Bank, +,Patreon,$530.57 +,Treasurer,$13.16 +,Total Cash and Bank,$543.73 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$543.73 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$290.25 +,"Profit between Jan 1, 2020 and Sep 1, 2020",$253.48 +,Total Retained Earnings,$543.73 +,Total Equity,$543.73 diff --git a/finances/HaxeFlixel Balance Sheet 2020-10-01.csv b/finances/HaxeFlixel Balance Sheet 2020-10-01.csv new file mode 100644 index 000000000..08aabb8d0 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2020-10-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2020-10-01 +ACCOUNT NUMBER,ACCOUNTS,"Oct 01, 2020" +,Assets, +,Cash and Bank, +,Patreon,$620.57 +,Treasurer,$13.16 +,Total Cash and Bank,$633.73 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$633.73 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$290.25 +,"Profit between Jan 1, 2020 and Oct 1, 2020",$343.48 +,Total Retained Earnings,$633.73 +,Total Equity,$633.73 diff --git a/finances/HaxeFlixel Balance Sheet 2020-11-01.csv b/finances/HaxeFlixel Balance Sheet 2020-11-01.csv new file mode 100644 index 000000000..142e9744b --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2020-11-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2020-11-01 +ACCOUNT NUMBER,ACCOUNTS,"Nov 01, 2020" +,Assets, +,Cash and Bank, +,Patreon,$710.63 +,Treasurer,$13.16 +,Total Cash and Bank,$723.79 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$723.79 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$290.25 +,"Profit between Jan 1, 2020 and Nov 1, 2020",$433.54 +,Total Retained Earnings,$723.79 +,Total Equity,$723.79 diff --git a/finances/HaxeFlixel Balance Sheet 2020-12-01.csv b/finances/HaxeFlixel Balance Sheet 2020-12-01.csv new file mode 100644 index 000000000..a7c1df9d3 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2020-12-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2020-12-01 +ACCOUNT NUMBER,ACCOUNTS,"Dec 01, 2020" +,Assets, +,Cash and Bank, +,Patreon,$800.63 +,Treasurer,$13.16 +,Total Cash and Bank,$813.79 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$813.79 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$290.25 +,"Profit between Jan 1, 2020 and Dec 1, 2020",$523.54 +,Total Retained Earnings,$813.79 +,Total Equity,$813.79 diff --git a/finances/HaxeFlixel Balance Sheet 2021-01-01.csv b/finances/HaxeFlixel Balance Sheet 2021-01-01.csv new file mode 100644 index 000000000..60967c665 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2021-01-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2021-01-01 +ACCOUNT NUMBER,ACCOUNTS,"Jan 01, 2021" +,Assets, +,Cash and Bank, +,Patreon,$883.46 +,Treasurer,$13.16 +,Total Cash and Bank,$896.62 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$896.62 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$813.79 +,"Profit between Jan 1, 2021 and Jan 1, 2021",$82.83 +,Total Retained Earnings,$896.62 +,Total Equity,$896.62 diff --git a/finances/HaxeFlixel Balance Sheet 2021-02-01.csv b/finances/HaxeFlixel Balance Sheet 2021-02-01.csv new file mode 100644 index 000000000..1cb8c57b4 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2021-02-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2021-02-01 +ACCOUNT NUMBER,ACCOUNTS,"Feb 01, 2021" +,Assets, +,Cash and Bank, +,Patreon,$966.32 +,Treasurer,$13.16 +,Total Cash and Bank,$979.48 +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,$979.48 +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$813.79 +,"Profit between Jan 1, 2021 and Feb 1, 2021",$165.69 +,Total Retained Earnings,$979.48 +,Total Equity,$979.48 diff --git a/finances/HaxeFlixel Balance Sheet 2021-03-01.csv b/finances/HaxeFlixel Balance Sheet 2021-03-01.csv new file mode 100644 index 000000000..7d2e1d1cf --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2021-03-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2021-03-01 +ACCOUNT NUMBER,ACCOUNTS,"Mar 01, 2021" +,Assets, +,Cash and Bank, +,Patreon,"$1,049.34" +,Treasurer,$13.16 +,Total Cash and Bank,"$1,062.50" +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,"$1,062.50" +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$813.95 +,"Profit between Jan 1, 2021 and Mar 1, 2021",$248.55 +,Total Retained Earnings,"$1,062.50" +,Total Equity,"$1,062.50" diff --git a/finances/HaxeFlixel Balance Sheet 2021-04-01.csv b/finances/HaxeFlixel Balance Sheet 2021-04-01.csv new file mode 100644 index 000000000..f442b64e5 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2021-04-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2021-04-01 +ACCOUNT NUMBER,ACCOUNTS,"Apr 01, 2021" +,Assets, +,Cash and Bank, +,Patreon,"$1,132.21" +,Treasurer,$13.16 +,Total Cash and Bank,"$1,145.37" +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,"$1,145.37" +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$813.95 +,"Profit between Jan 1, 2021 and Apr 1, 2021",$331.42 +,Total Retained Earnings,"$1,145.37" +,Total Equity,"$1,145.37" diff --git a/finances/HaxeFlixel Balance Sheet 2021-05-01.csv b/finances/HaxeFlixel Balance Sheet 2021-05-01.csv new file mode 100644 index 000000000..cf40b5d9b --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2021-05-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2021-05-01 +ACCOUNT NUMBER,ACCOUNTS,"May 01, 2021" +,Assets, +,Cash and Bank, +,Patreon,"$1,215.08" +,Treasurer,$13.16 +,Total Cash and Bank,"$1,228.24" +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,"$1,228.24" +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$813.95 +,"Profit between Jan 1, 2021 and May 1, 2021",$414.29 +,Total Retained Earnings,"$1,228.24" +,Total Equity,"$1,228.24" diff --git a/finances/HaxeFlixel Balance Sheet 2021-06-01.csv b/finances/HaxeFlixel Balance Sheet 2021-06-01.csv new file mode 100644 index 000000000..4df962246 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2021-06-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2021-06-01 +ACCOUNT NUMBER,ACCOUNTS,"Jun 01, 2021" +,Assets, +,Cash and Bank, +,Patreon,"$1,293.40" +,Treasurer,$13.16 +,Total Cash and Bank,"$1,306.56" +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,"$1,306.56" +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$813.95 +,"Profit between Jan 1, 2021 and Jun 1, 2021",$492.61 +,Total Retained Earnings,"$1,306.56" +,Total Equity,"$1,306.56" diff --git a/finances/HaxeFlixel Balance Sheet 2021-07-01.csv b/finances/HaxeFlixel Balance Sheet 2021-07-01.csv new file mode 100644 index 000000000..25c650e39 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2021-07-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2021-07-01 +ACCOUNT NUMBER,ACCOUNTS,"Jul 01, 2021" +,Assets, +,Cash and Bank, +,Patreon,"$1,371.73" +,Treasurer,$13.16 +,Total Cash and Bank,"$1,384.89" +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,"$1,384.89" +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$813.95 +,"Profit between Jan 1, 2021 and Jul 1, 2021",$570.94 +,Total Retained Earnings,"$1,384.89" +,Total Equity,"$1,384.89" diff --git a/finances/HaxeFlixel Balance Sheet 2021-08-01.csv b/finances/HaxeFlixel Balance Sheet 2021-08-01.csv new file mode 100644 index 000000000..66be98f53 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2021-08-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2021-08-01 +ACCOUNT NUMBER,ACCOUNTS,"Aug 01, 2021" +,Assets, +,Cash and Bank, +,Patreon,"$1,450.07" +,Treasurer,$13.16 +,Total Cash and Bank,"$1,463.23" +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,"$1,463.23" +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$813.95 +,"Profit between Jan 1, 2021 and Aug 1, 2021",$649.28 +,Total Retained Earnings,"$1,463.23" +,Total Equity,"$1,463.23" diff --git a/finances/HaxeFlixel Balance Sheet 2021-09-01.csv b/finances/HaxeFlixel Balance Sheet 2021-09-01.csv new file mode 100644 index 000000000..eb35d815d --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2021-09-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2021-09-01 +ACCOUNT NUMBER,ACCOUNTS,"Sep 01, 2021" +,Assets, +,Cash and Bank, +,Patreon,"$1,528.39" +,Treasurer,$13.16 +,Total Cash and Bank,"$1,541.55" +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,"$1,541.55" +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$813.95 +,"Profit between Jan 1, 2021 and Sep 1, 2021",$727.60 +,Total Retained Earnings,"$1,541.55" +,Total Equity,"$1,541.55" diff --git a/finances/HaxeFlixel Balance Sheet 2021-10-01.csv b/finances/HaxeFlixel Balance Sheet 2021-10-01.csv new file mode 100644 index 000000000..e069378c7 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2021-10-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2021-10-01 +ACCOUNT NUMBER,ACCOUNTS,"Oct 01, 2021" +,Assets, +,Cash and Bank, +,Patreon,"$1,608.43" +,Treasurer,$13.16 +,Total Cash and Bank,"$1,621.59" +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,"$1,621.59" +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$813.95 +,"Profit between Jan 1, 2021 and Oct 1, 2021",$807.64 +,Total Retained Earnings,"$1,621.59" +,Total Equity,"$1,621.59" diff --git a/finances/HaxeFlixel Balance Sheet 2021-11-01.csv b/finances/HaxeFlixel Balance Sheet 2021-11-01.csv new file mode 100644 index 000000000..7090b72b9 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2021-11-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2021-11-01 +ACCOUNT NUMBER,ACCOUNTS,"Nov 01, 2021" +,Assets, +,Cash and Bank, +,Patreon,"$1,688.56" +,Treasurer,$13.16 +,Total Cash and Bank,"$1,701.72" +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,"$1,701.72" +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$813.95 +,"Profit between Jan 1, 2021 and Nov 1, 2021",$887.77 +,Total Retained Earnings,"$1,701.72" +,Total Equity,"$1,701.72" diff --git a/finances/HaxeFlixel Balance Sheet 2021-12-01.csv b/finances/HaxeFlixel Balance Sheet 2021-12-01.csv new file mode 100644 index 000000000..10213df48 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2021-12-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2021-12-01 +ACCOUNT NUMBER,ACCOUNTS,"Dec 01, 2021" +,Assets, +,Cash and Bank, +,Patreon,"$1,768.68" +,Treasurer,$13.16 +,Total Cash and Bank,"$1,781.84" +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,"$1,781.84" +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,$813.95 +,"Profit between Jan 1, 2021 and Dec 1, 2021",$967.89 +,Total Retained Earnings,"$1,781.84" +,Total Equity,"$1,781.84" diff --git a/finances/HaxeFlixel Balance Sheet 2022-01-01.csv b/finances/HaxeFlixel Balance Sheet 2022-01-01.csv new file mode 100644 index 000000000..6b417df65 --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2022-01-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2022-01-01 +ACCOUNT NUMBER,ACCOUNTS,"Jan 01, 2022" +,Assets, +,Cash and Bank, +,Patreon,"$1,848.79" +,Treasurer,$13.16 +,Total Cash and Bank,"$1,861.95" +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,"$1,861.95" +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,"$1,781.84" +,"Profit between Jan 1, 2022 and Jan 1, 2022",$80.11 +,Total Retained Earnings,"$1,861.95" +,Total Equity,"$1,861.95" diff --git a/finances/HaxeFlixel Balance Sheet 2022-02-01.csv b/finances/HaxeFlixel Balance Sheet 2022-02-01.csv new file mode 100644 index 000000000..f0613c7df --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2022-02-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2022-02-01 +ACCOUNT NUMBER,ACCOUNTS,"Feb 01, 2022" +,Assets, +,Cash and Bank, +,Patreon,"$1,928.92" +,Treasurer,$13.16 +,Total Cash and Bank,"$1,942.08" +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,"$1,942.08" +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,"$1,781.84" +,"Profit between Jan 1, 2022 and Feb 1, 2022",$160.24 +,Total Retained Earnings,"$1,942.08" +,Total Equity,"$1,942.08" diff --git a/finances/HaxeFlixel Balance Sheet 2022-03-01.csv b/finances/HaxeFlixel Balance Sheet 2022-03-01.csv new file mode 100644 index 000000000..c165eb34b --- /dev/null +++ b/finances/HaxeFlixel Balance Sheet 2022-03-01.csv @@ -0,0 +1,26 @@ +Balance Sheet +HaxeFlixel +As of 2022-03-01 +ACCOUNT NUMBER,ACCOUNTS,"Mar 01, 2022" +,Assets, +,Cash and Bank, +,Patreon,"$2,009.03" +,Treasurer,$13.16 +,Total Cash and Bank,"$2,022.19" +,Other Current Assets, +,Total Other Current Assets,$0.00 +,Long-term Assets, +,Total Long-term Assets,$0.00 +,Total Assets,"$2,022.19" +,Liabilities, +,Current Liabilities, +,Total Current Liabilities,$0.00 +,Long-term Liabilities, +,Total Long-term Liabilities,$0.00 +,Total Liabilities,$0.00 +,Equity, +,Retained Earnings, +,Profit for all prior years,"$1,781.84" +,"Profit between Jan 1, 2022 and Mar 1, 2022",$240.35 +,Total Retained Earnings,"$2,022.19" +,Total Equity,"$2,022.19" diff --git a/finances/HaxeFlixel Detailed General Ledger from 2015-06-01 to 2015-06-30.csv b/finances/HaxeFlixel Detailed General Ledger from 2015-06-01 to 2015-06-30.csv new file mode 100644 index 000000000..7574f38d1 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2015-06-01 to 2015-06-30.csv @@ -0,0 +1,23 @@ +date,transaction,debit,credit +Patreon,,, +"June 1, 2015",Expense - Patreon Fees,0.00,5.00 +"June 1, 2015",Expense - CC Fees,0.00,4.41 +"June 1, 2015",Income - Patreon Donations,100.00,0.00 +Total Patreon,,100.00,9.41 +Net Movement,,,90.59 +,,, +Patreon Donations,,, +"June 1, 2015",Income - Patreon Donations,0.00,100.00 +Total Patreon Donations,,0.00,100.00 +Net Movement,,,100.00 +,,, +Payment Fees,,, +"June 1, 2015",Expense - CC Fees,4.41,0.00 +Total Payment Fees,,4.41,0.00 +Net Movement,,,4.41 +,,, +Patreon Fees,,, +"June 1, 2015",Expense - Patreon Fees,5.00,0.00 +Total Patreon Fees,,5.00,0.00 +Net Movement,,,5.00 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2015-07-01 to 2015-07-31.csv b/finances/HaxeFlixel Detailed General Ledger from 2015-07-01 to 2015-07-31.csv new file mode 100644 index 000000000..f2a1de27b --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2015-07-01 to 2015-07-31.csv @@ -0,0 +1,53 @@ +date,transaction,debit,credit +Patreon,,, +"July 11, 2015",Transfer to Treasurer,0.00,159.96 +"July 1, 2015",Income - Patreon Donations,107.00,0.00 +"July 1, 2015",Expense - CC Fees,0.00,5.07 +"July 1, 2015",Expense - Patreon Fees,0.00,5.35 +"July 1, 2015",Expense - Donation to Thorbjørn Lindeijer (https://www.patreon.com/bjorn),0.00,5.00 +Total Patreon,,107.00,175.38 +Net Movement,,,(68.38) +,,, +Treasurer,,, +"July 11, 2015",Transfer from Patreon,159.96,0.00 +"July 11, 2015",Expense - Transfer to Chris Decoster (impaler),0.00,39.99 +"July 11, 2015",Expense - Paypal Transfer Fees,0.00,0.40 +"July 11, 2015",Expense - US Taxes (25% of 159.96),0.00,39.99 +"July 13, 2015",Expense - PayPal Fees,0.00,0.40 +"July 13, 2015",Expense - Transfer to Justo Delgado for OpenFL shader API improvements,0.00,79.18 +Total Treasurer,,159.96,159.96 +Net Movement,,,0.00 +,,, +Patreon Donations,,, +"July 1, 2015",Income - Patreon Donations,0.00,107.00 +Total Patreon Donations,,0.00,107.00 +Net Movement,,,107.00 +,,, +Payment Fees,,, +"July 11, 2015",Expense - Paypal Transfer Fees,0.40,0.00 +"July 13, 2015",Expense - PayPal Fees,0.40,0.00 +"July 1, 2015",Expense - CC Fees,5.07,0.00 +Total Payment Fees,,5.87,0.00 +Net Movement,,,5.87 +,,, +Patreon Fees,,, +"July 1, 2015",Expense - Patreon Fees,5.35,0.00 +Total Patreon Fees,,5.35,0.00 +Net Movement,,,5.35 +,,, +Website Maintenance,,, +"July 11, 2015",Expense - Transfer to Chris Decoster (impaler),39.99,0.00 +Total Website Maintenance,,39.99,0.00 +Net Movement,,,39.99 +,,, +Tax Fees,,, +"July 11, 2015",Expense - US Taxes (25% of 159.96),39.99,0.00 +Total Tax Fees,,39.99,0.00 +Net Movement,,,39.99 +,,, +Development Services,,, +"July 13, 2015",Expense - Transfer to Justo Delgado for OpenFL shader API improvements,79.18,0.00 +"July 1, 2015",Expense - Donation to Thorbjørn Lindeijer (https://www.patreon.com/bjorn),5.00,0.00 +Total Development Services,,84.18,0.00 +Net Movement,,,84.18 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2015-08-01 to 2015-08-31.csv b/finances/HaxeFlixel Detailed General Ledger from 2015-08-01 to 2015-08-31.csv new file mode 100644 index 000000000..e7a5744a4 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2015-08-01 to 2015-08-31.csv @@ -0,0 +1,29 @@ +date,transaction,debit,credit +Patreon,,, +"Aug. 1, 2015",Expense - Donation to Thorbjørn Lindeijer (https://www.patreon.com/bjorn),0.00,5.00 +"Aug. 1, 2015",Income - Patreon Donations,108.00,0.00 +"Aug. 1, 2015",Expense - Patreon Fees,0.00,5.40 +"Aug. 3, 2015",Expense - CC Fees,0.00,4.95 +Total Patreon,,108.00,15.35 +Net Movement,,,92.65 +,,, +Patreon Donations,,, +"Aug. 1, 2015",Income - Patreon Donations,0.00,108.00 +Total Patreon Donations,,0.00,108.00 +Net Movement,,,108.00 +,,, +Payment Fees,,, +"Aug. 3, 2015",Expense - CC Fees,4.95,0.00 +Total Payment Fees,,4.95,0.00 +Net Movement,,,4.95 +,,, +Patreon Fees,,, +"Aug. 1, 2015",Expense - Patreon Fees,5.40,0.00 +Total Patreon Fees,,5.40,0.00 +Net Movement,,,5.40 +,,, +Development Services,,, +"Aug. 1, 2015",Expense - Donation to Thorbjørn Lindeijer (https://www.patreon.com/bjorn),5.00,0.00 +Total Development Services,,5.00,0.00 +Net Movement,,,5.00 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2015-09-01 to 2015-09-30.csv b/finances/HaxeFlixel Detailed General Ledger from 2015-09-01 to 2015-09-30.csv new file mode 100644 index 000000000..bcba26634 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2015-09-01 to 2015-09-30.csv @@ -0,0 +1,23 @@ +date,transaction,debit,credit +Patreon,,, +"Sept. 1, 2015",Income - Patreon Donations,100.00,0.00 +"Sept. 1, 2015",Expense - CC Fees,0.00,4.23 +"Sept. 1, 2015",Expense - Patreon Fees,0.00,5.00 +Total Patreon,,100.00,9.23 +Net Movement,,,90.77 +,,, +Patreon Donations,,, +"Sept. 1, 2015",Income - Patreon Donations,0.00,100.00 +Total Patreon Donations,,0.00,100.00 +Net Movement,,,100.00 +,,, +Payment Fees,,, +"Sept. 1, 2015",Expense - CC Fees,4.23,0.00 +Total Payment Fees,,4.23,0.00 +Net Movement,,,4.23 +,,, +Patreon Fees,,, +"Sept. 1, 2015",Expense - Patreon Fees,5.00,0.00 +Total Patreon Fees,,5.00,0.00 +Net Movement,,,5.00 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2015-10-01 to 2015-10-31.csv b/finances/HaxeFlixel Detailed General Ledger from 2015-10-01 to 2015-10-31.csv new file mode 100644 index 000000000..cf24233bc --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2015-10-01 to 2015-10-31.csv @@ -0,0 +1,23 @@ +date,transaction,debit,credit +Patreon,,, +"Oct. 1, 2015",Income - Patreon Donations,100.00,0.00 +"Oct. 1, 2015",Expense - Patreon Fees,0.00,5.00 +"Oct. 1, 2015",Expense - CC Fees,0.00,4.30 +Total Patreon,,100.00,9.30 +Net Movement,,,90.70 +,,, +Patreon Donations,,, +"Oct. 1, 2015",Income - Patreon Donations,0.00,100.00 +Total Patreon Donations,,0.00,100.00 +Net Movement,,,100.00 +,,, +Payment Fees,,, +"Oct. 1, 2015",Expense - CC Fees,4.30,0.00 +Total Payment Fees,,4.30,0.00 +Net Movement,,,4.30 +,,, +Patreon Fees,,, +"Oct. 1, 2015",Expense - Patreon Fees,5.00,0.00 +Total Patreon Fees,,5.00,0.00 +Net Movement,,,5.00 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2015-11-01 to 2015-11-30.csv b/finances/HaxeFlixel Detailed General Ledger from 2015-11-01 to 2015-11-30.csv new file mode 100644 index 000000000..8b80607ea --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2015-11-01 to 2015-11-30.csv @@ -0,0 +1,23 @@ +date,transaction,debit,credit +Patreon,,, +"Nov. 1, 2015",Income - Patreon Donations,118.00,0.00 +"Nov. 1, 2015",Expense - CC Fees,0.00,5.72 +"Nov. 1, 2015",Expense - Patreon Fees,0.00,5.90 +Total Patreon,,118.00,11.62 +Net Movement,,,106.38 +,,, +Patreon Donations,,, +"Nov. 1, 2015",Income - Patreon Donations,0.00,118.00 +Total Patreon Donations,,0.00,118.00 +Net Movement,,,118.00 +,,, +Payment Fees,,, +"Nov. 1, 2015",Expense - CC Fees,5.72,0.00 +Total Payment Fees,,5.72,0.00 +Net Movement,,,5.72 +,,, +Patreon Fees,,, +"Nov. 1, 2015",Expense - Patreon Fees,5.90,0.00 +Total Patreon Fees,,5.90,0.00 +Net Movement,,,5.90 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2015-12-01 to 2015-12-31.csv b/finances/HaxeFlixel Detailed General Ledger from 2015-12-01 to 2015-12-31.csv new file mode 100644 index 000000000..badbe6169 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2015-12-01 to 2015-12-31.csv @@ -0,0 +1,23 @@ +date,transaction,debit,credit +Patreon,,, +"Dec. 1, 2015",Income - Patreon Donations,125.00,0.00 +"Dec. 1, 2015",Expense - CC Fees,0.00,6.08 +"Dec. 1, 2015",Expense - Patreon Fees,0.00,6.25 +Total Patreon,,125.00,12.33 +Net Movement,,,112.67 +,,, +Patreon Donations,,, +"Dec. 1, 2015",Income - Patreon Donations,0.00,125.00 +Total Patreon Donations,,0.00,125.00 +Net Movement,,,125.00 +,,, +Payment Fees,,, +"Dec. 1, 2015",Expense - CC Fees,6.08,0.00 +Total Payment Fees,,6.08,0.00 +Net Movement,,,6.08 +,,, +Patreon Fees,,, +"Dec. 1, 2015",Expense - Patreon Fees,6.25,0.00 +Total Patreon Fees,,6.25,0.00 +Net Movement,,,6.25 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2016-01-01 to 2016-01-31.csv b/finances/HaxeFlixel Detailed General Ledger from 2016-01-01 to 2016-01-31.csv new file mode 100644 index 000000000..d38857e0b --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2016-01-01 to 2016-01-31.csv @@ -0,0 +1,41 @@ +date,transaction,debit,credit +Patreon,,, +"Jan. 1, 2016",Expense - Patreon Fees,0.00,6.50 +"Jan. 1, 2016",Expense - CC Fees,0.00,6.16 +"Jan. 22, 2016",Transfer to Treasurer,0.00,632.56 +"Jan. 1, 2016",Income - Patreon Donations,130.00,0.00 +Total Patreon,,130.00,645.22 +Net Movement,,,(515.22) +,,, +Treasurer,,, +"Jan. 22, 2016",Transfer from Patreon,632.56,0.00 +"Jan. 22, 2016",Expense - US Taxes (25% of 632.56),0.00,158.14 +"Jan. 22, 2016",Expense - Donation to Jeff Ward (http://jcward.com/),0.00,100.00 +Total Treasurer,,632.56,258.14 +Net Movement,,,374.42 +,,, +Patreon Donations,,, +"Jan. 1, 2016",Income - Patreon Donations,0.00,130.00 +Total Patreon Donations,,0.00,130.00 +Net Movement,,,130.00 +,,, +Payment Fees,,, +"Jan. 1, 2016",Expense - CC Fees,6.16,0.00 +Total Payment Fees,,6.16,0.00 +Net Movement,,,6.16 +,,, +Patreon Fees,,, +"Jan. 1, 2016",Expense - Patreon Fees,6.50,0.00 +Total Patreon Fees,,6.50,0.00 +Net Movement,,,6.50 +,,, +Tax Fees,,, +"Jan. 22, 2016",Expense - US Taxes (25% of 632.56),158.14,0.00 +Total Tax Fees,,158.14,0.00 +Net Movement,,,158.14 +,,, +Development Services,,, +"Jan. 22, 2016",Expense - Donation to Jeff Ward (http://jcward.com/),100.00,0.00 +Total Development Services,,100.00,0.00 +Net Movement,,,100.00 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2016-02-01 to 2016-02-29.csv b/finances/HaxeFlixel Detailed General Ledger from 2016-02-01 to 2016-02-29.csv new file mode 100644 index 000000000..42c64fcc5 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2016-02-01 to 2016-02-29.csv @@ -0,0 +1,23 @@ +date,transaction,debit,credit +Patreon,,, +"Feb. 1, 2016",Expense - Patreon Fees,0.00,6.50 +"Feb. 1, 2016",Expense - CC Fees,0.00,5.85 +"Feb. 1, 2016",Income - Patreon Donations,130.00,0.00 +Total Patreon,,130.00,12.35 +Net Movement,,,117.65 +,,, +Patreon Donations,,, +"Feb. 1, 2016",Income - Patreon Donations,0.00,130.00 +Total Patreon Donations,,0.00,130.00 +Net Movement,,,130.00 +,,, +Payment Fees,,, +"Feb. 1, 2016",Expense - CC Fees,5.85,0.00 +Total Payment Fees,,5.85,0.00 +Net Movement,,,5.85 +,,, +Patreon Fees,,, +"Feb. 1, 2016",Expense - Patreon Fees,6.50,0.00 +Total Patreon Fees,,6.50,0.00 +Net Movement,,,6.50 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2016-03-01 to 2016-03-31.csv b/finances/HaxeFlixel Detailed General Ledger from 2016-03-01 to 2016-03-31.csv new file mode 100644 index 000000000..b0e0909f7 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2016-03-01 to 2016-03-31.csv @@ -0,0 +1,35 @@ +date,transaction,debit,credit +Patreon,,, +"March 1, 2016",Expense - CC Fees,0.00,6.38 +"March 1, 2016",Income - Patreon Donations,140.00,0.00 +"March 1, 2016",Expense - Patreon Fees,0.00,7.00 +Total Patreon,,140.00,13.38 +Net Movement,,,126.62 +,,, +Treasurer,,, +"March 15, 2016",Expense - Donation to Mika Palmu (FlashDevelop) for work improving HaxeFlixel Setup,0.00,150.00 +"March 15, 2016",Expense - PayPal Transfer Fee,0.00,0.75 +Total Treasurer,,0.00,150.75 +Net Movement,,,(150.75) +,,, +Patreon Donations,,, +"March 1, 2016",Income - Patreon Donations,0.00,140.00 +Total Patreon Donations,,0.00,140.00 +Net Movement,,,140.00 +,,, +Payment Fees,,, +"March 1, 2016",Expense - CC Fees,6.38,0.00 +"March 15, 2016",Expense - PayPal Transfer Fee,0.75,0.00 +Total Payment Fees,,7.13,0.00 +Net Movement,,,7.13 +,,, +Patreon Fees,,, +"March 1, 2016",Expense - Patreon Fees,7.00,0.00 +Total Patreon Fees,,7.00,0.00 +Net Movement,,,7.00 +,,, +Development Services,,, +"March 15, 2016",Expense - Donation to Mika Palmu (FlashDevelop) for work improving HaxeFlixel Setup,150.00,0.00 +Total Development Services,,150.00,0.00 +Net Movement,,,150.00 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2016-04-01 to 2016-04-30.csv b/finances/HaxeFlixel Detailed General Ledger from 2016-04-01 to 2016-04-30.csv new file mode 100644 index 000000000..a8f59e18d --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2016-04-01 to 2016-04-30.csv @@ -0,0 +1,23 @@ +date,transaction,debit,credit +Patreon,,, +"April 1, 2016",Income - Patreon Donations,151.00,0.00 +"April 1, 2016",Expense - Patreon Fees,0.00,7.55 +"April 1, 2016",Expense - CC Fees,0.00,7.00 +Total Patreon,,151.00,14.55 +Net Movement,,,136.45 +,,, +Patreon Donations,,, +"April 1, 2016",Income - Patreon Donations,0.00,151.00 +Total Patreon Donations,,0.00,151.00 +Net Movement,,,151.00 +,,, +Payment Fees,,, +"April 1, 2016",Expense - CC Fees,7.00,0.00 +Total Payment Fees,,7.00,0.00 +Net Movement,,,7.00 +,,, +Patreon Fees,,, +"April 1, 2016",Expense - Patreon Fees,7.55,0.00 +Total Patreon Fees,,7.55,0.00 +Net Movement,,,7.55 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2016-05-01 to 2016-05-31.csv b/finances/HaxeFlixel Detailed General Ledger from 2016-05-01 to 2016-05-31.csv new file mode 100644 index 000000000..94237ad3f --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2016-05-01 to 2016-05-31.csv @@ -0,0 +1,35 @@ +date,transaction,debit,credit +Patreon,,, +"May 1, 2016",Income - Patreon Donations,153.16,0.00 +"May 1, 2016",Expense - CC Fees,0.00,7.09 +"May 2, 2016",Expense - Patreon Fees,0.00,7.66 +Total Patreon,,153.16,14.75 +Net Movement,,,138.41 +,,, +Treasurer,,, +"May 2, 2016",Income - Discover Haxeflixel Book Contributions from Leonardo Cavaletti,96.77,0.00 +"May 31, 2016",Income - Discover Haxeflixel Book Contributions from Leonardo Cavaletti,26.31,0.00 +Total Treasurer,,123.08,0.00 +Net Movement,,,123.08 +,,, +Patreon Donations,,, +"May 1, 2016",Income - Patreon Donations,0.00,153.16 +Total Patreon Donations,,0.00,153.16 +Net Movement,,,153.16 +,,, +Book Sales,,, +"May 2, 2016",Income - Discover Haxeflixel Book Contributions from Leonardo Cavaletti,0.00,96.77 +"May 31, 2016",Income - Discover Haxeflixel Book Contributions from Leonardo Cavaletti,0.00,26.31 +Total Book Sales,,0.00,123.08 +Net Movement,,,123.08 +,,, +Payment Fees,,, +"May 1, 2016",Expense - CC Fees,7.09,0.00 +Total Payment Fees,,7.09,0.00 +Net Movement,,,7.09 +,,, +Patreon Fees,,, +"May 2, 2016",Expense - Patreon Fees,7.66,0.00 +Total Patreon Fees,,7.66,0.00 +Net Movement,,,7.66 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2016-06-01 to 2016-06-30.csv b/finances/HaxeFlixel Detailed General Ledger from 2016-06-01 to 2016-06-30.csv new file mode 100644 index 000000000..5d7f1d80e --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2016-06-01 to 2016-06-30.csv @@ -0,0 +1,33 @@ +date,transaction,debit,credit +Patreon,,, +"June 1, 2016",Income - Patreon Donations,160.16,0.00 +"June 1, 2016",Expense - CC Fees,0.00,7.50 +"June 1, 2016",Expense - Patreon Fees,0.00,8.01 +Total Patreon,,160.16,15.51 +Net Movement,,,144.65 +,,, +Treasurer,,, +"June 29, 2016",Income - Discover Haxeflixel Book Contributions from Leonardo Cavaletti,11.73,0.00 +Total Treasurer,,11.73,0.00 +Net Movement,,,11.73 +,,, +Patreon Donations,,, +"June 1, 2016",Income - Patreon Donations,0.00,160.16 +Total Patreon Donations,,0.00,160.16 +Net Movement,,,160.16 +,,, +Book Sales,,, +"June 29, 2016",Income - Discover Haxeflixel Book Contributions from Leonardo Cavaletti,0.00,11.73 +Total Book Sales,,0.00,11.73 +Net Movement,,,11.73 +,,, +Payment Fees,,, +"June 1, 2016",Expense - CC Fees,7.50,0.00 +Total Payment Fees,,7.50,0.00 +Net Movement,,,7.50 +,,, +Patreon Fees,,, +"June 1, 2016",Expense - Patreon Fees,8.01,0.00 +Total Patreon Fees,,8.01,0.00 +Net Movement,,,8.01 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2016-07-01 to 2016-07-31.csv b/finances/HaxeFlixel Detailed General Ledger from 2016-07-01 to 2016-07-31.csv new file mode 100644 index 000000000..c6b589277 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2016-07-01 to 2016-07-31.csv @@ -0,0 +1,23 @@ +date,transaction,debit,credit +Patreon,,, +"July 1, 2016",Income - Patreon Donations,164.16,0.00 +"July 1, 2016",Expense - Patreon Fees,0.00,8.21 +"July 1, 2016",Expense - Processing Fees,0.00,7.93 +Total Patreon,,164.16,16.14 +Net Movement,,,148.02 +,,, +Patreon Donations,,, +"July 1, 2016",Income - Patreon Donations,0.00,164.16 +Total Patreon Donations,,0.00,164.16 +Net Movement,,,164.16 +,,, +Payment Fees,,, +"July 1, 2016",Expense - Processing Fees,7.93,0.00 +Total Payment Fees,,7.93,0.00 +Net Movement,,,7.93 +,,, +Patreon Fees,,, +"July 1, 2016",Expense - Patreon Fees,8.21,0.00 +Total Patreon Fees,,8.21,0.00 +Net Movement,,,8.21 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2016-08-01 to 2016-08-31.csv b/finances/HaxeFlixel Detailed General Ledger from 2016-08-01 to 2016-08-31.csv new file mode 100644 index 000000000..67c3d0237 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2016-08-01 to 2016-08-31.csv @@ -0,0 +1,33 @@ +date,transaction,debit,credit +Patreon,,, +"Aug. 1, 2016",Income - Patreon Donations,187.00,0.00 +"Aug. 1, 2016",Expense - Processing Fees,0.00,8.76 +"Aug. 1, 2016",Expense - Patreon Fees,0.00,9.35 +Total Patreon,,187.00,18.11 +Net Movement,,,168.89 +,,, +Treasurer,,, +"Aug. 9, 2016",Income - Discover Haxeflixel Book Contributions from Leonardo Cavaletti,11.69,0.00 +Total Treasurer,,11.69,0.00 +Net Movement,,,11.69 +,,, +Patreon Donations,,, +"Aug. 1, 2016",Income - Patreon Donations,0.00,187.00 +Total Patreon Donations,,0.00,187.00 +Net Movement,,,187.00 +,,, +Book Sales,,, +"Aug. 9, 2016",Income - Discover Haxeflixel Book Contributions from Leonardo Cavaletti,0.00,11.69 +Total Book Sales,,0.00,11.69 +Net Movement,,,11.69 +,,, +Payment Fees,,, +"Aug. 1, 2016",Expense - Processing Fees,8.76,0.00 +Total Payment Fees,,8.76,0.00 +Net Movement,,,8.76 +,,, +Patreon Fees,,, +"Aug. 1, 2016",Expense - Patreon Fees,9.35,0.00 +Total Patreon Fees,,9.35,0.00 +Net Movement,,,9.35 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2016-09-01 to 2016-09-30.csv b/finances/HaxeFlixel Detailed General Ledger from 2016-09-01 to 2016-09-30.csv new file mode 100644 index 000000000..dfb6ad7c0 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2016-09-01 to 2016-09-30.csv @@ -0,0 +1,41 @@ +date,transaction,debit,credit +Patreon,,, +"Sept. 1, 2016",Income - Patreon Donations,179.00,0.00 +"Sept. 1, 2016",Expense - Processing Fees,0.00,8.11 +"Sept. 1, 2016",Expense - Patreon Fees,0.00,8.95 +Total Patreon,,179.00,17.06 +Net Movement,,,161.94 +,,, +Treasurer,,, +"Sept. 4, 2016",Income - Discover Haxeflixel Book Contributions from Leonardo Cavaletti,17.58,0.00 +"Sept. 28, 2016",Expense - PayPal Transfer Fee,0.00,0.25 +"Sept. 28, 2016",Expense - Bounty claimed by PeyTy (https://github.com/HaxeFlixel/flixel/issues/1753),0.00,50.00 +Total Treasurer,,17.58,50.25 +Net Movement,,,(32.67) +,,, +Patreon Donations,,, +"Sept. 1, 2016",Income - Patreon Donations,0.00,179.00 +Total Patreon Donations,,0.00,179.00 +Net Movement,,,179.00 +,,, +Book Sales,,, +"Sept. 4, 2016",Income - Discover Haxeflixel Book Contributions from Leonardo Cavaletti,0.00,17.58 +Total Book Sales,,0.00,17.58 +Net Movement,,,17.58 +,,, +Payment Fees,,, +"Sept. 28, 2016",Expense - PayPal Transfer Fee,0.25,0.00 +"Sept. 1, 2016",Expense - Processing Fees,8.11,0.00 +Total Payment Fees,,8.36,0.00 +Net Movement,,,8.36 +,,, +Patreon Fees,,, +"Sept. 1, 2016",Expense - Patreon Fees,8.95,0.00 +Total Patreon Fees,,8.95,0.00 +Net Movement,,,8.95 +,,, +Development Services,,, +"Sept. 28, 2016",Expense - Bounty claimed by PeyTy (https://github.com/HaxeFlixel/flixel/issues/1753),50.00,0.00 +Total Development Services,,50.00,0.00 +Net Movement,,,50.00 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2016-10-01 to 2016-10-31.csv b/finances/HaxeFlixel Detailed General Ledger from 2016-10-01 to 2016-10-31.csv new file mode 100644 index 000000000..425b39b1d --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2016-10-01 to 2016-10-31.csv @@ -0,0 +1,33 @@ +date,transaction,debit,credit +Patreon,,, +"Oct. 1, 2016",Income - Patreon Donations,178.00,0.00 +"Oct. 1, 2016",Expense - Patreon Fees,0.00,8.90 +"Oct. 1, 2016",Expense - Processing Fees,0.00,8.01 +Total Patreon,,178.00,16.91 +Net Movement,,,161.09 +,,, +Treasurer,,, +"Oct. 31, 2016",Income - Discover Haxeflixel Book Contributions from Leonardo Cavaletti,46.72,0.00 +Total Treasurer,,46.72,0.00 +Net Movement,,,46.72 +,,, +Patreon Donations,,, +"Oct. 1, 2016",Income - Patreon Donations,0.00,178.00 +Total Patreon Donations,,0.00,178.00 +Net Movement,,,178.00 +,,, +Book Sales,,, +"Oct. 31, 2016",Income - Discover Haxeflixel Book Contributions from Leonardo Cavaletti,0.00,46.72 +Total Book Sales,,0.00,46.72 +Net Movement,,,46.72 +,,, +Payment Fees,,, +"Oct. 1, 2016",Expense - Processing Fees,8.01,0.00 +Total Payment Fees,,8.01,0.00 +Net Movement,,,8.01 +,,, +Patreon Fees,,, +"Oct. 1, 2016",Expense - Patreon Fees,8.90,0.00 +Total Patreon Fees,,8.90,0.00 +Net Movement,,,8.90 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2016-11-01 to 2016-11-30.csv b/finances/HaxeFlixel Detailed General Ledger from 2016-11-01 to 2016-11-30.csv new file mode 100644 index 000000000..eaef37e77 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2016-11-01 to 2016-11-30.csv @@ -0,0 +1,23 @@ +date,transaction,debit,credit +Patreon,,, +"Nov. 1, 2016",Income - Patreon Donations,173.00,0.00 +"Nov. 1, 2016",Expense - Processing Fees,0.00,8.01 +"Nov. 1, 2016",Expense - Patreon Fees,0.00,8.65 +Total Patreon,,173.00,16.66 +Net Movement,,,156.34 +,,, +Patreon Donations,,, +"Nov. 1, 2016",Income - Patreon Donations,0.00,173.00 +Total Patreon Donations,,0.00,173.00 +Net Movement,,,173.00 +,,, +Payment Fees,,, +"Nov. 1, 2016",Expense - Processing Fees,8.01,0.00 +Total Payment Fees,,8.01,0.00 +Net Movement,,,8.01 +,,, +Patreon Fees,,, +"Nov. 1, 2016",Expense - Patreon Fees,8.65,0.00 +Total Patreon Fees,,8.65,0.00 +Net Movement,,,8.65 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2016-12-01 to 2016-12-31.csv b/finances/HaxeFlixel Detailed General Ledger from 2016-12-01 to 2016-12-31.csv new file mode 100644 index 000000000..b69b8dccd --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2016-12-01 to 2016-12-31.csv @@ -0,0 +1,33 @@ +date,transaction,debit,credit +Patreon,,, +"Dec. 1, 2016",Income - Patreon Donations,173.00,0.00 +"Dec. 1, 2016",Expense - Processing Fees,0.00,7.77 +"Dec. 1, 2016",Expense - Patreon Fees,0.00,8.65 +Total Patreon,,173.00,16.42 +Net Movement,,,156.58 +,,, +Treasurer,,, +"Dec. 30, 2016",Income - Discover Haxeflixel Book Contributions from Leonardo Cavaletti,29.28,0.00 +Total Treasurer,,29.28,0.00 +Net Movement,,,29.28 +,,, +Patreon Donations,,, +"Dec. 1, 2016",Income - Patreon Donations,0.00,173.00 +Total Patreon Donations,,0.00,173.00 +Net Movement,,,173.00 +,,, +Book Sales,,, +"Dec. 30, 2016",Income - Discover Haxeflixel Book Contributions from Leonardo Cavaletti,0.00,29.28 +Total Book Sales,,0.00,29.28 +Net Movement,,,29.28 +,,, +Payment Fees,,, +"Dec. 1, 2016",Expense - Processing Fees,7.77,0.00 +Total Payment Fees,,7.77,0.00 +Net Movement,,,7.77 +,,, +Patreon Fees,,, +"Dec. 1, 2016",Expense - Patreon Fees,8.65,0.00 +Total Patreon Fees,,8.65,0.00 +Net Movement,,,8.65 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2017-01-01 to 2017-01-31.csv b/finances/HaxeFlixel Detailed General Ledger from 2017-01-01 to 2017-01-31.csv new file mode 100644 index 000000000..27edd9b48 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2017-01-01 to 2017-01-31.csv @@ -0,0 +1,23 @@ +date,transaction,debit,credit +Patreon,,, +"Jan. 1, 2017",Income - Patreon Donations,168.00,0.00 +"Jan. 1, 2017",Expense - Processing Fees,0.00,7.29 +"Jan. 1, 2017",Expense - Patreon Fees,0.00,8.40 +Total Patreon,,168.00,15.69 +Net Movement,,,152.31 +,,, +Patreon Donations,,, +"Jan. 1, 2017",Income - Patreon Donations,0.00,168.00 +Total Patreon Donations,,0.00,168.00 +Net Movement,,,168.00 +,,, +Payment Fees,,, +"Jan. 1, 2017",Expense - Processing Fees,7.29,0.00 +Total Payment Fees,,7.29,0.00 +Net Movement,,,7.29 +,,, +Patreon Fees,,, +"Jan. 1, 2017",Expense - Patreon Fees,8.40,0.00 +Total Patreon Fees,,8.40,0.00 +Net Movement,,,8.40 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2017-02-01 to 2017-02-28.csv b/finances/HaxeFlixel Detailed General Ledger from 2017-02-01 to 2017-02-28.csv new file mode 100644 index 000000000..4a534061e --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2017-02-01 to 2017-02-28.csv @@ -0,0 +1,39 @@ +date,transaction,debit,credit +Patreon,,, +"Feb. 1, 2017",Income - Patreon Donations,157.00,0.00 +"Feb. 1, 2017",Expense - Processing Fees,0.00,6.97 +"Feb. 1, 2017",Expense - Patreon Fees,0.00,7.85 +Total Patreon,,157.00,14.82 +Net Movement,,,142.18 +,,, +Treasurer,,, +"Feb. 7, 2017",Expense - Donation to Jens Fischer (Gama11) for long term HaxeFlixel support,0.00,330.00 +"Feb. 25, 2017",Income - Discover Haxeflixel Book Contributions from Leonardo Cavaletti,29.70,0.00 +Total Treasurer,,29.70,330.00 +Net Movement,,,(300.30) +,,, +Patreon Donations,,, +"Feb. 1, 2017",Income - Patreon Donations,0.00,157.00 +Total Patreon Donations,,0.00,157.00 +Net Movement,,,157.00 +,,, +Book Sales,,, +"Feb. 25, 2017",Income - Discover Haxeflixel Book Contributions from Leonardo Cavaletti,0.00,29.70 +Total Book Sales,,0.00,29.70 +Net Movement,,,29.70 +,,, +Payment Fees,,, +"Feb. 1, 2017",Expense - Processing Fees,6.97,0.00 +Total Payment Fees,,6.97,0.00 +Net Movement,,,6.97 +,,, +Patreon Fees,,, +"Feb. 1, 2017",Expense - Patreon Fees,7.85,0.00 +Total Patreon Fees,,7.85,0.00 +Net Movement,,,7.85 +,,, +Development Services,,, +"Feb. 7, 2017",Expense - Donation to Jens Fischer (Gama11) for long term HaxeFlixel support,330.00,0.00 +Total Development Services,,330.00,0.00 +Net Movement,,,330.00 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2017-03-01 to 2017-03-31.csv b/finances/HaxeFlixel Detailed General Ledger from 2017-03-01 to 2017-03-31.csv new file mode 100644 index 000000000..d87930205 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2017-03-01 to 2017-03-31.csv @@ -0,0 +1,23 @@ +date,transaction,debit,credit +Patreon,,, +"March 1, 2017",Income - Patreon Donations,156.00,0.00 +"March 1, 2017",Expense - Processing Fees,0.00,6.89 +"March 1, 2017",Expense - Patreon Fees,0.00,7.80 +Total Patreon,,156.00,14.69 +Net Movement,,,141.31 +,,, +Patreon Donations,,, +"March 1, 2017",Income - Patreon Donations,0.00,156.00 +Total Patreon Donations,,0.00,156.00 +Net Movement,,,156.00 +,,, +Payment Fees,,, +"March 1, 2017",Expense - Processing Fees,6.89,0.00 +Total Payment Fees,,6.89,0.00 +Net Movement,,,6.89 +,,, +Patreon Fees,,, +"March 1, 2017",Expense - Patreon Fees,7.80,0.00 +Total Patreon Fees,,7.80,0.00 +Net Movement,,,7.80 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2017-04-01 to 2017-04-30.csv b/finances/HaxeFlixel Detailed General Ledger from 2017-04-01 to 2017-04-30.csv new file mode 100644 index 000000000..ec5b46cf7 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2017-04-01 to 2017-04-30.csv @@ -0,0 +1,23 @@ +date,transaction,debit,credit +Patreon,,, +"April 1, 2017",Income - Patreon Donations,155.00,0.00 +"April 1, 2017",Expense - Processing Fees,0.00,7.39 +"April 1, 2017",Expense - Patreon Fees,0.00,7.75 +Total Patreon,,155.00,15.14 +Net Movement,,,139.86 +,,, +Patreon Donations,,, +"April 1, 2017",Income - Patreon Donations,0.00,155.00 +Total Patreon Donations,,0.00,155.00 +Net Movement,,,155.00 +,,, +Payment Fees,,, +"April 1, 2017",Expense - Processing Fees,7.39,0.00 +Total Payment Fees,,7.39,0.00 +Net Movement,,,7.39 +,,, +Patreon Fees,,, +"April 1, 2017",Expense - Patreon Fees,7.75,0.00 +Total Patreon Fees,,7.75,0.00 +Net Movement,,,7.75 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2017-05-01 to 2017-05-31.csv b/finances/HaxeFlixel Detailed General Ledger from 2017-05-01 to 2017-05-31.csv new file mode 100644 index 000000000..1dd4d52b6 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2017-05-01 to 2017-05-31.csv @@ -0,0 +1,23 @@ +date,transaction,debit,credit +Patreon,,, +"May 1, 2017",Expense,0.00,7.32 +"May 1, 2017",Expense,0.00,7.70 +"May 1, 2017",Income - Patreon Donations,154.00,0.00 +Total Patreon,,154.00,15.02 +Net Movement,,,138.98 +,,, +Patreon Donations,,, +"May 1, 2017",Income - Patreon Donations,0.00,154.00 +Total Patreon Donations,,0.00,154.00 +Net Movement,,,154.00 +,,, +Payment Fees,,, +"May 1, 2017",Expense,7.32,0.00 +Total Payment Fees,,7.32,0.00 +Net Movement,,,7.32 +,,, +Patreon Fees,,, +"May 1, 2017",Expense,7.70,0.00 +Total Patreon Fees,,7.70,0.00 +Net Movement,,,7.70 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2017-06-01 to 2017-06-30.csv b/finances/HaxeFlixel Detailed General Ledger from 2017-06-01 to 2017-06-30.csv new file mode 100644 index 000000000..d0cbb7d03 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2017-06-01 to 2017-06-30.csv @@ -0,0 +1,33 @@ +date,transaction,debit,credit +Patreon,,, +"June 1, 2017",Income - Patreon Donations,147.00,0.00 +"June 1, 2017",Expense - Processing Fees,0.00,6.64 +"June 1, 2017",Expense - Patreon Fees,0.00,7.35 +Total Patreon,,147.00,13.99 +Net Movement,,,133.01 +,,, +Treasurer,,, +"June 29, 2017",Income - Discover Haxeflixel Book Contributions from Leonardo Cavaletti,26.19,0.00 +Total Treasurer,,26.19,0.00 +Net Movement,,,26.19 +,,, +Patreon Donations,,, +"June 1, 2017",Income - Patreon Donations,0.00,147.00 +Total Patreon Donations,,0.00,147.00 +Net Movement,,,147.00 +,,, +Book Sales,,, +"June 29, 2017",Income - Discover Haxeflixel Book Contributions from Leonardo Cavaletti,0.00,26.19 +Total Book Sales,,0.00,26.19 +Net Movement,,,26.19 +,,, +Payment Fees,,, +"June 1, 2017",Expense - Processing Fees,6.64,0.00 +Total Payment Fees,,6.64,0.00 +Net Movement,,,6.64 +,,, +Patreon Fees,,, +"June 1, 2017",Expense - Patreon Fees,7.35,0.00 +Total Patreon Fees,,7.35,0.00 +Net Movement,,,7.35 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2017-07-01 to 2017-07-31.csv b/finances/HaxeFlixel Detailed General Ledger from 2017-07-01 to 2017-07-31.csv new file mode 100644 index 000000000..d1a473c31 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2017-07-01 to 2017-07-31.csv @@ -0,0 +1,23 @@ +date,transaction,debit,credit +Patreon,,, +"July 1, 2017",Income - Patreon Donations,148.00,0.00 +"July 1, 2017",Expense - Processing Fees,0.00,6.66 +"July 1, 2017",Expense - Patreon Fees,0.00,7.40 +Total Patreon,,148.00,14.06 +Net Movement,,,133.94 +,,, +Patreon Donations,,, +"July 1, 2017",Income - Patreon Donations,0.00,148.00 +Total Patreon Donations,,0.00,148.00 +Net Movement,,,148.00 +,,, +Payment Fees,,, +"July 1, 2017",Expense - Processing Fees,6.66,0.00 +Total Payment Fees,,6.66,0.00 +Net Movement,,,6.66 +,,, +Patreon Fees,,, +"July 1, 2017",Expense - Patreon Fees,7.40,0.00 +Total Patreon Fees,,7.40,0.00 +Net Movement,,,7.40 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2017-08-01 to 2017-08-31.csv b/finances/HaxeFlixel Detailed General Ledger from 2017-08-01 to 2017-08-31.csv new file mode 100644 index 000000000..072990e02 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2017-08-01 to 2017-08-31.csv @@ -0,0 +1,47 @@ +date,transaction,debit,credit +Patreon,,, +"Aug. 1, 2017",Income - Patreon Donations,139.00,0.00 +"Aug. 1, 2017",Expense - Processing Fees,0.00,6.07 +"Aug. 1, 2017",Expense - Patreon Fees,0.00,6.95 +"Aug. 22, 2017",Transfer to Treasurer,0.00,"2,723.15" +Total Patreon,,139.00,"2,736.17" +Net Movement,,,"(2,597.17)" +,,, +Treasurer,,, +"Aug. 22, 2017",Transfer from Patreon,"2,723.15",0.00 +"Aug. 22, 2017",Expense - PayPal Transfer Fee,0.00,19.00 +"Aug. 26, 2017",Expense - Donation to msghero for blog post published on 08/26/2017,0.00,50.00 +"Aug. 22, 2017",Expense - US Income Taxes (25% of 2704.15),0.00,676.04 +Total Treasurer,,"2,723.15",745.04 +Net Movement,,,"1,978.11" +,,, +Patreon Donations,,, +"Aug. 1, 2017",Income - Patreon Donations,0.00,139.00 +Total Patreon Donations,,0.00,139.00 +Net Movement,,,139.00 +,,, +Payment Fees,,, +"Aug. 1, 2017",Expense - Processing Fees,6.07,0.00 +Total Payment Fees,,6.07,0.00 +Net Movement,,,6.07 +,,, +Patreon Fees,,, +"Aug. 1, 2017",Expense - Patreon Fees,6.95,0.00 +Total Patreon Fees,,6.95,0.00 +Net Movement,,,6.95 +,,, +PayPal Fee,,, +"Aug. 22, 2017",Expense - PayPal Transfer Fee,19.00,0.00 +Total PayPal Fee,,19.00,0.00 +Net Movement,,,19.00 +,,, +Tax Fees,,, +"Aug. 22, 2017",Expense - US Income Taxes (25% of 2704.15),676.04,0.00 +Total Tax Fees,,676.04,0.00 +Net Movement,,,676.04 +,,, +Development Services,,, +"Aug. 26, 2017",Expense - Donation to msghero for blog post published on 08/26/2017,50.00,0.00 +Total Development Services,,50.00,0.00 +Net Movement,,,50.00 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2017-09-01 to 2017-09-30.csv b/finances/HaxeFlixel Detailed General Ledger from 2017-09-01 to 2017-09-30.csv new file mode 100644 index 000000000..bd101ba1a --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2017-09-01 to 2017-09-30.csv @@ -0,0 +1,39 @@ +date,transaction,debit,credit +Patreon,,, +"Sept. 1, 2017",Income - Patreon Donations,139.00,0.00 +"Sept. 1, 2017",Expense - Processing Fees,0.00,6.17 +"Sept. 1, 2017",Expense - Patreon Fees,0.00,6.95 +Total Patreon,,139.00,13.12 +Net Movement,,,125.88 +,,, +Treasurer,,, +"Sept. 6, 2017",Expense - Donation to Tim Hely for sponsoring a 09/2017 game jam,0.00,150.00 +"Sept. 17, 2017",Income - Discover Haxeflixel Book Contributions from Leonardo Cavaletti,32.05,0.00 +Total Treasurer,,32.05,150.00 +Net Movement,,,(117.95) +,,, +Patreon Donations,,, +"Sept. 1, 2017",Income - Patreon Donations,0.00,139.00 +Total Patreon Donations,,0.00,139.00 +Net Movement,,,139.00 +,,, +Book Sales,,, +"Sept. 17, 2017",Income - Discover Haxeflixel Book Contributions from Leonardo Cavaletti,0.00,32.05 +Total Book Sales,,0.00,32.05 +Net Movement,,,32.05 +,,, +Payment Fees,,, +"Sept. 1, 2017",Expense - Processing Fees,6.17,0.00 +Total Payment Fees,,6.17,0.00 +Net Movement,,,6.17 +,,, +Patreon Fees,,, +"Sept. 1, 2017",Expense - Patreon Fees,6.95,0.00 +Total Patreon Fees,,6.95,0.00 +Net Movement,,,6.95 +,,, +Development Services,,, +"Sept. 6, 2017",Expense - Donation to Tim Hely for sponsoring a 09/2017 game jam,150.00,0.00 +Total Development Services,,150.00,0.00 +Net Movement,,,150.00 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2017-10-01 to 2017-10-31.csv b/finances/HaxeFlixel Detailed General Ledger from 2017-10-01 to 2017-10-31.csv new file mode 100644 index 000000000..f63e7eafd --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2017-10-01 to 2017-10-31.csv @@ -0,0 +1,23 @@ +date,transaction,debit,credit +Patreon,,, +"Oct. 1, 2017",Income - Patreon Donations,139.00,0.00 +"Oct. 1, 2017",Expense - Processing Fees,0.00,6.17 +"Oct. 1, 2017",Expense - Patreon Fees,0.00,6.95 +Total Patreon,,139.00,13.12 +Net Movement,,,125.88 +,,, +Patreon Donations,,, +"Oct. 1, 2017",Income - Patreon Donations,0.00,139.00 +Total Patreon Donations,,0.00,139.00 +Net Movement,,,139.00 +,,, +Payment Fees,,, +"Oct. 1, 2017",Expense - Processing Fees,6.17,0.00 +Total Payment Fees,,6.17,0.00 +Net Movement,,,6.17 +,,, +Patreon Fees,,, +"Oct. 1, 2017",Expense - Patreon Fees,6.95,0.00 +Total Patreon Fees,,6.95,0.00 +Net Movement,,,6.95 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2017-11-01 to 2017-11-30.csv b/finances/HaxeFlixel Detailed General Ledger from 2017-11-01 to 2017-11-30.csv new file mode 100644 index 000000000..79d7da574 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2017-11-01 to 2017-11-30.csv @@ -0,0 +1,23 @@ +date,transaction,debit,credit +Patreon,,, +"Nov. 1, 2017",Income - Patreon Donations,134.00,0.00 +"Nov. 1, 2017",Expense - Processing Fees,0.00,5.86 +"Nov. 1, 2017",Expense - Patreon Fees,0.00,6.70 +Total Patreon,,134.00,12.56 +Net Movement,,,121.44 +,,, +Patreon Donations,,, +"Nov. 1, 2017",Income - Patreon Donations,0.00,134.00 +Total Patreon Donations,,0.00,134.00 +Net Movement,,,134.00 +,,, +Payment Fees,,, +"Nov. 1, 2017",Expense - Processing Fees,5.86,0.00 +Total Payment Fees,,5.86,0.00 +Net Movement,,,5.86 +,,, +Patreon Fees,,, +"Nov. 1, 2017",Expense - Patreon Fees,6.70,0.00 +Total Patreon Fees,,6.70,0.00 +Net Movement,,,6.70 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2017-12-01 to 2017-12-31.csv b/finances/HaxeFlixel Detailed General Ledger from 2017-12-01 to 2017-12-31.csv new file mode 100644 index 000000000..d04ac1233 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2017-12-01 to 2017-12-31.csv @@ -0,0 +1,23 @@ +date,transaction,debit,credit +Patreon,,, +"Dec. 1, 2017",Income - Patreon Donations,129.00,0.00 +"Dec. 1, 2017",Expense - Processing Fees,0.00,5.55 +"Dec. 1, 2017",Expense - Patreon Fees,0.00,6.45 +Total Patreon,,129.00,12.00 +Net Movement,,,117.00 +,,, +Patreon Donations,,, +"Dec. 1, 2017",Income - Patreon Donations,0.00,129.00 +Total Patreon Donations,,0.00,129.00 +Net Movement,,,129.00 +,,, +Payment Fees,,, +"Dec. 1, 2017",Expense - Processing Fees,5.55,0.00 +Total Payment Fees,,5.55,0.00 +Net Movement,,,5.55 +,,, +Patreon Fees,,, +"Dec. 1, 2017",Expense - Patreon Fees,6.45,0.00 +Total Patreon Fees,,6.45,0.00 +Net Movement,,,6.45 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2018-01-01 to 2018-01-31.csv b/finances/HaxeFlixel Detailed General Ledger from 2018-01-01 to 2018-01-31.csv new file mode 100644 index 000000000..9a46974f0 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2018-01-01 to 2018-01-31.csv @@ -0,0 +1,33 @@ +date,transaction,debit,credit +Patreon,,, +"Jan. 1, 2018",Income - Patreon Donations,128.70,0.00 +"Jan. 1, 2018",Expense - Processing Fees,0.00,5.06 +"Jan. 1, 2018",Expense - Patreon Fees,0.00,6.44 +Total Patreon,,128.70,11.50 +Net Movement,,,117.20 +,,, +Treasurer,,, +"Jan. 20, 2018",Expense - MsgHero receivable,0.00,300.00 +Total Treasurer,,0.00,300.00 +Net Movement,,,(300.00) +,,, +Patreon Donations,,, +"Jan. 1, 2018",Income - Patreon Donations,0.00,128.70 +Total Patreon Donations,,0.00,128.70 +Net Movement,,,128.70 +,,, +Payment Fees,,, +"Jan. 1, 2018",Expense - Processing Fees,5.06,0.00 +Total Payment Fees,,5.06,0.00 +Net Movement,,,5.06 +,,, +Patreon Fees,,, +"Jan. 1, 2018",Expense - Patreon Fees,6.44,0.00 +Total Patreon Fees,,6.44,0.00 +Net Movement,,,6.44 +,,, +Development Services,,, +"Jan. 20, 2018",Expense - MsgHero receivable,300.00,0.00 +Total Development Services,,300.00,0.00 +Net Movement,,,300.00 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2018-02-01 to 2018-02-28.csv b/finances/HaxeFlixel Detailed General Ledger from 2018-02-01 to 2018-02-28.csv new file mode 100644 index 000000000..638993a08 --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2018-02-01 to 2018-02-28.csv @@ -0,0 +1,23 @@ +date,transaction,debit,credit +Patreon,,, +"Feb. 1, 2018",Income - Patreon Donations,128.70,0.00 +"Feb. 1, 2018",Expense - Processing Fees,0.00,5.01 +"Feb. 1, 2018",Expense - Patreon Fees,0.00,6.44 +Total Patreon,,128.70,11.45 +Net Movement,,,117.25 +,,, +Patreon Donations,,, +"Feb. 1, 2018",Income - Patreon Donations,0.00,128.70 +Total Patreon Donations,,0.00,128.70 +Net Movement,,,128.70 +,,, +Payment Fees,,, +"Feb. 1, 2018",Expense - Processing Fees,5.01,0.00 +Total Payment Fees,,5.01,0.00 +Net Movement,,,5.01 +,,, +Patreon Fees,,, +"Feb. 1, 2018",Expense - Patreon Fees,6.44,0.00 +Total Patreon Fees,,6.44,0.00 +Net Movement,,,6.44 +,,, diff --git a/finances/HaxeFlixel Detailed General Ledger from 2018-03-01 to 2018-03-31.csv b/finances/HaxeFlixel Detailed General Ledger from 2018-03-01 to 2018-03-31.csv new file mode 100644 index 000000000..c22d9d3df --- /dev/null +++ b/finances/HaxeFlixel Detailed General Ledger from 2018-03-01 to 2018-03-31.csv @@ -0,0 +1,43 @@ +date,transaction,debit,credit +Patreon,,, +"March 1, 2018",Income - Patreon Donations,128.70,0.00 +"March 1, 2018",Expense - Processing Fees,0.00,4.87 +"March 1, 2018",Expense - Patreon Fees,0.00,6.44 +"March 26, 2018",Transfer to Treasurer,0.00,842.04 +Total Patreon,,128.70,853.35 +Net Movement,,,(724.65) +,,, +Treasurer,,, +"March 26, 2018",Transfer from Patreon,842.04,0.00 +"March 26, 2018",Expense - Paypal Transfer Fee (1%),0.00,8.43 +"March 26, 2018",Expense - US Income Taxes (25% of 833.61),0.00,208.40 +"March 27, 2018",Expense - Donation to Jens Fischer (Gama11) for long term HaxeFlixel support,0.00,"2,400.00" +Total Treasurer,,842.04,"2,616.83" +Net Movement,,,"(1,774.79)" +,,, +Patreon Donations,,, +"March 1, 2018",Income - Patreon Donations,0.00,128.70 +Total Patreon Donations,,0.00,128.70 +Net Movement,,,128.70 +,,, +Payment Fees,,, +"March 1, 2018",Expense - Processing Fees,4.87,0.00 +Total Payment Fees,,4.87,0.00 +Net Movement,,,4.87 +,,, +Patreon Fees,,, +"March 26, 2018",Expense - Paypal Transfer Fee (1%),8.43,0.00 +"March 1, 2018",Expense - Patreon Fees,6.44,0.00 +Total Patreon Fees,,14.87,0.00 +Net Movement,,,14.87 +,,, +Tax Fees,,, +"March 26, 2018",Expense - US Income Taxes (25% of 833.61),208.40,0.00 +Total Tax Fees,,208.40,0.00 +Net Movement,,,208.40 +,,, +Development Services,,, +"March 27, 2018",Expense - Donation to Jens Fischer (Gama11) for long term HaxeFlixel support,"2,400.00",0.00 +Total Development Services,,"2,400.00",0.00 +Net Movement,,,"2,400.00" +,,, diff --git a/finances/HaxeFlixel Profit and Loss from 2018-04-01 to 2018-04-30.csv b/finances/HaxeFlixel Profit and Loss from 2018-04-01 to 2018-04-30.csv new file mode 100644 index 000000000..8f45448fd --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2018-04-01 to 2018-04-30.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2018-04-01 to 2018-04-30 +"" +ACCOUNT NUMBER,ACCOUNTS,"Apr 01, 2018 to Apr 30, 2018" +,Income, +,Patreon Donations,$126.70 +,Total Income,$126.70 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$126.70 +"" +,Operating Expenses, +,Patreon Fees,$6.34 +,Payment Fees,$4.81 +,Total Operating Expenses,$11.15 +"" +,Net Profit,$115.55 diff --git a/finances/HaxeFlixel Profit and Loss from 2018-05-01 to 2018-05-31.csv b/finances/HaxeFlixel Profit and Loss from 2018-05-01 to 2018-05-31.csv new file mode 100644 index 000000000..2e542425b --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2018-05-01 to 2018-05-31.csv @@ -0,0 +1,22 @@ +Profit and Loss +HaxeFlixel +Date Range: 2018-05-01 to 2018-05-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"May 01, 2018 to May 31, 2018" +,Income, +,Patreon Donations,$120.00 +,Total Income,$120.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$120.00 +"" +,Operating Expenses, +,Development Services,$200.00 +,Patreon Fees,$6.00 +,PayPal Fee,$2.26 +,Payment Fees,$4.17 +,Tax Fees,$55.78 +,Total Operating Expenses,$268.21 +"" +,Net Profit,-$148.21 diff --git a/finances/HaxeFlixel Profit and Loss from 2018-06-01 to 2018-06-30.csv b/finances/HaxeFlixel Profit and Loss from 2018-06-01 to 2018-06-30.csv new file mode 100644 index 000000000..a3ad6c196 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2018-06-01 to 2018-06-30.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2018-06-01 to 2018-06-30 +"" +ACCOUNT NUMBER,ACCOUNTS,"Jun 01, 2018 to Jun 30, 2018" +,Income, +,Patreon Donations,$110.00 +,Total Income,$110.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$110.00 +"" +,Operating Expenses, +,Patreon Fees,$5.50 +,Payment Fees,$3.85 +,Total Operating Expenses,$9.35 +"" +,Net Profit,$100.65 diff --git a/finances/HaxeFlixel Profit and Loss from 2018-07-01 to 2018-07-31.csv b/finances/HaxeFlixel Profit and Loss from 2018-07-01 to 2018-07-31.csv new file mode 100644 index 000000000..ba0b8e6c3 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2018-07-01 to 2018-07-31.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2018-07-01 to 2018-07-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Jul 01, 2018 to Jul 31, 2018" +,Income, +,Patreon Donations,$115.00 +,Total Income,$115.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$115.00 +"" +,Operating Expenses, +,Patreon Fees,$5.75 +,Payment Fees,$4.01 +,Total Operating Expenses,$9.76 +"" +,Net Profit,$105.24 diff --git a/finances/HaxeFlixel Profit and Loss from 2018-08-01 to 2018-08-31.csv b/finances/HaxeFlixel Profit and Loss from 2018-08-01 to 2018-08-31.csv new file mode 100644 index 000000000..11e572c36 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2018-08-01 to 2018-08-31.csv @@ -0,0 +1,22 @@ +Profit and Loss +HaxeFlixel +Date Range: 2018-08-01 to 2018-08-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Aug 01, 2018 to Aug 31, 2018" +,Income, +,Patreon Donations,$115.00 +,Total Income,$115.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$115.00 +"" +,Operating Expenses, +,Patreon Fees,$5.75 +,PayPal Fee,$8.11 +,Payment Fees,$3.98 +,Tax Fees,$77.79 +,Website Maintenance,$44.95 +,Total Operating Expenses,$140.58 +"" +,Net Profit,-$25.58 diff --git a/finances/HaxeFlixel Profit and Loss from 2018-09-01 to 2018-09-30.csv b/finances/HaxeFlixel Profit and Loss from 2018-09-01 to 2018-09-30.csv new file mode 100644 index 000000000..37e6fc089 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2018-09-01 to 2018-09-30.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2018-09-01 to 2018-09-30 +"" +ACCOUNT NUMBER,ACCOUNTS,"Sep 01, 2018 to Sep 30, 2018" +,Income, +,Patreon Donations,$107.00 +,Total Income,$107.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$107.00 +"" +,Operating Expenses, +,Patreon Fees,$5.35 +,Payment Fees,$3.67 +,Total Operating Expenses,$9.02 +"" +,Net Profit,$97.98 diff --git a/finances/HaxeFlixel Profit and Loss from 2018-10-01 to 2018-10-31.csv b/finances/HaxeFlixel Profit and Loss from 2018-10-01 to 2018-10-31.csv new file mode 100644 index 000000000..01df0d772 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2018-10-01 to 2018-10-31.csv @@ -0,0 +1,20 @@ +Profit and Loss +HaxeFlixel +Date Range: 2018-10-01 to 2018-10-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Oct 01, 2018 to Oct 31, 2018" +,Income, +,Patreon Donations,$107.00 +,Total Income,$107.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$107.00 +"" +,Operating Expenses, +,Development Services,$50.00 +,Patreon Fees,$5.35 +,Payment Fees,$3.67 +,Total Operating Expenses,$59.02 +"" +,Net Profit,$47.98 diff --git a/finances/HaxeFlixel Profit and Loss from 2018-11-01 to 2018-11-30.csv b/finances/HaxeFlixel Profit and Loss from 2018-11-01 to 2018-11-30.csv new file mode 100644 index 000000000..6b0853afd --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2018-11-01 to 2018-11-30.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2018-11-01 to 2018-11-30 +"" +ACCOUNT NUMBER,ACCOUNTS,"Nov 01, 2018 to Nov 30, 2018" +,Income, +,Patreon Donations,$93.00 +,Total Income,$93.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$93.00 +"" +,Operating Expenses, +,Patreon Fees,$4.65 +,Payment Fees,$3.36 +,Total Operating Expenses,$8.01 +"" +,Net Profit,$84.99 diff --git a/finances/HaxeFlixel Profit and Loss from 2018-12-01 to 2018-12-31.csv b/finances/HaxeFlixel Profit and Loss from 2018-12-01 to 2018-12-31.csv new file mode 100644 index 000000000..f67b21eef --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2018-12-01 to 2018-12-31.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2018-12-01 to 2018-12-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Dec 01, 2018 to Dec 31, 2018" +,Income, +,Patreon Donations,$88.00 +,Total Income,$88.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$88.00 +"" +,Operating Expenses, +,Patreon Fees,$4.40 +,Payment Fees,$3.24 +,Total Operating Expenses,$7.64 +"" +,Net Profit,$80.36 diff --git a/finances/HaxeFlixel Profit and Loss from 2019-01-01 to 2019-01-31.csv b/finances/HaxeFlixel Profit and Loss from 2019-01-01 to 2019-01-31.csv new file mode 100644 index 000000000..8c403da75 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2019-01-01 to 2019-01-31.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2019-01-01 to 2019-01-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Jan 01, 2019 to Jan 31, 2019" +,Income, +,Patreon Donations,$84.00 +,Total Income,$84.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$84.00 +"" +,Operating Expenses, +,Patreon Fees,$4.20 +,Payment Fees,$2.78 +,Total Operating Expenses,$6.98 +"" +,Net Profit,$77.02 diff --git a/finances/HaxeFlixel Profit and Loss from 2019-02-01 to 2019-02-28.csv b/finances/HaxeFlixel Profit and Loss from 2019-02-01 to 2019-02-28.csv new file mode 100644 index 000000000..5bace76c1 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2019-02-01 to 2019-02-28.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2019-02-01 to 2019-02-28 +"" +ACCOUNT NUMBER,ACCOUNTS,"Feb 01, 2019 to Feb 28, 2019" +,Income, +,Patreon Donations,$83.00 +,Total Income,$83.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$83.00 +"" +,Operating Expenses, +,Patreon Fees,$4.15 +,Payment Fees,$2.76 +,Total Operating Expenses,$6.91 +"" +,Net Profit,$76.09 diff --git a/finances/HaxeFlixel Profit and Loss from 2019-03-01 to 2019-03-31.csv b/finances/HaxeFlixel Profit and Loss from 2019-03-01 to 2019-03-31.csv new file mode 100644 index 000000000..5871dd3e9 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2019-03-01 to 2019-03-31.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2019-03-01 to 2019-03-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Mar 01, 2019 to Mar 31, 2019" +,Income, +,Patreon Donations,$83.00 +,Total Income,$83.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$83.00 +"" +,Operating Expenses, +,Patreon Fees,$4.15 +,Payment Fees,$2.71 +,Total Operating Expenses,$6.86 +"" +,Net Profit,$76.14 diff --git a/finances/HaxeFlixel Profit and Loss from 2019-04-01 to 2019-04-30.csv b/finances/HaxeFlixel Profit and Loss from 2019-04-01 to 2019-04-30.csv new file mode 100644 index 000000000..9c4cff5c2 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2019-04-01 to 2019-04-30.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2019-04-01 to 2019-04-30 +"" +ACCOUNT NUMBER,ACCOUNTS,"Apr 01, 2019 to Apr 30, 2019" +,Income, +,Patreon Donations,$78.00 +,Total Income,$78.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$78.00 +"" +,Operating Expenses, +,Patreon Fees,$3.90 +,Payment Fees,$2.66 +,Total Operating Expenses,$6.56 +"" +,Net Profit,$71.44 diff --git a/finances/HaxeFlixel Profit and Loss from 2019-05-01 to 2019-05-31.csv b/finances/HaxeFlixel Profit and Loss from 2019-05-01 to 2019-05-31.csv new file mode 100644 index 000000000..a389ba40a --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2019-05-01 to 2019-05-31.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2019-05-01 to 2019-05-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"May 01, 2019 to May 31, 2019" +,Income, +,Patreon Donations,$78.00 +,Total Income,$78.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$78.00 +"" +,Operating Expenses, +,Patreon Fees,$3.90 +,Payment Fees,$2.65 +,Total Operating Expenses,$6.55 +"" +,Net Profit,$71.45 diff --git a/finances/HaxeFlixel Profit and Loss from 2019-06-01 to 2019-06-30.csv b/finances/HaxeFlixel Profit and Loss from 2019-06-01 to 2019-06-30.csv new file mode 100644 index 000000000..987ed14da --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2019-06-01 to 2019-06-30.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2019-06-01 to 2019-06-30 +"" +ACCOUNT NUMBER,ACCOUNTS,"Jun 01, 2019 to Jun 30, 2019" +,Income, +,Patreon Donations,$78.00 +,Total Income,$78.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$78.00 +"" +,Operating Expenses, +,Patreon Fees,$3.90 +,Payment Fees,$2.60 +,Total Operating Expenses,$6.50 +"" +,Net Profit,$71.50 diff --git a/finances/HaxeFlixel Profit and Loss from 2019-07-01 to 2019-07-31.csv b/finances/HaxeFlixel Profit and Loss from 2019-07-01 to 2019-07-31.csv new file mode 100644 index 000000000..1b015ee07 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2019-07-01 to 2019-07-31.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2019-07-01 to 2019-07-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Jul 01, 2019 to Jul 31, 2019" +,Income, +,Patreon Donations,$78.00 +,Total Income,$78.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$78.00 +"" +,Operating Expenses, +,Patreon Fees,$3.90 +,Payment Fees,$2.60 +,Total Operating Expenses,$6.50 +"" +,Net Profit,$71.50 diff --git a/finances/HaxeFlixel Profit and Loss from 2019-08-01 to 2019-08-31.csv b/finances/HaxeFlixel Profit and Loss from 2019-08-01 to 2019-08-31.csv new file mode 100644 index 000000000..905526fd5 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2019-08-01 to 2019-08-31.csv @@ -0,0 +1,23 @@ +Profit and Loss +HaxeFlixel +Date Range: 2019-08-01 to 2019-08-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Aug 01, 2019 to Aug 31, 2019" +,Income, +,Patreon Donations,$78.00 +,Total Income,$78.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$78.00 +"" +,Operating Expenses, +,Development Services,$600.00 +,Patreon Fees,$3.90 +,PayPal Fee,$9.48 +,Payment Fees,$2.69 +,Tax Fees,$60.79 +,Website Maintenance,$300.00 +,Total Operating Expenses,$976.86 +"" +,Net Profit,-$898.86 diff --git a/finances/HaxeFlixel Profit and Loss from 2019-09-01 to 2019-09-30.csv b/finances/HaxeFlixel Profit and Loss from 2019-09-01 to 2019-09-30.csv new file mode 100644 index 000000000..b22bec544 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2019-09-01 to 2019-09-30.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2019-09-01 to 2019-09-30 +"" +ACCOUNT NUMBER,ACCOUNTS,"Sep 01, 2019 to Sep 30, 2019" +,Income, +,Patreon Donations,$78.00 +,Total Income,$78.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$78.00 +"" +,Operating Expenses, +,Patreon Fees,$3.90 +,Payment Fees,$2.68 +,Total Operating Expenses,$6.58 +"" +,Net Profit,$71.42 diff --git a/finances/HaxeFlixel Profit and Loss from 2019-10-01 to 2019-10-31.csv b/finances/HaxeFlixel Profit and Loss from 2019-10-01 to 2019-10-31.csv new file mode 100644 index 000000000..59b90d34f --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2019-10-01 to 2019-10-31.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2019-10-01 to 2019-10-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Oct 01, 2019 to Oct 31, 2019" +,Income, +,Patreon Donations,$78.00 +,Total Income,$78.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$78.00 +"" +,Operating Expenses, +,Patreon Fees,$3.90 +,Payment Fees,$2.70 +,Total Operating Expenses,$6.60 +"" +,Net Profit,$71.40 diff --git a/finances/HaxeFlixel Profit and Loss from 2019-11-01 to 2019-11-30.csv b/finances/HaxeFlixel Profit and Loss from 2019-11-01 to 2019-11-30.csv new file mode 100644 index 000000000..106a30eb5 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2019-11-01 to 2019-11-30.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2019-11-01 to 2019-11-30 +"" +ACCOUNT NUMBER,ACCOUNTS,"Nov 01, 2019 to Nov 30, 2019" +,Income, +,Patreon Donations,$78.00 +,Total Income,$78.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$78.00 +"" +,Operating Expenses, +,Patreon Fees,$3.90 +,Payment Fees,$2.69 +,Total Operating Expenses,$6.59 +"" +,Net Profit,$71.41 diff --git a/finances/HaxeFlixel Profit and Loss from 2019-12-01 to 2019-12-31.csv b/finances/HaxeFlixel Profit and Loss from 2019-12-01 to 2019-12-31.csv new file mode 100644 index 000000000..9c9dfcbb0 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2019-12-01 to 2019-12-31.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2019-12-01 to 2019-12-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Dec 01, 2019 to Dec 31, 2019" +,Income, +,Patreon Donations,$83.00 +,Total Income,$83.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$83.00 +"" +,Operating Expenses, +,PayPal Fee,$4.15 +,Payment Fees,$2.83 +,Total Operating Expenses,$6.98 +"" +,Net Profit,$76.02 diff --git a/finances/HaxeFlixel Profit and Loss from 2020-01-01 to 2020-01-31.csv b/finances/HaxeFlixel Profit and Loss from 2020-01-01 to 2020-01-31.csv new file mode 100644 index 000000000..0dd62a2c6 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2020-01-01 to 2020-01-31.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2020-01-01 to 2020-01-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Jan 01, 2020 to Jan 31, 2020" +,Income, +,Patreon Donations,$83.00 +,Total Income,$83.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$83.00 +"" +,Operating Expenses, +,Patreon Fees,$4.15 +,Payment Fees,$2.82 +,Total Operating Expenses,$6.97 +"" +,Net Profit,$76.03 diff --git a/finances/HaxeFlixel Profit and Loss from 2020-01.csv b/finances/HaxeFlixel Profit and Loss from 2020-01.csv new file mode 100644 index 000000000..0dd62a2c6 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2020-01.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2020-01-01 to 2020-01-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Jan 01, 2020 to Jan 31, 2020" +,Income, +,Patreon Donations,$83.00 +,Total Income,$83.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$83.00 +"" +,Operating Expenses, +,Patreon Fees,$4.15 +,Payment Fees,$2.82 +,Total Operating Expenses,$6.97 +"" +,Net Profit,$76.03 diff --git a/finances/HaxeFlixel Profit and Loss from 2020-02-01 to 2020-02-29.csv b/finances/HaxeFlixel Profit and Loss from 2020-02-01 to 2020-02-29.csv new file mode 100644 index 000000000..15f9a2469 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2020-02-01 to 2020-02-29.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2020-02-01 to 2020-02-29 +"" +ACCOUNT NUMBER,ACCOUNTS,"Feb 01, 2020 to Feb 29, 2020" +,Income, +,Patreon Donations,$83.00 +,Total Income,$83.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$83.00 +"" +,Operating Expenses, +,Patreon Fees,$4.15 +,Payment Fees,$2.81 +,Total Operating Expenses,$6.96 +"" +,Net Profit,$76.04 diff --git a/finances/HaxeFlixel Profit and Loss from 2020-02.csv b/finances/HaxeFlixel Profit and Loss from 2020-02.csv new file mode 100644 index 000000000..15f9a2469 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2020-02.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2020-02-01 to 2020-02-29 +"" +ACCOUNT NUMBER,ACCOUNTS,"Feb 01, 2020 to Feb 29, 2020" +,Income, +,Patreon Donations,$83.00 +,Total Income,$83.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$83.00 +"" +,Operating Expenses, +,Patreon Fees,$4.15 +,Payment Fees,$2.81 +,Total Operating Expenses,$6.96 +"" +,Net Profit,$76.04 diff --git a/finances/HaxeFlixel Profit and Loss from 2020-03.csv b/finances/HaxeFlixel Profit and Loss from 2020-03.csv new file mode 100644 index 000000000..8f5e2fcb4 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2020-03.csv @@ -0,0 +1,22 @@ +Profit and Loss +HaxeFlixel +Date Range: 2020-03-01 to 2020-03-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Mar 01, 2020 to Mar 31, 2020" +,Income, +,Patreon Donations,$83.00 +,Total Income,$83.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$83.00 +"" +,Operating Expenses, +,Game Jam Prize,$400.00 +,Patreon Fees,$4.15 +,PayPal Fee,$5.19 +,Payment Fees,$2.82 +,Tax Fees,$100.00 +,Total Operating Expenses,$512.16 +"" +,Net Profit,-$429.16 diff --git a/finances/HaxeFlixel Profit and Loss from 2020-04.csv b/finances/HaxeFlixel Profit and Loss from 2020-04.csv new file mode 100644 index 000000000..8ac91b7d6 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2020-04.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2020-04-01 to 2020-04-30 +"" +ACCOUNT NUMBER,ACCOUNTS,"Apr 01, 2020 to Apr 30, 2020" +,Income, +,Patreon Donations,$93.00 +,Total Income,$93.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$93.00 +"" +,Operating Expenses, +,Patreon Fees,$4.65 +,Payment Fees,$3.64 +,Total Operating Expenses,$8.29 +"" +,Net Profit,$84.71 diff --git a/finances/HaxeFlixel Profit and Loss from 2020-05.csv b/finances/HaxeFlixel Profit and Loss from 2020-05.csv new file mode 100644 index 000000000..8d642d59d --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2020-05.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2020-05-01 to 2020-05-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"May 01, 2020 to May 31, 2020" +,Income, +,Patreon Donations,$98.00 +,Total Income,$98.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$98.00 +"" +,Operating Expenses, +,Patreon Fees,$4.90 +,Payment Fees,$3.64 +,Total Operating Expenses,$8.54 +"" +,Net Profit,$89.46 diff --git a/finances/HaxeFlixel Profit and Loss from 2020-06.csv b/finances/HaxeFlixel Profit and Loss from 2020-06.csv new file mode 100644 index 000000000..92c874218 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2020-06.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2020-06-01 to 2020-06-30 +"" +ACCOUNT NUMBER,ACCOUNTS,"Jun 01, 2020 to Jun 30, 2020" +,Income, +,Patreon Donations,$98.00 +,Total Income,$98.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$98.00 +"" +,Operating Expenses, +,Patreon Fees,$4.90 +,Payment Fees,$3.62 +,Total Operating Expenses,$8.52 +"" +,Net Profit,$89.48 diff --git a/finances/HaxeFlixel Profit and Loss from 2020-07.csv b/finances/HaxeFlixel Profit and Loss from 2020-07.csv new file mode 100644 index 000000000..792404df3 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2020-07.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2020-07-01 to 2020-07-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Jul 01, 2020 to Jul 31, 2020" +,Income, +,Patreon Donations,$98.00 +,Total Income,$98.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$98.00 +"" +,Operating Expenses, +,Patreon Fees,$4.90 +,Payment Fees,$3.64 +,Total Operating Expenses,$8.54 +"" +,Net Profit,$89.46 diff --git a/finances/HaxeFlixel Profit and Loss from 2020-08.csv b/finances/HaxeFlixel Profit and Loss from 2020-08.csv new file mode 100644 index 000000000..83aed90c5 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2020-08.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2020-08-01 to 2020-08-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Aug 01, 2020 to Aug 31, 2020" +,Income, +,Patreon Donations,$95.00 +,Total Income,$95.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$95.00 +"" +,Operating Expenses, +,Patreon Fees,$4.75 +,Payment Fees,$2.84 +,Total Operating Expenses,$7.59 +"" +,Net Profit,$87.41 diff --git a/finances/HaxeFlixel Profit and Loss from 2020-09.csv b/finances/HaxeFlixel Profit and Loss from 2020-09.csv new file mode 100644 index 000000000..84ee67341 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2020-09.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2020-09-01 to 2020-09-30 +"" +ACCOUNT NUMBER,ACCOUNTS,"Sep 01, 2020 to Sep 30, 2020" +,Income, +,Patreon Donations,$97.00 +,Total Income,$97.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$97.00 +"" +,Operating Expenses, +,Patreon Fees,$4.85 +,Payment Fees,$2.10 +,Total Operating Expenses,$6.95 +"" +,Net Profit,$90.05 diff --git a/finances/HaxeFlixel Profit and Loss from 2020-10.csv b/finances/HaxeFlixel Profit and Loss from 2020-10.csv new file mode 100644 index 000000000..794705178 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2020-10.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2020-10-01 to 2020-10-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Oct 01, 2020 to Oct 31, 2020" +,Income, +,Patreon Donations,$97.00 +,Total Income,$97.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$97.00 +"" +,Operating Expenses, +,Patreon Fees,$4.85 +,Payment Fees,$2.15 +,Total Operating Expenses,$7.00 +"" +,Net Profit,$90.00 diff --git a/finances/HaxeFlixel Profit and Loss from 2020-11.csv b/finances/HaxeFlixel Profit and Loss from 2020-11.csv new file mode 100644 index 000000000..4494e7150 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2020-11.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2020-11-01 to 2020-11-30 +"" +ACCOUNT NUMBER,ACCOUNTS,"Nov 01, 2020 to Nov 30, 2020" +,Income, +,Patreon Donations,$97.00 +,Total Income,$97.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$97.00 +"" +,Operating Expenses, +,Patreon Fees,$4.85 +,Payment Fees,$2.09 +,Total Operating Expenses,$6.94 +"" +,Net Profit,$90.06 diff --git a/finances/HaxeFlixel Profit and Loss from 2020-12.csv b/finances/HaxeFlixel Profit and Loss from 2020-12.csv new file mode 100644 index 000000000..fc36eeded --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2020-12.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2020-12-01 to 2020-12-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Dec 01, 2020 to Dec 31, 2020" +,Income, +,Patreon Donations,$97.00 +,Total Income,$97.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$97.00 +"" +,Operating Expenses, +,Patreon Fees,$4.85 +,Payment Fees,$2.15 +,Total Operating Expenses,$7.00 +"" +,Net Profit,$90.00 diff --git a/finances/HaxeFlixel Profit and Loss from 2021-01.csv b/finances/HaxeFlixel Profit and Loss from 2021-01.csv new file mode 100644 index 000000000..bb5851693 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2021-01.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2021-01-01 to 2021-01-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Jan 01, 2021 to Jan 31, 2021" +,Income, +,Patreon Donations,$89.00 +,Total Income,$89.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$89.00 +"" +,Operating Expenses, +,Patreon Fees,$4.45 +,Payment Fees,$1.72 +,Total Operating Expenses,$6.17 +"" +,Net Profit,$82.83 diff --git a/finances/HaxeFlixel Profit and Loss from 2021-02.csv b/finances/HaxeFlixel Profit and Loss from 2021-02.csv new file mode 100644 index 000000000..75883acde --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2021-02.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2021-02-01 to 2021-02-28 +"" +ACCOUNT NUMBER,ACCOUNTS,"Feb 01, 2021 to Feb 28, 2021" +,Income, +,Patreon Donations,$89.00 +,Total Income,$89.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$89.00 +"" +,Operating Expenses, +,Patreon Fees,$4.45 +,Payment Fees,$1.69 +,Total Operating Expenses,$6.14 +"" +,Net Profit,$82.86 diff --git a/finances/HaxeFlixel Profit and Loss from 2021-03.csv b/finances/HaxeFlixel Profit and Loss from 2021-03.csv new file mode 100644 index 000000000..277bf6a36 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2021-03.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2021-03-01 to 2021-03-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Mar 01, 2021 to Mar 31, 2021" +,Income, +,Patreon Donations,$89.00 +,Total Income,$89.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$89.00 +"" +,Operating Expenses, +,Patreon Fees,$4.45 +,Payment Fees,$1.69 +,Total Operating Expenses,$6.14 +"" +,Net Profit,$82.86 diff --git a/finances/HaxeFlixel Profit and Loss from 2021-04.csv b/finances/HaxeFlixel Profit and Loss from 2021-04.csv new file mode 100644 index 000000000..91b03e686 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2021-04.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2021-04-01 to 2021-04-30 +"" +ACCOUNT NUMBER,ACCOUNTS,"Apr 01, 2021 to Apr 30, 2021" +,Income, +,Patreon Donations,$89.00 +,Total Income,$89.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$89.00 +"" +,Operating Expenses, +,Patreon Fees,$4.45 +,Payment Fees,$1.68 +,Total Operating Expenses,$6.13 +"" +,Net Profit,$82.87 diff --git a/finances/HaxeFlixel Profit and Loss from 2021-05.csv b/finances/HaxeFlixel Profit and Loss from 2021-05.csv new file mode 100644 index 000000000..c051e9e95 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2021-05.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2021-05-01 to 2021-05-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"May 01, 2021 to May 31, 2021" +,Income, +,Patreon Donations,$89.00 +,Total Income,$89.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$89.00 +"" +,Operating Expenses, +,Patreon Fees,$4.45 +,Payment Fees,$1.68 +,Total Operating Expenses,$6.13 +"" +,Net Profit,$82.87 diff --git a/finances/HaxeFlixel Profit and Loss from 2021-06.csv b/finances/HaxeFlixel Profit and Loss from 2021-06.csv new file mode 100644 index 000000000..6772ee0cc --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2021-06.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2021-06-01 to 2021-06-30 +"" +ACCOUNT NUMBER,ACCOUNTS,"Jun 01, 2021 to Jun 30, 2021" +,Income, +,Patreon Donations,$84.00 +,Total Income,$84.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$84.00 +"" +,Operating Expenses, +,Patreon Fees,$4.20 +,Payment Fees,$1.48 +,Total Operating Expenses,$5.68 +"" +,Net Profit,$78.32 diff --git a/finances/HaxeFlixel Profit and Loss from 2021-07.csv b/finances/HaxeFlixel Profit and Loss from 2021-07.csv new file mode 100644 index 000000000..c4e451610 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2021-07.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2021-07-01 to 2021-07-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Jul 01, 2021 to Jul 31, 2021" +,Income, +,Patreon Donations,$84.00 +,Total Income,$84.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$84.00 +"" +,Operating Expenses, +,Patreon Fees,$4.20 +,Payment Fees,$1.47 +,Total Operating Expenses,$5.67 +"" +,Net Profit,$78.33 diff --git a/finances/HaxeFlixel Profit and Loss from 2021-08.csv b/finances/HaxeFlixel Profit and Loss from 2021-08.csv new file mode 100644 index 000000000..6f4398a87 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2021-08.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2021-08-01 to 2021-08-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Aug 01, 2021 to Aug 31, 2021" +,Income, +,Patreon Donations,$84.00 +,Total Income,$84.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$84.00 +"" +,Operating Expenses, +,Patreon Fees,$4.20 +,Payment Fees,$1.46 +,Total Operating Expenses,$5.66 +"" +,Net Profit,$78.34 diff --git a/finances/HaxeFlixel Profit and Loss from 2021-09.csv b/finances/HaxeFlixel Profit and Loss from 2021-09.csv new file mode 100644 index 000000000..dff0fe8a9 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2021-09.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2021-09-01 to 2021-09-30 +"" +ACCOUNT NUMBER,ACCOUNTS,"Sep 01, 2021 to Sep 30, 2021" +,Income, +,Patreon Donations,$84.00 +,Total Income,$84.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$84.00 +"" +,Operating Expenses, +,Patreon Fees,$4.20 +,Payment Fees,$1.48 +,Total Operating Expenses,$5.68 +"" +,Net Profit,$78.32 diff --git a/finances/HaxeFlixel Profit and Loss from 2021-10.csv b/finances/HaxeFlixel Profit and Loss from 2021-10.csv new file mode 100644 index 000000000..94c832947 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2021-10.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2021-10-01 to 2021-10-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Oct 01, 2021 to Oct 31, 2021" +,Income, +,Patreon Donations,$86.00 +,Total Income,$86.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$86.00 +"" +,Operating Expenses, +,Patreon Fees,$4.30 +,Payment Fees,$1.66 +,Total Operating Expenses,$5.96 +"" +,Net Profit,$80.04 diff --git a/finances/HaxeFlixel Profit and Loss from 2021-11.csv b/finances/HaxeFlixel Profit and Loss from 2021-11.csv new file mode 100644 index 000000000..7de43f5c5 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2021-11.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2021-11-01 to 2021-11-30 +"" +ACCOUNT NUMBER,ACCOUNTS,"Nov 01, 2021 to Nov 30, 2021" +,Income, +,Patreon Donations,$86.00 +,Total Income,$86.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$86.00 +"" +,Operating Expenses, +,Patreon Fees,$4.30 +,Payment Fees,$1.57 +,Total Operating Expenses,$5.87 +"" +,Net Profit,$80.13 diff --git a/finances/HaxeFlixel Profit and Loss from 2021-12.csv b/finances/HaxeFlixel Profit and Loss from 2021-12.csv new file mode 100644 index 000000000..6df04e700 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2021-12.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2021-12-01 to 2021-12-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Dec 01, 2021 to Dec 31, 2021" +,Income, +,Patreon Donations,$86.00 +,Total Income,$86.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$86.00 +"" +,Operating Expenses, +,Patreon Fees,$4.30 +,Payment Fees,$1.58 +,Total Operating Expenses,$5.88 +"" +,Net Profit,$80.12 diff --git a/finances/HaxeFlixel Profit and Loss from 2022-01.csv b/finances/HaxeFlixel Profit and Loss from 2022-01.csv new file mode 100644 index 000000000..1528c33d2 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2022-01.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2022-01-01 to 2022-01-31 +"" +ACCOUNT NUMBER,ACCOUNTS,"Jan 01, 2022 to Jan 31, 2022" +,Income, +,Patreon Donations,$86.00 +,Total Income,$86.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$86.00 +"" +,Operating Expenses, +,Patreon Fees,$4.30 +,Payment Fees,$1.59 +,Total Operating Expenses,$5.89 +"" +,Net Profit,$80.11 diff --git a/finances/HaxeFlixel Profit and Loss from 2022-02.csv b/finances/HaxeFlixel Profit and Loss from 2022-02.csv new file mode 100644 index 000000000..8ec650803 --- /dev/null +++ b/finances/HaxeFlixel Profit and Loss from 2022-02.csv @@ -0,0 +1,19 @@ +Profit and Loss +HaxeFlixel +Date Range: 2022-02-01 to 2022-02-28 +"" +ACCOUNT NUMBER,ACCOUNTS,"Feb 01, 2022 to Feb 28, 2022" +,Income, +,Patreon Donations,$86.00 +,Total Income,$86.00 +"" +,Total Cost of Goods Sold,$0.00 +"" +,Gross Profit,$86.00 +"" +,Operating Expenses, +,Patreon Fees,$4.30 +,Payment Fees,$1.57 +,Total Operating Expenses,$5.87 +"" +,Net Profit,$80.13 diff --git a/images/IGG_FundedWithBadges_WhiteOutlined_RGB_Rectangle.png b/images/IGG_FundedWithBadges_WhiteOutlined_RGB_Rectangle.png new file mode 100755 index 000000000..cc3fb39cb Binary files /dev/null and b/images/IGG_FundedWithBadges_WhiteOutlined_RGB_Rectangle.png differ diff --git a/images/blog/10_community/forums.png b/images/blog/10_community/forums.png new file mode 100644 index 000000000..44fcc8983 Binary files /dev/null and b/images/blog/10_community/forums.png differ diff --git a/images/blog/10_community/github.png b/images/blog/10_community/github.png new file mode 100644 index 000000000..78ad43eb8 Binary files /dev/null and b/images/blog/10_community/github.png differ diff --git a/images/blog/11_light/flp_level4.png b/images/blog/11_light/flp_level4.png new file mode 100644 index 000000000..66dbfd89a Binary files /dev/null and b/images/blog/11_light/flp_level4.png differ diff --git a/images/blog/11_light/flp_logo_594x382.png b/images/blog/11_light/flp_logo_594x382.png new file mode 100644 index 000000000..2e954c37c Binary files /dev/null and b/images/blog/11_light/flp_logo_594x382.png differ diff --git a/images/blog/11_light/flp_menu.png b/images/blog/11_light/flp_menu.png new file mode 100644 index 000000000..215e26a57 Binary files /dev/null and b/images/blog/11_light/flp_menu.png differ diff --git a/images/blog/13_dragonbones/dragonbones_export.png b/images/blog/13_dragonbones/dragonbones_export.png new file mode 100644 index 000000000..4f92f35d5 Binary files /dev/null and b/images/blog/13_dragonbones/dragonbones_export.png differ diff --git a/images/blog/13_dragonbones/dragonbones_preview.gif b/images/blog/13_dragonbones/dragonbones_preview.gif new file mode 100644 index 000000000..4d4d5e2ff Binary files /dev/null and b/images/blog/13_dragonbones/dragonbones_preview.gif differ diff --git a/images/blog/13_dragonbones/dragonbones_stock.jpg b/images/blog/13_dragonbones/dragonbones_stock.jpg new file mode 100644 index 000000000..d2d4446aa Binary files /dev/null and b/images/blog/13_dragonbones/dragonbones_stock.jpg differ diff --git a/images/blog/14_newgrounds_jam/ng_loves_flixel.png b/images/blog/14_newgrounds_jam/ng_loves_flixel.png new file mode 100644 index 000000000..24b1a59a0 Binary files /dev/null and b/images/blog/14_newgrounds_jam/ng_loves_flixel.png differ diff --git a/images/blog/15_blogs_back/pathfinding.png b/images/blog/15_blogs_back/pathfinding.png new file mode 100644 index 000000000..d3745aa01 Binary files /dev/null and b/images/blog/15_blogs_back/pathfinding.png differ diff --git a/images/blog/15_blogs_back/platforming.mp4 b/images/blog/15_blogs_back/platforming.mp4 new file mode 100644 index 000000000..532b6c537 Binary files /dev/null and b/images/blog/15_blogs_back/platforming.mp4 differ diff --git a/images/blog/16_release/all_files.png b/images/blog/16_release/all_files.png new file mode 100644 index 000000000..f5e7491fd Binary files /dev/null and b/images/blog/16_release/all_files.png differ diff --git a/images/blog/16_release/anim-time_scale.mp4 b/images/blog/16_release/anim-time_scale.mp4 new file mode 100644 index 000000000..a5b3d5978 Binary files /dev/null and b/images/blog/16_release/anim-time_scale.mp4 differ diff --git a/images/blog/16_release/export-sheet.png b/images/blog/16_release/export-sheet.png new file mode 100644 index 000000000..44c4ec3cc Binary files /dev/null and b/images/blog/16_release/export-sheet.png differ diff --git a/images/blog/16_release/snowman.png b/images/blog/16_release/snowman.png new file mode 100644 index 000000000..0e49e3c08 Binary files /dev/null and b/images/blog/16_release/snowman.png differ diff --git a/images/blog/16_release/split.jpg b/images/blog/16_release/split.jpg new file mode 100644 index 000000000..cdf6f548f Binary files /dev/null and b/images/blog/16_release/split.jpg differ diff --git a/images/blog/16_release/tag-frames.gif b/images/blog/16_release/tag-frames.gif new file mode 100644 index 000000000..a26849a90 Binary files /dev/null and b/images/blog/16_release/tag-frames.gif differ diff --git a/images/blog/debuggerInteraction.gif b/images/blog/debuggerInteraction.gif new file mode 100644 index 000000000..943f6866d Binary files /dev/null and b/images/blog/debuggerInteraction.gif differ diff --git a/images/blog/hfm-logo.svg b/images/blog/hfm-logo.svg new file mode 100644 index 000000000..15df40a40 --- /dev/null +++ b/images/blog/hfm-logo.svg @@ -0,0 +1,122 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/blog/hfscreen.png b/images/blog/hfscreen.png new file mode 100644 index 000000000..bdfd5f38f Binary files /dev/null and b/images/blog/hfscreen.png differ diff --git a/images/blog/msg_intro/haxeui.png b/images/blog/msg_intro/haxeui.png new file mode 100644 index 000000000..1a743069c Binary files /dev/null and b/images/blog/msg_intro/haxeui.png differ diff --git a/images/blog/msg_intro/indiegogo.png b/images/blog/msg_intro/indiegogo.png new file mode 100644 index 000000000..1e3b8b4c8 Binary files /dev/null and b/images/blog/msg_intro/indiegogo.png differ diff --git a/images/blog/openfl5/cameraBuffers.jpg b/images/blog/openfl5/cameraBuffers.jpg new file mode 100644 index 000000000..f56de5e0f Binary files /dev/null and b/images/blog/openfl5/cameraBuffers.jpg differ diff --git a/images/blog/openfl5/drawDebug.jpg b/images/blog/openfl5/drawDebug.jpg new file mode 100644 index 000000000..7e807072f Binary files /dev/null and b/images/blog/openfl5/drawDebug.jpg differ diff --git a/images/blog/openfl5/drawTriangles.png b/images/blog/openfl5/drawTriangles.png new file mode 100644 index 000000000..115f8f973 Binary files /dev/null and b/images/blog/openfl5/drawTriangles.png differ diff --git a/images/blog/openfl5/lighting.jpg b/images/blog/openfl5/lighting.jpg new file mode 100644 index 000000000..b8327510b Binary files /dev/null and b/images/blog/openfl5/lighting.jpg differ diff --git a/images/blog/shadedBunnies.gif b/images/blog/shadedBunnies.gif new file mode 100644 index 000000000..0e3fab7aa Binary files /dev/null and b/images/blog/shadedBunnies.gif differ diff --git a/images/blog/title-logo.swf b/images/blog/title-logo.swf new file mode 100644 index 000000000..ebd2d7991 Binary files /dev/null and b/images/blog/title-logo.swf differ diff --git a/images/demos/BSPMapGen.png b/images/demos/BSPMapGen.png new file mode 100644 index 000000000..e8b6d8618 Binary files /dev/null and b/images/demos/BSPMapGen.png differ diff --git a/images/demos/BlendModeShaders.png b/images/demos/BlendModeShaders.png new file mode 100644 index 000000000..b5f73c908 Binary files /dev/null and b/images/demos/BlendModeShaders.png differ diff --git a/images/demos/BlendModes.png b/images/demos/BlendModes.png new file mode 100644 index 000000000..a7bc60d06 Binary files /dev/null and b/images/demos/BlendModes.png differ diff --git a/images/demos/Breakout.png b/images/demos/Breakout.png new file mode 100644 index 000000000..d2d8e57ae Binary files /dev/null and b/images/demos/Breakout.png differ diff --git a/images/demos/Calculator.png b/images/demos/Calculator.png new file mode 100644 index 000000000..2f75b09c7 Binary files /dev/null and b/images/demos/Calculator.png differ diff --git a/images/demos/CollisionAndGrouping.png b/images/demos/CollisionAndGrouping.png new file mode 100644 index 000000000..62f3da56b Binary files /dev/null and b/images/demos/CollisionAndGrouping.png differ diff --git a/images/demos/Colors.png b/images/demos/Colors.png new file mode 100644 index 000000000..b41896d21 Binary files /dev/null and b/images/demos/Colors.png differ diff --git a/images/demos/Cursor.png b/images/demos/Cursor.png new file mode 100644 index 000000000..ed8b02aa8 Binary files /dev/null and b/images/demos/Cursor.png differ diff --git a/images/demos/DynamicShadows.png b/images/demos/DynamicShadows.png new file mode 100644 index 000000000..5bcac82c8 Binary files /dev/null and b/images/demos/DynamicShadows.png differ diff --git a/images/demos/EZPlatformer.png b/images/demos/EZPlatformer.png new file mode 100644 index 000000000..596253643 Binary files /dev/null and b/images/demos/EZPlatformer.png differ diff --git a/images/demos/FileBrowse.png b/images/demos/FileBrowse.png new file mode 100644 index 000000000..4b9f46dff Binary files /dev/null and b/images/demos/FileBrowse.png differ diff --git a/images/demos/Filters.png b/images/demos/Filters.png new file mode 100644 index 000000000..cf1205fde Binary files /dev/null and b/images/demos/Filters.png differ diff --git a/images/demos/Flappybalt.png b/images/demos/Flappybalt.png new file mode 100644 index 000000000..d5838e141 Binary files /dev/null and b/images/demos/Flappybalt.png differ diff --git a/images/demos/FlipRotationAnimationTiles.png b/images/demos/FlipRotationAnimationTiles.png new file mode 100644 index 000000000..f72b2640f Binary files /dev/null and b/images/demos/FlipRotationAnimationTiles.png differ diff --git a/images/demos/Flixius.png b/images/demos/Flixius.png new file mode 100644 index 000000000..3705cb38f Binary files /dev/null and b/images/demos/Flixius.png differ diff --git a/images/demos/FloodFill.png b/images/demos/FloodFill.png new file mode 100644 index 000000000..353853830 Binary files /dev/null and b/images/demos/FloodFill.png differ diff --git a/images/demos/FlxAction.png b/images/demos/FlxAction.png new file mode 100644 index 000000000..cd1c7ded3 Binary files /dev/null and b/images/demos/FlxAction.png differ diff --git a/images/demos/FlxAsepriteUtil.png b/images/demos/FlxAsepriteUtil.png new file mode 100644 index 000000000..d351693ac Binary files /dev/null and b/images/demos/FlxAsepriteUtil.png differ diff --git a/images/demos/FlxAsyncLoop.png b/images/demos/FlxAsyncLoop.png new file mode 100644 index 000000000..1a01a8fa8 Binary files /dev/null and b/images/demos/FlxAsyncLoop.png differ diff --git a/images/demos/FlxAtlas.png b/images/demos/FlxAtlas.png new file mode 100644 index 000000000..fa4f42794 Binary files /dev/null and b/images/demos/FlxAtlas.png differ diff --git a/images/demos/FlxBitmapText.png b/images/demos/FlxBitmapText.png new file mode 100644 index 000000000..0a06285d3 Binary files /dev/null and b/images/demos/FlxBitmapText.png differ diff --git a/images/demos/FlxBloom.png b/images/demos/FlxBloom.png new file mode 100644 index 000000000..d2fffba1b Binary files /dev/null and b/images/demos/FlxBloom.png differ diff --git a/images/demos/FlxBlur.png b/images/demos/FlxBlur.png new file mode 100644 index 000000000..e31f3fea6 Binary files /dev/null and b/images/demos/FlxBlur.png differ diff --git a/images/demos/FlxBunnyMark.png b/images/demos/FlxBunnyMark.png new file mode 100644 index 000000000..8ab599b05 Binary files /dev/null and b/images/demos/FlxBunnyMark.png differ diff --git a/images/demos/FlxCamera.png b/images/demos/FlxCamera.png new file mode 100644 index 000000000..d49813b1b Binary files /dev/null and b/images/demos/FlxCamera.png differ diff --git a/images/demos/FlxCaveGenerator.png b/images/demos/FlxCaveGenerator.png new file mode 100644 index 000000000..9835c8d9a Binary files /dev/null and b/images/demos/FlxCaveGenerator.png differ diff --git a/images/demos/FlxClothSprite.png b/images/demos/FlxClothSprite.png new file mode 100644 index 000000000..8de4e487e Binary files /dev/null and b/images/demos/FlxClothSprite.png differ diff --git a/images/demos/FlxCollisions.png b/images/demos/FlxCollisions.png new file mode 100644 index 000000000..632651413 Binary files /dev/null and b/images/demos/FlxCollisions.png differ diff --git a/images/demos/FlxEffectSprite.png b/images/demos/FlxEffectSprite.png new file mode 100644 index 000000000..acf106151 Binary files /dev/null and b/images/demos/FlxEffectSprite.png differ diff --git a/images/demos/FlxFSM.png b/images/demos/FlxFSM.png new file mode 100644 index 000000000..25db2f2ef Binary files /dev/null and b/images/demos/FlxFSM.png differ diff --git a/images/demos/FlxGameOfLife.png b/images/demos/FlxGameOfLife.png new file mode 100644 index 000000000..2f475f98b Binary files /dev/null and b/images/demos/FlxGameOfLife.png differ diff --git a/images/demos/FlxInvaders.png b/images/demos/FlxInvaders.png new file mode 100644 index 000000000..f85b9e1f5 Binary files /dev/null and b/images/demos/FlxInvaders.png differ diff --git a/images/demos/FlxLightPuzzle.png b/images/demos/FlxLightPuzzle.png new file mode 100644 index 000000000..414da325e Binary files /dev/null and b/images/demos/FlxLightPuzzle.png differ diff --git a/images/demos/FlxMouseEvent.png b/images/demos/FlxMouseEvent.png new file mode 100644 index 000000000..5c0160e27 Binary files /dev/null and b/images/demos/FlxMouseEvent.png differ diff --git a/images/demos/FlxNape.png b/images/demos/FlxNape.png new file mode 100644 index 000000000..548000962 Binary files /dev/null and b/images/demos/FlxNape.png differ diff --git a/images/demos/FlxNapeTerrain.png b/images/demos/FlxNapeTerrain.png new file mode 100644 index 000000000..9332e2899 Binary files /dev/null and b/images/demos/FlxNapeTerrain.png differ diff --git a/images/demos/FlxNapeTilemap.png b/images/demos/FlxNapeTilemap.png new file mode 100644 index 000000000..c6aaac6cf Binary files /dev/null and b/images/demos/FlxNapeTilemap.png differ diff --git a/images/demos/FlxPexParser.png b/images/demos/FlxPexParser.png new file mode 100644 index 000000000..a01d3a5bd Binary files /dev/null and b/images/demos/FlxPexParser.png differ diff --git a/images/demos/FlxPieDial.png b/images/demos/FlxPieDial.png new file mode 100644 index 000000000..086e5d938 Binary files /dev/null and b/images/demos/FlxPieDial.png differ diff --git a/images/demos/FlxPongApi.png b/images/demos/FlxPongApi.png new file mode 100644 index 000000000..e3708066a Binary files /dev/null and b/images/demos/FlxPongApi.png differ diff --git a/images/demos/FlxRandom.png b/images/demos/FlxRandom.png new file mode 100644 index 000000000..b65c7b8b0 Binary files /dev/null and b/images/demos/FlxRandom.png differ diff --git a/images/demos/FlxScene.png b/images/demos/FlxScene.png new file mode 100644 index 000000000..b0daba885 Binary files /dev/null and b/images/demos/FlxScene.png differ diff --git a/images/demos/FlxShape.png b/images/demos/FlxShape.png new file mode 100644 index 000000000..d12ab1ac8 Binary files /dev/null and b/images/demos/FlxShape.png differ diff --git a/images/demos/FlxSimplex.png b/images/demos/FlxSimplex.png new file mode 100644 index 000000000..a2dbfaf30 Binary files /dev/null and b/images/demos/FlxSimplex.png differ diff --git a/images/demos/FlxSkewedSprite.png b/images/demos/FlxSkewedSprite.png new file mode 100644 index 000000000..5af1deb77 Binary files /dev/null and b/images/demos/FlxSkewedSprite.png differ diff --git a/images/demos/FlxSnake.png b/images/demos/FlxSnake.png new file mode 100644 index 000000000..72f7d16d1 Binary files /dev/null and b/images/demos/FlxSnake.png differ diff --git a/images/demos/FlxSound.png b/images/demos/FlxSound.png new file mode 100644 index 000000000..0bf090e14 Binary files /dev/null and b/images/demos/FlxSound.png differ diff --git a/images/demos/FlxSpine.png b/images/demos/FlxSpine.png new file mode 100644 index 000000000..516d7e0d6 Binary files /dev/null and b/images/demos/FlxSpine.png differ diff --git a/images/demos/FlxSpriteFilters.png b/images/demos/FlxSpriteFilters.png new file mode 100644 index 000000000..84310dd96 Binary files /dev/null and b/images/demos/FlxSpriteFilters.png differ diff --git a/images/demos/FlxSubState.png b/images/demos/FlxSubState.png new file mode 100644 index 000000000..b37786fb7 Binary files /dev/null and b/images/demos/FlxSubState.png differ diff --git a/images/demos/FlxTeroids.png b/images/demos/FlxTeroids.png new file mode 100644 index 000000000..ec53c0cf8 Binary files /dev/null and b/images/demos/FlxTeroids.png differ diff --git a/images/demos/FlxTextFormat.png b/images/demos/FlxTextFormat.png new file mode 100644 index 000000000..e5c061df0 Binary files /dev/null and b/images/demos/FlxTextFormat.png differ diff --git a/images/demos/FlxTilemapExt.png b/images/demos/FlxTilemapExt.png new file mode 100644 index 000000000..001eb0061 Binary files /dev/null and b/images/demos/FlxTilemapExt.png differ diff --git a/images/demos/FlxTrailArea.png b/images/demos/FlxTrailArea.png new file mode 100644 index 000000000..9fb34e8a9 Binary files /dev/null and b/images/demos/FlxTrailArea.png differ diff --git a/images/demos/FlxTween.png b/images/demos/FlxTween.png new file mode 100644 index 000000000..05a36cb68 Binary files /dev/null and b/images/demos/FlxTween.png differ diff --git a/images/demos/FlxTypeText.png b/images/demos/FlxTypeText.png new file mode 100644 index 000000000..bb7e4aca5 Binary files /dev/null and b/images/demos/FlxTypeText.png differ diff --git a/images/demos/FrameCollections.png b/images/demos/FrameCollections.png new file mode 100644 index 000000000..04b4874b8 Binary files /dev/null and b/images/demos/FrameCollections.png differ diff --git a/images/demos/GamepadTest.png b/images/demos/GamepadTest.png new file mode 100644 index 000000000..ef4c5099d Binary files /dev/null and b/images/demos/GamepadTest.png differ diff --git a/images/demos/GridMovement.png b/images/demos/GridMovement.png new file mode 100644 index 000000000..932dd8a7b Binary files /dev/null and b/images/demos/GridMovement.png differ diff --git a/images/demos/HeatmapPathfinding.png b/images/demos/HeatmapPathfinding.png new file mode 100644 index 000000000..d5ee0fad4 Binary files /dev/null and b/images/demos/HeatmapPathfinding.png differ diff --git a/images/demos/MinimalistTD.png b/images/demos/MinimalistTD.png new file mode 100644 index 000000000..e34782e53 Binary files /dev/null and b/images/demos/MinimalistTD.png differ diff --git a/images/demos/Mode.png b/images/demos/Mode.png new file mode 100644 index 000000000..154c12026 Binary files /dev/null and b/images/demos/Mode.png differ diff --git a/images/demos/MosaicEffect.png b/images/demos/MosaicEffect.png new file mode 100644 index 000000000..b0a71047f Binary files /dev/null and b/images/demos/MosaicEffect.png differ diff --git a/images/demos/NeonVector.png b/images/demos/NeonVector.png new file mode 100644 index 000000000..105c07aa6 Binary files /dev/null and b/images/demos/NeonVector.png differ diff --git a/images/demos/Parallax.png b/images/demos/Parallax.png new file mode 100644 index 000000000..c87d66dcf Binary files /dev/null and b/images/demos/Parallax.png differ diff --git a/images/demos/Particles.png b/images/demos/Particles.png new file mode 100644 index 000000000..f625dfc9e Binary files /dev/null and b/images/demos/Particles.png differ diff --git a/images/demos/Pathfinding.png b/images/demos/Pathfinding.png new file mode 100644 index 000000000..32009988e Binary files /dev/null and b/images/demos/Pathfinding.png differ diff --git a/images/demos/PixelPerfectCollision.png b/images/demos/PixelPerfectCollision.png new file mode 100644 index 000000000..b76263a8e Binary files /dev/null and b/images/demos/PixelPerfectCollision.png differ diff --git a/images/demos/ProjectJumper.png b/images/demos/ProjectJumper.png new file mode 100644 index 000000000..99223ca13 Binary files /dev/null and b/images/demos/ProjectJumper.png differ diff --git a/images/demos/RPGInterface.png b/images/demos/RPGInterface.png new file mode 100644 index 000000000..74f3003bf Binary files /dev/null and b/images/demos/RPGInterface.png differ diff --git a/images/demos/Replay.png b/images/demos/Replay.png new file mode 100644 index 000000000..2072d5e10 Binary files /dev/null and b/images/demos/Replay.png differ diff --git a/images/demos/Revenge.png b/images/demos/Revenge.png new file mode 100644 index 000000000..ae671c4d2 Binary files /dev/null and b/images/demos/Revenge.png differ diff --git a/images/demos/Save.png b/images/demos/Save.png new file mode 100644 index 000000000..871243df4 Binary files /dev/null and b/images/demos/Save.png differ diff --git a/images/demos/ScaleModes.png b/images/demos/ScaleModes.png new file mode 100644 index 000000000..d3c24adf7 Binary files /dev/null and b/images/demos/ScaleModes.png differ diff --git a/images/demos/SetTileProperties.png b/images/demos/SetTileProperties.png new file mode 100644 index 000000000..433273205 Binary files /dev/null and b/images/demos/SetTileProperties.png differ diff --git a/images/demos/SplitScreen.png b/images/demos/SplitScreen.png new file mode 100644 index 000000000..ebddb8dc3 Binary files /dev/null and b/images/demos/SplitScreen.png differ diff --git a/images/demos/TexturePackerAtlas.png b/images/demos/TexturePackerAtlas.png new file mode 100644 index 000000000..f79bd2dea Binary files /dev/null and b/images/demos/TexturePackerAtlas.png differ diff --git a/images/demos/TiledEditor.png b/images/demos/TiledEditor.png new file mode 100644 index 000000000..a908a15b8 Binary files /dev/null and b/images/demos/TiledEditor.png differ diff --git a/images/demos/Tilemap.png b/images/demos/Tilemap.png new file mode 100644 index 000000000..295adddf9 Binary files /dev/null and b/images/demos/Tilemap.png differ diff --git a/images/demos/Tooltips.png b/images/demos/Tooltips.png new file mode 100644 index 000000000..e00ef7962 Binary files /dev/null and b/images/demos/Tooltips.png differ diff --git a/images/demos/Transitions.png b/images/demos/Transitions.png new file mode 100644 index 000000000..83e531ab7 Binary files /dev/null and b/images/demos/Transitions.png differ diff --git a/images/demos/TurnBasedRPG.png b/images/demos/TurnBasedRPG.png new file mode 100644 index 000000000..bd8cd476a Binary files /dev/null and b/images/demos/TurnBasedRPG.png differ diff --git a/images/discover-haxeflixel.png b/images/discover-haxeflixel.png new file mode 100644 index 000000000..941b55342 Binary files /dev/null and b/images/discover-haxeflixel.png differ diff --git a/images/favicon.ico b/images/favicon.ico new file mode 100644 index 000000000..62957be82 Binary files /dev/null and b/images/favicon.ico differ diff --git a/images/flixel-logos/HaxeFlixel.png b/images/flixel-logos/HaxeFlixel.png new file mode 100644 index 000000000..b52c0faed Binary files /dev/null and b/images/flixel-logos/HaxeFlixel.png differ diff --git a/images/flixel-logos/HaxeFlixel.svg b/images/flixel-logos/HaxeFlixel.svg new file mode 100644 index 000000000..4ae1e3a1d --- /dev/null +++ b/images/flixel-logos/HaxeFlixel.svg @@ -0,0 +1,10 @@ + + + + + + + + +HaxeFlixel + \ No newline at end of file diff --git a/images/flixel-logos/flixel-addons.png b/images/flixel-logos/flixel-addons.png new file mode 100644 index 000000000..c3627745e Binary files /dev/null and b/images/flixel-logos/flixel-addons.png differ diff --git a/images/flixel-logos/flixel-addons.svg b/images/flixel-logos/flixel-addons.svg new file mode 100644 index 000000000..5612e0d41 --- /dev/null +++ b/images/flixel-logos/flixel-addons.svg @@ -0,0 +1,11 @@ + + + + + + + + + +flixel-addons + \ No newline at end of file diff --git a/images/flixel-logos/flixel-demos.png b/images/flixel-logos/flixel-demos.png new file mode 100644 index 000000000..88e32d406 Binary files /dev/null and b/images/flixel-logos/flixel-demos.png differ diff --git a/images/flixel-logos/flixel-demos.svg b/images/flixel-logos/flixel-demos.svg new file mode 100644 index 000000000..4142ba27f --- /dev/null +++ b/images/flixel-logos/flixel-demos.svg @@ -0,0 +1,11 @@ + + + + + + + + + +flixel-demos + \ No newline at end of file diff --git a/images/flixel-logos/flixel-docs.png b/images/flixel-logos/flixel-docs.png new file mode 100644 index 000000000..9bc7f3764 Binary files /dev/null and b/images/flixel-logos/flixel-docs.png differ diff --git a/images/flixel-logos/flixel-docs.svg b/images/flixel-logos/flixel-docs.svg new file mode 100644 index 000000000..411a3c557 --- /dev/null +++ b/images/flixel-logos/flixel-docs.svg @@ -0,0 +1,11 @@ + + + + + + + + + +flixel-docs + \ No newline at end of file diff --git a/images/flixel-logos/flixel-templates.png b/images/flixel-logos/flixel-templates.png new file mode 100644 index 000000000..aed052cbe Binary files /dev/null and b/images/flixel-logos/flixel-templates.png differ diff --git a/images/flixel-logos/flixel-templates.svg b/images/flixel-logos/flixel-templates.svg new file mode 100644 index 000000000..20746a71c --- /dev/null +++ b/images/flixel-logos/flixel-templates.svg @@ -0,0 +1,11 @@ + + + + + + + + + +flixel-templates + \ No newline at end of file diff --git a/images/flixel-logos/flixel-tools.png b/images/flixel-logos/flixel-tools.png new file mode 100644 index 000000000..d888598f4 Binary files /dev/null and b/images/flixel-logos/flixel-tools.png differ diff --git a/images/flixel-logos/flixel-tools.svg b/images/flixel-logos/flixel-tools.svg new file mode 100644 index 000000000..244b42015 --- /dev/null +++ b/images/flixel-logos/flixel-tools.svg @@ -0,0 +1,11 @@ + + + + + + + + + +flixel-tools + \ No newline at end of file diff --git a/images/flixel-logos/flixel-ui.png b/images/flixel-logos/flixel-ui.png new file mode 100644 index 000000000..31c634cb7 Binary files /dev/null and b/images/flixel-logos/flixel-ui.png differ diff --git a/images/flixel-logos/flixel-ui.svg b/images/flixel-logos/flixel-ui.svg new file mode 100644 index 000000000..f9453b199 --- /dev/null +++ b/images/flixel-logos/flixel-ui.svg @@ -0,0 +1,11 @@ + + + + + + + + + +flixel-ui + \ No newline at end of file diff --git a/images/flixel-logos/haxeflixel-medal.gif b/images/flixel-logos/haxeflixel-medal.gif new file mode 100644 index 000000000..9c1068631 Binary files /dev/null and b/images/flixel-logos/haxeflixel-medal.gif differ diff --git a/images/flixel-logos/haxeflixel.com.png b/images/flixel-logos/haxeflixel.com.png new file mode 100644 index 000000000..25dee802f Binary files /dev/null and b/images/flixel-logos/haxeflixel.com.png differ diff --git a/images/flixel-logos/haxeflixel.com.svg b/images/flixel-logos/haxeflixel.com.svg new file mode 100644 index 000000000..6d6cf63af --- /dev/null +++ b/images/flixel-logos/haxeflixel.com.svg @@ -0,0 +1,11 @@ + + + + + + + + + +haxeflixel.com + \ No newline at end of file diff --git a/images/flixel.svg b/images/flixel.svg new file mode 100644 index 000000000..65b635b3c --- /dev/null +++ b/images/flixel.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/images/footer-shadow.png b/images/footer-shadow.png new file mode 100644 index 000000000..3ba1ac47a Binary files /dev/null and b/images/footer-shadow.png differ diff --git a/images/haxe.svg b/images/haxe.svg new file mode 100644 index 000000000..f4271c447 --- /dev/null +++ b/images/haxe.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/haxeflixel-header.png b/images/haxeflixel-header.png new file mode 100644 index 000000000..4ca5bf4b0 Binary files /dev/null and b/images/haxeflixel-header.png differ diff --git a/images/haxeflixel-header.svg b/images/haxeflixel-header.svg new file mode 100644 index 000000000..353bf2035 --- /dev/null +++ b/images/haxeflixel-header.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/haxeflixel-logo.png b/images/haxeflixel-logo.png new file mode 100644 index 000000000..4ca5bf4b0 Binary files /dev/null and b/images/haxeflixel-logo.png differ diff --git a/images/haxeflixel.svg b/images/haxeflixel.svg new file mode 100644 index 000000000..6a447ad4d --- /dev/null +++ b/images/haxeflixel.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/images/highlight-bg.png b/images/highlight-bg.png new file mode 100644 index 000000000..f4a1f357b Binary files /dev/null and b/images/highlight-bg.png differ diff --git a/images/openfl-logo.png b/images/openfl-logo.png new file mode 100644 index 000000000..ca3c18d89 Binary files /dev/null and b/images/openfl-logo.png differ diff --git a/images/openfl-text-logo.svg b/images/openfl-text-logo.svg new file mode 100644 index 000000000..ab465548f --- /dev/null +++ b/images/openfl-text-logo.svg @@ -0,0 +1,83 @@ + + + +image/svg+xml + + + + + + + + + + \ No newline at end of file diff --git a/images/openfl.jpg b/images/openfl.jpg new file mode 100644 index 000000000..857458694 Binary files /dev/null and b/images/openfl.jpg differ diff --git a/images/openfl.svg b/images/openfl.svg new file mode 100644 index 000000000..ccaf59e2d --- /dev/null +++ b/images/openfl.svg @@ -0,0 +1,34 @@ + + + Slice 1 + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/patreon-logo.svg b/images/patreon-logo.svg new file mode 100644 index 000000000..c6710cd17 --- /dev/null +++ b/images/patreon-logo.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/images/patreon-wordmark.svg b/images/patreon-wordmark.svg new file mode 100644 index 000000000..0bd8735fb --- /dev/null +++ b/images/patreon-wordmark.svg @@ -0,0 +1,28 @@ + + + + + diff --git a/images/sdl.svg b/images/sdl.svg new file mode 100644 index 000000000..2d6b65e17 --- /dev/null +++ b/images/sdl.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/showcase.xcf b/images/showcase.xcf new file mode 100644 index 000000000..ec6c0c4cd Binary files /dev/null and b/images/showcase.xcf differ diff --git a/images/showcase/BOSSES FOREVER 2.BRO.png b/images/showcase/BOSSES FOREVER 2.BRO.png new file mode 100644 index 000000000..26772bcf7 Binary files /dev/null and b/images/showcase/BOSSES FOREVER 2.BRO.png differ diff --git a/images/showcase/Blasting Agent Ultimate Edition.png b/images/showcase/Blasting Agent Ultimate Edition.png new file mode 100644 index 000000000..d56c75400 Binary files /dev/null and b/images/showcase/Blasting Agent Ultimate Edition.png differ diff --git a/images/showcase/Bring It On!.png b/images/showcase/Bring It On!.png new file mode 100644 index 000000000..22db68355 Binary files /dev/null and b/images/showcase/Bring It On!.png differ diff --git a/images/showcase/Bronko Blue.png b/images/showcase/Bronko Blue.png new file mode 100644 index 000000000..c273c57ba Binary files /dev/null and b/images/showcase/Bronko Blue.png differ diff --git a/images/showcase/Canabalt.png b/images/showcase/Canabalt.png new file mode 100644 index 000000000..3303c9e2d Binary files /dev/null and b/images/showcase/Canabalt.png differ diff --git a/images/showcase/Cardinal Quest 2.png b/images/showcase/Cardinal Quest 2.png new file mode 100644 index 000000000..fd61cce5c Binary files /dev/null and b/images/showcase/Cardinal Quest 2.png differ diff --git a/images/showcase/Cheap Golf.png b/images/showcase/Cheap Golf.png new file mode 100644 index 000000000..eae11f8e2 Binary files /dev/null and b/images/showcase/Cheap Golf.png differ diff --git a/images/showcase/Chibi Ninja Shino-kun.png b/images/showcase/Chibi Ninja Shino-kun.png new file mode 100644 index 000000000..db3a1815d Binary files /dev/null and b/images/showcase/Chibi Ninja Shino-kun.png differ diff --git a/images/showcase/Defender's Quest II.png b/images/showcase/Defender's Quest II.png new file mode 100644 index 000000000..b2247e110 Binary files /dev/null and b/images/showcase/Defender's Quest II.png differ diff --git a/images/showcase/Defender's Quest Valley of the Forgotten.png b/images/showcase/Defender's Quest Valley of the Forgotten.png new file mode 100644 index 000000000..f646f7278 Binary files /dev/null and b/images/showcase/Defender's Quest Valley of the Forgotten.png differ diff --git a/images/showcase/Dfragmente.png b/images/showcase/Dfragmente.png new file mode 100644 index 000000000..20dddb9d6 Binary files /dev/null and b/images/showcase/Dfragmente.png differ diff --git a/images/showcase/Don't Move.png b/images/showcase/Don't Move.png new file mode 100644 index 000000000..e67f13c74 Binary files /dev/null and b/images/showcase/Don't Move.png differ diff --git a/images/showcase/Eggsolotl.png b/images/showcase/Eggsolotl.png new file mode 100644 index 000000000..3301a0d53 Binary files /dev/null and b/images/showcase/Eggsolotl.png differ diff --git a/images/showcase/Even the Ocean.png b/images/showcase/Even the Ocean.png new file mode 100644 index 000000000..e85df4e09 Binary files /dev/null and b/images/showcase/Even the Ocean.png differ diff --git a/images/showcase/Fist's Elimination Tower.png b/images/showcase/Fist's Elimination Tower.png new file mode 100644 index 000000000..397dfd760 Binary files /dev/null and b/images/showcase/Fist's Elimination Tower.png differ diff --git a/images/showcase/Flitter Inc..png b/images/showcase/Flitter Inc..png new file mode 100644 index 000000000..1faee6c69 Binary files /dev/null and b/images/showcase/Flitter Inc..png differ diff --git a/images/showcase/Friday Night Funkin'.png b/images/showcase/Friday Night Funkin'.png new file mode 100644 index 000000000..bab75a593 Binary files /dev/null and b/images/showcase/Friday Night Funkin'.png differ diff --git a/images/showcase/Future Knight DX.png b/images/showcase/Future Knight DX.png new file mode 100644 index 000000000..efeb0ca73 Binary files /dev/null and b/images/showcase/Future Knight DX.png differ diff --git a/images/showcase/Future Knight Remake.png b/images/showcase/Future Knight Remake.png new file mode 100644 index 000000000..58728a499 Binary files /dev/null and b/images/showcase/Future Knight Remake.png differ diff --git a/images/showcase/GULAG PARADISE.png b/images/showcase/GULAG PARADISE.png new file mode 100644 index 000000000..fef4710e9 Binary files /dev/null and b/images/showcase/GULAG PARADISE.png differ diff --git a/images/showcase/Genial Santa Claus 2.png b/images/showcase/Genial Santa Claus 2.png new file mode 100644 index 000000000..aacabef87 Binary files /dev/null and b/images/showcase/Genial Santa Claus 2.png differ diff --git a/images/showcase/Glitch Lab.png b/images/showcase/Glitch Lab.png new file mode 100644 index 000000000..6d56fe7cb Binary files /dev/null and b/images/showcase/Glitch Lab.png differ diff --git a/images/showcase/Glorch's Great Escape.png b/images/showcase/Glorch's Great Escape.png new file mode 100644 index 000000000..521a16096 Binary files /dev/null and b/images/showcase/Glorch's Great Escape.png differ diff --git a/images/showcase/Go! Go! PogoGirl.png b/images/showcase/Go! Go! PogoGirl.png new file mode 100644 index 000000000..0c2b677dc Binary files /dev/null and b/images/showcase/Go! Go! PogoGirl.png differ diff --git a/images/showcase/Heck House.png b/images/showcase/Heck House.png new file mode 100644 index 000000000..5ed8a0ec2 Binary files /dev/null and b/images/showcase/Heck House.png differ diff --git "a/images/showcase/Holobunnies Pause Caf\303\251.png" "b/images/showcase/Holobunnies Pause Caf\303\251.png" new file mode 100644 index 000000000..99a31af1b Binary files /dev/null and "b/images/showcase/Holobunnies Pause Caf\303\251.png" differ diff --git a/images/showcase/HyperBoarder.png b/images/showcase/HyperBoarder.png new file mode 100644 index 000000000..8dde73aa5 Binary files /dev/null and b/images/showcase/HyperBoarder.png differ diff --git a/images/showcase/Idle Farmer.png b/images/showcase/Idle Farmer.png new file mode 100644 index 000000000..6abc91e0e Binary files /dev/null and b/images/showcase/Idle Farmer.png differ diff --git a/images/showcase/LAZA KNITEZ!!.png b/images/showcase/LAZA KNITEZ!!.png new file mode 100644 index 000000000..e26279351 Binary files /dev/null and b/images/showcase/LAZA KNITEZ!!.png differ diff --git a/images/showcase/Monster Match.png b/images/showcase/Monster Match.png new file mode 100644 index 000000000..c09aeb7e7 Binary files /dev/null and b/images/showcase/Monster Match.png differ diff --git a/images/showcase/Odd Verdure.png b/images/showcase/Odd Verdure.png new file mode 100644 index 000000000..003040a97 Binary files /dev/null and b/images/showcase/Odd Verdure.png differ diff --git a/images/showcase/One Ship Two Ship Redshift Blueshift.png b/images/showcase/One Ship Two Ship Redshift Blueshift.png new file mode 100644 index 000000000..c34e1cd79 Binary files /dev/null and b/images/showcase/One Ship Two Ship Redshift Blueshift.png differ diff --git a/images/showcase/Peasant Knight.png b/images/showcase/Peasant Knight.png new file mode 100644 index 000000000..7a7944014 Binary files /dev/null and b/images/showcase/Peasant Knight.png differ diff --git a/images/showcase/Polaritron.png b/images/showcase/Polaritron.png new file mode 100644 index 000000000..d01142550 Binary files /dev/null and b/images/showcase/Polaritron.png differ diff --git a/images/showcase/Renegade Racing.png b/images/showcase/Renegade Racing.png new file mode 100644 index 000000000..ee5c0252f Binary files /dev/null and b/images/showcase/Renegade Racing.png differ diff --git a/images/showcase/SLIDE-0000.png b/images/showcase/SLIDE-0000.png new file mode 100644 index 000000000..a41924030 Binary files /dev/null and b/images/showcase/SLIDE-0000.png differ diff --git a/images/showcase/SUPER Cute Alien.png b/images/showcase/SUPER Cute Alien.png new file mode 100644 index 000000000..e976c25f9 Binary files /dev/null and b/images/showcase/SUPER Cute Alien.png differ diff --git a/images/showcase/Saving Alley Cats!.png b/images/showcase/Saving Alley Cats!.png new file mode 100644 index 000000000..a857bbe4c Binary files /dev/null and b/images/showcase/Saving Alley Cats!.png differ diff --git a/images/showcase/Shifter.png b/images/showcase/Shifter.png new file mode 100644 index 000000000..672b22102 Binary files /dev/null and b/images/showcase/Shifter.png differ diff --git a/images/showcase/Slime Time.png b/images/showcase/Slime Time.png new file mode 100644 index 000000000..c9531ccd6 Binary files /dev/null and b/images/showcase/Slime Time.png differ diff --git a/images/showcase/Solid Aether.png b/images/showcase/Solid Aether.png new file mode 100644 index 000000000..11569e530 Binary files /dev/null and b/images/showcase/Solid Aether.png differ diff --git a/images/showcase/Sort!Sort!Sort!.png b/images/showcase/Sort!Sort!Sort!.png new file mode 100644 index 000000000..4b2f6b712 Binary files /dev/null and b/images/showcase/Sort!Sort!Sort!.png differ diff --git a/images/showcase/Spacejacked.png b/images/showcase/Spacejacked.png new file mode 100644 index 000000000..c872095df Binary files /dev/null and b/images/showcase/Spacejacked.png differ diff --git a/images/showcase/Spooksville, USA.png b/images/showcase/Spooksville, USA.png new file mode 100644 index 000000000..f80c95130 Binary files /dev/null and b/images/showcase/Spooksville, USA.png differ diff --git a/images/showcase/Super Slime Arena.png b/images/showcase/Super Slime Arena.png new file mode 100644 index 000000000..c87e76ba2 Binary files /dev/null and b/images/showcase/Super Slime Arena.png differ diff --git a/images/showcase/The Enchanted Cave 2.png b/images/showcase/The Enchanted Cave 2.png new file mode 100644 index 000000000..6f31938a4 Binary files /dev/null and b/images/showcase/The Enchanted Cave 2.png differ diff --git a/images/showcase/The Wolf's Bite.png b/images/showcase/The Wolf's Bite.png new file mode 100644 index 000000000..105e8563a Binary files /dev/null and b/images/showcase/The Wolf's Bite.png differ diff --git a/images/showcase/Tomb Explorer.png b/images/showcase/Tomb Explorer.png new file mode 100644 index 000000000..17b699d65 Binary files /dev/null and b/images/showcase/Tomb Explorer.png differ diff --git a/images/showcase/UPSQUID.png b/images/showcase/UPSQUID.png new file mode 100644 index 000000000..7433e19ed Binary files /dev/null and b/images/showcase/UPSQUID.png differ diff --git a/images/showcase/Viking Warfare.png b/images/showcase/Viking Warfare.png new file mode 100644 index 000000000..7b8b00c94 Binary files /dev/null and b/images/showcase/Viking Warfare.png differ diff --git a/images/showcase/Werewolf Tycoon.png b/images/showcase/Werewolf Tycoon.png new file mode 100644 index 000000000..6a3e71769 Binary files /dev/null and b/images/showcase/Werewolf Tycoon.png differ diff --git a/images/showcase/Willy and Mathilda's Houseboat Adventure.png b/images/showcase/Willy and Mathilda's Houseboat Adventure.png new file mode 100644 index 000000000..d4c8eab00 Binary files /dev/null and b/images/showcase/Willy and Mathilda's Houseboat Adventure.png differ diff --git a/images/showcase/[Speer DX].png b/images/showcase/[Speer DX].png new file mode 100644 index 000000000..4eb9ba10f Binary files /dev/null and b/images/showcase/[Speer DX].png differ diff --git a/images/showcase/millstone.png b/images/showcase/millstone.png new file mode 100644 index 000000000..7c2f712bd Binary files /dev/null and b/images/showcase/millstone.png differ diff --git a/images/showcase/raw/Defender's Quest II.png b/images/showcase/raw/Defender's Quest II.png new file mode 100644 index 000000000..50941d099 Binary files /dev/null and b/images/showcase/raw/Defender's Quest II.png differ diff --git a/images/showcase/raw/ribbon.png b/images/showcase/raw/ribbon.png new file mode 100644 index 000000000..e445d3681 Binary files /dev/null and b/images/showcase/raw/ribbon.png differ diff --git a/images/showcase/raw/ribbon.svg b/images/showcase/raw/ribbon.svg new file mode 100644 index 000000000..09efa382a --- /dev/null +++ b/images/showcase/raw/ribbon.svg @@ -0,0 +1,78 @@ + + + + + + + + + + image/svg+xml + + + + + + + Coming soon... + + diff --git a/images/showcase/spaceSpuds.png b/images/showcase/spaceSpuds.png new file mode 100644 index 000000000..77f27dc9d Binary files /dev/null and b/images/showcase/spaceSpuds.png differ diff --git a/images/site-bg.png b/images/site-bg.png new file mode 100755 index 000000000..bfd6bf2a6 Binary files /dev/null and b/images/site-bg.png differ diff --git a/images/sponsors/gold/kongregate/kongregate_anthill.png b/images/sponsors/gold/kongregate/kongregate_anthill.png new file mode 100644 index 000000000..f968afcc8 Binary files /dev/null and b/images/sponsors/gold/kongregate/kongregate_anthill.png differ diff --git a/images/sponsors/gold/kongregate/kongregate_anthill.svg b/images/sponsors/gold/kongregate/kongregate_anthill.svg new file mode 100644 index 000000000..41250c211 --- /dev/null +++ b/images/sponsors/gold/kongregate/kongregate_anthill.svg @@ -0,0 +1,1060 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/sponsors/gold/solar-powered/logo-solarpoweredgames-inverted-256.png b/images/sponsors/gold/solar-powered/logo-solarpoweredgames-inverted-256.png new file mode 100644 index 000000000..9e1d6ed1d Binary files /dev/null and b/images/sponsors/gold/solar-powered/logo-solarpoweredgames-inverted-256.png differ diff --git a/images/sponsors/gold/solar-powered/logo-solarpoweredgames-inverted-512.png b/images/sponsors/gold/solar-powered/logo-solarpoweredgames-inverted-512.png new file mode 100644 index 000000000..531bb341c Binary files /dev/null and b/images/sponsors/gold/solar-powered/logo-solarpoweredgames-inverted-512.png differ diff --git a/images/sponsors/platinum/blue-bottle-games/bbgLogo256x256.png b/images/sponsors/platinum/blue-bottle-games/bbgLogo256x256.png new file mode 100644 index 000000000..f32360670 Binary files /dev/null and b/images/sponsors/platinum/blue-bottle-games/bbgLogo256x256.png differ diff --git a/images/sponsors/platinum/blue-bottle-games/bbgLogo512x512.png b/images/sponsors/platinum/blue-bottle-games/bbgLogo512x512.png new file mode 100644 index 000000000..fdf639738 Binary files /dev/null and b/images/sponsors/platinum/blue-bottle-games/bbgLogo512x512.png differ diff --git a/images/sponsors/platinum/blue-bottle-games/bbgLogoColor256x256.png b/images/sponsors/platinum/blue-bottle-games/bbgLogoColor256x256.png new file mode 100644 index 000000000..bfcc79026 Binary files /dev/null and b/images/sponsors/platinum/blue-bottle-games/bbgLogoColor256x256.png differ diff --git a/images/sponsors/platinum/blue-bottle-games/bbgLogoColor512x512.png b/images/sponsors/platinum/blue-bottle-games/bbgLogoColor512x512.png new file mode 100644 index 000000000..539c8b148 Binary files /dev/null and b/images/sponsors/platinum/blue-bottle-games/bbgLogoColor512x512.png differ diff --git a/images/sponsors/platinum/level-up-labs/lul_logo_circle.png b/images/sponsors/platinum/level-up-labs/lul_logo_circle.png new file mode 100644 index 000000000..9a5b264e9 Binary files /dev/null and b/images/sponsors/platinum/level-up-labs/lul_logo_circle.png differ diff --git a/images/sponsors/platinum/level-up-labs/lul_logo_full.png b/images/sponsors/platinum/level-up-labs/lul_logo_full.png new file mode 100644 index 000000000..d496729af Binary files /dev/null and b/images/sponsors/platinum/level-up-labs/lul_logo_full.png differ diff --git a/images/sponsors/platinum/level-up-labs/lul_logo_small_square.png b/images/sponsors/platinum/level-up-labs/lul_logo_small_square.png new file mode 100644 index 000000000..b0a900d1f Binary files /dev/null and b/images/sponsors/platinum/level-up-labs/lul_logo_small_square.png differ diff --git a/images/sponsors/silver/aseprite/aseprite-logo.png b/images/sponsors/silver/aseprite/aseprite-logo.png new file mode 100644 index 000000000..3a9ba59aa Binary files /dev/null and b/images/sponsors/silver/aseprite/aseprite-logo.png differ diff --git a/images/sponsors/silver/ludoko/logotype256.png b/images/sponsors/silver/ludoko/logotype256.png new file mode 100644 index 000000000..30af0cac7 Binary files /dev/null and b/images/sponsors/silver/ludoko/logotype256.png differ diff --git a/images/sponsors/silver/ludoko/logotype256_bw.png b/images/sponsors/silver/ludoko/logotype256_bw.png new file mode 100644 index 000000000..5239149fa Binary files /dev/null and b/images/sponsors/silver/ludoko/logotype256_bw.png differ diff --git a/images/sponsors/silver/ludoko/logotype256_bw_whitetext.png b/images/sponsors/silver/ludoko/logotype256_bw_whitetext.png new file mode 100644 index 000000000..53e40e844 Binary files /dev/null and b/images/sponsors/silver/ludoko/logotype256_bw_whitetext.png differ diff --git a/images/sponsors/silver/ludoko/logotype256_whitetext.png b/images/sponsors/silver/ludoko/logotype256_whitetext.png new file mode 100644 index 000000000..d723ce87e Binary files /dev/null and b/images/sponsors/silver/ludoko/logotype256_whitetext.png differ diff --git a/images/sponsors/silver/ludoko/logotype512.png b/images/sponsors/silver/ludoko/logotype512.png new file mode 100644 index 000000000..d88ebc5cd Binary files /dev/null and b/images/sponsors/silver/ludoko/logotype512.png differ diff --git a/images/sponsors/silver/ludoko/logotype512_bw.png b/images/sponsors/silver/ludoko/logotype512_bw.png new file mode 100644 index 000000000..4b669710c Binary files /dev/null and b/images/sponsors/silver/ludoko/logotype512_bw.png differ diff --git a/images/sponsors/silver/ludoko/logotype512_bw_whitetext.png b/images/sponsors/silver/ludoko/logotype512_bw_whitetext.png new file mode 100644 index 000000000..b4092cbba Binary files /dev/null and b/images/sponsors/silver/ludoko/logotype512_bw_whitetext.png differ diff --git a/images/sponsors/silver/ludoko/logotype512_whitetext.png b/images/sponsors/silver/ludoko/logotype512_whitetext.png new file mode 100644 index 000000000..ad04e564b Binary files /dev/null and b/images/sponsors/silver/ludoko/logotype512_whitetext.png differ diff --git a/images/sponsors/silver/lukehut/lukehut-logo-256.png b/images/sponsors/silver/lukehut/lukehut-logo-256.png new file mode 100644 index 000000000..a52f7a79d Binary files /dev/null and b/images/sponsors/silver/lukehut/lukehut-logo-256.png differ diff --git a/images/sponsors/silver/lukehut/lukehut-logo-512.png b/images/sponsors/silver/lukehut/lukehut-logo-512.png new file mode 100644 index 000000000..9992444f7 Binary files /dev/null and b/images/sponsors/silver/lukehut/lukehut-logo-512.png differ diff --git a/images/sponsors/silver/txori/txori.svg b/images/sponsors/silver/txori/txori.svg new file mode 100644 index 000000000..786b68f09 --- /dev/null +++ b/images/sponsors/silver/txori/txori.svg @@ -0,0 +1,31 @@ + + + + +]> + + + + + + + + + + + + + diff --git a/images/sponsors/silver/txori/txori_nocolor.svg b/images/sponsors/silver/txori/txori_nocolor.svg new file mode 100644 index 000000000..fcb576dd6 --- /dev/null +++ b/images/sponsors/silver/txori/txori_nocolor.svg @@ -0,0 +1,31 @@ + + + + +]> + + + + + + + + + + + + + diff --git a/images/targets/android-logo.svg b/images/targets/android-logo.svg new file mode 100644 index 000000000..9e2173a81 --- /dev/null +++ b/images/targets/android-logo.svg @@ -0,0 +1,68 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/images/targets/apple-logo.svg b/images/targets/apple-logo.svg new file mode 100644 index 000000000..91863387c --- /dev/null +++ b/images/targets/apple-logo.svg @@ -0,0 +1,59 @@ + + + + + + + + image/svg+xml + + Apple Logo + + + + + + + diff --git a/images/targets/blackberry-logo.svg b/images/targets/blackberry-logo.svg new file mode 100644 index 000000000..c74060150 --- /dev/null +++ b/images/targets/blackberry-logo.svg @@ -0,0 +1,98 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/targets/flash-logo.svg b/images/targets/flash-logo.svg new file mode 100644 index 000000000..0e239bfd9 --- /dev/null +++ b/images/targets/flash-logo.svg @@ -0,0 +1,56 @@ + + + + + + + + image/svg+xml + + + + + + + + diff --git a/images/targets/github-logo.svg b/images/targets/github-logo.svg new file mode 100644 index 000000000..37fa923df --- /dev/null +++ b/images/targets/github-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/targets/html5-logo.svg b/images/targets/html5-logo.svg new file mode 100644 index 000000000..f74c70b1b --- /dev/null +++ b/images/targets/html5-logo.svg @@ -0,0 +1,54 @@ + + + + + + image/svg+xml + + + + + + + HTML5 Logo Badge + + diff --git a/images/targets/humble-logo.svg b/images/targets/humble-logo.svg new file mode 100644 index 000000000..d049a084d --- /dev/null +++ b/images/targets/humble-logo.svg @@ -0,0 +1,24 @@ + + + + H - White + Created with Sketch. + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/targets/ios-logo.png b/images/targets/ios-logo.png new file mode 100644 index 000000000..c11a2b033 Binary files /dev/null and b/images/targets/ios-logo.png differ diff --git a/images/targets/itch-logo.svg b/images/targets/itch-logo.svg new file mode 100644 index 000000000..4a4ac250b --- /dev/null +++ b/images/targets/itch-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/targets/linux-logo.svg b/images/targets/linux-logo.svg new file mode 100644 index 000000000..925939f0a --- /dev/null +++ b/images/targets/linux-logo.svg @@ -0,0 +1,15 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/images/targets/newgrounds-logo.svg b/images/targets/newgrounds-logo.svg new file mode 100644 index 000000000..614f59799 --- /dev/null +++ b/images/targets/newgrounds-logo.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + diff --git a/images/targets/ouya-logo.svg b/images/targets/ouya-logo.svg new file mode 100644 index 000000000..40a691748 --- /dev/null +++ b/images/targets/ouya-logo.svg @@ -0,0 +1,12 @@ + + + Slice 1 + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + \ No newline at end of file diff --git a/images/targets/ps-logo.svg b/images/targets/ps-logo.svg new file mode 100644 index 000000000..7764bebfa --- /dev/null +++ b/images/targets/ps-logo.svg @@ -0,0 +1,67 @@ + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/images/targets/steam-logo.svg b/images/targets/steam-logo.svg new file mode 100644 index 000000000..a7c9d2461 --- /dev/null +++ b/images/targets/steam-logo.svg @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/images/targets/switch-logo.svg b/images/targets/switch-logo.svg new file mode 100644 index 000000000..9c0ad5145 --- /dev/null +++ b/images/targets/switch-logo.svg @@ -0,0 +1,69 @@ + + + + + +Created by potrace 1.13, written by Peter Selinger 2001-2015 + + + image/svg+xml + + + + + + + + + + diff --git a/images/targets/windows-logo.svg b/images/targets/windows-logo.svg new file mode 100644 index 000000000..9722d4c97 --- /dev/null +++ b/images/targets/windows-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/targets/xbox-logo.svg b/images/targets/xbox-logo.svg new file mode 100644 index 000000000..3765f8b4a --- /dev/null +++ b/images/targets/xbox-logo.svg @@ -0,0 +1,68 @@ + + + + + Xbox Logo + + + + image/svg+xml + + Xbox Logo + + + + + + + + + diff --git a/img/-S8SzVpM3m-200.png b/img/-S8SzVpM3m-200.png new file mode 100644 index 000000000..5f76abb7c Binary files /dev/null and b/img/-S8SzVpM3m-200.png differ diff --git a/img/-Sj6dYEkaR-500.png b/img/-Sj6dYEkaR-500.png new file mode 100644 index 000000000..dfadb8d30 Binary files /dev/null and b/img/-Sj6dYEkaR-500.png differ diff --git a/img/-mtXjeEUa2-70.png b/img/-mtXjeEUa2-70.png new file mode 100644 index 000000000..4b2dc41db Binary files /dev/null and b/img/-mtXjeEUa2-70.png differ diff --git a/img/1SRz1xYIIc-345.png b/img/1SRz1xYIIc-345.png new file mode 100644 index 000000000..fe7875305 Binary files /dev/null and b/img/1SRz1xYIIc-345.png differ diff --git a/img/1T2_aYUAca-200.png b/img/1T2_aYUAca-200.png new file mode 100644 index 000000000..03108e7ba Binary files /dev/null and b/img/1T2_aYUAca-200.png differ diff --git a/img/2Zz0vots9k-70.png b/img/2Zz0vots9k-70.png new file mode 100644 index 000000000..5097a828f Binary files /dev/null and b/img/2Zz0vots9k-70.png differ diff --git a/img/2nA1DWbtIO-250.png b/img/2nA1DWbtIO-250.png new file mode 100644 index 000000000..a831acda5 Binary files /dev/null and b/img/2nA1DWbtIO-250.png differ diff --git a/img/2y8Lkzb0dE-70.png b/img/2y8Lkzb0dE-70.png new file mode 100644 index 000000000..ba60ef685 Binary files /dev/null and b/img/2y8Lkzb0dE-70.png differ diff --git a/img/3NXRWH7_Wd-500.png b/img/3NXRWH7_Wd-500.png new file mode 100644 index 000000000..c7e0753ae Binary files /dev/null and b/img/3NXRWH7_Wd-500.png differ diff --git a/img/3qwnVAytyi-200.png b/img/3qwnVAytyi-200.png new file mode 100644 index 000000000..04127e6e9 Binary files /dev/null and b/img/3qwnVAytyi-200.png differ diff --git a/img/45WyOf-3fK-345.png b/img/45WyOf-3fK-345.png new file mode 100644 index 000000000..8a91a88d0 Binary files /dev/null and b/img/45WyOf-3fK-345.png differ diff --git a/img/4IKTi04XWO-200.png b/img/4IKTi04XWO-200.png new file mode 100644 index 000000000..133ce87c0 Binary files /dev/null and b/img/4IKTi04XWO-200.png differ diff --git a/img/4KrJsA0eyn-70.png b/img/4KrJsA0eyn-70.png new file mode 100644 index 000000000..539589918 Binary files /dev/null and b/img/4KrJsA0eyn-70.png differ diff --git a/img/4WdbK5WEP2-345.png b/img/4WdbK5WEP2-345.png new file mode 100644 index 000000000..d5f3bd7f8 Binary files /dev/null and b/img/4WdbK5WEP2-345.png differ diff --git a/img/4kHOArBn0P-345.png b/img/4kHOArBn0P-345.png new file mode 100644 index 000000000..e7c427188 Binary files /dev/null and b/img/4kHOArBn0P-345.png differ diff --git a/img/50ywStP0IL-345.png b/img/50ywStP0IL-345.png new file mode 100644 index 000000000..74b38de87 Binary files /dev/null and b/img/50ywStP0IL-345.png differ diff --git a/img/5U5WPafU9y-70.png b/img/5U5WPafU9y-70.png new file mode 100644 index 000000000..3f38c05ae Binary files /dev/null and b/img/5U5WPafU9y-70.png differ diff --git a/img/5esh8SRdxc-200.png b/img/5esh8SRdxc-200.png new file mode 100644 index 000000000..c5abbcd5e Binary files /dev/null and b/img/5esh8SRdxc-200.png differ diff --git a/img/6LSyTQpiUO-160.png b/img/6LSyTQpiUO-160.png new file mode 100644 index 000000000..81fbfb2a5 Binary files /dev/null and b/img/6LSyTQpiUO-160.png differ diff --git a/img/77t9CqnHio-345.png b/img/77t9CqnHio-345.png new file mode 100644 index 000000000..bc8bbc4f2 Binary files /dev/null and b/img/77t9CqnHio-345.png differ diff --git a/img/7V30nwc14c-200.png b/img/7V30nwc14c-200.png new file mode 100644 index 000000000..ee3f4f5ec Binary files /dev/null and b/img/7V30nwc14c-200.png differ diff --git a/img/7evwvQppMu-200.png b/img/7evwvQppMu-200.png new file mode 100644 index 000000000..8cd1c8d26 Binary files /dev/null and b/img/7evwvQppMu-200.png differ diff --git a/img/7iBWVWFbCX-200.png b/img/7iBWVWFbCX-200.png new file mode 100644 index 000000000..2750feeaf Binary files /dev/null and b/img/7iBWVWFbCX-200.png differ diff --git a/img/80RXOy_pun-200.png b/img/80RXOy_pun-200.png new file mode 100644 index 000000000..1f03d3a59 Binary files /dev/null and b/img/80RXOy_pun-200.png differ diff --git a/img/8M5-TvC3IU-70.png b/img/8M5-TvC3IU-70.png new file mode 100644 index 000000000..d0b31e31d Binary files /dev/null and b/img/8M5-TvC3IU-70.png differ diff --git a/img/8SGJrrhGxJ-70.png b/img/8SGJrrhGxJ-70.png new file mode 100644 index 000000000..7acda0425 Binary files /dev/null and b/img/8SGJrrhGxJ-70.png differ diff --git a/img/9wIFc2V-y3-200.png b/img/9wIFc2V-y3-200.png new file mode 100644 index 000000000..30d81091e Binary files /dev/null and b/img/9wIFc2V-y3-200.png differ diff --git a/img/AmTes5Aa7E-200.png b/img/AmTes5Aa7E-200.png new file mode 100644 index 000000000..2b3783ee5 Binary files /dev/null and b/img/AmTes5Aa7E-200.png differ diff --git a/img/Ap0BLPQk5K-200.png b/img/Ap0BLPQk5K-200.png new file mode 100644 index 000000000..f4565f63b Binary files /dev/null and b/img/Ap0BLPQk5K-200.png differ diff --git a/img/Ar8eva8tk9-200.png b/img/Ar8eva8tk9-200.png new file mode 100644 index 000000000..da51e772d Binary files /dev/null and b/img/Ar8eva8tk9-200.png differ diff --git a/img/BPwu2IXtG4-70.png b/img/BPwu2IXtG4-70.png new file mode 100644 index 000000000..291bdfe1a Binary files /dev/null and b/img/BPwu2IXtG4-70.png differ diff --git a/img/Bb00opaufk-70.png b/img/Bb00opaufk-70.png new file mode 100644 index 000000000..2eaed68f3 Binary files /dev/null and b/img/Bb00opaufk-70.png differ diff --git a/img/BuQUD7MKMY-345.png b/img/BuQUD7MKMY-345.png new file mode 100644 index 000000000..68f1b3e1d Binary files /dev/null and b/img/BuQUD7MKMY-345.png differ diff --git a/img/CgUp3WE0Vv-250.png b/img/CgUp3WE0Vv-250.png new file mode 100644 index 000000000..75061cc63 Binary files /dev/null and b/img/CgUp3WE0Vv-250.png differ diff --git a/img/CjluTE4WdT-345.png b/img/CjluTE4WdT-345.png new file mode 100644 index 000000000..c9f9f5771 Binary files /dev/null and b/img/CjluTE4WdT-345.png differ diff --git a/img/D2dVPScivh-500.png b/img/D2dVPScivh-500.png new file mode 100644 index 000000000..1ee211689 Binary files /dev/null and b/img/D2dVPScivh-500.png differ diff --git a/img/D7j4R4ZHag-345.png b/img/D7j4R4ZHag-345.png new file mode 100644 index 000000000..3b2ffe5f6 Binary files /dev/null and b/img/D7j4R4ZHag-345.png differ diff --git a/img/D8HzZeeWal-200.png b/img/D8HzZeeWal-200.png new file mode 100644 index 000000000..8bc3588b7 Binary files /dev/null and b/img/D8HzZeeWal-200.png differ diff --git a/img/DG7oCS8HCW-70.png b/img/DG7oCS8HCW-70.png new file mode 100644 index 000000000..375e08820 Binary files /dev/null and b/img/DG7oCS8HCW-70.png differ diff --git a/img/Dlji1tcFGB-250.png b/img/Dlji1tcFGB-250.png new file mode 100644 index 000000000..9cf25d8c2 Binary files /dev/null and b/img/Dlji1tcFGB-250.png differ diff --git a/img/Dt3XwPTCKP-160.png b/img/Dt3XwPTCKP-160.png new file mode 100644 index 000000000..1bf022037 Binary files /dev/null and b/img/Dt3XwPTCKP-160.png differ diff --git a/img/Dwl21CD7lv-70.png b/img/Dwl21CD7lv-70.png new file mode 100644 index 000000000..8a43dabf3 Binary files /dev/null and b/img/Dwl21CD7lv-70.png differ diff --git a/img/ETqvW6XJJJ-345.png b/img/ETqvW6XJJJ-345.png new file mode 100644 index 000000000..f81744fca Binary files /dev/null and b/img/ETqvW6XJJJ-345.png differ diff --git a/img/E_XsnsKdrH-200.png b/img/E_XsnsKdrH-200.png new file mode 100644 index 000000000..14d6a9d4d Binary files /dev/null and b/img/E_XsnsKdrH-200.png differ diff --git a/img/EsKKCGeKw8-200.png b/img/EsKKCGeKw8-200.png new file mode 100644 index 000000000..ff0e7fe6c Binary files /dev/null and b/img/EsKKCGeKw8-200.png differ diff --git a/img/FjOCiiupwF-200.png b/img/FjOCiiupwF-200.png new file mode 100644 index 000000000..a612d845f Binary files /dev/null and b/img/FjOCiiupwF-200.png differ diff --git a/img/GEGqlEyN-e-200.png b/img/GEGqlEyN-e-200.png new file mode 100644 index 000000000..3cccf94f5 Binary files /dev/null and b/img/GEGqlEyN-e-200.png differ diff --git a/img/GKiw1_WDfj-345.png b/img/GKiw1_WDfj-345.png new file mode 100644 index 000000000..985261502 Binary files /dev/null and b/img/GKiw1_WDfj-345.png differ diff --git a/img/H1i6tMKCgG-70.png b/img/H1i6tMKCgG-70.png new file mode 100644 index 000000000..e2e2b4691 Binary files /dev/null and b/img/H1i6tMKCgG-70.png differ diff --git a/img/HRqFNLgLLW-500.png b/img/HRqFNLgLLW-500.png new file mode 100644 index 000000000..3861ae954 Binary files /dev/null and b/img/HRqFNLgLLW-500.png differ diff --git a/img/H_qGc6MVpP-70.png b/img/H_qGc6MVpP-70.png new file mode 100644 index 000000000..6ceb2f794 Binary files /dev/null and b/img/H_qGc6MVpP-70.png differ diff --git a/img/I18rOd7b4x-70.png b/img/I18rOd7b4x-70.png new file mode 100644 index 000000000..b8df1fa7f Binary files /dev/null and b/img/I18rOd7b4x-70.png differ diff --git a/img/IVlu3ZWz1O-70.png b/img/IVlu3ZWz1O-70.png new file mode 100644 index 000000000..1d43e28f9 Binary files /dev/null and b/img/IVlu3ZWz1O-70.png differ diff --git a/img/Jkkz53MJ-k-345.png b/img/Jkkz53MJ-k-345.png new file mode 100644 index 000000000..6a529c0fc Binary files /dev/null and b/img/Jkkz53MJ-k-345.png differ diff --git a/img/K3XfkS36um-200.png b/img/K3XfkS36um-200.png new file mode 100644 index 000000000..8dfdd75d8 Binary files /dev/null and b/img/K3XfkS36um-200.png differ diff --git a/img/KL29ZRlpuY-250.png b/img/KL29ZRlpuY-250.png new file mode 100644 index 000000000..7ef8fd9e5 Binary files /dev/null and b/img/KL29ZRlpuY-250.png differ diff --git a/img/KUUWueus4x-70.png b/img/KUUWueus4x-70.png new file mode 100644 index 000000000..510232bc5 Binary files /dev/null and b/img/KUUWueus4x-70.png differ diff --git a/img/KmdsCqwfl9-250.png b/img/KmdsCqwfl9-250.png new file mode 100644 index 000000000..1d2b9a23f Binary files /dev/null and b/img/KmdsCqwfl9-250.png differ diff --git a/img/Kn0xGISrrK-200.png b/img/Kn0xGISrrK-200.png new file mode 100644 index 000000000..740430b72 Binary files /dev/null and b/img/Kn0xGISrrK-200.png differ diff --git a/img/KyT-s4N-Hk-70.png b/img/KyT-s4N-Hk-70.png new file mode 100644 index 000000000..b47c6b5f3 Binary files /dev/null and b/img/KyT-s4N-Hk-70.png differ diff --git a/img/LS2vrEZrnp-70.png b/img/LS2vrEZrnp-70.png new file mode 100644 index 000000000..86352edb2 Binary files /dev/null and b/img/LS2vrEZrnp-70.png differ diff --git a/img/LoHEiyeUv9-200.png b/img/LoHEiyeUv9-200.png new file mode 100644 index 000000000..367a51f8b Binary files /dev/null and b/img/LoHEiyeUv9-200.png differ diff --git a/img/M2xk73DlXA-200.png b/img/M2xk73DlXA-200.png new file mode 100644 index 000000000..5623ccc47 Binary files /dev/null and b/img/M2xk73DlXA-200.png differ diff --git a/img/M4bT7albjw-345.png b/img/M4bT7albjw-345.png new file mode 100644 index 000000000..8dae11029 Binary files /dev/null and b/img/M4bT7albjw-345.png differ diff --git a/img/M5ISZUt68b-200.png b/img/M5ISZUt68b-200.png new file mode 100644 index 000000000..e2eaf3ee6 Binary files /dev/null and b/img/M5ISZUt68b-200.png differ diff --git a/img/MSTaI8cpsH-70.png b/img/MSTaI8cpsH-70.png new file mode 100644 index 000000000..74abfbb2f Binary files /dev/null and b/img/MSTaI8cpsH-70.png differ diff --git a/img/NMnh2XY8Zl-160.png b/img/NMnh2XY8Zl-160.png new file mode 100644 index 000000000..b920b84dd Binary files /dev/null and b/img/NMnh2XY8Zl-160.png differ diff --git a/img/NiIPVsJxD_-200.png b/img/NiIPVsJxD_-200.png new file mode 100644 index 000000000..09ab9803f Binary files /dev/null and b/img/NiIPVsJxD_-200.png differ diff --git a/img/Nwy0g7ihoy-70.png b/img/Nwy0g7ihoy-70.png new file mode 100644 index 000000000..a86899da9 Binary files /dev/null and b/img/Nwy0g7ihoy-70.png differ diff --git a/img/O1WRx9iC84-345.png b/img/O1WRx9iC84-345.png new file mode 100644 index 000000000..1a7661311 Binary files /dev/null and b/img/O1WRx9iC84-345.png differ diff --git a/img/OM87glflIX-70.png b/img/OM87glflIX-70.png new file mode 100644 index 000000000..831933439 Binary files /dev/null and b/img/OM87glflIX-70.png differ diff --git a/img/OVRpeczdce-200.png b/img/OVRpeczdce-200.png new file mode 100644 index 000000000..5f0b4574d Binary files /dev/null and b/img/OVRpeczdce-200.png differ diff --git a/img/Ow0s4_XtYl-345.png b/img/Ow0s4_XtYl-345.png new file mode 100644 index 000000000..402117522 Binary files /dev/null and b/img/Ow0s4_XtYl-345.png differ diff --git a/img/PMamc-nKri-200.png b/img/PMamc-nKri-200.png new file mode 100644 index 000000000..6f9587d60 Binary files /dev/null and b/img/PMamc-nKri-200.png differ diff --git a/img/PR0gGZFOSX-200.png b/img/PR0gGZFOSX-200.png new file mode 100644 index 000000000..cc33fa83f Binary files /dev/null and b/img/PR0gGZFOSX-200.png differ diff --git a/img/PyhmF7Uylu-200.png b/img/PyhmF7Uylu-200.png new file mode 100644 index 000000000..389fa968c Binary files /dev/null and b/img/PyhmF7Uylu-200.png differ diff --git a/img/PzJSs7oRus-70.png b/img/PzJSs7oRus-70.png new file mode 100644 index 000000000..e1639921d Binary files /dev/null and b/img/PzJSs7oRus-70.png differ diff --git a/img/Q4WBdfSgIM-200.png b/img/Q4WBdfSgIM-200.png new file mode 100644 index 000000000..138f09733 Binary files /dev/null and b/img/Q4WBdfSgIM-200.png differ diff --git a/img/QJE0t1VZBm-70.png b/img/QJE0t1VZBm-70.png new file mode 100644 index 000000000..1f0de806b Binary files /dev/null and b/img/QJE0t1VZBm-70.png differ diff --git a/img/RSpOB-EqiC-70.png b/img/RSpOB-EqiC-70.png new file mode 100644 index 000000000..df01a7a34 Binary files /dev/null and b/img/RSpOB-EqiC-70.png differ diff --git a/img/SN25IgjwfJ-200.png b/img/SN25IgjwfJ-200.png new file mode 100644 index 000000000..a00b1a7fa Binary files /dev/null and b/img/SN25IgjwfJ-200.png differ diff --git a/img/SQs_430MYm-70.png b/img/SQs_430MYm-70.png new file mode 100644 index 000000000..cb10624fb Binary files /dev/null and b/img/SQs_430MYm-70.png differ diff --git a/img/ScyX9BPuOI-70.png b/img/ScyX9BPuOI-70.png new file mode 100644 index 000000000..4a17bcd66 Binary files /dev/null and b/img/ScyX9BPuOI-70.png differ diff --git a/img/SwKZY8wWY3-70.png b/img/SwKZY8wWY3-70.png new file mode 100644 index 000000000..0671c7df3 Binary files /dev/null and b/img/SwKZY8wWY3-70.png differ diff --git a/img/TIjOR8CV_o-200.png b/img/TIjOR8CV_o-200.png new file mode 100644 index 000000000..ffd9f5689 Binary files /dev/null and b/img/TIjOR8CV_o-200.png differ diff --git a/img/TY8LpleAk7-200.png b/img/TY8LpleAk7-200.png new file mode 100644 index 000000000..722abd85e Binary files /dev/null and b/img/TY8LpleAk7-200.png differ diff --git a/img/U6iSVURDe8-345.png b/img/U6iSVURDe8-345.png new file mode 100644 index 000000000..925f0ce10 Binary files /dev/null and b/img/U6iSVURDe8-345.png differ diff --git a/img/UQdOaT-M7O-345.png b/img/UQdOaT-M7O-345.png new file mode 100644 index 000000000..cb7ecf369 Binary files /dev/null and b/img/UQdOaT-M7O-345.png differ diff --git a/img/UTeNyuLKud-200.png b/img/UTeNyuLKud-200.png new file mode 100644 index 000000000..394b82913 Binary files /dev/null and b/img/UTeNyuLKud-200.png differ diff --git a/img/UUdazRtv8a-345.png b/img/UUdazRtv8a-345.png new file mode 100644 index 000000000..d38240eec Binary files /dev/null and b/img/UUdazRtv8a-345.png differ diff --git a/img/UgyYMhM3IF-70.png b/img/UgyYMhM3IF-70.png new file mode 100644 index 000000000..d3b240bc4 Binary files /dev/null and b/img/UgyYMhM3IF-70.png differ diff --git a/img/V_YnnxuE3I-200.png b/img/V_YnnxuE3I-200.png new file mode 100644 index 000000000..cc9e03861 Binary files /dev/null and b/img/V_YnnxuE3I-200.png differ diff --git a/img/V_jpzIjeJ7-345.png b/img/V_jpzIjeJ7-345.png new file mode 100644 index 000000000..eb4bcf910 Binary files /dev/null and b/img/V_jpzIjeJ7-345.png differ diff --git a/img/Ve_3xm0DOU-70.png b/img/Ve_3xm0DOU-70.png new file mode 100644 index 000000000..861c1dc0e Binary files /dev/null and b/img/Ve_3xm0DOU-70.png differ diff --git a/img/VmTvLfarmJ-200.png b/img/VmTvLfarmJ-200.png new file mode 100644 index 000000000..12a501d81 Binary files /dev/null and b/img/VmTvLfarmJ-200.png differ diff --git a/img/Vto2vrbYgv-70.png b/img/Vto2vrbYgv-70.png new file mode 100644 index 000000000..52bbe4901 Binary files /dev/null and b/img/Vto2vrbYgv-70.png differ diff --git a/img/W6vswqafsb-70.png b/img/W6vswqafsb-70.png new file mode 100644 index 000000000..389279b12 Binary files /dev/null and b/img/W6vswqafsb-70.png differ diff --git a/img/W7nG69CBkh-70.png b/img/W7nG69CBkh-70.png new file mode 100644 index 000000000..6957d8c9b Binary files /dev/null and b/img/W7nG69CBkh-70.png differ diff --git a/img/WZ3z3P7JRM-70.png b/img/WZ3z3P7JRM-70.png new file mode 100644 index 000000000..880071b6d Binary files /dev/null and b/img/WZ3z3P7JRM-70.png differ diff --git a/img/WaVou0Uft6-200.png b/img/WaVou0Uft6-200.png new file mode 100644 index 000000000..59499068d Binary files /dev/null and b/img/WaVou0Uft6-200.png differ diff --git a/img/Wl2BJZBOG0-200.png b/img/Wl2BJZBOG0-200.png new file mode 100644 index 000000000..1281fbc93 Binary files /dev/null and b/img/Wl2BJZBOG0-200.png differ diff --git a/img/X5mJmcbkrO-345.png b/img/X5mJmcbkrO-345.png new file mode 100644 index 000000000..b412c8e78 Binary files /dev/null and b/img/X5mJmcbkrO-345.png differ diff --git a/img/XDTUGSKT1Y-70.png b/img/XDTUGSKT1Y-70.png new file mode 100644 index 000000000..127c98a8b Binary files /dev/null and b/img/XDTUGSKT1Y-70.png differ diff --git a/img/XNTnrVw-vC-345.png b/img/XNTnrVw-vC-345.png new file mode 100644 index 000000000..1e848b30f Binary files /dev/null and b/img/XNTnrVw-vC-345.png differ diff --git a/img/XVJZ3vXYuN-70.png b/img/XVJZ3vXYuN-70.png new file mode 100644 index 000000000..bf513b444 Binary files /dev/null and b/img/XVJZ3vXYuN-70.png differ diff --git a/img/YCEY-EdeM_-70.png b/img/YCEY-EdeM_-70.png new file mode 100644 index 000000000..4c22996c4 Binary files /dev/null and b/img/YCEY-EdeM_-70.png differ diff --git a/img/YLj6UGax1j-200.png b/img/YLj6UGax1j-200.png new file mode 100644 index 000000000..f0195a538 Binary files /dev/null and b/img/YLj6UGax1j-200.png differ diff --git a/img/YPHfpNgvbV-200.png b/img/YPHfpNgvbV-200.png new file mode 100644 index 000000000..65de674c6 Binary files /dev/null and b/img/YPHfpNgvbV-200.png differ diff --git a/img/Yp1dvkpkVT-70.png b/img/Yp1dvkpkVT-70.png new file mode 100644 index 000000000..4ce19a3fd Binary files /dev/null and b/img/Yp1dvkpkVT-70.png differ diff --git a/img/Z9ln71GxGV-200.png b/img/Z9ln71GxGV-200.png new file mode 100644 index 000000000..a95315999 Binary files /dev/null and b/img/Z9ln71GxGV-200.png differ diff --git a/img/_DWvAZxydH-70.png b/img/_DWvAZxydH-70.png new file mode 100644 index 000000000..fcc69ebc3 Binary files /dev/null and b/img/_DWvAZxydH-70.png differ diff --git a/img/_J8bdY3dKA-70.png b/img/_J8bdY3dKA-70.png new file mode 100644 index 000000000..aa8db2483 Binary files /dev/null and b/img/_J8bdY3dKA-70.png differ diff --git a/img/_W77a1WDFT-345.png b/img/_W77a1WDFT-345.png new file mode 100644 index 000000000..32b05458d Binary files /dev/null and b/img/_W77a1WDFT-345.png differ diff --git a/img/_Ygx-qyGas-70.png b/img/_Ygx-qyGas-70.png new file mode 100644 index 000000000..34f5b32dc Binary files /dev/null and b/img/_Ygx-qyGas-70.png differ diff --git a/img/a3nGZMIzRX-200.png b/img/a3nGZMIzRX-200.png new file mode 100644 index 000000000..d529039b1 Binary files /dev/null and b/img/a3nGZMIzRX-200.png differ diff --git a/img/aFiH7aeoe2-70.png b/img/aFiH7aeoe2-70.png new file mode 100644 index 000000000..0df3befd0 Binary files /dev/null and b/img/aFiH7aeoe2-70.png differ diff --git a/img/btPQpUCEGS-70.png b/img/btPQpUCEGS-70.png new file mode 100644 index 000000000..8971c1bb7 Binary files /dev/null and b/img/btPQpUCEGS-70.png differ diff --git a/img/coZsXFQLfu-200.png b/img/coZsXFQLfu-200.png new file mode 100644 index 000000000..46dc206f9 Binary files /dev/null and b/img/coZsXFQLfu-200.png differ diff --git a/img/d17CahyuX3-200.png b/img/d17CahyuX3-200.png new file mode 100644 index 000000000..ddaeb2279 Binary files /dev/null and b/img/d17CahyuX3-200.png differ diff --git a/img/d6aGiPFv61-345.png b/img/d6aGiPFv61-345.png new file mode 100644 index 000000000..37a37cad0 Binary files /dev/null and b/img/d6aGiPFv61-345.png differ diff --git a/img/dAR7JZBtub-200.png b/img/dAR7JZBtub-200.png new file mode 100644 index 000000000..63e2703a0 Binary files /dev/null and b/img/dAR7JZBtub-200.png differ diff --git a/img/dX2SzcUeBV-345.png b/img/dX2SzcUeBV-345.png new file mode 100644 index 000000000..065e1a8f6 Binary files /dev/null and b/img/dX2SzcUeBV-345.png differ diff --git a/img/e02q0nJfZ8-200.png b/img/e02q0nJfZ8-200.png new file mode 100644 index 000000000..f29c2912d Binary files /dev/null and b/img/e02q0nJfZ8-200.png differ diff --git a/img/e32L479WZd-200.png b/img/e32L479WZd-200.png new file mode 100644 index 000000000..fb3fe070b Binary files /dev/null and b/img/e32L479WZd-200.png differ diff --git a/img/e6PJVAr4gh-70.png b/img/e6PJVAr4gh-70.png new file mode 100644 index 000000000..ea3f0a520 Binary files /dev/null and b/img/e6PJVAr4gh-70.png differ diff --git a/img/eYaJhXLARb-200.png b/img/eYaJhXLARb-200.png new file mode 100644 index 000000000..b76911abd Binary files /dev/null and b/img/eYaJhXLARb-200.png differ diff --git a/img/ea6ncWkcsD-70.png b/img/ea6ncWkcsD-70.png new file mode 100644 index 000000000..c66c34270 Binary files /dev/null and b/img/ea6ncWkcsD-70.png differ diff --git a/img/egrlnDpaDR-70.png b/img/egrlnDpaDR-70.png new file mode 100644 index 000000000..2d3c29fa8 Binary files /dev/null and b/img/egrlnDpaDR-70.png differ diff --git a/img/ezWvPY_vsI-500.png b/img/ezWvPY_vsI-500.png new file mode 100644 index 000000000..15f21606a Binary files /dev/null and b/img/ezWvPY_vsI-500.png differ diff --git a/img/fQS71H-eB_-200.png b/img/fQS71H-eB_-200.png new file mode 100644 index 000000000..4dcce6662 Binary files /dev/null and b/img/fQS71H-eB_-200.png differ diff --git a/img/fYe_1RqJGQ-70.png b/img/fYe_1RqJGQ-70.png new file mode 100644 index 000000000..3818ef611 Binary files /dev/null and b/img/fYe_1RqJGQ-70.png differ diff --git a/img/faS4uiaJSZ-345.png b/img/faS4uiaJSZ-345.png new file mode 100644 index 000000000..93947dbaa Binary files /dev/null and b/img/faS4uiaJSZ-345.png differ diff --git a/img/fjqaYP69PX-200.png b/img/fjqaYP69PX-200.png new file mode 100644 index 000000000..88fb6e253 Binary files /dev/null and b/img/fjqaYP69PX-200.png differ diff --git a/img/fq8xOYBtMj-70.png b/img/fq8xOYBtMj-70.png new file mode 100644 index 000000000..3e510c5eb Binary files /dev/null and b/img/fq8xOYBtMj-70.png differ diff --git a/img/g37XWC3c3U-345.png b/img/g37XWC3c3U-345.png new file mode 100644 index 000000000..cd14dd60e Binary files /dev/null and b/img/g37XWC3c3U-345.png differ diff --git a/img/gBEMYHjd0U-70.png b/img/gBEMYHjd0U-70.png new file mode 100644 index 000000000..da7f01655 Binary files /dev/null and b/img/gBEMYHjd0U-70.png differ diff --git a/img/gGykIZad3o-160.png b/img/gGykIZad3o-160.png new file mode 100644 index 000000000..5068c94c5 Binary files /dev/null and b/img/gGykIZad3o-160.png differ diff --git a/img/gKeMrzLl95-250.png b/img/gKeMrzLl95-250.png new file mode 100644 index 000000000..8455374b1 Binary files /dev/null and b/img/gKeMrzLl95-250.png differ diff --git a/img/ggceZx6i1--345.png b/img/ggceZx6i1--345.png new file mode 100644 index 000000000..95b7fd08e Binary files /dev/null and b/img/ggceZx6i1--345.png differ diff --git a/img/h2K-p0OjOC-70.png b/img/h2K-p0OjOC-70.png new file mode 100644 index 000000000..a31b83249 Binary files /dev/null and b/img/h2K-p0OjOC-70.png differ diff --git a/img/hS77AUflYu-345.png b/img/hS77AUflYu-345.png new file mode 100644 index 000000000..96e348c5c Binary files /dev/null and b/img/hS77AUflYu-345.png differ diff --git a/img/hVks_6SXRe-200.png b/img/hVks_6SXRe-200.png new file mode 100644 index 000000000..ada869087 Binary files /dev/null and b/img/hVks_6SXRe-200.png differ diff --git a/img/hjG9NoxM3o-70.png b/img/hjG9NoxM3o-70.png new file mode 100644 index 000000000..4e3c4483b Binary files /dev/null and b/img/hjG9NoxM3o-70.png differ diff --git a/img/hk3yL5sfDS-200.png b/img/hk3yL5sfDS-200.png new file mode 100644 index 000000000..acc9cc2b3 Binary files /dev/null and b/img/hk3yL5sfDS-200.png differ diff --git a/img/hwXdT5BjW9-200.png b/img/hwXdT5BjW9-200.png new file mode 100644 index 000000000..d279da375 Binary files /dev/null and b/img/hwXdT5BjW9-200.png differ diff --git a/img/i3zxifHYIp-70.png b/img/i3zxifHYIp-70.png new file mode 100644 index 000000000..7fcc5b721 Binary files /dev/null and b/img/i3zxifHYIp-70.png differ diff --git a/img/icNTRZtbwM-200.png b/img/icNTRZtbwM-200.png new file mode 100644 index 000000000..3c4a121c6 Binary files /dev/null and b/img/icNTRZtbwM-200.png differ diff --git a/img/imR-ldQb34-70.png b/img/imR-ldQb34-70.png new file mode 100644 index 000000000..c0ec75589 Binary files /dev/null and b/img/imR-ldQb34-70.png differ diff --git a/img/jCdPD1hWCc-200.png b/img/jCdPD1hWCc-200.png new file mode 100644 index 000000000..6cf512afb Binary files /dev/null and b/img/jCdPD1hWCc-200.png differ diff --git a/img/jDnmZigRD1-70.png b/img/jDnmZigRD1-70.png new file mode 100644 index 000000000..77ee4a406 Binary files /dev/null and b/img/jDnmZigRD1-70.png differ diff --git a/img/jUHQETdc7h-200.png b/img/jUHQETdc7h-200.png new file mode 100644 index 000000000..be82d585c Binary files /dev/null and b/img/jUHQETdc7h-200.png differ diff --git a/img/k8yA8ncnUK-345.png b/img/k8yA8ncnUK-345.png new file mode 100644 index 000000000..8fbee6c9d Binary files /dev/null and b/img/k8yA8ncnUK-345.png differ diff --git a/img/kOoOz4rgsV-70.png b/img/kOoOz4rgsV-70.png new file mode 100644 index 000000000..eb6f64bd7 Binary files /dev/null and b/img/kOoOz4rgsV-70.png differ diff --git a/img/kTE2LRMbAD-70.png b/img/kTE2LRMbAD-70.png new file mode 100644 index 000000000..47560160e Binary files /dev/null and b/img/kTE2LRMbAD-70.png differ diff --git a/img/k_1csJMDy_-70.png b/img/k_1csJMDy_-70.png new file mode 100644 index 000000000..e26be0509 Binary files /dev/null and b/img/k_1csJMDy_-70.png differ diff --git a/img/ke93AsqQeH-345.png b/img/ke93AsqQeH-345.png new file mode 100644 index 000000000..bcee6717a Binary files /dev/null and b/img/ke93AsqQeH-345.png differ diff --git a/img/ksoRzEj969-70.png b/img/ksoRzEj969-70.png new file mode 100644 index 000000000..68a98c85d Binary files /dev/null and b/img/ksoRzEj969-70.png differ diff --git a/img/ktWKl8eb4X-345.png b/img/ktWKl8eb4X-345.png new file mode 100644 index 000000000..e2c4b94c7 Binary files /dev/null and b/img/ktWKl8eb4X-345.png differ diff --git a/img/lG5HI7XnNQ-70.png b/img/lG5HI7XnNQ-70.png new file mode 100644 index 000000000..6fea468c8 Binary files /dev/null and b/img/lG5HI7XnNQ-70.png differ diff --git a/img/lNRpBfSv76-200.png b/img/lNRpBfSv76-200.png new file mode 100644 index 000000000..5ccc859b8 Binary files /dev/null and b/img/lNRpBfSv76-200.png differ diff --git a/img/llMpODTPPH-70.png b/img/llMpODTPPH-70.png new file mode 100644 index 000000000..10e2a964f Binary files /dev/null and b/img/llMpODTPPH-70.png differ diff --git a/img/m6MCAy1t2v-200.png b/img/m6MCAy1t2v-200.png new file mode 100644 index 000000000..7b49cadd4 Binary files /dev/null and b/img/m6MCAy1t2v-200.png differ diff --git a/img/m7sfAfFfcI-345.png b/img/m7sfAfFfcI-345.png new file mode 100644 index 000000000..7f997e384 Binary files /dev/null and b/img/m7sfAfFfcI-345.png differ diff --git a/img/mt53BgQiVn-200.png b/img/mt53BgQiVn-200.png new file mode 100644 index 000000000..420b9319f Binary files /dev/null and b/img/mt53BgQiVn-200.png differ diff --git a/img/n0PqDu19dN-70.png b/img/n0PqDu19dN-70.png new file mode 100644 index 000000000..b4428342a Binary files /dev/null and b/img/n0PqDu19dN-70.png differ diff --git a/img/nWFG4tYci--200.png b/img/nWFG4tYci--200.png new file mode 100644 index 000000000..e58240ef9 Binary files /dev/null and b/img/nWFG4tYci--200.png differ diff --git a/img/nc18lMmzph-345.png b/img/nc18lMmzph-345.png new file mode 100644 index 000000000..2d0ef2487 Binary files /dev/null and b/img/nc18lMmzph-345.png differ diff --git a/img/nfp5L76vcr-70.png b/img/nfp5L76vcr-70.png new file mode 100644 index 000000000..de618c16c Binary files /dev/null and b/img/nfp5L76vcr-70.png differ diff --git a/img/nk5b4a1Slb-200.png b/img/nk5b4a1Slb-200.png new file mode 100644 index 000000000..0560118fb Binary files /dev/null and b/img/nk5b4a1Slb-200.png differ diff --git a/img/o4HlgDzGde-70.png b/img/o4HlgDzGde-70.png new file mode 100644 index 000000000..aa810fa92 Binary files /dev/null and b/img/o4HlgDzGde-70.png differ diff --git a/img/o5zRuN4m_V-200.png b/img/o5zRuN4m_V-200.png new file mode 100644 index 000000000..53d4ae473 Binary files /dev/null and b/img/o5zRuN4m_V-200.png differ diff --git a/img/oD7IDcIu8D-70.png b/img/oD7IDcIu8D-70.png new file mode 100644 index 000000000..d6e01bf84 Binary files /dev/null and b/img/oD7IDcIu8D-70.png differ diff --git a/img/or-nxgOsFu-250.png b/img/or-nxgOsFu-250.png new file mode 100644 index 000000000..01d7f6d61 Binary files /dev/null and b/img/or-nxgOsFu-250.png differ diff --git a/img/ott6DJNhzO-345.png b/img/ott6DJNhzO-345.png new file mode 100644 index 000000000..fd462d93f Binary files /dev/null and b/img/ott6DJNhzO-345.png differ diff --git a/img/oyeDP55y9i-345.png b/img/oyeDP55y9i-345.png new file mode 100644 index 000000000..a224ff7c4 Binary files /dev/null and b/img/oyeDP55y9i-345.png differ diff --git a/img/p2Z7x0DIY5-200.png b/img/p2Z7x0DIY5-200.png new file mode 100644 index 000000000..4a29098ee Binary files /dev/null and b/img/p2Z7x0DIY5-200.png differ diff --git a/img/pN_gFP3Jrd-70.png b/img/pN_gFP3Jrd-70.png new file mode 100644 index 000000000..f7d25c1c8 Binary files /dev/null and b/img/pN_gFP3Jrd-70.png differ diff --git a/img/pT5-oAignS-200.png b/img/pT5-oAignS-200.png new file mode 100644 index 000000000..b045b150b Binary files /dev/null and b/img/pT5-oAignS-200.png differ diff --git a/img/pWjvvUlSqL-500.png b/img/pWjvvUlSqL-500.png new file mode 100644 index 000000000..c885975da Binary files /dev/null and b/img/pWjvvUlSqL-500.png differ diff --git a/img/peqSfMQ3SW-345.png b/img/peqSfMQ3SW-345.png new file mode 100644 index 000000000..bca29e734 Binary files /dev/null and b/img/peqSfMQ3SW-345.png differ diff --git a/img/pg0vFqDr5i-345.png b/img/pg0vFqDr5i-345.png new file mode 100644 index 000000000..8803b41a4 Binary files /dev/null and b/img/pg0vFqDr5i-345.png differ diff --git a/img/prPc-DoArN-70.png b/img/prPc-DoArN-70.png new file mode 100644 index 000000000..62718f50e Binary files /dev/null and b/img/prPc-DoArN-70.png differ diff --git a/img/qixY3fC4EO-70.png b/img/qixY3fC4EO-70.png new file mode 100644 index 000000000..4b32b6745 Binary files /dev/null and b/img/qixY3fC4EO-70.png differ diff --git a/img/r6D5rPdU7q-200.png b/img/r6D5rPdU7q-200.png new file mode 100644 index 000000000..2dd5d133f Binary files /dev/null and b/img/r6D5rPdU7q-200.png differ diff --git a/img/rYHUwZJLQg-345.png b/img/rYHUwZJLQg-345.png new file mode 100644 index 000000000..fb94e1ad3 Binary files /dev/null and b/img/rYHUwZJLQg-345.png differ diff --git a/img/s12ZDsnf8N-70.png b/img/s12ZDsnf8N-70.png new file mode 100644 index 000000000..55d9c905b Binary files /dev/null and b/img/s12ZDsnf8N-70.png differ diff --git a/img/s6pOfJuoRC-345.png b/img/s6pOfJuoRC-345.png new file mode 100644 index 000000000..db52270f9 Binary files /dev/null and b/img/s6pOfJuoRC-345.png differ diff --git a/img/sIqTTPwBNQ-70.png b/img/sIqTTPwBNQ-70.png new file mode 100644 index 000000000..49427afc1 Binary files /dev/null and b/img/sIqTTPwBNQ-70.png differ diff --git a/img/sKi5ShiLQ--70.png b/img/sKi5ShiLQ--70.png new file mode 100644 index 000000000..918a7303a Binary files /dev/null and b/img/sKi5ShiLQ--70.png differ diff --git a/img/sRF6piCbQ3-345.png b/img/sRF6piCbQ3-345.png new file mode 100644 index 000000000..8236b8514 Binary files /dev/null and b/img/sRF6piCbQ3-345.png differ diff --git a/img/ssmsDlZZDr-160.png b/img/ssmsDlZZDr-160.png new file mode 100644 index 000000000..936d07df9 Binary files /dev/null and b/img/ssmsDlZZDr-160.png differ diff --git a/img/sy_8De7M6V-200.png b/img/sy_8De7M6V-200.png new file mode 100644 index 000000000..4b8489d4a Binary files /dev/null and b/img/sy_8De7M6V-200.png differ diff --git a/img/t-yWoMN2rG-70.png b/img/t-yWoMN2rG-70.png new file mode 100644 index 000000000..c923fb6e5 Binary files /dev/null and b/img/t-yWoMN2rG-70.png differ diff --git a/img/tnFy541nb1-70.png b/img/tnFy541nb1-70.png new file mode 100644 index 000000000..9034621ae Binary files /dev/null and b/img/tnFy541nb1-70.png differ diff --git a/img/tnvmJVwfme-345.png b/img/tnvmJVwfme-345.png new file mode 100644 index 000000000..e5363836a Binary files /dev/null and b/img/tnvmJVwfme-345.png differ diff --git a/img/u9NLfshB-S-345.png b/img/u9NLfshB-S-345.png new file mode 100644 index 000000000..bb1f1012c Binary files /dev/null and b/img/u9NLfshB-S-345.png differ diff --git a/img/uOi4rLXOji-200.png b/img/uOi4rLXOji-200.png new file mode 100644 index 000000000..c0fb4a368 Binary files /dev/null and b/img/uOi4rLXOji-200.png differ diff --git a/img/uT6Kox0GTv-200.png b/img/uT6Kox0GTv-200.png new file mode 100644 index 000000000..6b887e5be Binary files /dev/null and b/img/uT6Kox0GTv-200.png differ diff --git a/img/uy6JL6r6Yy-200.png b/img/uy6JL6r6Yy-200.png new file mode 100644 index 000000000..84a108f3a Binary files /dev/null and b/img/uy6JL6r6Yy-200.png differ diff --git a/img/v7N8A9enAV-500.png b/img/v7N8A9enAV-500.png new file mode 100644 index 000000000..6033caab5 Binary files /dev/null and b/img/v7N8A9enAV-500.png differ diff --git a/img/vGeIBTHX02-200.png b/img/vGeIBTHX02-200.png new file mode 100644 index 000000000..2bad48f8e Binary files /dev/null and b/img/vGeIBTHX02-200.png differ diff --git a/img/vIpCibcT16-200.png b/img/vIpCibcT16-200.png new file mode 100644 index 000000000..64efde891 Binary files /dev/null and b/img/vIpCibcT16-200.png differ diff --git a/img/vLTwUmubrc-345.png b/img/vLTwUmubrc-345.png new file mode 100644 index 000000000..95be8912d Binary files /dev/null and b/img/vLTwUmubrc-345.png differ diff --git a/img/vSXjB4M-GY-200.png b/img/vSXjB4M-GY-200.png new file mode 100644 index 000000000..47c6aa567 Binary files /dev/null and b/img/vSXjB4M-GY-200.png differ diff --git a/img/vbYy5aCosu-200.png b/img/vbYy5aCosu-200.png new file mode 100644 index 000000000..ee0b78e4f Binary files /dev/null and b/img/vbYy5aCosu-200.png differ diff --git a/img/vmGJwckt-d-345.png b/img/vmGJwckt-d-345.png new file mode 100644 index 000000000..3d7665de4 Binary files /dev/null and b/img/vmGJwckt-d-345.png differ diff --git a/img/wKFKXgI1X3-250.png b/img/wKFKXgI1X3-250.png new file mode 100644 index 000000000..a69e051bb Binary files /dev/null and b/img/wKFKXgI1X3-250.png differ diff --git a/img/wOSJUhaFaz-200.png b/img/wOSJUhaFaz-200.png new file mode 100644 index 000000000..027e84b03 Binary files /dev/null and b/img/wOSJUhaFaz-200.png differ diff --git a/img/wYnkCev6Yu-70.png b/img/wYnkCev6Yu-70.png new file mode 100644 index 000000000..0a0ca90c5 Binary files /dev/null and b/img/wYnkCev6Yu-70.png differ diff --git a/img/w_Z_I9pmmc-200.png b/img/w_Z_I9pmmc-200.png new file mode 100644 index 000000000..ead5f2d3b Binary files /dev/null and b/img/w_Z_I9pmmc-200.png differ diff --git a/img/wiXiFDwr8S-200.png b/img/wiXiFDwr8S-200.png new file mode 100644 index 000000000..2043061aa Binary files /dev/null and b/img/wiXiFDwr8S-200.png differ diff --git a/img/x93w_sCXNr-70.png b/img/x93w_sCXNr-70.png new file mode 100644 index 000000000..f4d7f07a1 Binary files /dev/null and b/img/x93w_sCXNr-70.png differ diff --git a/img/xZCPZGFwkF-345.png b/img/xZCPZGFwkF-345.png new file mode 100644 index 000000000..63d6cf7d0 Binary files /dev/null and b/img/xZCPZGFwkF-345.png differ diff --git a/img/xcWjfOAvli-500.png b/img/xcWjfOAvli-500.png new file mode 100644 index 000000000..acc5c8fc5 Binary files /dev/null and b/img/xcWjfOAvli-500.png differ diff --git a/img/xfxSpYw5D_-70.png b/img/xfxSpYw5D_-70.png new file mode 100644 index 000000000..3b20b37b6 Binary files /dev/null and b/img/xfxSpYw5D_-70.png differ diff --git a/img/xxw_xGFY7S-70.png b/img/xxw_xGFY7S-70.png new file mode 100644 index 000000000..b463066b1 Binary files /dev/null and b/img/xxw_xGFY7S-70.png differ diff --git a/img/y-hi_Q_dfb-160.png b/img/y-hi_Q_dfb-160.png new file mode 100644 index 000000000..bf9850b93 Binary files /dev/null and b/img/y-hi_Q_dfb-160.png differ diff --git a/img/y0aEiMyUz4-200.png b/img/y0aEiMyUz4-200.png new file mode 100644 index 000000000..cfbdd4571 Binary files /dev/null and b/img/y0aEiMyUz4-200.png differ diff --git a/img/y3cURw13f8-200.png b/img/y3cURw13f8-200.png new file mode 100644 index 000000000..e0d9f26bd Binary files /dev/null and b/img/y3cURw13f8-200.png differ diff --git a/img/yDKFcOk-zt-70.png b/img/yDKFcOk-zt-70.png new file mode 100644 index 000000000..8612072be Binary files /dev/null and b/img/yDKFcOk-zt-70.png differ diff --git a/img/yID7IgsuIy-70.png b/img/yID7IgsuIy-70.png new file mode 100644 index 000000000..4270ba1fa Binary files /dev/null and b/img/yID7IgsuIy-70.png differ diff --git a/img/yS0Y3GlZ5A-200.png b/img/yS0Y3GlZ5A-200.png new file mode 100644 index 000000000..cec7078fa Binary files /dev/null and b/img/yS0Y3GlZ5A-200.png differ diff --git a/img/zZjbBc1Tiv-70.png b/img/zZjbBc1Tiv-70.png new file mode 100644 index 000000000..7c7a48bb4 Binary files /dev/null and b/img/zZjbBc1Tiv-70.png differ diff --git a/index.html b/index.html new file mode 100644 index 000000000..d1e7e6271 --- /dev/null +++ b/index.html @@ -0,0 +1,849 @@ + + + + + + + + + + + + HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ + +

HaxeFlixel

+ +

+ Create cross-platform games easier and free.
+ All with one codebase. +

+ + +
+ +
+ +
+

+ Cross-compile your games + natively + to: +

+ +
+ Windows + Linux + Mac + Android + iOS + Flash + HTML5 +
+
+ +
+ +
+

+ Proudly powered by + open source, + cross-platform tech: +

+ +
+
+ Haxe Logo + + + + + OpenFL Logo + + + + + + + Flixel Logo + + + = + + + + HaxeFlixel logo + +
+
+
+ +
+ +
+

+

+ Browse and learn from our + 78 demos: +

+

+ + + + + #{{demo.data.title}} + + + + + #{{demo.data.title}} + + + + + #{{demo.data.title}} + + + + + #{{demo.data.title}} + + + + + #{{demo.data.title}} + + + + + #{{demo.data.title}} + + +
+ +
+ +
+

+

+ These popular games use HaxeFlixel +
+ (more in our Showcase) +

+

+ +
+ + + + + + + Canabalt + + + + + + + Odd Verdure + + + + + + + Chibi Ninja Shino-kun + + + + + + + + + + + Bring It On! + + + + + + + + + Go! Go! PogoGirl + + + + + + + + + + + + + Friday Night Funkin' + + + + + + + Renegade Racing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Defender's Quest: Valley of the Forgotten + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + haxeflixel/flixel + +
+ +
+ Discord + Patreon +
+ +
+ +
+

+ Our platinum and gold Sponsors +

+ + + +
+
+
+
+ + + + + + + + + + + + + + diff --git a/showcase/BOSSES FOREVER 2.BRO/index.html b/showcase/BOSSES FOREVER 2.BRO/index.html new file mode 100644 index 000000000..86d7bb782 --- /dev/null +++ b/showcase/BOSSES FOREVER 2.BRO/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + BOSSES FOREVER 2.BRO | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ BOSSES FOREVER 2.BRO + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Blasting Agent Ultimate Edition/index.html b/showcase/Blasting Agent Ultimate Edition/index.html new file mode 100644 index 000000000..60a1d6128 --- /dev/null +++ b/showcase/Blasting Agent Ultimate Edition/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Blasting Agent: Ultimate Edition | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Blasting Agent: Ultimate Edition + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Bring It On!/index.html b/showcase/Bring It On!/index.html new file mode 100644 index 000000000..e9a4bf3f7 --- /dev/null +++ b/showcase/Bring It On!/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Bring It On! | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Bring It On! + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Bronko Blue/index.html b/showcase/Bronko Blue/index.html new file mode 100644 index 000000000..80b799f31 --- /dev/null +++ b/showcase/Bronko Blue/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Bronko Blue | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Bronko Blue + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Canabalt/index.html b/showcase/Canabalt/index.html new file mode 100644 index 000000000..09a681297 --- /dev/null +++ b/showcase/Canabalt/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Canabalt | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Canabalt + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Cardinal Quest 2/index.html b/showcase/Cardinal Quest 2/index.html new file mode 100644 index 000000000..842121575 --- /dev/null +++ b/showcase/Cardinal Quest 2/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Cardinal Quest 2 | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Cardinal Quest 2 + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Cheap Golf/index.html b/showcase/Cheap Golf/index.html new file mode 100644 index 000000000..ea409fea8 --- /dev/null +++ b/showcase/Cheap Golf/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Cheap Golf | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Cheap Golf + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Chibi Ninja Shino-kun/index.html b/showcase/Chibi Ninja Shino-kun/index.html new file mode 100644 index 000000000..9b86f8e0f --- /dev/null +++ b/showcase/Chibi Ninja Shino-kun/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Chibi Ninja Shino-kun | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Chibi Ninja Shino-kun + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Defender's Quest II/index.html b/showcase/Defender's Quest II/index.html new file mode 100644 index 000000000..0a94ca6fb --- /dev/null +++ b/showcase/Defender's Quest II/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Defender's Quest II | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Defender's Quest II + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Defender's Quest Valley of the Forgotten/index.html b/showcase/Defender's Quest Valley of the Forgotten/index.html new file mode 100644 index 000000000..0aace3a4a --- /dev/null +++ b/showcase/Defender's Quest Valley of the Forgotten/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Defender's Quest: Valley of the Forgotten | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Defender's Quest: Valley of the Forgotten + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Dfragmente/index.html b/showcase/Dfragmente/index.html new file mode 100644 index 000000000..cd830fca3 --- /dev/null +++ b/showcase/Dfragmente/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Dfragmente | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Dfragmente + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Don't Move/index.html b/showcase/Don't Move/index.html new file mode 100644 index 000000000..f96df4e7b --- /dev/null +++ b/showcase/Don't Move/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Don't Move | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Don't Move + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Eggsolotl/index.html b/showcase/Eggsolotl/index.html new file mode 100644 index 000000000..5afea9aab --- /dev/null +++ b/showcase/Eggsolotl/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Eggsolotl | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Eggsolotl + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Even the Ocean/index.html b/showcase/Even the Ocean/index.html new file mode 100644 index 000000000..6e28080b6 --- /dev/null +++ b/showcase/Even the Ocean/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Even the Ocean | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Even the Ocean + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Fist's Elimination Tower/index.html b/showcase/Fist's Elimination Tower/index.html new file mode 100644 index 000000000..33a47e094 --- /dev/null +++ b/showcase/Fist's Elimination Tower/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Fist's Elimination Tower | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Fist's Elimination Tower + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Flitter Inc./index.html b/showcase/Flitter Inc./index.html new file mode 100644 index 000000000..aba7f6996 --- /dev/null +++ b/showcase/Flitter Inc./index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Flitter Inc. | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Flitter Inc. + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Friday Night Funkin'/index.html b/showcase/Friday Night Funkin'/index.html new file mode 100644 index 000000000..2a29d9019 --- /dev/null +++ b/showcase/Friday Night Funkin'/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Friday Night Funkin' | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Friday Night Funkin' + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Future Knight DX/index.html b/showcase/Future Knight DX/index.html new file mode 100644 index 000000000..51ecea6bc --- /dev/null +++ b/showcase/Future Knight DX/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Future Knight DX | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Future Knight DX + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/GULAG PARADISE/index.html b/showcase/GULAG PARADISE/index.html new file mode 100644 index 000000000..bea243c77 --- /dev/null +++ b/showcase/GULAG PARADISE/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + GULAG PARADISE | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ GULAG PARADISE + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Genial Santa Claus 2/index.html b/showcase/Genial Santa Claus 2/index.html new file mode 100644 index 000000000..0a98bd545 --- /dev/null +++ b/showcase/Genial Santa Claus 2/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Genial Santa Claus 2 | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Genial Santa Claus 2 + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Glitch Lab/index.html b/showcase/Glitch Lab/index.html new file mode 100644 index 000000000..9c72b5427 --- /dev/null +++ b/showcase/Glitch Lab/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Glitch Lab | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Glitch Lab + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Glorch's Great Escape/index.html b/showcase/Glorch's Great Escape/index.html new file mode 100644 index 000000000..d947736ba --- /dev/null +++ b/showcase/Glorch's Great Escape/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Glorch's Great Escape | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Glorch's Great Escape + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Go! Go! PogoGirl/index.html b/showcase/Go! Go! PogoGirl/index.html new file mode 100644 index 000000000..ff32fe47e --- /dev/null +++ b/showcase/Go! Go! PogoGirl/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Go! Go! PogoGirl | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Go! Go! PogoGirl + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Heck House/index.html b/showcase/Heck House/index.html new file mode 100644 index 000000000..54059093b --- /dev/null +++ b/showcase/Heck House/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Heck House | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Heck House + + +

+ + + +
+ + + + + + + + + + + + + diff --git "a/showcase/Holobunnies Pause Caf\303\251/index.html" "b/showcase/Holobunnies Pause Caf\303\251/index.html" new file mode 100644 index 000000000..046558c6d --- /dev/null +++ "b/showcase/Holobunnies Pause Caf\303\251/index.html" @@ -0,0 +1,442 @@ + + + + + + + + + + + Holobunnies: Pause Café | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Holobunnies: Pause Café + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/HyperBoarder/index.html b/showcase/HyperBoarder/index.html new file mode 100644 index 000000000..7d9673ad0 --- /dev/null +++ b/showcase/HyperBoarder/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + HyperBoarder | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ HyperBoarder + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Idle Farmer/index.html b/showcase/Idle Farmer/index.html new file mode 100644 index 000000000..f98d0d4cd --- /dev/null +++ b/showcase/Idle Farmer/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Idle Farmer | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Idle Farmer + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/LAZA KNITEZ!!/index.html b/showcase/LAZA KNITEZ!!/index.html new file mode 100644 index 000000000..a1f5fdc78 --- /dev/null +++ b/showcase/LAZA KNITEZ!!/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + LAZA KNITEZ!! | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ LAZA KNITEZ!! + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Monster Match/index.html b/showcase/Monster Match/index.html new file mode 100644 index 000000000..77b78b716 --- /dev/null +++ b/showcase/Monster Match/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Monster Match | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Monster Match + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Odd Verdure/index.html b/showcase/Odd Verdure/index.html new file mode 100644 index 000000000..f0b9b5433 --- /dev/null +++ b/showcase/Odd Verdure/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Odd Verdure | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Odd Verdure + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/One Ship Two Ship Redshift Blueshift/index.html b/showcase/One Ship Two Ship Redshift Blueshift/index.html new file mode 100644 index 000000000..d3b55b246 --- /dev/null +++ b/showcase/One Ship Two Ship Redshift Blueshift/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + One Ship Two Ship Redshift Blueshift | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ One Ship Two Ship Redshift Blueshift + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Peasant Knight/index.html b/showcase/Peasant Knight/index.html new file mode 100644 index 000000000..58f3269b1 --- /dev/null +++ b/showcase/Peasant Knight/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Peasant Knight | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Peasant Knight + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Polaritron/index.html b/showcase/Polaritron/index.html new file mode 100644 index 000000000..7183c0905 --- /dev/null +++ b/showcase/Polaritron/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Polaritron | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Polaritron + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Renegade Racing/index.html b/showcase/Renegade Racing/index.html new file mode 100644 index 000000000..e7a3f9abc --- /dev/null +++ b/showcase/Renegade Racing/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Renegade Racing | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Renegade Racing + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/SLIDE-0000/index.html b/showcase/SLIDE-0000/index.html new file mode 100644 index 000000000..c84b1e9d0 --- /dev/null +++ b/showcase/SLIDE-0000/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + SLIDE-0000 | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ SLIDE-0000 + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Saving Alley Cats!/index.html b/showcase/Saving Alley Cats!/index.html new file mode 100644 index 000000000..055efb6f6 --- /dev/null +++ b/showcase/Saving Alley Cats!/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Saving Alley Cats! | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Saving Alley Cats! + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Shifter/index.html b/showcase/Shifter/index.html new file mode 100644 index 000000000..f658cd031 --- /dev/null +++ b/showcase/Shifter/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Shifter | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Shifter + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Slime Time/index.html b/showcase/Slime Time/index.html new file mode 100644 index 000000000..b30bade26 --- /dev/null +++ b/showcase/Slime Time/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Slime Time | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Slime Time + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Solid Aether/index.html b/showcase/Solid Aether/index.html new file mode 100644 index 000000000..7b2980d47 --- /dev/null +++ b/showcase/Solid Aether/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Solid Aether | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Solid Aether + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Sort!Sort!Sort!/index.html b/showcase/Sort!Sort!Sort!/index.html new file mode 100644 index 000000000..4837bde7c --- /dev/null +++ b/showcase/Sort!Sort!Sort!/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Sort!Sort!Sort! | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Sort!Sort!Sort! + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Spacejacked/index.html b/showcase/Spacejacked/index.html new file mode 100644 index 000000000..2b266efc5 --- /dev/null +++ b/showcase/Spacejacked/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Spacejacked | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Spacejacked + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Spooksville, USA/index.html b/showcase/Spooksville, USA/index.html new file mode 100644 index 000000000..552f90c20 --- /dev/null +++ b/showcase/Spooksville, USA/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Spooksville, USA | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Spooksville, USA + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Super Slime Arena/index.html b/showcase/Super Slime Arena/index.html new file mode 100644 index 000000000..0e5e6de02 --- /dev/null +++ b/showcase/Super Slime Arena/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Super Slime Arena | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Super Slime Arena + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/The Enchanted Cave 2/index.html b/showcase/The Enchanted Cave 2/index.html new file mode 100644 index 000000000..40f6c35e0 --- /dev/null +++ b/showcase/The Enchanted Cave 2/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + The Enchanted Cave 2 | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ The Enchanted Cave 2 + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/The Wolf's Bite/index.html b/showcase/The Wolf's Bite/index.html new file mode 100644 index 000000000..476bd4ac6 --- /dev/null +++ b/showcase/The Wolf's Bite/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + The Wolf's Bite | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ The Wolf's Bite + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Tomb Explorer/index.html b/showcase/Tomb Explorer/index.html new file mode 100644 index 000000000..617995001 --- /dev/null +++ b/showcase/Tomb Explorer/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Tomb Explorer | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Tomb Explorer + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/UPSQUID/index.html b/showcase/UPSQUID/index.html new file mode 100644 index 000000000..12a2f30f4 --- /dev/null +++ b/showcase/UPSQUID/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + UPSQUID | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ UPSQUID + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Viking Warfare/index.html b/showcase/Viking Warfare/index.html new file mode 100644 index 000000000..c6f1493d2 --- /dev/null +++ b/showcase/Viking Warfare/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Viking Warfare | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Viking Warfare + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Werewolf Tycoon/index.html b/showcase/Werewolf Tycoon/index.html new file mode 100644 index 000000000..b035133cf --- /dev/null +++ b/showcase/Werewolf Tycoon/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Werewolf Tycoon | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Werewolf Tycoon + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/Willy and Mathilda's Houseboat Adventure/index.html b/showcase/Willy and Mathilda's Houseboat Adventure/index.html new file mode 100644 index 000000000..e897c9d05 --- /dev/null +++ b/showcase/Willy and Mathilda's Houseboat Adventure/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Willy and Mathilda's Houseboat Adventure | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Willy and Mathilda's Houseboat Adventure + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/[Speer DX]/index.html b/showcase/[Speer DX]/index.html new file mode 100644 index 000000000..288627430 --- /dev/null +++ b/showcase/[Speer DX]/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + [Speer DX] | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ [Speer DX] + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/index.html b/showcase/index.html new file mode 100644 index 000000000..e9f02fa14 --- /dev/null +++ b/showcase/index.html @@ -0,0 +1,4335 @@ + + + + + + + + + + + Showcase | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ Showcase + + +

+ + + +
+
+ + + +
+

+ Canabalt +

+ + + + + Canabalt + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Odd Verdure +

+ + + + + Odd Verdure + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Chibi Ninja Shino-kun +

+ + + + + Chibi Ninja Shino-kun + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+

+ Bring It On! +

+ + + + + Bring It On! + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+

+ Go! Go! PogoGirl +

+ + + + + Go! Go! PogoGirl + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+

+ Friday Night Funkin' +

+ + + + + Friday Night Funkin' + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Renegade Racing +

+ + + + + Renegade Racing + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + +
+

+ Defender's Quest: Valley of the Forgotten +

+ + + + + Defender's Quest: Valley of the Forgotten + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+

+ Defender's Quest II +

+ + + + Defender's Quest II + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+

+ [Speer DX] +

+ + + + [Speer DX] + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Future Knight DX +

+ + + + Future Knight DX + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+

+ millstone +

+ + + + millstone + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+

+ UPSQUID +

+ + + + UPSQUID + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Eggsolotl +

+ + + + Eggsolotl + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Spooksville, USA +

+ + + + Spooksville, USA + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+

+ Heck House +

+ + + + Heck House + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Monster Match +

+ + + + Monster Match + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Peasant Knight +

+ + + + Peasant Knight + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Solid Aether +

+ + + + Solid Aether + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Flitter Inc. +

+ + + + Flitter Inc. + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Super Slime Arena +

+ + + + Super Slime Arena + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Cheap Golf +

+ + + + Cheap Golf + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Even the Ocean +

+ + + + Even the Ocean + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Fist's Elimination Tower +

+ + + + Fist's Elimination Tower + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Glorch's Great Escape +

+ + + + Glorch's Great Escape + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ The Wolf's Bite +

+ + + + The Wolf's Bite + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Holobunnies: Pause Café +

+ + + + Holobunnies: Pause Café + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Tomb Explorer +

+ + + + Tomb Explorer + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Slime Time +

+ + + + Slime Time + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Willy and Mathilda's Houseboat Adventure +

+ + + + Willy and Mathilda's Houseboat Adventure + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Blasting Agent: Ultimate Edition +

+ + + + Blasting Agent: Ultimate Edition + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+

+ One Ship Two Ship Redshift Blueshift +

+ + + + One Ship Two Ship Redshift Blueshift + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ HyperBoarder +

+ + + + HyperBoarder + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Sort!Sort!Sort! +

+ + + + Sort!Sort!Sort! + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Genial Santa Claus 2 +

+ + + + Genial Santa Claus 2 + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ The Enchanted Cave 2 +

+ + + + The Enchanted Cave 2 + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Werewolf Tycoon +

+ + + + Werewolf Tycoon + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Spacejacked +

+ + + + Spacejacked + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Shifter +

+ + + + Shifter + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Dfragmente +

+ + + + Dfragmente + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Viking Warfare +

+ + + + Viking Warfare + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Polaritron +

+ + + + Polaritron + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ LAZA KNITEZ!! +

+ + + + LAZA KNITEZ!! + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Glitch Lab +

+ + + + Glitch Lab + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Cardinal Quest 2 +

+ + + + Cardinal Quest 2 + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ spaceSpuds +

+ + + + spaceSpuds + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Idle Farmer +

+ + + + Idle Farmer + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Bronko Blue +

+ + + + Bronko Blue + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Saving Alley Cats! +

+ + + + Saving Alley Cats! + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ SLIDE-0000 +

+ + + + SLIDE-0000 + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ GULAG PARADISE +

+ + + + GULAG PARADISE + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ BOSSES FOREVER 2.BRO +

+ + + + BOSSES FOREVER 2.BRO + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+

+ Don't Move +

+ + + + Don't Move + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + +
+ + + + + + + + + + + + + diff --git a/showcase/millstone/index.html b/showcase/millstone/index.html new file mode 100644 index 000000000..d31ace40a --- /dev/null +++ b/showcase/millstone/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + millstone | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ millstone + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/showcase/spaceSpuds/index.html b/showcase/spaceSpuds/index.html new file mode 100644 index 000000000..cee2a052b --- /dev/null +++ b/showcase/spaceSpuds/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + spaceSpuds | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ spaceSpuds + + +

+ + + +
+ + + + + + + + + + + + + diff --git a/sounds/flixel.ogg b/sounds/flixel.ogg new file mode 100644 index 000000000..29fbbecd6 Binary files /dev/null and b/sounds/flixel.ogg differ diff --git a/sponsors/index.html b/sponsors/index.html new file mode 100644 index 000000000..5d3fd9d2e --- /dev/null +++ b/sponsors/index.html @@ -0,0 +1,489 @@ + + + + + + + + + + + Sponsors | HaxeFlixel - 2D Game Engine + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+

Sponsors

+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + diff --git a/styles/highlights/a11y-dark.min.css b/styles/highlights/a11y-dark.min.css new file mode 100644 index 000000000..7820d7db1 --- /dev/null +++ b/styles/highlights/a11y-dark.min.css @@ -0,0 +1,7 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/.hljs{background:#2b2b2b;color:#f8f8f2}.hljs-comment,.hljs-quote{color:#d4d0ab}.hljs-deletion,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#ffa07a}.hljs-built_in,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-type{color:#f5ab35}.hljs-attribute{color:gold}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:#abe338}.hljs-section,.hljs-title{color:#00e0e0}.hljs-keyword,.hljs-selector-tag{color:#dcc6e0}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}@media screen and (-ms-high-contrast:active){.hljs-addition,.hljs-attribute,.hljs-built_in,.hljs-bullet,.hljs-comment,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-quote,.hljs-string,.hljs-symbol,.hljs-type{color:highlight}.hljs-keyword,.hljs-selector-tag{font-weight:700}} \ No newline at end of file diff --git a/styles/highlights/a11y-light.min.css b/styles/highlights/a11y-light.min.css new file mode 100644 index 000000000..8b5ab9093 --- /dev/null +++ b/styles/highlights/a11y-light.min.css @@ -0,0 +1,7 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: a11y-light + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/.hljs{background:#fefefe;color:#545454}.hljs-comment,.hljs-quote{color:#696969}.hljs-deletion,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#d91e18}.hljs-attribute,.hljs-built_in,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-type{color:#aa5d00}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:green}.hljs-section,.hljs-title{color:#007faa}.hljs-keyword,.hljs-selector-tag{color:#7928a1}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}@media screen and (-ms-high-contrast:active){.hljs-addition,.hljs-attribute,.hljs-built_in,.hljs-bullet,.hljs-comment,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-quote,.hljs-string,.hljs-symbol,.hljs-type{color:highlight}.hljs-keyword,.hljs-selector-tag{font-weight:700}} \ No newline at end of file diff --git a/styles/highlights/agate.min.css b/styles/highlights/agate.min.css new file mode 100644 index 000000000..bdbeed4e5 --- /dev/null +++ b/styles/highlights/agate.min.css @@ -0,0 +1,20 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: Agate + Author: (c) Taufik Nurrohman + Maintainer: @taufik-nurrohman + Updated: 2021-04-24 + + #333 + #62c8f3 + #7bd694 + #888 + #a2fca2 + #ade5fc + #b8d8a2 + #c6b4f0 + #d36363 + #fc9b9b + #fcc28c + #ffa + #fff +*/.hljs{background:#333;color:#fff}.hljs-doctag,.hljs-meta-keyword,.hljs-name,.hljs-strong{font-weight:700}.hljs-code,.hljs-emphasis{font-style:italic}.hljs-section,.hljs-tag{color:#62c8f3}.hljs-selector-class,.hljs-selector-id,.hljs-template-variable,.hljs-variable{color:#ade5fc}.hljs-meta-string,.hljs-string{color:#a2fca2}.hljs-attr,.hljs-quote,.hljs-selector-attr{color:#7bd694}.hljs-tag .hljs-attr{color:inherit}.hljs-attribute,.hljs-title,.hljs-type{color:#ffa}.hljs-number,.hljs-symbol{color:#d36363}.hljs-bullet,.hljs-template-tag{color:#b8d8a2}.hljs-built_in,.hljs-keyword,.hljs-literal,.hljs-selector-tag{color:#fcc28c}.hljs-code,.hljs-comment,.hljs-formula{color:#888}.hljs-link,.hljs-regexp,.hljs-selector-pseudo{color:#c6b4f0}.hljs-meta{color:#fc9b9b}.hljs-deletion{background:#fc9b9b;color:#333}.hljs-addition{background:#a2fca2;color:#333}.hljs-subst{color:#fff}.hljs a{color:inherit}.hljs a:focus,.hljs a:hover{color:inherit;text-decoration:underline}.hljs mark{background:#555;color:inherit} \ No newline at end of file diff --git a/styles/highlights/an-old-hope.min.css b/styles/highlights/an-old-hope.min.css new file mode 100644 index 000000000..ffc7f8c72 --- /dev/null +++ b/styles/highlights/an-old-hope.min.css @@ -0,0 +1,9 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: An Old Hope – Star Wars Syntax + Author: (c) Gustavo Costa + Maintainer: @gusbemacbe + + Original theme - Ocean Dark Theme – by https://github.com/gavsiu + Based on Jesse Leite's Atom syntax theme 'An Old Hope' + https://github.com/JesseLeite/an-old-hope-syntax-atom +*/.hljs{background:#1c1d21;color:#c0c5ce}.hljs-comment,.hljs-quote{color:#b6b18b}.hljs-deletion,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#eb3c54}.hljs-built_in,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-type{color:#e7ce56}.hljs-attribute{color:#ee7c2b}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:#4fb4d7}.hljs-section,.hljs-title{color:#78bb65}.hljs-keyword,.hljs-selector-tag{color:#b45ea4}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/androidstudio.min.css b/styles/highlights/androidstudio.min.css new file mode 100644 index 000000000..7fbe78367 --- /dev/null +++ b/styles/highlights/androidstudio.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#a9b7c6;background:#282b2e}.hljs-bullet,.hljs-literal,.hljs-number,.hljs-symbol{color:#6897bb}.hljs-deletion,.hljs-keyword,.hljs-selector-tag{color:#cc7832}.hljs-link,.hljs-template-variable,.hljs-variable{color:#629755}.hljs-comment,.hljs-quote{color:grey}.hljs-meta{color:#bbb529}.hljs-addition,.hljs-attribute,.hljs-string{color:#6a8759}.hljs-section,.hljs-title,.hljs-type{color:#ffc66d}.hljs-name,.hljs-selector-class,.hljs-selector-id{color:#e8bf6a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/arduino-light.min.css b/styles/highlights/arduino-light.min.css new file mode 100644 index 000000000..cadb13055 --- /dev/null +++ b/styles/highlights/arduino-light.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fff;color:#434f54}.hljs-subst{color:#434f54}.hljs-attribute,.hljs-doctag,.hljs-keyword,.hljs-name,.hljs-selector-tag{color:#00979d}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-literal{color:#d35400}.hljs-link,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#00979d}.hljs-deletion,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-template-tag,.hljs-type{color:#005c5f}.hljs-comment{color:rgba(149,165,166,.8)}.hljs-meta .hljs-keyword{color:#728e00}.hljs-meta{color:#434f54}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-function{color:#728e00}.hljs-section,.hljs-title{color:#800;font-weight:700}.hljs-number{color:#8a7b52} \ No newline at end of file diff --git a/styles/highlights/arta.min.css b/styles/highlights/arta.min.css new file mode 100644 index 000000000..8dcdc74be --- /dev/null +++ b/styles/highlights/arta.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#222;color:#aaa}.hljs-subst{color:#aaa}.hljs-section{color:#fff}.hljs-comment,.hljs-meta,.hljs-quote{color:#444}.hljs-bullet,.hljs-regexp,.hljs-string,.hljs-symbol{color:#fc3}.hljs-addition,.hljs-number{color:#0c6}.hljs-attribute,.hljs-built_in,.hljs-link,.hljs-literal,.hljs-template-variable,.hljs-type{color:#32aaee}.hljs-keyword,.hljs-name,.hljs-selector-class,.hljs-selector-id,.hljs-selector-tag{color:#64a}.hljs-deletion,.hljs-template-tag,.hljs-title,.hljs-variable{color:#b16}.hljs-doctag,.hljs-section,.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/styles/highlights/ascetic.min.css b/styles/highlights/ascetic.min.css new file mode 100644 index 000000000..3c9fe03c6 --- /dev/null +++ b/styles/highlights/ascetic.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fff;color:#000}.hljs-addition,.hljs-attribute,.hljs-bullet,.hljs-link,.hljs-section,.hljs-string,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#888}.hljs-comment,.hljs-deletion,.hljs-meta,.hljs-quote{color:#ccc}.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-strong,.hljs-type{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/styles/highlights/atom-one-dark-reasonable.min.css b/styles/highlights/atom-one-dark-reasonable.min.css new file mode 100644 index 000000000..9296216eb --- /dev/null +++ b/styles/highlights/atom-one-dark-reasonable.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#abb2bf;background:#282c34}.hljs-keyword,.hljs-operator,.hljs-pattern-match{color:#f92672}.hljs-function,.hljs-pattern-match .hljs-constructor{color:#61aeee}.hljs-function .hljs-params{color:#a6e22e}.hljs-function .hljs-params .hljs-typing{color:#fd971f}.hljs-module-access .hljs-module{color:#7e57c2}.hljs-constructor{color:#e2b93d}.hljs-constructor .hljs-string{color:#9ccc65}.hljs-comment,.hljs-quote{color:#b18eb1;font-style:italic}.hljs-doctag,.hljs-formula{color:#c678dd}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#98c379}.hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#e6c07b}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#d19a66}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#61aeee}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline} \ No newline at end of file diff --git a/styles/highlights/atom-one-dark.min.css b/styles/highlights/atom-one-dark.min.css new file mode 100644 index 000000000..5344ee381 --- /dev/null +++ b/styles/highlights/atom-one-dark.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#abb2bf;background:#282c34}.hljs-comment,.hljs-quote{color:#5c6370;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#c678dd}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#98c379}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#d19a66}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#61aeee}.hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#e6c07b}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline} \ No newline at end of file diff --git a/styles/highlights/atom-one-light.min.css b/styles/highlights/atom-one-light.min.css new file mode 100644 index 000000000..df0268a94 --- /dev/null +++ b/styles/highlights/atom-one-light.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#383a42;background:#fafafa}.hljs-comment,.hljs-quote{color:#a0a1a7;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#a626a4}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e45649}.hljs-literal{color:#0184bb}.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#50a14f}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#986801}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#4078f2}.hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#c18401}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline} \ No newline at end of file diff --git a/styles/highlights/brown-paper.min.css b/styles/highlights/brown-paper.min.css new file mode 100644 index 000000000..6231e8af4 --- /dev/null +++ b/styles/highlights/brown-paper.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#363c69;background:url(./brown-papersq.png) #b7a68e}.hljs-keyword,.hljs-literal,.hljs-selector-tag{color:#059}.hljs-addition,.hljs-attribute,.hljs-built_in,.hljs-bullet,.hljs-link,.hljs-name,.hljs-section,.hljs-string,.hljs-symbol,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type,.hljs-variable{color:#2c009f}.hljs-comment,.hljs-deletion,.hljs-meta,.hljs-quote{color:#802022}.hljs-doctag,.hljs-keyword,.hljs-literal,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-strong,.hljs-title,.hljs-type{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/styles/highlights/codepen-embed.min.css b/styles/highlights/codepen-embed.min.css new file mode 100644 index 000000000..0d7dff6db --- /dev/null +++ b/styles/highlights/codepen-embed.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#222;color:#fff}.hljs-comment,.hljs-quote{color:#777}.hljs-built_in,.hljs-bullet,.hljs-deletion,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-regexp,.hljs-symbol,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#ab875d}.hljs-attribute,.hljs-name,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-title,.hljs-type{color:#9b869b}.hljs-addition,.hljs-keyword,.hljs-selector-tag,.hljs-string{color:#8f9c6c}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/color-brewer.min.css b/styles/highlights/color-brewer.min.css new file mode 100644 index 000000000..1c677e3c6 --- /dev/null +++ b/styles/highlights/color-brewer.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#000;background:#fff}.hljs-addition,.hljs-meta,.hljs-string,.hljs-symbol,.hljs-template-tag,.hljs-template-variable{color:#756bb1}.hljs-comment,.hljs-quote{color:#636363}.hljs-bullet,.hljs-link,.hljs-literal,.hljs-number,.hljs-regexp{color:#31a354}.hljs-deletion,.hljs-variable{color:#88f}.hljs-built_in,.hljs-doctag,.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-selector-tag,.hljs-strong,.hljs-tag,.hljs-title,.hljs-type{color:#3182bd}.hljs-emphasis{font-style:italic}.hljs-attribute{color:#e6550d} \ No newline at end of file diff --git a/styles/highlights/dark.min.css b/styles/highlights/dark.min.css new file mode 100644 index 000000000..9ed546baf --- /dev/null +++ b/styles/highlights/dark.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#ddd;background:#303030}.hljs-keyword,.hljs-link,.hljs-literal,.hljs-section,.hljs-selector-tag{color:#fff}.hljs-addition,.hljs-attribute,.hljs-built_in,.hljs-bullet,.hljs-name,.hljs-string,.hljs-symbol,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type,.hljs-variable{color:#d88}.hljs-comment,.hljs-deletion,.hljs-meta,.hljs-quote{color:#979797}.hljs-doctag,.hljs-keyword,.hljs-literal,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-strong,.hljs-title,.hljs-type{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/styles/highlights/default.min.css b/styles/highlights/default.min.css new file mode 100644 index 000000000..a75ea9116 --- /dev/null +++ b/styles/highlights/default.min.css @@ -0,0 +1,9 @@ +/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#f3f3f3;color:#444}.hljs-comment{color:#697070}.hljs-punctuation,.hljs-tag{color:#444a}.hljs-tag .hljs-attr,.hljs-tag .hljs-name{color:#444}.hljs-attribute,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-tag{font-weight:700}.hljs-deletion,.hljs-number,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-template-tag,.hljs-type{color:#800}.hljs-section,.hljs-title{color:#800;font-weight:700}.hljs-link,.hljs-operator,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#ab5656}.hljs-literal{color:#695}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-code{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/devibeans.min.css b/styles/highlights/devibeans.min.css new file mode 100644 index 000000000..d8c4c0f54 --- /dev/null +++ b/styles/highlights/devibeans.min.css @@ -0,0 +1,7 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: devibeans (dark) + Author: @terminaldweller + Maintainer: @terminaldweller + + Inspired by vim's jellybeans theme (https://github.com/nanotech/jellybeans.vim) +*/.hljs{background:#000;color:#a39e9b}.hljs-attr,.hljs-template-tag{color:#8787d7}.hljs-comment,.hljs-doctag,.hljs-quote{color:#396}.hljs-params{color:#a39e9b}.hljs-regexp{color:#d700ff}.hljs-literal,.hljs-number,.hljs-selector-id,.hljs-tag{color:#ef5350}.hljs-meta,.hljs-meta .hljs-keyword{color:#0087ff}.hljs-code,.hljs-formula,.hljs-keyword,.hljs-link,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-variable{color:#64b5f6}.hljs-built_in,.hljs-deletion,.hljs-title{color:#ff8700}.hljs-attribute,.hljs-function,.hljs-name,.hljs-property,.hljs-section,.hljs-type{color:#ffd75f}.hljs-addition,.hljs-bullet,.hljs-meta .hljs-string,.hljs-string,.hljs-subst,.hljs-symbol{color:#558b2f}.hljs-selector-tag{color:#96f}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/docco.min.css b/styles/highlights/docco.min.css new file mode 100644 index 000000000..382ecbb56 --- /dev/null +++ b/styles/highlights/docco.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#000;background:#f8f8ff}.hljs-comment,.hljs-quote{color:#408080;font-style:italic}.hljs-keyword,.hljs-literal,.hljs-selector-tag,.hljs-subst{color:#954121}.hljs-number{color:#40a070}.hljs-doctag,.hljs-string{color:#219161}.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-type{color:#19469d}.hljs-params{color:#00f}.hljs-title{color:#458;font-weight:700}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-template-variable,.hljs-variable{color:teal}.hljs-link,.hljs-regexp{color:#b68}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in{color:#0086b3}.hljs-meta{color:#999;font-weight:700}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/far.min.css b/styles/highlights/far.min.css new file mode 100644 index 000000000..c338ef60c --- /dev/null +++ b/styles/highlights/far.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#0ff;background:navy}.hljs-addition,.hljs-attribute,.hljs-built_in,.hljs-bullet,.hljs-string,.hljs-symbol,.hljs-template-tag,.hljs-template-variable{color:#ff0}.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-selector-tag,.hljs-type,.hljs-variable{color:#fff}.hljs-comment,.hljs-deletion,.hljs-doctag,.hljs-quote{color:#888}.hljs-link,.hljs-literal,.hljs-number,.hljs-regexp{color:#0f0}.hljs-meta{color:teal}.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-strong,.hljs-title{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/styles/highlights/felipec.min.css b/styles/highlights/felipec.min.css new file mode 100644 index 000000000..3a21319aa --- /dev/null +++ b/styles/highlights/felipec.min.css @@ -0,0 +1,7 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + * Theme: FelipeC + * Author: (c) 2021 Felipe Contreras + * Website: https://github.com/felipec/vim-felipec + * + * Autogenerated with vim-felipec's generator. +*/.hljs{color:#dddde1;background:#1e1e22}.hljs ::selection,.hljs::selection{color:#1e1e22;background:#bf8fef}.hljs-code,.hljs-comment,.hljs-quote{color:#888896}.hljs-deletion,.hljs-literal,.hljs-number{color:#ef8f8f}.hljs-doctag,.hljs-meta,.hljs-operator,.hljs-punctuation,.hljs-selector-attr,.hljs-subst,.hljs-template-variable{color:#efbf8f}.hljs-type{color:#efef8f}.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-title{color:#bfef8f}.hljs-addition,.hljs-regexp,.hljs-string{color:#8fef8f}.hljs-class,.hljs-property{color:#8fefbf}.hljs-name,.hljs-selector-tag{color:#8fefef}.hljs-built_in,.hljs-keyword{color:#8fbfef}.hljs-bullet,.hljs-section{color:#8f8fef}.hljs-selector-pseudo{color:#bf8fef}.hljs-attr,.hljs-attribute,.hljs-params,.hljs-variable{color:#ef8fef}.hljs-link,.hljs-symbol{color:#ef8fbf}.hljs-literal,.hljs-strong,.hljs-title{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/styles/highlights/foundation.min.css b/styles/highlights/foundation.min.css new file mode 100644 index 000000000..1ddcfa66e --- /dev/null +++ b/styles/highlights/foundation.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#eee;color:#000}.hljs-addition,.hljs-attribute,.hljs-emphasis,.hljs-link{color:#070}.hljs-emphasis{font-style:italic}.hljs-deletion,.hljs-string,.hljs-strong{color:#d14}.hljs-strong{font-weight:700}.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-section,.hljs-title{color:#900}.hljs-class .hljs-title,.hljs-title.class_,.hljs-type{color:#458}.hljs-template-variable,.hljs-variable{color:#369}.hljs-bullet{color:#970}.hljs-meta{color:#34b}.hljs-code,.hljs-keyword,.hljs-literal,.hljs-number,.hljs-selector-tag{color:#099}.hljs-regexp{background-color:#fff0ff;color:#808}.hljs-symbol{color:#990073}.hljs-name,.hljs-selector-class,.hljs-selector-id,.hljs-tag{color:#070} \ No newline at end of file diff --git a/styles/highlights/github-dark-dimmed.min.css b/styles/highlights/github-dark-dimmed.min.css new file mode 100644 index 000000000..e266dfc1c --- /dev/null +++ b/styles/highlights/github-dark-dimmed.min.css @@ -0,0 +1,9 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: GitHub Dark Dimmed + Description: Dark dimmed theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Colors taken from GitHub's CSS +*/.hljs{color:#adbac7;background:#22272e}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#f47067}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#dcbdfb}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#6cb6ff}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#96d0ff}.hljs-built_in,.hljs-symbol{color:#f69d50}.hljs-code,.hljs-comment,.hljs-formula{color:#768390}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#8ddb8c}.hljs-subst{color:#adbac7}.hljs-section{color:#316dca;font-weight:700}.hljs-bullet{color:#eac55f}.hljs-emphasis{color:#adbac7;font-style:italic}.hljs-strong{color:#adbac7;font-weight:700}.hljs-addition{color:#b4f1b4;background-color:#1b4721}.hljs-deletion{color:#ffd8d3;background-color:#78191b} \ No newline at end of file diff --git a/styles/highlights/github-dark.min.css b/styles/highlights/github-dark.min.css new file mode 100644 index 000000000..03b6da8bf --- /dev/null +++ b/styles/highlights/github-dark.min.css @@ -0,0 +1,10 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: GitHub Dark + Description: Dark theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-dark + Current colors taken from GitHub's CSS +*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#79c0ff}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-code,.hljs-comment,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c} \ No newline at end of file diff --git a/styles/highlights/github.min.css b/styles/highlights/github.min.css new file mode 100644 index 000000000..275239a7a --- /dev/null +++ b/styles/highlights/github.min.css @@ -0,0 +1,10 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: GitHub + Description: Light theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-light + Current colors taken from GitHub's CSS +*/.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#005cc5}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-code,.hljs-comment,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0} \ No newline at end of file diff --git a/styles/highlights/gml.min.css b/styles/highlights/gml.min.css new file mode 100644 index 000000000..89455fe31 --- /dev/null +++ b/styles/highlights/gml.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#222;color:silver}.hljs-keyword{color:#ffb871;font-weight:700}.hljs-built_in{color:#ffb871}.hljs-literal{color:#ff8080}.hljs-symbol{color:#58e55a}.hljs-comment{color:#5b995b}.hljs-string{color:#ff0}.hljs-number{color:#ff8080}.hljs-addition,.hljs-attribute,.hljs-bullet,.hljs-code,.hljs-deletion,.hljs-doctag,.hljs-function,.hljs-link,.hljs-meta,.hljs-meta .hljs-keyword,.hljs-name,.hljs-quote,.hljs-regexp,.hljs-section,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag,.hljs-subst,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type,.hljs-variable{color:silver}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/googlecode.min.css b/styles/highlights/googlecode.min.css new file mode 100644 index 000000000..0140b89ba --- /dev/null +++ b/styles/highlights/googlecode.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fff;color:#000}.hljs-comment,.hljs-quote{color:#800}.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-title{color:#008}.hljs-template-variable,.hljs-variable{color:#660}.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-string{color:#080}.hljs-bullet,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-symbol{color:#066}.hljs-attr,.hljs-built_in,.hljs-doctag,.hljs-params,.hljs-title,.hljs-type{color:#606}.hljs-attribute,.hljs-subst{color:#000}.hljs-formula{background-color:#eee;font-style:italic}.hljs-selector-class,.hljs-selector-id{color:#9b703f}.hljs-addition{background-color:#baeeba}.hljs-deletion{background-color:#ffc8bd}.hljs-doctag,.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/styles/highlights/gradient-dark.min.css b/styles/highlights/gradient-dark.min.css new file mode 100644 index 000000000..4aba92891 --- /dev/null +++ b/styles/highlights/gradient-dark.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background-color:#652487;background-image:linear-gradient(160deg,#652487 0,#443ac3 35%,#0174b7 68%,#04988e 100%);color:#e7e4eb}.hljs-subtr{color:#e7e4eb}.hljs-comment,.hljs-doctag,.hljs-meta,.hljs-quote{color:#af8dd9}.hljs-attr,.hljs-regexp,.hljs-selector-id,.hljs-selector-tag,.hljs-tag,.hljs-template-tag{color:#aefbff}.hljs-bullet,.hljs-params,.hljs-selector-class{color:#f19fff}.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-section,.hljs-symbol,.hljs-type{color:#17fc95}.hljs-addition,.hljs-link,.hljs-number{color:#c5fe00}.hljs-string{color:#38c0ff}.hljs-addition,.hljs-attribute{color:#e7ff9f}.hljs-template-variable,.hljs-variable{color:#e447ff}.hljs-built_in,.hljs-class,.hljs-formula,.hljs-function,.hljs-name,.hljs-title{color:#ffc800}.hljs-deletion,.hljs-literal,.hljs-selector-pseudo{color:#ff9e44}.hljs-emphasis,.hljs-quote{font-style:italic}.hljs-keyword,.hljs-params,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-selector-tag,.hljs-strong,.hljs-template-tag{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/gradient-light.min.css b/styles/highlights/gradient-light.min.css new file mode 100644 index 000000000..c5db6fd18 --- /dev/null +++ b/styles/highlights/gradient-light.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background-color:#f9ccff;background-image:linear-gradient(295deg,#f9ccff 0,#e6bbf9 11%,#9ec6f9 32%,#55e6ee 60%,#91f5d1 74%,#f9ffbf 98%);color:#250482}.hljs-subtr{color:#01958b}.hljs-comment,.hljs-doctag,.hljs-meta,.hljs-quote{color:#cb7200}.hljs-attr,.hljs-regexp,.hljs-selector-id,.hljs-selector-tag,.hljs-tag,.hljs-template-tag{color:#07bd5f}.hljs-bullet,.hljs-params,.hljs-selector-class{color:#43449f}.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-section,.hljs-symbol,.hljs-type{color:#7d2801}.hljs-addition,.hljs-link,.hljs-number{color:#7f0096}.hljs-string{color:#2681ab}.hljs-addition,.hljs-attribute{color:#296562}.hljs-template-variable,.hljs-variable{color:#025c8f}.hljs-built_in,.hljs-class,.hljs-formula,.hljs-function,.hljs-name,.hljs-title{color:#529117}.hljs-deletion,.hljs-literal,.hljs-selector-pseudo{color:#ad13ff}.hljs-emphasis,.hljs-quote{font-style:italic}.hljs-keyword,.hljs-params,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-selector-tag,.hljs-strong,.hljs-template-tag{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/grayscale.min.css b/styles/highlights/grayscale.min.css new file mode 100644 index 000000000..5eefdaa93 --- /dev/null +++ b/styles/highlights/grayscale.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#333;background:#fff}.hljs-comment,.hljs-quote{color:#777;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:700}.hljs-literal,.hljs-number{color:#777}.hljs-doctag,.hljs-formula,.hljs-string{color:#333;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAJ0lEQVQIW2O8e/fufwYGBgZBQUEQxcCIIfDu3Tuwivfv30NUoAsAALHpFMMLqZlPAAAAAElFTkSuQmCC)}.hljs-section,.hljs-selector-id,.hljs-title{color:#000;font-weight:700}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-name,.hljs-title.class_,.hljs-type{color:#333;font-weight:700}.hljs-tag{color:#333}.hljs-regexp{color:#333;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAAPUlEQVQYV2NkQAN37979r6yszIgujiIAU4RNMVwhuiQ6H6wQl3XI4oy4FMHcCJPHcDS6J2A2EqUQpJhohQDexSef15DBCwAAAABJRU5ErkJggg==)}.hljs-bullet,.hljs-link,.hljs-symbol{color:#000;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAKElEQVQIW2NkQAO7d+/+z4gsBhJwdXVlhAvCBECKwIIwAbhKZBUwBQA6hBpm5efZsgAAAABJRU5ErkJggg==)}.hljs-built_in{color:#000;text-decoration:underline}.hljs-meta{color:#999;font-weight:700}.hljs-deletion{color:#fff;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAADCAYAAABS3WWCAAAAE0lEQVQIW2MMDQ39zzhz5kwIAQAyxweWgUHd1AAAAABJRU5ErkJggg==)}.hljs-addition{color:#000;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAALUlEQVQYV2N89+7dfwYk8P79ewZBQUFkIQZGOiu6e/cuiptQHAPl0NtNxAQBAM97Oejj3Dg7AAAAAElFTkSuQmCC)}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/hybrid.min.css b/styles/highlights/hybrid.min.css new file mode 100644 index 000000000..52489b6b3 --- /dev/null +++ b/styles/highlights/hybrid.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#1d1f21;color:#c5c8c6}.hljs span::selection,.hljs::selection{background:#373b41}.hljs span::-moz-selection,.hljs::-moz-selection{background:#373b41}.hljs-name,.hljs-title{color:#f0c674}.hljs-comment,.hljs-meta,.hljs-meta .hljs-keyword{color:#707880}.hljs-deletion,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol{color:#c66}.hljs-addition,.hljs-doctag,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-string{color:#b5bd68}.hljs-attribute,.hljs-code,.hljs-selector-id{color:#b294bb}.hljs-bullet,.hljs-keyword,.hljs-selector-tag,.hljs-tag{color:#81a2be}.hljs-subst,.hljs-template-tag,.hljs-template-variable,.hljs-variable{color:#8abeb7}.hljs-built_in,.hljs-quote,.hljs-section,.hljs-selector-class,.hljs-type{color:#de935f}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/idea.min.css b/styles/highlights/idea.min.css new file mode 100644 index 000000000..7cc62ff35 --- /dev/null +++ b/styles/highlights/idea.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#000;background:#fff}.hljs-subst,.hljs-title{font-weight:400;color:#000}.hljs-comment,.hljs-quote{color:grey;font-style:italic}.hljs-meta{color:olive}.hljs-tag{background:#efefef}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-selector-tag,.hljs-type{font-weight:700;color:navy}.hljs-attribute,.hljs-link,.hljs-number,.hljs-regexp{font-weight:700;color:#00f}.hljs-link,.hljs-number,.hljs-regexp{font-weight:400}.hljs-string{color:green;font-weight:700}.hljs-bullet,.hljs-formula,.hljs-symbol{color:#000;background:#d0eded;font-style:italic}.hljs-doctag{text-decoration:underline}.hljs-template-variable,.hljs-variable{color:#660e7a}.hljs-addition{background:#baeeba}.hljs-deletion{background:#ffc8bd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/intellij-light.min.css b/styles/highlights/intellij-light.min.css new file mode 100644 index 000000000..97fc3e2da --- /dev/null +++ b/styles/highlights/intellij-light.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#000;background:#fff}.hljs-subst,.hljs-title{font-weight:400;color:#000}.hljs-title.function_{color:#7a7a43}.hljs-code,.hljs-comment,.hljs-quote{color:#8c8c8c;font-style:italic}.hljs-meta{color:#9e880d}.hljs-section{color:#871094}.hljs-built_in,.hljs-keyword,.hljs-literal,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag,.hljs-symbol,.hljs-template-tag,.hljs-type,.hljs-variable.language_{color:#0033b3}.hljs-attr,.hljs-property{color:#871094}.hljs-attribute{color:#174ad4}.hljs-number{color:#1750eb}.hljs-regexp{color:#264eff}.hljs-link{text-decoration:underline;color:#006dcc}.hljs-meta .hljs-string,.hljs-string{color:#067d17}.hljs-char.escape_{color:#0037a6}.hljs-doctag{text-decoration:underline}.hljs-template-variable{color:#248f8f}.hljs-addition{background:#bee6be}.hljs-deletion{background:#d6d6d6}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/ir-black.min.css b/styles/highlights/ir-black.min.css new file mode 100644 index 000000000..e78fd083b --- /dev/null +++ b/styles/highlights/ir-black.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#000;color:#f8f8f8}.hljs-comment,.hljs-meta,.hljs-quote{color:#7c7c7c}.hljs-keyword,.hljs-name,.hljs-selector-tag,.hljs-tag{color:#96cbfe}.hljs-attribute,.hljs-selector-id{color:#ffffb6}.hljs-addition,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-string{color:#a8ff60}.hljs-subst{color:#daefa3}.hljs-link,.hljs-regexp{color:#e9c062}.hljs-doctag,.hljs-section,.hljs-title,.hljs-type{color:#ffffb6}.hljs-bullet,.hljs-literal,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#c6c5fe}.hljs-deletion,.hljs-number{color:#ff73fd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/isbl-editor-dark.min.css b/styles/highlights/isbl-editor-dark.min.css new file mode 100644 index 000000000..535ef87a0 --- /dev/null +++ b/styles/highlights/isbl-editor-dark.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#404040}.hljs,.hljs-subst{color:#f0f0f0}.hljs-comment{color:#b5b5b5;font-style:italic}.hljs-attribute,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-tag{color:#f0f0f0;font-weight:700}.hljs-string{color:#97bf0d}.hljs-deletion,.hljs-number,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-template-tag,.hljs-type{color:#f0f0f0}.hljs-link,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#e2c696}.hljs-built_in,.hljs-literal{color:#97bf0d;font-weight:700}.hljs-addition,.hljs-bullet,.hljs-code{color:#397300}.hljs-class{color:#ce9d4d;font-weight:700}.hljs-section,.hljs-title{color:#df471e}.hljs-title>.hljs-built_in{color:#81bce9;font-weight:400}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#4d99bf}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/isbl-editor-light.min.css b/styles/highlights/isbl-editor-light.min.css new file mode 100644 index 000000000..f008c7404 --- /dev/null +++ b/styles/highlights/isbl-editor-light.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fff;color:#000}.hljs-subst{color:#000}.hljs-comment{color:#555;font-style:italic}.hljs-attribute,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-tag{color:#000;font-weight:700}.hljs-string{color:navy}.hljs-deletion,.hljs-number,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-template-tag,.hljs-type{color:#000}.hljs-link,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#5e1700}.hljs-built_in,.hljs-literal{color:navy;font-weight:700}.hljs-addition,.hljs-bullet,.hljs-code{color:#397300}.hljs-class{color:#6f1c00;font-weight:700}.hljs-section,.hljs-title{color:#fb2c00}.hljs-title>.hljs-built_in{color:teal;font-weight:400}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#4d99bf}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/kimbie-dark.min.css b/styles/highlights/kimbie-dark.min.css new file mode 100644 index 000000000..cf56cea5c --- /dev/null +++ b/styles/highlights/kimbie-dark.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#221a0f;color:#d3af86}.hljs-comment,.hljs-quote{color:#d6baad}.hljs-meta,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#dc3958}.hljs-built_in,.hljs-deletion,.hljs-link,.hljs-literal,.hljs-number,.hljs-params,.hljs-type{color:#f79a32}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:#889b4a}.hljs-function,.hljs-keyword,.hljs-selector-tag{color:#98676a}.hljs-attribute,.hljs-section,.hljs-title{color:#f06431}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/kimbie-light.min.css b/styles/highlights/kimbie-light.min.css new file mode 100644 index 000000000..b9d0ea447 --- /dev/null +++ b/styles/highlights/kimbie-light.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fbebd4;color:#84613d}.hljs-comment,.hljs-quote{color:#a57a4c}.hljs-meta,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#dc3958}.hljs-built_in,.hljs-deletion,.hljs-link,.hljs-literal,.hljs-number,.hljs-params,.hljs-type{color:#f79a32}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:#889b4a}.hljs-function,.hljs-keyword,.hljs-selector-tag{color:#98676a}.hljs-attribute,.hljs-section,.hljs-title{color:#f06431}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/lightfair.min.css b/styles/highlights/lightfair.min.css new file mode 100644 index 000000000..b6c379184 --- /dev/null +++ b/styles/highlights/lightfair.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#444;background:#fff}.hljs-name{color:#01a3a3}.hljs-meta,.hljs-tag{color:#789}.hljs-comment{color:#888}.hljs-attribute,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-tag{font-weight:700}.hljs-deletion,.hljs-number,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-template-tag,.hljs-type{color:#4286f4}.hljs-section,.hljs-title{color:#4286f4;font-weight:700}.hljs-link,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#bc6060}.hljs-literal{color:#62bcbc}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-code{color:#25c6c6}.hljs-meta .hljs-string{color:#4d99bf}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/lioshi.min.css b/styles/highlights/lioshi.min.css new file mode 100644 index 000000000..3d6a92f49 --- /dev/null +++ b/styles/highlights/lioshi.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#303030;color:#c5c8c6}.hljs-comment{color:#8d8d8d}.hljs-quote{color:#b3c7d8}.hljs-deletion,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#c66}.hljs-built_in,.hljs-literal,.hljs-number,.hljs-subst .hljs-link,.hljs-type{color:#de935f}.hljs-attribute{color:#f0c674}.hljs-addition,.hljs-bullet,.hljs-params,.hljs-string{color:#b5bd68}.hljs-class,.hljs-function,.hljs-keyword,.hljs-selector-tag{color:#be94bb}.hljs-meta,.hljs-section,.hljs-title{color:#81a2be}.hljs-symbol{color:#dbc4d9}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/magula.min.css b/styles/highlights/magula.min.css new file mode 100644 index 000000000..e02438778 --- /dev/null +++ b/styles/highlights/magula.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background-color:#f4f4f4;color:#000}.hljs-subst{color:#000}.hljs-addition,.hljs-attribute,.hljs-bullet,.hljs-string,.hljs-symbol,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-variable{color:#050}.hljs-comment,.hljs-quote{color:#777}.hljs-link,.hljs-literal,.hljs-number,.hljs-regexp,.hljs-type{color:#800}.hljs-deletion,.hljs-meta{color:#00e}.hljs-built_in,.hljs-doctag,.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-tag,.hljs-title{font-weight:700;color:navy}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/mono-blue.min.css b/styles/highlights/mono-blue.min.css new file mode 100644 index 000000000..fb74d4056 --- /dev/null +++ b/styles/highlights/mono-blue.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#eaeef3;color:#00193a}.hljs-doctag,.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-strong,.hljs-title{font-weight:700}.hljs-comment{color:#738191}.hljs-addition,.hljs-built_in,.hljs-literal,.hljs-name,.hljs-quote,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-tag,.hljs-title,.hljs-type{color:#0048ab}.hljs-attribute,.hljs-bullet,.hljs-deletion,.hljs-link,.hljs-meta,.hljs-regexp,.hljs-subst,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#4c81c9}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/styles/highlights/monokai-sublime.min.css b/styles/highlights/monokai-sublime.min.css new file mode 100644 index 000000000..247e2e91f --- /dev/null +++ b/styles/highlights/monokai-sublime.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#23241f;color:#f8f8f2}.hljs-subst,.hljs-tag{color:#f8f8f2}.hljs-emphasis,.hljs-strong{color:#a8a8a2}.hljs-bullet,.hljs-link,.hljs-literal,.hljs-number,.hljs-quote,.hljs-regexp{color:#ae81ff}.hljs-code,.hljs-section,.hljs-selector-class,.hljs-title{color:#a6e22e}.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic}.hljs-attr,.hljs-keyword,.hljs-name,.hljs-selector-tag{color:#f92672}.hljs-attribute,.hljs-symbol{color:#66d9ef}.hljs-class .hljs-title,.hljs-params,.hljs-title.class_{color:#f8f8f2}.hljs-addition,.hljs-built_in,.hljs-selector-attr,.hljs-selector-id,.hljs-selector-pseudo,.hljs-string,.hljs-template-variable,.hljs-type,.hljs-variable{color:#e6db74}.hljs-comment,.hljs-deletion,.hljs-meta{color:#75715e} \ No newline at end of file diff --git a/styles/highlights/monokai.min.css b/styles/highlights/monokai.min.css new file mode 100644 index 000000000..448d85ddf --- /dev/null +++ b/styles/highlights/monokai.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#272822;color:#ddd}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-selector-tag,.hljs-strong,.hljs-tag{color:#f92672}.hljs-code{color:#66d9ef}.hljs-attribute,.hljs-link,.hljs-regexp,.hljs-symbol{color:#bf79db}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-emphasis,.hljs-section,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-string,.hljs-subst,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type,.hljs-variable{color:#a6e22e}.hljs-class .hljs-title,.hljs-title.class_{color:#fff}.hljs-comment,.hljs-deletion,.hljs-meta,.hljs-quote{color:#75715e}.hljs-doctag,.hljs-keyword,.hljs-literal,.hljs-section,.hljs-selector-id,.hljs-selector-tag,.hljs-title,.hljs-type{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/night-owl.min.css b/styles/highlights/night-owl.min.css new file mode 100644 index 000000000..ed945902d --- /dev/null +++ b/styles/highlights/night-owl.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#011627;color:#d6deeb}.hljs-keyword{color:#c792ea;font-style:italic}.hljs-built_in{color:#addb67;font-style:italic}.hljs-type{color:#82aaff}.hljs-literal{color:#ff5874}.hljs-number{color:#f78c6c}.hljs-regexp{color:#5ca7e4}.hljs-string{color:#ecc48d}.hljs-subst{color:#d3423e}.hljs-symbol{color:#82aaff}.hljs-class{color:#ffcb8b}.hljs-function{color:#82aaff}.hljs-title{color:#dcdcaa;font-style:italic}.hljs-params{color:#7fdbca}.hljs-comment{color:#637777;font-style:italic}.hljs-doctag{color:#7fdbca}.hljs-meta,.hljs-meta .hljs-keyword{color:#82aaff}.hljs-meta .hljs-string{color:#ecc48d}.hljs-section{color:#82b1ff}.hljs-attr,.hljs-name,.hljs-tag{color:#7fdbca}.hljs-attribute{color:#80cbc4}.hljs-variable{color:#addb67}.hljs-bullet{color:#d9f5dd}.hljs-code{color:#80cbc4}.hljs-emphasis{color:#c792ea;font-style:italic}.hljs-strong{color:#addb67;font-weight:700}.hljs-formula{color:#c792ea}.hljs-link{color:#ff869a}.hljs-quote{color:#697098;font-style:italic}.hljs-selector-tag{color:#ff6363}.hljs-selector-id{color:#fad430}.hljs-selector-class{color:#addb67;font-style:italic}.hljs-selector-attr,.hljs-selector-pseudo{color:#c792ea;font-style:italic}.hljs-template-tag{color:#c792ea}.hljs-template-variable{color:#addb67}.hljs-addition{color:#addb67ff;font-style:italic}.hljs-deletion{color:#ef535090;font-style:italic} \ No newline at end of file diff --git a/styles/highlights/nnfx-dark.min.css b/styles/highlights/nnfx-dark.min.css new file mode 100644 index 000000000..4e6403d6e --- /dev/null +++ b/styles/highlights/nnfx-dark.min.css @@ -0,0 +1,10 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: nnfx dark + Description: a theme inspired by Netscape Navigator/Firefox + Author: (c) 2020-2021 Jim Mason + Maintainer: @RocketMan + License: https://creativecommons.org/licenses/by-sa/4.0 CC BY-SA 4.0 + Updated: 2021-05-17 + + @version 1.1.0 +*/.hljs{background:#333;color:#fff}.language-xml .hljs-meta,.language-xml .hljs-meta-string{font-weight:700;font-style:italic;color:#69f}.hljs-comment,.hljs-quote{font-style:italic;color:#9c6}.hljs-built_in,.hljs-keyword,.hljs-name{color:#a7a}.hljs-attr,.hljs-name{font-weight:700}.hljs-string{font-weight:400}.hljs-code,.hljs-link,.hljs-meta .hljs-string,.hljs-number,.hljs-regexp,.hljs-string{color:#bce}.hljs-bullet,.hljs-symbol,.hljs-template-variable,.hljs-title,.hljs-variable{color:#d40}.hljs-class .hljs-title,.hljs-title.class_,.hljs-type{font-weight:700;color:#96c}.hljs-attr,.hljs-function .hljs-title,.hljs-subst,.hljs-tag,.hljs-title.function_{color:#fff}.hljs-formula{background-color:#eee;font-style:italic}.hljs-addition{background-color:#797}.hljs-deletion{background-color:#c99}.hljs-meta{color:#69f}.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{font-weight:700;color:#69f}.hljs-selector-pseudo{font-style:italic}.hljs-doctag,.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/styles/highlights/nnfx-light.min.css b/styles/highlights/nnfx-light.min.css new file mode 100644 index 000000000..469223a98 --- /dev/null +++ b/styles/highlights/nnfx-light.min.css @@ -0,0 +1,10 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: nnfx light + Description: a theme inspired by Netscape Navigator/Firefox + Author: (c) 2020-2021 Jim Mason + Maintainer: @RocketMan + License: https://creativecommons.org/licenses/by-sa/4.0 CC BY-SA 4.0 + Updated: 2021-05-17 + + @version 1.1.0 +*/.hljs{background:#fff;color:#000}.language-xml .hljs-meta,.language-xml .hljs-meta-string{font-weight:700;font-style:italic;color:#48b}.hljs-comment,.hljs-quote{font-style:italic;color:#070}.hljs-built_in,.hljs-keyword,.hljs-name{color:#808}.hljs-attr,.hljs-name{font-weight:700}.hljs-string{font-weight:400}.hljs-code,.hljs-link,.hljs-meta .hljs-string,.hljs-number,.hljs-regexp,.hljs-string{color:#00f}.hljs-bullet,.hljs-symbol,.hljs-template-variable,.hljs-title,.hljs-variable{color:#f40}.hljs-class .hljs-title,.hljs-title.class_,.hljs-type{font-weight:700;color:#639}.hljs-attr,.hljs-function .hljs-title,.hljs-subst,.hljs-tag,.hljs-title.function_{color:#000}.hljs-formula{background-color:#eee;font-style:italic}.hljs-addition{background-color:#beb}.hljs-deletion{background-color:#fbb}.hljs-meta{color:#269}.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{font-weight:700;color:#48b}.hljs-selector-pseudo{font-style:italic}.hljs-doctag,.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/styles/highlights/nord.min.css b/styles/highlights/nord.min.css new file mode 100644 index 000000000..efbb0c13e --- /dev/null +++ b/styles/highlights/nord.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#2e3440}.hljs,.hljs-subst{color:#d8dee9}.hljs-selector-tag{color:#81a1c1}.hljs-selector-id{color:#8fbcbb;font-weight:700}.hljs-selector-attr,.hljs-selector-class{color:#8fbcbb}.hljs-property,.hljs-selector-pseudo{color:#88c0d0}.hljs-addition{background-color:rgba(163,190,140,.5)}.hljs-deletion{background-color:rgba(191,97,106,.5)}.hljs-built_in,.hljs-class,.hljs-type{color:#8fbcbb}.hljs-function,.hljs-function>.hljs-title,.hljs-title.hljs-function{color:#88c0d0}.hljs-keyword,.hljs-literal,.hljs-symbol{color:#81a1c1}.hljs-number{color:#b48ead}.hljs-regexp{color:#ebcb8b}.hljs-string{color:#a3be8c}.hljs-title{color:#8fbcbb}.hljs-params{color:#d8dee9}.hljs-bullet{color:#81a1c1}.hljs-code{color:#8fbcbb}.hljs-emphasis{font-style:italic}.hljs-formula{color:#8fbcbb}.hljs-strong{font-weight:700}.hljs-link:hover{text-decoration:underline}.hljs-comment,.hljs-quote{color:#4c566a}.hljs-doctag{color:#8fbcbb}.hljs-meta,.hljs-meta .hljs-keyword{color:#5e81ac}.hljs-meta .hljs-string{color:#a3be8c}.hljs-attr{color:#8fbcbb}.hljs-attribute{color:#d8dee9}.hljs-name{color:#81a1c1}.hljs-section{color:#88c0d0}.hljs-tag{color:#81a1c1}.hljs-template-variable,.hljs-variable{color:#d8dee9}.hljs-template-tag{color:#5e81ac}.language-abnf .hljs-attribute{color:#88c0d0}.language-abnf .hljs-symbol{color:#ebcb8b}.language-apache .hljs-attribute{color:#88c0d0}.language-apache .hljs-section{color:#81a1c1}.language-arduino .hljs-built_in{color:#88c0d0}.language-aspectj .hljs-meta{color:#d08770}.language-aspectj>.hljs-title{color:#88c0d0}.language-bnf .hljs-attribute{color:#8fbcbb}.language-clojure .hljs-name{color:#88c0d0}.language-clojure .hljs-symbol{color:#ebcb8b}.language-coq .hljs-built_in{color:#88c0d0}.language-cpp .hljs-meta .hljs-string{color:#8fbcbb}.language-css .hljs-built_in{color:#88c0d0}.language-css .hljs-keyword{color:#d08770}.language-diff .hljs-meta,.language-ebnf .hljs-attribute{color:#8fbcbb}.language-glsl .hljs-built_in{color:#88c0d0}.language-groovy .hljs-meta:not(:first-child),.language-haxe .hljs-meta,.language-java .hljs-meta{color:#d08770}.language-ldif .hljs-attribute{color:#8fbcbb}.language-lisp .hljs-name,.language-lua .hljs-built_in,.language-moonscript .hljs-built_in,.language-nginx .hljs-attribute{color:#88c0d0}.language-nginx .hljs-section{color:#5e81ac}.language-pf .hljs-built_in,.language-processing .hljs-built_in{color:#88c0d0}.language-scss .hljs-keyword,.language-stylus .hljs-keyword{color:#81a1c1}.language-swift .hljs-meta{color:#d08770}.language-vim .hljs-built_in{color:#88c0d0;font-style:italic}.language-yaml .hljs-meta{color:#d08770} \ No newline at end of file diff --git a/styles/highlights/obsidian.min.css b/styles/highlights/obsidian.min.css new file mode 100644 index 000000000..c2a078651 --- /dev/null +++ b/styles/highlights/obsidian.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#e0e2e4;background:#282b2e}.hljs-keyword,.hljs-literal,.hljs-selector-id,.hljs-selector-tag{color:#93c763}.hljs-number{color:#ffcd22}.hljs-attribute{color:#668bb0}.hljs-link,.hljs-regexp{color:#d39745}.hljs-meta{color:#557182}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-emphasis,.hljs-name,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-subst,.hljs-tag,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable{color:#8cbbad}.hljs-string,.hljs-symbol{color:#ec7600}.hljs-comment,.hljs-deletion,.hljs-quote{color:#818e96}.hljs-selector-class{color:#a082bd}.hljs-doctag,.hljs-keyword,.hljs-literal,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-strong,.hljs-title,.hljs-type{font-weight:700}.hljs-class .hljs-title,.hljs-code,.hljs-section,.hljs-title.class_{color:#fff} \ No newline at end of file diff --git a/styles/highlights/panda-syntax-dark.min.css b/styles/highlights/panda-syntax-dark.min.css new file mode 100644 index 000000000..55e26c684 --- /dev/null +++ b/styles/highlights/panda-syntax-dark.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#e6e6e6;background:#2a2c2d}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline}.hljs-comment,.hljs-quote{color:#bbb;font-style:italic}.hljs-params{color:#bbb}.hljs-attr,.hljs-punctuation{color:#e6e6e6}.hljs-meta,.hljs-name,.hljs-selector-tag{color:#ff4b82}.hljs-char.escape_,.hljs-operator{color:#b084eb}.hljs-deletion,.hljs-keyword{color:#ff75b5}.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-variable.language_{color:#ff9ac1}.hljs-code,.hljs-formula,.hljs-property,.hljs-section,.hljs-subst,.hljs-title.function_{color:#45a9f9}.hljs-addition,.hljs-bullet,.hljs-meta .hljs-string,.hljs-selector-class,.hljs-string,.hljs-symbol,.hljs-title.class_,.hljs-title.class_.inherited__{color:#19f9d8}.hljs-attribute,.hljs-built_in,.hljs-doctag,.hljs-link,.hljs-literal,.hljs-meta .hljs-keyword,.hljs-number,.hljs-punctuation,.hljs-selector-id,.hljs-tag,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type,.hljs-variable{color:#ffb86c} \ No newline at end of file diff --git a/styles/highlights/panda-syntax-light.min.css b/styles/highlights/panda-syntax-light.min.css new file mode 100644 index 000000000..6710dbdf4 --- /dev/null +++ b/styles/highlights/panda-syntax-light.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#2a2c2d;background:#e6e6e6}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline}.hljs-comment,.hljs-quote{color:#676b79;font-style:italic}.hljs-params{color:#676b79}.hljs-attr,.hljs-punctuation{color:#2a2c2d}.hljs-char.escape_,.hljs-meta,.hljs-name,.hljs-operator,.hljs-selector-tag{color:#c56200}.hljs-deletion,.hljs-keyword{color:#d92792}.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-variable.language_{color:#cc5e91}.hljs-code,.hljs-formula,.hljs-property,.hljs-section,.hljs-subst,.hljs-title.function_{color:#3787c7}.hljs-addition,.hljs-bullet,.hljs-meta .hljs-string,.hljs-selector-class,.hljs-string,.hljs-symbol,.hljs-title.class_,.hljs-title.class_.inherited__{color:#0d7d6c}.hljs-attribute,.hljs-built_in,.hljs-doctag,.hljs-link,.hljs-literal,.hljs-meta .hljs-keyword,.hljs-number,.hljs-selector-id,.hljs-tag,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type,.hljs-variable{color:#7641bb} \ No newline at end of file diff --git a/styles/highlights/paraiso-dark.min.css b/styles/highlights/paraiso-dark.min.css new file mode 100644 index 000000000..d51dd185b --- /dev/null +++ b/styles/highlights/paraiso-dark.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#2f1e2e;color:#a39e9b}.hljs-comment,.hljs-quote{color:#8d8687}.hljs-link,.hljs-meta,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#ef6155}.hljs-built_in,.hljs-deletion,.hljs-literal,.hljs-number,.hljs-params,.hljs-type{color:#f99b15}.hljs-attribute,.hljs-section,.hljs-title{color:#fec418}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:#48b685}.hljs-keyword,.hljs-selector-tag{color:#815ba4}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/paraiso-light.min.css b/styles/highlights/paraiso-light.min.css new file mode 100644 index 000000000..3a17c3f87 --- /dev/null +++ b/styles/highlights/paraiso-light.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#e7e9db;color:#4f424c}.hljs-comment,.hljs-quote{color:#776e71}.hljs-link,.hljs-meta,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#ef6155}.hljs-built_in,.hljs-deletion,.hljs-literal,.hljs-number,.hljs-params,.hljs-type{color:#f99b15}.hljs-attribute,.hljs-section,.hljs-title{color:#fec418}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:#48b685}.hljs-keyword,.hljs-selector-tag{color:#815ba4}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/pojoaque.min.css b/styles/highlights/pojoaque.min.css new file mode 100644 index 000000000..71345a9c1 --- /dev/null +++ b/styles/highlights/pojoaque.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#dccf8f;background:url(./pojoaque.jpg) left top #181914}.hljs-comment,.hljs-quote{color:#586e75;font-style:italic}.hljs-addition,.hljs-keyword,.hljs-literal,.hljs-selector-tag{color:#b64926}.hljs-doctag,.hljs-number,.hljs-regexp,.hljs-string{color:#468966}.hljs-built_in,.hljs-name,.hljs-section,.hljs-title{color:#ffb03b}.hljs-class .hljs-title,.hljs-tag,.hljs-template-variable,.hljs-title.class_,.hljs-type,.hljs-variable{color:#b58900}.hljs-attribute{color:#b89859}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-subst,.hljs-symbol{color:#cb4b16}.hljs-deletion{color:#dc322f}.hljs-selector-class,.hljs-selector-id{color:#d3a60c}.hljs-formula{background:#073642}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/purebasic.min.css b/styles/highlights/purebasic.min.css new file mode 100644 index 000000000..e026c45c3 --- /dev/null +++ b/styles/highlights/purebasic.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#ffffdf}.hljs,.hljs-attr,.hljs-function,.hljs-name,.hljs-number,.hljs-params,.hljs-subst,.hljs-type{color:#000}.hljs-addition,.hljs-comment,.hljs-regexp,.hljs-section,.hljs-selector-pseudo{color:#0aa}.hljs-built_in,.hljs-class,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-selector-class{color:#066;font-weight:700}.hljs-code,.hljs-tag,.hljs-title,.hljs-variable{color:#066}.hljs-selector-attr,.hljs-string{color:#0080ff}.hljs-attribute,.hljs-deletion,.hljs-link,.hljs-symbol{color:#924b72}.hljs-literal,.hljs-meta,.hljs-selector-id{color:#924b72;font-weight:700}.hljs-name,.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/styles/highlights/qtcreator-dark.min.css b/styles/highlights/qtcreator-dark.min.css new file mode 100644 index 000000000..976e519e4 --- /dev/null +++ b/styles/highlights/qtcreator-dark.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#aaa;background:#000}.hljs-emphasis,.hljs-strong{color:#a8a8a2}.hljs-bullet,.hljs-literal,.hljs-number,.hljs-quote,.hljs-regexp{color:#f5f}.hljs-code .hljs-selector-class{color:#aaf}.hljs-emphasis,.hljs-stronge,.hljs-type{font-style:italic}.hljs-function,.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-symbol{color:#ff5}.hljs-subst,.hljs-tag,.hljs-title{color:#aaa}.hljs-attribute{color:#f55}.hljs-class .hljs-title,.hljs-params,.hljs-title.class_,.hljs-variable{color:#88f}.hljs-addition,.hljs-built_in,.hljs-link,.hljs-selector-attr,.hljs-selector-id,.hljs-selector-pseudo,.hljs-string,.hljs-template-tag,.hljs-template-variable,.hljs-type{color:#f5f}.hljs-comment,.hljs-deletion,.hljs-meta{color:#5ff} \ No newline at end of file diff --git a/styles/highlights/qtcreator-light.min.css b/styles/highlights/qtcreator-light.min.css new file mode 100644 index 000000000..7f1af8c61 --- /dev/null +++ b/styles/highlights/qtcreator-light.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#000;background:#fff}.hljs-emphasis,.hljs-strong{color:#000}.hljs-bullet,.hljs-literal,.hljs-number,.hljs-quote,.hljs-regexp{color:navy}.hljs-code .hljs-selector-class{color:purple}.hljs-emphasis,.hljs-stronge,.hljs-type{font-style:italic}.hljs-function,.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-symbol{color:olive}.hljs-subst,.hljs-tag,.hljs-title{color:#000}.hljs-attribute{color:maroon}.hljs-class .hljs-title,.hljs-params,.hljs-title.class_,.hljs-variable{color:#0055af}.hljs-addition,.hljs-built_in,.hljs-comment,.hljs-deletion,.hljs-link,.hljs-meta,.hljs-selector-attr,.hljs-selector-id,.hljs-selector-pseudo,.hljs-string,.hljs-template-tag,.hljs-template-variable,.hljs-type{color:green} \ No newline at end of file diff --git a/styles/highlights/rainbow.min.css b/styles/highlights/rainbow.min.css new file mode 100644 index 000000000..c8ca25fbd --- /dev/null +++ b/styles/highlights/rainbow.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#474949;color:#d1d9e1}.hljs-comment,.hljs-quote{color:#969896;font-style:italic}.hljs-addition,.hljs-keyword,.hljs-literal,.hljs-selector-tag,.hljs-type{color:#c9c}.hljs-number,.hljs-selector-attr,.hljs-selector-pseudo{color:#f99157}.hljs-doctag,.hljs-regexp,.hljs-string{color:#8abeb7}.hljs-built_in,.hljs-name,.hljs-section,.hljs-title{color:#b5bd68}.hljs-class .hljs-title,.hljs-selector-id,.hljs-template-variable,.hljs-title.class_,.hljs-variable{color:#fc6}.hljs-name,.hljs-section,.hljs-strong{font-weight:700}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-subst,.hljs-symbol{color:#f99157}.hljs-deletion{color:#dc322f}.hljs-formula{background:#eee8d5}.hljs-attr,.hljs-attribute{color:#81a2be}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/styles/highlights/routeros.min.css b/styles/highlights/routeros.min.css new file mode 100644 index 000000000..03786787f --- /dev/null +++ b/styles/highlights/routeros.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#444;background:#f0f0f0}.hljs-subst{color:#444}.hljs-comment{color:#888}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-tag{font-weight:700}.hljs-attribute{color:#0e9a00}.hljs-function{color:#99069a}.hljs-deletion,.hljs-number,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-template-tag,.hljs-type{color:#800}.hljs-section,.hljs-title{color:#800;font-weight:700}.hljs-link,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#bc6060}.hljs-literal{color:#78a960}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-code{color:#0c9a9a}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#4d99bf}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/school-book.min.css b/styles/highlights/school-book.min.css new file mode 100644 index 000000000..843f26879 --- /dev/null +++ b/styles/highlights/school-book.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#3e5915;background:#f6f5b2}.hljs-keyword,.hljs-literal,.hljs-selector-tag{color:#059}.hljs-subst{color:#3e5915}.hljs-addition,.hljs-attribute,.hljs-built_in,.hljs-bullet,.hljs-link,.hljs-section,.hljs-string,.hljs-symbol,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type,.hljs-variable{color:#2c009f}.hljs-comment,.hljs-deletion,.hljs-meta,.hljs-quote{color:#e60415}.hljs-doctag,.hljs-keyword,.hljs-literal,.hljs-name,.hljs-section,.hljs-selector-id,.hljs-selector-tag,.hljs-strong,.hljs-title,.hljs-type{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/styles/highlights/shades-of-purple.min.css b/styles/highlights/shades-of-purple.min.css new file mode 100644 index 000000000..3dd25b44c --- /dev/null +++ b/styles/highlights/shades-of-purple.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#2d2b57;color:#e3dfff;font-weight:400}.hljs-subst{color:#e3dfff}.hljs-title{color:#fad000;font-weight:400}.hljs-name{color:#a1feff}.hljs-tag{color:#fff}.hljs-attr{color:#f8d000;font-style:italic}.hljs-built_in,.hljs-keyword,.hljs-section,.hljs-selector-tag{color:#fb9e00}.hljs-addition,.hljs-attribute,.hljs-bullet,.hljs-code,.hljs-deletion,.hljs-quote,.hljs-regexp,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-string,.hljs-symbol,.hljs-template-tag{color:#4cd213}.hljs-meta,.hljs-meta .hljs-string{color:#fb9e00}.hljs-comment{color:#ac65ff}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-selector-tag,.hljs-strong{font-weight:400}.hljs-literal,.hljs-number{color:#fa658d}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/srcery.min.css b/styles/highlights/srcery.min.css new file mode 100644 index 000000000..377d61ae1 --- /dev/null +++ b/styles/highlights/srcery.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#1c1b19;color:#fce8c3}.hljs-literal,.hljs-quote,.hljs-subst{color:#fce8c3}.hljs-symbol,.hljs-type{color:#68a8e4}.hljs-deletion,.hljs-keyword{color:#ef2f27}.hljs-attribute,.hljs-function,.hljs-name,.hljs-section,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-title{color:#fbb829}.hljs-class,.hljs-code,.hljs-property,.hljs-template-variable,.hljs-variable{color:#0aaeb3}.hljs-addition,.hljs-bullet,.hljs-regexp,.hljs-string{color:#98bc37}.hljs-built_in,.hljs-params{color:#ff5c8f}.hljs-selector-tag,.hljs-template-tag{color:#2c78bf}.hljs-comment,.hljs-link,.hljs-meta,.hljs-number{color:#918175}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/stackoverflow-dark.min.css b/styles/highlights/stackoverflow-dark.min.css new file mode 100644 index 000000000..33cea55a2 --- /dev/null +++ b/styles/highlights/stackoverflow-dark.min.css @@ -0,0 +1,13 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: StackOverflow Dark + Description: Dark theme as used on stackoverflow.com + Author: stackoverflow.com + Maintainer: @Hirse + Website: https://github.com/StackExchange/Stacks + License: MIT + Updated: 2021-05-15 + + Updated for @stackoverflow/stacks v0.64.0 + Code Blocks: /blob/v0.64.0/lib/css/components/_stacks-code-blocks.less + Colors: /blob/v0.64.0/lib/css/exports/_stacks-constants-colors.less +*/.hljs{color:#fff;background:#1c1b1b}.hljs-subst{color:#fff}.hljs-comment{color:#999}.hljs-attr,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-section,.hljs-selector-tag{color:#88aece}.hljs-attribute{color:#c59bc1}.hljs-name,.hljs-number,.hljs-quote,.hljs-selector-id,.hljs-template-tag,.hljs-type{color:#f08d49}.hljs-selector-class{color:#88aece}.hljs-link,.hljs-regexp,.hljs-selector-attr,.hljs-string,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#b5bd68}.hljs-meta,.hljs-selector-pseudo{color:#88aece}.hljs-built_in,.hljs-literal,.hljs-title{color:#f08d49}.hljs-bullet,.hljs-code{color:#ccc}.hljs-meta .hljs-string{color:#b5bd68}.hljs-deletion{color:#de7176}.hljs-addition{color:#76c490}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/stackoverflow-light.min.css b/styles/highlights/stackoverflow-light.min.css new file mode 100644 index 000000000..c36d63d88 --- /dev/null +++ b/styles/highlights/stackoverflow-light.min.css @@ -0,0 +1,13 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: StackOverflow Light + Description: Light theme as used on stackoverflow.com + Author: stackoverflow.com + Maintainer: @Hirse + Website: https://github.com/StackExchange/Stacks + License: MIT + Updated: 2021-05-15 + + Updated for @stackoverflow/stacks v0.64.0 + Code Blocks: /blob/v0.64.0/lib/css/components/_stacks-code-blocks.less + Colors: /blob/v0.64.0/lib/css/exports/_stacks-constants-colors.less +*/.hljs{color:#2f3337;background:#f6f6f6}.hljs-subst{color:#2f3337}.hljs-comment{color:#656e77}.hljs-attr,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-section,.hljs-selector-tag{color:#015692}.hljs-attribute{color:#803378}.hljs-name,.hljs-number,.hljs-quote,.hljs-selector-id,.hljs-template-tag,.hljs-type{color:#b75501}.hljs-selector-class{color:#015692}.hljs-link,.hljs-regexp,.hljs-selector-attr,.hljs-string,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#54790d}.hljs-meta,.hljs-selector-pseudo{color:#015692}.hljs-built_in,.hljs-literal,.hljs-title{color:#b75501}.hljs-bullet,.hljs-code{color:#535a60}.hljs-meta .hljs-string{color:#54790d}.hljs-deletion{color:#c02d2e}.hljs-addition{color:#2f6f44}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/sunburst.min.css b/styles/highlights/sunburst.min.css new file mode 100644 index 000000000..9210ae6d0 --- /dev/null +++ b/styles/highlights/sunburst.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#000;color:#f8f8f8}.hljs-comment,.hljs-quote{color:#aeaeae;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-type{color:#e28964}.hljs-string{color:#65b042}.hljs-subst{color:#daefa3}.hljs-link,.hljs-regexp{color:#e9c062}.hljs-name,.hljs-section,.hljs-tag,.hljs-title{color:#89bdff}.hljs-class .hljs-title,.hljs-doctag,.hljs-title.class_{text-decoration:underline}.hljs-bullet,.hljs-number,.hljs-symbol{color:#3387cc}.hljs-params,.hljs-template-variable,.hljs-variable{color:#3e87e3}.hljs-attribute{color:#cda869}.hljs-meta{color:#8996a8}.hljs-formula{background-color:#0e2231;color:#f8f8f8;font-style:italic}.hljs-addition{background-color:#253b22;color:#f8f8f8}.hljs-deletion{background-color:#420e09;color:#f8f8f8}.hljs-selector-class{color:#9b703f}.hljs-selector-id{color:#8b98ab}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/tokyo-night-dark.min.css b/styles/highlights/tokyo-night-dark.min.css new file mode 100644 index 000000000..dc63ad9e7 --- /dev/null +++ b/styles/highlights/tokyo-night-dark.min.css @@ -0,0 +1,8 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: Tokyo-night-Dark + origin: https://github.com/enkia/tokyo-night-vscode-theme + Description: Original highlight.js style + Author: (c) Henri Vandersleyen + License: see project LICENSE + Touched: 2022 +*/.hljs-comment,.hljs-meta{color:#565f89}.hljs-deletion,.hljs-doctag,.hljs-regexp,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-tag,.hljs-template-tag,.hljs-variable.language_{color:#f7768e}.hljs-link,.hljs-literal,.hljs-number,.hljs-params,.hljs-template-variable,.hljs-type,.hljs-variable{color:#ff9e64}.hljs-attribute,.hljs-built_in{color:#e0af68}.hljs-keyword,.hljs-property,.hljs-subst,.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#7dcfff}.hljs-selector-tag{color:#73daca}.hljs-addition,.hljs-bullet,.hljs-quote,.hljs-string,.hljs-symbol{color:#9ece6a}.hljs-code,.hljs-formula,.hljs-section{color:#7aa2f7}.hljs-attr,.hljs-char.escape_,.hljs-keyword,.hljs-name,.hljs-operator{color:#bb9af7}.hljs-punctuation{color:#c0caf5}.hljs{background:#1a1b26;color:#9aa5ce}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/tokyo-night-light.min.css b/styles/highlights/tokyo-night-light.min.css new file mode 100644 index 000000000..0096d4d1e --- /dev/null +++ b/styles/highlights/tokyo-night-light.min.css @@ -0,0 +1,8 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: Tokyo-night-light + origin: https://github.com/enkia/tokyo-night-vscode-theme + Description: Original highlight.js style + Author: (c) Henri Vandersleyen + License: see project LICENSE + Touched: 2022 +*/.hljs-comment,.hljs-meta{color:#9699a3}.hljs-deletion,.hljs-doctag,.hljs-regexp,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-tag,.hljs-template-tag,.hljs-variable.language_{color:#8c4351}.hljs-link,.hljs-literal,.hljs-number,.hljs-params,.hljs-template-variable,.hljs-type,.hljs-variable{color:#965027}.hljs-attribute,.hljs-built_in{color:#8f5e15}.hljs-keyword,.hljs-property,.hljs-subst,.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#0f4b6e}.hljs-selector-tag{color:#33635c}.hljs-addition,.hljs-bullet,.hljs-quote,.hljs-string,.hljs-symbol{color:#485e30}.hljs-code,.hljs-formula,.hljs-section{color:#34548a}.hljs-attr,.hljs-char.escape_,.hljs-keyword,.hljs-name,.hljs-operator{color:#5a4a78}.hljs-punctuation{color:#343b58}.hljs{background:#d5d6db;color:#565a6e}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/tomorrow-night-blue.min.css b/styles/highlights/tomorrow-night-blue.min.css new file mode 100644 index 000000000..2f71b26ba --- /dev/null +++ b/styles/highlights/tomorrow-night-blue.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs-comment,.hljs-quote{color:#7285b7}.hljs-deletion,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#ff9da4}.hljs-built_in,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-type{color:#ffc58f}.hljs-attribute{color:#ffeead}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:#d1f1a9}.hljs-section,.hljs-title{color:#bbdaff}.hljs-keyword,.hljs-selector-tag{color:#ebbbff}.hljs{background:#002451;color:#fff}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/tomorrow-night-bright.min.css b/styles/highlights/tomorrow-night-bright.min.css new file mode 100644 index 000000000..d33562994 --- /dev/null +++ b/styles/highlights/tomorrow-night-bright.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs-comment,.hljs-quote{color:#969896}.hljs-deletion,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#d54e53}.hljs-built_in,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-type{color:#e78c45}.hljs-attribute{color:#e7c547}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:#b9ca4a}.hljs-section,.hljs-title{color:#7aa6da}.hljs-keyword,.hljs-selector-tag{color:#c397d8}.hljs{background:#000;color:#eaeaea}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/vs.min.css b/styles/highlights/vs.min.css new file mode 100644 index 000000000..fb695c14b --- /dev/null +++ b/styles/highlights/vs.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fff;color:#000}.hljs-comment,.hljs-quote,.hljs-variable{color:green}.hljs-built_in,.hljs-keyword,.hljs-name,.hljs-selector-tag,.hljs-tag{color:#00f}.hljs-addition,.hljs-attribute,.hljs-literal,.hljs-section,.hljs-string,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type{color:#a31515}.hljs-deletion,.hljs-meta,.hljs-selector-attr,.hljs-selector-pseudo{color:#2b91af}.hljs-doctag{color:grey}.hljs-attr{color:red}.hljs-bullet,.hljs-link,.hljs-symbol{color:#00b0e8}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/highlights/vs2015.min.css b/styles/highlights/vs2015.min.css new file mode 100644 index 000000000..7f6fe11cc --- /dev/null +++ b/styles/highlights/vs2015.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#1e1e1e;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta .hljs-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%} \ No newline at end of file diff --git a/styles/highlights/xcode.min.css b/styles/highlights/xcode.min.css new file mode 100644 index 000000000..cda4adc17 --- /dev/null +++ b/styles/highlights/xcode.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fff;color:#000}.xml .hljs-meta{color:silver}.hljs-comment,.hljs-quote{color:#007400}.hljs-attribute,.hljs-keyword,.hljs-literal,.hljs-name,.hljs-selector-tag,.hljs-tag{color:#aa0d91}.hljs-template-variable,.hljs-variable{color:#3f6e74}.hljs-code,.hljs-meta .hljs-string,.hljs-string{color:#c41a16}.hljs-link,.hljs-regexp{color:#0e0eff}.hljs-bullet,.hljs-number,.hljs-symbol,.hljs-title{color:#1c00cf}.hljs-meta,.hljs-section{color:#643820}.hljs-built_in,.hljs-class .hljs-title,.hljs-params,.hljs-title.class_,.hljs-type{color:#5c2699}.hljs-attr{color:#836c28}.hljs-subst{color:#000}.hljs-formula{background-color:#eee;font-style:italic}.hljs-addition{background-color:#baeeba}.hljs-deletion{background-color:#ffc8bd}.hljs-selector-class,.hljs-selector-id{color:#9b703f}.hljs-doctag,.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/styles/highlights/xt256.min.css b/styles/highlights/xt256.min.css new file mode 100644 index 000000000..ef34f0c56 --- /dev/null +++ b/styles/highlights/xt256.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#eaeaea;background:#000}.hljs-subst{color:#eaeaea}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-type{color:#eaeaea}.hljs-params{color:#da0000}.hljs-literal,.hljs-name,.hljs-number{color:red;font-weight:bolder}.hljs-comment{color:#969896}.hljs-quote,.hljs-selector-id{color:#0ff}.hljs-template-variable,.hljs-title,.hljs-variable{color:#0ff;font-weight:700}.hljs-keyword,.hljs-selector-class,.hljs-symbol{color:#fff000}.hljs-bullet,.hljs-string{color:#0f0}.hljs-section,.hljs-tag{color:#000fff}.hljs-selector-tag{color:#000fff;font-weight:700}.hljs-attribute,.hljs-built_in,.hljs-link,.hljs-regexp{color:#f0f}.hljs-meta{color:#fff;font-weight:bolder} \ No newline at end of file diff --git a/styles/style.css b/styles/style.css new file mode 100644 index 000000000..4a2c57b8b --- /dev/null +++ b/styles/style.css @@ -0,0 +1,13095 @@ +@charset "UTF-8"; +/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +@import url("https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css"); +@import "https://fonts.googleapis.com/css?family=VT323"; +:root, +[data-bs-theme=light] { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-black: #000; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #e9ecef; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #6c757d; + --bs-gray-700: #495057; + --bs-gray-800: #343a40; + --bs-gray-900: #212529; + --bs-primary: #0d6efd; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #f8f9fa; + --bs-dark: #212529; + --bs-flixel-dark-blue: #3b43ff; + --bs-flixel-yellow: #ffbf37; + --bs-flixel-red: #ff2346; + --bs-flixel-green: #00b92b; + --bs-flixel-light-blue: #0bc8ff; + --bs-primary-rgb: 13, 110, 253; + --bs-secondary-rgb: 108, 117, 125; + --bs-success-rgb: 25, 135, 84; + --bs-info-rgb: 13, 202, 240; + --bs-warning-rgb: 255, 193, 7; + --bs-danger-rgb: 220, 53, 69; + --bs-light-rgb: 248, 249, 250; + --bs-dark-rgb: 33, 37, 41; + --bs-flixel-dark-blue-rgb: 59, 67, 255; + --bs-flixel-yellow-rgb: 255, 191, 55; + --bs-flixel-red-rgb: 255, 35, 70; + --bs-flixel-green-rgb: 0, 185, 43; + --bs-flixel-light-blue-rgb: 11, 200, 255; + --bs-primary-text-emphasis: #052c65; + --bs-secondary-text-emphasis: #2b2f32; + --bs-success-text-emphasis: #0a3622; + --bs-info-text-emphasis: #055160; + --bs-warning-text-emphasis: #664d03; + --bs-danger-text-emphasis: #58151c; + --bs-light-text-emphasis: #495057; + --bs-dark-text-emphasis: #495057; + --bs-primary-bg-subtle: #cfe2ff; + --bs-secondary-bg-subtle: #e2e3e5; + --bs-success-bg-subtle: #d1e7dd; + --bs-info-bg-subtle: #cff4fc; + --bs-warning-bg-subtle: #fff3cd; + --bs-danger-bg-subtle: #f8d7da; + --bs-light-bg-subtle: #fcfcfd; + --bs-dark-bg-subtle: #ced4da; + --bs-primary-border-subtle: #9ec5fe; + --bs-secondary-border-subtle: #c4c8cb; + --bs-success-border-subtle: #a3cfbb; + --bs-info-border-subtle: #9eeaf9; + --bs-warning-border-subtle: #ffe69c; + --bs-danger-border-subtle: #f1aeb5; + --bs-light-border-subtle: #e9ecef; + --bs-dark-border-subtle: #adb5bd; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: var(--bs-font-sans-serif); + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg: #fff; + --bs-body-bg-rgb: 255, 255, 255; + --bs-emphasis-color: #000; + --bs-emphasis-color-rgb: 0, 0, 0; + --bs-secondary-color: rgba(33, 37, 41, 0.75); + --bs-secondary-color-rgb: 33, 37, 41; + --bs-secondary-bg: #e9ecef; + --bs-secondary-bg-rgb: 233, 236, 239; + --bs-tertiary-color: rgba(33, 37, 41, 0.5); + --bs-tertiary-color-rgb: 33, 37, 41; + --bs-tertiary-bg: #f8f9fa; + --bs-tertiary-bg-rgb: 248, 249, 250; + --bs-heading-color: inherit; + --bs-link-color: #3b43ff; + --bs-link-color-rgb: 59, 67, 255; + --bs-link-decoration: underline; + --bs-link-hover-color: #0a58ca; + --bs-link-hover-color-rgb: 10, 88, 202; + --bs-code-color: #d63384; + --bs-highlight-color: #212529; + --bs-highlight-bg: #fff3cd; + --bs-border-width: 1px; + --bs-border-style: solid; + --bs-border-color: #dee2e6; + --bs-border-color-translucent: rgba(0, 0, 0, 0.175); + --bs-border-radius: 0.375rem; + --bs-border-radius-sm: 0.25rem; + --bs-border-radius-lg: 0.5rem; + --bs-border-radius-xl: 1rem; + --bs-border-radius-xxl: 2rem; + --bs-border-radius-2xl: var(--bs-border-radius-xxl); + --bs-border-radius-pill: 50rem; + --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); + --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175); + --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075); + --bs-focus-ring-width: 0.25rem; + --bs-focus-ring-opacity: 0.25; + --bs-focus-ring-color: rgba(13, 110, 253, 0.25); + --bs-form-valid-color: #198754; + --bs-form-valid-border-color: #198754; + --bs-form-invalid-color: #dc3545; + --bs-form-invalid-border-color: #dc3545; +} + +[data-bs-theme=dark] { + color-scheme: dark; + --bs-body-color: #dee2e6; + --bs-body-color-rgb: 222, 226, 230; + --bs-body-bg: #212529; + --bs-body-bg-rgb: 33, 37, 41; + --bs-emphasis-color: #fff; + --bs-emphasis-color-rgb: 255, 255, 255; + --bs-secondary-color: rgba(222, 226, 230, 0.75); + --bs-secondary-color-rgb: 222, 226, 230; + --bs-secondary-bg: #343a40; + --bs-secondary-bg-rgb: 52, 58, 64; + --bs-tertiary-color: rgba(222, 226, 230, 0.5); + --bs-tertiary-color-rgb: 222, 226, 230; + --bs-tertiary-bg: #2b3035; + --bs-tertiary-bg-rgb: 43, 48, 53; + --bs-primary-text-emphasis: #6ea8fe; + --bs-secondary-text-emphasis: #a7acb1; + --bs-success-text-emphasis: #75b798; + --bs-info-text-emphasis: #6edff6; + --bs-warning-text-emphasis: #ffda6a; + --bs-danger-text-emphasis: #ea868f; + --bs-light-text-emphasis: #f8f9fa; + --bs-dark-text-emphasis: #dee2e6; + --bs-primary-bg-subtle: #031633; + --bs-secondary-bg-subtle: #161719; + --bs-success-bg-subtle: #051b11; + --bs-info-bg-subtle: #032830; + --bs-warning-bg-subtle: #332701; + --bs-danger-bg-subtle: #2c0b0e; + --bs-light-bg-subtle: #343a40; + --bs-dark-bg-subtle: #1a1d20; + --bs-primary-border-subtle: #084298; + --bs-secondary-border-subtle: #41464b; + --bs-success-border-subtle: #0f5132; + --bs-info-border-subtle: #087990; + --bs-warning-border-subtle: #997404; + --bs-danger-border-subtle: #842029; + --bs-light-border-subtle: #495057; + --bs-dark-border-subtle: #343a40; + --bs-heading-color: inherit; + --bs-link-color: #0bc8ff; + --bs-link-hover-color: #8bb9fe; + --bs-link-color-rgb: 11, 200, 255; + --bs-link-hover-color-rgb: 139, 185, 254; + --bs-code-color: #e685b5; + --bs-highlight-color: #dee2e6; + --bs-highlight-bg: #664d03; + --bs-border-color: #495057; + --bs-border-color-translucent: rgba(255, 255, 255, 0.15); + --bs-form-valid-color: #75b798; + --bs-form-valid-border-color: #75b798; + --bs-form-invalid-color: #ea868f; + --bs-form-invalid-border-color: #ea868f; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +@media (prefers-reduced-motion: no-preference) { + :root { + scroll-behavior: smooth; + } +} + +body { + margin: 0; + font-family: var(--bs-body-font-family); + font-size: var(--bs-body-font-size); + font-weight: var(--bs-body-font-weight); + line-height: var(--bs-body-line-height); + color: var(--bs-body-color); + text-align: var(--bs-body-text-align); + background-color: var(--bs-body-bg); + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +hr { + margin: 1rem 0; + color: inherit; + border: 0; + border-top: var(--bs-border-width) solid; + opacity: 0.25; +} + +h6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; + color: var(--bs-heading-color); +} + +h1, .h1 { + font-size: calc(1.375rem + 1.5vw); +} +@media (min-width: 1200px) { + h1, .h1 { + font-size: 2.5rem; + } +} + +h2, .h2 { + font-size: calc(1.325rem + 0.9vw); +} +@media (min-width: 1200px) { + h2, .h2 { + font-size: 2rem; + } +} + +h3, .h3 { + font-size: calc(1.3rem + 0.6vw); +} +@media (min-width: 1200px) { + h3, .h3 { + font-size: 1.75rem; + } +} + +h4, .h4 { + font-size: calc(1.275rem + 0.3vw); +} +@media (min-width: 1200px) { + h4, .h4 { + font-size: 1.5rem; + } +} + +h5, .h5 { + font-size: 1.25rem; +} + +h6, .h6 { + font-size: 1rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title] { + text-decoration: underline dotted; + cursor: help; + text-decoration-skip-ink: none; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul { + padding-left: 2rem; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: 700; +} + +dd { + margin-bottom: 0.5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +b, +strong { + font-weight: bolder; +} + +small, .small { + font-size: 0.875em; +} + +mark, .mark { + padding: 0.1875em; + color: var(--bs-highlight-color); + background-color: var(--bs-highlight-bg); +} + +sub, +sup { + position: relative; + font-size: 0.75em; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1)); + text-decoration: underline; +} +a:hover { + --bs-link-color-rgb: var(--bs-link-hover-color-rgb); +} + +a:not([href]):not([class]), a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; +} + +pre, +code, +kbd, +samp { + font-family: var(--bs-font-monospace); + font-size: 1em; +} + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + font-size: 0.875em; +} +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +code { + font-size: 0.875em; + color: var(--bs-code-color); + word-wrap: break-word; +} +a > code { + color: inherit; +} + +kbd { + padding: 0.1875rem 0.375rem; + font-size: 0.875em; + color: var(--bs-body-bg); + background-color: var(--bs-body-color); + border-radius: 0.25rem; +} +kbd kbd { + padding: 0; + font-size: 1em; +} + +figure { + margin: 0 0 1rem; +} + +img, +svg { + vertical-align: middle; +} + +table { + caption-side: bottom; + border-collapse: collapse; +} + +caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--bs-secondary-color); + text-align: left; +} + +th { + text-align: inherit; + text-align: -webkit-match-parent; +} + +thead, +tbody, +tfoot, +tr, +td, +th { + border-color: inherit; + border-style: solid; + border-width: 0; +} + +label { + display: inline-block; +} + +button { + border-radius: 0; +} + +button:focus:not(:focus-visible) { + outline: 0; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +select { + text-transform: none; +} + +[role=button] { + cursor: pointer; +} + +select { + word-wrap: normal; +} +select:disabled { + opacity: 1; +} + +[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator { + display: none !important; +} + +button, +[type=button], +[type=reset], +[type=submit] { + -webkit-appearance: button; +} +button:not(:disabled), +[type=button]:not(:disabled), +[type=reset]:not(:disabled), +[type=submit]:not(:disabled) { + cursor: pointer; +} + +::-moz-focus-inner { + padding: 0; + border-style: none; +} + +textarea { + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + float: left; + width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: calc(1.275rem + 0.3vw); + line-height: inherit; +} +@media (min-width: 1200px) { + legend { + font-size: 1.5rem; + } +} +legend + * { + clear: left; +} + +::-webkit-datetime-edit-fields-wrapper, +::-webkit-datetime-edit-text, +::-webkit-datetime-edit-minute, +::-webkit-datetime-edit-hour-field, +::-webkit-datetime-edit-day-field, +::-webkit-datetime-edit-month-field, +::-webkit-datetime-edit-year-field { + padding: 0; +} + +::-webkit-inner-spin-button { + height: auto; +} + +[type=search] { + -webkit-appearance: textfield; + outline-offset: -2px; +} + +/* rtl:raw: +[type="tel"], +[type="url"], +[type="email"], +[type="number"] { + direction: ltr; +} +*/ +::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-color-swatch-wrapper { + padding: 0; +} + +::file-selector-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +iframe { + border: 0; +} + +summary { + display: list-item; + cursor: pointer; +} + +progress { + vertical-align: baseline; +} + +[hidden] { + display: none !important; +} + +.lead { + font-size: 1.25rem; + font-weight: 300; +} + +.display-1 { + font-size: calc(1.625rem + 4.5vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-1 { + font-size: 5rem; + } +} + +.display-2 { + font-size: calc(1.575rem + 3.9vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-2 { + font-size: 4.5rem; + } +} + +.display-3 { + font-size: calc(1.525rem + 3.3vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-3 { + font-size: 4rem; + } +} + +.display-4 { + font-size: calc(1.475rem + 2.7vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-4 { + font-size: 3.5rem; + } +} + +.display-5 { + font-size: calc(1.425rem + 2.1vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-5 { + font-size: 3rem; + } +} + +.display-6 { + font-size: calc(1.375rem + 1.5vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-6 { + font-size: 2.5rem; + } +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline-item { + display: inline-block; +} +.list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} + +.initialism { + font-size: 0.875em; + text-transform: uppercase; +} + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; +} +.blockquote > :last-child { + margin-bottom: 0; +} + +.blockquote-footer { + margin-top: -1rem; + margin-bottom: 1rem; + font-size: 0.875em; + color: #6c757d; +} +.blockquote-footer::before { + content: "— "; +} + +.img-fluid { + max-width: 100%; + height: auto; +} + +.img-thumbnail { + padding: 0.25rem; + background-color: var(--bs-body-bg); + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + max-width: 100%; + height: auto; +} + +.figure { + display: inline-block; +} + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.figure-caption { + font-size: 0.875em; + color: var(--bs-secondary-color); +} + +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container-sm, .container { + max-width: 540px; + } +} +@media (min-width: 768px) { + .container-md, .container-sm, .container { + max-width: 720px; + } +} +@media (min-width: 992px) { + .container-lg, .container-md, .container-sm, .container { + max-width: 960px; + } +} +@media (min-width: 1200px) { + .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1140px; + } +} +@media (min-width: 1400px) { + .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1320px; + } +} +:root { + --bs-breakpoint-xs: 0; + --bs-breakpoint-sm: 576px; + --bs-breakpoint-md: 768px; + --bs-breakpoint-lg: 992px; + --bs-breakpoint-xl: 1200px; + --bs-breakpoint-xxl: 1400px; +} + +.row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(-1 * var(--bs-gutter-y)); + margin-right: calc(-0.5 * var(--bs-gutter-x)); + margin-left: calc(-0.5 * var(--bs-gutter-x)); +} +.row > * { + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-top: var(--bs-gutter-y); +} + +.col { + flex: 1 0 0%; +} + +.row-cols-auto > * { + flex: 0 0 auto; + width: auto; +} + +.row-cols-1 > * { + flex: 0 0 auto; + width: 100%; +} + +.row-cols-2 > * { + flex: 0 0 auto; + width: 50%; +} + +.row-cols-3 > * { + flex: 0 0 auto; + width: 33.33333333%; +} + +.row-cols-4 > * { + flex: 0 0 auto; + width: 25%; +} + +.row-cols-5 > * { + flex: 0 0 auto; + width: 20%; +} + +.row-cols-6 > * { + flex: 0 0 auto; + width: 16.66666667%; +} + +.col-auto { + flex: 0 0 auto; + width: auto; +} + +.col-1 { + flex: 0 0 auto; + width: 8.33333333%; +} + +.col-2 { + flex: 0 0 auto; + width: 16.66666667%; +} + +.col-3 { + flex: 0 0 auto; + width: 25%; +} + +.col-4 { + flex: 0 0 auto; + width: 33.33333333%; +} + +.col-5 { + flex: 0 0 auto; + width: 41.66666667%; +} + +.col-6 { + flex: 0 0 auto; + width: 50%; +} + +.col-7 { + flex: 0 0 auto; + width: 58.33333333%; +} + +.col-8 { + flex: 0 0 auto; + width: 66.66666667%; +} + +.col-9 { + flex: 0 0 auto; + width: 75%; +} + +.col-10 { + flex: 0 0 auto; + width: 83.33333333%; +} + +.col-11 { + flex: 0 0 auto; + width: 91.66666667%; +} + +.col-12 { + flex: 0 0 auto; + width: 100%; +} + +.offset-1 { + margin-left: 8.33333333%; +} + +.offset-2 { + margin-left: 16.66666667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.33333333%; +} + +.offset-5 { + margin-left: 41.66666667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.33333333%; +} + +.offset-8 { + margin-left: 66.66666667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.33333333%; +} + +.offset-11 { + margin-left: 91.66666667%; +} + +.g-0, +.gx-0 { + --bs-gutter-x: 0; +} + +.g-0, +.gy-0 { + --bs-gutter-y: 0; +} + +.g-1, +.gx-1 { + --bs-gutter-x: 0.25rem; +} + +.g-1, +.gy-1 { + --bs-gutter-y: 0.25rem; +} + +.g-2, +.gx-2 { + --bs-gutter-x: 0.5rem; +} + +.g-2, +.gy-2 { + --bs-gutter-y: 0.5rem; +} + +.g-3, +.gx-3 { + --bs-gutter-x: 1rem; +} + +.g-3, +.gy-3 { + --bs-gutter-y: 1rem; +} + +.g-4, +.gx-4 { + --bs-gutter-x: 1.5rem; +} + +.g-4, +.gy-4 { + --bs-gutter-y: 1.5rem; +} + +.g-5, +.gx-5 { + --bs-gutter-x: 3rem; +} + +.g-5, +.gy-5 { + --bs-gutter-y: 3rem; +} + +@media (min-width: 576px) { + .col-sm { + flex: 1 0 0%; + } + .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.33333333%; + } + .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-sm-auto { + flex: 0 0 auto; + width: auto; + } + .col-sm-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-sm-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-sm-3 { + flex: 0 0 auto; + width: 25%; + } + .col-sm-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-sm-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-sm-6 { + flex: 0 0 auto; + width: 50%; + } + .col-sm-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-sm-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-sm-9 { + flex: 0 0 auto; + width: 75%; + } + .col-sm-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-sm-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-sm-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-sm-0 { + margin-left: 0; + } + .offset-sm-1 { + margin-left: 8.33333333%; + } + .offset-sm-2 { + margin-left: 16.66666667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.33333333%; + } + .offset-sm-5 { + margin-left: 41.66666667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.33333333%; + } + .offset-sm-8 { + margin-left: 66.66666667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.33333333%; + } + .offset-sm-11 { + margin-left: 91.66666667%; + } + .g-sm-0, + .gx-sm-0 { + --bs-gutter-x: 0; + } + .g-sm-0, + .gy-sm-0 { + --bs-gutter-y: 0; + } + .g-sm-1, + .gx-sm-1 { + --bs-gutter-x: 0.25rem; + } + .g-sm-1, + .gy-sm-1 { + --bs-gutter-y: 0.25rem; + } + .g-sm-2, + .gx-sm-2 { + --bs-gutter-x: 0.5rem; + } + .g-sm-2, + .gy-sm-2 { + --bs-gutter-y: 0.5rem; + } + .g-sm-3, + .gx-sm-3 { + --bs-gutter-x: 1rem; + } + .g-sm-3, + .gy-sm-3 { + --bs-gutter-y: 1rem; + } + .g-sm-4, + .gx-sm-4 { + --bs-gutter-x: 1.5rem; + } + .g-sm-4, + .gy-sm-4 { + --bs-gutter-y: 1.5rem; + } + .g-sm-5, + .gx-sm-5 { + --bs-gutter-x: 3rem; + } + .g-sm-5, + .gy-sm-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 768px) { + .col-md { + flex: 1 0 0%; + } + .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.33333333%; + } + .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-md-auto { + flex: 0 0 auto; + width: auto; + } + .col-md-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-md-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-md-3 { + flex: 0 0 auto; + width: 25%; + } + .col-md-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-md-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-md-6 { + flex: 0 0 auto; + width: 50%; + } + .col-md-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-md-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-md-9 { + flex: 0 0 auto; + width: 75%; + } + .col-md-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-md-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-md-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-md-0 { + margin-left: 0; + } + .offset-md-1 { + margin-left: 8.33333333%; + } + .offset-md-2 { + margin-left: 16.66666667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.33333333%; + } + .offset-md-5 { + margin-left: 41.66666667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.33333333%; + } + .offset-md-8 { + margin-left: 66.66666667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.33333333%; + } + .offset-md-11 { + margin-left: 91.66666667%; + } + .g-md-0, + .gx-md-0 { + --bs-gutter-x: 0; + } + .g-md-0, + .gy-md-0 { + --bs-gutter-y: 0; + } + .g-md-1, + .gx-md-1 { + --bs-gutter-x: 0.25rem; + } + .g-md-1, + .gy-md-1 { + --bs-gutter-y: 0.25rem; + } + .g-md-2, + .gx-md-2 { + --bs-gutter-x: 0.5rem; + } + .g-md-2, + .gy-md-2 { + --bs-gutter-y: 0.5rem; + } + .g-md-3, + .gx-md-3 { + --bs-gutter-x: 1rem; + } + .g-md-3, + .gy-md-3 { + --bs-gutter-y: 1rem; + } + .g-md-4, + .gx-md-4 { + --bs-gutter-x: 1.5rem; + } + .g-md-4, + .gy-md-4 { + --bs-gutter-y: 1.5rem; + } + .g-md-5, + .gx-md-5 { + --bs-gutter-x: 3rem; + } + .g-md-5, + .gy-md-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 992px) { + .col-lg { + flex: 1 0 0%; + } + .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.33333333%; + } + .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-lg-auto { + flex: 0 0 auto; + width: auto; + } + .col-lg-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-lg-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-lg-3 { + flex: 0 0 auto; + width: 25%; + } + .col-lg-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-lg-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-lg-6 { + flex: 0 0 auto; + width: 50%; + } + .col-lg-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-lg-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-lg-9 { + flex: 0 0 auto; + width: 75%; + } + .col-lg-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-lg-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-lg-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-lg-0 { + margin-left: 0; + } + .offset-lg-1 { + margin-left: 8.33333333%; + } + .offset-lg-2 { + margin-left: 16.66666667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.33333333%; + } + .offset-lg-5 { + margin-left: 41.66666667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.33333333%; + } + .offset-lg-8 { + margin-left: 66.66666667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.33333333%; + } + .offset-lg-11 { + margin-left: 91.66666667%; + } + .g-lg-0, + .gx-lg-0 { + --bs-gutter-x: 0; + } + .g-lg-0, + .gy-lg-0 { + --bs-gutter-y: 0; + } + .g-lg-1, + .gx-lg-1 { + --bs-gutter-x: 0.25rem; + } + .g-lg-1, + .gy-lg-1 { + --bs-gutter-y: 0.25rem; + } + .g-lg-2, + .gx-lg-2 { + --bs-gutter-x: 0.5rem; + } + .g-lg-2, + .gy-lg-2 { + --bs-gutter-y: 0.5rem; + } + .g-lg-3, + .gx-lg-3 { + --bs-gutter-x: 1rem; + } + .g-lg-3, + .gy-lg-3 { + --bs-gutter-y: 1rem; + } + .g-lg-4, + .gx-lg-4 { + --bs-gutter-x: 1.5rem; + } + .g-lg-4, + .gy-lg-4 { + --bs-gutter-y: 1.5rem; + } + .g-lg-5, + .gx-lg-5 { + --bs-gutter-x: 3rem; + } + .g-lg-5, + .gy-lg-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1200px) { + .col-xl { + flex: 1 0 0%; + } + .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.33333333%; + } + .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-xl-auto { + flex: 0 0 auto; + width: auto; + } + .col-xl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-xl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-xl-3 { + flex: 0 0 auto; + width: 25%; + } + .col-xl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-xl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-xl-6 { + flex: 0 0 auto; + width: 50%; + } + .col-xl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-xl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-xl-9 { + flex: 0 0 auto; + width: 75%; + } + .col-xl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-xl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-xl-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-xl-0 { + margin-left: 0; + } + .offset-xl-1 { + margin-left: 8.33333333%; + } + .offset-xl-2 { + margin-left: 16.66666667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.33333333%; + } + .offset-xl-5 { + margin-left: 41.66666667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.33333333%; + } + .offset-xl-8 { + margin-left: 66.66666667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.33333333%; + } + .offset-xl-11 { + margin-left: 91.66666667%; + } + .g-xl-0, + .gx-xl-0 { + --bs-gutter-x: 0; + } + .g-xl-0, + .gy-xl-0 { + --bs-gutter-y: 0; + } + .g-xl-1, + .gx-xl-1 { + --bs-gutter-x: 0.25rem; + } + .g-xl-1, + .gy-xl-1 { + --bs-gutter-y: 0.25rem; + } + .g-xl-2, + .gx-xl-2 { + --bs-gutter-x: 0.5rem; + } + .g-xl-2, + .gy-xl-2 { + --bs-gutter-y: 0.5rem; + } + .g-xl-3, + .gx-xl-3 { + --bs-gutter-x: 1rem; + } + .g-xl-3, + .gy-xl-3 { + --bs-gutter-y: 1rem; + } + .g-xl-4, + .gx-xl-4 { + --bs-gutter-x: 1.5rem; + } + .g-xl-4, + .gy-xl-4 { + --bs-gutter-y: 1.5rem; + } + .g-xl-5, + .gx-xl-5 { + --bs-gutter-x: 3rem; + } + .g-xl-5, + .gy-xl-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1400px) { + .col-xxl { + flex: 1 0 0%; + } + .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.33333333%; + } + .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-xxl-auto { + flex: 0 0 auto; + width: auto; + } + .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-xxl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-xxl-3 { + flex: 0 0 auto; + width: 25%; + } + .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-xxl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-xxl-6 { + flex: 0 0 auto; + width: 50%; + } + .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-xxl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-xxl-9 { + flex: 0 0 auto; + width: 75%; + } + .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-xxl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-xxl-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-xxl-0 { + margin-left: 0; + } + .offset-xxl-1 { + margin-left: 8.33333333%; + } + .offset-xxl-2 { + margin-left: 16.66666667%; + } + .offset-xxl-3 { + margin-left: 25%; + } + .offset-xxl-4 { + margin-left: 33.33333333%; + } + .offset-xxl-5 { + margin-left: 41.66666667%; + } + .offset-xxl-6 { + margin-left: 50%; + } + .offset-xxl-7 { + margin-left: 58.33333333%; + } + .offset-xxl-8 { + margin-left: 66.66666667%; + } + .offset-xxl-9 { + margin-left: 75%; + } + .offset-xxl-10 { + margin-left: 83.33333333%; + } + .offset-xxl-11 { + margin-left: 91.66666667%; + } + .g-xxl-0, + .gx-xxl-0 { + --bs-gutter-x: 0; + } + .g-xxl-0, + .gy-xxl-0 { + --bs-gutter-y: 0; + } + .g-xxl-1, + .gx-xxl-1 { + --bs-gutter-x: 0.25rem; + } + .g-xxl-1, + .gy-xxl-1 { + --bs-gutter-y: 0.25rem; + } + .g-xxl-2, + .gx-xxl-2 { + --bs-gutter-x: 0.5rem; + } + .g-xxl-2, + .gy-xxl-2 { + --bs-gutter-y: 0.5rem; + } + .g-xxl-3, + .gx-xxl-3 { + --bs-gutter-x: 1rem; + } + .g-xxl-3, + .gy-xxl-3 { + --bs-gutter-y: 1rem; + } + .g-xxl-4, + .gx-xxl-4 { + --bs-gutter-x: 1.5rem; + } + .g-xxl-4, + .gy-xxl-4 { + --bs-gutter-y: 1.5rem; + } + .g-xxl-5, + .gx-xxl-5 { + --bs-gutter-x: 3rem; + } + .g-xxl-5, + .gy-xxl-5 { + --bs-gutter-y: 3rem; + } +} +.table { + --bs-table-color-type: initial; + --bs-table-bg-type: initial; + --bs-table-color-state: initial; + --bs-table-bg-state: initial; + --bs-table-color: var(--bs-emphasis-color); + --bs-table-bg: var(--bs-body-bg); + --bs-table-border-color: var(--bs-border-color); + --bs-table-accent-bg: transparent; + --bs-table-striped-color: var(--bs-emphasis-color); + --bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05); + --bs-table-active-color: var(--bs-emphasis-color); + --bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1); + --bs-table-hover-color: var(--bs-emphasis-color); + --bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075); + width: 100%; + margin-bottom: 1rem; + vertical-align: top; + border-color: var(--bs-table-border-color); +} +.table > :not(caption) > * > * { + padding: 0.5rem 0.5rem; + color: var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color))); + background-color: var(--bs-table-bg); + border-bottom-width: var(--bs-border-width); + box-shadow: inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg))); +} +.table > tbody { + vertical-align: inherit; +} +.table > thead { + vertical-align: bottom; +} + +.table-group-divider { + border-top: calc(var(--bs-border-width) * 2) solid currentcolor; +} + +.caption-top { + caption-side: top; +} + +.table-sm > :not(caption) > * > * { + padding: 0.25rem 0.25rem; +} + +.table-bordered > :not(caption) > * { + border-width: var(--bs-border-width) 0; +} +.table-bordered > :not(caption) > * > * { + border-width: 0 var(--bs-border-width); +} + +.table-borderless > :not(caption) > * > * { + border-bottom-width: 0; +} +.table-borderless > :not(:first-child) { + border-top-width: 0; +} + +.table-striped > tbody > tr:nth-of-type(odd) > * { + --bs-table-color-type: var(--bs-table-striped-color); + --bs-table-bg-type: var(--bs-table-striped-bg); +} + +.table-striped-columns > :not(caption) > tr > :nth-child(even) { + --bs-table-color-type: var(--bs-table-striped-color); + --bs-table-bg-type: var(--bs-table-striped-bg); +} + +.table-active { + --bs-table-color-state: var(--bs-table-active-color); + --bs-table-bg-state: var(--bs-table-active-bg); +} + +.table-hover > tbody > tr:hover > * { + --bs-table-color-state: var(--bs-table-hover-color); + --bs-table-bg-state: var(--bs-table-hover-bg); +} + +.table-primary { + --bs-table-color: #000; + --bs-table-bg: #cfe2ff; + --bs-table-border-color: #a6b5cc; + --bs-table-striped-bg: #c5d7f2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bacbe6; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfd1ec; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-secondary { + --bs-table-color: #000; + --bs-table-bg: #e2e3e5; + --bs-table-border-color: #b5b6b7; + --bs-table-striped-bg: #d7d8da; + --bs-table-striped-color: #000; + --bs-table-active-bg: #cbccce; + --bs-table-active-color: #000; + --bs-table-hover-bg: #d1d2d4; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-success { + --bs-table-color: #000; + --bs-table-bg: #d1e7dd; + --bs-table-border-color: #a7b9b1; + --bs-table-striped-bg: #c7dbd2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bcd0c7; + --bs-table-active-color: #000; + --bs-table-hover-bg: #c1d6cc; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-info { + --bs-table-color: #000; + --bs-table-bg: #cff4fc; + --bs-table-border-color: #a6c3ca; + --bs-table-striped-bg: #c5e8ef; + --bs-table-striped-color: #000; + --bs-table-active-bg: #badce3; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfe2e9; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-warning { + --bs-table-color: #000; + --bs-table-bg: #fff3cd; + --bs-table-border-color: #ccc2a4; + --bs-table-striped-bg: #f2e7c3; + --bs-table-striped-color: #000; + --bs-table-active-bg: #e6dbb9; + --bs-table-active-color: #000; + --bs-table-hover-bg: #ece1be; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-danger { + --bs-table-color: #000; + --bs-table-bg: #f8d7da; + --bs-table-border-color: #c6acae; + --bs-table-striped-bg: #eccccf; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfc2c4; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5c7ca; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-light { + --bs-table-color: #000; + --bs-table-bg: #f8f9fa; + --bs-table-border-color: #c6c7c8; + --bs-table-striped-bg: #ecedee; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfe0e1; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5e6e7; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-dark { + --bs-table-color: #fff; + --bs-table-bg: #212529; + --bs-table-border-color: #4d5154; + --bs-table-striped-bg: #2c3034; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #373b3e; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #323539; + --bs-table-hover-color: #fff; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-responsive { + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} + +@media (max-width: 575.98px) { + .table-responsive-sm { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 767.98px) { + .table-responsive-md { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 991.98px) { + .table-responsive-lg { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 1199.98px) { + .table-responsive-xl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 1399.98px) { + .table-responsive-xxl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +.form-label { + margin-bottom: 0.5rem; +} + +.col-form-label { + padding-top: calc(0.375rem + var(--bs-border-width)); + padding-bottom: calc(0.375rem + var(--bs-border-width)); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; +} + +.col-form-label-lg { + padding-top: calc(0.5rem + var(--bs-border-width)); + padding-bottom: calc(0.5rem + var(--bs-border-width)); + font-size: 1.25rem; +} + +.col-form-label-sm { + padding-top: calc(0.25rem + var(--bs-border-width)); + padding-bottom: calc(0.25rem + var(--bs-border-width)); + font-size: 0.875rem; +} + +.form-text { + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--bs-secondary-color); +} + +.form-control { + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--bs-body-color); + appearance: none; + background-color: var(--bs-body-bg); + background-clip: padding-box; + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-control { + transition: none; + } +} +.form-control[type=file] { + overflow: hidden; +} +.form-control[type=file]:not(:disabled):not([readonly]) { + cursor: pointer; +} +.form-control:focus { + color: var(--bs-body-color); + background-color: var(--bs-body-bg); + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-control::-webkit-date-and-time-value { + min-width: 85px; + height: 1.5em; + margin: 0; +} +.form-control::-webkit-datetime-edit { + display: block; + padding: 0; +} +.form-control::placeholder { + color: var(--bs-secondary-color); + opacity: 1; +} +.form-control:disabled { + background-color: var(--bs-secondary-bg); + opacity: 1; +} +.form-control::file-selector-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + margin-inline-end: 0.75rem; + color: var(--bs-body-color); + background-color: var(--bs-tertiary-bg); + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: var(--bs-border-width); + border-radius: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-control::file-selector-button { + transition: none; + } +} +.form-control:hover:not(:disabled):not([readonly])::file-selector-button { + background-color: var(--bs-secondary-bg); +} + +.form-control-plaintext { + display: block; + width: 100%; + padding: 0.375rem 0; + margin-bottom: 0; + line-height: 1.5; + color: var(--bs-body-color); + background-color: transparent; + border: solid transparent; + border-width: var(--bs-border-width) 0; +} +.form-control-plaintext:focus { + outline: 0; +} +.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; +} + +.form-control-sm { + min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); +} +.form-control-sm::file-selector-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + margin-inline-end: 0.5rem; +} + +.form-control-lg { + min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: var(--bs-border-radius-lg); +} +.form-control-lg::file-selector-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + margin-inline-end: 1rem; +} + +textarea.form-control { + min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2)); +} +textarea.form-control-sm { + min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); +} +textarea.form-control-lg { + min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); +} + +.form-control-color { + width: 3rem; + height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2)); + padding: 0.375rem; +} +.form-control-color:not(:disabled):not([readonly]) { + cursor: pointer; +} +.form-control-color::-moz-color-swatch { + border: 0 !important; + border-radius: var(--bs-border-radius); +} +.form-control-color::-webkit-color-swatch { + border: 0 !important; + border-radius: var(--bs-border-radius); +} +.form-control-color.form-control-sm { + height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); +} +.form-control-color.form-control-lg { + height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); +} + +.form-select { + --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); + display: block; + width: 100%; + padding: 0.375rem 2.25rem 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--bs-body-color); + appearance: none; + background-color: var(--bs-body-bg); + background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none); + background-repeat: no-repeat; + background-position: right 0.75rem center; + background-size: 16px 12px; + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-select { + transition: none; + } +} +.form-select:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-select[multiple], .form-select[size]:not([size="1"]) { + padding-right: 0.75rem; + background-image: none; +} +.form-select:disabled { + background-color: var(--bs-secondary-bg); +} +.form-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 var(--bs-body-color); +} + +.form-select-sm { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); +} + +.form-select-lg { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; + border-radius: var(--bs-border-radius-lg); +} + +[data-bs-theme=dark] .form-select { + --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); +} + +.form-check { + display: block; + min-height: 1.5rem; + padding-left: 1.5em; + margin-bottom: 0.125rem; +} +.form-check .form-check-input { + float: left; + margin-left: -1.5em; +} + +.form-check-reverse { + padding-right: 1.5em; + padding-left: 0; + text-align: right; +} +.form-check-reverse .form-check-input { + float: right; + margin-right: -1.5em; + margin-left: 0; +} + +.form-check-input { + --bs-form-check-bg: var(--bs-body-bg); + flex-shrink: 0; + width: 1em; + height: 1em; + margin-top: 0.25em; + vertical-align: top; + appearance: none; + background-color: var(--bs-form-check-bg); + background-image: var(--bs-form-check-bg-image); + background-repeat: no-repeat; + background-position: center; + background-size: contain; + border: var(--bs-border-width) solid var(--bs-border-color); + print-color-adjust: exact; +} +.form-check-input[type=checkbox] { + border-radius: 0.25em; +} +.form-check-input[type=radio] { + border-radius: 50%; +} +.form-check-input:active { + filter: brightness(90%); +} +.form-check-input:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-check-input:checked { + background-color: #0d6efd; + border-color: #0d6efd; +} +.form-check-input:checked[type=checkbox] { + --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e"); +} +.form-check-input:checked[type=radio] { + --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); +} +.form-check-input[type=checkbox]:indeterminate { + background-color: #0d6efd; + border-color: #0d6efd; + --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); +} +.form-check-input:disabled { + pointer-events: none; + filter: none; + opacity: 0.5; +} +.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label { + cursor: default; + opacity: 0.5; +} + +.form-switch { + padding-left: 2.5em; +} +.form-switch .form-check-input { + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); + width: 2em; + margin-left: -2.5em; + background-image: var(--bs-form-switch-bg); + background-position: left center; + border-radius: 2em; + transition: background-position 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-switch .form-check-input { + transition: none; + } +} +.form-switch .form-check-input:focus { + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e"); +} +.form-switch .form-check-input:checked { + background-position: right center; + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); +} +.form-switch.form-check-reverse { + padding-right: 2.5em; + padding-left: 0; +} +.form-switch.form-check-reverse .form-check-input { + margin-right: -2.5em; + margin-left: 0; +} + +.form-check-inline { + display: inline-block; + margin-right: 1rem; +} + +.btn-check { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.btn-check[disabled] + .btn, .btn-check:disabled + .btn { + pointer-events: none; + filter: none; + opacity: 0.65; +} + +[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus) { + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e"); +} + +.form-range { + width: 100%; + height: 1.5rem; + padding: 0; + appearance: none; + background-color: transparent; +} +.form-range:focus { + outline: 0; +} +.form-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-range::-moz-focus-outer { + border: 0; +} +.form-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + appearance: none; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-range::-webkit-slider-thumb { + transition: none; + } +} +.form-range::-webkit-slider-thumb:active { + background-color: #b6d4fe; +} +.form-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: var(--bs-secondary-bg); + border-color: transparent; + border-radius: 1rem; +} +.form-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + appearance: none; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-range::-moz-range-thumb { + transition: none; + } +} +.form-range::-moz-range-thumb:active { + background-color: #b6d4fe; +} +.form-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: var(--bs-secondary-bg); + border-color: transparent; + border-radius: 1rem; +} +.form-range:disabled { + pointer-events: none; +} +.form-range:disabled::-webkit-slider-thumb { + background-color: var(--bs-secondary-color); +} +.form-range:disabled::-moz-range-thumb { + background-color: var(--bs-secondary-color); +} + +.form-floating { + position: relative; +} +.form-floating > .form-control, +.form-floating > .form-control-plaintext, +.form-floating > .form-select { + height: calc(3.5rem + calc(var(--bs-border-width) * 2)); + min-height: calc(3.5rem + calc(var(--bs-border-width) * 2)); + line-height: 1.25; +} +.form-floating > label { + position: absolute; + top: 0; + left: 0; + z-index: 2; + height: 100%; + padding: 1rem 0.75rem; + overflow: hidden; + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + pointer-events: none; + border: var(--bs-border-width) solid transparent; + transform-origin: 0 0; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-floating > label { + transition: none; + } +} +.form-floating > .form-control, +.form-floating > .form-control-plaintext { + padding: 1rem 0.75rem; +} +.form-floating > .form-control::placeholder, +.form-floating > .form-control-plaintext::placeholder { + color: transparent; +} +.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown), +.form-floating > .form-control-plaintext:focus, +.form-floating > .form-control-plaintext:not(:placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:-webkit-autofill, +.form-floating > .form-control-plaintext:-webkit-autofill { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-select { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:focus ~ label, +.form-floating > .form-control:not(:placeholder-shown) ~ label, +.form-floating > .form-control-plaintext ~ label, +.form-floating > .form-select ~ label { + color: rgba(var(--bs-body-color-rgb), 0.65); + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.form-floating > .form-control:focus ~ label::after, +.form-floating > .form-control:not(:placeholder-shown) ~ label::after, +.form-floating > .form-control-plaintext ~ label::after, +.form-floating > .form-select ~ label::after { + position: absolute; + inset: 1rem 0.375rem; + z-index: -1; + height: 1.5em; + content: ""; + background-color: var(--bs-body-bg); + border-radius: var(--bs-border-radius); +} +.form-floating > .form-control:-webkit-autofill ~ label { + color: rgba(var(--bs-body-color-rgb), 0.65); + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.form-floating > .form-control-plaintext ~ label { + border-width: var(--bs-border-width) 0; +} +.form-floating > :disabled ~ label, +.form-floating > .form-control:disabled ~ label { + color: #6c757d; +} +.form-floating > :disabled ~ label::after, +.form-floating > .form-control:disabled ~ label::after { + background-color: var(--bs-secondary-bg); +} + +.input-group { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; +} +.input-group > .form-control, +.input-group > .form-select, +.input-group > .form-floating { + position: relative; + flex: 1 1 auto; + width: 1%; + min-width: 0; +} +.input-group > .form-control:focus, +.input-group > .form-select:focus, +.input-group > .form-floating:focus-within { + z-index: 5; +} +.input-group .btn { + position: relative; + z-index: 2; +} +.input-group .btn:focus { + z-index: 5; +} + +.input-group-text { + display: flex; + align-items: center; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--bs-body-color); + text-align: center; + white-space: nowrap; + background-color: var(--bs-tertiary-bg); + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); +} + +.input-group-lg > .form-control, +.input-group-lg > .form-select, +.input-group-lg > .input-group-text, +.input-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: var(--bs-border-radius-lg); +} + +.input-group-sm > .form-control, +.input-group-sm > .form-select, +.input-group-sm > .input-group-text, +.input-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); +} + +.input-group-lg > .form-select, +.input-group-sm > .form-select { + padding-right: 3rem; +} + +.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), +.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3), +.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control, +.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), +.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4), +.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control, +.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { + margin-left: calc(var(--bs-border-width) * -1); + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group > .form-floating:not(:first-child) > .form-control, +.input-group > .form-floating:not(:first-child) > .form-select { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--bs-form-valid-color); +} + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: var(--bs-success); + border-radius: var(--bs-border-radius); +} + +.was-validated :valid ~ .valid-feedback, +.was-validated :valid ~ .valid-tooltip, +.is-valid ~ .valid-feedback, +.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .form-control:valid, .form-control.is-valid { + border-color: var(--bs-form-valid-border-color); + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-control:valid:focus, .form-control.is-valid:focus { + border-color: var(--bs-form-valid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); +} + +.was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .form-select:valid, .form-select.is-valid { + border-color: var(--bs-form-valid-border-color); +} +.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] { + --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + padding-right: 4.125rem; + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-select:valid:focus, .form-select.is-valid:focus { + border-color: var(--bs-form-valid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); +} + +.was-validated .form-control-color:valid, .form-control-color.is-valid { + width: calc(3rem + calc(1.5em + 0.75rem)); +} + +.was-validated .form-check-input:valid, .form-check-input.is-valid { + border-color: var(--bs-form-valid-border-color); +} +.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked { + background-color: var(--bs-form-valid-color); +} +.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus { + box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); +} +.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: var(--bs-form-valid-color); +} + +.form-check-inline .form-check-input ~ .valid-feedback { + margin-left: 0.5em; +} + +.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid, +.was-validated .input-group > .form-select:not(:focus):valid, +.input-group > .form-select:not(:focus).is-valid, +.was-validated .input-group > .form-floating:not(:focus-within):valid, +.input-group > .form-floating:not(:focus-within).is-valid { + z-index: 3; +} + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--bs-form-invalid-color); +} + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: var(--bs-danger); + border-radius: var(--bs-border-radius); +} + +.was-validated :invalid ~ .invalid-feedback, +.was-validated :invalid ~ .invalid-tooltip, +.is-invalid ~ .invalid-feedback, +.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .form-control:invalid, .form-control.is-invalid { + border-color: var(--bs-form-invalid-border-color); + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { + border-color: var(--bs-form-invalid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); +} + +.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .form-select:invalid, .form-select.is-invalid { + border-color: var(--bs-form-invalid-border-color); +} +.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"] { + --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + padding-right: 4.125rem; + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus { + border-color: var(--bs-form-invalid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); +} + +.was-validated .form-control-color:invalid, .form-control-color.is-invalid { + width: calc(3rem + calc(1.5em + 0.75rem)); +} + +.was-validated .form-check-input:invalid, .form-check-input.is-invalid { + border-color: var(--bs-form-invalid-border-color); +} +.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked { + background-color: var(--bs-form-invalid-color); +} +.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus { + box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); +} +.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: var(--bs-form-invalid-color); +} + +.form-check-inline .form-check-input ~ .invalid-feedback { + margin-left: 0.5em; +} + +.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid, +.was-validated .input-group > .form-select:not(:focus):invalid, +.input-group > .form-select:not(:focus).is-invalid, +.was-validated .input-group > .form-floating:not(:focus-within):invalid, +.input-group > .form-floating:not(:focus-within).is-invalid { + z-index: 4; +} + +.btn { + --bs-btn-padding-x: 0.75rem; + --bs-btn-padding-y: 0.375rem; + --bs-btn-font-family: ; + --bs-btn-font-size: 1rem; + --bs-btn-font-weight: 400; + --bs-btn-line-height: 1.5; + --bs-btn-color: var(--bs-body-color); + --bs-btn-bg: transparent; + --bs-btn-border-width: var(--bs-border-width); + --bs-btn-border-color: transparent; + --bs-btn-border-radius: var(--bs-border-radius); + --bs-btn-hover-border-color: transparent; + --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + --bs-btn-disabled-opacity: 0.65; + --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5); + display: inline-block; + padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x); + font-family: var(--bs-btn-font-family); + font-size: var(--bs-btn-font-size); + font-weight: var(--bs-btn-font-weight); + line-height: var(--bs-btn-line-height); + color: var(--bs-btn-color); + text-align: center; + text-decoration: none; + vertical-align: middle; + cursor: pointer; + user-select: none; + border: var(--bs-btn-border-width) solid var(--bs-btn-border-color); + border-radius: var(--bs-btn-border-radius); + background-color: var(--bs-btn-bg); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .btn { + transition: none; + } +} +.btn:hover { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); +} +.btn-check + .btn:hover { + color: var(--bs-btn-color); + background-color: var(--bs-btn-bg); + border-color: var(--bs-btn-border-color); +} +.btn:focus-visible { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); +} +.btn-check:focus-visible + .btn { + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); +} +.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show { + color: var(--bs-btn-active-color); + background-color: var(--bs-btn-active-bg); + border-color: var(--bs-btn-active-border-color); +} +.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible { + box-shadow: var(--bs-btn-focus-box-shadow); +} +.btn-check:checked:focus-visible + .btn { + box-shadow: var(--bs-btn-focus-box-shadow); +} +.btn:disabled, .btn.disabled, fieldset:disabled .btn { + color: var(--bs-btn-disabled-color); + pointer-events: none; + background-color: var(--bs-btn-disabled-bg); + border-color: var(--bs-btn-disabled-border-color); + opacity: var(--bs-btn-disabled-opacity); +} + +.btn-primary { + --bs-btn-color: #fff; + --bs-btn-bg: #0d6efd; + --bs-btn-border-color: #0d6efd; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0b5ed7; + --bs-btn-hover-border-color: #0a58ca; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #0a58ca; + --bs-btn-active-border-color: #0a53be; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #0d6efd; + --bs-btn-disabled-border-color: #0d6efd; +} + +.btn-secondary { + --bs-btn-color: #fff; + --bs-btn-bg: #6c757d; + --bs-btn-border-color: #6c757d; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #5c636a; + --bs-btn-hover-border-color: #565e64; + --bs-btn-focus-shadow-rgb: 130, 138, 145; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #565e64; + --bs-btn-active-border-color: #51585e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #6c757d; + --bs-btn-disabled-border-color: #6c757d; +} + +.btn-success { + --bs-btn-color: #fff; + --bs-btn-bg: #198754; + --bs-btn-border-color: #198754; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #157347; + --bs-btn-hover-border-color: #146c43; + --bs-btn-focus-shadow-rgb: 60, 153, 110; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #146c43; + --bs-btn-active-border-color: #13653f; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #198754; + --bs-btn-disabled-border-color: #198754; +} + +.btn-info { + --bs-btn-color: #000; + --bs-btn-bg: #0dcaf0; + --bs-btn-border-color: #0dcaf0; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #31d2f2; + --bs-btn-hover-border-color: #25cff2; + --bs-btn-focus-shadow-rgb: 11, 172, 204; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #3dd5f3; + --bs-btn-active-border-color: #25cff2; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #0dcaf0; + --bs-btn-disabled-border-color: #0dcaf0; +} + +.btn-warning { + --bs-btn-color: #000; + --bs-btn-bg: #ffc107; + --bs-btn-border-color: #ffc107; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffca2c; + --bs-btn-hover-border-color: #ffc720; + --bs-btn-focus-shadow-rgb: 217, 164, 6; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffcd39; + --bs-btn-active-border-color: #ffc720; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #ffc107; + --bs-btn-disabled-border-color: #ffc107; +} + +.btn-danger { + --bs-btn-color: #fff; + --bs-btn-bg: #dc3545; + --bs-btn-border-color: #dc3545; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #bb2d3b; + --bs-btn-hover-border-color: #b02a37; + --bs-btn-focus-shadow-rgb: 225, 83, 97; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #b02a37; + --bs-btn-active-border-color: #a52834; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #dc3545; + --bs-btn-disabled-border-color: #dc3545; +} + +.btn-light { + --bs-btn-color: #000; + --bs-btn-bg: #f8f9fa; + --bs-btn-border-color: #f8f9fa; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #d3d4d5; + --bs-btn-hover-border-color: #c6c7c8; + --bs-btn-focus-shadow-rgb: 211, 212, 213; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #c6c7c8; + --bs-btn-active-border-color: #babbbc; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #f8f9fa; + --bs-btn-disabled-border-color: #f8f9fa; +} + +.btn-dark { + --bs-btn-color: #fff; + --bs-btn-bg: #212529; + --bs-btn-border-color: #212529; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #424649; + --bs-btn-hover-border-color: #373b3e; + --bs-btn-focus-shadow-rgb: 66, 70, 73; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #4d5154; + --bs-btn-active-border-color: #373b3e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #212529; + --bs-btn-disabled-border-color: #212529; +} + +.btn-flixel-dark-blue { + --bs-btn-color: #fff; + --bs-btn-bg: #3b43ff; + --bs-btn-border-color: #3b43ff; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #3239d9; + --bs-btn-hover-border-color: #2f36cc; + --bs-btn-focus-shadow-rgb: 88, 95, 255; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #2f36cc; + --bs-btn-active-border-color: #2c32bf; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #3b43ff; + --bs-btn-disabled-border-color: #3b43ff; +} + +.btn-flixel-yellow { + --bs-btn-color: #000; + --bs-btn-bg: #ffbf37; + --bs-btn-border-color: #ffbf37; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffc955; + --bs-btn-hover-border-color: #ffc54b; + --bs-btn-focus-shadow-rgb: 217, 162, 47; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffcc5f; + --bs-btn-active-border-color: #ffc54b; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #ffbf37; + --bs-btn-disabled-border-color: #ffbf37; +} + +.btn-flixel-red { + --bs-btn-color: #000; + --bs-btn-bg: #ff2346; + --bs-btn-border-color: #ff2346; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ff4462; + --bs-btn-hover-border-color: #ff3959; + --bs-btn-focus-shadow-rgb: 217, 30, 60; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ff4f6b; + --bs-btn-active-border-color: #ff3959; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #ff2346; + --bs-btn-disabled-border-color: #ff2346; +} + +.btn-flixel-green { + --bs-btn-color: #000; + --bs-btn-bg: #00b92b; + --bs-btn-border-color: #00b92b; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #26c44b; + --bs-btn-hover-border-color: #1ac040; + --bs-btn-focus-shadow-rgb: 0, 157, 37; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #33c755; + --bs-btn-active-border-color: #1ac040; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #00b92b; + --bs-btn-disabled-border-color: #00b92b; +} + +.btn-flixel-light-blue { + --bs-btn-color: #000; + --bs-btn-bg: #0bc8ff; + --bs-btn-border-color: #0bc8ff; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #30d0ff; + --bs-btn-hover-border-color: #23ceff; + --bs-btn-focus-shadow-rgb: 9, 170, 217; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #3cd3ff; + --bs-btn-active-border-color: #23ceff; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #0bc8ff; + --bs-btn-disabled-border-color: #0bc8ff; +} + +.btn-outline-primary { + --bs-btn-color: #0d6efd; + --bs-btn-border-color: #0d6efd; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0d6efd; + --bs-btn-hover-border-color: #0d6efd; + --bs-btn-focus-shadow-rgb: 13, 110, 253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #0d6efd; + --bs-btn-active-border-color: #0d6efd; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #0d6efd; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0d6efd; + --bs-gradient: none; +} + +.btn-outline-secondary { + --bs-btn-color: #6c757d; + --bs-btn-border-color: #6c757d; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #6c757d; + --bs-btn-hover-border-color: #6c757d; + --bs-btn-focus-shadow-rgb: 108, 117, 125; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #6c757d; + --bs-btn-active-border-color: #6c757d; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #6c757d; + --bs-gradient: none; +} + +.btn-outline-success { + --bs-btn-color: #198754; + --bs-btn-border-color: #198754; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #198754; + --bs-btn-hover-border-color: #198754; + --bs-btn-focus-shadow-rgb: 25, 135, 84; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #198754; + --bs-btn-active-border-color: #198754; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #198754; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #198754; + --bs-gradient: none; +} + +.btn-outline-info { + --bs-btn-color: #0dcaf0; + --bs-btn-border-color: #0dcaf0; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #0dcaf0; + --bs-btn-hover-border-color: #0dcaf0; + --bs-btn-focus-shadow-rgb: 13, 202, 240; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #0dcaf0; + --bs-btn-active-border-color: #0dcaf0; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #0dcaf0; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0dcaf0; + --bs-gradient: none; +} + +.btn-outline-warning { + --bs-btn-color: #ffc107; + --bs-btn-border-color: #ffc107; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffc107; + --bs-btn-hover-border-color: #ffc107; + --bs-btn-focus-shadow-rgb: 255, 193, 7; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffc107; + --bs-btn-active-border-color: #ffc107; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #ffc107; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #ffc107; + --bs-gradient: none; +} + +.btn-outline-danger { + --bs-btn-color: #dc3545; + --bs-btn-border-color: #dc3545; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #dc3545; + --bs-btn-hover-border-color: #dc3545; + --bs-btn-focus-shadow-rgb: 220, 53, 69; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #dc3545; + --bs-btn-active-border-color: #dc3545; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #dc3545; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #dc3545; + --bs-gradient: none; +} + +.btn-outline-light { + --bs-btn-color: #f8f9fa; + --bs-btn-border-color: #f8f9fa; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #f8f9fa; + --bs-btn-hover-border-color: #f8f9fa; + --bs-btn-focus-shadow-rgb: 248, 249, 250; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #f8f9fa; + --bs-btn-active-border-color: #f8f9fa; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #f8f9fa; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #f8f9fa; + --bs-gradient: none; +} + +.btn-outline-dark { + --bs-btn-color: #212529; + --bs-btn-border-color: #212529; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #212529; + --bs-btn-hover-border-color: #212529; + --bs-btn-focus-shadow-rgb: 33, 37, 41; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #212529; + --bs-btn-active-border-color: #212529; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #212529; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #212529; + --bs-gradient: none; +} + +.btn-outline-flixel-dark-blue { + --bs-btn-color: #3b43ff; + --bs-btn-border-color: #3b43ff; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #3b43ff; + --bs-btn-hover-border-color: #3b43ff; + --bs-btn-focus-shadow-rgb: 59, 67, 255; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #3b43ff; + --bs-btn-active-border-color: #3b43ff; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #3b43ff; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #3b43ff; + --bs-gradient: none; +} + +.btn-outline-flixel-yellow { + --bs-btn-color: #ffbf37; + --bs-btn-border-color: #ffbf37; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffbf37; + --bs-btn-hover-border-color: #ffbf37; + --bs-btn-focus-shadow-rgb: 255, 191, 55; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffbf37; + --bs-btn-active-border-color: #ffbf37; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #ffbf37; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #ffbf37; + --bs-gradient: none; +} + +.btn-outline-flixel-red { + --bs-btn-color: #ff2346; + --bs-btn-border-color: #ff2346; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ff2346; + --bs-btn-hover-border-color: #ff2346; + --bs-btn-focus-shadow-rgb: 255, 35, 70; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ff2346; + --bs-btn-active-border-color: #ff2346; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #ff2346; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #ff2346; + --bs-gradient: none; +} + +.btn-outline-flixel-green { + --bs-btn-color: #00b92b; + --bs-btn-border-color: #00b92b; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #00b92b; + --bs-btn-hover-border-color: #00b92b; + --bs-btn-focus-shadow-rgb: 0, 185, 43; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #00b92b; + --bs-btn-active-border-color: #00b92b; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #00b92b; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #00b92b; + --bs-gradient: none; +} + +.btn-outline-flixel-light-blue { + --bs-btn-color: #0bc8ff; + --bs-btn-border-color: #0bc8ff; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #0bc8ff; + --bs-btn-hover-border-color: #0bc8ff; + --bs-btn-focus-shadow-rgb: 11, 200, 255; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #0bc8ff; + --bs-btn-active-border-color: #0bc8ff; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #0bc8ff; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0bc8ff; + --bs-gradient: none; +} + +.btn-link { + --bs-btn-font-weight: 400; + --bs-btn-color: var(--bs-link-color); + --bs-btn-bg: transparent; + --bs-btn-border-color: transparent; + --bs-btn-hover-color: var(--bs-link-hover-color); + --bs-btn-hover-border-color: transparent; + --bs-btn-active-color: var(--bs-link-hover-color); + --bs-btn-active-border-color: transparent; + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-border-color: transparent; + --bs-btn-box-shadow: 0 0 0 #000; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + text-decoration: underline; +} +.btn-link:focus-visible { + color: var(--bs-btn-color); +} +.btn-link:hover { + color: var(--bs-btn-hover-color); +} + +.btn-lg, .btn-group-lg > .btn { + --bs-btn-padding-y: 0.5rem; + --bs-btn-padding-x: 1rem; + --bs-btn-font-size: 1.25rem; + --bs-btn-border-radius: var(--bs-border-radius-lg); +} + +.btn-sm, .btn-group-sm > .btn { + --bs-btn-padding-y: 0.25rem; + --bs-btn-padding-x: 0.5rem; + --bs-btn-font-size: 0.875rem; + --bs-btn-border-radius: var(--bs-border-radius-sm); +} + +.fade { + transition: opacity 0.15s linear; +} +@media (prefers-reduced-motion: reduce) { + .fade { + transition: none; + } +} +.fade:not(.show) { + opacity: 0; +} + +.collapse:not(.show) { + display: none; +} + +.collapsing { + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} +@media (prefers-reduced-motion: reduce) { + .collapsing { + transition: none; + } +} +.collapsing.collapse-horizontal { + width: 0; + height: auto; + transition: width 0.35s ease; +} +@media (prefers-reduced-motion: reduce) { + .collapsing.collapse-horizontal { + transition: none; + } +} + +.dropup, +.dropend, +.dropdown, +.dropstart, +.dropup-center, +.dropdown-center { + position: relative; +} + +.dropdown-toggle { + white-space: nowrap; +} +.dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} +.dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropdown-menu { + --bs-dropdown-zindex: 1000; + --bs-dropdown-min-width: 10rem; + --bs-dropdown-padding-x: 0; + --bs-dropdown-padding-y: 0.5rem; + --bs-dropdown-spacer: 0.125rem; + --bs-dropdown-font-size: 1rem; + --bs-dropdown-color: var(--bs-body-color); + --bs-dropdown-bg: var(--bs-body-bg); + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-border-radius: var(--bs-border-radius); + --bs-dropdown-border-width: var(--bs-border-width); + --bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width)); + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-divider-margin-y: 0.5rem; + --bs-dropdown-box-shadow: var(--bs-box-shadow); + --bs-dropdown-link-color: var(--bs-body-color); + --bs-dropdown-link-hover-color: var(--bs-body-color); + --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg); + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: var(--bs-tertiary-color); + --bs-dropdown-item-padding-x: 1rem; + --bs-dropdown-item-padding-y: 0.25rem; + --bs-dropdown-header-color: #6c757d; + --bs-dropdown-header-padding-x: 1rem; + --bs-dropdown-header-padding-y: 0.5rem; + position: absolute; + z-index: var(--bs-dropdown-zindex); + display: none; + min-width: var(--bs-dropdown-min-width); + padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x); + margin: 0; + font-size: var(--bs-dropdown-font-size); + color: var(--bs-dropdown-color); + text-align: left; + list-style: none; + background-color: var(--bs-dropdown-bg); + background-clip: padding-box; + border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color); + border-radius: var(--bs-dropdown-border-radius); +} +.dropdown-menu[data-bs-popper] { + top: 100%; + left: 0; + margin-top: var(--bs-dropdown-spacer); +} + +.dropdown-menu-start { + --bs-position: start; +} +.dropdown-menu-start[data-bs-popper] { + right: auto; + left: 0; +} + +.dropdown-menu-end { + --bs-position: end; +} +.dropdown-menu-end[data-bs-popper] { + right: 0; + left: auto; +} + +@media (min-width: 576px) { + .dropdown-menu-sm-start { + --bs-position: start; + } + .dropdown-menu-sm-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-sm-end { + --bs-position: end; + } + .dropdown-menu-sm-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 768px) { + .dropdown-menu-md-start { + --bs-position: start; + } + .dropdown-menu-md-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-md-end { + --bs-position: end; + } + .dropdown-menu-md-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 992px) { + .dropdown-menu-lg-start { + --bs-position: start; + } + .dropdown-menu-lg-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-lg-end { + --bs-position: end; + } + .dropdown-menu-lg-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 1200px) { + .dropdown-menu-xl-start { + --bs-position: start; + } + .dropdown-menu-xl-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-xl-end { + --bs-position: end; + } + .dropdown-menu-xl-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 1400px) { + .dropdown-menu-xxl-start { + --bs-position: start; + } + .dropdown-menu-xxl-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-xxl-end { + --bs-position: end; + } + .dropdown-menu-xxl-end[data-bs-popper] { + right: 0; + left: auto; + } +} +.dropup .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: var(--bs-dropdown-spacer); +} +.dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} +.dropup .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropend .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: var(--bs-dropdown-spacer); +} +.dropend .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} +.dropend .dropdown-toggle:empty::after { + margin-left: 0; +} +.dropend .dropdown-toggle::after { + vertical-align: 0; +} + +.dropstart .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: var(--bs-dropdown-spacer); +} +.dropstart .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} +.dropstart .dropdown-toggle::after { + display: none; +} +.dropstart .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} +.dropstart .dropdown-toggle:empty::after { + margin-left: 0; +} +.dropstart .dropdown-toggle::before { + vertical-align: 0; +} + +.dropdown-divider { + height: 0; + margin: var(--bs-dropdown-divider-margin-y) 0; + overflow: hidden; + border-top: 1px solid var(--bs-dropdown-divider-bg); + opacity: 1; +} + +.dropdown-item { + display: block; + width: 100%; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + clear: both; + font-weight: 400; + color: var(--bs-dropdown-link-color); + text-align: inherit; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border: 0; + border-radius: var(--bs-dropdown-item-border-radius, 0); +} +.dropdown-item:hover, .dropdown-item:focus { + color: var(--bs-dropdown-link-hover-color); + background-color: var(--bs-dropdown-link-hover-bg); +} +.dropdown-item.active, .dropdown-item:active { + color: var(--bs-dropdown-link-active-color); + text-decoration: none; + background-color: var(--bs-dropdown-link-active-bg); +} +.dropdown-item.disabled, .dropdown-item:disabled { + color: var(--bs-dropdown-link-disabled-color); + pointer-events: none; + background-color: transparent; +} + +.dropdown-menu.show { + display: block; +} + +.dropdown-header { + display: block; + padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x); + margin-bottom: 0; + font-size: 0.875rem; + color: var(--bs-dropdown-header-color); + white-space: nowrap; +} + +.dropdown-item-text { + display: block; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + color: var(--bs-dropdown-link-color); +} + +.dropdown-menu-dark { + --bs-dropdown-color: #dee2e6; + --bs-dropdown-bg: #343a40; + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-box-shadow: ; + --bs-dropdown-link-color: #dee2e6; + --bs-dropdown-link-hover-color: #fff; + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15); + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: #adb5bd; + --bs-dropdown-header-color: #adb5bd; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + flex: 1 1 auto; +} +.btn-group > .btn-check:checked + .btn, +.btn-group > .btn-check:focus + .btn, +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn-check:checked + .btn, +.btn-group-vertical > .btn-check:focus + .btn, +.btn-group-vertical > .btn:hover, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 1; +} + +.btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} +.btn-toolbar .input-group { + width: auto; +} + +.btn-group { + border-radius: var(--bs-border-radius); +} +.btn-group > :not(.btn-check:first-child) + .btn, +.btn-group > .btn-group:not(:first-child) { + margin-left: calc(var(--bs-border-width) * -1); +} +.btn-group > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group > .btn.dropdown-toggle-split:first-child, +.btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:nth-child(n+3), +.btn-group > :not(.btn-check) + .btn, +.btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} +.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after { + margin-left: 0; +} +.dropstart .dropdown-toggle-split::before { + margin-right: 0; +} + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + width: 100%; +} +.btn-group-vertical > .btn:not(:first-child), +.btn-group-vertical > .btn-group:not(:first-child) { + margin-top: calc(var(--bs-border-width) * -1); +} +.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn ~ .btn, +.btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.nav { + --bs-nav-link-padding-x: 1rem; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-font-weight: ; + --bs-nav-link-color: var(--bs-link-color); + --bs-nav-link-hover-color: var(--bs-link-hover-color); + --bs-nav-link-disabled-color: var(--bs-secondary-color); + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: block; + padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x); + font-size: var(--bs-nav-link-font-size); + font-weight: var(--bs-nav-link-font-weight); + color: var(--bs-nav-link-color); + text-decoration: none; + background: none; + border: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .nav-link { + transition: none; + } +} +.nav-link:hover, .nav-link:focus { + color: var(--bs-nav-link-hover-color); +} +.nav-link:focus-visible { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.nav-link.disabled, .nav-link:disabled { + color: var(--bs-nav-link-disabled-color); + pointer-events: none; + cursor: default; +} + +.nav-tabs { + --bs-nav-tabs-border-width: var(--bs-border-width); + --bs-nav-tabs-border-color: var(--bs-border-color); + --bs-nav-tabs-border-radius: var(--bs-border-radius); + --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color); + --bs-nav-tabs-link-active-color: var(--bs-emphasis-color); + --bs-nav-tabs-link-active-bg: var(--bs-body-bg); + --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg); + border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color); +} +.nav-tabs .nav-link { + margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width)); + border: var(--bs-nav-tabs-border-width) solid transparent; + border-top-left-radius: var(--bs-nav-tabs-border-radius); + border-top-right-radius: var(--bs-nav-tabs-border-radius); +} +.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + isolation: isolate; + border-color: var(--bs-nav-tabs-link-hover-border-color); +} +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: var(--bs-nav-tabs-link-active-color); + background-color: var(--bs-nav-tabs-link-active-bg); + border-color: var(--bs-nav-tabs-link-active-border-color); +} +.nav-tabs .dropdown-menu { + margin-top: calc(-1 * var(--bs-nav-tabs-border-width)); + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.nav-pills { + --bs-nav-pills-border-radius: var(--bs-border-radius); + --bs-nav-pills-link-active-color: #fff; + --bs-nav-pills-link-active-bg: #0d6efd; +} +.nav-pills .nav-link { + border-radius: var(--bs-nav-pills-border-radius); +} +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: var(--bs-nav-pills-link-active-color); + background-color: var(--bs-nav-pills-link-active-bg); +} + +.nav-underline { + --bs-nav-underline-gap: 1rem; + --bs-nav-underline-border-width: 0.125rem; + --bs-nav-underline-link-active-color: var(--bs-emphasis-color); + gap: var(--bs-nav-underline-gap); +} +.nav-underline .nav-link { + padding-right: 0; + padding-left: 0; + border-bottom: var(--bs-nav-underline-border-width) solid transparent; +} +.nav-underline .nav-link:hover, .nav-underline .nav-link:focus { + border-bottom-color: currentcolor; +} +.nav-underline .nav-link.active, +.nav-underline .show > .nav-link { + font-weight: 700; + color: var(--bs-nav-underline-link-active-color); + border-bottom-color: currentcolor; +} + +.nav-fill > .nav-link, +.nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; +} + +.nav-justified > .nav-link, +.nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; +} + +.nav-fill .nav-item .nav-link, +.nav-justified .nav-item .nav-link { + width: 100%; +} + +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} + +.navbar { + --bs-navbar-padding-x: 0; + --bs-navbar-padding-y: 0.5rem; + --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65); + --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8); + --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3); + --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1); + --bs-navbar-brand-padding-y: 0.3125rem; + --bs-navbar-brand-margin-end: 1rem; + --bs-navbar-brand-font-size: 1.25rem; + --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1); + --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1); + --bs-navbar-nav-link-padding-x: 0.5rem; + --bs-navbar-toggler-padding-y: 0.25rem; + --bs-navbar-toggler-padding-x: 0.75rem; + --bs-navbar-toggler-font-size: 1.25rem; + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15); + --bs-navbar-toggler-border-radius: var(--bs-border-radius); + --bs-navbar-toggler-focus-width: 0.25rem; + --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out; + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x); +} +.navbar > .container, +.navbar > .container-fluid, +.navbar > .container-sm, +.navbar > .container-md, +.navbar > .container-lg, +.navbar > .container-xl, +.navbar > .container-xxl { + display: flex; + flex-wrap: inherit; + align-items: center; + justify-content: space-between; +} +.navbar-brand { + padding-top: var(--bs-navbar-brand-padding-y); + padding-bottom: var(--bs-navbar-brand-padding-y); + margin-right: var(--bs-navbar-brand-margin-end); + font-size: var(--bs-navbar-brand-font-size); + color: var(--bs-navbar-brand-color); + text-decoration: none; + white-space: nowrap; +} +.navbar-brand:hover, .navbar-brand:focus { + color: var(--bs-navbar-brand-hover-color); +} + +.navbar-nav { + --bs-nav-link-padding-x: 0; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-font-weight: ; + --bs-nav-link-color: var(--bs-navbar-color); + --bs-nav-link-hover-color: var(--bs-navbar-hover-color); + --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color); + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.navbar-nav .nav-link.active, .navbar-nav .nav-link.show { + color: var(--bs-navbar-active-color); +} +.navbar-nav .dropdown-menu { + position: static; +} + +.navbar-text { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--bs-navbar-color); +} +.navbar-text a, +.navbar-text a:hover, +.navbar-text a:focus { + color: var(--bs-navbar-active-color); +} + +.navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center; +} + +.navbar-toggler { + padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x); + font-size: var(--bs-navbar-toggler-font-size); + line-height: 1; + color: var(--bs-navbar-color); + background-color: transparent; + border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color); + border-radius: var(--bs-navbar-toggler-border-radius); + transition: var(--bs-navbar-toggler-transition); +} +@media (prefers-reduced-motion: reduce) { + .navbar-toggler { + transition: none; + } +} +.navbar-toggler:hover { + text-decoration: none; +} +.navbar-toggler:focus { + text-decoration: none; + outline: 0; + box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width); +} + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + background-image: var(--bs-navbar-toggler-icon-bg); + background-repeat: no-repeat; + background-position: center; + background-size: 100%; +} + +.navbar-nav-scroll { + max-height: var(--bs-scroll-height, 75vh); + overflow-y: auto; +} + +@media (min-width: 576px) { + .navbar-expand-sm { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-sm .navbar-nav { + flex-direction: row; + } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-sm .navbar-toggler { + display: none; + } + .navbar-expand-sm .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .navbar-expand-sm .offcanvas .offcanvas-header { + display: none; + } + .navbar-expand-sm .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 768px) { + .navbar-expand-md { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-md .navbar-nav { + flex-direction: row; + } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + .navbar-expand-md .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-md .navbar-toggler { + display: none; + } + .navbar-expand-md .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .navbar-expand-md .offcanvas .offcanvas-header { + display: none; + } + .navbar-expand-md .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 992px) { + .navbar-expand-lg { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-lg .navbar-nav { + flex-direction: row; + } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-lg .navbar-toggler { + display: none; + } + .navbar-expand-lg .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .navbar-expand-lg .offcanvas .offcanvas-header { + display: none; + } + .navbar-expand-lg .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 1200px) { + .navbar-expand-xl { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-xl .navbar-nav { + flex-direction: row; + } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-xl .navbar-toggler { + display: none; + } + .navbar-expand-xl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .navbar-expand-xl .offcanvas .offcanvas-header { + display: none; + } + .navbar-expand-xl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 1400px) { + .navbar-expand-xxl { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-xxl .navbar-nav { + flex-direction: row; + } + .navbar-expand-xxl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xxl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + .navbar-expand-xxl .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-xxl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-xxl .navbar-toggler { + display: none; + } + .navbar-expand-xxl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .navbar-expand-xxl .offcanvas .offcanvas-header { + display: none; + } + .navbar-expand-xxl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +.navbar-expand { + flex-wrap: nowrap; + justify-content: flex-start; +} +.navbar-expand .navbar-nav { + flex-direction: row; +} +.navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} +.navbar-expand .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); +} +.navbar-expand .navbar-nav-scroll { + overflow: visible; +} +.navbar-expand .navbar-collapse { + display: flex !important; + flex-basis: auto; +} +.navbar-expand .navbar-toggler { + display: none; +} +.navbar-expand .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; +} +.navbar-expand .offcanvas .offcanvas-header { + display: none; +} +.navbar-expand .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; +} + +.navbar-dark, +.navbar[data-bs-theme=dark] { + --bs-navbar-color: rgba(255, 255, 255, 0.55); + --bs-navbar-hover-color: rgba(255, 255, 255, 0.75); + --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25); + --bs-navbar-active-color: #fff; + --bs-navbar-brand-color: #fff; + --bs-navbar-brand-hover-color: #fff; + --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1); + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +[data-bs-theme=dark] .navbar-toggler-icon { + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.card { + --bs-card-spacer-y: 1rem; + --bs-card-spacer-x: 1rem; + --bs-card-title-spacer-y: 0.5rem; + --bs-card-title-color: ; + --bs-card-subtitle-color: ; + --bs-card-border-width: var(--bs-border-width); + --bs-card-border-color: var(--bs-border-color-translucent); + --bs-card-border-radius: var(--bs-border-radius); + --bs-card-box-shadow: ; + --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width))); + --bs-card-cap-padding-y: 0.5rem; + --bs-card-cap-padding-x: 1rem; + --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03); + --bs-card-cap-color: ; + --bs-card-height: ; + --bs-card-color: ; + --bs-card-bg: var(--bs-body-bg); + --bs-card-img-overlay-padding: 1rem; + --bs-card-group-margin: 0.75rem; + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + height: var(--bs-card-height); + color: var(--bs-body-color); + word-wrap: break-word; + background-color: var(--bs-card-bg); + background-clip: border-box; + border: var(--bs-card-border-width) solid var(--bs-card-border-color); + border-radius: var(--bs-card-border-radius); +} +.card > hr { + margin-right: 0; + margin-left: 0; +} +.card > .list-group { + border-top: inherit; + border-bottom: inherit; +} +.card > .list-group:first-child { + border-top-width: 0; + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); +} +.card > .list-group:last-child { + border-bottom-width: 0; + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); +} +.card > .card-header + .list-group, +.card > .list-group + .card-footer { + border-top: 0; +} + +.card-body { + flex: 1 1 auto; + padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x); + color: var(--bs-card-color); +} + +.card-title { + margin-bottom: var(--bs-card-title-spacer-y); + color: var(--bs-card-title-color); +} + +.card-subtitle { + margin-top: calc(-0.5 * var(--bs-card-title-spacer-y)); + margin-bottom: 0; + color: var(--bs-card-subtitle-color); +} + +.card-text:last-child { + margin-bottom: 0; +} + +.card-link + .card-link { + margin-left: var(--bs-card-spacer-x); +} + +.card-header { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + margin-bottom: 0; + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color); +} +.card-header:first-child { + border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0; +} + +.card-footer { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-top: var(--bs-card-border-width) solid var(--bs-card-border-color); +} +.card-footer:last-child { + border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius); +} + +.card-header-tabs { + margin-right: calc(-0.5 * var(--bs-card-cap-padding-x)); + margin-bottom: calc(-1 * var(--bs-card-cap-padding-y)); + margin-left: calc(-0.5 * var(--bs-card-cap-padding-x)); + border-bottom: 0; +} +.card-header-tabs .nav-link.active { + background-color: var(--bs-card-bg); + border-bottom-color: var(--bs-card-bg); +} + +.card-header-pills { + margin-right: calc(-0.5 * var(--bs-card-cap-padding-x)); + margin-left: calc(-0.5 * var(--bs-card-cap-padding-x)); +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: var(--bs-card-img-overlay-padding); + border-radius: var(--bs-card-inner-border-radius); +} + +.card-img, +.card-img-top, +.card-img-bottom { + width: 100%; +} + +.card-img, +.card-img-top { + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); +} + +.card-img, +.card-img-bottom { + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); +} + +.card-group > .card { + margin-bottom: var(--bs-card-group-margin); +} +@media (min-width: 576px) { + .card-group { + display: flex; + flex-flow: row wrap; + } + .card-group > .card { + flex: 1 0 0%; + margin-bottom: 0; + } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-top, + .card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-bottom, + .card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; + } + .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-top, + .card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-bottom, + .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; + } +} + +.accordion { + --bs-accordion-color: var(--bs-body-color); + --bs-accordion-bg: var(--bs-body-bg); + --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; + --bs-accordion-border-color: var(--bs-border-color); + --bs-accordion-border-width: var(--bs-border-width); + --bs-accordion-border-radius: var(--bs-border-radius); + --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width))); + --bs-accordion-btn-padding-x: 1.25rem; + --bs-accordion-btn-padding-y: 1rem; + --bs-accordion-btn-color: var(--bs-body-color); + --bs-accordion-btn-bg: var(--bs-accordion-bg); + --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e"); + --bs-accordion-btn-icon-width: 1.25rem; + --bs-accordion-btn-icon-transform: rotate(-180deg); + --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out; + --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e"); + --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-accordion-body-padding-x: 1.25rem; + --bs-accordion-body-padding-y: 1rem; + --bs-accordion-active-color: var(--bs-primary-text-emphasis); + --bs-accordion-active-bg: var(--bs-primary-bg-subtle); +} + +.accordion-button { + position: relative; + display: flex; + align-items: center; + width: 100%; + padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x); + font-size: 1rem; + color: var(--bs-accordion-btn-color); + text-align: left; + background-color: var(--bs-accordion-btn-bg); + border: 0; + border-radius: 0; + overflow-anchor: none; + transition: var(--bs-accordion-transition); +} +@media (prefers-reduced-motion: reduce) { + .accordion-button { + transition: none; + } +} +.accordion-button:not(.collapsed) { + color: var(--bs-accordion-active-color); + background-color: var(--bs-accordion-active-bg); + box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color); +} +.accordion-button:not(.collapsed)::after { + background-image: var(--bs-accordion-btn-active-icon); + transform: var(--bs-accordion-btn-icon-transform); +} +.accordion-button::after { + flex-shrink: 0; + width: var(--bs-accordion-btn-icon-width); + height: var(--bs-accordion-btn-icon-width); + margin-left: auto; + content: ""; + background-image: var(--bs-accordion-btn-icon); + background-repeat: no-repeat; + background-size: var(--bs-accordion-btn-icon-width); + transition: var(--bs-accordion-btn-icon-transition); +} +@media (prefers-reduced-motion: reduce) { + .accordion-button::after { + transition: none; + } +} +.accordion-button:hover { + z-index: 2; +} +.accordion-button:focus { + z-index: 3; + outline: 0; + box-shadow: var(--bs-accordion-btn-focus-box-shadow); +} + +.accordion-header { + margin-bottom: 0; +} + +.accordion-item { + color: var(--bs-accordion-color); + background-color: var(--bs-accordion-bg); + border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color); +} +.accordion-item:first-of-type { + border-top-left-radius: var(--bs-accordion-border-radius); + border-top-right-radius: var(--bs-accordion-border-radius); +} +.accordion-item:first-of-type > .accordion-header .accordion-button { + border-top-left-radius: var(--bs-accordion-inner-border-radius); + border-top-right-radius: var(--bs-accordion-inner-border-radius); +} +.accordion-item:not(:first-of-type) { + border-top: 0; +} +.accordion-item:last-of-type { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); +} +.accordion-item:last-of-type > .accordion-header .accordion-button.collapsed { + border-bottom-right-radius: var(--bs-accordion-inner-border-radius); + border-bottom-left-radius: var(--bs-accordion-inner-border-radius); +} +.accordion-item:last-of-type > .accordion-collapse { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); +} + +.accordion-body { + padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x); +} + +.accordion-flush > .accordion-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} +.accordion-flush > .accordion-item:first-child { + border-top: 0; +} +.accordion-flush > .accordion-item:last-child { + border-bottom: 0; +} +.accordion-flush > .accordion-item > .accordion-header .accordion-button, .accordion-flush > .accordion-item > .accordion-header .accordion-button.collapsed { + border-radius: 0; +} +.accordion-flush > .accordion-item > .accordion-collapse { + border-radius: 0; +} + +[data-bs-theme=dark] .accordion-button::after { + --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); +} + +.breadcrumb { + --bs-breadcrumb-padding-x: 0; + --bs-breadcrumb-padding-y: 0; + --bs-breadcrumb-margin-bottom: 1rem; + --bs-breadcrumb-bg: ; + --bs-breadcrumb-border-radius: ; + --bs-breadcrumb-divider-color: var(--bs-secondary-color); + --bs-breadcrumb-item-padding-x: 0.5rem; + --bs-breadcrumb-item-active-color: var(--bs-secondary-color); + display: flex; + flex-wrap: wrap; + padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x); + margin-bottom: var(--bs-breadcrumb-margin-bottom); + font-size: var(--bs-breadcrumb-font-size); + list-style: none; + background-color: var(--bs-breadcrumb-bg); + border-radius: var(--bs-breadcrumb-border-radius); +} + +.breadcrumb-item + .breadcrumb-item { + padding-left: var(--bs-breadcrumb-item-padding-x); +} +.breadcrumb-item + .breadcrumb-item::before { + float: left; + padding-right: var(--bs-breadcrumb-item-padding-x); + color: var(--bs-breadcrumb-divider-color); + content: var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */; +} +.breadcrumb-item.active { + color: var(--bs-breadcrumb-item-active-color); +} + +.pagination { + --bs-pagination-padding-x: 0.75rem; + --bs-pagination-padding-y: 0.375rem; + --bs-pagination-font-size: 1rem; + --bs-pagination-color: var(--bs-link-color); + --bs-pagination-bg: var(--bs-body-bg); + --bs-pagination-border-width: var(--bs-border-width); + --bs-pagination-border-color: var(--bs-border-color); + --bs-pagination-border-radius: var(--bs-border-radius); + --bs-pagination-hover-color: var(--bs-link-hover-color); + --bs-pagination-hover-bg: var(--bs-tertiary-bg); + --bs-pagination-hover-border-color: var(--bs-border-color); + --bs-pagination-focus-color: var(--bs-link-hover-color); + --bs-pagination-focus-bg: var(--bs-secondary-bg); + --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-pagination-active-color: #fff; + --bs-pagination-active-bg: #0d6efd; + --bs-pagination-active-border-color: #0d6efd; + --bs-pagination-disabled-color: var(--bs-secondary-color); + --bs-pagination-disabled-bg: var(--bs-secondary-bg); + --bs-pagination-disabled-border-color: var(--bs-border-color); + display: flex; + padding-left: 0; + list-style: none; +} + +.page-link { + position: relative; + display: block; + padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x); + font-size: var(--bs-pagination-font-size); + color: var(--bs-pagination-color); + text-decoration: none; + background-color: var(--bs-pagination-bg); + border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .page-link { + transition: none; + } +} +.page-link:hover { + z-index: 2; + color: var(--bs-pagination-hover-color); + background-color: var(--bs-pagination-hover-bg); + border-color: var(--bs-pagination-hover-border-color); +} +.page-link:focus { + z-index: 3; + color: var(--bs-pagination-focus-color); + background-color: var(--bs-pagination-focus-bg); + outline: 0; + box-shadow: var(--bs-pagination-focus-box-shadow); +} +.page-link.active, .active > .page-link { + z-index: 3; + color: var(--bs-pagination-active-color); + background-color: var(--bs-pagination-active-bg); + border-color: var(--bs-pagination-active-border-color); +} +.page-link.disabled, .disabled > .page-link { + color: var(--bs-pagination-disabled-color); + pointer-events: none; + background-color: var(--bs-pagination-disabled-bg); + border-color: var(--bs-pagination-disabled-border-color); +} + +.page-item:not(:first-child) .page-link { + margin-left: calc(var(--bs-border-width) * -1); +} +.page-item:first-child .page-link { + border-top-left-radius: var(--bs-pagination-border-radius); + border-bottom-left-radius: var(--bs-pagination-border-radius); +} +.page-item:last-child .page-link { + border-top-right-radius: var(--bs-pagination-border-radius); + border-bottom-right-radius: var(--bs-pagination-border-radius); +} + +.pagination-lg { + --bs-pagination-padding-x: 1.5rem; + --bs-pagination-padding-y: 0.75rem; + --bs-pagination-font-size: 1.25rem; + --bs-pagination-border-radius: var(--bs-border-radius-lg); +} + +.pagination-sm { + --bs-pagination-padding-x: 0.5rem; + --bs-pagination-padding-y: 0.25rem; + --bs-pagination-font-size: 0.875rem; + --bs-pagination-border-radius: var(--bs-border-radius-sm); +} + +.badge { + --bs-badge-padding-x: 0.65em; + --bs-badge-padding-y: 0.35em; + --bs-badge-font-size: 0.75em; + --bs-badge-font-weight: 700; + --bs-badge-color: #fff; + --bs-badge-border-radius: var(--bs-border-radius); + display: inline-block; + padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x); + font-size: var(--bs-badge-font-size); + font-weight: var(--bs-badge-font-weight); + line-height: 1; + color: var(--bs-badge-color); + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: var(--bs-badge-border-radius); +} +.badge:empty { + display: none; +} + +.btn .badge { + position: relative; + top: -1px; +} + +.alert { + --bs-alert-bg: transparent; + --bs-alert-padding-x: 1rem; + --bs-alert-padding-y: 1rem; + --bs-alert-margin-bottom: 1rem; + --bs-alert-color: inherit; + --bs-alert-border-color: transparent; + --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color); + --bs-alert-border-radius: var(--bs-border-radius); + --bs-alert-link-color: inherit; + position: relative; + padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x); + margin-bottom: var(--bs-alert-margin-bottom); + color: var(--bs-alert-color); + background-color: var(--bs-alert-bg); + border: var(--bs-alert-border); + border-radius: var(--bs-alert-border-radius); +} + +.alert-heading { + color: inherit; +} + +.alert-link { + font-weight: 700; + color: var(--bs-alert-link-color); +} + +.alert-dismissible { + padding-right: 3rem; +} +.alert-dismissible .btn-close { + position: absolute; + top: 0; + right: 0; + z-index: 2; + padding: 1.25rem 1rem; +} + +.alert-primary { + --bs-alert-color: var(--bs-primary-text-emphasis); + --bs-alert-bg: var(--bs-primary-bg-subtle); + --bs-alert-border-color: var(--bs-primary-border-subtle); + --bs-alert-link-color: var(--bs-primary-text-emphasis); +} + +.alert-secondary { + --bs-alert-color: var(--bs-secondary-text-emphasis); + --bs-alert-bg: var(--bs-secondary-bg-subtle); + --bs-alert-border-color: var(--bs-secondary-border-subtle); + --bs-alert-link-color: var(--bs-secondary-text-emphasis); +} + +.alert-success { + --bs-alert-color: var(--bs-success-text-emphasis); + --bs-alert-bg: var(--bs-success-bg-subtle); + --bs-alert-border-color: var(--bs-success-border-subtle); + --bs-alert-link-color: var(--bs-success-text-emphasis); +} + +.alert-info { + --bs-alert-color: var(--bs-info-text-emphasis); + --bs-alert-bg: var(--bs-info-bg-subtle); + --bs-alert-border-color: var(--bs-info-border-subtle); + --bs-alert-link-color: var(--bs-info-text-emphasis); +} + +.alert-warning { + --bs-alert-color: var(--bs-warning-text-emphasis); + --bs-alert-bg: var(--bs-warning-bg-subtle); + --bs-alert-border-color: var(--bs-warning-border-subtle); + --bs-alert-link-color: var(--bs-warning-text-emphasis); +} + +.alert-danger { + --bs-alert-color: var(--bs-danger-text-emphasis); + --bs-alert-bg: var(--bs-danger-bg-subtle); + --bs-alert-border-color: var(--bs-danger-border-subtle); + --bs-alert-link-color: var(--bs-danger-text-emphasis); +} + +.alert-light { + --bs-alert-color: var(--bs-light-text-emphasis); + --bs-alert-bg: var(--bs-light-bg-subtle); + --bs-alert-border-color: var(--bs-light-border-subtle); + --bs-alert-link-color: var(--bs-light-text-emphasis); +} + +.alert-dark { + --bs-alert-color: var(--bs-dark-text-emphasis); + --bs-alert-bg: var(--bs-dark-bg-subtle); + --bs-alert-border-color: var(--bs-dark-border-subtle); + --bs-alert-link-color: var(--bs-dark-text-emphasis); +} + +.alert-flixel-dark-blue { + --bs-alert-color: var(--bs-flixel-dark-blue-text-emphasis); + --bs-alert-bg: var(--bs-flixel-dark-blue-bg-subtle); + --bs-alert-border-color: var(--bs-flixel-dark-blue-border-subtle); + --bs-alert-link-color: var(--bs-flixel-dark-blue-text-emphasis); +} + +.alert-flixel-yellow { + --bs-alert-color: var(--bs-flixel-yellow-text-emphasis); + --bs-alert-bg: var(--bs-flixel-yellow-bg-subtle); + --bs-alert-border-color: var(--bs-flixel-yellow-border-subtle); + --bs-alert-link-color: var(--bs-flixel-yellow-text-emphasis); +} + +.alert-flixel-red { + --bs-alert-color: var(--bs-flixel-red-text-emphasis); + --bs-alert-bg: var(--bs-flixel-red-bg-subtle); + --bs-alert-border-color: var(--bs-flixel-red-border-subtle); + --bs-alert-link-color: var(--bs-flixel-red-text-emphasis); +} + +.alert-flixel-green { + --bs-alert-color: var(--bs-flixel-green-text-emphasis); + --bs-alert-bg: var(--bs-flixel-green-bg-subtle); + --bs-alert-border-color: var(--bs-flixel-green-border-subtle); + --bs-alert-link-color: var(--bs-flixel-green-text-emphasis); +} + +.alert-flixel-light-blue { + --bs-alert-color: var(--bs-flixel-light-blue-text-emphasis); + --bs-alert-bg: var(--bs-flixel-light-blue-bg-subtle); + --bs-alert-border-color: var(--bs-flixel-light-blue-border-subtle); + --bs-alert-link-color: var(--bs-flixel-light-blue-text-emphasis); +} + +@keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} +.progress, +.progress-stacked { + --bs-progress-height: 1rem; + --bs-progress-font-size: 0.75rem; + --bs-progress-bg: var(--bs-secondary-bg); + --bs-progress-border-radius: var(--bs-border-radius); + --bs-progress-box-shadow: var(--bs-box-shadow-inset); + --bs-progress-bar-color: #fff; + --bs-progress-bar-bg: #0d6efd; + --bs-progress-bar-transition: width 0.6s ease; + display: flex; + height: var(--bs-progress-height); + overflow: hidden; + font-size: var(--bs-progress-font-size); + background-color: var(--bs-progress-bg); + border-radius: var(--bs-progress-border-radius); +} + +.progress-bar { + display: flex; + flex-direction: column; + justify-content: center; + overflow: hidden; + color: var(--bs-progress-bar-color); + text-align: center; + white-space: nowrap; + background-color: var(--bs-progress-bar-bg); + transition: var(--bs-progress-bar-transition); +} +@media (prefers-reduced-motion: reduce) { + .progress-bar { + transition: none; + } +} + +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: var(--bs-progress-height) var(--bs-progress-height); +} + +.progress-stacked > .progress { + overflow: visible; +} + +.progress-stacked > .progress > .progress-bar { + width: 100%; +} + +.progress-bar-animated { + animation: 1s linear infinite progress-bar-stripes; +} +@media (prefers-reduced-motion: reduce) { + .progress-bar-animated { + animation: none; + } +} + +.list-group { + --bs-list-group-color: var(--bs-body-color); + --bs-list-group-bg: var(--bs-body-bg); + --bs-list-group-border-color: var(--bs-border-color); + --bs-list-group-border-width: var(--bs-border-width); + --bs-list-group-border-radius: var(--bs-border-radius); + --bs-list-group-item-padding-x: 1rem; + --bs-list-group-item-padding-y: 0.5rem; + --bs-list-group-action-color: var(--bs-secondary-color); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-tertiary-bg); + --bs-list-group-action-active-color: var(--bs-body-color); + --bs-list-group-action-active-bg: var(--bs-secondary-bg); + --bs-list-group-disabled-color: var(--bs-secondary-color); + --bs-list-group-disabled-bg: var(--bs-body-bg); + --bs-list-group-active-color: #fff; + --bs-list-group-active-bg: #0d6efd; + --bs-list-group-active-border-color: #0d6efd; + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + border-radius: var(--bs-list-group-border-radius); +} + +.list-group-numbered { + list-style-type: none; + counter-reset: section; +} +.list-group-numbered > .list-group-item::before { + content: counters(section, ".") ". "; + counter-increment: section; +} + +.list-group-item-action { + width: 100%; + color: var(--bs-list-group-action-color); + text-align: inherit; +} +.list-group-item-action:hover, .list-group-item-action:focus { + z-index: 1; + color: var(--bs-list-group-action-hover-color); + text-decoration: none; + background-color: var(--bs-list-group-action-hover-bg); +} +.list-group-item-action:active { + color: var(--bs-list-group-action-active-color); + background-color: var(--bs-list-group-action-active-bg); +} + +.list-group-item { + position: relative; + display: block; + padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x); + color: var(--bs-list-group-color); + text-decoration: none; + background-color: var(--bs-list-group-bg); + border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color); +} +.list-group-item:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} +.list-group-item:last-child { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; +} +.list-group-item.disabled, .list-group-item:disabled { + color: var(--bs-list-group-disabled-color); + pointer-events: none; + background-color: var(--bs-list-group-disabled-bg); +} +.list-group-item.active { + z-index: 2; + color: var(--bs-list-group-active-color); + background-color: var(--bs-list-group-active-bg); + border-color: var(--bs-list-group-active-border-color); +} +.list-group-item + .list-group-item { + border-top-width: 0; +} +.list-group-item + .list-group-item.active { + margin-top: calc(-1 * var(--bs-list-group-border-width)); + border-top-width: var(--bs-list-group-border-width); +} + +.list-group-horizontal { + flex-direction: row; +} +.list-group-horizontal > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; +} +.list-group-horizontal > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; +} +.list-group-horizontal > .list-group-item.active { + margin-top: 0; +} +.list-group-horizontal > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; +} +.list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); +} + +@media (min-width: 576px) { + .list-group-horizontal-sm { + flex-direction: row; + } + .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-sm > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} +@media (min-width: 768px) { + .list-group-horizontal-md { + flex-direction: row; + } + .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-md > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} +@media (min-width: 992px) { + .list-group-horizontal-lg { + flex-direction: row; + } + .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-lg > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} +@media (min-width: 1200px) { + .list-group-horizontal-xl { + flex-direction: row; + } + .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-xl > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} +@media (min-width: 1400px) { + .list-group-horizontal-xxl { + flex-direction: row; + } + .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-xxl > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xxl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} +.list-group-flush { + border-radius: 0; +} +.list-group-flush > .list-group-item { + border-width: 0 0 var(--bs-list-group-border-width); +} +.list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; +} + +.list-group-item-primary { + --bs-list-group-color: var(--bs-primary-text-emphasis); + --bs-list-group-bg: var(--bs-primary-bg-subtle); + --bs-list-group-border-color: var(--bs-primary-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-primary-border-subtle); + --bs-list-group-active-color: var(--bs-primary-bg-subtle); + --bs-list-group-active-bg: var(--bs-primary-text-emphasis); + --bs-list-group-active-border-color: var(--bs-primary-text-emphasis); +} + +.list-group-item-secondary { + --bs-list-group-color: var(--bs-secondary-text-emphasis); + --bs-list-group-bg: var(--bs-secondary-bg-subtle); + --bs-list-group-border-color: var(--bs-secondary-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-secondary-border-subtle); + --bs-list-group-active-color: var(--bs-secondary-bg-subtle); + --bs-list-group-active-bg: var(--bs-secondary-text-emphasis); + --bs-list-group-active-border-color: var(--bs-secondary-text-emphasis); +} + +.list-group-item-success { + --bs-list-group-color: var(--bs-success-text-emphasis); + --bs-list-group-bg: var(--bs-success-bg-subtle); + --bs-list-group-border-color: var(--bs-success-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-success-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-success-border-subtle); + --bs-list-group-active-color: var(--bs-success-bg-subtle); + --bs-list-group-active-bg: var(--bs-success-text-emphasis); + --bs-list-group-active-border-color: var(--bs-success-text-emphasis); +} + +.list-group-item-info { + --bs-list-group-color: var(--bs-info-text-emphasis); + --bs-list-group-bg: var(--bs-info-bg-subtle); + --bs-list-group-border-color: var(--bs-info-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-info-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-info-border-subtle); + --bs-list-group-active-color: var(--bs-info-bg-subtle); + --bs-list-group-active-bg: var(--bs-info-text-emphasis); + --bs-list-group-active-border-color: var(--bs-info-text-emphasis); +} + +.list-group-item-warning { + --bs-list-group-color: var(--bs-warning-text-emphasis); + --bs-list-group-bg: var(--bs-warning-bg-subtle); + --bs-list-group-border-color: var(--bs-warning-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-warning-border-subtle); + --bs-list-group-active-color: var(--bs-warning-bg-subtle); + --bs-list-group-active-bg: var(--bs-warning-text-emphasis); + --bs-list-group-active-border-color: var(--bs-warning-text-emphasis); +} + +.list-group-item-danger { + --bs-list-group-color: var(--bs-danger-text-emphasis); + --bs-list-group-bg: var(--bs-danger-bg-subtle); + --bs-list-group-border-color: var(--bs-danger-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-danger-border-subtle); + --bs-list-group-active-color: var(--bs-danger-bg-subtle); + --bs-list-group-active-bg: var(--bs-danger-text-emphasis); + --bs-list-group-active-border-color: var(--bs-danger-text-emphasis); +} + +.list-group-item-light { + --bs-list-group-color: var(--bs-light-text-emphasis); + --bs-list-group-bg: var(--bs-light-bg-subtle); + --bs-list-group-border-color: var(--bs-light-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-light-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-light-border-subtle); + --bs-list-group-active-color: var(--bs-light-bg-subtle); + --bs-list-group-active-bg: var(--bs-light-text-emphasis); + --bs-list-group-active-border-color: var(--bs-light-text-emphasis); +} + +.list-group-item-dark { + --bs-list-group-color: var(--bs-dark-text-emphasis); + --bs-list-group-bg: var(--bs-dark-bg-subtle); + --bs-list-group-border-color: var(--bs-dark-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-dark-border-subtle); + --bs-list-group-active-color: var(--bs-dark-bg-subtle); + --bs-list-group-active-bg: var(--bs-dark-text-emphasis); + --bs-list-group-active-border-color: var(--bs-dark-text-emphasis); +} + +.list-group-item-flixel-dark-blue { + --bs-list-group-color: var(--bs-flixel-dark-blue-text-emphasis); + --bs-list-group-bg: var(--bs-flixel-dark-blue-bg-subtle); + --bs-list-group-border-color: var(--bs-flixel-dark-blue-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-flixel-dark-blue-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-flixel-dark-blue-border-subtle); + --bs-list-group-active-color: var(--bs-flixel-dark-blue-bg-subtle); + --bs-list-group-active-bg: var(--bs-flixel-dark-blue-text-emphasis); + --bs-list-group-active-border-color: var(--bs-flixel-dark-blue-text-emphasis); +} + +.list-group-item-flixel-yellow { + --bs-list-group-color: var(--bs-flixel-yellow-text-emphasis); + --bs-list-group-bg: var(--bs-flixel-yellow-bg-subtle); + --bs-list-group-border-color: var(--bs-flixel-yellow-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-flixel-yellow-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-flixel-yellow-border-subtle); + --bs-list-group-active-color: var(--bs-flixel-yellow-bg-subtle); + --bs-list-group-active-bg: var(--bs-flixel-yellow-text-emphasis); + --bs-list-group-active-border-color: var(--bs-flixel-yellow-text-emphasis); +} + +.list-group-item-flixel-red { + --bs-list-group-color: var(--bs-flixel-red-text-emphasis); + --bs-list-group-bg: var(--bs-flixel-red-bg-subtle); + --bs-list-group-border-color: var(--bs-flixel-red-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-flixel-red-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-flixel-red-border-subtle); + --bs-list-group-active-color: var(--bs-flixel-red-bg-subtle); + --bs-list-group-active-bg: var(--bs-flixel-red-text-emphasis); + --bs-list-group-active-border-color: var(--bs-flixel-red-text-emphasis); +} + +.list-group-item-flixel-green { + --bs-list-group-color: var(--bs-flixel-green-text-emphasis); + --bs-list-group-bg: var(--bs-flixel-green-bg-subtle); + --bs-list-group-border-color: var(--bs-flixel-green-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-flixel-green-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-flixel-green-border-subtle); + --bs-list-group-active-color: var(--bs-flixel-green-bg-subtle); + --bs-list-group-active-bg: var(--bs-flixel-green-text-emphasis); + --bs-list-group-active-border-color: var(--bs-flixel-green-text-emphasis); +} + +.list-group-item-flixel-light-blue { + --bs-list-group-color: var(--bs-flixel-light-blue-text-emphasis); + --bs-list-group-bg: var(--bs-flixel-light-blue-bg-subtle); + --bs-list-group-border-color: var(--bs-flixel-light-blue-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-flixel-light-blue-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-flixel-light-blue-border-subtle); + --bs-list-group-active-color: var(--bs-flixel-light-blue-bg-subtle); + --bs-list-group-active-bg: var(--bs-flixel-light-blue-text-emphasis); + --bs-list-group-active-border-color: var(--bs-flixel-light-blue-text-emphasis); +} + +.btn-close { + --bs-btn-close-color: #000; + --bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e"); + --bs-btn-close-opacity: 0.5; + --bs-btn-close-hover-opacity: 0.75; + --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-btn-close-focus-opacity: 1; + --bs-btn-close-disabled-opacity: 0.25; + --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%); + box-sizing: content-box; + width: 1em; + height: 1em; + padding: 0.25em 0.25em; + color: var(--bs-btn-close-color); + background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat; + border: 0; + border-radius: 0.375rem; + opacity: var(--bs-btn-close-opacity); +} +.btn-close:hover { + color: var(--bs-btn-close-color); + text-decoration: none; + opacity: var(--bs-btn-close-hover-opacity); +} +.btn-close:focus { + outline: 0; + box-shadow: var(--bs-btn-close-focus-shadow); + opacity: var(--bs-btn-close-focus-opacity); +} +.btn-close:disabled, .btn-close.disabled { + pointer-events: none; + user-select: none; + opacity: var(--bs-btn-close-disabled-opacity); +} + +.btn-close-white { + filter: var(--bs-btn-close-white-filter); +} + +[data-bs-theme=dark] .btn-close { + filter: var(--bs-btn-close-white-filter); +} + +.toast { + --bs-toast-zindex: 1090; + --bs-toast-padding-x: 0.75rem; + --bs-toast-padding-y: 0.5rem; + --bs-toast-spacing: 1.5rem; + --bs-toast-max-width: 350px; + --bs-toast-font-size: 0.875rem; + --bs-toast-color: ; + --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85); + --bs-toast-border-width: var(--bs-border-width); + --bs-toast-border-color: var(--bs-border-color-translucent); + --bs-toast-border-radius: var(--bs-border-radius); + --bs-toast-box-shadow: var(--bs-box-shadow); + --bs-toast-header-color: var(--bs-secondary-color); + --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85); + --bs-toast-header-border-color: var(--bs-border-color-translucent); + width: var(--bs-toast-max-width); + max-width: 100%; + font-size: var(--bs-toast-font-size); + color: var(--bs-toast-color); + pointer-events: auto; + background-color: var(--bs-toast-bg); + background-clip: padding-box; + border: var(--bs-toast-border-width) solid var(--bs-toast-border-color); + box-shadow: var(--bs-toast-box-shadow); + border-radius: var(--bs-toast-border-radius); +} +.toast.showing { + opacity: 0; +} +.toast:not(.show) { + display: none; +} + +.toast-container { + --bs-toast-zindex: 1090; + position: absolute; + z-index: var(--bs-toast-zindex); + width: max-content; + max-width: 100%; + pointer-events: none; +} +.toast-container > :not(:last-child) { + margin-bottom: var(--bs-toast-spacing); +} + +.toast-header { + display: flex; + align-items: center; + padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x); + color: var(--bs-toast-header-color); + background-color: var(--bs-toast-header-bg); + background-clip: padding-box; + border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color); + border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); + border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); +} +.toast-header .btn-close { + margin-right: calc(-0.5 * var(--bs-toast-padding-x)); + margin-left: var(--bs-toast-padding-x); +} + +.toast-body { + padding: var(--bs-toast-padding-x); + word-wrap: break-word; +} + +.modal { + --bs-modal-zindex: 1055; + --bs-modal-width: 500px; + --bs-modal-padding: 1rem; + --bs-modal-margin: 0.5rem; + --bs-modal-color: ; + --bs-modal-bg: var(--bs-body-bg); + --bs-modal-border-color: var(--bs-border-color-translucent); + --bs-modal-border-width: var(--bs-border-width); + --bs-modal-border-radius: var(--bs-border-radius-lg); + --bs-modal-box-shadow: var(--bs-box-shadow-sm); + --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width))); + --bs-modal-header-padding-x: 1rem; + --bs-modal-header-padding-y: 1rem; + --bs-modal-header-padding: 1rem 1rem; + --bs-modal-header-border-color: var(--bs-border-color); + --bs-modal-header-border-width: var(--bs-border-width); + --bs-modal-title-line-height: 1.5; + --bs-modal-footer-gap: 0.5rem; + --bs-modal-footer-bg: ; + --bs-modal-footer-border-color: var(--bs-border-color); + --bs-modal-footer-border-width: var(--bs-border-width); + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-modal-zindex); + display: none; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + outline: 0; +} + +.modal-dialog { + position: relative; + width: auto; + margin: var(--bs-modal-margin); + pointer-events: none; +} +.modal.fade .modal-dialog { + transition: transform 0.3s ease-out; + transform: translate(0, -50px); +} +@media (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; + } +} +.modal.show .modal-dialog { + transform: none; +} +.modal.modal-static .modal-dialog { + transform: scale(1.02); +} + +.modal-dialog-scrollable { + height: calc(100% - var(--bs-modal-margin) * 2); +} +.modal-dialog-scrollable .modal-content { + max-height: 100%; + overflow: hidden; +} +.modal-dialog-scrollable .modal-body { + overflow-y: auto; +} + +.modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - var(--bs-modal-margin) * 2); +} + +.modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + color: var(--bs-modal-color); + pointer-events: auto; + background-color: var(--bs-modal-bg); + background-clip: padding-box; + border: var(--bs-modal-border-width) solid var(--bs-modal-border-color); + border-radius: var(--bs-modal-border-radius); + outline: 0; +} + +.modal-backdrop { + --bs-backdrop-zindex: 1050; + --bs-backdrop-bg: #000; + --bs-backdrop-opacity: 0.5; + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-backdrop-zindex); + width: 100vw; + height: 100vh; + background-color: var(--bs-backdrop-bg); +} +.modal-backdrop.fade { + opacity: 0; +} +.modal-backdrop.show { + opacity: var(--bs-backdrop-opacity); +} + +.modal-header { + display: flex; + flex-shrink: 0; + align-items: center; + padding: var(--bs-modal-header-padding); + border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color); + border-top-left-radius: var(--bs-modal-inner-border-radius); + border-top-right-radius: var(--bs-modal-inner-border-radius); +} +.modal-header .btn-close { + padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5); + margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto; +} + +.modal-title { + margin-bottom: 0; + line-height: var(--bs-modal-title-line-height); +} + +.modal-body { + position: relative; + flex: 1 1 auto; + padding: var(--bs-modal-padding); +} + +.modal-footer { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5); + background-color: var(--bs-modal-footer-bg); + border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color); + border-bottom-right-radius: var(--bs-modal-inner-border-radius); + border-bottom-left-radius: var(--bs-modal-inner-border-radius); +} +.modal-footer > * { + margin: calc(var(--bs-modal-footer-gap) * 0.5); +} + +@media (min-width: 576px) { + .modal { + --bs-modal-margin: 1.75rem; + --bs-modal-box-shadow: var(--bs-box-shadow); + } + .modal-dialog { + max-width: var(--bs-modal-width); + margin-right: auto; + margin-left: auto; + } + .modal-sm { + --bs-modal-width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg, + .modal-xl { + --bs-modal-width: 800px; + } +} +@media (min-width: 1200px) { + .modal-xl { + --bs-modal-width: 1140px; + } +} +.modal-fullscreen { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; +} +.modal-fullscreen .modal-content { + height: 100%; + border: 0; + border-radius: 0; +} +.modal-fullscreen .modal-header, +.modal-fullscreen .modal-footer { + border-radius: 0; +} +.modal-fullscreen .modal-body { + overflow-y: auto; +} + +@media (max-width: 575.98px) { + .modal-fullscreen-sm-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-sm-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-sm-down .modal-header, + .modal-fullscreen-sm-down .modal-footer { + border-radius: 0; + } + .modal-fullscreen-sm-down .modal-body { + overflow-y: auto; + } +} +@media (max-width: 767.98px) { + .modal-fullscreen-md-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-md-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-md-down .modal-header, + .modal-fullscreen-md-down .modal-footer { + border-radius: 0; + } + .modal-fullscreen-md-down .modal-body { + overflow-y: auto; + } +} +@media (max-width: 991.98px) { + .modal-fullscreen-lg-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-lg-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-lg-down .modal-header, + .modal-fullscreen-lg-down .modal-footer { + border-radius: 0; + } + .modal-fullscreen-lg-down .modal-body { + overflow-y: auto; + } +} +@media (max-width: 1199.98px) { + .modal-fullscreen-xl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-xl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-xl-down .modal-header, + .modal-fullscreen-xl-down .modal-footer { + border-radius: 0; + } + .modal-fullscreen-xl-down .modal-body { + overflow-y: auto; + } +} +@media (max-width: 1399.98px) { + .modal-fullscreen-xxl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-xxl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-xxl-down .modal-header, + .modal-fullscreen-xxl-down .modal-footer { + border-radius: 0; + } + .modal-fullscreen-xxl-down .modal-body { + overflow-y: auto; + } +} +.tooltip { + --bs-tooltip-zindex: 1080; + --bs-tooltip-max-width: 200px; + --bs-tooltip-padding-x: 0.5rem; + --bs-tooltip-padding-y: 0.25rem; + --bs-tooltip-margin: ; + --bs-tooltip-font-size: 0.875rem; + --bs-tooltip-color: var(--bs-body-bg); + --bs-tooltip-bg: var(--bs-emphasis-color); + --bs-tooltip-border-radius: var(--bs-border-radius); + --bs-tooltip-opacity: 0.9; + --bs-tooltip-arrow-width: 0.8rem; + --bs-tooltip-arrow-height: 0.4rem; + z-index: var(--bs-tooltip-zindex); + display: block; + margin: var(--bs-tooltip-margin); + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-tooltip-font-size); + word-wrap: break-word; + opacity: 0; +} +.tooltip.show { + opacity: var(--bs-tooltip-opacity); +} +.tooltip .tooltip-arrow { + display: block; + width: var(--bs-tooltip-arrow-width); + height: var(--bs-tooltip-arrow-height); +} +.tooltip .tooltip-arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow { + bottom: calc(-1 * var(--bs-tooltip-arrow-height)); +} +.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before { + top: -1px; + border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0; + border-top-color: var(--bs-tooltip-bg); +} + +/* rtl:begin:ignore */ +.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow { + left: calc(-1 * var(--bs-tooltip-arrow-height)); + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); +} +.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before { + right: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0; + border-right-color: var(--bs-tooltip-bg); +} + +/* rtl:end:ignore */ +.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow { + top: calc(-1 * var(--bs-tooltip-arrow-height)); +} +.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before { + bottom: -1px; + border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height); + border-bottom-color: var(--bs-tooltip-bg); +} + +/* rtl:begin:ignore */ +.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow { + right: calc(-1 * var(--bs-tooltip-arrow-height)); + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); +} +.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before { + left: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height); + border-left-color: var(--bs-tooltip-bg); +} + +/* rtl:end:ignore */ +.tooltip-inner { + max-width: var(--bs-tooltip-max-width); + padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x); + color: var(--bs-tooltip-color); + text-align: center; + background-color: var(--bs-tooltip-bg); + border-radius: var(--bs-tooltip-border-radius); +} + +.popover { + --bs-popover-zindex: 1070; + --bs-popover-max-width: 276px; + --bs-popover-font-size: 0.875rem; + --bs-popover-bg: var(--bs-body-bg); + --bs-popover-border-width: var(--bs-border-width); + --bs-popover-border-color: var(--bs-border-color-translucent); + --bs-popover-border-radius: var(--bs-border-radius-lg); + --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width)); + --bs-popover-box-shadow: var(--bs-box-shadow); + --bs-popover-header-padding-x: 1rem; + --bs-popover-header-padding-y: 0.5rem; + --bs-popover-header-font-size: 1rem; + --bs-popover-header-color: inherit; + --bs-popover-header-bg: var(--bs-secondary-bg); + --bs-popover-body-padding-x: 1rem; + --bs-popover-body-padding-y: 1rem; + --bs-popover-body-color: var(--bs-body-color); + --bs-popover-arrow-width: 1rem; + --bs-popover-arrow-height: 0.5rem; + --bs-popover-arrow-border: var(--bs-popover-border-color); + z-index: var(--bs-popover-zindex); + display: block; + max-width: var(--bs-popover-max-width); + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-popover-font-size); + word-wrap: break-word; + background-color: var(--bs-popover-bg); + background-clip: padding-box; + border: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-radius: var(--bs-popover-border-radius); +} +.popover .popover-arrow { + display: block; + width: var(--bs-popover-arrow-width); + height: var(--bs-popover-arrow-height); +} +.popover .popover-arrow::before, .popover .popover-arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; + border-width: 0; +} + +.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow { + bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); +} +.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0; +} +.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before { + bottom: 0; + border-top-color: var(--bs-popover-arrow-border); +} +.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + bottom: var(--bs-popover-border-width); + border-top-color: var(--bs-popover-bg); +} + +/* rtl:begin:ignore */ +.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow { + left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); +} +.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0; +} +.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before { + left: 0; + border-right-color: var(--bs-popover-arrow-border); +} +.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + left: var(--bs-popover-border-width); + border-right-color: var(--bs-popover-bg); +} + +/* rtl:end:ignore */ +.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow { + top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); +} +.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height); +} +.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before { + top: 0; + border-bottom-color: var(--bs-popover-arrow-border); +} +.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + top: var(--bs-popover-border-width); + border-bottom-color: var(--bs-popover-bg); +} +.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: var(--bs-popover-arrow-width); + margin-left: calc(-0.5 * var(--bs-popover-arrow-width)); + content: ""; + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg); +} + +/* rtl:begin:ignore */ +.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow { + right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); +} +.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height); +} +.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before { + right: 0; + border-left-color: var(--bs-popover-arrow-border); +} +.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + right: var(--bs-popover-border-width); + border-left-color: var(--bs-popover-bg); +} + +/* rtl:end:ignore */ +.popover-header { + padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x); + margin-bottom: 0; + font-size: var(--bs-popover-header-font-size); + color: var(--bs-popover-header-color); + background-color: var(--bs-popover-header-bg); + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-top-left-radius: var(--bs-popover-inner-border-radius); + border-top-right-radius: var(--bs-popover-inner-border-radius); +} +.popover-header:empty { + display: none; +} + +.popover-body { + padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x); + color: var(--bs-popover-body-color); +} + +.carousel { + position: relative; +} + +.carousel.pointer-event { + touch-action: pan-y; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner::after { + display: block; + clear: both; + content: ""; +} + +.carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + backface-visibility: hidden; + transition: transform 0.6s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; + } +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; +} + +.carousel-item-next:not(.carousel-item-start), +.active.carousel-item-end { + transform: translateX(100%); +} + +.carousel-item-prev:not(.carousel-item-end), +.active.carousel-item-start { + transform: translateX(-100%); +} + +.carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + transform: none; +} +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-start, +.carousel-fade .carousel-item-prev.carousel-item-end { + z-index: 1; + opacity: 1; +} +.carousel-fade .active.carousel-item-start, +.carousel-fade .active.carousel-item-end { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; +} +@media (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-start, + .carousel-fade .active.carousel-item-end { + transition: none; + } +} + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + padding: 0; + color: #fff; + text-align: center; + background: none; + border: 0; + opacity: 0.5; + transition: opacity 0.15s ease; +} +@media (prefers-reduced-motion: reduce) { + .carousel-control-prev, + .carousel-control-next { + transition: none; + } +} +.carousel-control-prev:hover, .carousel-control-prev:focus, +.carousel-control-next:hover, +.carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; +} + +.carousel-control-prev { + left: 0; +} + +.carousel-control-next { + right: 0; +} + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 2rem; + height: 2rem; + background-repeat: no-repeat; + background-position: 50%; + background-size: 100% 100%; +} + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")*/; +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")*/; +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 2; + display: flex; + justify-content: center; + padding: 0; + margin-right: 15%; + margin-bottom: 1rem; + margin-left: 15%; +} +.carousel-indicators [data-bs-target] { + box-sizing: content-box; + flex: 0 1 auto; + width: 30px; + height: 3px; + padding: 0; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border: 0; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: 0.5; + transition: opacity 0.6s ease; +} +@media (prefers-reduced-motion: reduce) { + .carousel-indicators [data-bs-target] { + transition: none; + } +} +.carousel-indicators .active { + opacity: 1; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 1.25rem; + left: 15%; + padding-top: 1.25rem; + padding-bottom: 1.25rem; + color: #fff; + text-align: center; +} + +.carousel-dark .carousel-control-prev-icon, +.carousel-dark .carousel-control-next-icon { + filter: invert(1) grayscale(100); +} +.carousel-dark .carousel-indicators [data-bs-target] { + background-color: #000; +} +.carousel-dark .carousel-caption { + color: #000; +} + +[data-bs-theme=dark] .carousel .carousel-control-prev-icon, +[data-bs-theme=dark] .carousel .carousel-control-next-icon, [data-bs-theme=dark].carousel .carousel-control-prev-icon, +[data-bs-theme=dark].carousel .carousel-control-next-icon { + filter: invert(1) grayscale(100); +} +[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target], [data-bs-theme=dark].carousel .carousel-indicators [data-bs-target] { + background-color: #000; +} +[data-bs-theme=dark] .carousel .carousel-caption, [data-bs-theme=dark].carousel .carousel-caption { + color: #000; +} + +.spinner-grow, +.spinner-border { + display: inline-block; + width: var(--bs-spinner-width); + height: var(--bs-spinner-height); + vertical-align: var(--bs-spinner-vertical-align); + border-radius: 50%; + animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name); +} + +@keyframes spinner-border { + to { + transform: rotate(360deg) /* rtl:ignore */; + } +} +.spinner-border { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-border-width: 0.25em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-border; + border: var(--bs-spinner-border-width) solid currentcolor; + border-right-color: transparent; +} + +.spinner-border-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; + --bs-spinner-border-width: 0.2em; +} + +@keyframes spinner-grow { + 0% { + transform: scale(0); + } + 50% { + opacity: 1; + transform: none; + } +} +.spinner-grow { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-grow; + background-color: currentcolor; + opacity: 0; +} + +.spinner-grow-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; +} + +@media (prefers-reduced-motion: reduce) { + .spinner-border, + .spinner-grow { + --bs-spinner-animation-speed: 1.5s; + } +} +.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm { + --bs-offcanvas-zindex: 1045; + --bs-offcanvas-width: 400px; + --bs-offcanvas-height: 30vh; + --bs-offcanvas-padding-x: 1rem; + --bs-offcanvas-padding-y: 1rem; + --bs-offcanvas-color: var(--bs-body-color); + --bs-offcanvas-bg: var(--bs-body-bg); + --bs-offcanvas-border-width: var(--bs-border-width); + --bs-offcanvas-border-color: var(--bs-border-color-translucent); + --bs-offcanvas-box-shadow: var(--bs-box-shadow-sm); + --bs-offcanvas-transition: transform 0.3s ease-in-out; + --bs-offcanvas-title-line-height: 1.5; +} + +@media (max-width: 575.98px) { + .offcanvas-sm { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: var(--bs-offcanvas-transition); + } +} +@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-sm { + transition: none; + } +} +@media (max-width: 575.98px) { + .offcanvas-sm.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } + .offcanvas-sm.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } + .offcanvas-sm.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } + .offcanvas-sm.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } + .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) { + transform: none; + } + .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show { + visibility: visible; + } +} +@media (min-width: 576px) { + .offcanvas-sm { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + .offcanvas-sm .offcanvas-header { + display: none; + } + .offcanvas-sm .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 767.98px) { + .offcanvas-md { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: var(--bs-offcanvas-transition); + } +} +@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-md { + transition: none; + } +} +@media (max-width: 767.98px) { + .offcanvas-md.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } + .offcanvas-md.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } + .offcanvas-md.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } + .offcanvas-md.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } + .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) { + transform: none; + } + .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show { + visibility: visible; + } +} +@media (min-width: 768px) { + .offcanvas-md { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + .offcanvas-md .offcanvas-header { + display: none; + } + .offcanvas-md .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 991.98px) { + .offcanvas-lg { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: var(--bs-offcanvas-transition); + } +} +@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-lg { + transition: none; + } +} +@media (max-width: 991.98px) { + .offcanvas-lg.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } + .offcanvas-lg.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } + .offcanvas-lg.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } + .offcanvas-lg.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } + .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) { + transform: none; + } + .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show { + visibility: visible; + } +} +@media (min-width: 992px) { + .offcanvas-lg { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + .offcanvas-lg .offcanvas-header { + display: none; + } + .offcanvas-lg .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 1199.98px) { + .offcanvas-xl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: var(--bs-offcanvas-transition); + } +} +@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-xl { + transition: none; + } +} +@media (max-width: 1199.98px) { + .offcanvas-xl.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } + .offcanvas-xl.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } + .offcanvas-xl.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } + .offcanvas-xl.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } + .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) { + transform: none; + } + .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show { + visibility: visible; + } +} +@media (min-width: 1200px) { + .offcanvas-xl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + .offcanvas-xl .offcanvas-header { + display: none; + } + .offcanvas-xl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 1399.98px) { + .offcanvas-xxl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: var(--bs-offcanvas-transition); + } +} +@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-xxl { + transition: none; + } +} +@media (max-width: 1399.98px) { + .offcanvas-xxl.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } + .offcanvas-xxl.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } + .offcanvas-xxl.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } + .offcanvas-xxl.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } + .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) { + transform: none; + } + .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show { + visibility: visible; + } +} +@media (min-width: 1400px) { + .offcanvas-xxl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + .offcanvas-xxl .offcanvas-header { + display: none; + } + .offcanvas-xxl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +.offcanvas { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: var(--bs-offcanvas-transition); +} +@media (prefers-reduced-motion: reduce) { + .offcanvas { + transition: none; + } +} +.offcanvas.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); +} +.offcanvas.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); +} +.offcanvas.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); +} +.offcanvas.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); +} +.offcanvas.showing, .offcanvas.show:not(.hiding) { + transform: none; +} +.offcanvas.showing, .offcanvas.hiding, .offcanvas.show { + visibility: visible; +} + +.offcanvas-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; +} +.offcanvas-backdrop.fade { + opacity: 0; +} +.offcanvas-backdrop.show { + opacity: 0.5; +} + +.offcanvas-header { + display: flex; + align-items: center; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); +} +.offcanvas-header .btn-close { + padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5); + margin: calc(-0.5 * var(--bs-offcanvas-padding-y)) calc(-0.5 * var(--bs-offcanvas-padding-x)) calc(-0.5 * var(--bs-offcanvas-padding-y)) auto; +} + +.offcanvas-title { + margin-bottom: 0; + line-height: var(--bs-offcanvas-title-line-height); +} + +.offcanvas-body { + flex-grow: 1; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); + overflow-y: auto; +} + +.placeholder { + display: inline-block; + min-height: 1em; + vertical-align: middle; + cursor: wait; + background-color: currentcolor; + opacity: 0.5; +} +.placeholder.btn::before { + display: inline-block; + content: ""; +} + +.placeholder-xs { + min-height: 0.6em; +} + +.placeholder-sm { + min-height: 0.8em; +} + +.placeholder-lg { + min-height: 1.2em; +} + +.placeholder-glow .placeholder { + animation: placeholder-glow 2s ease-in-out infinite; +} + +@keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} +.placeholder-wave { + mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + mask-size: 200% 100%; + animation: placeholder-wave 2s linear infinite; +} + +@keyframes placeholder-wave { + 100% { + mask-position: -200% 0%; + } +} +.clearfix::after { + display: block; + clear: both; + content: ""; +} + +.text-bg-primary { + color: #fff !important; + background-color: RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-secondary { + color: #fff !important; + background-color: RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-success { + color: #fff !important; + background-color: RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-info { + color: #000 !important; + background-color: RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-warning { + color: #000 !important; + background-color: RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-danger { + color: #fff !important; + background-color: RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-light { + color: #000 !important; + background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-dark { + color: #fff !important; + background-color: RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-flixel-dark-blue { + color: #fff !important; + background-color: RGBA(var(--bs-flixel-dark-blue-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-flixel-yellow { + color: #000 !important; + background-color: RGBA(var(--bs-flixel-yellow-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-flixel-red { + color: #000 !important; + background-color: RGBA(var(--bs-flixel-red-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-flixel-green { + color: #000 !important; + background-color: RGBA(var(--bs-flixel-green-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-flixel-light-blue { + color: #000 !important; + background-color: RGBA(var(--bs-flixel-light-blue-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.link-primary { + color: RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-primary:hover, .link-primary:focus { + color: RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-secondary { + color: RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-secondary:hover, .link-secondary:focus { + color: RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-success { + color: RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-success:hover, .link-success:focus { + color: RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-info { + color: RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-info:hover, .link-info:focus { + color: RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-warning { + color: RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-warning:hover, .link-warning:focus { + color: RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-danger { + color: RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-danger:hover, .link-danger:focus { + color: RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-light { + color: RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-light:hover, .link-light:focus { + color: RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-dark { + color: RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-dark:hover, .link-dark:focus { + color: RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-flixel-dark-blue { + color: RGBA(var(--bs-flixel-dark-blue-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-flixel-dark-blue-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-flixel-dark-blue:hover, .link-flixel-dark-blue:focus { + color: RGBA(47, 54, 204, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(47, 54, 204, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-flixel-yellow { + color: RGBA(var(--bs-flixel-yellow-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-flixel-yellow-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-flixel-yellow:hover, .link-flixel-yellow:focus { + color: RGBA(255, 204, 95, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(255, 204, 95, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-flixel-red { + color: RGBA(var(--bs-flixel-red-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-flixel-red-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-flixel-red:hover, .link-flixel-red:focus { + color: RGBA(255, 79, 107, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(255, 79, 107, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-flixel-green { + color: RGBA(var(--bs-flixel-green-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-flixel-green-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-flixel-green:hover, .link-flixel-green:focus { + color: RGBA(51, 199, 85, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(51, 199, 85, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-flixel-light-blue { + color: RGBA(var(--bs-flixel-light-blue-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-flixel-light-blue-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-flixel-light-blue:hover, .link-flixel-light-blue:focus { + color: RGBA(60, 211, 255, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(60, 211, 255, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-body-emphasis { + color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-body-emphasis:hover, .link-body-emphasis:focus { + color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important; + text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important; +} + +.focus-ring:focus { + outline: 0; + box-shadow: var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color); +} + +.icon-link { + display: inline-flex; + gap: 0.375rem; + align-items: center; + text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5)); + text-underline-offset: 0.25em; + backface-visibility: hidden; +} +.icon-link > .bi { + flex-shrink: 0; + width: 1em; + height: 1em; + fill: currentcolor; + transition: 0.2s ease-in-out transform; +} +@media (prefers-reduced-motion: reduce) { + .icon-link > .bi { + transition: none; + } +} + +.icon-link-hover:hover > .bi, .icon-link-hover:focus-visible > .bi { + transform: var(--bs-icon-link-transform, translate3d(0.25em, 0, 0)); +} + +.ratio { + position: relative; + width: 100%; +} +.ratio::before { + display: block; + padding-top: var(--bs-aspect-ratio); + content: ""; +} +.ratio > * { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.ratio-1x1 { + --bs-aspect-ratio: 100%; +} + +.ratio-4x3 { + --bs-aspect-ratio: 75%; +} + +.ratio-16x9 { + --bs-aspect-ratio: 56.25%; +} + +.ratio-21x9 { + --bs-aspect-ratio: 42.8571428571%; +} + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} + +.sticky-top { + position: sticky; + top: 0; + z-index: 1020; +} + +.sticky-bottom { + position: sticky; + bottom: 0; + z-index: 1020; +} + +@media (min-width: 576px) { + .sticky-sm-top { + position: sticky; + top: 0; + z-index: 1020; + } + .sticky-sm-bottom { + position: sticky; + bottom: 0; + z-index: 1020; + } +} +@media (min-width: 768px) { + .sticky-md-top { + position: sticky; + top: 0; + z-index: 1020; + } + .sticky-md-bottom { + position: sticky; + bottom: 0; + z-index: 1020; + } +} +@media (min-width: 992px) { + .sticky-lg-top { + position: sticky; + top: 0; + z-index: 1020; + } + .sticky-lg-bottom { + position: sticky; + bottom: 0; + z-index: 1020; + } +} +@media (min-width: 1200px) { + .sticky-xl-top { + position: sticky; + top: 0; + z-index: 1020; + } + .sticky-xl-bottom { + position: sticky; + bottom: 0; + z-index: 1020; + } +} +@media (min-width: 1400px) { + .sticky-xxl-top { + position: sticky; + top: 0; + z-index: 1020; + } + .sticky-xxl-bottom { + position: sticky; + bottom: 0; + z-index: 1020; + } +} +.hstack { + display: flex; + flex-direction: row; + align-items: center; + align-self: stretch; +} + +.vstack { + display: flex; + flex: 1 1 auto; + flex-direction: column; + align-self: stretch; +} + +.visually-hidden, +.visually-hidden-focusable:not(:focus):not(:focus-within) { + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; +} +.visually-hidden:not(caption), +.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) { + position: absolute !important; +} + +.stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + content: ""; +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.vr { + display: inline-block; + align-self: stretch; + width: var(--bs-border-width); + min-height: 1em; + background-color: currentcolor; + opacity: 0.25; +} + +.align-baseline { + vertical-align: baseline !important; +} + +.align-top { + vertical-align: top !important; +} + +.align-middle { + vertical-align: middle !important; +} + +.align-bottom { + vertical-align: bottom !important; +} + +.align-text-bottom { + vertical-align: text-bottom !important; +} + +.align-text-top { + vertical-align: text-top !important; +} + +.float-start { + float: left !important; +} + +.float-end { + float: right !important; +} + +.float-none { + float: none !important; +} + +.object-fit-contain { + object-fit: contain !important; +} + +.object-fit-cover { + object-fit: cover !important; +} + +.object-fit-fill { + object-fit: fill !important; +} + +.object-fit-scale { + object-fit: scale-down !important; +} + +.object-fit-none { + object-fit: none !important; +} + +.opacity-0 { + opacity: 0 !important; +} + +.opacity-25 { + opacity: 0.25 !important; +} + +.opacity-50 { + opacity: 0.5 !important; +} + +.opacity-75 { + opacity: 0.75 !important; +} + +.opacity-100 { + opacity: 1 !important; +} + +.overflow-auto { + overflow: auto !important; +} + +.overflow-hidden { + overflow: hidden !important; +} + +.overflow-visible { + overflow: visible !important; +} + +.overflow-scroll { + overflow: scroll !important; +} + +.overflow-x-auto { + overflow-x: auto !important; +} + +.overflow-x-hidden { + overflow-x: hidden !important; +} + +.overflow-x-visible { + overflow-x: visible !important; +} + +.overflow-x-scroll { + overflow-x: scroll !important; +} + +.overflow-y-auto { + overflow-y: auto !important; +} + +.overflow-y-hidden { + overflow-y: hidden !important; +} + +.overflow-y-visible { + overflow-y: visible !important; +} + +.overflow-y-scroll { + overflow-y: scroll !important; +} + +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-grid { + display: grid !important; +} + +.d-inline-grid { + display: inline-grid !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: flex !important; +} + +.d-inline-flex { + display: inline-flex !important; +} + +.d-none { + display: none !important; +} + +.shadow { + box-shadow: var(--bs-box-shadow) !important; +} + +.shadow-sm { + box-shadow: var(--bs-box-shadow-sm) !important; +} + +.shadow-lg { + box-shadow: var(--bs-box-shadow-lg) !important; +} + +.shadow-none { + box-shadow: none !important; +} + +.focus-ring-primary { + --bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity)); +} + +.focus-ring-secondary { + --bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity)); +} + +.focus-ring-success { + --bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity)); +} + +.focus-ring-info { + --bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity)); +} + +.focus-ring-warning { + --bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity)); +} + +.focus-ring-danger { + --bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity)); +} + +.focus-ring-light { + --bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity)); +} + +.focus-ring-dark { + --bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity)); +} + +.focus-ring-flixel-dark-blue { + --bs-focus-ring-color: rgba(var(--bs-flixel-dark-blue-rgb), var(--bs-focus-ring-opacity)); +} + +.focus-ring-flixel-yellow { + --bs-focus-ring-color: rgba(var(--bs-flixel-yellow-rgb), var(--bs-focus-ring-opacity)); +} + +.focus-ring-flixel-red { + --bs-focus-ring-color: rgba(var(--bs-flixel-red-rgb), var(--bs-focus-ring-opacity)); +} + +.focus-ring-flixel-green { + --bs-focus-ring-color: rgba(var(--bs-flixel-green-rgb), var(--bs-focus-ring-opacity)); +} + +.focus-ring-flixel-light-blue { + --bs-focus-ring-color: rgba(var(--bs-flixel-light-blue-rgb), var(--bs-focus-ring-opacity)); +} + +.position-static { + position: static !important; +} + +.position-relative { + position: relative !important; +} + +.position-absolute { + position: absolute !important; +} + +.position-fixed { + position: fixed !important; +} + +.position-sticky { + position: sticky !important; +} + +.top-0 { + top: 0 !important; +} + +.top-50 { + top: 50% !important; +} + +.top-100 { + top: 100% !important; +} + +.bottom-0 { + bottom: 0 !important; +} + +.bottom-50 { + bottom: 50% !important; +} + +.bottom-100 { + bottom: 100% !important; +} + +.start-0 { + left: 0 !important; +} + +.start-50 { + left: 50% !important; +} + +.start-100 { + left: 100% !important; +} + +.end-0 { + right: 0 !important; +} + +.end-50 { + right: 50% !important; +} + +.end-100 { + right: 100% !important; +} + +.translate-middle { + transform: translate(-50%, -50%) !important; +} + +.translate-middle-x { + transform: translateX(-50%) !important; +} + +.translate-middle-y { + transform: translateY(-50%) !important; +} + +.border { + border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.border-0 { + border: 0 !important; +} + +.border-top { + border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.border-top-0 { + border-top: 0 !important; +} + +.border-end { + border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.border-end-0 { + border-right: 0 !important; +} + +.border-bottom { + border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.border-bottom-0 { + border-bottom: 0 !important; +} + +.border-start { + border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.border-start-0 { + border-left: 0 !important; +} + +.border-primary { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important; +} + +.border-secondary { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important; +} + +.border-success { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important; +} + +.border-info { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important; +} + +.border-warning { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important; +} + +.border-danger { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important; +} + +.border-light { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important; +} + +.border-dark { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important; +} + +.border-flixel-dark-blue { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-flixel-dark-blue-rgb), var(--bs-border-opacity)) !important; +} + +.border-flixel-yellow { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-flixel-yellow-rgb), var(--bs-border-opacity)) !important; +} + +.border-flixel-red { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-flixel-red-rgb), var(--bs-border-opacity)) !important; +} + +.border-flixel-green { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-flixel-green-rgb), var(--bs-border-opacity)) !important; +} + +.border-flixel-light-blue { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-flixel-light-blue-rgb), var(--bs-border-opacity)) !important; +} + +.border-black { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important; +} + +.border-white { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important; +} + +.border-primary-subtle { + border-color: var(--bs-primary-border-subtle) !important; +} + +.border-secondary-subtle { + border-color: var(--bs-secondary-border-subtle) !important; +} + +.border-success-subtle { + border-color: var(--bs-success-border-subtle) !important; +} + +.border-info-subtle { + border-color: var(--bs-info-border-subtle) !important; +} + +.border-warning-subtle { + border-color: var(--bs-warning-border-subtle) !important; +} + +.border-danger-subtle { + border-color: var(--bs-danger-border-subtle) !important; +} + +.border-light-subtle { + border-color: var(--bs-light-border-subtle) !important; +} + +.border-dark-subtle { + border-color: var(--bs-dark-border-subtle) !important; +} + +.border-1 { + border-width: 1px !important; +} + +.border-2 { + border-width: 2px !important; +} + +.border-3 { + border-width: 3px !important; +} + +.border-4 { + border-width: 4px !important; +} + +.border-5 { + border-width: 5px !important; +} + +.border-opacity-10 { + --bs-border-opacity: 0.1; +} + +.border-opacity-25 { + --bs-border-opacity: 0.25; +} + +.border-opacity-50 { + --bs-border-opacity: 0.5; +} + +.border-opacity-75 { + --bs-border-opacity: 0.75; +} + +.border-opacity-100 { + --bs-border-opacity: 1; +} + +.w-25 { + width: 25% !important; +} + +.w-50 { + width: 50% !important; +} + +.w-75 { + width: 75% !important; +} + +.w-100 { + width: 100% !important; +} + +.w-auto { + width: auto !important; +} + +.mw-100 { + max-width: 100% !important; +} + +.vw-100 { + width: 100vw !important; +} + +.min-vw-100 { + min-width: 100vw !important; +} + +.h-25 { + height: 25% !important; +} + +.h-50 { + height: 50% !important; +} + +.h-75 { + height: 75% !important; +} + +.h-100 { + height: 100% !important; +} + +.h-auto { + height: auto !important; +} + +.mh-100 { + max-height: 100% !important; +} + +.vh-100 { + height: 100vh !important; +} + +.min-vh-100 { + min-height: 100vh !important; +} + +.flex-fill { + flex: 1 1 auto !important; +} + +.flex-row { + flex-direction: row !important; +} + +.flex-column { + flex-direction: column !important; +} + +.flex-row-reverse { + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + flex-direction: column-reverse !important; +} + +.flex-grow-0 { + flex-grow: 0 !important; +} + +.flex-grow-1 { + flex-grow: 1 !important; +} + +.flex-shrink-0 { + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + flex-shrink: 1 !important; +} + +.flex-wrap { + flex-wrap: wrap !important; +} + +.flex-nowrap { + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} + +.justify-content-start { + justify-content: flex-start !important; +} + +.justify-content-end { + justify-content: flex-end !important; +} + +.justify-content-center { + justify-content: center !important; +} + +.justify-content-between { + justify-content: space-between !important; +} + +.justify-content-around { + justify-content: space-around !important; +} + +.justify-content-evenly { + justify-content: space-evenly !important; +} + +.align-items-start { + align-items: flex-start !important; +} + +.align-items-end { + align-items: flex-end !important; +} + +.align-items-center { + align-items: center !important; +} + +.align-items-baseline { + align-items: baseline !important; +} + +.align-items-stretch { + align-items: stretch !important; +} + +.align-content-start { + align-content: flex-start !important; +} + +.align-content-end { + align-content: flex-end !important; +} + +.align-content-center { + align-content: center !important; +} + +.align-content-between { + align-content: space-between !important; +} + +.align-content-around { + align-content: space-around !important; +} + +.align-content-stretch { + align-content: stretch !important; +} + +.align-self-auto { + align-self: auto !important; +} + +.align-self-start { + align-self: flex-start !important; +} + +.align-self-end { + align-self: flex-end !important; +} + +.align-self-center { + align-self: center !important; +} + +.align-self-baseline { + align-self: baseline !important; +} + +.align-self-stretch { + align-self: stretch !important; +} + +.order-first { + order: -1 !important; +} + +.order-0 { + order: 0 !important; +} + +.order-1 { + order: 1 !important; +} + +.order-2 { + order: 2 !important; +} + +.order-3 { + order: 3 !important; +} + +.order-4 { + order: 4 !important; +} + +.order-5 { + order: 5 !important; +} + +.order-last { + order: 6 !important; +} + +.m-0 { + margin: 0 !important; +} + +.m-1 { + margin: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem !important; +} + +.m-3 { + margin: 1rem !important; +} + +.m-4 { + margin: 1.5rem !important; +} + +.m-5 { + margin: 3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} + +.mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} + +.mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} + +.mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} + +.mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} + +.mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} + +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} + +.my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +.my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} + +.mt-0 { + margin-top: 0 !important; +} + +.mt-1 { + margin-top: 0.25rem !important; +} + +.mt-2 { + margin-top: 0.5rem !important; +} + +.mt-3 { + margin-top: 1rem !important; +} + +.mt-4 { + margin-top: 1.5rem !important; +} + +.mt-5 { + margin-top: 3rem !important; +} + +.mt-auto { + margin-top: auto !important; +} + +.me-0 { + margin-right: 0 !important; +} + +.me-1 { + margin-right: 0.25rem !important; +} + +.me-2 { + margin-right: 0.5rem !important; +} + +.me-3 { + margin-right: 1rem !important; +} + +.me-4 { + margin-right: 1.5rem !important; +} + +.me-5 { + margin-right: 3rem !important; +} + +.me-auto { + margin-right: auto !important; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.mb-1 { + margin-bottom: 0.25rem !important; +} + +.mb-2 { + margin-bottom: 0.5rem !important; +} + +.mb-3 { + margin-bottom: 1rem !important; +} + +.mb-4 { + margin-bottom: 1.5rem !important; +} + +.mb-5 { + margin-bottom: 3rem !important; +} + +.mb-auto { + margin-bottom: auto !important; +} + +.ms-0 { + margin-left: 0 !important; +} + +.ms-1 { + margin-left: 0.25rem !important; +} + +.ms-2 { + margin-left: 0.5rem !important; +} + +.ms-3 { + margin-left: 1rem !important; +} + +.ms-4 { + margin-left: 1.5rem !important; +} + +.ms-5 { + margin-left: 3rem !important; +} + +.ms-auto { + margin-left: auto !important; +} + +.p-0 { + padding: 0 !important; +} + +.p-1 { + padding: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem !important; +} + +.p-3 { + padding: 1rem !important; +} + +.p-4 { + padding: 1.5rem !important; +} + +.p-5 { + padding: 3rem !important; +} + +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} + +.px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} + +.px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} + +.px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} + +.px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} + +.px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} + +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} + +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.pt-0 { + padding-top: 0 !important; +} + +.pt-1 { + padding-top: 0.25rem !important; +} + +.pt-2 { + padding-top: 0.5rem !important; +} + +.pt-3 { + padding-top: 1rem !important; +} + +.pt-4 { + padding-top: 1.5rem !important; +} + +.pt-5 { + padding-top: 3rem !important; +} + +.pe-0 { + padding-right: 0 !important; +} + +.pe-1 { + padding-right: 0.25rem !important; +} + +.pe-2 { + padding-right: 0.5rem !important; +} + +.pe-3 { + padding-right: 1rem !important; +} + +.pe-4 { + padding-right: 1.5rem !important; +} + +.pe-5 { + padding-right: 3rem !important; +} + +.pb-0 { + padding-bottom: 0 !important; +} + +.pb-1 { + padding-bottom: 0.25rem !important; +} + +.pb-2 { + padding-bottom: 0.5rem !important; +} + +.pb-3 { + padding-bottom: 1rem !important; +} + +.pb-4 { + padding-bottom: 1.5rem !important; +} + +.pb-5 { + padding-bottom: 3rem !important; +} + +.ps-0 { + padding-left: 0 !important; +} + +.ps-1 { + padding-left: 0.25rem !important; +} + +.ps-2 { + padding-left: 0.5rem !important; +} + +.ps-3 { + padding-left: 1rem !important; +} + +.ps-4 { + padding-left: 1.5rem !important; +} + +.ps-5 { + padding-left: 3rem !important; +} + +.gap-0 { + gap: 0 !important; +} + +.gap-1 { + gap: 0.25rem !important; +} + +.gap-2 { + gap: 0.5rem !important; +} + +.gap-3 { + gap: 1rem !important; +} + +.gap-4 { + gap: 1.5rem !important; +} + +.gap-5 { + gap: 3rem !important; +} + +.row-gap-0 { + row-gap: 0 !important; +} + +.row-gap-1 { + row-gap: 0.25rem !important; +} + +.row-gap-2 { + row-gap: 0.5rem !important; +} + +.row-gap-3 { + row-gap: 1rem !important; +} + +.row-gap-4 { + row-gap: 1.5rem !important; +} + +.row-gap-5 { + row-gap: 3rem !important; +} + +.column-gap-0 { + column-gap: 0 !important; +} + +.column-gap-1 { + column-gap: 0.25rem !important; +} + +.column-gap-2 { + column-gap: 0.5rem !important; +} + +.column-gap-3 { + column-gap: 1rem !important; +} + +.column-gap-4 { + column-gap: 1.5rem !important; +} + +.column-gap-5 { + column-gap: 3rem !important; +} + +.font-monospace { + font-family: var(--bs-font-monospace) !important; +} + +.fs-1 { + font-size: calc(1.375rem + 1.5vw) !important; +} + +.fs-2 { + font-size: calc(1.325rem + 0.9vw) !important; +} + +.fs-3 { + font-size: calc(1.3rem + 0.6vw) !important; +} + +.fs-4 { + font-size: calc(1.275rem + 0.3vw) !important; +} + +.fs-5 { + font-size: 1.25rem !important; +} + +.fs-6 { + font-size: 1rem !important; +} + +.fst-italic { + font-style: italic !important; +} + +.fst-normal { + font-style: normal !important; +} + +.fw-lighter { + font-weight: lighter !important; +} + +.fw-light { + font-weight: 300 !important; +} + +.fw-normal { + font-weight: 400 !important; +} + +.fw-medium { + font-weight: 500 !important; +} + +.fw-semibold { + font-weight: 600 !important; +} + +.fw-bold { + font-weight: 700 !important; +} + +.fw-bolder { + font-weight: bolder !important; +} + +.lh-1 { + line-height: 1 !important; +} + +.lh-sm { + line-height: 1.25 !important; +} + +.lh-base { + line-height: 1.5 !important; +} + +.lh-lg { + line-height: 2 !important; +} + +.text-start { + text-align: left !important; +} + +.text-end { + text-align: right !important; +} + +.text-center { + text-align: center !important; +} + +.text-decoration-none { + text-decoration: none !important; +} + +.text-decoration-underline { + text-decoration: underline !important; +} + +.text-decoration-line-through { + text-decoration: line-through !important; +} + +.text-lowercase { + text-transform: lowercase !important; +} + +.text-uppercase { + text-transform: uppercase !important; +} + +.text-capitalize { + text-transform: capitalize !important; +} + +.text-wrap { + white-space: normal !important; +} + +.text-nowrap { + white-space: nowrap !important; +} + +/* rtl:begin:remove */ +.text-break { + word-wrap: break-word !important; + word-break: break-word !important; +} + +/* rtl:end:remove */ +.text-primary { + --bs-text-opacity: 1; + color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important; +} + +.text-secondary { + --bs-text-opacity: 1; + color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important; +} + +.text-success { + --bs-text-opacity: 1; + color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important; +} + +.text-info { + --bs-text-opacity: 1; + color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important; +} + +.text-warning { + --bs-text-opacity: 1; + color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important; +} + +.text-danger { + --bs-text-opacity: 1; + color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important; +} + +.text-light { + --bs-text-opacity: 1; + color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important; +} + +.text-dark { + --bs-text-opacity: 1; + color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important; +} + +.text-flixel-dark-blue { + --bs-text-opacity: 1; + color: rgba(var(--bs-flixel-dark-blue-rgb), var(--bs-text-opacity)) !important; +} + +.text-flixel-yellow { + --bs-text-opacity: 1; + color: rgba(var(--bs-flixel-yellow-rgb), var(--bs-text-opacity)) !important; +} + +.text-flixel-red { + --bs-text-opacity: 1; + color: rgba(var(--bs-flixel-red-rgb), var(--bs-text-opacity)) !important; +} + +.text-flixel-green { + --bs-text-opacity: 1; + color: rgba(var(--bs-flixel-green-rgb), var(--bs-text-opacity)) !important; +} + +.text-flixel-light-blue { + --bs-text-opacity: 1; + color: rgba(var(--bs-flixel-light-blue-rgb), var(--bs-text-opacity)) !important; +} + +.text-black { + --bs-text-opacity: 1; + color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important; +} + +.text-white { + --bs-text-opacity: 1; + color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important; +} + +.text-body { + --bs-text-opacity: 1; + color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important; +} + +.text-muted { + --bs-text-opacity: 1; + color: var(--bs-secondary-color) !important; +} + +.text-black-50 { + --bs-text-opacity: 1; + color: rgba(0, 0, 0, 0.5) !important; +} + +.text-white-50 { + --bs-text-opacity: 1; + color: rgba(255, 255, 255, 0.5) !important; +} + +.text-body-secondary { + --bs-text-opacity: 1; + color: var(--bs-secondary-color) !important; +} + +.text-body-tertiary { + --bs-text-opacity: 1; + color: var(--bs-tertiary-color) !important; +} + +.text-body-emphasis { + --bs-text-opacity: 1; + color: var(--bs-emphasis-color) !important; +} + +.text-reset { + --bs-text-opacity: 1; + color: inherit !important; +} + +.text-opacity-25 { + --bs-text-opacity: 0.25; +} + +.text-opacity-50 { + --bs-text-opacity: 0.5; +} + +.text-opacity-75 { + --bs-text-opacity: 0.75; +} + +.text-opacity-100 { + --bs-text-opacity: 1; +} + +.text-primary-emphasis { + color: var(--bs-primary-text-emphasis) !important; +} + +.text-secondary-emphasis { + color: var(--bs-secondary-text-emphasis) !important; +} + +.text-success-emphasis { + color: var(--bs-success-text-emphasis) !important; +} + +.text-info-emphasis { + color: var(--bs-info-text-emphasis) !important; +} + +.text-warning-emphasis { + color: var(--bs-warning-text-emphasis) !important; +} + +.text-danger-emphasis { + color: var(--bs-danger-text-emphasis) !important; +} + +.text-light-emphasis { + color: var(--bs-light-text-emphasis) !important; +} + +.text-dark-emphasis { + color: var(--bs-dark-text-emphasis) !important; +} + +.link-opacity-10 { + --bs-link-opacity: 0.1; +} + +.link-opacity-10-hover:hover { + --bs-link-opacity: 0.1; +} + +.link-opacity-25 { + --bs-link-opacity: 0.25; +} + +.link-opacity-25-hover:hover { + --bs-link-opacity: 0.25; +} + +.link-opacity-50 { + --bs-link-opacity: 0.5; +} + +.link-opacity-50-hover:hover { + --bs-link-opacity: 0.5; +} + +.link-opacity-75 { + --bs-link-opacity: 0.75; +} + +.link-opacity-75-hover:hover { + --bs-link-opacity: 0.75; +} + +.link-opacity-100 { + --bs-link-opacity: 1; +} + +.link-opacity-100-hover:hover { + --bs-link-opacity: 1; +} + +.link-offset-1 { + text-underline-offset: 0.125em !important; +} + +.link-offset-1-hover:hover { + text-underline-offset: 0.125em !important; +} + +.link-offset-2 { + text-underline-offset: 0.25em !important; +} + +.link-offset-2-hover:hover { + text-underline-offset: 0.25em !important; +} + +.link-offset-3 { + text-underline-offset: 0.375em !important; +} + +.link-offset-3-hover:hover { + text-underline-offset: 0.375em !important; +} + +.link-underline-primary { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline-secondary { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline-success { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline-info { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline-warning { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline-danger { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline-light { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline-dark { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline-flixel-dark-blue { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-flixel-dark-blue-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline-flixel-yellow { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-flixel-yellow-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline-flixel-red { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-flixel-red-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline-flixel-green { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-flixel-green-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline-flixel-light-blue { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-flixel-light-blue-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important; +} + +.link-underline-opacity-0 { + --bs-link-underline-opacity: 0; +} + +.link-underline-opacity-0-hover:hover { + --bs-link-underline-opacity: 0; +} + +.link-underline-opacity-10 { + --bs-link-underline-opacity: 0.1; +} + +.link-underline-opacity-10-hover:hover { + --bs-link-underline-opacity: 0.1; +} + +.link-underline-opacity-25 { + --bs-link-underline-opacity: 0.25; +} + +.link-underline-opacity-25-hover:hover { + --bs-link-underline-opacity: 0.25; +} + +.link-underline-opacity-50 { + --bs-link-underline-opacity: 0.5; +} + +.link-underline-opacity-50-hover:hover { + --bs-link-underline-opacity: 0.5; +} + +.link-underline-opacity-75 { + --bs-link-underline-opacity: 0.75; +} + +.link-underline-opacity-75-hover:hover { + --bs-link-underline-opacity: 0.75; +} + +.link-underline-opacity-100 { + --bs-link-underline-opacity: 1; +} + +.link-underline-opacity-100-hover:hover { + --bs-link-underline-opacity: 1; +} + +.bg-primary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-secondary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-success { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-info { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-warning { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-danger { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-light { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-dark { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-flixel-dark-blue { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-flixel-dark-blue-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-flixel-yellow { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-flixel-yellow-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-flixel-red { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-flixel-red-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-flixel-green { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-flixel-green-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-flixel-light-blue { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-flixel-light-blue-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-black { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-white { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-body { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-transparent { + --bs-bg-opacity: 1; + background-color: transparent !important; +} + +.bg-body-secondary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-body-tertiary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-opacity-10 { + --bs-bg-opacity: 0.1; +} + +.bg-opacity-25 { + --bs-bg-opacity: 0.25; +} + +.bg-opacity-50 { + --bs-bg-opacity: 0.5; +} + +.bg-opacity-75 { + --bs-bg-opacity: 0.75; +} + +.bg-opacity-100 { + --bs-bg-opacity: 1; +} + +.bg-primary-subtle { + background-color: var(--bs-primary-bg-subtle) !important; +} + +.bg-secondary-subtle { + background-color: var(--bs-secondary-bg-subtle) !important; +} + +.bg-success-subtle { + background-color: var(--bs-success-bg-subtle) !important; +} + +.bg-info-subtle { + background-color: var(--bs-info-bg-subtle) !important; +} + +.bg-warning-subtle { + background-color: var(--bs-warning-bg-subtle) !important; +} + +.bg-danger-subtle { + background-color: var(--bs-danger-bg-subtle) !important; +} + +.bg-light-subtle { + background-color: var(--bs-light-bg-subtle) !important; +} + +.bg-dark-subtle { + background-color: var(--bs-dark-bg-subtle) !important; +} + +.bg-gradient { + background-image: var(--bs-gradient) !important; +} + +.user-select-all { + user-select: all !important; +} + +.user-select-auto { + user-select: auto !important; +} + +.user-select-none { + user-select: none !important; +} + +.pe-none { + pointer-events: none !important; +} + +.pe-auto { + pointer-events: auto !important; +} + +.rounded { + border-radius: var(--bs-border-radius) !important; +} + +.rounded-0 { + border-radius: 0 !important; +} + +.rounded-1 { + border-radius: var(--bs-border-radius-sm) !important; +} + +.rounded-2 { + border-radius: var(--bs-border-radius) !important; +} + +.rounded-3 { + border-radius: var(--bs-border-radius-lg) !important; +} + +.rounded-4 { + border-radius: var(--bs-border-radius-xl) !important; +} + +.rounded-5 { + border-radius: var(--bs-border-radius-xxl) !important; +} + +.rounded-circle { + border-radius: 50% !important; +} + +.rounded-pill { + border-radius: var(--bs-border-radius-pill) !important; +} + +.rounded-top { + border-top-left-radius: var(--bs-border-radius) !important; + border-top-right-radius: var(--bs-border-radius) !important; +} + +.rounded-top-0 { + border-top-left-radius: 0 !important; + border-top-right-radius: 0 !important; +} + +.rounded-top-1 { + border-top-left-radius: var(--bs-border-radius-sm) !important; + border-top-right-radius: var(--bs-border-radius-sm) !important; +} + +.rounded-top-2 { + border-top-left-radius: var(--bs-border-radius) !important; + border-top-right-radius: var(--bs-border-radius) !important; +} + +.rounded-top-3 { + border-top-left-radius: var(--bs-border-radius-lg) !important; + border-top-right-radius: var(--bs-border-radius-lg) !important; +} + +.rounded-top-4 { + border-top-left-radius: var(--bs-border-radius-xl) !important; + border-top-right-radius: var(--bs-border-radius-xl) !important; +} + +.rounded-top-5 { + border-top-left-radius: var(--bs-border-radius-xxl) !important; + border-top-right-radius: var(--bs-border-radius-xxl) !important; +} + +.rounded-top-circle { + border-top-left-radius: 50% !important; + border-top-right-radius: 50% !important; +} + +.rounded-top-pill { + border-top-left-radius: var(--bs-border-radius-pill) !important; + border-top-right-radius: var(--bs-border-radius-pill) !important; +} + +.rounded-end { + border-top-right-radius: var(--bs-border-radius) !important; + border-bottom-right-radius: var(--bs-border-radius) !important; +} + +.rounded-end-0 { + border-top-right-radius: 0 !important; + border-bottom-right-radius: 0 !important; +} + +.rounded-end-1 { + border-top-right-radius: var(--bs-border-radius-sm) !important; + border-bottom-right-radius: var(--bs-border-radius-sm) !important; +} + +.rounded-end-2 { + border-top-right-radius: var(--bs-border-radius) !important; + border-bottom-right-radius: var(--bs-border-radius) !important; +} + +.rounded-end-3 { + border-top-right-radius: var(--bs-border-radius-lg) !important; + border-bottom-right-radius: var(--bs-border-radius-lg) !important; +} + +.rounded-end-4 { + border-top-right-radius: var(--bs-border-radius-xl) !important; + border-bottom-right-radius: var(--bs-border-radius-xl) !important; +} + +.rounded-end-5 { + border-top-right-radius: var(--bs-border-radius-xxl) !important; + border-bottom-right-radius: var(--bs-border-radius-xxl) !important; +} + +.rounded-end-circle { + border-top-right-radius: 50% !important; + border-bottom-right-radius: 50% !important; +} + +.rounded-end-pill { + border-top-right-radius: var(--bs-border-radius-pill) !important; + border-bottom-right-radius: var(--bs-border-radius-pill) !important; +} + +.rounded-bottom { + border-bottom-right-radius: var(--bs-border-radius) !important; + border-bottom-left-radius: var(--bs-border-radius) !important; +} + +.rounded-bottom-0 { + border-bottom-right-radius: 0 !important; + border-bottom-left-radius: 0 !important; +} + +.rounded-bottom-1 { + border-bottom-right-radius: var(--bs-border-radius-sm) !important; + border-bottom-left-radius: var(--bs-border-radius-sm) !important; +} + +.rounded-bottom-2 { + border-bottom-right-radius: var(--bs-border-radius) !important; + border-bottom-left-radius: var(--bs-border-radius) !important; +} + +.rounded-bottom-3 { + border-bottom-right-radius: var(--bs-border-radius-lg) !important; + border-bottom-left-radius: var(--bs-border-radius-lg) !important; +} + +.rounded-bottom-4 { + border-bottom-right-radius: var(--bs-border-radius-xl) !important; + border-bottom-left-radius: var(--bs-border-radius-xl) !important; +} + +.rounded-bottom-5 { + border-bottom-right-radius: var(--bs-border-radius-xxl) !important; + border-bottom-left-radius: var(--bs-border-radius-xxl) !important; +} + +.rounded-bottom-circle { + border-bottom-right-radius: 50% !important; + border-bottom-left-radius: 50% !important; +} + +.rounded-bottom-pill { + border-bottom-right-radius: var(--bs-border-radius-pill) !important; + border-bottom-left-radius: var(--bs-border-radius-pill) !important; +} + +.rounded-start { + border-bottom-left-radius: var(--bs-border-radius) !important; + border-top-left-radius: var(--bs-border-radius) !important; +} + +.rounded-start-0 { + border-bottom-left-radius: 0 !important; + border-top-left-radius: 0 !important; +} + +.rounded-start-1 { + border-bottom-left-radius: var(--bs-border-radius-sm) !important; + border-top-left-radius: var(--bs-border-radius-sm) !important; +} + +.rounded-start-2 { + border-bottom-left-radius: var(--bs-border-radius) !important; + border-top-left-radius: var(--bs-border-radius) !important; +} + +.rounded-start-3 { + border-bottom-left-radius: var(--bs-border-radius-lg) !important; + border-top-left-radius: var(--bs-border-radius-lg) !important; +} + +.rounded-start-4 { + border-bottom-left-radius: var(--bs-border-radius-xl) !important; + border-top-left-radius: var(--bs-border-radius-xl) !important; +} + +.rounded-start-5 { + border-bottom-left-radius: var(--bs-border-radius-xxl) !important; + border-top-left-radius: var(--bs-border-radius-xxl) !important; +} + +.rounded-start-circle { + border-bottom-left-radius: 50% !important; + border-top-left-radius: 50% !important; +} + +.rounded-start-pill { + border-bottom-left-radius: var(--bs-border-radius-pill) !important; + border-top-left-radius: var(--bs-border-radius-pill) !important; +} + +.visible { + visibility: visible !important; +} + +.invisible { + visibility: hidden !important; +} + +.z-n1 { + z-index: -1 !important; +} + +.z-0 { + z-index: 0 !important; +} + +.z-1 { + z-index: 1 !important; +} + +.z-2 { + z-index: 2 !important; +} + +.z-3 { + z-index: 3 !important; +} + +@media (min-width: 576px) { + .float-sm-start { + float: left !important; + } + .float-sm-end { + float: right !important; + } + .float-sm-none { + float: none !important; + } + .object-fit-sm-contain { + object-fit: contain !important; + } + .object-fit-sm-cover { + object-fit: cover !important; + } + .object-fit-sm-fill { + object-fit: fill !important; + } + .object-fit-sm-scale { + object-fit: scale-down !important; + } + .object-fit-sm-none { + object-fit: none !important; + } + .d-sm-inline { + display: inline !important; + } + .d-sm-inline-block { + display: inline-block !important; + } + .d-sm-block { + display: block !important; + } + .d-sm-grid { + display: grid !important; + } + .d-sm-inline-grid { + display: inline-grid !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: flex !important; + } + .d-sm-inline-flex { + display: inline-flex !important; + } + .d-sm-none { + display: none !important; + } + .flex-sm-fill { + flex: 1 1 auto !important; + } + .flex-sm-row { + flex-direction: row !important; + } + .flex-sm-column { + flex-direction: column !important; + } + .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + .flex-sm-grow-0 { + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + .flex-sm-wrap { + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-sm-start { + justify-content: flex-start !important; + } + .justify-content-sm-end { + justify-content: flex-end !important; + } + .justify-content-sm-center { + justify-content: center !important; + } + .justify-content-sm-between { + justify-content: space-between !important; + } + .justify-content-sm-around { + justify-content: space-around !important; + } + .justify-content-sm-evenly { + justify-content: space-evenly !important; + } + .align-items-sm-start { + align-items: flex-start !important; + } + .align-items-sm-end { + align-items: flex-end !important; + } + .align-items-sm-center { + align-items: center !important; + } + .align-items-sm-baseline { + align-items: baseline !important; + } + .align-items-sm-stretch { + align-items: stretch !important; + } + .align-content-sm-start { + align-content: flex-start !important; + } + .align-content-sm-end { + align-content: flex-end !important; + } + .align-content-sm-center { + align-content: center !important; + } + .align-content-sm-between { + align-content: space-between !important; + } + .align-content-sm-around { + align-content: space-around !important; + } + .align-content-sm-stretch { + align-content: stretch !important; + } + .align-self-sm-auto { + align-self: auto !important; + } + .align-self-sm-start { + align-self: flex-start !important; + } + .align-self-sm-end { + align-self: flex-end !important; + } + .align-self-sm-center { + align-self: center !important; + } + .align-self-sm-baseline { + align-self: baseline !important; + } + .align-self-sm-stretch { + align-self: stretch !important; + } + .order-sm-first { + order: -1 !important; + } + .order-sm-0 { + order: 0 !important; + } + .order-sm-1 { + order: 1 !important; + } + .order-sm-2 { + order: 2 !important; + } + .order-sm-3 { + order: 3 !important; + } + .order-sm-4 { + order: 4 !important; + } + .order-sm-5 { + order: 5 !important; + } + .order-sm-last { + order: 6 !important; + } + .m-sm-0 { + margin: 0 !important; + } + .m-sm-1 { + margin: 0.25rem !important; + } + .m-sm-2 { + margin: 0.5rem !important; + } + .m-sm-3 { + margin: 1rem !important; + } + .m-sm-4 { + margin: 1.5rem !important; + } + .m-sm-5 { + margin: 3rem !important; + } + .m-sm-auto { + margin: auto !important; + } + .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-sm-0 { + margin-top: 0 !important; + } + .mt-sm-1 { + margin-top: 0.25rem !important; + } + .mt-sm-2 { + margin-top: 0.5rem !important; + } + .mt-sm-3 { + margin-top: 1rem !important; + } + .mt-sm-4 { + margin-top: 1.5rem !important; + } + .mt-sm-5 { + margin-top: 3rem !important; + } + .mt-sm-auto { + margin-top: auto !important; + } + .me-sm-0 { + margin-right: 0 !important; + } + .me-sm-1 { + margin-right: 0.25rem !important; + } + .me-sm-2 { + margin-right: 0.5rem !important; + } + .me-sm-3 { + margin-right: 1rem !important; + } + .me-sm-4 { + margin-right: 1.5rem !important; + } + .me-sm-5 { + margin-right: 3rem !important; + } + .me-sm-auto { + margin-right: auto !important; + } + .mb-sm-0 { + margin-bottom: 0 !important; + } + .mb-sm-1 { + margin-bottom: 0.25rem !important; + } + .mb-sm-2 { + margin-bottom: 0.5rem !important; + } + .mb-sm-3 { + margin-bottom: 1rem !important; + } + .mb-sm-4 { + margin-bottom: 1.5rem !important; + } + .mb-sm-5 { + margin-bottom: 3rem !important; + } + .mb-sm-auto { + margin-bottom: auto !important; + } + .ms-sm-0 { + margin-left: 0 !important; + } + .ms-sm-1 { + margin-left: 0.25rem !important; + } + .ms-sm-2 { + margin-left: 0.5rem !important; + } + .ms-sm-3 { + margin-left: 1rem !important; + } + .ms-sm-4 { + margin-left: 1.5rem !important; + } + .ms-sm-5 { + margin-left: 3rem !important; + } + .ms-sm-auto { + margin-left: auto !important; + } + .p-sm-0 { + padding: 0 !important; + } + .p-sm-1 { + padding: 0.25rem !important; + } + .p-sm-2 { + padding: 0.5rem !important; + } + .p-sm-3 { + padding: 1rem !important; + } + .p-sm-4 { + padding: 1.5rem !important; + } + .p-sm-5 { + padding: 3rem !important; + } + .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-sm-0 { + padding-top: 0 !important; + } + .pt-sm-1 { + padding-top: 0.25rem !important; + } + .pt-sm-2 { + padding-top: 0.5rem !important; + } + .pt-sm-3 { + padding-top: 1rem !important; + } + .pt-sm-4 { + padding-top: 1.5rem !important; + } + .pt-sm-5 { + padding-top: 3rem !important; + } + .pe-sm-0 { + padding-right: 0 !important; + } + .pe-sm-1 { + padding-right: 0.25rem !important; + } + .pe-sm-2 { + padding-right: 0.5rem !important; + } + .pe-sm-3 { + padding-right: 1rem !important; + } + .pe-sm-4 { + padding-right: 1.5rem !important; + } + .pe-sm-5 { + padding-right: 3rem !important; + } + .pb-sm-0 { + padding-bottom: 0 !important; + } + .pb-sm-1 { + padding-bottom: 0.25rem !important; + } + .pb-sm-2 { + padding-bottom: 0.5rem !important; + } + .pb-sm-3 { + padding-bottom: 1rem !important; + } + .pb-sm-4 { + padding-bottom: 1.5rem !important; + } + .pb-sm-5 { + padding-bottom: 3rem !important; + } + .ps-sm-0 { + padding-left: 0 !important; + } + .ps-sm-1 { + padding-left: 0.25rem !important; + } + .ps-sm-2 { + padding-left: 0.5rem !important; + } + .ps-sm-3 { + padding-left: 1rem !important; + } + .ps-sm-4 { + padding-left: 1.5rem !important; + } + .ps-sm-5 { + padding-left: 3rem !important; + } + .gap-sm-0 { + gap: 0 !important; + } + .gap-sm-1 { + gap: 0.25rem !important; + } + .gap-sm-2 { + gap: 0.5rem !important; + } + .gap-sm-3 { + gap: 1rem !important; + } + .gap-sm-4 { + gap: 1.5rem !important; + } + .gap-sm-5 { + gap: 3rem !important; + } + .row-gap-sm-0 { + row-gap: 0 !important; + } + .row-gap-sm-1 { + row-gap: 0.25rem !important; + } + .row-gap-sm-2 { + row-gap: 0.5rem !important; + } + .row-gap-sm-3 { + row-gap: 1rem !important; + } + .row-gap-sm-4 { + row-gap: 1.5rem !important; + } + .row-gap-sm-5 { + row-gap: 3rem !important; + } + .column-gap-sm-0 { + column-gap: 0 !important; + } + .column-gap-sm-1 { + column-gap: 0.25rem !important; + } + .column-gap-sm-2 { + column-gap: 0.5rem !important; + } + .column-gap-sm-3 { + column-gap: 1rem !important; + } + .column-gap-sm-4 { + column-gap: 1.5rem !important; + } + .column-gap-sm-5 { + column-gap: 3rem !important; + } + .text-sm-start { + text-align: left !important; + } + .text-sm-end { + text-align: right !important; + } + .text-sm-center { + text-align: center !important; + } +} +@media (min-width: 768px) { + .float-md-start { + float: left !important; + } + .float-md-end { + float: right !important; + } + .float-md-none { + float: none !important; + } + .object-fit-md-contain { + object-fit: contain !important; + } + .object-fit-md-cover { + object-fit: cover !important; + } + .object-fit-md-fill { + object-fit: fill !important; + } + .object-fit-md-scale { + object-fit: scale-down !important; + } + .object-fit-md-none { + object-fit: none !important; + } + .d-md-inline { + display: inline !important; + } + .d-md-inline-block { + display: inline-block !important; + } + .d-md-block { + display: block !important; + } + .d-md-grid { + display: grid !important; + } + .d-md-inline-grid { + display: inline-grid !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: flex !important; + } + .d-md-inline-flex { + display: inline-flex !important; + } + .d-md-none { + display: none !important; + } + .flex-md-fill { + flex: 1 1 auto !important; + } + .flex-md-row { + flex-direction: row !important; + } + .flex-md-column { + flex-direction: column !important; + } + .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + .flex-md-grow-0 { + flex-grow: 0 !important; + } + .flex-md-grow-1 { + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + .flex-md-wrap { + flex-wrap: wrap !important; + } + .flex-md-nowrap { + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-md-start { + justify-content: flex-start !important; + } + .justify-content-md-end { + justify-content: flex-end !important; + } + .justify-content-md-center { + justify-content: center !important; + } + .justify-content-md-between { + justify-content: space-between !important; + } + .justify-content-md-around { + justify-content: space-around !important; + } + .justify-content-md-evenly { + justify-content: space-evenly !important; + } + .align-items-md-start { + align-items: flex-start !important; + } + .align-items-md-end { + align-items: flex-end !important; + } + .align-items-md-center { + align-items: center !important; + } + .align-items-md-baseline { + align-items: baseline !important; + } + .align-items-md-stretch { + align-items: stretch !important; + } + .align-content-md-start { + align-content: flex-start !important; + } + .align-content-md-end { + align-content: flex-end !important; + } + .align-content-md-center { + align-content: center !important; + } + .align-content-md-between { + align-content: space-between !important; + } + .align-content-md-around { + align-content: space-around !important; + } + .align-content-md-stretch { + align-content: stretch !important; + } + .align-self-md-auto { + align-self: auto !important; + } + .align-self-md-start { + align-self: flex-start !important; + } + .align-self-md-end { + align-self: flex-end !important; + } + .align-self-md-center { + align-self: center !important; + } + .align-self-md-baseline { + align-self: baseline !important; + } + .align-self-md-stretch { + align-self: stretch !important; + } + .order-md-first { + order: -1 !important; + } + .order-md-0 { + order: 0 !important; + } + .order-md-1 { + order: 1 !important; + } + .order-md-2 { + order: 2 !important; + } + .order-md-3 { + order: 3 !important; + } + .order-md-4 { + order: 4 !important; + } + .order-md-5 { + order: 5 !important; + } + .order-md-last { + order: 6 !important; + } + .m-md-0 { + margin: 0 !important; + } + .m-md-1 { + margin: 0.25rem !important; + } + .m-md-2 { + margin: 0.5rem !important; + } + .m-md-3 { + margin: 1rem !important; + } + .m-md-4 { + margin: 1.5rem !important; + } + .m-md-5 { + margin: 3rem !important; + } + .m-md-auto { + margin: auto !important; + } + .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-md-0 { + margin-top: 0 !important; + } + .mt-md-1 { + margin-top: 0.25rem !important; + } + .mt-md-2 { + margin-top: 0.5rem !important; + } + .mt-md-3 { + margin-top: 1rem !important; + } + .mt-md-4 { + margin-top: 1.5rem !important; + } + .mt-md-5 { + margin-top: 3rem !important; + } + .mt-md-auto { + margin-top: auto !important; + } + .me-md-0 { + margin-right: 0 !important; + } + .me-md-1 { + margin-right: 0.25rem !important; + } + .me-md-2 { + margin-right: 0.5rem !important; + } + .me-md-3 { + margin-right: 1rem !important; + } + .me-md-4 { + margin-right: 1.5rem !important; + } + .me-md-5 { + margin-right: 3rem !important; + } + .me-md-auto { + margin-right: auto !important; + } + .mb-md-0 { + margin-bottom: 0 !important; + } + .mb-md-1 { + margin-bottom: 0.25rem !important; + } + .mb-md-2 { + margin-bottom: 0.5rem !important; + } + .mb-md-3 { + margin-bottom: 1rem !important; + } + .mb-md-4 { + margin-bottom: 1.5rem !important; + } + .mb-md-5 { + margin-bottom: 3rem !important; + } + .mb-md-auto { + margin-bottom: auto !important; + } + .ms-md-0 { + margin-left: 0 !important; + } + .ms-md-1 { + margin-left: 0.25rem !important; + } + .ms-md-2 { + margin-left: 0.5rem !important; + } + .ms-md-3 { + margin-left: 1rem !important; + } + .ms-md-4 { + margin-left: 1.5rem !important; + } + .ms-md-5 { + margin-left: 3rem !important; + } + .ms-md-auto { + margin-left: auto !important; + } + .p-md-0 { + padding: 0 !important; + } + .p-md-1 { + padding: 0.25rem !important; + } + .p-md-2 { + padding: 0.5rem !important; + } + .p-md-3 { + padding: 1rem !important; + } + .p-md-4 { + padding: 1.5rem !important; + } + .p-md-5 { + padding: 3rem !important; + } + .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-md-0 { + padding-top: 0 !important; + } + .pt-md-1 { + padding-top: 0.25rem !important; + } + .pt-md-2 { + padding-top: 0.5rem !important; + } + .pt-md-3 { + padding-top: 1rem !important; + } + .pt-md-4 { + padding-top: 1.5rem !important; + } + .pt-md-5 { + padding-top: 3rem !important; + } + .pe-md-0 { + padding-right: 0 !important; + } + .pe-md-1 { + padding-right: 0.25rem !important; + } + .pe-md-2 { + padding-right: 0.5rem !important; + } + .pe-md-3 { + padding-right: 1rem !important; + } + .pe-md-4 { + padding-right: 1.5rem !important; + } + .pe-md-5 { + padding-right: 3rem !important; + } + .pb-md-0 { + padding-bottom: 0 !important; + } + .pb-md-1 { + padding-bottom: 0.25rem !important; + } + .pb-md-2 { + padding-bottom: 0.5rem !important; + } + .pb-md-3 { + padding-bottom: 1rem !important; + } + .pb-md-4 { + padding-bottom: 1.5rem !important; + } + .pb-md-5 { + padding-bottom: 3rem !important; + } + .ps-md-0 { + padding-left: 0 !important; + } + .ps-md-1 { + padding-left: 0.25rem !important; + } + .ps-md-2 { + padding-left: 0.5rem !important; + } + .ps-md-3 { + padding-left: 1rem !important; + } + .ps-md-4 { + padding-left: 1.5rem !important; + } + .ps-md-5 { + padding-left: 3rem !important; + } + .gap-md-0 { + gap: 0 !important; + } + .gap-md-1 { + gap: 0.25rem !important; + } + .gap-md-2 { + gap: 0.5rem !important; + } + .gap-md-3 { + gap: 1rem !important; + } + .gap-md-4 { + gap: 1.5rem !important; + } + .gap-md-5 { + gap: 3rem !important; + } + .row-gap-md-0 { + row-gap: 0 !important; + } + .row-gap-md-1 { + row-gap: 0.25rem !important; + } + .row-gap-md-2 { + row-gap: 0.5rem !important; + } + .row-gap-md-3 { + row-gap: 1rem !important; + } + .row-gap-md-4 { + row-gap: 1.5rem !important; + } + .row-gap-md-5 { + row-gap: 3rem !important; + } + .column-gap-md-0 { + column-gap: 0 !important; + } + .column-gap-md-1 { + column-gap: 0.25rem !important; + } + .column-gap-md-2 { + column-gap: 0.5rem !important; + } + .column-gap-md-3 { + column-gap: 1rem !important; + } + .column-gap-md-4 { + column-gap: 1.5rem !important; + } + .column-gap-md-5 { + column-gap: 3rem !important; + } + .text-md-start { + text-align: left !important; + } + .text-md-end { + text-align: right !important; + } + .text-md-center { + text-align: center !important; + } +} +@media (min-width: 992px) { + .float-lg-start { + float: left !important; + } + .float-lg-end { + float: right !important; + } + .float-lg-none { + float: none !important; + } + .object-fit-lg-contain { + object-fit: contain !important; + } + .object-fit-lg-cover { + object-fit: cover !important; + } + .object-fit-lg-fill { + object-fit: fill !important; + } + .object-fit-lg-scale { + object-fit: scale-down !important; + } + .object-fit-lg-none { + object-fit: none !important; + } + .d-lg-inline { + display: inline !important; + } + .d-lg-inline-block { + display: inline-block !important; + } + .d-lg-block { + display: block !important; + } + .d-lg-grid { + display: grid !important; + } + .d-lg-inline-grid { + display: inline-grid !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: flex !important; + } + .d-lg-inline-flex { + display: inline-flex !important; + } + .d-lg-none { + display: none !important; + } + .flex-lg-fill { + flex: 1 1 auto !important; + } + .flex-lg-row { + flex-direction: row !important; + } + .flex-lg-column { + flex-direction: column !important; + } + .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + .flex-lg-grow-0 { + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + .flex-lg-wrap { + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-lg-start { + justify-content: flex-start !important; + } + .justify-content-lg-end { + justify-content: flex-end !important; + } + .justify-content-lg-center { + justify-content: center !important; + } + .justify-content-lg-between { + justify-content: space-between !important; + } + .justify-content-lg-around { + justify-content: space-around !important; + } + .justify-content-lg-evenly { + justify-content: space-evenly !important; + } + .align-items-lg-start { + align-items: flex-start !important; + } + .align-items-lg-end { + align-items: flex-end !important; + } + .align-items-lg-center { + align-items: center !important; + } + .align-items-lg-baseline { + align-items: baseline !important; + } + .align-items-lg-stretch { + align-items: stretch !important; + } + .align-content-lg-start { + align-content: flex-start !important; + } + .align-content-lg-end { + align-content: flex-end !important; + } + .align-content-lg-center { + align-content: center !important; + } + .align-content-lg-between { + align-content: space-between !important; + } + .align-content-lg-around { + align-content: space-around !important; + } + .align-content-lg-stretch { + align-content: stretch !important; + } + .align-self-lg-auto { + align-self: auto !important; + } + .align-self-lg-start { + align-self: flex-start !important; + } + .align-self-lg-end { + align-self: flex-end !important; + } + .align-self-lg-center { + align-self: center !important; + } + .align-self-lg-baseline { + align-self: baseline !important; + } + .align-self-lg-stretch { + align-self: stretch !important; + } + .order-lg-first { + order: -1 !important; + } + .order-lg-0 { + order: 0 !important; + } + .order-lg-1 { + order: 1 !important; + } + .order-lg-2 { + order: 2 !important; + } + .order-lg-3 { + order: 3 !important; + } + .order-lg-4 { + order: 4 !important; + } + .order-lg-5 { + order: 5 !important; + } + .order-lg-last { + order: 6 !important; + } + .m-lg-0 { + margin: 0 !important; + } + .m-lg-1 { + margin: 0.25rem !important; + } + .m-lg-2 { + margin: 0.5rem !important; + } + .m-lg-3 { + margin: 1rem !important; + } + .m-lg-4 { + margin: 1.5rem !important; + } + .m-lg-5 { + margin: 3rem !important; + } + .m-lg-auto { + margin: auto !important; + } + .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-lg-0 { + margin-top: 0 !important; + } + .mt-lg-1 { + margin-top: 0.25rem !important; + } + .mt-lg-2 { + margin-top: 0.5rem !important; + } + .mt-lg-3 { + margin-top: 1rem !important; + } + .mt-lg-4 { + margin-top: 1.5rem !important; + } + .mt-lg-5 { + margin-top: 3rem !important; + } + .mt-lg-auto { + margin-top: auto !important; + } + .me-lg-0 { + margin-right: 0 !important; + } + .me-lg-1 { + margin-right: 0.25rem !important; + } + .me-lg-2 { + margin-right: 0.5rem !important; + } + .me-lg-3 { + margin-right: 1rem !important; + } + .me-lg-4 { + margin-right: 1.5rem !important; + } + .me-lg-5 { + margin-right: 3rem !important; + } + .me-lg-auto { + margin-right: auto !important; + } + .mb-lg-0 { + margin-bottom: 0 !important; + } + .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + .mb-lg-3 { + margin-bottom: 1rem !important; + } + .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + .mb-lg-5 { + margin-bottom: 3rem !important; + } + .mb-lg-auto { + margin-bottom: auto !important; + } + .ms-lg-0 { + margin-left: 0 !important; + } + .ms-lg-1 { + margin-left: 0.25rem !important; + } + .ms-lg-2 { + margin-left: 0.5rem !important; + } + .ms-lg-3 { + margin-left: 1rem !important; + } + .ms-lg-4 { + margin-left: 1.5rem !important; + } + .ms-lg-5 { + margin-left: 3rem !important; + } + .ms-lg-auto { + margin-left: auto !important; + } + .p-lg-0 { + padding: 0 !important; + } + .p-lg-1 { + padding: 0.25rem !important; + } + .p-lg-2 { + padding: 0.5rem !important; + } + .p-lg-3 { + padding: 1rem !important; + } + .p-lg-4 { + padding: 1.5rem !important; + } + .p-lg-5 { + padding: 3rem !important; + } + .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-lg-0 { + padding-top: 0 !important; + } + .pt-lg-1 { + padding-top: 0.25rem !important; + } + .pt-lg-2 { + padding-top: 0.5rem !important; + } + .pt-lg-3 { + padding-top: 1rem !important; + } + .pt-lg-4 { + padding-top: 1.5rem !important; + } + .pt-lg-5 { + padding-top: 3rem !important; + } + .pe-lg-0 { + padding-right: 0 !important; + } + .pe-lg-1 { + padding-right: 0.25rem !important; + } + .pe-lg-2 { + padding-right: 0.5rem !important; + } + .pe-lg-3 { + padding-right: 1rem !important; + } + .pe-lg-4 { + padding-right: 1.5rem !important; + } + .pe-lg-5 { + padding-right: 3rem !important; + } + .pb-lg-0 { + padding-bottom: 0 !important; + } + .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + .pb-lg-3 { + padding-bottom: 1rem !important; + } + .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + .pb-lg-5 { + padding-bottom: 3rem !important; + } + .ps-lg-0 { + padding-left: 0 !important; + } + .ps-lg-1 { + padding-left: 0.25rem !important; + } + .ps-lg-2 { + padding-left: 0.5rem !important; + } + .ps-lg-3 { + padding-left: 1rem !important; + } + .ps-lg-4 { + padding-left: 1.5rem !important; + } + .ps-lg-5 { + padding-left: 3rem !important; + } + .gap-lg-0 { + gap: 0 !important; + } + .gap-lg-1 { + gap: 0.25rem !important; + } + .gap-lg-2 { + gap: 0.5rem !important; + } + .gap-lg-3 { + gap: 1rem !important; + } + .gap-lg-4 { + gap: 1.5rem !important; + } + .gap-lg-5 { + gap: 3rem !important; + } + .row-gap-lg-0 { + row-gap: 0 !important; + } + .row-gap-lg-1 { + row-gap: 0.25rem !important; + } + .row-gap-lg-2 { + row-gap: 0.5rem !important; + } + .row-gap-lg-3 { + row-gap: 1rem !important; + } + .row-gap-lg-4 { + row-gap: 1.5rem !important; + } + .row-gap-lg-5 { + row-gap: 3rem !important; + } + .column-gap-lg-0 { + column-gap: 0 !important; + } + .column-gap-lg-1 { + column-gap: 0.25rem !important; + } + .column-gap-lg-2 { + column-gap: 0.5rem !important; + } + .column-gap-lg-3 { + column-gap: 1rem !important; + } + .column-gap-lg-4 { + column-gap: 1.5rem !important; + } + .column-gap-lg-5 { + column-gap: 3rem !important; + } + .text-lg-start { + text-align: left !important; + } + .text-lg-end { + text-align: right !important; + } + .text-lg-center { + text-align: center !important; + } +} +@media (min-width: 1200px) { + .float-xl-start { + float: left !important; + } + .float-xl-end { + float: right !important; + } + .float-xl-none { + float: none !important; + } + .object-fit-xl-contain { + object-fit: contain !important; + } + .object-fit-xl-cover { + object-fit: cover !important; + } + .object-fit-xl-fill { + object-fit: fill !important; + } + .object-fit-xl-scale { + object-fit: scale-down !important; + } + .object-fit-xl-none { + object-fit: none !important; + } + .d-xl-inline { + display: inline !important; + } + .d-xl-inline-block { + display: inline-block !important; + } + .d-xl-block { + display: block !important; + } + .d-xl-grid { + display: grid !important; + } + .d-xl-inline-grid { + display: inline-grid !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: flex !important; + } + .d-xl-inline-flex { + display: inline-flex !important; + } + .d-xl-none { + display: none !important; + } + .flex-xl-fill { + flex: 1 1 auto !important; + } + .flex-xl-row { + flex-direction: row !important; + } + .flex-xl-column { + flex-direction: column !important; + } + .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xl-grow-0 { + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + .flex-xl-wrap { + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-xl-start { + justify-content: flex-start !important; + } + .justify-content-xl-end { + justify-content: flex-end !important; + } + .justify-content-xl-center { + justify-content: center !important; + } + .justify-content-xl-between { + justify-content: space-between !important; + } + .justify-content-xl-around { + justify-content: space-around !important; + } + .justify-content-xl-evenly { + justify-content: space-evenly !important; + } + .align-items-xl-start { + align-items: flex-start !important; + } + .align-items-xl-end { + align-items: flex-end !important; + } + .align-items-xl-center { + align-items: center !important; + } + .align-items-xl-baseline { + align-items: baseline !important; + } + .align-items-xl-stretch { + align-items: stretch !important; + } + .align-content-xl-start { + align-content: flex-start !important; + } + .align-content-xl-end { + align-content: flex-end !important; + } + .align-content-xl-center { + align-content: center !important; + } + .align-content-xl-between { + align-content: space-between !important; + } + .align-content-xl-around { + align-content: space-around !important; + } + .align-content-xl-stretch { + align-content: stretch !important; + } + .align-self-xl-auto { + align-self: auto !important; + } + .align-self-xl-start { + align-self: flex-start !important; + } + .align-self-xl-end { + align-self: flex-end !important; + } + .align-self-xl-center { + align-self: center !important; + } + .align-self-xl-baseline { + align-self: baseline !important; + } + .align-self-xl-stretch { + align-self: stretch !important; + } + .order-xl-first { + order: -1 !important; + } + .order-xl-0 { + order: 0 !important; + } + .order-xl-1 { + order: 1 !important; + } + .order-xl-2 { + order: 2 !important; + } + .order-xl-3 { + order: 3 !important; + } + .order-xl-4 { + order: 4 !important; + } + .order-xl-5 { + order: 5 !important; + } + .order-xl-last { + order: 6 !important; + } + .m-xl-0 { + margin: 0 !important; + } + .m-xl-1 { + margin: 0.25rem !important; + } + .m-xl-2 { + margin: 0.5rem !important; + } + .m-xl-3 { + margin: 1rem !important; + } + .m-xl-4 { + margin: 1.5rem !important; + } + .m-xl-5 { + margin: 3rem !important; + } + .m-xl-auto { + margin: auto !important; + } + .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-xl-0 { + margin-top: 0 !important; + } + .mt-xl-1 { + margin-top: 0.25rem !important; + } + .mt-xl-2 { + margin-top: 0.5rem !important; + } + .mt-xl-3 { + margin-top: 1rem !important; + } + .mt-xl-4 { + margin-top: 1.5rem !important; + } + .mt-xl-5 { + margin-top: 3rem !important; + } + .mt-xl-auto { + margin-top: auto !important; + } + .me-xl-0 { + margin-right: 0 !important; + } + .me-xl-1 { + margin-right: 0.25rem !important; + } + .me-xl-2 { + margin-right: 0.5rem !important; + } + .me-xl-3 { + margin-right: 1rem !important; + } + .me-xl-4 { + margin-right: 1.5rem !important; + } + .me-xl-5 { + margin-right: 3rem !important; + } + .me-xl-auto { + margin-right: auto !important; + } + .mb-xl-0 { + margin-bottom: 0 !important; + } + .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + .mb-xl-3 { + margin-bottom: 1rem !important; + } + .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + .mb-xl-5 { + margin-bottom: 3rem !important; + } + .mb-xl-auto { + margin-bottom: auto !important; + } + .ms-xl-0 { + margin-left: 0 !important; + } + .ms-xl-1 { + margin-left: 0.25rem !important; + } + .ms-xl-2 { + margin-left: 0.5rem !important; + } + .ms-xl-3 { + margin-left: 1rem !important; + } + .ms-xl-4 { + margin-left: 1.5rem !important; + } + .ms-xl-5 { + margin-left: 3rem !important; + } + .ms-xl-auto { + margin-left: auto !important; + } + .p-xl-0 { + padding: 0 !important; + } + .p-xl-1 { + padding: 0.25rem !important; + } + .p-xl-2 { + padding: 0.5rem !important; + } + .p-xl-3 { + padding: 1rem !important; + } + .p-xl-4 { + padding: 1.5rem !important; + } + .p-xl-5 { + padding: 3rem !important; + } + .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-xl-0 { + padding-top: 0 !important; + } + .pt-xl-1 { + padding-top: 0.25rem !important; + } + .pt-xl-2 { + padding-top: 0.5rem !important; + } + .pt-xl-3 { + padding-top: 1rem !important; + } + .pt-xl-4 { + padding-top: 1.5rem !important; + } + .pt-xl-5 { + padding-top: 3rem !important; + } + .pe-xl-0 { + padding-right: 0 !important; + } + .pe-xl-1 { + padding-right: 0.25rem !important; + } + .pe-xl-2 { + padding-right: 0.5rem !important; + } + .pe-xl-3 { + padding-right: 1rem !important; + } + .pe-xl-4 { + padding-right: 1.5rem !important; + } + .pe-xl-5 { + padding-right: 3rem !important; + } + .pb-xl-0 { + padding-bottom: 0 !important; + } + .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + .pb-xl-3 { + padding-bottom: 1rem !important; + } + .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + .pb-xl-5 { + padding-bottom: 3rem !important; + } + .ps-xl-0 { + padding-left: 0 !important; + } + .ps-xl-1 { + padding-left: 0.25rem !important; + } + .ps-xl-2 { + padding-left: 0.5rem !important; + } + .ps-xl-3 { + padding-left: 1rem !important; + } + .ps-xl-4 { + padding-left: 1.5rem !important; + } + .ps-xl-5 { + padding-left: 3rem !important; + } + .gap-xl-0 { + gap: 0 !important; + } + .gap-xl-1 { + gap: 0.25rem !important; + } + .gap-xl-2 { + gap: 0.5rem !important; + } + .gap-xl-3 { + gap: 1rem !important; + } + .gap-xl-4 { + gap: 1.5rem !important; + } + .gap-xl-5 { + gap: 3rem !important; + } + .row-gap-xl-0 { + row-gap: 0 !important; + } + .row-gap-xl-1 { + row-gap: 0.25rem !important; + } + .row-gap-xl-2 { + row-gap: 0.5rem !important; + } + .row-gap-xl-3 { + row-gap: 1rem !important; + } + .row-gap-xl-4 { + row-gap: 1.5rem !important; + } + .row-gap-xl-5 { + row-gap: 3rem !important; + } + .column-gap-xl-0 { + column-gap: 0 !important; + } + .column-gap-xl-1 { + column-gap: 0.25rem !important; + } + .column-gap-xl-2 { + column-gap: 0.5rem !important; + } + .column-gap-xl-3 { + column-gap: 1rem !important; + } + .column-gap-xl-4 { + column-gap: 1.5rem !important; + } + .column-gap-xl-5 { + column-gap: 3rem !important; + } + .text-xl-start { + text-align: left !important; + } + .text-xl-end { + text-align: right !important; + } + .text-xl-center { + text-align: center !important; + } +} +@media (min-width: 1400px) { + .float-xxl-start { + float: left !important; + } + .float-xxl-end { + float: right !important; + } + .float-xxl-none { + float: none !important; + } + .object-fit-xxl-contain { + object-fit: contain !important; + } + .object-fit-xxl-cover { + object-fit: cover !important; + } + .object-fit-xxl-fill { + object-fit: fill !important; + } + .object-fit-xxl-scale { + object-fit: scale-down !important; + } + .object-fit-xxl-none { + object-fit: none !important; + } + .d-xxl-inline { + display: inline !important; + } + .d-xxl-inline-block { + display: inline-block !important; + } + .d-xxl-block { + display: block !important; + } + .d-xxl-grid { + display: grid !important; + } + .d-xxl-inline-grid { + display: inline-grid !important; + } + .d-xxl-table { + display: table !important; + } + .d-xxl-table-row { + display: table-row !important; + } + .d-xxl-table-cell { + display: table-cell !important; + } + .d-xxl-flex { + display: flex !important; + } + .d-xxl-inline-flex { + display: inline-flex !important; + } + .d-xxl-none { + display: none !important; + } + .flex-xxl-fill { + flex: 1 1 auto !important; + } + .flex-xxl-row { + flex-direction: row !important; + } + .flex-xxl-column { + flex-direction: column !important; + } + .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xxl-grow-0 { + flex-grow: 0 !important; + } + .flex-xxl-grow-1 { + flex-grow: 1 !important; + } + .flex-xxl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xxl-shrink-1 { + flex-shrink: 1 !important; + } + .flex-xxl-wrap { + flex-wrap: wrap !important; + } + .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-xxl-start { + justify-content: flex-start !important; + } + .justify-content-xxl-end { + justify-content: flex-end !important; + } + .justify-content-xxl-center { + justify-content: center !important; + } + .justify-content-xxl-between { + justify-content: space-between !important; + } + .justify-content-xxl-around { + justify-content: space-around !important; + } + .justify-content-xxl-evenly { + justify-content: space-evenly !important; + } + .align-items-xxl-start { + align-items: flex-start !important; + } + .align-items-xxl-end { + align-items: flex-end !important; + } + .align-items-xxl-center { + align-items: center !important; + } + .align-items-xxl-baseline { + align-items: baseline !important; + } + .align-items-xxl-stretch { + align-items: stretch !important; + } + .align-content-xxl-start { + align-content: flex-start !important; + } + .align-content-xxl-end { + align-content: flex-end !important; + } + .align-content-xxl-center { + align-content: center !important; + } + .align-content-xxl-between { + align-content: space-between !important; + } + .align-content-xxl-around { + align-content: space-around !important; + } + .align-content-xxl-stretch { + align-content: stretch !important; + } + .align-self-xxl-auto { + align-self: auto !important; + } + .align-self-xxl-start { + align-self: flex-start !important; + } + .align-self-xxl-end { + align-self: flex-end !important; + } + .align-self-xxl-center { + align-self: center !important; + } + .align-self-xxl-baseline { + align-self: baseline !important; + } + .align-self-xxl-stretch { + align-self: stretch !important; + } + .order-xxl-first { + order: -1 !important; + } + .order-xxl-0 { + order: 0 !important; + } + .order-xxl-1 { + order: 1 !important; + } + .order-xxl-2 { + order: 2 !important; + } + .order-xxl-3 { + order: 3 !important; + } + .order-xxl-4 { + order: 4 !important; + } + .order-xxl-5 { + order: 5 !important; + } + .order-xxl-last { + order: 6 !important; + } + .m-xxl-0 { + margin: 0 !important; + } + .m-xxl-1 { + margin: 0.25rem !important; + } + .m-xxl-2 { + margin: 0.5rem !important; + } + .m-xxl-3 { + margin: 1rem !important; + } + .m-xxl-4 { + margin: 1.5rem !important; + } + .m-xxl-5 { + margin: 3rem !important; + } + .m-xxl-auto { + margin: auto !important; + } + .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-xxl-0 { + margin-top: 0 !important; + } + .mt-xxl-1 { + margin-top: 0.25rem !important; + } + .mt-xxl-2 { + margin-top: 0.5rem !important; + } + .mt-xxl-3 { + margin-top: 1rem !important; + } + .mt-xxl-4 { + margin-top: 1.5rem !important; + } + .mt-xxl-5 { + margin-top: 3rem !important; + } + .mt-xxl-auto { + margin-top: auto !important; + } + .me-xxl-0 { + margin-right: 0 !important; + } + .me-xxl-1 { + margin-right: 0.25rem !important; + } + .me-xxl-2 { + margin-right: 0.5rem !important; + } + .me-xxl-3 { + margin-right: 1rem !important; + } + .me-xxl-4 { + margin-right: 1.5rem !important; + } + .me-xxl-5 { + margin-right: 3rem !important; + } + .me-xxl-auto { + margin-right: auto !important; + } + .mb-xxl-0 { + margin-bottom: 0 !important; + } + .mb-xxl-1 { + margin-bottom: 0.25rem !important; + } + .mb-xxl-2 { + margin-bottom: 0.5rem !important; + } + .mb-xxl-3 { + margin-bottom: 1rem !important; + } + .mb-xxl-4 { + margin-bottom: 1.5rem !important; + } + .mb-xxl-5 { + margin-bottom: 3rem !important; + } + .mb-xxl-auto { + margin-bottom: auto !important; + } + .ms-xxl-0 { + margin-left: 0 !important; + } + .ms-xxl-1 { + margin-left: 0.25rem !important; + } + .ms-xxl-2 { + margin-left: 0.5rem !important; + } + .ms-xxl-3 { + margin-left: 1rem !important; + } + .ms-xxl-4 { + margin-left: 1.5rem !important; + } + .ms-xxl-5 { + margin-left: 3rem !important; + } + .ms-xxl-auto { + margin-left: auto !important; + } + .p-xxl-0 { + padding: 0 !important; + } + .p-xxl-1 { + padding: 0.25rem !important; + } + .p-xxl-2 { + padding: 0.5rem !important; + } + .p-xxl-3 { + padding: 1rem !important; + } + .p-xxl-4 { + padding: 1.5rem !important; + } + .p-xxl-5 { + padding: 3rem !important; + } + .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-xxl-0 { + padding-top: 0 !important; + } + .pt-xxl-1 { + padding-top: 0.25rem !important; + } + .pt-xxl-2 { + padding-top: 0.5rem !important; + } + .pt-xxl-3 { + padding-top: 1rem !important; + } + .pt-xxl-4 { + padding-top: 1.5rem !important; + } + .pt-xxl-5 { + padding-top: 3rem !important; + } + .pe-xxl-0 { + padding-right: 0 !important; + } + .pe-xxl-1 { + padding-right: 0.25rem !important; + } + .pe-xxl-2 { + padding-right: 0.5rem !important; + } + .pe-xxl-3 { + padding-right: 1rem !important; + } + .pe-xxl-4 { + padding-right: 1.5rem !important; + } + .pe-xxl-5 { + padding-right: 3rem !important; + } + .pb-xxl-0 { + padding-bottom: 0 !important; + } + .pb-xxl-1 { + padding-bottom: 0.25rem !important; + } + .pb-xxl-2 { + padding-bottom: 0.5rem !important; + } + .pb-xxl-3 { + padding-bottom: 1rem !important; + } + .pb-xxl-4 { + padding-bottom: 1.5rem !important; + } + .pb-xxl-5 { + padding-bottom: 3rem !important; + } + .ps-xxl-0 { + padding-left: 0 !important; + } + .ps-xxl-1 { + padding-left: 0.25rem !important; + } + .ps-xxl-2 { + padding-left: 0.5rem !important; + } + .ps-xxl-3 { + padding-left: 1rem !important; + } + .ps-xxl-4 { + padding-left: 1.5rem !important; + } + .ps-xxl-5 { + padding-left: 3rem !important; + } + .gap-xxl-0 { + gap: 0 !important; + } + .gap-xxl-1 { + gap: 0.25rem !important; + } + .gap-xxl-2 { + gap: 0.5rem !important; + } + .gap-xxl-3 { + gap: 1rem !important; + } + .gap-xxl-4 { + gap: 1.5rem !important; + } + .gap-xxl-5 { + gap: 3rem !important; + } + .row-gap-xxl-0 { + row-gap: 0 !important; + } + .row-gap-xxl-1 { + row-gap: 0.25rem !important; + } + .row-gap-xxl-2 { + row-gap: 0.5rem !important; + } + .row-gap-xxl-3 { + row-gap: 1rem !important; + } + .row-gap-xxl-4 { + row-gap: 1.5rem !important; + } + .row-gap-xxl-5 { + row-gap: 3rem !important; + } + .column-gap-xxl-0 { + column-gap: 0 !important; + } + .column-gap-xxl-1 { + column-gap: 0.25rem !important; + } + .column-gap-xxl-2 { + column-gap: 0.5rem !important; + } + .column-gap-xxl-3 { + column-gap: 1rem !important; + } + .column-gap-xxl-4 { + column-gap: 1.5rem !important; + } + .column-gap-xxl-5 { + column-gap: 3rem !important; + } + .text-xxl-start { + text-align: left !important; + } + .text-xxl-end { + text-align: right !important; + } + .text-xxl-center { + text-align: center !important; + } +} +@media (min-width: 1200px) { + .fs-1 { + font-size: 2.5rem !important; + } + .fs-2 { + font-size: 2rem !important; + } + .fs-3 { + font-size: 1.75rem !important; + } + .fs-4 { + font-size: 1.5rem !important; + } +} +@media print { + .d-print-inline { + display: inline !important; + } + .d-print-inline-block { + display: inline-block !important; + } + .d-print-block { + display: block !important; + } + .d-print-grid { + display: grid !important; + } + .d-print-inline-grid { + display: inline-grid !important; + } + .d-print-table { + display: table !important; + } + .d-print-table-row { + display: table-row !important; + } + .d-print-table-cell { + display: table-cell !important; + } + .d-print-flex { + display: flex !important; + } + .d-print-inline-flex { + display: inline-flex !important; + } + .d-print-none { + display: none !important; + } +} +/* Mixin helpers +-------------------------------------------------- */ +/* Footer +-------------------------------------------------- */ +.footer-main { + background: #515151; + color: #fff; + min-height: 110px; + text-shadow: none; +} +.footer-main a { + text-decoration: none; + color: #fff; +} + +.footer-patreon { + filter: invert(1); +} + +[data-bs-theme=dark] .footer-main { + background: var(--bs-body-bg-subtle); +} + +#footer-splash { + cursor: pointer; +} +#footer-splash > * { + padding-top: 0.25rem; +} + +.footer-powered-by img { + width: 40px; + -moz-transform: scale(1); + -webkit-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + -moz-transition: all 0.1s ease-in-out; + -webkit-transition: all 0.1s ease-in-out; + -ms-transition: all 0.1s ease-in-out; + -o-transition: all 0.1s ease-in-out; + transition: all 0.1s ease-in-out; + margin-left: 6px; + margin-right: 6px; +} +.footer-powered-by img:hover { + -moz-transform: scale(1.2); + -webkit-transform: scale(1.2); + -o-transform: scale(1.2); + -ms-transform: scale(1.2); + transform: scale(1.2); +} + +.footer-patreon img { + margin-left: 0px; +} +.footer-patreon img.patreon-wordmark { + height: 60px; + margin-left: -15px; +} + +[data-bs-theme=dark] body { + color: var(--bs-secondary-color); + background-color: var(--bs-body-bg-subtle); +} +[data-bs-theme=dark] .navbar { + background-color: #111; +} + +* { + transition: background-color 0.5s ease; +} + +body { + background-color: #dfebe7; +} + +.container-main { + margin-top: 5em; +} + +a { + text-decoration: none; + transition: all 0.25s ease 0s; +} + +a:hover { + text-decoration: none; +} + +a, +object { + outline: 0; +} + +a.showcaseTarget:hover > img { + -moz-transform: scale(1); + -webkit-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + -moz-transition: all 0.1s ease-in-out; + -webkit-transition: all 0.1s ease-in-out; + -ms-transition: all 0.1s ease-in-out; + -o-transition: all 0.1s ease-in-out; + transition: all 0.1s ease-in-out; +} +a.showcaseTarget:hover > img:hover { + -moz-transform: scale(1.1); + -webkit-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} + +a.header-anchor { + color: var(--bs-body-color); +} + +a.header-anchor::after { + content: " #"; + opacity: 0; + transition: all 0.1s ease-out; +} + +a.header-anchor:hover::after { + opacity: 1; +} + +a.header-anchor::before { + display: block; + content: " "; + margin-top: -75px; + height: 75px; + visibility: hidden; +} + +.icon-link-hover:hover > i { + opacity: 1; +} + +@keyframes rotate-back-and-forth { + 0% { + transform: rotate(0deg); + } + 50% { + transform: rotate(10deg); + } + 100% { + transform: rotate(0deg); + } +} +.icon-link-hover:active > i { + opacity: 1; + animation: rotate-back-and-forth 0.1s; + animation-iteration-count: 3; +} + +@keyframes fadeIn { + 0% { + opacity: 0%; + } + 100% { + opacity: 100%; + } +} +.icon-link-hover:active > i::after { + display: inline-block; + position: absolute; + width: auto; + font-size: medium; + top: 0.5em; + text-wrap: nowrap; + content: " link copied to clipboard"; + opacity: 0.8; + animation: fadeIn 0.1s ease-out; +} + +.icon-link-hover > i { + opacity: 0; + transform: translate(0, 2px); + transition: all 0.1s ease-out; +} + +.icon-link-hover { + cursor: pointer; +} + +.members-list img { + max-width: 40px; + float: left; +} + +.columns-2 > h3, .columns-2 > .h3 { + margin: 0; +} + +.columns-2 > ul { + margin-bottom: 0; +} + +/* Navbar + -------------------------------------------------- */ +.navbar { + background-color: #222; +} +.navbar a, +.navbar li > a { + transition: all 0.25s ease 0s; + color: #fff !important; +} +.navbar .navbar-toggler { + color: #fff; + font-size: 2rem; +} +.navbar a:hover, +.navbar .navbar-brand { + color: #fff !important; +} + +.search-form { + float: right; +} + +.inverse-dropdown { + background-color: #222 !important; + border-color: #080808 !important; +} + +.inverse-dropdown.divider { + background-color: #000 !important; +} + +.inverse-dropdown > li > a { + color: #9d9d9d !important; +} + +.inverse-dropdown > li > a:hover { + color: #fff !important; + background-color: #000 !important; +} + +.nav .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.nav a:hover .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +/* Site Styles + -------------------------------------------------- */ +.level-up-labs-logo { + height: 94px; +} + +.aseprite-logo { + max-width: 234px; +} + +.btn-header { + float: right; + margin-top: -60px; + padding: 4px 6px; + /* Text on the button not clickable otherwise! */ + position: relative; +} + +.btn-api { + float: right; + margin-top: -62px; + margin-right: 85px; + padding: 4px 6px; + /* Text on the button not clickable otherwise! */ + position: relative; +} + +.btn-edit { + float: right; + margin-top: -62px; + padding: 4px 6px; + /* Text on the button not clickable otherwise! */ + position: relative; +} + +.btn-source { + float: right; + margin-top: 20px; + padding: 4px 6px; + /* Text on the button not clickable otherwise! */ + position: relative; + z-index: 99; +} + +.title { + position: relative; + padding-bottom: 14px; + color: var(--bs-emphasis-color); +} + +.title:before { + background-image: -webkit-linear-gradient(left, #ffbf37 0%, #ffbf37 20%, #ff2346 20%, #ff2346 40%, #00b92b 40%, #00b92b 60%, #3b43ff 60%, #3b43ff 80%, #0bc8ff 80%, #0bc8ff 100%); + background-image: -moz-linear-gradient(left center, #ffbf37 0%, #ffbf37 20%, #ff2346 20%, #ff2346 40%, #00b92b 40%, #00b92b 60%, #3b43ff 60%, #3b43ff 80%, #0bc8ff 80%, #0bc8ff 100%); + bottom: -6px; + content: ""; + height: 4px; + left: 0; + margin-bottom: 8px; + position: absolute; + right: 0; +} + +pre .title:before { + background-image: none; +} + +.center-align-a { + text-align: center; +} + +.center-align-a > a { + -moz-transform: scale(1); + -webkit-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + -moz-transition: all 0.1s ease-in-out; + -webkit-transition: all 0.1s ease-in-out; + -ms-transition: all 0.1s ease-in-out; + -o-transition: all 0.1s ease-in-out; + transition: all 0.1s ease-in-out; +} +.center-align-a > a:hover { + -moz-transform: scale(1.1); + -webkit-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} + +.container-main { + margin-bottom: 150px; + background: var(--bs-secondary-bg); + border: 1px solid var(--bs-tertiary-bg); + border-radius: 10px; + min-height: 820px; + padding: 16px; + overflow: hidden; + color: rgba(var(--bs-body-color)); +} + +.container-main-content { + max-width: 600px; + margin: 0 auto; +} + +.heading-menu-item > a { + margin-left: 0; +} + +.sponsor-logos img { + margin: 16px; + max-height: 216px; +} + +.level-up-labs-logo { + height: 94px; +} + +.aseprite-logo { + max-width: 234px; +} + +pre { + outline-style: solid; + outline-width: 1px; + outline-color: #000; + white-space: pre; + display: block; +} + +.highlight-language { + background-color: rgba(var(--bs-emphasis-color), 0.75); + padding-right: 5px; + padding-left: 5px; + border-bottom-left-radius: 5px; +} + +code { + padding: 0; + padding-top: 0.2em; + padding-bottom: 0.2em; + margin: 0; + font-size: 85%; + background-color: rgba(27, 31, 35, 0.05); + border-radius: 3px; + border: 0px; +} + +/* Homepage styles +-------------------------------------------------- */ +.flixel-footer-logo { + height: 40px; +} + +.footer-powered-by img.openfl-footer-logo { + width: 46px; +} + +.lead-line { + font-size: 30px; + font-weight: 200; + padding-bottom: 30px; + padding-top: 10px; +} + +.lead-line-large { + font-size: 30px; + font-weight: 200; +} + +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + width: 100%; +} + +.home-button { + font-size: 20px; + background: #ececec; + border-radius: 10px; + padding: 16px 30px; + text-decoration: none; + text-shadow: 0px 1px 0px #fff; + border: 1px solid #a7a7a7; + box-shadow: 0px 2px 1px white inset, 0px -2px 8px white, 0px 2px 5px rgba(0, 0, 0, 0.1), 0px 8px 10px rgba(0, 0, 0, 0.1); + -webkit-transition: box-shadow 0.5s; + margin-left: 4; + margin-right: 4px; + text-align: center; +} +.home-button:hover { + box-shadow: 0px 2px 1px white inset, 0px -2px 20px white, 0px 2px 5px rgba(0, 0, 0, 0.1), 0px 8px 10px rgba(0, 0, 0, 0.1); +} +.home-button:active { + top: 2px; + position: relative; + box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.5) inset, 0px -2px 20px white, 0px 1px 5px rgba(0, 0, 0, 0.1), 0px 2px 10px rgba(0, 0, 0, 0.1); + background: -webkit-linear-gradient(top, #d1d1d1 0%, #ececec 100%); +} + +.sponsors-button { + font-size: 24px; + display: block; + width: 300px; + margin: 0 auto; +} + +.platinum-container { + display: flex; + justify-content: center; + align-items: center; + font-family: "VT323", monospace; + font-size: 56px; +} + +.home-header { + margin-top: 5em; +} + +.home-header h1, .home-header .h1 { + font-size: calc(1.925rem + 8.1vw); + line-height: 1; +} +@media (min-width: 1200px) { + .home-header h1, .home-header .h1 { + font-size: 8rem; + } +} + +.home-social { + margin-top: 2em; +} + +.home-section-features { + position: relative; + padding: 1em; + text-align: left; + font-size: 1.1em; +} + +.home-section { + position: relative; + padding: 1em; + text-align: center; +} + +.demos-home img { + margin: 0.5em; + box-shadow: var(--bs-box-shadow); +} + +.games-home .showcase-list { + display: flex; + flex-wrap: wrap; + justify-content: space-evenly; +} + +.games-home a { + margin: 0.5em; + gap: 0.25em; +} + +.platform-logos-home img { + padding: 10px; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=$value*100)"; + -moz-opacity: 0.7; + -khtml-opacity: 0.7; + opacity: 0.7; + filter: url("data:image/svg+xml;utf8,#grayscale"); /* Firefox 10+, Firefox on Android */ + filter: gray; /* IE6-9 */ + -webkit-filter: grayscale(100%); /* Chrome 19+, Safari 6+, Safari 6+ iOS */ +} + +[data-bs-theme=dark] .platform-logos-home img { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=$value*100)"; + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; + filter: invert(0.7); +} + +.platform-demos-home img { + -moz-transform: scale(1); + -webkit-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + -moz-transition: all 0.1s ease-in-out; + -webkit-transition: all 0.1s ease-in-out; + -ms-transition: all 0.1s ease-in-out; + -o-transition: all 0.1s ease-in-out; + transition: all 0.1s ease-in-out; + padding: 10px; +} +.platform-demos-home img:hover { + -moz-transform: scale(1.1); + -webkit-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} + +.twitter-follow-button.twitter-follow-button { + height: 36px; +} + +.home-big-logo img { + -moz-transform: scale(1); + -webkit-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + -moz-transition: all 0.1s ease-in-out; + -webkit-transition: all 0.1s ease-in-out; + -ms-transition: all 0.1s ease-in-out; + -o-transition: all 0.1s ease-in-out; + transition: all 0.1s ease-in-out; + padding-bottom: 15px; +} +.home-big-logo img:hover { + -moz-transform: scale(1.1); + -webkit-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} + +.navbar-fixed-top { + box-shadow: 0 0 3px 3px rgba(0, 0, 0, 0.3); +} + +.icon-next.tweet-next { + right: 0; + position: absolute; + left: 100%; +} + +.icon-prev.tweet-prev { + right: 100%; + position: absolute; + left: 0; +} + +.home-section-powered img { + -moz-transform: scale(1); + -webkit-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + -moz-transition: all 0.1s ease-in-out; + -webkit-transition: all 0.1s ease-in-out; + -ms-transition: all 0.1s ease-in-out; + -o-transition: all 0.1s ease-in-out; + transition: all 0.1s ease-in-out; +} +.home-section-powered img:hover { + -moz-transform: scale(1.03); + -webkit-transform: scale(1.03); + -o-transform: scale(1.03); + -ms-transform: scale(1.03); + transform: scale(1.03); +} + +.home-section-powered span { + font-size: 48px; +} + +.patreon-home img { + max-width: 240px; + vertical-align: top; + margin-left: 30px; +} + +.backer-hr { + margin-top: 60px; +} + +.home-sponsor-logos img { + margin: 16px; + max-height: 174px; +} + +/* Blog +-------------------------------------------------- */ +.twitter-widget { + margin-top: 70px; +} + +.post-date { + text-align: right; + color: #b8b8b8; +} + +.blog-card:hover { + outline-width: 4px; +} + +.blog-card { + transition: outline-width 0.1s ease-out; + outline-width: 0px; + outline-style: solid; +} + +.post-date-preview { + position: relative; + top: -35px; + height: 0px; +} + +.showcase-targets img { + padding-top: 10px; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=$value*100)"; + -moz-opacity: 0.7; + -khtml-opacity: 0.7; + opacity: 0.7; +} + +h1, .h1, +h3, +.h3 { + color: var(--bs-emphasis-color); +} + +[data-bs-theme=dark] .showcase-targets img { + filter: invert(1); +} + +.showcases-target-active img { + filter: url("data:image/svg+xml;utf8,#grayscale"); + -webkit-filter: grayscale(0%); + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=$value*100)"; + -moz-opacity: 0.7; + -khtml-opacity: 0.7; + opacity: 0.7; +} + +.showcases-target img { + filter: url("data:image/svg+xml;utf8,#grayscale"); /* Firefox 10+, Firefox on Android */ + filter: gray; /* IE6-9 */ + -webkit-filter: grayscale(100%); /* Chrome 19+, Safari 6+, Safari 6+ iOS */ + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=$value*100)"; + -moz-opacity: 0.1; + -khtml-opacity: 0.1; + opacity: 0.1; +} + +.showcase-grid .col-md-4:nth-child(3n+1) { + clear: both; +} + +.showcase-game-thumbnail img { + box-shadow: var(--bs-box-shadow); + width: 100%; + max-width: 500px; + height: auto; +} + +.showcase-game { + padding-bottom: 40px; +} +.showcase-game h3, .showcase-game .h3 { + height: 60px; + width: 540px; + position: relative; + bottom: 10px; + display: table-cell; + vertical-align: bottom; +} + +/* Demos +-------------------------------------------------- */ +.demo-page.center-align-a img { + box-shadow: var(--bs-box-shadow); + width: 100%; + height: auto; +} + +.demo-page.center-align-a p { + font-size: 1rem; + text-align: center; + position: relative; + width: 100%; + margin: 0; + top: 2em; + color: white; + background: rgba(0, 0, 0, 0.7); +} + +#page-tr-info { + float: right; + margin-top: -60px; + position: relative; + z-index: 99; +} + +.demo-button { + cursor: pointer; + cursor: hand; +} + +.demo-button .logo { + fill: #afafaf; +} + +.flash-button.active .logo, +.flash-button:hover .logo { + fill: red; +} + +.html5-button.active .logo, +.html5-button:hover .logo { + fill: orange; +} + +.html5-demo { + border: none; + margin: 0 auto; + display: block; +} + +.install-flash-player-prompt { + width: 110px; +} + +/*# sourceMappingURL=style.css.map */ diff --git a/styles/style.css.map b/styles/style.css.map new file mode 100644 index 000000000..41f37d27a --- /dev/null +++ b/styles/style.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../node_modules/bootstrap/scss/mixins/_banner.scss","../../content/_scss/style.scss","../../content/_scss/sections/home.scss","../../node_modules/bootstrap/scss/_root.scss","../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../node_modules/bootstrap/scss/mixins/_color-mode.scss","../../node_modules/bootstrap/scss/_reboot.scss","../../node_modules/bootstrap/scss/_variables.scss","../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../node_modules/bootstrap/scss/_type.scss","../../node_modules/bootstrap/scss/mixins/_lists.scss","../../node_modules/bootstrap/scss/_images.scss","../../node_modules/bootstrap/scss/mixins/_image.scss","../../node_modules/bootstrap/scss/_containers.scss","../../node_modules/bootstrap/scss/mixins/_container.scss","../../node_modules/bootstrap/scss/mixins/_breakpoints.scss","../../node_modules/bootstrap/scss/_grid.scss","../../node_modules/bootstrap/scss/mixins/_grid.scss","../../node_modules/bootstrap/scss/_tables.scss","../../node_modules/bootstrap/scss/mixins/_table-variants.scss","../../node_modules/bootstrap/scss/forms/_labels.scss","../../node_modules/bootstrap/scss/forms/_form-text.scss","../../node_modules/bootstrap/scss/forms/_form-control.scss","../../node_modules/bootstrap/scss/mixins/_transition.scss","../../node_modules/bootstrap/scss/mixins/_gradients.scss","../../node_modules/bootstrap/scss/forms/_form-select.scss","../../node_modules/bootstrap/scss/forms/_form-check.scss","../../node_modules/bootstrap/scss/forms/_form-range.scss","../../node_modules/bootstrap/scss/forms/_floating-labels.scss","../../node_modules/bootstrap/scss/forms/_input-group.scss","../../node_modules/bootstrap/scss/mixins/_forms.scss","../../node_modules/bootstrap/scss/_buttons.scss","../../node_modules/bootstrap/scss/mixins/_buttons.scss","../../node_modules/bootstrap/scss/_transitions.scss","../../node_modules/bootstrap/scss/_dropdown.scss","../../node_modules/bootstrap/scss/mixins/_caret.scss","../../node_modules/bootstrap/scss/_button-group.scss","../../node_modules/bootstrap/scss/_nav.scss","../../node_modules/bootstrap/scss/_navbar.scss","../../node_modules/bootstrap/scss/_card.scss","../../node_modules/bootstrap/scss/_accordion.scss","../../node_modules/bootstrap/scss/_breadcrumb.scss","../../node_modules/bootstrap/scss/_pagination.scss","../../node_modules/bootstrap/scss/mixins/_pagination.scss","../../node_modules/bootstrap/scss/_badge.scss","../../node_modules/bootstrap/scss/_alert.scss","../../node_modules/bootstrap/scss/_progress.scss","../../node_modules/bootstrap/scss/_list-group.scss","../../node_modules/bootstrap/scss/_close.scss","../../node_modules/bootstrap/scss/_toasts.scss","../../node_modules/bootstrap/scss/_modal.scss","../../node_modules/bootstrap/scss/mixins/_backdrop.scss","../../node_modules/bootstrap/scss/_tooltip.scss","../../node_modules/bootstrap/scss/mixins/_reset-text.scss","../../node_modules/bootstrap/scss/_popover.scss","../../node_modules/bootstrap/scss/_carousel.scss","../../node_modules/bootstrap/scss/mixins/_clearfix.scss","../../node_modules/bootstrap/scss/_spinners.scss","../../node_modules/bootstrap/scss/_offcanvas.scss","../../node_modules/bootstrap/scss/_placeholders.scss","../../node_modules/bootstrap/scss/helpers/_color-bg.scss","../../node_modules/bootstrap/scss/helpers/_colored-links.scss","../../node_modules/bootstrap/scss/helpers/_focus-ring.scss","../../node_modules/bootstrap/scss/helpers/_icon-link.scss","../../node_modules/bootstrap/scss/helpers/_ratio.scss","../../node_modules/bootstrap/scss/helpers/_position.scss","../../node_modules/bootstrap/scss/helpers/_stacks.scss","../../node_modules/bootstrap/scss/helpers/_visually-hidden.scss","../../node_modules/bootstrap/scss/mixins/_visually-hidden.scss","../../node_modules/bootstrap/scss/helpers/_stretched-link.scss","../../node_modules/bootstrap/scss/helpers/_text-truncation.scss","../../node_modules/bootstrap/scss/mixins/_text-truncate.scss","../../node_modules/bootstrap/scss/helpers/_vr.scss","../../node_modules/bootstrap/scss/mixins/_utilities.scss","../../node_modules/bootstrap/scss/utilities/_api.scss","../../content/_scss/mixins/helpers.scss","../../content/_scss/footer.scss","../../content/_scss/color-styles.scss","../../content/_scss/sections/blog.scss","../../content/_scss/sections/showcase.scss","../../content/_scss/sections/demos.scss"],"names":[],"mappings":";AACE;AAAA;AAAA;AAAA;AAAA;ACSM;ACVA;ACAR;AAAA;EASI;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAGF;EACA;EAMA;EACA;EACA;EAOA;EC2OI,qBALI;EDpOR;EACA;EAKA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAGA;EAEA;EACA;EACA;EAEA;EACA;EAMA;EACA;EACA;EAGA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EAIA;EACA;EACA;EAIA;EACA;EACA;EACA;;;AEhHE;EFsHA;EAGA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAGE;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAGF;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;;;AGxKJ;AAAA;AAAA;EAGE;;;AAeE;EANJ;IAOM;;;;AAcN;EACE;EACA;EF6OI,WALI;EEtOR;EACA;EACA;EACA;EACA;EACA;EACA;;;AASF;EACE;EACA,OCmnB4B;EDlnB5B;EACA;EACA,SCynB4B;;;AD/mB9B;EACE;EACA,eCwjB4B;EDrjB5B,aCwjB4B;EDvjB5B,aCwjB4B;EDvjB5B;;;AAGF;EFuMQ;;AA5JJ;EE3CJ;IF8MQ;;;;AEzMR;EFkMQ;;AA5JJ;EEtCJ;IFyMQ;;;;AEpMR;EF6LQ;;AA5JJ;EEjCJ;IFoMQ;;;;AE/LR;EFwLQ;;AA5JJ;EE5BJ;IF+LQ;;;;AE1LR;EF+KM,WALI;;;AErKV;EF0KM,WALI;;;AE1JV;EACE;EACA,eCwV0B;;;AD9U5B;EACE;EACA;EACA;;;AAMF;EACE;EACA;EACA;;;AAMF;AAAA;EAEE;;;AAGF;AAAA;AAAA;EAGE;EACA;;;AAGF;AAAA;AAAA;AAAA;EAIE;;;AAGF;EACE,aC6b4B;;;ADxb9B;EACE;EACA;;;AAMF;EACE;;;AAQF;AAAA;EAEE,aCsa4B;;;AD9Z9B;EF6EM,WALI;;;AEjEV;EACE,SCqf4B;EDpf5B;EACA;;;AASF;AAAA;EAEE;EFwDI,WALI;EEjDR;EACA;;;AAGF;EAAM;;;AACN;EAAM;;;AAKN;EACE;EACA,iBCgNwC;;AD9MxC;EACE;;;AAWF;EAEE;EACA;;;AAOJ;AAAA;AAAA;AAAA;EAIE,aCgV4B;EHlUxB,WALI;;;AEDV;EACE;EACA;EACA;EACA;EFEI,WALI;;AEQR;EFHI,WALI;EEUN;EACA;;;AAIJ;EFVM,WALI;EEiBR;EACA;;AAGA;EACE;;;AAIJ;EACE;EFtBI,WALI;EE6BR,OCy5CkC;EDx5ClC,kBCy5CkC;EC9rDhC;;AFwSF;EACE;EF7BE,WALI;;;AE6CV;EACE;;;AAMF;AAAA;EAEE;;;AAQF;EACE;EACA;;;AAGF;EACE,aC4X4B;ED3X5B,gBC2X4B;ED1X5B,OC4Z4B;ED3Z5B;;;AAOF;EAEE;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;EACA;EACA;;;AAQF;EACE;;;AAMF;EAEE;;;AAQF;EACE;;;AAKF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EF5HI,WALI;EEmIR;;;AAIF;AAAA;EAEE;;;AAKF;EACE;;;AAGF;EAGE;;AAGA;EACE;;;AAOJ;EACE;;;AAQF;AAAA;AAAA;AAAA;EAIE;;AAGE;AAAA;AAAA;AAAA;EACE;;;AAON;EACE;EACA;;;AAKF;EACE;;;AAUF;EACE;EACA;EACA;EACA;;;AAQF;EACE;EACA;EACA;EACA,eCmN4B;EHpatB;EEoNN;;AFhXE;EEyWJ;IFtMQ;;;AE+MN;EACE;;;AAOJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;;;AAGF;EACE;;;AASF;EACE;EACA;;;AAQF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;EACE;;;AAKF;EACE;;;AAOF;EACE;EACA;;;AAKF;EACE;;;AAKF;EACE;;;AAOF;EACE;EACA;;;AAQF;EACE;;;AAQF;EACE;;;AGrkBF;ELmQM,WALI;EK5PR,aFwoB4B;;;AEnoB5B;ELgQM;EK5PJ,aFynBkB;EExnBlB,aFwmB0B;;AHzgB1B;EKpGF;ILuQM;;;;AKvQN;ELgQM;EK5PJ,aFynBkB;EExnBlB,aFwmB0B;;AHzgB1B;EKpGF;ILuQM;;;;AKvQN;ELgQM;EK5PJ,aFynBkB;EExnBlB,aFwmB0B;;AHzgB1B;EKpGF;ILuQM;;;;AKvQN;ELgQM;EK5PJ,aFynBkB;EExnBlB,aFwmB0B;;AHzgB1B;EKpGF;ILuQM;;;;AKvQN;ELgQM;EK5PJ,aFynBkB;EExnBlB,aFwmB0B;;AHzgB1B;EKpGF;ILuQM;;;;AKvQN;ELgQM;EK5PJ,aFynBkB;EExnBlB,aFwmB0B;;AHzgB1B;EKpGF;ILuQM;;;;AK/OR;ECvDE;EACA;;;AD2DF;EC5DE;EACA;;;AD8DF;EACE;;AAEA;EACE,cFsoB0B;;;AE5nB9B;EL8MM,WALI;EKvMR;;;AAIF;EACE,eFiUO;EH1HH,WALI;;AK/LR;EACE;;;AAIJ;EACE;EACA,eFuTO;EH1HH,WALI;EKtLR,OFtFS;;AEwFT;EACE;;;AEhGJ;ECIE;EAGA;;;ADDF;EACE,SJ+jDkC;EI9jDlC,kBJ+jDkC;EI9jDlC;EHGE;EIRF;EAGA;;;ADcF;EAEE;;;AAGF;EACE;EACA;;;AAGF;EPyPM,WALI;EOlPR,OJkjDkC;;;AMplDlC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ECHA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACsDE;EF5CE;IACE,WNkee;;;AQvbnB;EF5CE;IACE,WNkee;;;AQvbnB;EF5CE;IACE,WNkee;;;AQvbnB;EF5CE;IACE,WNkee;;;AQvbnB;EF5CE;IACE,WNkee;;;ASlfvB;EAEI;EAAA;EAAA;EAAA;EAAA;EAAA;;;AAKF;ECNA;EACA;EACA;EACA;EAEA;EACA;EACA;;ADEE;ECOF;EACA;EACA;EACA;EACA;EACA;;;AA+CI;EACE;;;AAGF;EApCJ;EACA;;;AAcA;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AA+BE;EAhDJ;EACA;;;AAqDQ;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AAuEQ;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAmEM;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AF1DN;EEUE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EA+BE;IAhDJ;IACA;;EAqDQ;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EAuEQ;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAmEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AF1DN;EEUE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EA+BE;IAhDJ;IACA;;EAqDQ;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EAuEQ;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAmEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AF1DN;EEUE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EA+BE;IAhDJ;IACA;;EAqDQ;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EAuEQ;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAmEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AF1DN;EEUE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EA+BE;IAhDJ;IACA;;EAqDQ;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EAuEQ;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAmEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AF1DN;EEUE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EA+BE;IAhDJ;IACA;;EAqDQ;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EAuEQ;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAmEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;ACrHV;EAEE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA,eXkYO;EWjYP,gBXusB4B;EWtsB5B;;AAOA;EACE;EAEA;EACA;EACA,qBX+sB0B;EW9sB1B;;AAGF;EACE;;AAGF;EACE;;;AAIJ;EACE;;;AAOF;EACE;;;AAUA;EACE;;;AAeF;EACE;;AAGA;EACE;;;AAOJ;EACE;;AAGF;EACE;;;AAUF;EACE;EACA;;;AAMF;EACE;EACA;;;AAQJ;EACE;EACA;;;AAQA;EACE;EACA;;;AC5IF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;ADiJA;EACE;EACA;;;AH3FF;EGyFA;IACE;IACA;;;AH3FF;EGyFA;IACE;IACA;;;AH3FF;EGyFA;IACE;IACA;;;AH3FF;EGyFA;IACE;IACA;;;AH3FF;EGyFA;IACE;IACA;;;AEnKN;EACE,ebu2BsC;;;Aa91BxC;EACE;EACA;EACA;EhB8QI,WALI;EgBrQR,ab+lB4B;;;Aa3lB9B;EACE;EACA;EhBoQI,WALI;;;AgB3PV;EACE;EACA;EhB8PI,WALI;;;AiBtRV;EACE,Yd+1BsC;EHrkBlC,WALI;EiBjRR,Od+1BsC;;;Aep2BxC;EACE;EACA;EACA;ElBwRI,WALI;EkBhRR,afkmB4B;EejmB5B,afymB4B;EexmB5B,Of43BsC;Ee33BtC;EACA,kBfq3BsC;Eep3BtC;EACA;EdGE;EeHE,YDMJ;;ACFI;EDhBN;ICiBQ;;;ADGN;EACE;;AAEA;EACE;;AAKJ;EACE,Ofs2BoC;Eer2BpC,kBfg2BoC;Ee/1BpC,cf82BoC;Ee72BpC;EAKE,YfkhBkB;;Ae9gBtB;EAME;EAMA;EAKA;;AAKF;EACE;EACA;;AAIF;EACE,Of40BoC;Ee10BpC;;AAQF;EAEE,kBf8yBoC;Ee3yBpC;;AAIF;EACE;EACA;EACA,mBforB0B;EenrB1B,OfsyBoC;EiBp4BtC,kBjBqiCgC;Eer8B9B;EACA;EACA;EACA;EACA,yBfgsB0B;Ee/rB1B;ECzFE,YD0FF;;ACtFE;ED0EJ;ICzEM;;;ADwFN;EACE,kBf47B8B;;;Aen7BlC;EACE;EACA;EACA;EACA;EACA,afwf4B;Eevf5B,Of2xBsC;Ee1xBtC;EACA;EACA;;AAEA;EACE;;AAGF;EAEE;EACA;;;AAWJ;EACE,Yf4wBsC;Ee3wBtC;ElByII,WALI;EIvQN;;AcuIF;EACE;EACA;EACA,mBfooB0B;;;AehoB9B;EACE,YfgwBsC;Ee/vBtC;ElB4HI,WALI;EIvQN;;AcoJF;EACE;EACA;EACA,mBf2nB0B;;;AennB5B;EACE,Yf6uBoC;;Ae1uBtC;EACE,Yf0uBoC;;AevuBtC;EACE,YfuuBoC;;;AeluBxC;EACE,OfquBsC;EepuBtC,Qf8tBsC;Ee7tBtC,SfilB4B;;Ae/kB5B;EACE;;AAGF;EACE;EdvLA;;Ac2LF;EACE;Ed5LA;;AcgMF;EAAoB,Qf8sBkB;;Ae7sBtC;EAAoB,Qf8sBkB;;;AkB75BxC;EACE;EAEA;EACA;EACA;ErBqRI,WALI;EqB7QR,alB+lB4B;EkB9lB5B,alBsmB4B;EkBrmB5B,OlBy3BsC;EkBx3BtC;EACA,kBlBk3BsC;EkBj3BtC;EACA;EACA,qBlB+9BkC;EkB99BlC,iBlB+9BkC;EkB99BlC;EjBHE;EeHE,YESJ;;AFLI;EEfN;IFgBQ;;;AEMN;EACE,clBs3BoC;EkBr3BpC;EAKE,YlBi+B4B;;AkB79BhC;EAEE,elB6uB0B;EkB5uB1B;;AAGF;EAEE,kBlBu1BoC;;AkBl1BtC;EACE;EACA;;;AAIJ;EACE,alBsuB4B;EkBruB5B,gBlBquB4B;EkBpuB5B,clBquB4B;EHlgBxB,WALI;EIvQN;;;AiB8CJ;EACE,alBkuB4B;EkBjuB5B,gBlBiuB4B;EkBhuB5B,clBiuB4B;EHtgBxB,WALI;EIvQN;;;AiBwDA;EACE;;;ACxEN;EACE;EACA,YnBq6BwC;EmBp6BxC,cnBq6BwC;EmBp6BxC,enBq6BwC;;AmBn6BxC;EACE;EACA;;;AAIJ;EACE,enB25BwC;EmB15BxC;EACA;;AAEA;EACE;EACA;EACA;;;AAIJ;EACE;EAEA;EACA,OnB04BwC;EmBz4BxC,QnBy4BwC;EmBx4BxC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,QnB24BwC;EmB14BxC;;AAGA;ElB3BE;;AkB+BF;EAEE,enBm4BsC;;AmBh4BxC;EACE,QnB03BsC;;AmBv3BxC;EACE,cnBs1BoC;EmBr1BpC;EACA,YnB8foB;;AmB3ftB;EACE,kBnB5BM;EmB6BN,cnB7BM;;AmB+BN;EAII;;AAIJ;EAII;;AAKN;EACE,kBnBjDM;EmBkDN,cnBlDM;EmBuDJ;;AAIJ;EACE;EACA;EACA,SnBk2BuC;;AmB31BvC;EACE;EACA,SnBy1BqC;;;AmB30B3C;EACE,cnBo1BgC;;AmBl1BhC;EACE;EAEA,OnB80B8B;EmB70B9B;EACA;EACA;ElBjHA;EeHE,YGsHF;;AHlHE;EG0GJ;IHzGM;;;AGmHJ;EACE;;AAGF;EACE,qBnB60B4B;EmBx0B1B;;AAKN;EACE,enBwzB8B;EmBvzB9B;;AAEA;EACE;EACA;;;AAKN;EACE;EACA,cnBsyBgC;;;AmBnyBlC;EACE;EACA;EACA;;AAIE;EACE;EACA;EACA,SnBspBwB;;;AmB/oB1B;EACE;;;ACnLN;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIA;EAA0B,YpB8gCa;;AoB7gCvC;EAA0B,YpB6gCa;;AoB1gCzC;EACE;;AAGF;EACE,OpB+/BuC;EoB9/BvC,QpB8/BuC;EoB7/BvC;EACA;EH1BF,kBjBkCQ;EoBNN,QpB6/BuC;EC1gCvC;EeHE,YImBF;;AJfE;EIMJ;IJLM;;;AIgBJ;EHjCF,kBjB8hCyC;;AoBx/BzC;EACE,OpBw+B8B;EoBv+B9B,QpBw+B8B;EoBv+B9B;EACA,QpBu+B8B;EoBt+B9B,kBpBu+B8B;EoBt+B9B;EnB7BA;;AmBkCF;EACE,OpBo+BuC;EoBn+BvC,QpBm+BuC;EoBl+BvC;EHpDF,kBjBkCQ;EoBoBN,QpBm+BuC;EC1gCvC;EeHE,YI6CF;;AJzCE;EIiCJ;IJhCM;;;AI0CJ;EH3DF,kBjB8hCyC;;AoB99BzC;EACE,OpB88B8B;EoB78B9B,QpB88B8B;EoB78B9B;EACA,QpB68B8B;EoB58B9B,kBpB68B8B;EoB58B9B;EnBvDA;;AmB4DF;EACE;;AAEA;EACE,kBpBg9BqC;;AoB78BvC;EACE,kBpB48BqC;;;AqBniC3C;EACE;;AAEA;AAAA;AAAA;EAGE,QrBwiCoC;EqBviCpC,YrBuiCoC;EqBtiCpC,arBuiCoC;;AqBpiCtC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ELRE,YKSF;;ALLE;EKTJ;ILUM;;;AKON;AAAA;EAEE;;AAEA;AAAA;EACE;;AAGF;AAAA;AAAA;EAEE,arB4gCkC;EqB3gClC,gBrB4gCkC;;AqBzgCpC;AAAA;EACE,arBugCkC;EqBtgClC,gBrBugCkC;;AqBngCtC;EACE,arBigCoC;EqBhgCpC,gBrBigCoC;;AqB1/BpC;AAAA;AAAA;AAAA;EACE;EACA,WrB2/BkC;;AqBz/BlC;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA,QrBm/BgC;EqBl/BhC;EACA,kBrBg0BgC;ECh3BpC;;AoBuDA;EACE;EACA,WrB0+BkC;;AqBr+BpC;EACE;;AAIJ;AAAA;EAEE,OrB1EO;;AqB4EP;AAAA;EACE,kBrB0yBkC;;;AsBj4BxC;EACE;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EAGE;EACA;EACA;EACA;;AAIF;AAAA;AAAA;EAGE;;AAMF;EACE;EACA;;AAEA;EACE;;;AAWN;EACE;EACA;EACA;EzB8OI,WALI;EyBvOR,atByjB4B;EsBxjB5B,atBgkB4B;EsB/jB5B,OtBm1BsC;EsBl1BtC;EACA;EACA,kBtB06BsC;EsBz6BtC;ErBtCE;;;AqBgDJ;AAAA;AAAA;AAAA;EAIE;EzBwNI,WALI;EIvQN;;;AqByDJ;AAAA;AAAA;AAAA;EAIE;EzB+MI,WALI;EIvQN;;;AqBkEJ;AAAA;EAEE;;;AAaE;AAAA;AAAA;AAAA;ErBjEA;EACA;;AqByEA;AAAA;AAAA;AAAA;ErB1EA;EACA;;AqBsFF;EACE;ErB1EA;EACA;;AqB6EF;AAAA;ErB9EE;EACA;;;AsBxBF;EACE;EACA;EACA,YvBu0BoC;EHrkBlC,WALI;E0B1PN,OvBkjCqB;;;AuB/iCvB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;E1BqPE,WALI;E0B7ON,OvBqiCqB;EuBpiCrB,kBvBoiCqB;EC/jCrB;;;AsBgCA;AAAA;AAAA;AAAA;EAEE;;;AA/CF;EAqDE,cvBuhCmB;EuBphCjB,evB81BgC;EuB71BhC;EACA;EACA;EACA;;AAGF;EACE,cvB4gCiB;EuBvgCf,YvBugCe;;;AuB5kCrB;EA+EI,evBu0BgC;EuBt0BhC;;;AAhFJ;EAuFE,cvBq/BmB;;AuBl/BjB;EAEE;EACA,evBq5B8B;EuBp5B9B;EACA;;AAIJ;EACE,cvBw+BiB;EuBn+Bf,YvBm+Be;;;AuB5kCrB;EAkHI;;;AAlHJ;EAyHE,cvBm9BmB;;AuBj9BnB;EACE,kBvBg9BiB;;AuB78BnB;EACE,YvB48BiB;;AuBz8BnB;EACE,OvBw8BiB;;;AuBn8BrB;EACE;;;AA1IF;AAAA;AAAA;AAAA;AAAA;EAoJM;;;AAhIR;EACE;EACA;EACA,YvBu0BoC;EHrkBlC,WALI;E0B1PN,OvBkjCqB;;;AuB/iCvB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;E1BqPE,WALI;E0B7ON,OvBqiCqB;EuBpiCrB,kBvBoiCqB;EC/jCrB;;;AsBgCA;AAAA;AAAA;AAAA;EAEE;;;AA/CF;EAqDE,cvBuhCmB;EuBphCjB,evB81BgC;EuB71BhC;EACA;EACA;EACA;;AAGF;EACE,cvB4gCiB;EuBvgCf,YvBugCe;;;AuB5kCrB;EA+EI,evBu0BgC;EuBt0BhC;;;AAhFJ;EAuFE,cvBq/BmB;;AuBl/BjB;EAEE;EACA,evBq5B8B;EuBp5B9B;EACA;;AAIJ;EACE,cvBw+BiB;EuBn+Bf,YvBm+Be;;;AuB5kCrB;EAkHI;;;AAlHJ;EAyHE,cvBm9BmB;;AuBj9BnB;EACE,kBvBg9BiB;;AuB78BnB;EACE,YvB48BiB;;AuBz8BnB;EACE,OvBw8BiB;;;AuBn8BrB;EACE;;;AA1IF;AAAA;AAAA;AAAA;AAAA;EAsJM;;;ACxJV;EAEE;EACA;EACA;E3BuRI,oBALI;E2BhRR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;E3BsQI,WALI;E2B/PR;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EvBjBE;EgBfF,kBOkCqB;ERtBjB,YQwBJ;;ARpBI;EQhBN;IRiBQ;;;AQqBN;EACE;EAEA;EACA;;AAGF;EAEE;EACA;EACA;;AAGF;EACE;EPrDF,kBOsDuB;EACrB;EACA;EAKE;;AAIJ;EACE;EACA;EAKE;;AAIJ;EAKE;EACA;EAGA;;AAGA;EAKI;;AAKN;EAKI;;AAIJ;EAGE;EACA;EACA;EAEA;EACA;;;AAYF;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADkGA;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADkGA;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADkGA;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADkGA;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADkGA;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADkGA;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADkGA;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADkGA;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADkGA;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADkGA;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADkGA;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADkGA;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AD4HA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADmGA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADmGA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADmGA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADmGA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADmGA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADmGA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADmGA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADmGA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADmGA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADmGA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADmGA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADmGA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AD+GF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,iBxB8QwC;;AwBpQxC;EACE;;AAGF;EACE;;;AAWJ;ECjJE;EACA;E5B8NI,oBALI;E4BvNR;;;ADkJF;ECrJE;EACA;E5B8NI,oBALI;E4BvNR;;;ACnEF;EVgBM,YUfJ;;AVmBI;EUpBN;IVqBQ;;;AUlBN;EACE;;;AAMF;EACE;;;AAIJ;EACE;EACA;EVDI,YUEJ;;AVEI;EULN;IVMQ;;;AUDN;EACE;EACA;EVNE,YUOF;;AVHE;EUAJ;IVCM;;;;AWpBR;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;;;AAGF;EACE;;ACwBE;EACE;EACA,a5B6hBwB;E4B5hBxB,gB5B2hBwB;E4B1hBxB;EArCJ;EACA;EACA;EACA;;AA0DE;EACE;;;AD9CN;EAEE;EACA;EACA;EACA;EACA;E9BuQI,yBALI;E8BhQR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;E9B0OI,WALI;E8BnOR;EACA;EACA;EACA;EACA;EACA;E1BzCE;;A0B6CF;EACE;EACA;EACA;;;AAwBA;EACE;;AAEA;EACE;EACA;;;AAIJ;EACE;;AAEA;EACE;EACA;;;AnB1CJ;EmB4BA;IACE;;EAEA;IACE;IACA;;EAIJ;IACE;;EAEA;IACE;IACA;;;AnB1CJ;EmB4BA;IACE;;EAEA;IACE;IACA;;EAIJ;IACE;;EAEA;IACE;IACA;;;AnB1CJ;EmB4BA;IACE;;EAEA;IACE;IACA;;EAIJ;IACE;;EAEA;IACE;IACA;;;AnB1CJ;EmB4BA;IACE;;EAEA;IACE;IACA;;EAIJ;IACE;;EAEA;IACE;IACA;;;AnB1CJ;EmB4BA;IACE;;EAEA;IACE;IACA;;EAIJ;IACE;;EAEA;IACE;IACA;;;AAUN;EACE;EACA;EACA;EACA;;ACpFA;EACE;EACA,a5B6hBwB;E4B5hBxB,gB5B2hBwB;E4B1hBxB;EA9BJ;EACA;EACA;EACA;;AAmDE;EACE;;;ADgEJ;EACE;EACA;EACA;EACA;EACA;;AClGA;EACE;EACA,a5B6hBwB;E4B5hBxB,gB5B2hBwB;E4B1hBxB;EAvBJ;EACA;EACA;EACA;;AA4CE;EACE;;AD0EF;EACE;;;AAMJ;EACE;EACA;EACA;EACA;EACA;;ACnHA;EACE;EACA,a5B6hBwB;E4B5hBxB,gB5B2hBwB;E4B1hBxB;;AAWA;EACE;;AAGF;EACE;EACA,c5B0gBsB;E4BzgBtB,gB5BwgBsB;E4BvgBtB;EAnCN;EACA;EACA;;AAsCE;EACE;;AD2FF;EACE;;;AAON;EACE;EACA;EACA;EACA;EACA;;;AAMF;EACE;EACA;EACA;EACA;EACA,a3Byb4B;E2Bxb5B;EACA;EACA;EACA;EACA;EACA;E1BtKE;;A0ByKF;EAEE;EV1LF,kBU4LuB;;AAGvB;EAEE;EACA;EVlMF,kBUmMuB;;AAGvB;EAEE;EACA;EACA;;;AAMJ;EACE;;;AAIF;EACE;EACA;EACA;E9BmEI,WALI;E8B5DR;EACA;;;AAIF;EACE;EACA;EACA;;;AAIF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AEtPF;AAAA;EAEE;EACA;EACA;;AAEA;AAAA;EACE;EACA;;AAKF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;;;AAKJ;EACE;EACA;EACA;;AAEA;EACE;;;AAIJ;E5BhBI;;A4BoBF;AAAA;EAEE;;AAIF;AAAA;AAAA;E5BVE;EACA;;A4BmBF;AAAA;AAAA;E5BNE;EACA;;;A4BwBJ;EACE;EACA;;AAEA;EAGE;;AAGF;EACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;;;AAoBF;EACE;EACA;EACA;;AAEA;AAAA;EAEE;;AAGF;AAAA;EAEE;;AAIF;AAAA;E5B1FE;EACA;;A4B8FF;AAAA;E5B7GE;EACA;;;A6BxBJ;EAEE;EACA;EAEA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EjCsQI,WALI;EiC/PR;EACA;EACA;EACA;EACA;EdfI,YcgBJ;;AdZI;EcGN;IdFQ;;;AcaN;EAEE;;AAIF;EACE;EACA,Y9BkhBoB;;A8B9gBtB;EAEE;EACA;EACA;;;AAQJ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;;AAEA;EACE;EACA;E7B7CA;EACA;;A6B+CA;EAGE;EACA;;AAIJ;AAAA;EAEE;EACA;EACA;;AAGF;EAEE;E7BjEA;EACA;;;A6B2EJ;EAEE;EACA;EACA;;AAGA;E7B5FE;;A6BgGF;AAAA;EAEE;EbjHF,kBakHuB;;;AASzB;EAEE;EACA;EACA;EAGA;;AAEA;EACE;EACA;EACA;;AAEA;EAEE;;AAIJ;AAAA;EAEE,a9B0d0B;E8Bzd1B;EACA;;;AAUF;AAAA;EAEE;EACA;;;AAKF;AAAA;EAEE;EACA;EACA;;;AAMF;AAAA;EACE;;;AAUF;EACE;;AAEF;EACE;;;AC7LJ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAoBJ;EACE;EACA;EACA;ElC4NI,WALI;EkCrNR;EACA;EACA;;AAEA;EAEE;;;AAUJ;EAEE;EACA;EAEA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;;AAGE;EAEE;;AAIJ;EACE;;;AASJ;EACE,a/B8gCkC;E+B7gClC,gB/B6gCkC;E+B5gClC;;AAEA;AAAA;AAAA;EAGE;;;AAaJ;EACE;EACA;EAGA;;;AAIF;EACE;ElCyII,WALI;EkClIR;EACA;EACA;EACA;E9BxIE;EeHE,Ye6IJ;;AfzII;EeiIN;IfhIQ;;;Ae0IN;EACE;;AAGF;EACE;EACA;EACA;;;AAMJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AvB1HE;EuBsIA;IAEI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE;IACA;;EAIJ;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;If9NJ,YegOI;;EAGA;IACE;;EAGF;IACE;IACA;IACA;IACA;;;AvB5LR;EuBsIA;IAEI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE;IACA;;EAIJ;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;If9NJ,YegOI;;EAGA;IACE;;EAGF;IACE;IACA;IACA;IACA;;;AvB5LR;EuBsIA;IAEI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE;IACA;;EAIJ;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;If9NJ,YegOI;;EAGA;IACE;;EAGF;IACE;IACA;IACA;IACA;;;AvB5LR;EuBsIA;IAEI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE;IACA;;EAIJ;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;If9NJ,YegOI;;EAGA;IACE;;EAGF;IACE;IACA;IACA;IACA;;;AvB5LR;EuBsIA;IAEI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE;IACA;;EAIJ;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;If9NJ,YegOI;;EAGA;IACE;;EAGF;IACE;IACA;IACA;IACA;;;AAtDR;EAEI;EACA;;AAEA;EACE;;AAEA;EACE;;AAGF;EACE;EACA;;AAIJ;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;Ef9NJ,YegOI;;AAGA;EACE;;AAGF;EACE;EACA;EACA;EACA;;;AAiBZ;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAME;EACE;;;ACzRN;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;E/BjBE;;A+BqBF;EACE;EACA;;AAGF;EACE;EACA;;AAEA;EACE;E/BtBF;EACA;;A+ByBA;EACE;E/BbF;EACA;;A+BmBF;AAAA;EAEE;;;AAIJ;EAGE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAQA;EACE;;;AAQJ;EACE;EACA;EACA;EACA;EACA;;AAEA;E/B7FE;;;A+BkGJ;EACE;EACA;EACA;EACA;;AAEA;E/BxGE;;;A+BkHJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;;AAIJ;EACE;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;E/B1IE;;;A+B8IJ;AAAA;AAAA;EAGE;;;AAGF;AAAA;E/B3II;EACA;;;A+B+IJ;AAAA;E/BlII;EACA;;;A+B8IF;EACE;;AxB3HA;EwBuHJ;IAQI;IACA;;EAGA;IAEE;IACA;;EAEA;IACE;IACA;;EAKA;I/B3KJ;IACA;;E+B6KM;AAAA;IAGE;;EAEF;AAAA;IAGE;;EAIJ;I/B5KJ;IACA;;E+B8KM;AAAA;IAGE;;EAEF;AAAA;IAGE;;;;ACpOZ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EpC4PI,WALI;EoCrPR;EACA;EACA;EACA;EhCrBE;EgCuBF;EjB1BI,YiB2BJ;;AjBvBI;EiBUN;IjBTQ;;;AiBwBN;EACE;EACA;EACA;;AAEA;EACE;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EjBjDE,YiBkDF;;AjB9CE;EiBqCJ;IjBpCM;;;AiBgDN;EACE;;AAGF;EACE;EACA;EACA;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;;AAEA;EhC7DE;EACA;;AgC+DA;EhChEA;EACA;;AgCoEF;EACE;;AAIF;EhC5DE;EACA;;AgC+DE;EhChEF;EACA;;AgCoEA;EhCrEA;EACA;;;AgC0EJ;EACE;;;AASA;EACE;EACA;EhC9GA;;AgCiHA;EAAgB;;AAChB;EAAe;;AAIb;EhCtHF;;AgC6HA;EhC7HA;;;AgCqIA;EACE;EACA;;;AC1JN;EAEE;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;ErC+QI,WALI;EqCxQR;EACA;EjCAE;;;AiCMF;EACE;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;;;ACrCJ;EAEE;EACA;EtC4RI,2BALI;EsCrRR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EhCpBA;EACA;;;AgCuBF;EACE;EACA;EACA;EtCgQI,WALI;EsCzPR;EACA;EACA;EACA;EnBpBI,YmBqBJ;;AnBjBI;EmBQN;InBPQ;;;AmBkBN;EACE;EACA;EAEA;EACA;;AAGF;EACE;EACA;EACA;EACA,SnC2uCgC;EmC1uChC;;AAGF;EAEE;EACA;ElBtDF,kBkBuDuB;EACrB;;AAGF;EAEE;EACA;EACA;EACA;;;AAKF;EACE,anC8sCgC;;AmCzsC9B;ElC9BF;EACA;;AkCmCE;ElClDF;EACA;;;AkCkEJ;EClGE;EACA;EvC0RI,2BALI;EuCnRR;;;ADmGF;ECtGE;EACA;EvC0RI,2BALI;EuCnRR;;;ACFF;EAEE;EACA;ExCuRI,sBALI;EwChRR;EACA;EACA;EAGA;EACA;ExC+QI,WALI;EwCxQR;EACA;EACA;EACA;EACA;EACA;EpCJE;;AoCSF;EACE;;;AAKJ;EACE;EACA;;;AChCF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;ErCHE;;;AqCQJ;EAEE;;;AAIF;EACE,atC6kB4B;EsC5kB5B;;;AAQF;EACE,etCs+C8B;;AsCn+C9B;EACE;EACA;EACA;EACA;EACA;;;AAQF;EACE;EACA;EACA;EACA;;;AAJF;EACE;EACA;EACA;EACA;;;AAJF;EACE;EACA;EACA;EACA;;;AAJF;EACE;EACA;EACA;EACA;;;AAJF;EACE;EACA;EACA;EACA;;;AAJF;EACE;EACA;EACA;EACA;;;AAJF;EACE;EACA;EACA;EACA;;;AAJF;EACE;EACA;EACA;EACA;;;AAJF;EACE;EACA;EACA;EACA;;;AAJF;EACE;EACA;EACA;EACA;;;AAJF;EACE;EACA;EACA;EACA;;;AAJF;EACE;EACA;EACA;EACA;;;AAJF;EACE;EACA;EACA;EACA;;;AC5DF;EACE;IAAK,uBvCyhD2B;;;AuCphDpC;AAAA;EAGE;E1CkRI,yBALI;E0C3QR;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;E1CsQI,WALI;E0C/PR;EtCRE;;;AsCaJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EvBxBI,YuByBJ;;AvBrBI;EuBYN;IvBXQ;;;;AuBuBR;EtBAE;EsBEA;;;AAGF;EACE;;;AAGF;EACE;;;AAIA;EACE;;AAGE;EAJJ;IAKM;;;;AC3DR;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAGA;EACA;EvCXE;;;AuCeJ;EACE;EACA;;AAEA;EAEE;EACA;;;AASJ;EACE;EACA;EACA;;AAGA;EAEE;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AAQJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EvCvDE;EACA;;AuC0DF;EvC7CE;EACA;;AuCgDF;EAEE;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAIF;EACE;;AAEA;EACE;EACA;;;AAaF;EACE;;AAGE;EvCvDJ;EAZA;;AuCwEI;EvCxEJ;EAYA;;AuCiEI;EACE;;AAGF;EACE;EACA;;AAEA;EACE;EACA;;;AhCtFR;EgC8DA;IACE;;EAGE;IvCvDJ;IAZA;;EuCwEI;IvCxEJ;IAYA;;EuCiEI;IACE;;EAGF;IACE;IACA;;EAEA;IACE;IACA;;;AhCtFR;EgC8DA;IACE;;EAGE;IvCvDJ;IAZA;;EuCwEI;IvCxEJ;IAYA;;EuCiEI;IACE;;EAGF;IACE;IACA;;EAEA;IACE;IACA;;;AhCtFR;EgC8DA;IACE;;EAGE;IvCvDJ;IAZA;;EuCwEI;IvCxEJ;IAYA;;EuCiEI;IACE;;EAGF;IACE;IACA;;EAEA;IACE;IACA;;;AhCtFR;EgC8DA;IACE;;EAGE;IvCvDJ;IAZA;;EuCwEI;IvCxEJ;IAYA;;EuCiEI;IACE;;EAGF;IACE;IACA;;EAEA;IACE;IACA;;;AhCtFR;EgC8DA;IACE;;EAGE;IvCvDJ;IAZA;;EuCwEI;IvCxEJ;IAYA;;EuCiEI;IACE;;EAGF;IACE;IACA;;EAEA;IACE;IACA;;;AAcZ;EvChJI;;AuCmJF;EACE;;AAEA;EACE;;;AAaJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAVF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAVF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAVF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAVF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAVF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAVF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAVF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAVF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAVF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAVF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAVF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAVF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AC5LJ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA,OzCqpD2B;EyCppD3B,QzCopD2B;EyCnpD3B;EACA;EACA;EACA;ExCJE;EwCMF;;AAGA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EAEE;EACA;EACA;;;AAQJ;EAHE;;;AASE;EATF;;;ACjDF;EAEE;EACA;EACA;EACA;EACA;E7CyRI,sBALI;E6ClRR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;E7C2QI,WALI;E6CpQR;EACA;EACA;EACA;EACA;EACA;EzCRE;;AyCWF;EACE;;AAGF;EACE;;;AAIJ;EACE;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EzChCE;EACA;;AyCkCF;EACE;EACA;;;AAIJ;EACE;EACA;;;AC9DF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;;;AAOF;EACE;EACA;EACA;EAEA;;AAGA;E3B5CI,Y2B6CF;EACA,W3Ck8CgC;;AgB5+C9B;E2BwCJ;I3BvCM;;;A2B2CN;EACE,W3Cg8CgC;;A2C57ClC;EACE,W3C67CgC;;;A2Cz7CpC;EACE;;AAEA;EACE;EACA;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;E1CrFE;E0CyFF;;;AAIF;EAEE;EACA;EACA;EClHA;EACA;EACA;EACA,SDkH0B;ECjH1B;EACA;EACA,kBD+G4D;;AC5G5D;EAAS;;AACT;EAAS,SD2GiF;;;AAK5F;EACE;EACA;EACA;EACA;EACA;E1CrGE;EACA;;A0CuGF;EACE;EACA;;;AAKJ;EACE;EACA;;;AAKF;EACE;EAGA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;E1CzHE;EACA;;A0C8HF;EACE;;;AnC3GA;EmCiHF;IACE;IACA;;EAIF;IACE;IACA;IACA;;EAGF;IACE;;;AnC9HA;EmCmIF;AAAA;IAEE;;;AnCrIA;EmC0IF;IACE;;;AAUA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;E1CzMJ;;A0C6ME;AAAA;E1C7MF;;A0CkNE;EACE;;;AnC1JJ;EmCwIA;IACE;IACA;IACA;IACA;;EAEA;IACE;IACA;I1CzMJ;;E0C6ME;AAAA;I1C7MF;;E0CkNE;IACE;;;AnC1JJ;EmCwIA;IACE;IACA;IACA;IACA;;EAEA;IACE;IACA;I1CzMJ;;E0C6ME;AAAA;I1C7MF;;E0CkNE;IACE;;;AnC1JJ;EmCwIA;IACE;IACA;IACA;IACA;;EAEA;IACE;IACA;I1CzMJ;;E0C6ME;AAAA;I1C7MF;;E0CkNE;IACE;;;AnC1JJ;EmCwIA;IACE;IACA;IACA;IACA;;EAEA;IACE;IACA;I1CzMJ;;E0C6ME;AAAA;I1C7MF;;E0CkNE;IACE;;;AnC1JJ;EmCwIA;IACE;IACA;IACA;IACA;;EAEA;IACE;IACA;I1CzMJ;;E0C6ME;AAAA;I1C7MF;;E0CkNE;IACE;;;AErOR;EAEE;EACA;EACA;EACA;EACA;EhDwRI,wBALI;EgDjRR;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EClBA,a9C+lB4B;E8C7lB5B;EACA,a9CwmB4B;E8CvmB5B,a9C+mB4B;E8C9mB5B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EjDgRI,WALI;EgDhQR;EACA;;AAEA;EAAS;;AAET;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;;AAKN;EACE;;AAEA;EACE;EACA;EACA;;;AAIJ;AACA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;;AAIJ;AAEA;EACE;;AAEA;EACE;EACA;EACA;;;AAIJ;AACA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;;AAIJ;AAkBA;EACE;EACA;EACA;EACA;EACA;E5CjGE;;;A8CnBJ;EAEE;EACA;ElD4RI,wBALI;EkDrRR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ElDmRI,+BALI;EkD5QR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EDzBA,a9C+lB4B;E8C7lB5B;EACA,a9CwmB4B;E8CvmB5B,a9C+mB4B;E8C9mB5B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EjDgRI,WALI;EkD1PR;EACA;EACA;EACA;E9ChBE;;A8CoBF;EACE;EACA;EACA;;AAEA;EAEE;EACA;EACA;EACA;EACA;EACA;;;AAMJ;EACE;;AAEA;EAEE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;;AAKN;AAEE;EACE;EACA;EACA;;AAEA;EAEE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;;AAKN;AAGE;EACE;;AAEA;EAEE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;AAEE;EACE;EACA;EACA;;AAEA;EAEE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;;AAKN;AAkBA;EACE;EACA;ElD2GI,WALI;EkDpGR;EACA;EACA;E9C5JE;EACA;;A8C8JF;EACE;;;AAIJ;EACE;EACA;;;ACrLF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;ACtBA;EACE;EACA;EACA;;;ADuBJ;EACE;EACA;EACA;EACA;EACA;EACA;EhClBI,YgCmBJ;;AhCfI;EgCQN;IhCPQ;;;;AgCiBR;AAAA;AAAA;EAGE;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AASA;EACE;EACA;EACA;;AAGF;AAAA;AAAA;EAGE;EACA;;AAGF;AAAA;EAEE;EACA;EhC5DE,YgC6DF;;AhCzDE;EgCqDJ;AAAA;IhCpDM;;;;AgCiER;AAAA;EAEE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA,OhDkhDmC;EgDjhDnC;EACA,OhD1FS;EgD2FT;EACA;EACA;EACA,ShD6gDmC;EgBnmD/B,YgCuFJ;;AhCnFI;EgCkEN;AAAA;IhCjEQ;;;AgCqFN;AAAA;AAAA;EAEE,OhDpGO;EgDqGP;EACA;EACA,ShDqgDiC;;;AgDlgDrC;EACE;;;AAGF;EACE;;;AAKF;AAAA;EAEE;EACA,OhDsgDmC;EgDrgDnC,QhDqgDmC;EgDpgDnC;EACA;EACA;;;AAGF;EACE;;;AAEF;EACE;;;AAQF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,chDs9CmC;EgDr9CnC;EACA,ahDo9CmC;;AgDl9CnC;EACE;EACA;EACA,OhDo9CiC;EgDn9CjC,QhDo9CiC;EgDn9CjC;EACA,chDo9CiC;EgDn9CjC,ahDm9CiC;EgDl9CjC;EACA;EACA,kBhDlKO;EgDmKP;EACA;EAEA;EACA;EACA,ShD28CiC;EgB3mD/B,YgCiKF;;AhC7JE;EgC4IJ;IhC3IM;;;AgC+JN;EACE,ShDw8CiC;;;AgD/7CrC;EACE;EACA;EACA,QhDk8CmC;EgDj8CnC;EACA,ahD+7CmC;EgD97CnC,gBhD87CmC;EgD77CnC,OhD7LS;EgD8LT;;;AAMA;AAAA;EAEE,QhDm8CiC;;AgDh8CnC;EACE,kBhDhMO;;AgDmMT;EACE,OhDpMO;;;AgD0LT;AAAA;AAAA;EAEE,QhDm8CiC;;AgDh8CnC;EACE,kBhDhMO;;AgDmMT;EACE,OhDpMO;;;AkDdX;AAAA;EAEE;EACA;EACA;EACA;EAEA;EACA;;;AAIF;EACE;IAAK;;;AAIP;EAEE;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;;;AAGF;EAEE;EACA;EACA;;;AASF;EACE;IACE;;EAEF;IACE;IACA;;;AAKJ;EAEE;EACA;EACA;EACA;EACA;EAGA;EACA;;;AAGF;EACE;EACA;;;AAIA;EACE;AAAA;IAEE;;;AC/EN;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;A3C6DE;E2C5CF;IAEI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;InC5BA,YmC8BA;;;AnC1BA;EmCYJ;InCXM;;;ARuDJ;E2C5BE;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;;EAGF;IAEE;;EAGF;IAGE;;;A3C5BJ;E2C/BF;IAiEM;IACA;IACA;;EAEA;IACE;;EAGF;IACE;IACA;IACA;IACA;IAEA;;;;A3CnCN;E2C5CF;IAEI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;InC5BA,YmC8BA;;;AnC1BA;EmCYJ;InCXM;;;ARuDJ;E2C5BE;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;;EAGF;IAEE;;EAGF;IAGE;;;A3C5BJ;E2C/BF;IAiEM;IACA;IACA;;EAEA;IACE;;EAGF;IACE;IACA;IACA;IACA;IAEA;;;;A3CnCN;E2C5CF;IAEI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;InC5BA,YmC8BA;;;AnC1BA;EmCYJ;InCXM;;;ARuDJ;E2C5BE;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;;EAGF;IAEE;;EAGF;IAGE;;;A3C5BJ;E2C/BF;IAiEM;IACA;IACA;;EAEA;IACE;;EAGF;IACE;IACA;IACA;IACA;IAEA;;;;A3CnCN;E2C5CF;IAEI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;InC5BA,YmC8BA;;;AnC1BA;EmCYJ;InCXM;;;ARuDJ;E2C5BE;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;;EAGF;IAEE;;EAGF;IAGE;;;A3C5BJ;E2C/BF;IAiEM;IACA;IACA;;EAEA;IACE;;EAGF;IACE;IACA;IACA;IACA;IAEA;;;;A3CnCN;E2C5CF;IAEI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;InC5BA,YmC8BA;;;AnC1BA;EmCYJ;InCXM;;;ARuDJ;E2C5BE;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;;EAGF;IAEE;;EAGF;IAGE;;;A3C5BJ;E2C/BF;IAiEM;IACA;IACA;;EAEA;IACE;;EAGF;IACE;IACA;IACA;IACA;IAEA;;;;AA/ER;EAEI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EnC5BA,YmC8BA;;AnC1BA;EmCYJ;InCXM;;;AmC2BF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EAEE;;AAGF;EAGE;;;AA2BR;EPpHE;EACA;EACA;EACA,S5C0mCkC;E4CzmClC;EACA;EACA,kB5CUS;;A4CPT;EAAS;;AACT;EAAS,S5Cm+CyB;;;AmDr3CpC;EACE;EACA;EACA;;AAEA;EACE;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AC7IF;EACE;EACA;EACA;EACA;EACA;EACA,SpDgzCkC;;AoD9yClC;EACE;EACA;;;AAKJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKA;EACE;;;AAIJ;EACE;IACE,SpDmxCgC;;;AoD/wCpC;EACE;EACA;EACA;;;AAGF;EACE;IACE;;;AH9CF;EACE;EACA;EACA;;;AIHF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;ACFF;EACE;EACA;;AAGE;EAGE;EACA;;;AATN;EACE;EACA;;AAGE;EAGE;EACA;;;AATN;EACE;EACA;;AAGE;EAGE;EACA;;;AATN;EACE;EACA;;AAGE;EAGE;EACA;;;AATN;EACE;EACA;;AAGE;EAGE;EACA;;;AATN;EACE;EACA;;AAGE;EAGE;EACA;;;AATN;EACE;EACA;;AAGE;EAGE;EACA;;;AATN;EACE;EACA;;AAGE;EAGE;EACA;;;AATN;EACE;EACA;;AAGE;EAGE;EACA;;;AATN;EACE;EACA;;AAGE;EAGE;EACA;;;AATN;EACE;EACA;;AAGE;EAGE;EACA;;;AATN;EACE;EACA;;AAGE;EAGE;EACA;;;AATN;EACE;EACA;;AAGE;EAGE;EACA;;;AAOR;EACE;EACA;;AAGE;EAEE;EACA;;;AC1BN;EACE;EAEA;;;ACHF;EACE;EACA,KxD6c4B;EwD5c5B;EACA;EACA,uBxD2c4B;EwD1c5B;;AAEA;EACE;EACA,OxDuc0B;EwDtc1B,QxDsc0B;EwDrc1B;ExCIE,YwCHF;;AxCOE;EwCZJ;IxCaM;;;;AwCDJ;EACE;;;ACnBN;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAKF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;ACrBJ;EACE;EACA;EACA;EACA;EACA,S1DumCkC;;;A0DpmCpC;EACE;EACA;EACA;EACA;EACA,S1D+lCkC;;;A0DvlChC;EACE;EACA;EACA,S1DmlC8B;;;A0DhlChC;EACE;EACA;EACA,S1D6kC8B;;;AQ9iChC;EkDxCA;IACE;IACA;IACA,S1DmlC8B;;E0DhlChC;IACE;IACA;IACA,S1D6kC8B;;;AQ9iChC;EkDxCA;IACE;IACA;IACA,S1DmlC8B;;E0DhlChC;IACE;IACA;IACA,S1D6kC8B;;;AQ9iChC;EkDxCA;IACE;IACA;IACA,S1DmlC8B;;E0DhlChC;IACE;IACA;IACA,S1D6kC8B;;;AQ9iChC;EkDxCA;IACE;IACA;IACA,S1DmlC8B;;E0DhlChC;IACE;IACA;IACA,S1D6kC8B;;;AQ9iChC;EkDxCA;IACE;IACA;IACA,S1DmlC8B;;E0DhlChC;IACE;IACA;IACA,S1D6kC8B;;;A2D5mCpC;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;ACRF;AAAA;ECIE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;AAAA;EACE;;;ACdF;EACE;EACA;EACA;EACA;EACA;EACA,S9DgcsC;E8D/btC;;;ACRJ;ECAE;EACA;EACA;;;ACNF;EACE;EACA;EACA,OjEisB4B;EiEhsB5B;EACA;EACA,SjE2rB4B;;;AkE/nBtB;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAjBJ;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AASF;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAjBJ;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AASF;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AArBJ;AAcA;EAOI;EAAA;;;AAmBJ;AA1BA;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAjBJ;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AASF;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAjBJ;EACE;;;AAIA;EACE;;;AANJ;EACE;;;AAIA;EACE;;;AANJ;EACE;;;AAIA;EACE;;;AANJ;EACE;;;AAIA;EACE;;;AANJ;EACE;;;AAIA;EACE;;;AAIJ;EAOI;;;AAKF;EAOI;;;AAnBN;EAOI;;;AAKF;EAOI;;;AAnBN;EAOI;;;AAKF;EAOI;;;AAnBN;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAjBJ;EACE;;;AAIA;EACE;;;AANJ;EACE;;;AAIA;EACE;;;AANJ;EACE;;;AAIA;EACE;;;AANJ;EACE;;;AAIA;EACE;;;AANJ;EACE;;;AAIA;EACE;;;AANJ;EACE;;;AAIA;EACE;;;AAIJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAjBJ;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AASF;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;A1DVR;E0DGI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;A1DVR;E0DGI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;A1DVR;E0DGI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;A1DVR;E0DGI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;A1DVR;E0DGI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;ACtDZ;ED+CQ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;ACnCZ;ED4BQ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;AEzEZ;AAAA;ACAA;AAAA;AAGA;EACC;EACA;EACA;EACA;;AACA;EACC;EACA;;;AAMF;EACC;;;AAKA;EACC;;;AAIF;EACC;;AACA;EACC;;;AAIF;EACC;EDIA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;ECZA;EACA;;ADaA;EACC;EACA;EACA;EACA;EACA;;;ACdD;EACC;;AAGD;EACC;EACA;;;AC3CD;EACC;EACA;;AAGD;EACC;;;A5EEF;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAGD;AAAA;EAEC;;;AAGD;E0EAC;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;;;A1EbF;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAID;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;IACC;;EAED;IACC;;EAED;IACC;;;AAIF;EACC;EACA;EACA;;;AAGD;EACC;IACC;;EAED;IACC;;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAOD;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AASD;AAAA;AAEA;EACC;;AACA;AAAA;EAEC;EACA;;AAGD;EACC;EACA;;AAGD;AAAA;EAEC;;;AAGF;EACC;;;AAqBD;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAED;EACC;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;;;AAGD;AAAA;AAGA;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;AACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;AACA;EACA;;;AAGD;EACC;EACA;EACA;AACA;EACA;;;AAGD;EACC;EACA;EACA;AACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EAaA;EAaA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;E0E3QC;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;;;A1E8PF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAIA;EACC;EACA;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAWD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACtXD;AAAA;AAGA;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;AAAA;EAEC;;;AAGD;EyE1BC;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACC;EAID;EzEgBA;EACA;EACA;;AyEhBA;EACC,YACC;;AAMF;EACC;EACA;EACA,YACC;EAID;;;AzEGF;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EE2OQ;EFzOP;;AE6EG;EF/EJ;IEkPQ;;;;AF7OR;EACC;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EyEvBA;EACA,czEuBoB;EyEtBpB,gBzEsBoB;EyErBpB,SzEqBoB;EyEnCpB;EACA;EACA;;;AzEwCA;EyE/BA;EACA,czE+BqB;EyE9BrB,gBzE8BqB;EyE7BrB,SzE6BqB;EACpB;;;AAIF;EyEtEC;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EzE8DA;;AyE5DA;EACC;EACA;EACA;EACA;EACA;;;AzE0DF;EACC;;;AAGD;EyE/EC;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EzEuEA;;AyErEA;EACC;EACA;EACA;EACA;EACA;;;AzEmEF;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAIA;EyErGA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;;;AzEyFF;EACC;;;AAIA;EACC;EACA;EACA;;;AAIF;EACC;;;AAmCA;EACC;EACA;;;A4EnMF;AAAA;AAEA;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;ACxBD;EACC;EJuEA;EACA,cIvEoB;EJwEpB,gBIxEoB;EJyEpB,SIzEoB;;;AAGrB;AAAA;AAAA;EAEC;;;AAMA;EACC;;;AAIF;EJiDC;EACA;EAIA;EACA,cIrDoB;EJsDpB,gBItDoB;EJuDpB,SIvDoB;;;AAGrB;EJsCC;EACA;EACA;EASA;EACA,cIhDoB;EJiDpB,gBIjDoB;EJkDpB,SIlDoB;;;AAGrB;EACC;;;AAED;EACC;EACA;EACA;EACA;;;AAGD;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;;AC9CF;AAAA;AAGA;EACC;EACA;EACA;;;AAGD;E5EsRM,WALI;E4E/QT;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAGD;AAAA;EAEC;;;AAGD;AAAA;EAEC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC","file":"style.css"} \ No newline at end of file