Mobile Application Architecture
Strategy

Mobile App Architecture Design and Development


You might have contemplated the ramifications of mobility around us. From an airplane ticket booking to shopping from the solace of your lounge chair, you can use mobile apps. Ordering your favorite food or learning desired courses online, mobile apps are used. With mobile applications, you can pay your bills in a few snaps of your finger. So, every part of your life is moved by the abilities of phone apps.

Many organizations today have enhanced their business effectiveness with mobile architecture design. There are so many mobile architecture applications in the market today. So, there is pressure on companies that work on mobile app development. They are under pressure to create applications that stick out. It prompts furious rivalry between them. Mobile architecture is one of the essentials of application design.

What is Mobile Application Architecture?

You can define mobile application architecture in different ways. Firstly, it is a bunch of patterns and methodologies needed to develop an effective mobile app. The functional mobile app development architecture comes with the standards of the industry. The architecture also comes with the requirements of the vendor. 

These patterns are prepared with the requirements of the vendor while keeping the industry standards in mind. Well capable architecture can save a good amount of time as well as energy. Most importantly, it saves your costs not only at present but in the future too.

Mobile Application Architecture

Mobile architecture design generally consists of multiple layers, including:

Presentation/View Layer

It contains UI components as well as processing components. This layer characterizes how the application would be introduced to the end client. Besides, text styles, themes, shadings, and everything to be seen by end-clients are chosen at this stage.

Business Layer

This layer is crafted by business work processes, business entities, and segments. It, for the most part, centers on the business front.

Data Layer

This layer is made from different blends. It is a blend of information access elements, information utilities, and administration operators. This layer conforms to the application necessities to encourage secure information exchanges. It gives you a perfect approach. You can plan a versatile application with a spotless partition of code into practical zones inside an application.

What to Consider Before Attempting Mobile Application Architecture Development?

It is fundamental for a business to build a perfect application architecture. Here are a few contemplations you have to check while assembling your mobile app development architecture: 

Deciding the Type of Device

There are various classifications of cell phones. There is a massive difference between Apple phones and Android cell phones. Hence it is essential to decide the gadget type while creating application architecture. You need to do it as the application may have certain programming requirements. With the gadget type, you ought to think about the accompanying gadget qualities:

  • Screen size and resolution.
  • CPU characteristics.
  • Storage capacity and memory.
  • Development tool environment availability.

Keeping Bandwidth Scenarios in Mind Mobile Architecture Design

Application design should be manufactured, keeping the most noticeably awful organizational networking situations. You need to proceed because there might be times when the web network is zero or irregular. Consider neighborhood web network conditions in different zones. Look at the zones where the intended target audience lives. In this way, you can stay away from the helpless client experience. Plan your application cache and information access system. Plan these in such a way that they can acclimate to the irregular or moderate speed of the internet.

Pick The Right Method For Navigation Mobile Architecture Design

Mobile application architecture navigation can emphatically or contrarily impact the client experience. Pick the ideal approach to explore through the features of the application. You can do it in the best way by knowing the client’s requisites. Probably the most well-known navigation methodologies are:

  • Single view.
  • Scroll view.
  • Stacked navigation bar.
  • Gesture-based.
  • Tab controller.
  • Search-driven.

Defining User Interface (UI)

App users must have the option to interact with the designed application consistently. It shouldn’t be befuddling, deceiving, or too hard to even think about using. It should always be user-friendly in a way that even a kindergarten kid can navigate through it. UI manufactures an association between your clients and your mobile computing architecture. So, it assumes a critical part from a business perspective.

How To Choose The Right Mobile Computing Architecture For Your Mobile App?

We have been serving our customers for over 10 years. We provide the best application development solutions. Our group of developers suggests working through the accompanying strides. The reason is to choose the suitable mobile computing architecture for your application:

Mobile App Architecture Design Target Audience

This progression is exceptionally significant in graphing your phone app architectural guide. When you know your crowd, you’ll become acquainted with the information for which you need to assemble your application. Furthermore, tell the sort of user experience you would need to convey.

For example, the U.S. clinical organization utilizes the iPad. But the other working grown-ups use iPhones just as Android gadgets. Suppose you are building a clinical application focused on doctors. You need to create a local iOS mobile app architecture design utilizing the iPhone SDK.

You want to build up an internet learning application for the general working of grown-up adults. It is shrewd to consider cross-stage applications. These applications can be constructed once and sent on numerous stages as local applications.

Begin With the Expected User Experience of the Client

To decide the correct innovative structure of your app, you would need to place yourself in your clients’ place firstly. Do you need to understand what kind of involvement your end clients are searching for? Is it a shopper application or an undertaking application?

A purchaser application must have the option to use the full capacities of the cell phone. It must convey excellent involvement with the request to get the complete consideration of your clients. An undertaking application must have cross-stage similarities as opposed to convincing experience. It is because the representatives need to run the application at different stages.

Key Functionality Requirements for Mobile App Architecture Design

It is pivotal to distinguish the key usefulness necessities of the client. Content utilization demonstrates a lot of enlightening prerequisites. These prerequisites can be satisfied with a cross-stage application. This includes constructing once and sending on different stages as local applications. You can use PhoneGap or a web-based application for it.

Application Architecture used to achieve an assignment may require an instinctive interface. It will highlight local-based arrangements. You can create web applications quickly due to the innovations in manufacturing. Simultaneously, you can depend on administration laborers. They are reserved to convey this extraordinary experience to clients.

Different applications offer disconnected record access or exchange passages. These would be better formed utilizing local structures. This is because the local applications remain introduced on the gadget. This gives clients the exploit gadget equipment and programming.

Time Frame of Development of Application Architecture

If you have time imperatives, at that point, you can begin by building up a mobile web application. It would be the quickest way to deliver so as to connect with a more extensive crowd. Be that as it may, you can later zero in on revealing a native web application to convey the ideal experience.

Conclusion

You have seen how basic mobile application architecture is important. It is very important for the fruitful and productive development of the application. It enhances application security and empowers you to scale with your developing business.

Do you follow the whole stream while planning your versatile application design? What is the most significant point that has to be remembered while planning mobile app architecture? We trust this article gives you a superior comprehension of mobile app architecture. The article clarifies the vital job it plays in setting up your portable application.



Source link

Localizing Dates in a Perl Web App With JavaScript
Strategy

Localizing Dates in a Perl Web App With JavaScript


Last week’s article received a comment on a private Facebook group that amounted to “just use JavaScript’s built-in formatting.” So what would that look like?

sub ($c) { $c->render( template => ‘index’, date => DateTime->today ) };

helper localize_date => sub ( $c, $date = DateTime->today, $style = ‘full’ ) {
my $date_params = join ‘,’ => $date->year, $date->month_0, $date->day;
return
qq;
};

app->start;
__DATA__

@@ index.html.ep
% layout ‘default’;
% title ‘Today’;

  • % for my $style ( qw(long medium short) ) {

  • % }

@@ layouts/default.html.ep

</p> <p>” data-lang=”text/x-perl”></p> <p> </new></div></div></div> <p>It’s structured much like the <a href="https://phoenixtrap.com/2021/04/20/localizing-dates-in-a-perl-web-application/" rel="noopener noreferrer" target="_blank">Perl-only solution</a>, with a default <code>"https://dzone.com/"</code> route and a <code>localize_date</code> <a href="https://docs.mojolicious.org/Mojolicious/Lite#helper" rel="noopener noreferrer" target="_blank">Mojolicious helper</a> to do the formatting. I opted to output a piece of JavaScript from the helper on <strong>lines 11 through 14</strong> since it could be repeated several times in a document. You could instead declare a function in the default layout’s HTML <code><head></code> on line 38 that would receive a date and a formatting style, outputting the resulting formatted date.</p> <p>In the template’s list from <strong>lines 22 through 31</strong> I decided to use JavaScript <a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/write" target="_blank" rel="noopener"><code>document.write</code></a> method calls to add our generated code. This has a <a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/write#notes" rel="noopener noreferrer" target="_blank">slew of caveats</a> but works for our example here.</p> <p>Worth noting is the double equals sign (<code><%== %></code>) when <a href="https://docs.mojolicious.org/Mojolicious/Guides/Rendering#Embedded-Perl" rel="noopener noreferrer" target="_blank">embedding a Perl expression</a>. This prevents Mojolicious from XML-escaping special characters, e.g., replacing <code>"</code>quotes<code>"</code> with <code>&quot;</code>, <code><</code>angle brackets<code>></code> with <code>&lt;</code> and <code>&gt;</code>, etc. This is important when returning HTML and JavaScript code.</p> <p>I also chose to use the JavaScript <code>Date</code> object’s <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString" target="_blank" rel="noopener"><code>toLocaleString()</code></a> method for my formatting on <strong>line 12</strong>. There are other ways to do this:</p> <ul> <li>Date objects also have a <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString" target="_blank" rel="noopener"><code>toLocaleDateString</code></a> method. However, Mozilla has a <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString#performance" rel="noopener noreferrer" target="_blank">performance note</a> that states it’s better to use the <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat" target="_blank" rel="noopener"><code>Intl.DateTimeFormat</code></a> object’s property.</li> <li>But <code>Intl.DateTimeFormat</code>‘s <a href="https://caniuse.com/mdn-javascript_builtins_intl_datetimeformat_datetimeformat_datestyle" rel="noopener noreferrer" target="_blank">browser support</a> stands at about 70%, leaving out Safari (that’s Mac, iPhone, and iPad) and Internet Explorer users.</li> <li>There are JavaScript libraries and <a href="https://javascript.info/polyfills" rel="noopener noreferrer" target="_blank">polyfills</a> to address these issues, but I’m trying to keep this example simple.</li> </ul> <p>Note that <strong>line 10</strong> builds the parameters for JavaScript’s <code>Date</code> constructor using the , <code>_0</code>, and methods of our Perl object; <code>month_0</code> because the <code>Date</code> constructor takes its month as an integer from 0 to 11 rather than 1 to 12. JavaScript <code>Date</code>s can be <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date#parameters" rel="noopener noreferrer" target="_blank">constructed in many ways</a>; this seemed the simplest without having to explain things like epochs and inconsistent parsing.</p> <p>Why are we using Perl <code>DateTime</code>s and a helper anyway? I’m assuming that our dates are coming from the backend of our application, possibly <a href="https://metacpan.org/pod/DBIx::Class::InflateColumn::DateTime" rel="noopener noreferrer" target="_blank">inflated from a database column</a>. If your dates are strictly on the frontend, you might decide to put your formatting code there in a JavaScript function, perhaps using a JavaScript-based templating library.</p> <p>The bottom line is to do whatever makes sense for your situation. I prefer the Perl solution because I like the language and its ecosystem and perhaps have acclimated to its quirks. The complications of JavaScript browser support, competing frameworks, and layers of tooling make my head hurt. Despite this, I’m still learning; if you have any comments or suggestions, please leave them below.</p> </div> </div> <p><br /> <br /><a href="https://dzone.com/articles/localizing-dates-in-a-perl-web-application-with-ja" target="_blank" rel="noopener">Source link </a></p> </div> <!-- Post Meta --> <div class="post-meta-wrapper"><div class="post-author"><a href="https://graphicdon.com/author/graphicdon/" title="Posts by GraphicDon" rel="author">GraphicDon</a></div><div class="post-date"><a href="https://graphicdon.com/2021/05/16/">May 16, 2021</a></div></div> </div> </div> <div id="post-19275" class="post post-19275 type-post status-publish format-standard has-post-thumbnail hentry category-strategy"> <div class="post-inner"> <div class="post-media-wrapper"> <!-- Featured Media --> <div class="post-media format"><a class="featured-image" href="https://graphicdon.com/2021/05/16/c9-0-is-here-dealing-with-record-keyword-errors/" target="_self"><img width="598" height="814" src="https://graphicdon.com/wp-content/uploads/2021/05/C9.0-Is-Here-Dealing-With-Record-Keyword-Errors.jpg" class="attachment-full size-full wp-post-image" alt="C#9.0 Is Here: Dealing With Record Keyword Errors" loading="lazy" sizes="100vw" srcset="https://graphicdon.com/wp-content/uploads/2021/05/C9.0-Is-Here-Dealing-With-Record-Keyword-Errors.jpg 598w, https://graphicdon.com/wp-content/uploads/2021/05/C9.0-Is-Here-Dealing-With-Record-Keyword-Errors-220x300.jpg 220w" title="C#9.0 Is Here: Dealing With Record Keyword Errors 11"></a></div> <!-- Post Date --> <div class="post-date"><a href="https://graphicdon.com/2021/05/16/"><span class="day">16</span><span class="month">May</span></a></div> </div> <!-- Post Categories --> <div class="post-categories"><a href="https://graphicdon.com/category/strategy/" rel="category tag">Strategy</a> </div> <!-- Post Title --> <h3 class="post-title"> <a href="https://graphicdon.com/2021/05/16/c9-0-is-here-dealing-with-record-keyword-errors/" rel="bookmark"> C#9.0 Is Here: Dealing With Record Keyword Errors </a> </h3> <!-- Post Content --> <div class="post-content"> <p> <br /> </p> <div> <p>Make sure you are ready for it! Today when I started to try out some of the features of C#9.0 I was immediately blocked by an error in Visual Studio 2019 (which I have been working with for a while now).</p> <p>The new record keyword gave me an error :</p> <p>I figured this would be one of the most common errors encountered by people getting started on C#9.0 and so it was worth posting it.</p> <p>The fix for this is simple. We need to change the .NET core version since these support different C# versions. Depending on the >NET version used by the project the appropriate C# version will be used. To see the target framework used by the project Go to “Properties” of the project.</p> <p><img style="width: 556px;" class="fr-fic fr-dib lazyload" data-image="true" data-new="false" data-sizeformatted="118.3 kB" src="image/jpeg" data-creationdate="1620150755309" data-creationdateformatted="05/04/2021 05:52 PM" data-type="temp" data-url="https://dzone.com/storage/temp/14700653-vs-c9dot0-1.jpg" data-modificationdate="null" data-size="118279" data-name="vs-c9dot0-1.jpg" data-id="14700653" data-src="https://dzone.com/storage/temp/14700653-vs-c9dot0-1.jpg" title="C#9.0 Is Here: Dealing With Record Keyword Errors 12"></p> <p>And then select the Application section on right. </p> <p><img style="width: 724px;" class="fr-fic fr-dib lazyload" data-image="true" data-new="false" data-sizeformatted="172.5 kB" src="image/jpeg" data-creationdate="1620150784589" data-creationdateformatted="05/04/2021 05:53 PM" data-type="temp" data-url="https://dzone.com/storage/temp/14700654-vs-c9dot0-2.jpg" data-modificationdate="null" data-size="172482" data-name="vs-c9dot0-2.jpg" data-id="14700654" data-src="https://dzone.com/storage/temp/14700654-vs-c9dot0-2.jpg" title="C#9.0 Is Here: Dealing With Record Keyword Errors 13"></p> <p>The default C# versions selected based on the Target framework are as below. Please refer to original source <a href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version" target="_blank" rel="noopener">here</a>.</p> <p><img style="width: 716px;" class="fr-fic fr-dib lazyload" data-image="true" data-new="false" data-sizeformatted="59.7 kB" src="image/jpeg" data-creationdate="1620150827515" data-creationdateformatted="05/04/2021 05:53 PM" data-type="temp" data-url="https://dzone.com/storage/temp/14700655-defaultcsharp-versions.jpg" data-modificationdate="null" data-size="59728" data-name="defaultcsharp-versions.jpg" data-id="14700655" data-src="https://dzone.com/storage/temp/14700655-defaultcsharp-versions.jpg" title="C#9.0 Is Here: Dealing With Record Keyword Errors 14"></p> <p>That’s it! Once we select the target framework as .NET5.0, I could test out all the features of C#9.0.</p> </div> <p><br /> <br /><a href="https://dzone.com/articles/c90-is-here" target="_blank" rel="noopener">Source link </a></p> </div> <!-- Post Meta --> <div class="post-meta-wrapper"><div class="post-author"><a href="https://graphicdon.com/author/graphicdon/" title="Posts by GraphicDon" rel="author">GraphicDon</a></div><div class="post-date"><a href="https://graphicdon.com/2021/05/16/">May 16, 2021</a></div></div> </div> </div> <div id="post-19273" class="post post-19273 type-post status-publish format-standard has-post-thumbnail hentry category-strategy"> <div class="post-inner"> <div class="post-media-wrapper"> <!-- Featured Media --> <div class="post-media format"><a class="featured-image" href="https://graphicdon.com/2021/05/16/kinetic-typography-from-series-and-movies-graphic_design/" target="_self"><img width="1280" height="720" src="https://graphicdon.com/wp-content/uploads/2021/05/Kinetic-typography-from-series-and-movies-graphic_design.png" class="attachment-full size-full wp-post-image" alt="r/graphic_design - Kinetic typography from series and movies" loading="lazy" sizes="100vw" srcset="https://graphicdon.com/wp-content/uploads/2021/05/Kinetic-typography-from-series-and-movies-graphic_design.png 1280w, https://graphicdon.com/wp-content/uploads/2021/05/Kinetic-typography-from-series-and-movies-graphic_design-300x169.png 300w, https://graphicdon.com/wp-content/uploads/2021/05/Kinetic-typography-from-series-and-movies-graphic_design-1024x576.png 1024w, https://graphicdon.com/wp-content/uploads/2021/05/Kinetic-typography-from-series-and-movies-graphic_design-768x432.png 768w, https://graphicdon.com/wp-content/uploads/2021/05/Kinetic-typography-from-series-and-movies-graphic_design-600x338.png 600w" title="Kinetic typography from series and movies : graphic_design 16"></a></div> <!-- Post Date --> <div class="post-date"><a href="https://graphicdon.com/2021/05/16/"><span class="day">16</span><span class="month">May</span></a></div> </div> <!-- Post Categories --> <div class="post-categories"><a href="https://graphicdon.com/category/strategy/" rel="category tag">Strategy</a> </div> <!-- Post Title --> <h3 class="post-title"> <a href="https://graphicdon.com/2021/05/16/kinetic-typography-from-series-and-movies-graphic_design/" rel="bookmark"> Kinetic typography from series and movies : graphic_design </a> </h3> <!-- Post Content --> <div class="post-content"> <p> <br /> </p> <div style="color:#1A1A1B"> <div class="_2-UiOdhyj4wHBv7Rc2FeDr "> <div class="_3Oa0THmZ3f5iZXAQ0hBJ0k _2LjgQiHLCZ9LDbCQx5KaOi" style="margin:0 auto"><a href="https://preview.redd.it/v9jpok0augz61.png?width=1280&format=png&auto=webp&s=1df439170c1d080615a4a873f971475e14d4afd5" target="_blank" rel="noopener noreferrer"><img alt="r/graphic_design - Kinetic typography from series and movies" class="_2_tDEnGMLxpM6uOa2kaDB3 ImageBox-image media-element _1XWObl-3b9tPy64oaG6fax" src="https://preview.redd.it/v9jpok0augz61.png?width=1280&format=png&auto=webp&s=1df439170c1d080615a4a873f971475e14d4afd5" style="max-height:700px" title="Kinetic typography from series and movies : graphic_design 17"></a></div> </div> <p class="_1qeIAgB0cPwnLhDF9XSiJM">Hi everybody 🙂</p> <p class="_1qeIAgB0cPwnLhDF9XSiJM">I am a graphic designer who recently made a new channel focusing on graphic kinetic typography from series and movies.</p> <p class="_1qeIAgB0cPwnLhDF9XSiJM">One of my favorite dialogs is the intense sceen with Petyr Baelish and Varys in Game of Thrones. In Season 3 Episode 6 – The Climb. Petyr explains how spreading chaos, gives you power.</p> <p class="_1qeIAgB0cPwnLhDF9XSiJM">The entire video is composed and produced in Adobe After Effects.</p> <p class="_1qeIAgB0cPwnLhDF9XSiJM">It has been a long process and hard process as everything is self-taught. However, I have learned a lot, and am like that .. mostly satisfied.😅</p> <p class="_1qeIAgB0cPwnLhDF9XSiJM">Feel free to share your thoughts on it ✌🙋</p> <p class="_1qeIAgB0cPwnLhDF9XSiJM"><a href="https://www.youtube.com/watch?v=xAj_QhvoagU" class="_3t5uN8xUmg0TOwRCOGQEcU" rel="noopener nofollow ugc" target="_blank">https://www.youtube.com/watch?v=xAj_QhvoagU</a></p> </div> <p><br /> <br /><a href="https://www.reddit.com/r/graphic_design/comments/ndm4t9/kinetic_typography_from_series_and_movies/" target="_blank" rel="noopener">Source link </a></p> </div> <!-- Post Meta --> <div class="post-meta-wrapper"><div class="post-author"><a href="https://graphicdon.com/author/graphicdon/" title="Posts by GraphicDon" rel="author">GraphicDon</a></div><div class="post-date"><a href="https://graphicdon.com/2021/05/16/">May 16, 2021</a></div></div> </div> </div> <div id="post-19271" class="post post-19271 type-post status-publish format-standard has-post-thumbnail hentry category-strategy"> <div class="post-inner"> <div class="post-media-wrapper"> <!-- Featured Media --> <div class="post-media format"><a class="featured-image" href="https://graphicdon.com/2021/05/16/mxgraph-usage-in-typescript-projects/" target="_self"><img width="1600" height="1200" src="https://graphicdon.com/wp-content/uploads/2021/05/mxGraph-Usage-in-TypeScript-Projects.png" class="attachment-full size-full wp-post-image" alt="mxGraph Usage in TypeScript Projects" loading="lazy" sizes="100vw" srcset="https://graphicdon.com/wp-content/uploads/2021/05/mxGraph-Usage-in-TypeScript-Projects.png 1600w, https://graphicdon.com/wp-content/uploads/2021/05/mxGraph-Usage-in-TypeScript-Projects-300x225.png 300w, https://graphicdon.com/wp-content/uploads/2021/05/mxGraph-Usage-in-TypeScript-Projects-1024x768.png 1024w, https://graphicdon.com/wp-content/uploads/2021/05/mxGraph-Usage-in-TypeScript-Projects-768x576.png 768w, https://graphicdon.com/wp-content/uploads/2021/05/mxGraph-Usage-in-TypeScript-Projects-1536x1152.png 1536w, https://graphicdon.com/wp-content/uploads/2021/05/mxGraph-Usage-in-TypeScript-Projects-600x450.png 600w" title="mxGraph Usage in TypeScript Projects 19"></a></div> <!-- Post Date --> <div class="post-date"><a href="https://graphicdon.com/2021/05/16/"><span class="day">16</span><span class="month">May</span></a></div> </div> <!-- Post Categories --> <div class="post-categories"><a href="https://graphicdon.com/category/strategy/" rel="category tag">Strategy</a> </div> <!-- Post Title --> <h3 class="post-title"> <a href="https://graphicdon.com/2021/05/16/mxgraph-usage-in-typescript-projects/" rel="bookmark"> mxGraph Usage in TypeScript Projects </a> </h3> <!-- Post Content --> <div class="post-content"> <p> <br /> </p> <div> <p dir="ltr">This article is the first one of a series about <a href="https://github.com/jgraph/mxgraph" target="_blank" rel="noopener">mxGraph</a>, the JavaScript diagramming library. </p> <p dir="ltr">Over the last few months, my team has used it on a day-to-day basis as the rendering foundation of <a href="https://github.com/process-analytics/bpmn-visualization-js" target="_blank" rel="noopener">bpmn-visualization</a>, an open-source TypeScript library for visualizing process execution data on <a href="https://www.omg.org/spec/BPMN/2.0.2/" target="_blank" rel="noopener">BPMN</a> diagrams.</p> <p>In this series, I will share integration challenges and solutions when using mxGraph in TypeScript projects, tooling developed to simplify mxGraph based developments, rendering extensions, usage tips, and much more.</p> <p dir="ltr">Most aspects described in the articles will also apply to JavaScript projects using mxGraph.</p> <h2 dir="ltr">mxGraph and TypeScript: Is it Possible?</h2> <p dir="ltr">A few years ago, the mxGraph core development team stated that it would never port mxGraph to TypeScript, nor support it, and this was still applicable in 2020. (See <a href="https://github.com/jgraph/mxgraph/issues/81" target="_blank" rel="noopener">issue #81</a> and related issues for more.)</p> <p dir="ltr">If it is not supported, why would you even want to use mxGraph in a TypeScript project? Well, if your application integrates Angular or React, you probably already use TypeScript, so if you want to add mxGraph, a TypeScript integration would be nice.</p> <p dir="ltr">You might also find it useful in vanilla TypeScript applications, or libraries like <a href="https://github.com/process-analytics/bpmn-visualization-js" target="_blank" rel="noopener">bpmn-visualization</a>. When my team started our development, we wanted to build a TypeScript library that uses mxGraph for rendering.</p> <p dir="ltr">In this article, I’ll explain how we handled this, the issues we faced, and how we have successfully integrated mxGraph.</p> <p dir="ltr"><img loading="lazy" data-fr-image-pasted="true" width="602" height="451" class="fr-fic fr-dib lazyload" src="https://lh3.googleusercontent.com/Ws6by8I88iAGvaFwfEbqzi6v60N-fOC3BqxIuHbAX9ik8C5-b2BfLN1dfkxD7jb7UsoE1OSmTsGwsleYlXrEq7gjAP1wjIlie654wwdgrP6K6C_qk3slUfSQda932LVVmvT0v4kD" title="mxGraph Usage in TypeScript Projects 20"></p> <p dir="ltr" style="text-align: center;"><em>“Cactus” by </em><a href="https://www.freeimages.com/photo/cactus-1392156" target="_blank" rel="noopener"><em>Steven Ritts</em></a></p> <h2 dir="ltr">Plenty of Disappointing Examples and Solutions</h2> <p dir="ltr">We started out as most developers do: when we saw that mxGraph has no native TypeScript support, we went to check how other people might have tried to do it.</p> <p dir="ltr">However, we saw – almost always – the same kinds of custom, hacky, and disappointing solutions. Let’s look at some of them and why we thought they are a pain.</p> <h3 dir="ltr">The ‘any’ Way</h3> <p dir="ltr">No mxGraph native Typescript support? No problem, let’s use any everywhere!</p> <p>Using <strong><em>any</em></strong> is fast, but be ready for no code assistance, no TypeScript compiler checks. In short, this is not the TypeScript way you expect. And remember, this is <a href="https://www.typescriptlang.org/docs/handbook/declaration-files/do-s-and-don-ts.html#any" target="_blank" rel="noopener">something the TypeScript documentation recommends not to do</a>.</p> <p dir="ltr">You may also use unknown which is better for the TypeScript compiler, but it won’t help much more than any.</p> <p dir="ltr">Examples:</p> <h3 dir="ltr">The ‘Define Your Own mxGraph Types’ Way</h3> <p dir="ltr">Define your own mxGraph types for only the parts of the lib you are using.</p> <p dir="ltr">This is only viable if you use a very small part of mxGraph. It is a large library, and as you use more and more features, the number of types you have to maintain increases.</p> <p>Example: <a href="https://github.com/diegogusava/angular-mxgraph/tree/fc284593b09c4db8c355d663d1189ecdb369b26c/src/mxtypes" target="_blank" rel="noopener">https://github.com/diegogusava/angular-mxgraph/tree/fc284593b09c4db8c355d663d1189ecdb369b26c/src/mxtypes</a></p> <h3 dir="ltr">The ‘Copy Unmaintained types’ Way</h3> <p dir="ltr">Retrieve the work done by a single individual who has shared their attempt on mxGraph types, and copy everything directly in your project.</p> <p dir="ltr">Be ready for a maintenance nightmare:</p> <ul> <li dir="ltr"> <p dir="ltr">the types may be out of date, full of any instead of actual types, so you will find yourself modifying the types anyway</p> </li> <li dir="ltr"> <p dir="ltr">as mxGraph evolves, you will also have to update the types to reflect API changes</p> </li> <li dir="ltr"> <p dir="ltr">and…you will work alone on this tedious task.</p> </li> </ul> <p dir="ltr">This is a lot of extra work, and probably not what you expect from a true integration.</p> <p dir="ltr">Examples:</p> <p dir="ltr"><img loading="lazy" data-fr-image-pasted="true" width="602" height="401" class="fr-fic fr-dib lazyload" src="https://lh4.googleusercontent.com/3nDeI6FZWwDU8tt4Tm6LzLUjXO0bNfYZN-TFw5v3vK2NYzOVb3W1FTF--P_sfu2YTJbo51dZKF45wA1F0tUY8T4UX6cOnD0p1njvvL6OMKJgkJ-SL1craoUJ6cR4wK3lftVi9tJX" title="mxGraph Usage in TypeScript Projects 21"></p> <p dir="ltr" style="text-align: center;"><em>“Road Between Pine Trees” by <a href="https://www.pexels.com/photo/road-between-pine-trees-39811/" target="_blank" rel="noopener">veeterzy</a></em></p> <h2 dir="ltr">Searching for True mxgraph Types</h2> <p dir="ltr">mxGraph is not the sole JavaScript library that hasn’t TypeScript native support. </p> <p dir="ltr">In such situations, <a href="https://definitelytyped.org/" target="_blank" rel="noopener">DefinitelyTyped</a> is the way to go. It is a community-led open-source repository for TypeScript type definitions.</p> <p dir="ltr">Using types from DefinitelyTyped is very easy. Once you add the types package as a dependency of your project, TypeScript is automatically able to read the types without any extra configuration.</p> <p dir="ltr">Unfortunately, although there is a <a href="https://github.com/DefinitelyTyped/DefinitelyTyped/issues/5317" target="_blank" rel="noopener">request for adding mxGraph types to DefinitelyTyped</a>, we found that there was no one working on it in 2020.</p> <p dir="ltr">We also found some individual efforts to make mxGraph TypeScript usage easier. But everyone appeared to be working individually on their own solutions, leading to the following issues:</p> <ul> <li dir="ltr"> <p dir="ltr">Most repository owners said that the type definition files in their project were not complete (or something similar). mxGraph provides a large API, so it is hard to keep types in sync as the lib evolves.</p> </li> <li dir="ltr"> <p dir="ltr">It is almost impossible to know which mxGraph version was targeted by the various type definition packages.</p> </li> </ul> <p dir="ltr">As we found several solutions and<a href="https://www.npmjs.com/search?q=mxgraph%20typescript" target="_blank" rel="noopener"> npm packages</a>, so it was hard to find the best way to use mxGraph in a TypeScript project.</p> <p dir="ltr">mxGraph is a very large library, which may frighten people about starting extracting and maintaining types.</p> <p dir="ltr">If you are interested in more information, you can check this <a href="https://github.com/process-analytics/mxgraph-road-to-DefinitelyTyped/blob/master/existing-solutions.md" target="_blank" rel="noopener">non-exhaustive list</a> (last updated in mid-2020) that presents various solutions with information about their activity status and implementation choices.</p> <p dir="ltr"><img loading="lazy" data-fr-image-pasted="true" width="602" height="401" class="fr-fic fr-dib lazyload" src="https://lh3.googleusercontent.com/oHQHBQ5g10wgspvLzfAe6vjcIJOQkSi1_1UdrJM75DqU0seIDVo4JDDnh6IhFdTCKQi4jB3R2u-OXxAC4xM5jpHeLWDX6opX7uxLmfcPPOgu-i7hMDG9-Sj7rIjXEZkOF-18dMdD" title="mxGraph Usage in TypeScript Projects 22"></p> <p dir="ltr" style="text-align: center;"><em>“Beautiful sunlight through clouds” by <a href="https://www.freeimages.com/photo/beautiful-sunlight-through-clouds-1171178" target="_blank" rel="noopener">Yury Khristich</a></em></p> <h2 dir="ltr">The 2021 Solution</h2> <p dir="ltr">In 2020, a community effort emerged to make mxGraph types available in a consistent way, and a viable solution is now available.</p> <p dir="ltr">This first started as <a href="https://github.com/hungtcs/mxgraph-type-definitions" target="_blank" rel="noopener">mxgraph-type-definitions</a>. Most parts of mxGraph were covered progressively, and types became more accurate thanks to user feedback. Projects like <a href="https://github.com/algenty/grafana-flowcharting/blob/0.9.0/package.json#L70" target="_blank" rel="noopener">grafana-flowcharting</a> began using it.</p> <p dir="ltr">Because it had issues integrating with the mxGraph npm package, it evolved into <a href="https://github.com/typed-mxgraph/typed-mxgraph" target="_blank" rel="noopener">typed-mxgraph</a> in Fall 2020, and mxgraph-type-definitions was finally deprecated in December 2020. </p> <p dir="ltr">This effort is still led by <a href="https://github.com/hungtcs" target="_blank" rel="noopener">@hungtcs</a>, the original creator of the mxgraph-type-definitions repository.</p> <p dir="ltr">Here is an example of what you can write with typed-mxgraph:</p> <p dir="ltr">Our <a href="https://github.com/process-analytics/bpmn-visualization-js" target="_blank" rel="noopener">bpmn-visualization</a> project has followed a similar evolutionary path to the mxGraph usage in TypeScript projects. </p> <p dir="ltr">We initially started with our own <a href="https://github.com/process-analytics/ts-mxgraph" target="_blank" rel="noopener">ts-mxgraph</a> fork, and we were forced to manage the types by ourselves. We struggled with out-of-date types and had to manage updates for our sole usage.</p> <p dir="ltr">When <a href="https://github.com/hungtcs/mxgraph-type-definitions" target="_blank" rel="noopener">mxgraph-type-definitions</a> was mature enough, we used it in our production code. We quickly benefited from fixes and started contributing to improve the types we used in our project.</p> <p dir="ltr">We still needed ts-mxgraph for our tests due to the existing issue with the mxgraph npm package integration. </p> <p dir="ltr">And now, we have recently fully switched to typed-mxgraph using examples like the <a href="https://github.com/typed-mxgraph/typed-mxgraph-example-bundled-with-webpack" target="_blank" rel="noopener">mxgraph TypeScript example bundled with webpack</a>.</p> <p dir="ltr">So we have been able to remove our ts-mxgraph fork. We can focus all our mxgraph integration efforts to giving back to the community and getting further improvements from the community as well.</p> <h2 dir="ltr">Take Away</h2> <p dir="ltr">The mxGraph TypeScript integration was difficult and painful in the past, but in 2021 we now have a solution with <a href="https://github.com/typed-mxgraph/typed-mxgraph" target="_blank" rel="noopener">typed-mxgraph</a>. There is no more need for hacky solutions. mxGraph can be integrated into TypeScript projects as with any JavaScript library without native TypeScript support, and it’s possible to get code assistance and TypeScript compiler checks.</p> <p dir="ltr">typed-mxgraph is still a young solution and it will benefit from wider adoption. So, if you are using mxGraph and are using it or want to use it in TypeScript projects, feel free to contribute to <a href="https://github.com/typed-mxgraph/typed-mxgraph" target="_blank" rel="noopener">typed-mxgraph</a>. </p> <p dir="ltr">There are a large number of areas that can be improved:</p> <ul> <li dir="ltr"> <p dir="ltr">provide usage feedback (missing or incorrect types)</p> </li> <li dir="ltr"> <p dir="ltr">improve the types coverage</p> </li> <li dir="ltr"> <p dir="ltr">improve usage documentation</p> </li> <li dir="ltr"> <p dir="ltr">enrich existing examples (more mxGraph API usage) or provide new ones</p> </li> <li dir="ltr"> <p dir="ltr">help keeping types up to date as the mxGraph javascript library changes</p> </li> </ul> <p dir="ltr">We welcome your contribution to the typed-mxgraph team!</p> </div> <p><br /> <br /><a href="https://dzone.com/articles/mxgraph-usage-in-typescript-projects" target="_blank" rel="noopener">Source link </a></p> </div> <!-- Post Meta --> <div class="post-meta-wrapper"><div class="post-author"><a href="https://graphicdon.com/author/graphicdon/" title="Posts by GraphicDon" rel="author">GraphicDon</a></div><div class="post-date"><a href="https://graphicdon.com/2021/05/16/">May 16, 2021</a></div></div> </div> </div> <div id="post-19269" class="post post-19269 type-post status-publish format-standard has-post-thumbnail hentry category-strategy"> <div class="post-inner"> <div class="post-media-wrapper"> <!-- Featured Media --> <div class="post-media format"><a class="featured-image" href="https://graphicdon.com/2021/05/16/advice-needed-simplistic-art-deco-font-graphic_design/" target="_self"><img width="2430" height="990" src="https://graphicdon.com/wp-content/uploads/2021/05/Advice-Needed-Simplistic-Art-Deco-Font-graphic_design.png" class="attachment-full size-full wp-post-image" alt="r/graphic_design - Advice Needed Simplistic Art Deco Font" loading="lazy" sizes="100vw" srcset="https://graphicdon.com/wp-content/uploads/2021/05/Advice-Needed-Simplistic-Art-Deco-Font-graphic_design.png 2430w, https://graphicdon.com/wp-content/uploads/2021/05/Advice-Needed-Simplistic-Art-Deco-Font-graphic_design-300x122.png 300w, https://graphicdon.com/wp-content/uploads/2021/05/Advice-Needed-Simplistic-Art-Deco-Font-graphic_design-1024x417.png 1024w, https://graphicdon.com/wp-content/uploads/2021/05/Advice-Needed-Simplistic-Art-Deco-Font-graphic_design-768x313.png 768w, https://graphicdon.com/wp-content/uploads/2021/05/Advice-Needed-Simplistic-Art-Deco-Font-graphic_design-1536x626.png 1536w, https://graphicdon.com/wp-content/uploads/2021/05/Advice-Needed-Simplistic-Art-Deco-Font-graphic_design-2048x834.png 2048w, https://graphicdon.com/wp-content/uploads/2021/05/Advice-Needed-Simplistic-Art-Deco-Font-graphic_design-600x244.png 600w" title="Advice Needed Simplistic Art Deco Font : graphic_design 24"></a></div> <!-- Post Date --> <div class="post-date"><a href="https://graphicdon.com/2021/05/16/"><span class="day">16</span><span class="month">May</span></a></div> </div> <!-- Post Categories --> <div class="post-categories"><a href="https://graphicdon.com/category/strategy/" rel="category tag">Strategy</a> </div> <!-- Post Title --> <h3 class="post-title"> <a href="https://graphicdon.com/2021/05/16/advice-needed-simplistic-art-deco-font-graphic_design/" rel="bookmark"> Advice Needed Simplistic Art Deco Font : graphic_design </a> </h3> <!-- Post Content --> <div class="post-content"> <p> <br /> </p> <div style="color:#1A1A1B"> <div class="_2-UiOdhyj4wHBv7Rc2FeDr c1cmiB1jfdq4sxidlPDAx"> <div class="_3Oa0THmZ3f5iZXAQ0hBJ0k _2LjgQiHLCZ9LDbCQx5KaOi" style="margin:0 auto"><a href="https://preview.redd.it/lkj8x8sqjhz61.png?width=2430&format=png&auto=webp&s=ca8cdeb0e19210bd268c4d855e6d0f9a855e82b8" target="_blank" rel="noopener noreferrer"><img alt="r/graphic_design - Advice Needed Simplistic Art Deco Font" class="_2_tDEnGMLxpM6uOa2kaDB3 ImageBox-image media-element _1XWObl-3b9tPy64oaG6fax" src="https://preview.redd.it/lkj8x8sqjhz61.png?width=2430&format=png&auto=webp&s=ca8cdeb0e19210bd268c4d855e6d0f9a855e82b8" style="max-height:700px" title="Advice Needed Simplistic Art Deco Font : graphic_design 25"></a></div> </div> <p class="FJNSiirwoPtG58aeGw2Jx">Thin Art Deco Font</p> <p class="_1qeIAgB0cPwnLhDF9XSiJM">Been working on this font for the last couple of days, to practice some typography tools. My goal is to create quite a narrow and simplistic art deco font. It’s a display font, and meant to look good and be readable at big sizes. It’s also a formal font.</p> <p class="_1qeIAgB0cPwnLhDF9XSiJM">I chose the use of semicircles throughout since I think it looks really effective in that style, with the thinner lines contrasting with the thicker circles. However, in a lot of areas I’ve struggled to follow that. What can I do to improve it?</p> </div> <p><br /> <br /><a href="https://www.reddit.com/r/graphic_design/comments/ndon4s/advice_needed_simplistic_art_deco_font/" target="_blank" rel="noopener">Source link </a></p> </div> <!-- Post Meta --> <div class="post-meta-wrapper"><div class="post-author"><a href="https://graphicdon.com/author/graphicdon/" title="Posts by GraphicDon" rel="author">GraphicDon</a></div><div class="post-date"><a href="https://graphicdon.com/2021/05/16/">May 16, 2021</a></div></div> </div> </div> </div> </div> <!-- /.content --> </div> <!-- /.main-content-inner-wrap --> </div> <!-- /.main-content-inner --> </main> <!-- /.main-content --> </div> <!-- /.site-content --> <div class='rb_footer_template'><div class='container'><div id="rb_content_60fc163acb418" class="rb_content_60fc163acb418 rb-content background_no_hover" ><div data-vc-full-width="true" data-vc-full-width-init="false" class="vc_row wpb_row vc_row-fluid vc_custom_1566906525171 vc_row-has-fill"><div class="row_hover_effect"></div><div id='rb_column_60fc163acb65e' class='rb_column_wrapper vc_col-sm-12 '><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper"><div id='rb_inner_row_60fc163acb889' class='rb_inner_row_wrapper'><div class="vc_row wpb_row vc_inner vc_row-fluid vc_custom_1571904008626 vc_row-has-fill vc_row-o-content-middle vc_row-flex"><div id='rb_column_60fc163acba6c' class='rb_column_wrapper vc_col-sm-9 '><div class="wpb_column vc_column_container vc_col-sm-9"><div class="vc_column-inner vc_custom_1571904128747"><div class="wpb_wrapper"><div id='rb_logo_60fc163acbbb6' class='site_logotype'><a href='https://graphicdon.com/'><img src='https://graphicdon.com/wp-content/uploads/2020/01/GD-LOGO-e1578950439963.png' alt='graphic don logo small' style='width:150px;height:34px;'></a></div><div class='rb_textmodule_60fc163acbbed rb_textmodule subtitle_default align_left'><div class='rb_textmodule_content_wrapper'><p>Shaping your ideas into products</p> </div></div></div></div></div></div><div id='rb_column_60fc163acbcaf' class='rb_column_wrapper vc_col-sm-3 '><div class="wpb_column vc_column_container vc_col-sm-3"><div class="vc_column-inner vc_custom_1571904146914"><div class="wpb_wrapper"><div class='rb_gallery_60fc163acbdb5 rb_gallery_wrapper'><div class='rb_gallery_images columns_3 masonry'><div class='rb_gallery_image'><img src='https://graphicdon.com/wp-content/uploads/2019/06/800x1316_06-150x150.jpg' alt='800x1316_06' /><div class='rb_gallery_overlay'><div class='text_wrapper'></div></div></div><div class='rb_gallery_image'><img src='https://graphicdon.com/wp-content/uploads/2019/06/1000x1000_06-150x150.jpg' alt='1000x1000_06' /><div class='rb_gallery_overlay'><div class='text_wrapper'></div></div></div><div class='rb_gallery_image'><img src='https://graphicdon.com/wp-content/uploads/2019/07/s1064280686_square-150x150.jpg' alt='s1064280686_square' /><div class='rb_gallery_overlay'><div class='text_wrapper'></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="vc_row-full-width vc_clearfix"></div></div><div id="rb_content_60fc163acbf99" class="rb_content_60fc163acbf99 rb-content background_no_hover" ><div data-vc-full-width="true" data-vc-full-width-init="false" class="vc_row wpb_row vc_row-fluid vc_custom_1571904245056 vc_row-has-fill"><div class="row_hover_effect"></div><div id='rb_column_60fc163acc0e3' class='rb_column_wrapper vc_col-sm-4 vc_col-lg-4 vc_col-md-4 '><div class="wpb_column vc_column_container vc_col-sm-4 vc_col-lg-4 vc_col-md-4"><div class="vc_column-inner vc_custom_1572430668458"><div class="wpb_wrapper"><div class='rb_textmodule_60fc163acc20a rb_textmodule subtitle_default align_left'><h4 class='rb_textmodule_title'>We are working with the objective of empowering and transforming businesses digitally. Go ahead and contact us now to get more information about the amazing services that we can offer. Our services are result oriented and you will be able to get the best possible returns at the end of the day. You will fall in love with them as well.</h4><div class='rb_textmodule_content_wrapper'><p><span style="color: #0fe0ba;">A:</span>    Renton, WA, USA<br /> <span style="color: #0fe0ba;">P:</span>    1206 981 0317<br /> <span style="color: #0fe0ba;">E: </span>   contact@graphicdon.com</p> </div></div></div></div></div></div><div class="row_hover_effect"></div><div id='rb_column_60fc163acc2c2' class='rb_column_wrapper vc_col-sm-4 vc_col-lg-5 vc_col-md-5 '><div class="wpb_column vc_column_container vc_col-sm-4 vc_col-lg-5 vc_col-md-5"><div class="vc_column-inner"><div class="wpb_wrapper"><div id='rb_inner_row_60fc163acc3e2' class='rb_inner_row_wrapper'><div class="vc_row wpb_row vc_inner vc_row-fluid"><div id='rb_column_60fc163acc4e7' class='rb_column_wrapper vc_col-sm-6 '><div class="wpb_column vc_column_container vc_col-sm-6"><div class="vc_column-inner"><div class="wpb_wrapper"><div class='rb_textmodule_60fc163acc5ee rb_textmodule subtitle_default align_left'><h3 class='rb_textmodule_title'>Our Services</h3><div class='rb_textmodule_content_wrapper'><ul> <li><a href="https://graphicdon.com/logo-design-creation/">Creative logo Design</a></li> <li><a href="https://graphicdon.com/wordpress-websites-design/">Custom WordPress</a></li> <li><a href="https://graphicdon.com/ebook-design-writing/">eBook Design & Writing</a></li> <li><a href="https://graphicdon.com/on-page-optimization/">On page Optimization</a></li> <li><a href="https://graphicdon.com/advanced-seo-service/">Advanced SEO</a></li> <li><a href="https://graphicdon.com/backlinks-building-service/">Backlinks Building</a></li> <li><a href="https://graphicdon.com/content-writing-services/">SEO Content Writing</a></li> <li><a href="https://graphicdon.com/t-shirts-merchandise-packages/">T-Shirts & Merchandise</a></li> <li><a href="https://graphicdon.com/video-and-animation/">Video and Animation</a></li> <li><a href="https://graphicdon.com/web-design-programming-service/">Programming</a></li> </ul> </div></div></div></div></div></div><div id='rb_column_60fc163acc750' class='rb_column_wrapper vc_col-sm-6 '><div class="wpb_column vc_column_container vc_col-sm-6"><div class="vc_column-inner vc_custom_1572431059251"><div class="wpb_wrapper"><div class='rb_textmodule_60fc163acc838 rb_textmodule subtitle_default align_left'><div class='rb_textmodule_content_wrapper'><ul> <li><a href="https://graphicdon.com/about-us/">About</a></li> <li><a href="https://graphicdon.com/blog/">Blog</a></li> <li><a href="https://graphicdon.com/terms-and-conditions/">Terms And Conditions</a></li> </ul> </div></div></div></div></div></div></div></div></div></div></div></div><div class="row_hover_effect"></div><div id='rb_column_60fc163acc936' class='rb_column_wrapper vc_col-sm-4 vc_col-lg-3 vc_col-md-3 '><div class="wpb_column vc_column_container vc_col-sm-4 vc_col-lg-3 vc_col-md-3"><div class="vc_column-inner"><div class="wpb_wrapper"><div class='rb_textmodule_60fc163acca5c rb_textmodule subtitle_default align_left'><h3 class='rb_textmodule_title'>Subscribe</h3></div><div class="wpforms-container wpforms-container-full" id="wpforms-6181"><form id="wpforms-form-6181" class="wpforms-validate wpforms-form" data-formid="6181" method="post" enctype="multipart/form-data" action="/2021/05/16/" data-token="2457583ab5362f1d8104acd72e76b847"><noscript class="wpforms-error-noscript">Please enable JavaScript in your browser to complete this form.</noscript><div class="wpforms-field-container"><div id="wpforms-6181-field_1-container" class="wpforms-field wpforms-field-email" data-field-id="1"><input type="email" id="wpforms-6181-field_1" class="wpforms-field-medium" name="wpforms[fields][1]" placeholder="Enter Your Email" ></div></div><div class="wpforms-submit-container" ><input type="hidden" name="wpforms[id]" value="6181"><input type="hidden" name="wpforms[author]" value="1"><button type="submit" name="wpforms[submit]" class="wpforms-submit " id="wpforms-submit-6181" value="wpforms-submit" aria-live="assertive" >Submit</button></div></form></div> <!-- .wpforms-container --></div></div></div></div></div><div class="vc_row-full-width vc_clearfix"></div></div><div id="rb_content_60fc163accc7b" class="rb_content_60fc163accc7b rb-content background_no_hover" ><div data-vc-full-width="true" data-vc-full-width-init="false" class="vc_row wpb_row vc_row-fluid vc_custom_1571903575428 vc_row-has-fill vc_row-o-content-middle vc_row-flex"><div class="row_hover_effect"></div><div id='rb_column_60fc163accda9' class='rb_column_wrapper vc_col-sm-6 '><div class="wpb_column vc_column_container vc_col-sm-6"><div class="vc_column-inner"><div class="wpb_wrapper"><div class='rb_textmodule_60fc163accea0 rb_textmodule subtitle_default align_left'><div class='rb_textmodule_content_wrapper'><p>©2017 Graphic Don. All Right Reserved.</p> </div></div></div></div></div></div><div class="row_hover_effect"></div><div id='rb_column_60fc163accf39' class='rb_column_wrapper vc_col-sm-6 '><div class="wpb_column vc_column_container vc_col-sm-6"><div class="vc_column-inner"><div class="wpb_wrapper"><div id='rb_icon_list_60fc163acd04e' class='rb_icon_list_module header_icons direction_line icon_bg'><a href='https://www.facebook.com/Graphic-Don-109634927151287/' class='custom_url'><i class='flaticon-facebook'></i><span class='title'></span></a><a href='https://www.instagram.com/graphic.don/' class='custom_url'><i class='flaticon-instagram-social-network-logo-of-photo-camera'></i><span class='title'></span></a><a href='https://twitter.com/DonGraphic' class='custom_url'><i class='flaticon-twitter-logo-silhouette'></i><span class='title'></span></a><a href='https://www.pinterest.com/graphicdon/' class='custom_url'><i class='flaticon-pinterest'></i><span class='title'></span></a></div></div></div></div></div></div><div class="vc_row-full-width vc_clearfix"></div></div></div></div> <div class="ajax_preloader body_loader"> <div class="dots-wrapper"> <span></span> <span></span> <span></span> </div> </div> <div class="button-up"></div> </div> <!-- /.site-wrapper --> <div id="frame"> <span class="frame_top"></span> <span class="frame_right"></span> <span class="frame_bottom"></span> <span class="frame_left"></span> </div> <script type="text/javascript"> (function () { var c = document.body.className; c = c.replace(/woocommerce-no-js/, 'woocommerce-js'); document.body.className = c; })(); </script> <link rel='stylesheet' id='flaticons-css' href='https://graphicdon.com/wp-content/themes/ogo/assets/fonts/flaticons/style.css?ver=1.0.0' type='text/css' media='all' /> <link rel='stylesheet' id='rbicons-css' href='https://graphicdon.com/wp-content/themes/ogo/assets/fonts/rbicons/style.css?ver=1.0.0' type='text/css' media='all' /> <link rel='stylesheet' id='font-awesome-css' href='https://graphicdon.com/wp-content/themes/ogo/assets/fonts/fa/font-awesome.min.css?ver=5.12.1' type='text/css' media='all' /> <link rel='stylesheet' id='ogo-fonts-css' href='//fonts.googleapis.com/css?family=Montserrat%3A500%2Cregular%2C700%7CYeseva+One%3A400&ver=5.7.2' type='text/css' media='all' /> <style id='rb-footer-inline-css' type='text/css'> .vc_custom_1566906525171{padding-top: 100px !important;background-color: #202020 !important;}.vc_custom_1571904245056{padding-top: 44px !important;padding-bottom: 39px !important;background-color: #202020 !important;}.vc_custom_1571903575428{border-top-width: 1px !important;padding-top: 10px !important;padding-bottom: 10px !important;background-color: #202020 !important;border-top-color: #414141 !important;border-top-style: solid !important;}.vc_custom_1571904008626{margin-right: 0px !important;margin-left: 0px !important;border-bottom-width: 1px !important;padding-bottom: 33px !important;border-bottom-color: #414141 !important;border-bottom-style: solid !important;}.vc_custom_1571904128747{padding-left: 0px !important;}.vc_custom_1571904146914{padding-right: 0px !important;}.vc_custom_1578964059915{padding-top: 20px !important;}.vc_custom_1571904380790{margin-top: 7px !important;}.vc_custom_1572430668458{padding-right: 50px !important;}.vc_custom_1572430668462{padding-bottom: 20px !important;}.vc_custom_1572430674640{padding-top: 30px !important;}.vc_custom_1572431059251{padding-top: 55px !important;}.vc_custom_1572431059254{padding-top: 80px !important;} .rb_content_60fc163acb418 > .vc_row{ background-attachment: scroll !important; background-repeat: no-repeat !important; } .rb_content_60fc163acb418 > .vc_row{ background-size: cover !important; } .rb_content_60fc163acb418 > .vc_row{ background-position: center !important; } #rb_column_60fc163acb65e > .wpb_column > .vc_column-inner{ background-attachment: scroll !important; background-repeat: no-repeat !important; } #rb_column_60fc163acb65e > .wpb_column > .vc_column-inner{ background-size: cover !important; } #rb_column_60fc163acb65e > .wpb_column > .vc_column-inner{ background-position: center !important; } #rb_inner_row_60fc163acb889 > .vc_row{ background-attachment: scroll !important; background-repeat: no-repeat !important; } #rb_inner_row_60fc163acb889 > .vc_row{ background-size: cover !important; } #rb_inner_row_60fc163acb889 > .vc_row{ background-position: center !important; } #rb_column_60fc163acba6c > .wpb_column > .vc_column-inner{ background-attachment: scroll !important; background-repeat: no-repeat !important; } #rb_column_60fc163acba6c > .wpb_column > .vc_column-inner{ background-size: cover !important; } #rb_column_60fc163acba6c > .wpb_column > .vc_column-inner{ background-position: center !important; } #rb_logo_60fc163acbbb6{ padding-top: 20px !important;; } .rb_textmodule_60fc163acbbed{ margin-top: 7px !important;; } .rb_textmodule_60fc163acbbed .rb_textmodule_title, .rb_textmodule_60fc163acbbed .rb_textmodule_button.simple{ color: #3e4a59; } .rb_textmodule_60fc163acbbed .rb_textmodule_subtitle{ color: #ff6849; } .rb_textmodule_60fc163acbbed{ color: #ffffff; } .rb_footer_template .rb_textmodule_60fc163acbbed a{ color: #ffffff; } @media screen and (min-width: 1367px), screen and (min-width: 1200px) and (any-hover: hover), screen and (min-width: 1200px) and (min--moz-device-pixel-ratio:0), screen and (min-width: 1200px) and (-ms-high-contrast: none), screen and (min-width: 1200px) and (-ms-high-contrast: active) { .rb_textmodule_60fc163acbbed .rb_textmodule_content_wrapper a:hover{ color: #ff6849; } } .rb_textmodule_60fc163acbbed .rb_textmodule_content_wrapper ul li:before{ background-color: #ff6849; } .rb_textmodule_60fc163acbbed.subtitle_aside .subtitle-wrapper p:before, .rb_textmodule_60fc163acbbed.subtitle_dashed_divider .rb_textmodule_subtitle .dashed_divider, .rb_textmodule_60fc163acbbed.subtitle_border_divider .rb_textmodule_subtitle:after{ background-color: #ffeb00; } .rb_textmodule_60fc163acbbed .rb_button_wrapper .rb_button{ color: #ffeb00; } .rb_textmodule_60fc163acbbed .rb_button_wrapper .rb_button{ background-color: #353535; } .rb_textmodule_60fc163acbbed .rb_button_wrapper .rb_button:after{ background-color: #ffeb00; } @media screen and (min-width: 1367px), screen and (min-width: 1200px) and (any-hover: hover), screen and (min-width: 1200px) and (min--moz-device-pixel-ratio:0), screen and (min-width: 1200px) and (-ms-high-contrast: none), screen and (min-width: 1200px) and (-ms-high-contrast: active) { .rb_textmodule_60fc163acbbed .rb_button_wrapper .rb_button:hover{ color: #ffeb00; } } .rb_textmodule_60fc163acbbed .rb_textmodule_subtitle{ font-size: 22px; } .rb_textmodule_60fc163acbbed .rb_textmodule_subtitle{ line-height: 22px; } .rb_textmodule_60fc163acbbed .rb_textmodule_title{ font-size: 60px; } .rb_textmodule_60fc163acbbed .rb_textmodule_title{ line-height: 1.18em; } .rb_textmodule_60fc163acbbed .rb_textmodule_title{ margin: 0px 0px 32px 0px; } .rb_textmodule_60fc163acbbed .rb_textmodule_content_wrapper{ font-size: 16px; } .rb_textmodule_60fc163acbbed .rb_textmodule_content_wrapper{ line-height: 34px; } .rb_textmodule_60fc163acbbed .rb_button_wrapper{ margin-top: 50px; } #rb_column_60fc163acbcaf > .wpb_column > .vc_column-inner{ background-attachment: scroll !important; background-repeat: no-repeat !important; } #rb_column_60fc163acbcaf > .wpb_column > .vc_column-inner{ background-size: cover !important; } #rb_column_60fc163acbcaf > .wpb_column > .vc_column-inner{ background-position: center !important; } .rb_gallery_60fc163acbdb5 .text_wrapper h5, .rb_gallery_60fc163acbdb5 .text_wrapper p{ color: #ffffff; } .rb_gallery_60fc163acbdb5 .text_wrapper h5:before{ background-color: #ffffff; } .rb_gallery_60fc163acbdb5 .rb_gallery_image .rb_gallery_overlay{ background: -webkit-linear-gradient(to bottom, rgba(255,175,0,0.75), rgba(255,104,73,0.75)); background: linear-gradient(to bottom, rgba(255,175,0,0.75), rgba(255,104,73,0.75)); } .rb_content_60fc163acbf99 > .vc_row{ background-attachment: scroll !important; background-repeat: no-repeat !important; } .rb_content_60fc163acbf99 > .vc_row{ background-size: cover !important; } .rb_content_60fc163acbf99 > .vc_row{ background-position: center !important; } #rb_column_60fc163acc0e3 > .wpb_column > .vc_column-inner{ background-attachment: scroll !important; background-repeat: no-repeat !important; } #rb_column_60fc163acc0e3 > .wpb_column > .vc_column-inner{ background-size: cover !important; } #rb_column_60fc163acc0e3 > .wpb_column > .vc_column-inner{ background-position: center !important; } @media screen and (max-width: 767px){ #rb_column_60fc163acc0e3 > .wpb_column > .vc_column-inner{ padding-bottom: 20px !important; } } .rb_textmodule_60fc163acc20a .rb_textmodule_title, .rb_textmodule_60fc163acc20a .rb_textmodule_button.simple{ color: #0fe0ba; } .rb_textmodule_60fc163acc20a .rb_textmodule_subtitle{ color: #353535; } .rb_textmodule_60fc163acc20a{ color: #ffffff; } .rb_footer_template .rb_textmodule_60fc163acc20a a{ color: #ffffff; } @media screen and (min-width: 1367px), screen and (min-width: 1200px) and (any-hover: hover), screen and (min-width: 1200px) and (min--moz-device-pixel-ratio:0), screen and (min-width: 1200px) and (-ms-high-contrast: none), screen and (min-width: 1200px) and (-ms-high-contrast: active) { .rb_textmodule_60fc163acc20a .rb_textmodule_content_wrapper a:hover{ color: #0fe0ba; } } .rb_textmodule_60fc163acc20a .rb_textmodule_content_wrapper ul li:before{ background-color: #0fe0ba; } .rb_textmodule_60fc163acc20a.subtitle_aside .subtitle-wrapper p:before, .rb_textmodule_60fc163acc20a.subtitle_dashed_divider .rb_textmodule_subtitle .dashed_divider, .rb_textmodule_60fc163acc20a.subtitle_border_divider .rb_textmodule_subtitle:after{ background-color: #0fe0ba; } .rb_textmodule_60fc163acc20a .rb_button_wrapper .rb_button{ color: #0fe0ba; } .rb_textmodule_60fc163acc20a .rb_button_wrapper .rb_button{ background-color: #353535; } .rb_textmodule_60fc163acc20a .rb_button_wrapper .rb_button:after{ background-color: #0fe0ba; } @media screen and (min-width: 1367px), screen and (min-width: 1200px) and (any-hover: hover), screen and (min-width: 1200px) and (min--moz-device-pixel-ratio:0), screen and (min-width: 1200px) and (-ms-high-contrast: none), screen and (min-width: 1200px) and (-ms-high-contrast: active) { .rb_textmodule_60fc163acc20a .rb_button_wrapper .rb_button:hover{ color: #0fe0ba; } } .rb_textmodule_60fc163acc20a .rb_textmodule_subtitle{ font-size: 22px; } .rb_textmodule_60fc163acc20a .rb_textmodule_subtitle{ line-height: 22px; } .rb_textmodule_60fc163acc20a .rb_textmodule_title{ font-size: 20px; } .rb_textmodule_60fc163acc20a .rb_textmodule_title{ line-height: 1.18em; } .rb_textmodule_60fc163acc20a .rb_textmodule_title{ margin: 0px 0px 32px 0px; } .rb_textmodule_60fc163acc20a .rb_textmodule_content_wrapper{ font-size: 18px; } .rb_textmodule_60fc163acc20a .rb_textmodule_content_wrapper{ line-height: 34px; } .rb_textmodule_60fc163acc20a .rb_button_wrapper{ margin-top: 50px; } #rb_column_60fc163acc2c2 > .wpb_column > .vc_column-inner{ background-attachment: scroll !important; background-repeat: no-repeat !important; } #rb_column_60fc163acc2c2 > .wpb_column > .vc_column-inner{ background-size: cover !important; } #rb_column_60fc163acc2c2 > .wpb_column > .vc_column-inner{ background-position: center !important; } #rb_inner_row_60fc163acc3e2 > .vc_row{ background-attachment: scroll !important; background-repeat: no-repeat !important; } #rb_inner_row_60fc163acc3e2 > .vc_row{ background-size: cover !important; } #rb_inner_row_60fc163acc3e2 > .vc_row{ background-position: center !important; } #rb_column_60fc163acc4e7 > .wpb_column > .vc_column-inner{ background-attachment: scroll !important; background-repeat: no-repeat !important; } #rb_column_60fc163acc4e7 > .wpb_column > .vc_column-inner{ background-size: cover !important; } #rb_column_60fc163acc4e7 > .wpb_column > .vc_column-inner{ background-position: center !important; } .rb_textmodule_60fc163acc5ee .rb_textmodule_title, .rb_textmodule_60fc163acc5ee .rb_textmodule_button.simple{ color: #0fe0ba; } .rb_textmodule_60fc163acc5ee .rb_textmodule_subtitle{ color: #353535; } .rb_textmodule_60fc163acc5ee{ color: #ffffff; } .rb_footer_template .rb_textmodule_60fc163acc5ee a{ color: #ffffff; } @media screen and (min-width: 1367px), screen and (min-width: 1200px) and (any-hover: hover), screen and (min-width: 1200px) and (min--moz-device-pixel-ratio:0), screen and (min-width: 1200px) and (-ms-high-contrast: none), screen and (min-width: 1200px) and (-ms-high-contrast: active) { .rb_textmodule_60fc163acc5ee .rb_textmodule_content_wrapper a:hover{ color: #ffeb00; } } .rb_textmodule_60fc163acc5ee .rb_textmodule_content_wrapper ul li:before{ background-color: #ffeb00; } .rb_textmodule_60fc163acc5ee.subtitle_aside .subtitle-wrapper p:before, .rb_textmodule_60fc163acc5ee.subtitle_dashed_divider .rb_textmodule_subtitle .dashed_divider, .rb_textmodule_60fc163acc5ee.subtitle_border_divider .rb_textmodule_subtitle:after{ background-color: #ffeb00; } .rb_textmodule_60fc163acc5ee .rb_button_wrapper .rb_button{ color: #ffeb00; } .rb_textmodule_60fc163acc5ee .rb_button_wrapper .rb_button{ background-color: #353535; } .rb_textmodule_60fc163acc5ee .rb_button_wrapper .rb_button:after{ background-color: #ffeb00; } @media screen and (min-width: 1367px), screen and (min-width: 1200px) and (any-hover: hover), screen and (min-width: 1200px) and (min--moz-device-pixel-ratio:0), screen and (min-width: 1200px) and (-ms-high-contrast: none), screen and (min-width: 1200px) and (-ms-high-contrast: active) { .rb_textmodule_60fc163acc5ee .rb_button_wrapper .rb_button:hover{ color: #ffeb00; } } .rb_textmodule_60fc163acc5ee .rb_textmodule_subtitle{ font-size: 22px; } .rb_textmodule_60fc163acc5ee .rb_textmodule_subtitle{ line-height: 22px; } .rb_textmodule_60fc163acc5ee .rb_textmodule_title{ font-size: 20px; } .rb_textmodule_60fc163acc5ee .rb_textmodule_title{ line-height: 1.18em; } .rb_textmodule_60fc163acc5ee .rb_textmodule_title{ margin: 0px 0px 32px 0px; } .rb_textmodule_60fc163acc5ee .rb_textmodule_content_wrapper{ font-size: 18px; } .rb_textmodule_60fc163acc5ee .rb_textmodule_content_wrapper{ line-height: 34px; } .rb_textmodule_60fc163acc5ee .rb_button_wrapper{ margin-top: 50px; } #rb_column_60fc163acc750 > .wpb_column > .vc_column-inner{ background-attachment: scroll !important; background-repeat: no-repeat !important; } #rb_column_60fc163acc750 > .wpb_column > .vc_column-inner{ background-size: cover !important; } #rb_column_60fc163acc750 > .wpb_column > .vc_column-inner{ background-position: center !important; } @media screen and (max-width: 991px){ #rb_column_60fc163acc750 > .wpb_column > .vc_column-inner{ padding-top: 80px !important; } } .rb_textmodule_60fc163acc838 .rb_textmodule_title, .rb_textmodule_60fc163acc838 .rb_textmodule_button.simple{ color: #feeb25; } .rb_textmodule_60fc163acc838 .rb_textmodule_subtitle{ color: #353535; } .rb_textmodule_60fc163acc838{ color: #ffffff; } .rb_footer_template .rb_textmodule_60fc163acc838 a{ color: #ffffff; } @media screen and (min-width: 1367px), screen and (min-width: 1200px) and (any-hover: hover), screen and (min-width: 1200px) and (min--moz-device-pixel-ratio:0), screen and (min-width: 1200px) and (-ms-high-contrast: none), screen and (min-width: 1200px) and (-ms-high-contrast: active) { .rb_textmodule_60fc163acc838 .rb_textmodule_content_wrapper a:hover{ color: #ffeb00; } } .rb_textmodule_60fc163acc838 .rb_textmodule_content_wrapper ul li:before{ background-color: #ffeb00; } .rb_textmodule_60fc163acc838.subtitle_aside .subtitle-wrapper p:before, .rb_textmodule_60fc163acc838.subtitle_dashed_divider .rb_textmodule_subtitle .dashed_divider, .rb_textmodule_60fc163acc838.subtitle_border_divider .rb_textmodule_subtitle:after{ background-color: #ffeb00; } .rb_textmodule_60fc163acc838 .rb_button_wrapper .rb_button{ color: #ffeb00; } .rb_textmodule_60fc163acc838 .rb_button_wrapper .rb_button{ background-color: #353535; } .rb_textmodule_60fc163acc838 .rb_button_wrapper .rb_button:after{ background-color: #ffeb00; } @media screen and (min-width: 1367px), screen and (min-width: 1200px) and (any-hover: hover), screen and (min-width: 1200px) and (min--moz-device-pixel-ratio:0), screen and (min-width: 1200px) and (-ms-high-contrast: none), screen and (min-width: 1200px) and (-ms-high-contrast: active) { .rb_textmodule_60fc163acc838 .rb_button_wrapper .rb_button:hover{ color: #ffeb00; } } .rb_textmodule_60fc163acc838 .rb_textmodule_subtitle{ font-size: 22px; } .rb_textmodule_60fc163acc838 .rb_textmodule_subtitle{ line-height: 22px; } .rb_textmodule_60fc163acc838 .rb_textmodule_title{ font-size: 20px; } .rb_textmodule_60fc163acc838 .rb_textmodule_title{ line-height: 1.18em; } .rb_textmodule_60fc163acc838 .rb_textmodule_title{ margin: 0px 0px 32px 0px; } .rb_textmodule_60fc163acc838 .rb_textmodule_content_wrapper{ font-size: 18px; } .rb_textmodule_60fc163acc838 .rb_textmodule_content_wrapper{ line-height: 34px; } .rb_textmodule_60fc163acc838 .rb_button_wrapper{ margin-top: 50px; } #rb_column_60fc163acc936 > .wpb_column > .vc_column-inner{ background-attachment: scroll !important; background-repeat: no-repeat !important; } #rb_column_60fc163acc936 > .wpb_column > .vc_column-inner{ background-size: cover !important; } #rb_column_60fc163acc936 > .wpb_column > .vc_column-inner{ background-position: center !important; } @media screen and (max-width: 991px){ #rb_column_60fc163acc936 > .wpb_column > .vc_column-inner{ padding-top: 30px !important; } } .rb_textmodule_60fc163acca5c .rb_textmodule_title, .rb_textmodule_60fc163acca5c .rb_textmodule_button.simple{ color: #0fe0ba; } .rb_textmodule_60fc163acca5c .rb_textmodule_subtitle{ color: #ffffff; } .rb_textmodule_60fc163acca5c{ color: rgba(255,255,255,0.6); } .rb_footer_template .rb_textmodule_60fc163acca5c a{ color: rgba(255,255,255,0.6); } @media screen and (min-width: 1367px), screen and (min-width: 1200px) and (any-hover: hover), screen and (min-width: 1200px) and (min--moz-device-pixel-ratio:0), screen and (min-width: 1200px) and (-ms-high-contrast: none), screen and (min-width: 1200px) and (-ms-high-contrast: active) { .rb_textmodule_60fc163acca5c .rb_textmodule_content_wrapper a:hover{ color: #ff6849; } } .rb_textmodule_60fc163acca5c .rb_textmodule_content_wrapper ul li:before{ background-color: #ff6849; } .rb_textmodule_60fc163acca5c.subtitle_aside .subtitle-wrapper p:before, .rb_textmodule_60fc163acca5c.subtitle_dashed_divider .rb_textmodule_subtitle .dashed_divider, .rb_textmodule_60fc163acca5c.subtitle_border_divider .rb_textmodule_subtitle:after{ background-color: #ffeb00; } .rb_textmodule_60fc163acca5c .rb_button_wrapper .rb_button{ color: #ffeb00; } .rb_textmodule_60fc163acca5c .rb_button_wrapper .rb_button{ background-color: #353535; } .rb_textmodule_60fc163acca5c .rb_button_wrapper .rb_button:after{ background-color: #ffeb00; } @media screen and (min-width: 1367px), screen and (min-width: 1200px) and (any-hover: hover), screen and (min-width: 1200px) and (min--moz-device-pixel-ratio:0), screen and (min-width: 1200px) and (-ms-high-contrast: none), screen and (min-width: 1200px) and (-ms-high-contrast: active) { .rb_textmodule_60fc163acca5c .rb_button_wrapper .rb_button:hover{ color: #ffeb00; } } .rb_textmodule_60fc163acca5c .rb_textmodule_subtitle{ font-size: 22px; } .rb_textmodule_60fc163acca5c .rb_textmodule_subtitle{ line-height: 22px; } .rb_textmodule_60fc163acca5c .rb_textmodule_title{ font-size: 20px; } .rb_textmodule_60fc163acca5c .rb_textmodule_title{ line-height: 1.18em; } .rb_textmodule_60fc163acca5c .rb_textmodule_title{ margin: 0px 0px 32px 0px; } .rb_textmodule_60fc163acca5c .rb_textmodule_content_wrapper{ font-size: 19px; } .rb_textmodule_60fc163acca5c .rb_textmodule_content_wrapper{ line-height: 34px; } .rb_textmodule_60fc163acca5c .rb_button_wrapper{ margin-top: 50px; } .rb_content_60fc163accc7b > .vc_row{ background-attachment: scroll !important; background-repeat: no-repeat !important; } .rb_content_60fc163accc7b > .vc_row{ background-size: cover !important; } .rb_content_60fc163accc7b > .vc_row{ background-position: center !important; } #rb_column_60fc163accda9 > .wpb_column > .vc_column-inner{ background-attachment: scroll !important; background-repeat: no-repeat !important; } #rb_column_60fc163accda9 > .wpb_column > .vc_column-inner{ background-size: cover !important; } #rb_column_60fc163accda9 > .wpb_column > .vc_column-inner{ background-position: center !important; } .rb_textmodule_60fc163accea0{ text-align: left; } .rb_textmodule_60fc163accea0 .rb_textmodule_title, .rb_textmodule_60fc163accea0 .rb_textmodule_button.simple{ color: #3e4a59; } .rb_textmodule_60fc163accea0 .rb_textmodule_subtitle{ color: #ff6849; } .rb_textmodule_60fc163accea0{ color: #ffffff; } .rb_footer_template .rb_textmodule_60fc163accea0 a{ color: #ffffff; } @media screen and (min-width: 1367px), screen and (min-width: 1200px) and (any-hover: hover), screen and (min-width: 1200px) and (min--moz-device-pixel-ratio:0), screen and (min-width: 1200px) and (-ms-high-contrast: none), screen and (min-width: 1200px) and (-ms-high-contrast: active) { .rb_textmodule_60fc163accea0 .rb_textmodule_content_wrapper a:hover{ color: #ff6849; } } .rb_textmodule_60fc163accea0 .rb_textmodule_content_wrapper ul li:before{ background-color: #ff6849; } .rb_textmodule_60fc163accea0.subtitle_aside .subtitle-wrapper p:before, .rb_textmodule_60fc163accea0.subtitle_dashed_divider .rb_textmodule_subtitle .dashed_divider, .rb_textmodule_60fc163accea0.subtitle_border_divider .rb_textmodule_subtitle:after{ background-color: #ffeb00; } .rb_textmodule_60fc163accea0 .rb_button_wrapper .rb_button{ color: #ffeb00; } .rb_textmodule_60fc163accea0 .rb_button_wrapper .rb_button{ background-color: #353535; } .rb_textmodule_60fc163accea0 .rb_button_wrapper .rb_button:after{ background-color: #ffeb00; } @media screen and (min-width: 1367px), screen and (min-width: 1200px) and (any-hover: hover), screen and (min-width: 1200px) and (min--moz-device-pixel-ratio:0), screen and (min-width: 1200px) and (-ms-high-contrast: none), screen and (min-width: 1200px) and (-ms-high-contrast: active) { .rb_textmodule_60fc163accea0 .rb_button_wrapper .rb_button:hover{ color: #ffeb00; } } .rb_textmodule_60fc163accea0 .rb_textmodule_subtitle{ font-size: 22px; } .rb_textmodule_60fc163accea0 .rb_textmodule_subtitle{ line-height: 22px; } .rb_textmodule_60fc163accea0 .rb_textmodule_title{ font-size: 60px; } .rb_textmodule_60fc163accea0 .rb_textmodule_title{ line-height: 1.18em; } .rb_textmodule_60fc163accea0 .rb_textmodule_title{ margin: 0px 0px 32px 0px; } .rb_textmodule_60fc163accea0 .rb_textmodule_content_wrapper{ font-size: 14px; } .rb_textmodule_60fc163accea0 .rb_textmodule_content_wrapper{ line-height: 34px; } .rb_textmodule_60fc163accea0 .rb_button_wrapper{ margin-top: 50px; } #rb_column_60fc163accf39 > .wpb_column > .vc_column-inner{ background-attachment: scroll !important; background-repeat: no-repeat !important; } #rb_column_60fc163accf39 > .wpb_column > .vc_column-inner{ background-size: cover !important; } #rb_column_60fc163accf39 > .wpb_column > .vc_column-inner{ background-position: center !important; } #rb_icon_list_60fc163acd04e{ text-align: right; } #rb_icon_list_60fc163acd04e > a, #rb_icon_list_60fc163acd04e > .mini-cart > a, #rb_icon_list_60fc163acd04e .wpml-ls-statics-shortcode_actions .wpml-ls-current-language > a{ color: #ffffff; } @media screen and (min-width: 1367px), /*Disable this styles for iPad Pro 1024-1366*/ screen and (min-width: 1200px) and (any-hover: hover), /*Check, is device a desktop (Not working on IE & FireFox)*/ screen and (min-width: 1200px) and (min--moz-device-pixel-ratio:0), /*Check, is device a desktop with firefox*/ screen and (min-width: 1200px) and (-ms-high-contrast: none), /*Check, is device a desktop with IE 10 or above*/ screen and (min-width: 1200px) and (-ms-high-contrast: active) /*Check, is device a desktop with IE 10 or above*/ { #rb_icon_list_60fc163acd04e > a:hover, #rb_icon_list_60fc163acd04e > .mini-cart > a:hover, #rb_icon_list_60fc163acd04e .wpml-ls-statics-shortcode_actions .wpml-ls-current-language > a:hover{ color: #feeb25; } } </style> <link rel='stylesheet' id='js_composer_front-css' href='https://graphicdon.com/wp-content/plugins/js_composer/assets/css/js_composer.min.css?ver=6.5.0' type='text/css' media='all' /> <link rel='stylesheet' id='wpforms-full-css' href='https://graphicdon.com/wp-content/plugins/wpforms-lite/assets/css/wpforms-full.min.css?ver=1.6.6' type='text/css' media='all' /> <script type='text/javascript' src='https://graphicdon.com/wp-content/themes/ogo/assets/js/magnific-popup.min.js?ver=1.1.0' id='rb-magnific-popup-js'></script> <script type='text/javascript' src='https://graphicdon.com/wp-content/themes/ogo/assets/js/waypoints.min.js?ver=1.6.2' id='rb-waypoints-js'></script> <script type='text/javascript' src='https://graphicdon.com/wp-content/themes/ogo/assets/js/counterup.min.js?ver=1.0.0' id='rb-counterup-js'></script> <script type='text/javascript' src='https://graphicdon.com/wp-content/themes/ogo/assets/js/particles.min.js?ver=2.0.0' id='rb-particles-js'></script> <script type='text/javascript' src='https://graphicdon.com/wp-content/themes/ogo/assets/js/jquery.sticky-sidebar.min.js?ver=3.3.1' id='rb-sticky-js'></script> <script type='text/javascript' src='https://graphicdon.com/wp-content/themes/ogo/assets/js/tilt.jquery.js?ver=1.0.0' id='rb-tilt-js'></script> <script type='text/javascript' src='https://graphicdon.com/wp-content/themes/ogo/assets/js/isotope.min.js?ver=3.0.6' id='rb-isotope-js'></script> <script type='text/javascript' src='https://graphicdon.com/wp-content/themes/ogo/assets/js/theme.js?ver=1.0.0' id='ogo-theme-js'></script> <script type='text/javascript' src='https://graphicdon.com/wp-includes/js/imagesloaded.min.js?ver=4.1.4' id='imagesloaded-js'></script> <script type='text/javascript' src='https://graphicdon.com/wp-includes/js/masonry.min.js?ver=4.2.2' id='masonry-js'></script> <script type='text/javascript' src='https://graphicdon.com/wp-includes/js/dist/vendor/wp-polyfill.min.js?ver=7.4.4' id='wp-polyfill-js'></script> <script type='text/javascript' id='wp-polyfill-js-after'> ( 'fetch' in window ) || document.write( '<script src="https://graphicdon.com/wp-includes/js/dist/vendor/wp-polyfill-fetch.min.js?ver=3.0.0"></scr' + 'ipt>' );( document.contains ) || document.write( '<script src="https://graphicdon.com/wp-includes/js/dist/vendor/wp-polyfill-node-contains.min.js?ver=3.42.0"></scr' + 'ipt>' );( window.DOMRect ) || document.write( '<script src="https://graphicdon.com/wp-includes/js/dist/vendor/wp-polyfill-dom-rect.min.js?ver=3.42.0"></scr' + 'ipt>' );( window.URL && window.URL.prototype && window.URLSearchParams ) || document.write( '<script src="https://graphicdon.com/wp-includes/js/dist/vendor/wp-polyfill-url.min.js?ver=3.6.4"></scr' + 'ipt>' );( window.FormData && window.FormData.prototype.keys ) || document.write( '<script src="https://graphicdon.com/wp-includes/js/dist/vendor/wp-polyfill-formdata.min.js?ver=3.0.12"></scr' + 'ipt>' );( Element.prototype.matches && Element.prototype.closest ) || document.write( '<script src="https://graphicdon.com/wp-includes/js/dist/vendor/wp-polyfill-element-closest.min.js?ver=2.0.2"></scr' + 'ipt>' );( 'objectFit' in document.documentElement.style ) || document.write( '<script src="https://graphicdon.com/wp-includes/js/dist/vendor/wp-polyfill-object-fit.min.js?ver=2.3.4"></scr' + 'ipt>' ); </script> <script type='text/javascript' src='https://graphicdon.com/wp-includes/js/dist/hooks.min.js?ver=50e23bed88bcb9e6e14023e9961698c1' id='wp-hooks-js'></script> <script type='text/javascript' src='https://graphicdon.com/wp-includes/js/dist/i18n.min.js?ver=db9a9a37da262883343e941c3731bc67' id='wp-i18n-js'></script> <script type='text/javascript' id='wp-i18n-js-after'> wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); </script> <script type='text/javascript' src='https://graphicdon.com/wp-includes/js/dist/vendor/lodash.min.js?ver=4.17.19' id='lodash-js'></script> <script type='text/javascript' id='lodash-js-after'> window.lodash = _.noConflict(); </script> <script type='text/javascript' src='https://graphicdon.com/wp-includes/js/dist/url.min.js?ver=0ac7e0472c46121366e7ce07244be1ac' id='wp-url-js'></script> <script type='text/javascript' id='wp-api-fetch-js-translations'> ( function( domain, translations ) { var localeData = translations.locale_data[ domain ] || translations.locale_data.messages; localeData[""].domain = domain; wp.i18n.setLocaleData( localeData, domain ); } )( "default", { "locale_data": { "messages": { "": {} } } } ); </script> <script type='text/javascript' src='https://graphicdon.com/wp-includes/js/dist/api-fetch.min.js?ver=a783d1f442d2abefc7d6dbd156a44561' id='wp-api-fetch-js'></script> <script type='text/javascript' id='wp-api-fetch-js-after'> wp.apiFetch.use( wp.apiFetch.createRootURLMiddleware( "https://graphicdon.com/wp-json/" ) ); wp.apiFetch.nonceMiddleware = wp.apiFetch.createNonceMiddleware( "91711b078c" ); wp.apiFetch.use( wp.apiFetch.nonceMiddleware ); wp.apiFetch.use( wp.apiFetch.mediaUploadMiddleware ); wp.apiFetch.nonceEndpoint = "https://graphicdon.com/wp-admin/admin-ajax.php?action=rest-nonce"; </script> <script type='text/javascript' id='contact-form-7-js-extra'> /* <![CDATA[ */ var wpcf7 = {"cached":"1"}; /* ]]> */ </script> <script type='text/javascript' src='https://graphicdon.com/wp-content/plugins/contact-form-7/includes/js/index.js?ver=5.4' id='contact-form-7-js'></script> <script type='text/javascript' src='https://graphicdon.com/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4' id='js-cookie-js'></script> <script type='text/javascript' id='woocommerce-js-extra'> /* <![CDATA[ */ var woocommerce_params = {"ajax_url":"\/wp-admin\/admin-ajax.php","wc_ajax_url":"\/?wc-ajax=%%endpoint%%"}; /* ]]> */ </script> <script type='text/javascript' src='https://graphicdon.com/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=5.2.3' id='woocommerce-js'></script> <script type='text/javascript' id='wc-cart-fragments-js-extra'> /* <![CDATA[ */ var wc_cart_fragments_params = {"ajax_url":"\/wp-admin\/admin-ajax.php","wc_ajax_url":"\/?wc-ajax=%%endpoint%%","cart_hash_key":"wc_cart_hash_e33a41bd55b9acf9dece18128fc3803d","fragment_name":"wc_fragments_e33a41bd55b9acf9dece18128fc3803d","request_timeout":"5000"}; /* ]]> */ </script> <script type='text/javascript' src='https://graphicdon.com/wp-content/plugins/woocommerce/assets/js/frontend/cart-fragments.min.js?ver=5.2.3' id='wc-cart-fragments-js'></script> <script type='text/javascript' id='woo-scripts-js-extra'> /* <![CDATA[ */ var woo_script_load_more_params = {"posts":"{\"year\":2021,\"monthnum\":5,\"day\":16,\"error\":\"\",\"m\":\"\",\"p\":0,\"post_parent\":\"\",\"subpost\":\"\",\"subpost_id\":\"\",\"attachment\":\"\",\"attachment_id\":0,\"name\":\"\",\"pagename\":\"\",\"page_id\":0,\"second\":\"\",\"minute\":\"\",\"hour\":\"\",\"w\":0,\"category_name\":\"\",\"tag\":\"\",\"cat\":\"\",\"tag_id\":\"\",\"author\":\"\",\"author_name\":\"\",\"feed\":\"\",\"tb\":\"\",\"paged\":0,\"meta_key\":\"\",\"meta_value\":\"\",\"preview\":\"\",\"s\":\"\",\"sentence\":\"\",\"title\":\"\",\"fields\":\"\",\"menu_order\":\"\",\"embed\":\"\",\"category__in\":[],\"category__not_in\":[],\"category__and\":[],\"post__in\":[],\"post__not_in\":[],\"post_name__in\":[],\"tag__in\":[],\"tag__not_in\":[],\"tag__and\":[],\"tag_slug__in\":[],\"tag_slug__and\":[],\"post_parent__in\":[],\"post_parent__not_in\":[],\"author__in\":[],\"author__not_in\":[],\"ignore_sticky_posts\":false,\"suppress_filters\":false,\"cache_results\":true,\"update_post_term_cache\":true,\"lazy_load_term_meta\":true,\"update_post_meta_cache\":true,\"post_type\":\"\",\"posts_per_page\":10,\"nopaging\":false,\"comments_per_page\":\"50\",\"no_found_rows\":false,\"order\":\"DESC\"}","current_page":"1","max_page":"1"}; /* ]]> */ </script> <script type='text/javascript' src='https://graphicdon.com/wp-content/themes/ogo/woocommerce/assets/js/woo.js?ver=1.0.0' id='woo-scripts-js'></script> <script type='text/javascript' src='https://graphicdon.com/wp-content/plugins/rb-essentials/render_vc_shortcodes/../assets/js/rb-portfolio.js?ver=1.0.0' id='rb-portfolio-js'></script> <script type='text/javascript' src='https://graphicdon.com/wp-includes/js/wp-embed.min.js?ver=5.7.2' id='wp-embed-js'></script> <script type='text/javascript' src='https://graphicdon.com/wp-content/plugins/js_composer/assets/js/dist/js_composer_front.min.js?ver=6.5.0' id='wpb_composer_front_js-js'></script> <script type='text/javascript' src='https://graphicdon.com/wp-content/plugins/wpforms-lite/assets/js/jquery.validate.min.js?ver=1.19.0' id='wpforms-validation-js'></script> <script type='text/javascript' src='https://graphicdon.com/wp-content/plugins/wpforms-lite/assets/js/mailcheck.min.js?ver=1.1.2' id='wpforms-mailcheck-js'></script> <script type='text/javascript' src='https://graphicdon.com/wp-content/plugins/wpforms-lite/assets/js/wpforms.js?ver=1.6.6' id='wpforms-js'></script> <script type='text/javascript'> /* <![CDATA[ */ var wpforms_settings = {"val_required":"This field is required.","val_email":"Please enter a valid email address.","val_email_suggestion":"Did you mean {suggestion}?","val_email_suggestion_title":"Click to accept this suggestion.","val_email_restricted":"This email address is not allowed.","val_number":"Please enter a valid number.","val_number_positive":"Please enter a valid positive number.","val_confirm":"Field values do not match.","val_checklimit":"You have exceeded the number of allowed selections: {#}.","val_limit_characters":"{count} of {limit} max characters.","val_limit_words":"{count} of {limit} max words.","val_recaptcha_fail_msg":"Google reCAPTCHA verification failed, please try again later.","val_empty_blanks":"Please fill out all blanks.","uuid_cookie":"","locale":"en","wpforms_plugin_url":"https:\/\/graphicdon.com\/wp-content\/plugins\/wpforms-lite\/","gdpr":"","ajaxurl":"https:\/\/graphicdon.com\/wp-admin\/admin-ajax.php","mailcheck_enabled":"1","mailcheck_domains":[],"mailcheck_toplevel_domains":["dev"],"is_ssl":"1"} /* ]]> */ </script> </body> </html>