diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..afdbc3e --- /dev/null +++ b/Gemfile @@ -0,0 +1,35 @@ +source "https://rubygems.org" +# Hello! This is where you manage which Jekyll version is used to run. +# When you want to use a different version, change it below, save the +# file and run `bundle install`. Run Jekyll with `bundle exec`, like so: +# +# bundle exec jekyll serve +# +# This will help ensure the proper Jekyll version is running. +# Happy Jekylling! +gem "jekyll", "~> 4.0.0" +# This is the default theme for new Jekyll sites. You may change this to anything you like. +# gem "minima", "~> 2.5" + +# If you want to use GitHub Pages, remove the "gem "jekyll"" above and +# uncomment the line below. To upgrade, run `bundle update github-pages`. +# gem "github-pages", group: :jekyll_plugins +# If you have any plugins, put them here! +group :jekyll_plugins do + gem "jekyll-feed", "~> 0.12" + gem "jekyll-menus" + gem "jekyll-tagging" + gem "jekyll-archives" + gem "jekyll-paginate-v2" + gem 'jekyll_picture_tag', '~> 1.6' +end + +# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem +# and associated library. +install_if -> { RUBY_PLATFORM =~ %r!mingw|mswin|java! } do + gem "tzinfo", "~> 1.2" + gem "tzinfo-data" +end + +# Performance-booster for watching directories on Windows +gem "wdm", "~> 0.1.1", :install_if => Gem.win_platform? diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..ba0702b --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,104 @@ +GEM + remote: https://rubygems.org/ + specs: + addressable (2.7.0) + public_suffix (>= 2.0.2, < 5.0) + colorator (1.1.0) + concurrent-ruby (1.1.7) + em-websocket (0.5.2) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0.6.0) + eventmachine (1.2.7) + ffi (1.13.1) + forwardable-extended (2.6.0) + http_parser.rb (0.6.0) + i18n (1.8.5) + concurrent-ruby (~> 1.0) + jekyll (4.0.1) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (>= 0.9.5, < 2) + jekyll-sass-converter (~> 2.0) + jekyll-watch (~> 2.0) + kramdown (~> 2.1) + kramdown-parser-gfm (~> 1.0) + liquid (~> 4.0) + mercenary (~> 0.3.3) + pathutil (~> 0.9) + rouge (~> 3.0) + safe_yaml (~> 1.0) + terminal-table (~> 1.8) + jekyll-archives (2.2.1) + jekyll (>= 3.6, < 5.0) + jekyll-feed (0.15.1) + jekyll (>= 3.7, < 5.0) + jekyll-menus (0.6.1) + jekyll (>= 3.6, < 5.0) + jekyll-paginate-v2 (3.0.0) + jekyll (>= 3.0, < 5.0) + jekyll-sass-converter (2.1.0) + sassc (> 2.0.1, < 3.0) + jekyll-tagging (1.1.0) + nuggets + jekyll-watch (2.2.1) + listen (~> 3.0) + jekyll_picture_tag (1.12.0) + addressable (~> 2.6) + jekyll (< 5) + mime-types (~> 3) + mini_magick (~> 4) + objective_elements (~> 1.1.2) + kramdown (2.3.0) + rexml + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + liquid (4.0.3) + listen (3.3.1) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + mercenary (0.3.6) + mime-types (3.3.1) + mime-types-data (~> 3.2015) + mime-types-data (3.2020.1104) + mini_magick (4.11.0) + nuggets (1.6.0) + objective_elements (1.1.2) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (4.0.6) + rb-fsevent (0.10.4) + rb-inotify (0.10.1) + ffi (~> 1.0) + rexml (3.2.4) + rouge (3.25.0) + safe_yaml (1.0.5) + sassc (2.4.0) + ffi (~> 1.9) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) + thread_safe (0.3.6) + tzinfo (1.2.8) + thread_safe (~> 0.1) + tzinfo-data (1.2020.4) + tzinfo (>= 1.0.0) + unicode-display_width (1.7.0) + wdm (0.1.1) + +PLATFORMS + ruby + +DEPENDENCIES + jekyll (~> 4.0.0) + jekyll-archives + jekyll-feed (~> 0.12) + jekyll-menus + jekyll-paginate-v2 + jekyll-tagging + jekyll_picture_tag (~> 1.6) + tzinfo (~> 1.2) + tzinfo-data + wdm (~> 0.1.1) + +BUNDLED WITH + 2.1.4 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a5cbc37 --- /dev/null +++ b/LICENSE @@ -0,0 +1,678 @@ +© 2020 SharpeTronics.Com by Charles Sharpe +This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. + + +GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + + Preamble + +The GNU General Public License is a free, copyleft license for +software and other kinds of works. + +The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + +For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + +Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + +Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + +Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + +0. Definitions. + +"This License" refers to version 3 of the GNU General Public License. + +"Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + +"The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + +To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + +A "covered work" means either the unmodified Program or a work based +on the Program. + +To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + +An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +1. Source Code. + +The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + +A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + +The Corresponding Source for a work in source code form is that +same work. + +2. Basic Permissions. + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + +3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + +4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + +a) The work must carry prominent notices stating that you modified +it, and giving a relevant date. + +b) The work must carry prominent notices stating that it is +released under this License and any conditions added under section +7. This requirement modifies the requirement in section 4 to +"keep intact all notices". + +c) You must license the entire work, as a whole, under this +License to anyone who comes into possession of a copy. This +License will therefore apply, along with any applicable section 7 +additional terms, to the whole of the work, and all its parts, +regardless of how they are packaged. This License gives no +permission to license the work in any other way, but it does not +invalidate such permission if you have separately received it. + +d) If the work has interactive user interfaces, each must display +Appropriate Legal Notices; however, if the Program has interactive +interfaces that do not display Appropriate Legal Notices, your +work need not make them do so. + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + +a) Convey the object code in, or embodied in, a physical product +(including a physical distribution medium), accompanied by the +Corresponding Source fixed on a durable physical medium +customarily used for software interchange. + +b) Convey the object code in, or embodied in, a physical product +(including a physical distribution medium), accompanied by a +written offer, valid for at least three years and valid for as +long as you offer spare parts or customer support for that product +model, to give anyone who possesses the object code either (1) a +copy of the Corresponding Source for all the software in the +product that is covered by this License, on a durable physical +medium customarily used for software interchange, for a price no +more than your reasonable cost of physically performing this +conveying of source, or (2) access to copy the +Corresponding Source from a network server at no charge. + +c) Convey individual copies of the object code with a copy of the +written offer to provide the Corresponding Source. This +alternative is allowed only occasionally and noncommercially, and +only if you received the object code with such an offer, in accord +with subsection 6b. + +d) Convey the object code by offering access from a designated +place (gratis or for a charge), and offer equivalent access to the +Corresponding Source in the same way through the same place at no +further charge. You need not require recipients to copy the +Corresponding Source along with the object code. If the place to +copy the object code is a network server, the Corresponding Source +may be on a different server (operated by you or a third party) +that supports equivalent copying facilities, provided you maintain +clear directions next to the object code saying where to find the +Corresponding Source. Regardless of what server hosts the +Corresponding Source, you remain obligated to ensure that it is +available for as long as needed to satisfy these requirements. + +e) Convey the object code using peer-to-peer transmission, provided +you inform other peers where the object code and Corresponding +Source of the work are being offered to the general public at no +charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + +"Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +7. Additional Terms. + +"Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + +a) Disclaiming warranty or limiting liability differently from the +terms of sections 15 and 16 of this License; or + +b) Requiring preservation of specified reasonable legal notices or +author attributions in that material or in the Appropriate Legal +Notices displayed by works containing it; or + +c) Prohibiting misrepresentation of the origin of that material, or +requiring that modified versions of such material be marked in +reasonable ways as different from the original version; or + +d) Limiting the use for publicity purposes of names of licensors or +authors of the material; or + +e) Declining to grant rights under trademark law for use of some +trade names, trademarks, or service marks; or + +f) Requiring indemnification of licensors and authors of that +material by anyone who conveys the material (or modified versions of +it) with contractual assumptions of liability to the recipient, for +any liability that these contractual assumptions directly impose on +those licensors and authors. + +All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + +8. Termination. + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +11. Patents. + +A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + +A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + +13. Use with the GNU Affero General Public License. + +Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + +14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + +Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + +17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + +Copyright (C) + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) +This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. +This is free software, and you are welcome to redistribute it +under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + +You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + +The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md index 924eae8..badc97f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,60 @@ -# SharpeTronics -The web application for SharpeTronics homepage. -This application will be the core information portal for supporting both remote and local community. +# Summary +This web application is the core website for SharpeTronics.com. It is a live JAMstack (Jekyll, API's, Markup) example of the power of static websites with micro services that includes all the bells and whistles for comments, newsletter subscriptions, content management systems (CMS), site generators, blog posts, continuous delivery (CD), version management, ecommerce shopping, progressive web applications (PWA), and many more. + +Javascript frameworks create more complexity than needed, this example portrays minimal need for Javascript; therefore increasing security, reducing file size and complex work environments, increasing load times and reducing the learning curve for web developers, while keeping all the fun and speedy reactivity of the modern web architecture. We enable more focus on design and content; while enabling increased portability, automated testing, speed and security. + +No proprietary operating system dependencies required, only Docker Engine super machines and some tender love and care. The base stack is Docker Engine + SCSS ready! + +# Stack Architecture Features +* JAMstack (Jekyll, API's, Markup) +* Lightweight, Responsive & Fast! +* SCSS ready! +* Developer Friendly +* Docker super machines! +* Distributed CDN with automatic HTTPS +* Blog ready with collections and pagination +* Clean minimal design +* GitHub Pages ready (Free hosting) +* GitHub Actions for expanding Jekyll usability +* < Siteleaf CMS ready with user roles +* < Comments with administration +* < Ecommerce shopping +* < Newsletter subscriptions +* < Search functionality +* < Web workers for caching data for speedy progressive web application (PWA) + +# Jekyll Plugins +* Menus +* Tagging +* Feed +* Archives +* Picture Tagging +* Pagination v2 + +# API's +* Siteleaf CMS +* Staticman with GitHub +* Snipcart with Stripe +* Mailjet Newsletters +* Algolia Search + +All Ruby dependencies are created and stored in the Docker container. Simple, smooth and sweet :) + +# Requirements +* Install Docker Engine (Community) +* Install Docker-Compose +* Install Git +* Optional: If using Jekyll picture-tagging plugin, you will need to login to docker container and install the image-magick dependency; see docker-compose.yml file. + +## Clone, Build & Launch +1. In local directory for development, ```git clone https://github.com/SharpeTronics/folder-name-example/``` +2. ```cd folder-name-example`` +3. ```docker-compose up``` + +*Happy Hacking! :)* + +## Further Reading +* Docker Engine https://docs.docker.com/install/ +* Docker Compose https://docs.docker.com/compose/install/ +* Jekyll https://jekyllrb.com/ +* Git https://git-scm.com/book/en/v2/Getting-Started-Installing-Git diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..4170d61 --- /dev/null +++ b/_config.yml @@ -0,0 +1,153 @@ +# Welcome to Jekyll 4.0! +# +# This config file is meant for settings that affect your whole blog, values +# which you are expected to set up once and rarely edit after that. If you find +# yourself editing this file very often, consider using Jekyll's data files +# feature for the data you need to update frequently. +# +# For technical reasons, this file is *NOT* reloaded automatically when you use +# 'bundle exec jekyll serve'. If you change this file, please restart the server process. +# +# If you need help with YAML syntax, here are some quick references for you: +# https://learn-the-web.algonquindesign.ca/topics/markdown-yaml-cheat-sheet/#yaml +# https://learnxinyminutes.com/docs/yaml/ +# +# Site settings +# These are used to personalize your new site. If you look in the HTML files, +# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on. +# You can create any custom variable you would like, and they will be accessible +# in the templates via {{ site.myvariable }}. + +baseurl: "/" # the subpath of your site, e.g. /blog /galacticsociety.github.io +url: "https://sharpetronics.github.io" # the base hostname & protocol for your site, e.g. https://sharpetronics.github.io + +#Latent Semantic Indexing for similarity bewtween documents. +lsi: true +# Collection configurations +# These collections will enable to sort types of products and loop through that +# type to be displayed on a page. As an example, I have 10 "3D" items, all 10 items +# will be displayed when a category is selected on the product main index page. +collections_dir: collections + +collections: + products: + output: true + permalink: /products/:path/ + legal: + output: true + permalink: /legal/:path/ + +permalink: "/blog/:categories/:year/:month/:day/:title/" #Built in options include: date, pretty, ordinal, weekdate, none; learn more here: https://jekyllrb.com/docs/permalinks/ +#paginate: 7 +#paginate_path: "/journal/" + +# Responsive images conversion; requires imageMagik +# Test with convert --version SEE: docker-compose.yml for docker container setup. +# Currently not being used +picture: + source: "assets/images" + output: "assets/images/generated" + suppress_warnings: true + +# Build settings +plugins: + #- jekyll-feed #manually generated rss.xml https://jekyllrb.com/tutorials/convert-site-to-jekyll/#10-rss-feed + - jekyll-menus + - jekyll-archives + - jekyll-paginate-v2 + - jekyll/tagging + #- jekyll-picture-tag #currently not in use...see "picture settings above" + +sass: + style: compressed # possible values: nested expanded compact compressed + sass_dir: _scss + +############################################################ +# Site configuration for the Jekyll 3 Pagination Gem +# The values here represent the defaults if nothing is set +pagination: + + # Site-wide kill switch, disabled here it doesn't run at all + enabled: true + + # Set to 'true' to enable pagination debugging. This can be enabled in the site config or only for individual pagination pages + debug: true + + # The default document collection to paginate if nothing is specified ('posts' is default) + collection: 'posts' + + # How many objects per paginated page, used to be `paginate` (default: 0, means all) + per_page: 11 + + # The permalink structure for the paginated pages (this can be any level deep) + permalink: '/:num/' # Pages are index.html inside this folder (default) + #permalink: '/page/:num.html' # Pages are simple html files + #permalink: '/page/:num' # Pages are html files, linked jekyll extensionless permalink style. + + # Optional the title format for the paginated pages (supports :title for original page title, :num for pagination page number, :max for total number of pages) + title: ':title - page :num' + + # Limit how many pagenated pages to create (default: 0, means all) + limit: 0 + + # Optional, defines the field that the posts should be sorted on (omit to default to 'date') + sort_field: 'date' + + # Optional, sorts the posts in reverse order (omit to default decending or sort_reverse: true) + sort_reverse: true + + # Optional, the default category to use, omit or just leave this as 'posts' to get a backwards-compatible behavior (all posts) + category: 'posts' + + # Optional, the default tag to use, omit to disable + tag: '' + + # Optional, the default locale to use, omit to disable (depends on a field 'locale' to be specified in the posts, + # in reality this can be any value, suggested are the Microsoft locale-codes (e.g. en_US, en_GB) or simply the ISO-639 language code ) + locale: '' + + # Optional,omit or set both before and after to zero to disable. + # Controls how the pagination trail for the paginated pages look like. + trail: + before: 3 + after: 1 + + # Optional, the default file extension for generated pages (e.g html, json, xml). + # Internally this is set to html by default + extension: html + + # Optional, the default name of the index file for generated pages (e.g. 'index.html') + # Without file extension + indexpage: 'index' + +############################################################ + +# Exclude from processing. +# The following items will not be processed, by default. +# Any item listed under the `exclude:` key here will be automatically added to +# the internal "default list". +# +# Excluded items can be processed by explicitly listing the directories or +# their entries' file path in the `include:` list. + + exclude: +# - .sass-cache/ +# - .jekyll-cache/ +# - gemfiles/ +# - Gemfile +# - Gemfile.lock +# - node_modules/ +# - vendor/bundle/ +# - vendor/cache/ +# - vendor/gems/ +# - vendor/ruby/ + +# Reading extra files +# Every file or directory beginning with the following characters: ., _ , # or ~ +# in the source directory will not be included in the destination folder. Such +# paths will have to be explicitly specified via the config file in the include +# directive to make sure they’re copied over: +# + + include: +# - _pages diff --git a/_data/authors.yml b/_data/authors.yml new file mode 100644 index 0000000..854764d --- /dev/null +++ b/_data/authors.yml @@ -0,0 +1,26 @@ +#This data file contains all the author(s) information. It enables us to make a one stop shop change for INF amount of posts to be updated. +--- +Charles: + first_name: "Charles" + last_name: "Sharpe" + site: "https://www.csharpe.me" + avatar: "/uploads/authors/c-avatar.webp" #Size of avatar_image 36x36 + bio: "Independent Full-Stack Web Developer; curious about Astronomy, Information Technology, Privacy, Permaculture, Philosophy & Consciousness." + email: "charles.sharpee@gmail.com" + # Twitter nick for use in Twitter cards and follow button. + twitter: "csharpe_me" # if no twitter in this config, the twitter follow button will be removed + # GitHub nick for use in follow button in author block. + github: "csharpee" + social: + - title: "github" + url: "https://github.com/csharpee" + - title: "linkedin" + url: "https://www.linkedin.com/in/EXAMPLE" + - title: "youtube" + url: "https://www.youtube.com/channel/EXAMPLE" + - title: "facebook" + url: "https://www.facebook.com/EXAMPLE" + + +Dexter: +--- diff --git a/_data/global.yml b/_data/global.yml new file mode 100644 index 0000000..69c029a --- /dev/null +++ b/_data/global.yml @@ -0,0 +1,26 @@ +#This data file contains all the global site information. +--- +title: SharpeTronics +support_email: support@sharpetronics.com +sales_email: sales@sharpetronics.com +info_email: info@sharpetronics.com +creator: "Charles Sharpe" +creator_link: https://www.csharpe.me +logo: "/assets/images/st_logo125.svg" +motto: "We Do Technology." +keywords: >- # this means to ignore newlines + JAMstack, Web Design, Information Technology, Newsletter, 3D Printing, + Computer Technician, Hardware, Open Source, Stack Development, + Web Apps, Development +description: >- # this means to ignore newlines + Easing the content creators experience sharing information + through online information portals is our focus. + +location_town: "Charles Town" +location_state: "US_WV" +location_coords: "39.63;-79,96" + +terms_link: /legal/2020-02-03-terms-conditions/ +privacy_link: /legal/2020-02-03-privacy-policy/ +sitemap_link: /sitemap.xml +--- diff --git a/_data/menus.yml b/_data/menus.yml new file mode 100644 index 0000000..9ebe0c7 --- /dev/null +++ b/_data/menus.yml @@ -0,0 +1,13 @@ +#Documentation located here: https://github.com/forestryio/jekyll-menus +--- +header: + - url: / + title: Home + identifier: header + - url: /blog/ + title: Journal + identifier: header +# - url: /products/ +# title: Shop +# identifier: header +--- diff --git a/_data/payments.yml b/_data/payments.yml new file mode 100644 index 0000000..f85f6d4 --- /dev/null +++ b/_data/payments.yml @@ -0,0 +1,9 @@ +#This data file contains all the payment address information. +--- +paypal_acct: example +cashapp_acct: example +dwolla_acct: example +patreon: example +bitcoin: example +ethereum: example +--- diff --git a/_data/picture.yml b/_data/picture.yml new file mode 100644 index 0000000..3d23bb4 --- /dev/null +++ b/_data/picture.yml @@ -0,0 +1,10 @@ +#Documentation located here: https://rbuchberger.github.io/jekyll_picture_tag/ +--- +presets: + default: + formats: [webp, original] + format_quality: + jpg: 99 + png: 99 + webp: 99 +--- diff --git a/_data/products.yml b/_data/products.yml new file mode 100644 index 0000000..6bbd371 --- /dev/null +++ b/_data/products.yml @@ -0,0 +1,166 @@ +#Product list for all items for SharpeTronics +global-product: + tax: 6% + shipping: $5.00 + delivery: 3-5 days + warranty: 30 days money back + +product-ten: + title: Peppermint Lip Balm + image: assets/images/Peppermint-Lip-Balm.jpg + description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too! + excerpt: Our BEST SELLING lip balm - you'll love it! + category: Lip Balm + tag: Health + id: 201806 + sku: 2020 + quantity: 14 + price: $5.00 + weight: Peppermint + format: Physical + material: Wood, Steel + dimension: 15in x 35in + +product-one: + title: Peppermint Lip Balm + image: assets/images/Peppermint-Lip-Balm.jpg + description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too! + excerpt: Our BEST SELLING lip balm - you'll love it! + category: Lip Balm + tag: Health + id: 201806 + sku: 2020 + quantity: 14 + price: $5.00 + weight: Peppermint + format: Physical + material: Wood, Steel + dimension: 15in x 35in + +product-nine: + title: Peppermint Lip Balm + image: assets/images/Peppermint-Lip-Balm.jpg + description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too! + excerpt: Our BEST SELLING lip balm - you'll love it! + category: Lip Balm + tag: Health + id: 201806 + sku: 2020 + quantity: 14 + price: $5.00 + weight: Peppermint + format: Physical + material: Wood, Steel + dimension: 15in x 35in + +product-two: + title: Peppermint Lip Balm + image: assets/images/Peppermint-Lip-Balm.jpg + description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too! + excerpt: Our BEST SELLING lip balm - you'll love it! + category: Lip Balm + tag: Health + id: 201806 + sku: 2020 + quantity: 14 + price: $5.00 + weight: Peppermint + format: Physical + material: Wood, Steel + dimension: 15in x 35in + +product-three: + title: Peppermint Lip Balm + image: assets/images/Peppermint-Lip-Balm.jpg + description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too! + excerpt: Our BEST SELLING lip balm - you'll love it! + category: Lip Balm + tag: Health + id: 201806 + sku: 2020 + quantity: 14 + price: $5.00 + weight: Peppermint + format: Physical + material: Wood, Steel + dimension: 15in x 35in + +product-four: + title: Peppermint Lip Balm + image: assets/images/Peppermint-Lip-Balm.jpg + description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too! + excerpt: Our BEST SELLING lip balm - you'll love it! + category: Lip Balm + tag: Health + id: 201806 + sku: 2020 + quantity: 14 + price: $5.00 + weight: Peppermint + format: Physical + material: Wood, Steel + dimension: 15in x 35in + +product-five: + title: Peppermint Lip Balm + image: assets/images/Peppermint-Lip-Balm.jpg + description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too! + excerpt: Our BEST SELLING lip balm - you'll love it! + category: Lip Balm + tag: Health + id: 201806 + sku: 2020 + quantity: 14 + price: $5.00 + weight: Peppermint + format: Physical + material: Wood, Steel + dimension: 15in x 35in + +product-six: + title: Peppermint Lip Balm + image: assets/images/Peppermint-Lip-Balm.jpg + description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too! + excerpt: Our BEST SELLING lip balm - you'll love it! + category: Lip Balm + tag: Health + id: 201806 + sku: 2020 + quantity: 14 + price: $5.00 + weight: Peppermint + format: Physical + material: Wood, Steel + dimension: 15in x 35in + +product-seven: + title: Peppermint Lip Balm + image: assets/images/Peppermint-Lip-Balm.jpg + description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too! + excerpt: Our BEST SELLING lip balm - you'll love it! + category: Lip Balm + tag: Health + id: 201806 + sku: 2020 + quantity: 14 + price: $5.00 + weight: Peppermint + format: Physical + material: Wood, Steel + dimension: 15in x 35in + +product-eight: + title: Peppermint Lip Balm + image: assets/images/Peppermint-Lip-Balm.jpg + description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too! + excerpt: Our BEST SELLING lip balm - you'll love it! + category: Lip Balm + tag: Health + id: 201806 + sku: 2020 + quantity: 14 + price: $5.00 + weight: Peppermint + format: Physical + material: Wood, Steel + dimension: 15in x 35in diff --git a/_data/social.yml b/_data/social.yml new file mode 100644 index 0000000..065b555 --- /dev/null +++ b/_data/social.yml @@ -0,0 +1,16 @@ +#This data file contains all the social media information. +--- +twitter_user: sharpetronics +twitter_link: https://twitter.com/SharpeTronics +twitter_desc: "This is a description" + +github_user: sharpetronics +github_link: https://github.com/SharpeTronics + +facebook_user: example +facebook_link: https://facebook.com/SharpeTronics +facebook_admin_user: example + +rss_link: /feed.xml/ + +--- diff --git a/_includes/author_card.html b/_includes/author_card.html new file mode 100644 index 0000000..0ee8bdd --- /dev/null +++ b/_includes/author_card.html @@ -0,0 +1,8 @@ +{% comment %} + The author metadata for both posts and post single pages. +{% endcomment %} + +
+ +
{{ author.first_name }} {{ author.last_name }}{{ author.first_name }}
+
diff --git a/_includes/banner.html b/_includes/banner.html new file mode 100644 index 0000000..1b691ca --- /dev/null +++ b/_includes/banner.html @@ -0,0 +1,12 @@ + + diff --git a/_includes/footer.html b/_includes/footer.html new file mode 100644 index 0000000..0da6ca9 --- /dev/null +++ b/_includes/footer.html @@ -0,0 +1,22 @@ + + diff --git a/_includes/head.html b/_includes/head.html new file mode 100644 index 0000000..cccaa8e --- /dev/null +++ b/_includes/head.html @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {%- feed_meta -%} + + + {{ site.data.global.title }} | {{ page.title }} + + + + + + + + + diff --git a/_includes/header.html b/_includes/header.html new file mode 100644 index 0000000..a557017 --- /dev/null +++ b/_includes/header.html @@ -0,0 +1,5 @@ + + diff --git a/_includes/navigation.html b/_includes/navigation.html new file mode 100644 index 0000000..7c8ecb8 --- /dev/null +++ b/_includes/navigation.html @@ -0,0 +1,12 @@ + + diff --git a/_includes/pagination.html b/_includes/pagination.html new file mode 100644 index 0000000..fe3f000 --- /dev/null +++ b/_includes/pagination.html @@ -0,0 +1,30 @@ + +
    + {% if paginator.previous_page %} +
  • + {% else %} +
  • + {% endif %} + +
    + + {% if paginator.page_trail %} + {% for trail in paginator.page_trail %} +
  • + {{ trail.num }} +
  • + {% endfor %} + {% endif %} +
    + + {% if paginator.next_page %} +
  • + {% else %} +
  • + {% endif %} +
+ + + + Page: {{ paginator.page }} of {{ paginator.total_pages }} + diff --git a/_includes/product_cat.html b/_includes/product_cat.html new file mode 100644 index 0000000..e4b66fc --- /dev/null +++ b/_includes/product_cat.html @@ -0,0 +1,11 @@ +
+
+ +
+
diff --git a/_includes/product_featured.html b/_includes/product_featured.html new file mode 100644 index 0000000..57bd2e8 --- /dev/null +++ b/_includes/product_featured.html @@ -0,0 +1,11 @@ + +
+ +
diff --git a/_includes/product_headline.html b/_includes/product_headline.html new file mode 100644 index 0000000..f2138f2 --- /dev/null +++ b/_includes/product_headline.html @@ -0,0 +1,22 @@ + + diff --git a/_includes/product_hero.html b/_includes/product_hero.html new file mode 100644 index 0000000..e69de29 diff --git a/_includes/product_related.html b/_includes/product_related.html new file mode 100644 index 0000000..732ff48 --- /dev/null +++ b/_includes/product_related.html @@ -0,0 +1,12 @@ +{%- for post in related_posts -%} +
+ +
+{% endfor %} diff --git a/_includes/product_rest.html b/_includes/product_rest.html new file mode 100644 index 0000000..2f02b62 --- /dev/null +++ b/_includes/product_rest.html @@ -0,0 +1,11 @@ + +
+ +
diff --git a/_includes/sections.html b/_includes/sections.html new file mode 100644 index 0000000..c80f881 --- /dev/null +++ b/_includes/sections.html @@ -0,0 +1,164 @@ + +
+ +
+
+
+

JAMstack Architecture

+

Welcome to the Future of Web Development

+
+
+
+ Web Architecture and Design +

Design

+

Your website will be unique & visually stunning – it will be fully responsive, mobile friendly, search engine optimized & accessible.

+
+
+ Web Programming and Coding +

Develop

+

Your webstack architecture will be powerful, fast & built with the future in mind. We provide a seamless developer experience & content driven focus.

+
+
+
+
+ +
+ + +
+
+
+

Why JAMstack?

+

Faster, Straightforward and a more Secure Architecture

+
+
+
+ +

Performance

+

Super fast loading times for Search Engine Optimization (SEO) and the viewers pleasure. + Higher rankings on Search Engine Results Page (SERP). Less talk, more bang for your buck.

+
+
+ +

Scalable

+

Less complexity means easier scalability and more money saved. Ease of use for administrators, developers and editors. The future is highly distributed.

+
+
+ +

Rock Solid Security

+

Our information stack is static with higher standards of security. Client-server topology systems like SQL/PHP based Joomla or + Wordpress enables a larger area of attack through SQL injections and other known vulnerabilities.

+
+
+ +

Auto Backups

+

We make use of continuous delivery (CD) systems, including auto deployment too production for version management. + If your website breaks, we run a one liner command to deploy the most recent working version.

+
+
+ +

Easy Maintenance

+

Hassle-free maintenance with focus on content creation; + saving time for your community and business.

+
+
+ +

Portability

+

No more infrastructure lock-in. You may host your pre-generated website with a wide array of hosting services. Easy pack up and unwrap for any hosting solution.

+
+
+
+
+ + +
+ +
+
+
+

Technical Support

+

Solutions to your Technological Needs

+
+
+
+ Computer Hardware +

Hardware

+

We build custom computers & do hardware repairs. Installing or upgrading components like a network card, motherboard, cabling, computer processing + unit (CPU), printers and graphical processing unit (GPU).

+
+
+ Computer Software Linux +

Software

+

We work with Linux and Windows operating systems. A variety of common software issues we work on are: PC tune-ups, virus or trojans, system errors or blue screen, diagnostics and troubleshooting. + We are available both remotely and locally. If we are unable to fix it, you will not be charged.

+
+
+
+
+ +
+ + +
+
+
+

Why Choose Us?

+

Service To Others

+
+
+
+ +

Innovative

+

Information Technology (IT) is always evolving and so do we. We pride ourselves in being modern, creative and malleable.

+
+
+ +

Professional

+

Reliability and organization are an integral quality. We are proud to be of service.

+
+
+ +

Excellence

+

We strive for excellence in all we do. Satisfaction of your needs comes first and the quality of our work exceeds expectations.

+
+
+ +

Friendly

+

We are homegrown mountaineers that have a passion for technology. We are patient, professional and reliable.

+
+
+
+
+ + +
+ +
+
+
+
+

Join The Movement

+
+

Join our occasional newsletter for product launches, availability, job openings, and news. + We provide value to communities and businesses in a friendly super awesome way.

+
+
+ + + + +
    + +
+
+
+
+
+ + +
+
+

A West Virginian Based Company

+

Montani Semper Liberi

+
+
diff --git a/_layouts/archive.html b/_layouts/archive.html new file mode 100644 index 0000000..21e7711 --- /dev/null +++ b/_layouts/archive.html @@ -0,0 +1,19 @@ +--- +layout: generic +--- +{% comment %} + This layout is used by the jekyll-archives plugin to generate + archive pages for all posts +{% endcomment %} + + +

Archive of posts from {{ page.date | date: "%Y" }}

+ +
    +{% for post in page.posts %} +
  • + {{ post.title }} + +
  • +{% endfor %} +
diff --git a/_layouts/default.html b/_layouts/default.html new file mode 100644 index 0000000..e3e8f9c --- /dev/null +++ b/_layouts/default.html @@ -0,0 +1,46 @@ +--- + +--- +{% comment %} + The default layout for the site, which is extended by all other layouts. +{% endcomment %} + + + + +{% include head.html %} + +{% if page.title == "Home" %} + +{% else %} + +{% endif %} +
+ +{% include header.html %} +{% include navigation.html %} + +
+ {% comment %} + Any layout that extends this layout will have its contents + added as the content variable + {% endcomment %} + + {{ content }} +
+ + + + + + + + + + + +
+{% include footer.html %} + + + diff --git a/_layouts/journal_single.html b/_layouts/journal_single.html new file mode 100644 index 0000000..574f536 --- /dev/null +++ b/_layouts/journal_single.html @@ -0,0 +1,42 @@ +--- +layout: default +pagination: + enabled: false +--- +{% comment %} + This layout is the single page of a blog post. +{% endcomment %} + +
+
+ +
+
+
< Go Back
+
+
+ + +
+
{{ page.banner_image_alt }}
+

{{ page.title }}

+

{{ page.sub_heading }}

+
+ +
+ {{ content }} + {% assign author = site.data.authors[page.author] %} + {%- include author_card.html -%} + + + +
+ +
+
diff --git a/_layouts/journals.html b/_layouts/journals.html new file mode 100644 index 0000000..baf5e5a --- /dev/null +++ b/_layouts/journals.html @@ -0,0 +1,43 @@ +--- +layout: post +--- +{% comment %} + This layout is the posts index (a collection of all blog posts). +{% endcomment %} + + +
+

{{ page.title }}

+

{{ page.sub_title }}

+
+ + +
+ + {% for post in paginator.posts %} + +
+
+ {{ post.title }} + +
+

{{ post.title }}

+

{{ post.sub_heading }}

+
+ {% assign author = site.data.authors[post.author] %} + {%- include author_card.html -%} +
+

{{ post.content | strip_html | truncatewords: 50 }}

+ +
+ {% endfor %} +
diff --git a/_layouts/landing.html b/_layouts/landing.html new file mode 100644 index 0000000..16d2573 --- /dev/null +++ b/_layouts/landing.html @@ -0,0 +1,11 @@ +--- +layout: default +--- +{% comment %} + This layout is the homepage layout. +{% endcomment %} + + +{%- include banner.html -%} + +{%- include sections.html -%} diff --git a/_layouts/page.html b/_layouts/page.html new file mode 100644 index 0000000..989d646 --- /dev/null +++ b/_layouts/page.html @@ -0,0 +1,20 @@ +--- +layout: default +--- +{% comment %} + This layout is a page without pagination. +{% endcomment %} + + +
+
+ + +
+ + {{ content }} + +
+ +
+
diff --git a/_layouts/post.html b/_layouts/post.html new file mode 100644 index 0000000..ad8ae0e --- /dev/null +++ b/_layouts/post.html @@ -0,0 +1,16 @@ +--- +layout: default +--- +{% comment %} + This layout is a post with pagination. +{% endcomment %} + + +
+
+ + + {{ content }} + +
+
diff --git a/_layouts/shop.html b/_layouts/shop.html new file mode 100644 index 0000000..f77c7cf --- /dev/null +++ b/_layouts/shop.html @@ -0,0 +1,49 @@ +--- +layout: post +--- +{%- comment -%} + This layout is the shop index of products with pagination & collections. +{%- endcomment -%} + + +
+
+ +
+
+ +
+

{{ page.title }}

+

{{ page.sub_title }}

+
+ + + + +
+ +{%- include product_headline.html -%} + + +
+ {%- assign featured_posts = paginator.posts | slice: 1, 4 -%} + {%- for post in featured_posts -%} + {%- include product_featured.html -%} + {%- endfor -%} +
+ + +
+{%- assign rest = paginator.posts | slice: 5, 11 -%} +{%- for post in rest -%} + {%- include product_rest.html -%} +{%- endfor -%} +
+ + +{% include pagination.html %} +
diff --git a/_layouts/shop_single.html b/_layouts/shop_single.html new file mode 100644 index 0000000..73e65b0 --- /dev/null +++ b/_layouts/shop_single.html @@ -0,0 +1,81 @@ +--- +layout: default +pagination: + enabled: false +--- +{% comment %} + This layout is the single page of a product post. +{% endcomment %} + +
+
+ + +
+
+
< Go Back
+
+
+ +
+
+ +
+

{{ page.title }}

+

{{ page.sub_heading }}

+
+ +
+
+ +
+
+ {{ page.title }} +
+
+ +
+
+
    +
  • Price:
  • +
  • Weight:
  • +
  • Stock:
  • +
  • Sku:
  • +
  • Format:
  • +
  • Material:
  • +
  • Reviews:
  • +
+ + Add To Cart +
+
+
+ + +
+
+

Product Description

+
+
+ {{ content }} + {% assign author = site.data.authors[page.author] %} + {%- include author_card.html -%} +
+
+ + + +
+ +
+
diff --git a/_plugins/ext.rb b/_plugins/ext.rb new file mode 100644 index 0000000..9e579a5 --- /dev/null +++ b/_plugins/ext.rb @@ -0,0 +1,6 @@ +# _plugins/ext.rb allows you to define custom plugins and/or require +# plugins that otherwise wouldn't work with Jekyll + +# Activate jekyll-tagging +# https://github.com/pattex/jekyll-tagging +require 'jekyll/tagging' \ No newline at end of file diff --git a/_scss/base/_page.scss b/_scss/base/_page.scss new file mode 100644 index 0000000..88eb7c9 --- /dev/null +++ b/_scss/base/_page.scss @@ -0,0 +1,55 @@ +/* Basic */ + + // MSIE: Required for IEMobile. + @-ms-viewport { + width: device-width; + } + + // MSIE: Prevents scrollbar from overlapping content. + body { + -ms-overflow-style: scrollbar; + } + + // Ensures page width is always >=320px. + @include breakpoint('<=xsmall') { + html, body { + min-width: 320px; + } + } + + // Set box model to border-box. + // Based on css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice + html { + box-sizing: border-box; + } + + *, *:before, *:after { + box-sizing: inherit; + } + + body { + background-attachment: scroll, fixed; + background-image: url('images/angular-lines-up.svg'), url('/assets/images/bg.webp'); + background-position: center -315px, center top; + background-repeat: no-repeat; + background-size: auto, auto; + + &.landing { + background-attachment: scroll, fixed; + background-image: url('images/angular-lines-up.svg'), url('/assets/images/bg.webp'); + background-position: center top, center top; + background-size: auto, auto; + } + + // Stops initial animations until page loads. + &.is-preload { + *, *:before, *:after { + @include vendor('animation', 'none !important'); + @include vendor('transition', 'none !important'); + } + } + + @include breakpoint('<=large') { + background-attachment: scroll !important; + } + } diff --git a/_scss/base/_reset.scss b/_scss/base/_reset.scss new file mode 100644 index 0000000..42dcf73 --- /dev/null +++ b/_scss/base/_reset.scss @@ -0,0 +1,70 @@ +// Reset. +// Based on meyerweb.com/eric/tools/css/reset (v2.0 | 20110126 | License: public domain) + + html, body, div, span, applet, object, + iframe, h1, h2, h3, h4, h5, h6, p, blockquote, + pre, a, abbr, acronym, address, big, cite, + code, del, dfn, em, img, ins, kbd, q, s, samp, + small, strike, strong, sub, sup, tt, var, b, + u, i, center, dl, dt, dd, ol, ul, li, fieldset, + form, label, legend, table, caption, tbody, + tfoot, thead, tr, th, td, article, aside, + canvas, details, embed, figure, figcaption, + footer, header, hgroup, menu, nav, output, ruby, + section, summary, time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; + } + + article, aside, details, figcaption, figure, + footer, header, hgroup, menu, nav, section { + display: block; + } + + body { + line-height: 1; + } + + ol, ul { + list-style: none; + } + + blockquote, q { + quotes: none; + + &:before, + &:after { + content: ''; + content: none; + } + } + + table { + border-collapse: collapse; + border-spacing: 0; + } + + body { + -webkit-text-size-adjust: none; + } + + mark { + background-color: transparent; + color: inherit; + } + + input::-moz-focus-inner { + border: 0; + padding: 0; + } + + input, select, textarea { + -moz-appearance: none; + -webkit-appearance: none; + -ms-appearance: none; + appearance: none; + } diff --git a/_scss/base/_typography.scss b/_scss/base/_typography.scss new file mode 100644 index 0000000..48e4100 --- /dev/null +++ b/_scss/base/_typography.scss @@ -0,0 +1,193 @@ +/* Type */ + + body { + background-color: _palette(bg); + color: _palette(fg); + } + + body, input, select, textarea { + font-family: _font(family); + font-size: 14.75pt; + font-weight: _font(weight); + line-height: 1.82; + + @include breakpoint('<=xlarge') { + font-size: 14.75pt; + } + + @include breakpoint('<=large') { + font-size: 12pt; + } + + @include breakpoint('<=medium') { + font-size: 12pt; + } + + @include breakpoint('<=small') { + font-size: 12pt; + } + + @include breakpoint('<=xsmall') { + font-size: 12pt; + } + } + + a { + text-decoration: underline; + + &:hover { + text-decoration: none; + } + } + + strong, b { + font-weight: _font(weight-bold); + } + + em, i { + font-style: italic; + } + + p { + margin: 0 0 _size(element-margin) 0; + } + + h1, h2, h3, h4, h5, h6 { + font-weight: _font(weight-bolder); + letter-spacing: 0.2em; + line-height: 1.5; + margin: 0 0 (_size(element-margin) * 0.4) 0; + text-transform: uppercase; + + a { + color: inherit; + text-decoration: none; + } + } + h1 { + font-size: 2.1em; + } + + h2 { + font-size: 1.8em; + } + + h3 { + font-size: 1.5em; + } + + h4 { + font-size: 1.1em; + } + + h5 { + font-size: 0.9em; + } + + h6 { + font-size: 0.7em; + } + + sub { + font-size: 0.8em; + position: relative; + top: 0.5em; + } + + sup { + font-size: 0.8em; + position: relative; + top: -0.5em; + } + + blockquote { + border-left: solid (_size(border-width) * 4); + font-style: italic; + margin: 0 0 _size(element-margin) 0; + padding: (_size(element-margin) / 4) 0 (_size(element-margin) / 4) _size(element-margin); + } + + code { + border-radius: _size(border-radius); + border: solid _size(border-width); + font-family: _font(family-fixed); + font-size: 0.9em; + margin: 0 0.25em; + padding: 0.25em 0.65em; + } + + pre { + -webkit-overflow-scrolling: touch; + font-family: _font(family-fixed); + font-size: 0.9em; + margin: 0 0 _size(element-margin) 0; + + code { + display: block; + line-height: 1.75; + padding: 1em 1.5em; + overflow-x: auto; + } + } + + hr { + border: 0; + border-bottom: solid _size(border-width); + margin: _size(element-margin) 0; + + &.major { + margin: (_size(element-margin) * 1.5) 0; + } + } + + .align-left { + text-align: left; + } + + .align-center { + text-align: center; + } + + .align-right { + text-align: right; + } + + @mixin color-typography($p: null) { + $highlight: _palette($p, highlight); + + @if $p != null { + background-color: _palette($p, bg); + color: _palette($p, fg); + } + + input, select, textarea { + color: _palette($p, fg-bold); + } + + a { + color: _palette($highlight, bg); + } + + strong, b { + color: _palette($p, fg-bold); + } + + h1, h2, h3, h4, h5, h6 { + color: _palette($p, fg-bold); + } + + blockquote { + border-left-color: _palette($p, border); + } + + code { + background: _palette($p, border-bg); + border-color: _palette($p, border); + } + + hr { + border-bottom-color: _palette($p, border); + } + } + + @include color-typography; diff --git a/_scss/components/_actions.scss b/_scss/components/_actions.scss new file mode 100644 index 0000000..5598612 --- /dev/null +++ b/_scss/components/_actions.scss @@ -0,0 +1,95 @@ +/* Actions */ + + ul.actions { + @include vendor('display', 'flex'); + cursor: default; + list-style: none; + margin-left: (_size(element-margin) * -0.5); + padding-left: 0; + + li { + padding: 0 0 0 (_size(element-margin) * 0.5); + vertical-align: middle; + } + + &.special { + @include vendor('justify-content', 'center'); + width: 100%; + margin-left: 0; + + li { + &:first-child { + padding-left: 0; + } + } + } + + &.stacked { + @include vendor('flex-direction', 'column'); + margin-left: 0; + + li { + padding: (_size(element-margin) * 0.65) 0 0 0; + + &:first-child { + padding-top: 0; + } + } + } + + &.fit { + width: calc(100% + #{_size(element-margin) * 0.5}); + + li { + @include vendor('flex-grow', '1'); + @include vendor('flex-shrink', '1'); + width: 100%; + + > * { + width: 100%; + } + } + + &.stacked { + width: 100%; + } + } + + @include breakpoint('<=xsmall') { + &:not(.fixed) { + @include vendor('flex-direction', 'column'); + margin-left: 0; + width: 100% !important; + + li { + @include vendor('flex-grow', '1'); + @include vendor('flex-shrink', '1'); + padding: (_size(element-margin) * 0.5) 0 0 0; + text-align: center; + width: 100%; + + > * { + width: 100%; + } + + &:first-child { + padding-top: 0; + } + + input[type="submit"], + input[type="reset"], + input[type="button"], + button, + .button { + width: 100%; + + &.icon { + &:before { + margin-left: -0.5em; + } + } + } + } + } + } + } diff --git a/_scss/components/_alt-icons.scss b/_scss/components/_alt-icons.scss new file mode 100644 index 0000000..d60216b --- /dev/null +++ b/_scss/components/_alt-icons.scss @@ -0,0 +1,59 @@ +/* Alt Icons */ + + ul.alt-icons { + @include vendor('display', 'inline-flex'); + border-radius: _size(border-radius); + border: solid _size(border-width); + list-style-type: none; + padding-left: 0; + + > li { + border-left: solid _size(border-width); + height: 2.5em; + line-height: 2.5em; + padding: 0; + width: 2.6em; + + &:first-child { + border-left: 0; + } + } + + .icon { + display: block; + height: 100%; + width: 100%; + transition: color _duration(transition), background-color _duration(transition); + + &:before { + font-size: 1.1em; + line-height: inherit; + } + } + } + + @mixin color-alt-icons($p: null) { + ul.alt-icons { + border-color: _palette($p, border); + + li { + border-left-color: _palette($p, border); + } + + .icon { + color: _palette($p, fg-light); + + &:hover { + background-color: _palette($p, border-bg); + color: _palette($p, fg); + } + + &:active { + background-color: _palette($p, border2-bg); + color: _palette($p, fg); + } + } + } + } + + @include color-alt-icons; diff --git a/_scss/components/_box.scss b/_scss/components/_box.scss new file mode 100644 index 0000000..7c734d8 --- /dev/null +++ b/_scss/components/_box.scss @@ -0,0 +1,28 @@ +/* Box */ + + .box { + border-radius: _size(border-radius); + border: solid _size(border-width); + margin-bottom: _size(element-margin); + padding: 1.5em; + + > :last-child, + > :last-child > :last-child, + > :last-child > :last-child > :last-child { + margin-bottom: 0; + } + + &.alt { + border: 0; + border-radius: 0; + padding: 0; + } + } + + @mixin color-box($p: null) { + .box { + border-color: _palette($p, border); + } + } + + @include color-box; diff --git a/_scss/components/_button.scss b/_scss/components/_button.scss new file mode 100644 index 0000000..b418026 --- /dev/null +++ b/_scss/components/_button.scss @@ -0,0 +1,102 @@ +/* Button */ + + input[type="submit"], + input[type="reset"], + input[type="button"], + button, + .button { + @include vendor('appearance', 'none'); + @include vendor('transition', 'background-color #{_duration(transition)} ease-in-out, color #{_duration(transition)} ease-in-out'); + border-radius: _size(border-radius); + border: solid _size(border-width); + cursor: pointer; + display: inline-block; + font-size: 0.75em; + font-weight: _font(weight-bold); + height: 3.7em; + letter-spacing: 0.13em; + line-height: 3.6em; + padding: 0 2.9em; + text-align: center; + text-decoration: none; + text-transform: uppercase; + white-space: nowrap; + + &.icon { + border-bottom: solid _size(border-width); + + &:before { + margin-right: 0.5em; + } + } + + &.fit { + width: 100%; + } + + &.small { + font-size: 0.6em; + } + + &.large { + font-size: 1.35em; + height: 3em; + line-height: 2.9em; + } + + &.disabled, + &:disabled { + @include vendor('pointer-events', 'none'); + opacity: 0.25; + } + + @include breakpoint('<=xsmall') { + padding: 0; + } + } + + @mixin color-button($p: null) { + $highlight: _palette($p, highlight); + + input[type="submit"], + input[type="reset"], + input[type="button"], + button, + .button { + background-color: transparent; + border-color: _palette($p, border); + color: _palette($p, fg-bold) !important; + + &:hover { + background-color: _palette($p, border-bg); + } + + &:active { + background-color: _palette($p, border2-bg); + } + + &.icon { + border-bottom-color: _palette($p, border); + + &:before { + color: _palette($p, fg-light); + } + } + + &.primary { + background-color: _palette($p, fg); + border-color: transparent; + color: _palette($p, bg) !important; + + &:hover { + background-color: lighten(_palette($p, fg), 7.5); + } + + &:active { + background-color: darken(_palette($p, fg), 7.5); + } + } + } + } + + @include color-button; diff --git a/_scss/components/_features.scss b/_scss/components/_features.scss new file mode 100644 index 0000000..2ec1ad6 --- /dev/null +++ b/_scss/components/_features.scss @@ -0,0 +1,63 @@ +/* Features */ + + .features { + @include vendor('display', 'flex'); + @include vendor('flex-wrap', 'wrap'); + border-bottom: solid _size(border-width); + margin-bottom: (_size(element-margin)); + + > section { + @include padding(4.5em, 3em); + border-top: solid _size(border-width); + width: 50%; + + .icon { + font-size: 2.5em; + margin-bottom: _size(element-margin); + } + + h3 { + margin-bottom: (_size(element-margin) * 0.35); + } + + &:nth-child(even) { + border-left-style: solid; + border-left-width: _size(border-width); + } + } + + @include breakpoint('<=medium') { + > section { + @include padding(3em, 2em); + } + } + + @include breakpoint('<=small') { + > section { + @include padding(2em, 2em); + } + } + + @include breakpoint('<=xsmall') { + > section { + @include padding(2em, 1.5em); + width: 100%; + + &:nth-child(even) { + border-left: 0; + } + } + } + } + + @mixin color-features($p: null) { + .features { + border-color: _palette($p, border-bg); + + > section { + border-color: _palette($p, border-bg); + } + } + } + + @include color-features; diff --git a/_scss/components/_form.scss b/_scss/components/_form.scss new file mode 100644 index 0000000..17f83ff --- /dev/null +++ b/_scss/components/_form.scss @@ -0,0 +1,222 @@ +/* Form */ + + form { + margin: 0 0 _size(element-margin) 0; + } + + label { + display: block; + font-size: 0.8em; + font-weight: _font(weight-bold); + font-weight: _font(weight-bold); + letter-spacing: 0.2em; + margin: 0 0 1em 0; + text-transform: uppercase; + } + + input[type="text"], + input[type="password"], + input[type="email"], + select, + textarea { + @include vendor('appearance', 'none'); + border-radius: _size(border-radius); + border: none; + border: solid _size(border-width); + color: inherit; + display: block; + margin-bottom: (_size(element-margin) * 0.7); + outline: 0; + padding: 0 1em; + text-decoration: none; + transition: border-color _duration(transition); + width: 100%; + + &:invalid { + box-shadow: none; + } + } + + select { + background-size: 1.25rem; + background-repeat: no-repeat; + background-position: calc(100% - 1rem) center; + height: _size(element-height); + padding-right: _size(element-height); + text-overflow: ellipsis; + + &:focus { + &::-ms-value { + background-color: transparent; + } + } + + &::-ms-expand { + display: none; + } + } + + input[type="text"], + input[type="password"], + input[type="email"], + select { + height: _size(element-height); + } + + textarea { + padding: 0.75em 1em; + } + + input[type="checkbox"], + input[type="radio"], { + @include vendor('appearance', 'none'); + display: block; + float: left; + margin-right: -2em; + opacity: 0; + width: 1em; + z-index: -1; + + & + label { + @include icon(false, solid); + cursor: pointer; + display: inline-block; + font-weight: _font(weight); + margin-bottom: (_size(element-margin) * 0.9); + padding-left: (_size(element-height) * 0.6) + 0.75em; + padding-right: 0.75em; + position: relative; + + &:before { + border-radius: _size(border-radius); + border: solid _size(border-width); + content: ''; + display: inline-block; + font-size: 0.8em; + height: (_size(element-height) * 0.75); + left: 0; + line-height: (_size(element-height) * 0.75); + padding-left: 3px; + position: absolute; + text-align: center; + top: 2px; + width: (_size(element-height) * 0.75); + } + } + + &:checked + label { + &:before { + content: '\f00c'; + } + } + } + + input[type="checkbox"] { + & + label { + &:before { + border-radius: _size(border-radius); + } + } + } + + input[type="radio"] { + & + label { + &:before { + border-radius: 100%; + } + } + } + + ::-webkit-input-placeholder { + opacity: 1.0; + } + + :-moz-placeholder { + opacity: 1.0; + } + + ::-moz-placeholder { + opacity: 1.0; + } + + :-ms-input-placeholder { + opacity: 1.0; + } + + @mixin color-form($p: null) { + $highlight: _palette($p, highlight); + + label { + color: _palette($p, fg-bold); + } + + input[type="text"], + input[type="password"], + input[type="email"], + select, + textarea { + background-color: _palette($p, border-bg); + border-color: _palette($p, border); + + &:focus { + border-color: _palette($p, fg-bold); + } + } + + select { + background-image: svg-url(""); + + option { + color: _palette($p, fg-bold); + background: _palette($p, bg); + } + } + + input[type="checkbox"], + input[type="radio"], { + & + label { + color: _palette($p, fg); + + &:before { + background: _palette($p, border-bg); + border-color: _palette($p, border); + } + } + + &:checked + label { + &:before { + background-color: _palette($p, fg); + border-color: _palette($p, fg); + color: _palette($p, bg); + } + } + + &:focus + label { + &:before { + border-color: _palette($p, fg-bold); + } + } + } + + ::-webkit-input-placeholder { + color: _palette($p, fg-light) !important; + } + + :-moz-placeholder { + color: _palette($p, fg-light) !important; + } + + ::-moz-placeholder { + color: _palette($p, fg-light) !important; + } + + :-ms-input-placeholder { + color: _palette($p, fg-light) !important; + } + + .formerize-placeholder { + color: _palette($p, fg-light) !important; + } + } + + @include color-form; diff --git a/_scss/components/_icon.scss b/_scss/components/_icon.scss new file mode 100644 index 0000000..983947c --- /dev/null +++ b/_scss/components/_icon.scss @@ -0,0 +1,39 @@ +/* Icon */ + + .icon { + @include icon; + border-bottom: none; + position: relative; + + > .label { + display: none; + } + + &.solid { + &:before { + font-weight: 900; + } + } + + &.brands { + &:before { + font-family: 'Font Awesome 5 Brands'; + } + } + + &.style1 { + color: _palette(accent1, fg-light); + } + + &.style2 { + color: _palette(accent2, fg-light); + } + + &.style3 { + color: _palette(accent3, fg-light); + } + + &.style4 { + color: _palette(accent4, fg-light); + } + } diff --git a/_scss/components/_icons.scss b/_scss/components/_icons.scss new file mode 100644 index 0000000..31a5968 --- /dev/null +++ b/_scss/components/_icons.scss @@ -0,0 +1,22 @@ +/* Icons */ + + ul.icons { + cursor: default; + list-style: none; + padding-left: 0; + + li { + display: inline-block; + padding: 0 1em 0 0; + + &:last-child { + padding-right: 0; + } + + .icon { + &:before { + font-size: 1em; + } + } + } + } diff --git a/_scss/components/_image.scss b/_scss/components/_image.scss new file mode 100644 index 0000000..163022f --- /dev/null +++ b/_scss/components/_image.scss @@ -0,0 +1,54 @@ +/* Image */ + + .image { + border-radius: _size(border-radius); + border: 0; + display: inline-block; + position: relative; + + img { + border-radius: _size(border-radius); + display: block; + } + + &.left, + &.right { + max-width: 40%; + + img { + width: 100%; + } + } + + &.left { + float: left; + margin: 0 1.5em 1em 0; + top: 0.25em; + } + + &.right { + float: right; + margin: 0 0 1em 1.5em; + top: 0.25em; + } + + &.fit { + display: block; + margin: 0 0 _size(element-margin) 0; + width: 100%; + + img { + width: 100%; + } + } + + &.main { + display: block; + margin: 0 0 (_size(element-margin) * 1.5) 0; + width: 100%; + + img { + width: 100%; + } + } + } diff --git a/_scss/components/_list.scss b/_scss/components/_list.scss new file mode 100644 index 0000000..7433402 --- /dev/null +++ b/_scss/components/_list.scss @@ -0,0 +1,62 @@ +/* List */ + + ol { + list-style: decimal; + margin: 0 0 _size(element-margin) 0; + padding-left: 1.25em; + + li { + padding-left: 0.25em; + } + } + + ul { + list-style: disc; + margin: 0 0 _size(element-margin) 0; + padding-left: 1em; + + li { + padding-left: 0.5em; + } + + &.alt { + list-style: none; + padding-left: 0; + + li { + border-top: solid _size(border-width); + padding: 0.5em 0; + + &:first-child { + border-top: 0; + padding-top: 0; + } + } + } + } + + dl { + margin: 0 0 _size(element-margin) 0; + + dt { + display: block; + font-weight: _font(weight-bold); + margin: 0 0 (_size(element-margin) * 0.5) 0; + } + + dd { + margin-left: _size(element-margin); + } + } + + @mixin color-list($p: null) { + ul { + &.alt { + li { + border-top-color: _palette($p, border); + } + } + } + } + + @include color-list; diff --git a/_scss/components/_menu.scss b/_scss/components/_menu.scss new file mode 100644 index 0000000..c941fe8 --- /dev/null +++ b/_scss/components/_menu.scss @@ -0,0 +1,31 @@ +/* Menu */ + + ul.menu { + li { + border-left: solid _size(border-width); + display: inline-block; + list-style: none; + margin-left: 1em; + padding-left: 1em; + + a { + text-decoration: none; + } + + &:first-child { + border-left: 0; + margin-left: 0; + padding-left: 0; + } + } + } + + @mixin color-menu($p: null) { + ul.menu { + li { + border-left-color: _palette($p, border); + } + } + } + + @include color-menu; diff --git a/_scss/components/_row.scss b/_scss/components/_row.scss new file mode 100644 index 0000000..49fc3f9 --- /dev/null +++ b/_scss/components/_row.scss @@ -0,0 +1,25 @@ +/* Row */ + + .row { + @include html-grid(2em); + + @include breakpoint('<=xlarge') { + @include html-grid(2em, 'xlarge'); + } + + @include breakpoint('<=large') { + @include html-grid(1.5em, 'large'); + } + + @include breakpoint('<=medium') { + @include html-grid(1.5em, 'medium'); + } + + @include breakpoint('<=small') { + @include html-grid(1.25em, 'small'); + } + + @include breakpoint('<=xsmall') { + @include html-grid(1.25em, 'xsmall'); + } + } diff --git a/_scss/components/_section.scss b/_scss/components/_section.scss new file mode 100644 index 0000000..793a5b4 --- /dev/null +++ b/_scss/components/_section.scss @@ -0,0 +1,204 @@ +/* Section/Article */ + + section, article, header { + &.special { + text-align: center; + } + + @include breakpoint('<=small') { + &.special-alt { + text-align: center; + + ul.actions { + @include vendor('justify-content', 'center'); + width: 100%; + margin-left: 0; + + li { + &:first-child { + padding-left: 0; + } + } + } + } + } + } + + header { + p { + position: relative; + margin: 0 0 (_size(element-margin) * 0.75) 0; + } + + h2 + p { + font-size: 1.25em; + margin-top: (_size(element-margin) * -0.5); + } + + h3 + p { + font-size: 1.1em; + margin-top: (_size(element-margin) * -0.4); + } + + h4 + p, + h5 + p, + h6 + p { + font-size: 0.9em; + margin-top: (_size(element-margin) * -0.3); + } + + &.major { + @include padding(5.5em, 0); + + h1, h2 { + color: inherit; + font-size: 2.1em; + margin-bottom: 0.8em; + position: relative; + padding-bottom: 0.65em; + + &:before, &:after { + background-color: currentColor; + content: ''; + opacity: 0.2; + position: absolute; + } + + &:before { + bottom: -4px; + height: 10px; + left: 30px; + width: 2px; + } + + &:after { + bottom: 0; + height: 2px; + left: 0; + width: 60px; + } + + + p { + font-size: 0.9em; + font-weight: _font(weight-bold); + letter-spacing: 0.2em; + margin-top: 0; + text-transform: uppercase; + } + } + + .special &, &.special { + h1, h2 { + &:before { + left: calc(50% - 1px); + } + + &:after { + left: calc(50% - 30px); + } + } + } + + &.alt { + @include padding(7em, 0); + } + } + + &.style1 { + background-color: _palette(accent1, bg); + color: _palette(accent1, fg) + } + + &.style2 { + background-color: _palette(accent2, bg); + color: _palette(accent2, fg) + } + + &.style3 { + background-color: _palette(accent3, bg); + color: _palette(accent3, fg) + } + + &.style4 { + background-color: _palette(accent4, bg); + color: _palette(accent4, fg) + } + +/* &.style1, &.style2, &.style3, &.style4 { + background-image: url('images/overlay.png'), url('images/checker-pattern.svg'); + background-position: center top; + background-repeat: repeat; + } */ + + @include breakpoint('<=medium') { + &.major { + @include padding(4em, 2em); + + h1, h2 { + font-size: 1.9em; + } + + &.alt { + @include padding(6em, 2em); + } + } + } + + @include breakpoint('<=small') { + &.major { + @include padding(3em, 2em); + + h1, h2 { + font-size: 1.8em; + + + p { + margin-bottom: (_size(element-margin) * 1.1); + } + } + + &.alt { + @include padding(3em, 2em); + } + + .special-alt &, &.special-alt { + h1, h2 { + &:before { + left: calc(50% - 1px); + } + + &:after { + left: calc(50% - 30px); + } + } + } + } + } + + @include breakpoint('<=xsmall') { + &.major { + @include padding(2.5em, 1.5em); + + &.alt { + @include padding(2.5em, 1.5em); + } + } + } + } + + footer { + &.major { + margin: (_size(element-margin) * 1.25) 0 (_size(element-margin) * 1.35); + } + + @include breakpoint('<=small') { + &.major { + margin: 0; + } + } + + @include breakpoint('<=xsmall') { + &.major { + @include padding(0, 1.5em); + } + } + } diff --git a/_scss/components/_split.scss b/_scss/components/_split.scss new file mode 100644 index 0000000..37b95ec --- /dev/null +++ b/_scss/components/_split.scss @@ -0,0 +1,65 @@ +/* Split */ + + .split { + @include vendor('display', 'flex'); + @include vendor('flex-wrap', 'wrap'); + + > * { + @include padding(4.5em, 2.5em); + margin-bottom: 0; + width: 50%; + + &:nth-child(odd) { + border-right: solid _size(border-width); + } + + &:nth-child(n+3) { + // Add top border only on the third element and after + border-top: solid _size(border-width); + } + + > header.major { + padding: 0; + } + } + + @include breakpoint('<=medium') { + > * { + @include padding(4em, 2em); + } + } + + @include breakpoint('<=small') { + > * { + @include padding(2.5em, 2em); + width: 100%; + + &:nth-child(2) { + // Show the top border on the second element too + border-top: solid _size(border-width); + } + } + } + + @include breakpoint('<=xsmall') { + > * { + @include padding(2.5em, 1.5em); + } + } + } + + @mixin color-split($p: null) { + .split { + > * { + &:nth-child(odd) { + border-right-color: _palette($p, border-bg); + } + + &:nth-child(n+2) { + border-top-color: _palette($p, border-bg); + } + } + } + } + + @include color-split; diff --git a/_scss/components/_spotlights.scss b/_scss/components/_spotlights.scss new file mode 100644 index 0000000..08d914f --- /dev/null +++ b/_scss/components/_spotlights.scss @@ -0,0 +1,90 @@ +/* Spotlights */ + + .spotlights { + @include vendor('display', 'flex'); + @include vendor('flex-wrap', 'wrap'); + margin-bottom: 0; + + > section { + @include padding(3em, 2.5em); + position: relative; + width: 50%; + + .image { + margin-bottom: _size(element-margin); + max-width: 100%; + + > img { + max-width: 100%; + } + } + + &:before { + // Simulate a full-width top border + content: ''; + height: _size(border-width); + position: absolute; + top: 0; + width: 100vw; + } + + &:nth-child(odd) { + border-right: solid _size(border-width); + + &:before { + right: 0; + } + } + + &:nth-child(even) { + &:before { + left: 0; + } + } + + &:last-child { + padding-bottom: 3.5em; + } + } + + @include breakpoint('<=medium') { + > section { + @include padding(2.5em, 2em); + + &:last-child { + padding-bottom: 2em; + } + } + } + + @include breakpoint('<=xsmall') { + > section { + @include padding(2.5em, 1.5em); + width: 100%; + + &:nth-child(odd) { + border-right: 0; + } + + &:last-child { + padding-bottom: 0.5em; + } + } + } + } + + @mixin color-spotlights($p: null) { + .spotlights { + > section { + &:before { + background-color: _palette($p, border-bg); + } + + &:nth-child(odd) { + border-right-color: _palette($p, border-bg); + } + } + } + } + + @include color-spotlights; diff --git a/_scss/components/_table.scss b/_scss/components/_table.scss new file mode 100644 index 0000000..f2447c3 --- /dev/null +++ b/_scss/components/_table.scss @@ -0,0 +1,108 @@ +/* Table */ + + .table-wrapper { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + } + + table { + margin: 0 0 _size(element-margin) 0; + width: 100%; + + tbody { + tr { + border: solid _size(border-width); + border-left: 0; + border-right: 0; + } + } + + td { + padding: 0.75em 0.75em; + } + + th { + font-size: 0.9em; + font-weight: _font(weight-bold); + padding: 0 0.75em 0.75em 0.75em; + text-align: left; + } + + thead { + border-bottom: solid _size(border-width); + } + + tfoot { + border-top: solid _size(border-width); + } + + &.alt { + border-collapse: separate; + + tbody { + tr { + td { + border: solid _size(border-width); + border-left-width: 0; + border-top-width: 0; + + &:first-child { + border-left-width: _size(border-width); + } + } + + &:first-child { + td { + border-top-width: _size(border-width); + } + } + } + } + + thead { + border-bottom: 0; + } + + tfoot { + border-top: 0; + } + } + } + + @mixin color-table($p: null) { + table { + tbody { + tr { + border-color: _palette($p, border); + + &:nth-child(2n + 1) { + background-color: _palette($p, border-bg); + } + } + } + + th { + color: _palette($p, fg-bold); + } + + thead { + border-bottom-color: _palette($p, border); + } + + tfoot { + border-top-color: _palette($p, border); + } + + &.alt { + tbody { + tr { + td { + border-color: _palette($p, border); + } + } + } + } + } + } + + @include color-table; diff --git a/_scss/components/_wrapper.scss b/_scss/components/_wrapper.scss new file mode 100644 index 0000000..e3e7cc7 --- /dev/null +++ b/_scss/components/_wrapper.scss @@ -0,0 +1,68 @@ +/* Wrapper */ + + .wrapper { + padding-bottom: 0.01em; + position: relative; + overflow-x: hidden; + + > .inner { + margin: 0 auto; + padding-bottom: 0.01em; + width: 100%; + max-width: _size(inner); + } + + &.alt { + > .inner { + @include padding(4.5em, 4em); + } + } + + &.style1 { + > .inner { + background-color: _palette(accent1, bg); + } + } + + &.style2 { + @include color(accent2); + } + + &.style3 { + @include color(accent3); + } + + &.style4 { + @include color(accent4); + } + + /* &.style2, &.style3, &.style4 { + background-image: url('images/overlay.png'), url('images/checker-pattern.svg'); + background-position: center top; + background-repeat: repeat, repeat; + } */ + + @include breakpoint('<=medium') { + &.alt { + > .inner { + @include padding(4em, 2em); + } + } + } + + @include breakpoint('<=small') { + &.alt { + > .inner { + @include padding(3em, 2em); + } + } + } + + @include breakpoint('<=xsmall') { + &.alt { + > .inner { + @include padding(2em, 1.5em); + } + } + } + } diff --git a/_scss/custom.scss b/_scss/custom.scss new file mode 100644 index 0000000..81213b3 --- /dev/null +++ b/_scss/custom.scss @@ -0,0 +1,512 @@ +body a { + color: #5b5b5b; +} + +body.landing { + background-attachment: scroll !important; + background-color: #f4f4f4; +} + +body.single { + background-image: none; + +} + +h1, h2, h3, h4, h5, h6, header.major h1, .icon.style3 { + color: #404040; +} + +header.major { + padding: 5.5em 0 .5em 0; +} + +.logo { + margin-right: 21px; +} + +.features { + margin-bottom: 0px; + border: none; +} +.features h4 { + padding-top: 1em; +} + +#banner { + padding: 6em 2em 10em 2em; +} + +.wave-container > svg { + display: block; + margin-bottom: -1px; +} + +#main .inner { + border-radius: .3em; +} + +.no-padding { + padding: 0px !important; +} + +.hero { + display: flex; + max-height: 35vw; + overflow: hidden; + align-items: center; + margin-bottom: 2.4em; + border-top-left-radius: .3em; + border-top-right-radius: .3em; +} + +.hero > .image.fit { + border-radius: 0px; +} + +.meta { + -moz-align-items: left; + -webkit-align-items: left; + -ms-align-items: left; + display: -moz-flex; + display: -webkit-flex; + display: -ms-flex; + display: flex; + -moz-justify-content: left; + -webkit-justify-content: left; + -ms-justify-content: left; + justify-content: left; + border-left: 0; + margin: 0 0 1em 0; + padding-top: 0; + padding: 0; + text-align: left; + width: 100%; +} + +.meta > * { + border-left: solid 1px rgba(160, 160, 160, 0.3); + margin-left: 2em; + padding-left: 2em; + } + +.meta .published { + color: #3c3b3b; + display: block; + font-size: 0.7em; + font-weight: 800; + letter-spacing: 0.25em; + margin-top: 0.5em; + text-transform: uppercase; + white-space: nowrap; +} + +.meta > :first-child { + border-left: 0; + margin-left: 0; + padding-left: 0; +} + +.meta .author .name { + margin: 0 0 0 1.5em; + } + +.author { + display: -moz-flex; + display: -webkit-flex; + display: -ms-flex; + display: flex; + -moz-flex-direction: row; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -moz-align-items: center; + -webkit-align-items: center; + -ms-align-items: center; + align-items: center; + -moz-justify-content: -moz-flex-end; + -webkit-justify-content: -webkit-flex-end; + -ms-justify-content: -ms-flex-end; + justify-content: flex-end; + border-bottom: 0; + font-size: 0.6em; + font-weight: 400; + letter-spacing: 0.25em; + text-transform: uppercase; + white-space: nowrap; + } + +.author .name { + -moz-transition: border-bottom-color 0.2s ease; + -webkit-transition: border-bottom-color 0.2s ease; + -ms-transition: border-bottom-color 0.2s ease; + transition: border-bottom-color 0.2s ease; + border-bottom: dotted 1px rgba(160, 160, 160, 0.65); + display: block; + margin: 0 1.5em 0 0; + } + +.author:hover .name { + border-bottom-color: transparent; +} + +a.author { + text-decoration: none; +} + +.author img { + border-radius: 100%; + display: block; + width: 4em; +} + +.post { + padding: 1em 1em 0em 1em; + margin-bottom: 2em; + border-radius: .3em; + box-shadow: 1px 3px 7px -2px #777; + -webkit-box-shadow: 1px 3px 7px -2px #777; + -moz-box-shadow: 1px 3px 7px -2px #777; + display: flex; + flex-direction: column; + transition: .25s ease; +} + +.vert-expand { + display: flex; +} + +.post:hover { + -webkit-box-shadow: 1px 9px 7px -2px #888; + -moz-box-shadow: 1px 9px 7px -2px #888; + box-shadow: 1px 9px 7px -2px #888; + transition: .25s ease; +} + +.post > footer .stats { + cursor: default; + list-style: none; + padding: 0; +} + +.post > footer .stats > :first-child { + border-left: 0; + margin-left: 0; + padding-left: 0; +} + +.post > footer { + display: -moz-flex; + display: -webkit-flex; + display: -ms-flex; + display: flex; + -moz-align-items: center; + -webkit-align-items: center; + -ms-align-items: center; + align-items: center; + flex-wrap: wrap-reverse; +} + +.post > footer .stats li { + border-left: solid 1px rgba(160, 160, 160, 0.3); + display: inline-block; + font-family: "Raleway", Helvetica, sans-serif; + font-size: 0.6em; + font-weight: 400; + letter-spacing: 0.25em; + line-height: 1; + margin: 0 0 0 2em; + margin-left: 2em; + padding: 0 0 0 2em; + padding-left: 2em; + text-transform: uppercase; +} + +.post > footer ul { + margin: 0 0 1em 0; +} + +.post > footer ul.actions li { + padding: 0 0 0 1.2em !important; +} + +.post > footer .actions { + -moz-flex-grow: 1; + -webkit-flex-grow: 1; + -ms-flex-grow: 1; + flex-grow: 1; + margin-left: -1.2em; +} + +.button.primary { + background-color: #dbdbdb; + color: #5b5b5b; +} + +.button.primary:hover { + background-color: gray; +} + +@media only screen and (max-width: 480px) { + ul.actions:not(.fixed) li { + padding: .5em 0 .5em 0; + } + ul.actions:not(.fixed) li:first-child { + padding-top: .5em; + } + .ptrail { + margin-left: 0em !important; + text-align: center; + } + .ptrail li { + padding: 0 0 0 0em !important; + } + .ptrail li:first-child { + margin: 0px; + } + input[type="submit"], input[type="reset"], input[type="button"], button, .button { + padding: 0 2.9em; + } +} + +#footer .copyright a, #footer .copyright { + text-decoration: none; + color: #5b5b5b; +} + +#footer .copyright a:hover { + color: #000; +} + +#footer .menu a { + color: #5b5b5b; +} + +.major.special.journal { + padding: 0px; +} + +//Core Media Landing Page Resolution Fix +@media only screen and (min-width: 2000px) { + #banner { + padding: 6em 2em 40em 2em; + } + body { + background-size: auto, contain; + + &.landing { + background-size: auto, contain; + } + } +} + +@media only screen and (max-width: 1300px) { + #banner { + padding: 6em 2em 25em 2em; + } +} +@media only screen and (max-width: 770px) { + #banner { + padding: 6em 2em 30em 2em; + } +} + +//Paginations + + .page_number { + -moz-justify-content: right; + -webkit-justify-content: right; + -ms-justify-content: right; + justify-content: right; + display: flex; + } + + .actions.pagination { + -moz-justify-content: space-between; + -webkit-justify-content: space-between; + -ms-justify-content: space-between; + justify-content: space-between; + margin-top: 2em; + margin-bottom: 0em; + } + + .pagination .button.primary { + background: #f2f2f2; + color: #5b5b5b !important; + border: 1px #b7b7b7 solid; + font-weight: bold; + } + + .pagination .button.primary li a { + color: #5b5b5b; + } + + //Page trail + .ptrail { + display: flex; + align-items: center; + } + + .ptrail li { + height: auto; + width: 3em; + border: 1px solid #b7b7b7; + background-color: #f2f2f2; + border-radius: .25em; + margin-left: .25em; + font-weight: bold; + text-align: center; + padding: 0px !important; + } + + .ptrail .selected { + background-color: #6c6a6a; + } + + .ptrail .selected a { + color: white; + } + +//Products Listing Page + + //Product Categories Navbar + .product-cat ul { + list-style:none; + display: flex; + justify-content: space-between; + padding: 1em; + } + .product-cat a { + font-weight: bold; + } + //Product Headline Image + .product-headline-flex { + object-fit: cover; + object-position: top; + margin: 0px; + width: 100%; + height: 100%; + } + .product-hero-text p { + padding-bottom: .5em; + } + @media only screen and (min-width: 1680px) { + .product-hero-text p { + padding-bottom: 1.5em; + } + } + .headline-col-limit { //a weird bug when setting max-height on .product-headline-flex, therefore, setting col max-height did the trick. + max-height: 25.5em; + } + + .product a { + text-decoration: none; + } + + .product .image.fit { + height: 12em; + } + + .product img { + border-radius: .3em .3em 0 0; + } + + .product img.image.fit { + margin: 0 0 1em 0; + object-fit: cover; + } + + .product p { + margin-bottom: 1.5em; + } + + .product p, .product h2, .product h3, .product h4, .product ul.actions { + padding-left: .5em; + padding-right: .5em; + } + + .product ul.actions { + margin-bottom: .5em; + margin-top: auto; + } + + .featured.product picture { + object-fit:cover; + } + + .featured.product h3, .featured.product h4 { + padding-top: .5em; + } + + .featured.product img.image.fit { + height: 100%; + object-fit: cover; + border-top-right-radius: 0em; + border-bottom-left-radius: .3em; + } + + + +//Product Single Page + + //Product Shopping Cart + .product-cart ul { + list-style:none; + padding: 1em; + display: flex; + justify-content: flex-end; + margin: 0 0 1em 0; + } + .product-cart a { + text-decoration: none; + font-weight: bold; + } + .product-cart span { + padding: 0 .5em 0 .5em; + } + .product-cart .button.back { + margin: 1.5em; + font-weight: bold; + } + + //Product Details + .headline h1 { + margin-bottom: 0em; + } + .product-details ul { + list-style:none; + padding-left: 0px; + margin-bottom: .5em; + } + .product-details ul li { + padding-left: 0px; + } + + //Product Image + .product-flex { + max-height: 16em; + min-height: 16em; + object-fit: cover; + object-position: top; + width: 100%; + height: 16em; + border-radius: .3em; + } + + //Product Description + .product-desc h3 { + margin-bottom: 0em; + margin-top: .5em; + } + + .product-desc p { + margin: 0 0 1.0em 0; + } + + //Related Products Section + .related-items { + margin-top: 2em; + } + + .related-products h3 { + margin-bottom: .5em; + } diff --git a/_scss/layout/_banner.scss b/_scss/layout/_banner.scss new file mode 100644 index 0000000..63931b5 --- /dev/null +++ b/_scss/layout/_banner.scss @@ -0,0 +1,106 @@ +/* Banner */ + + #banner { + $count: 3; + + @include padding(8em, 0); + text-align: center; + + header { + padding: 0; + overflow: hidden; + + > * { + @include vendor('transition', ( + 'opacity 1s ease-in-out', + 'transform 0.65s ease-out', + 'filter 0.65s ease-out' + )); + opacity: 1; + } + + @for $i from 1 through $count { + > :nth-child(#{$i}) { + @include vendor('transition-delay', '#{0s + (($i - 1) * 0.125s)} !important'); + } + } + } + + .icon { + display: block; + font-size: 4em; + } + + h1 { + font-size: 2.4em; + margin-bottom: 0.7em; + padding-bottom: 0.5em; + + &:before { + left: calc(50% - 1px); + } + + &:after { + left: calc(50% - 30px); + } + } + + p { + font-size: 0.9em; + margin-bottom: 3.15em; + } + + .button { + min-width: 15em; + } + + .actions { + @include vendor('transition', ( + 'opacity 1s ease-in-out', + 'transform 0.65s ease-in-out', + 'filter 0.85s ease-out' + )); + @include vendor('transition-delay', '#{0.125s + (($count - 1) * 0.25s)}'); + opacity: 1; + } + + body.is-preload & { + header { + > * { + opacity: 0; + @include vendor('transform', 'scale(1.1)'); + @include vendor('filter', 'blur(4px)'); + } + } + + .actions { + opacity: 0; + @include vendor('transform', 'translateY(0.25em)'); + @include vendor('filter', 'blur(2px)'); + } + } + + @include breakpoint('<=xlarge') { + @include padding(8em, 0); + } + + @include breakpoint('<=large') { + @include padding(6em, 0); + } + + @include breakpoint('<=medium') { + @include padding(8em, 2em); + } + + @include breakpoint('<=small') { + @include padding(2em, 2em); + + h1 { + font-size: 1.8em; + } + } + + @include breakpoint('<=xsmall') { + @include padding(4em, 2em); + } + } diff --git a/_scss/layout/_footer.scss b/_scss/layout/_footer.scss new file mode 100644 index 0000000..27265c7 --- /dev/null +++ b/_scss/layout/_footer.scss @@ -0,0 +1,39 @@ +/* Footer */ + + #footer { + @include padding(4em, 0); + text-align: center; + + .alt-icons { + margin-bottom: 3.5em; + } + + .menu { + font-size: 0.8em; + margin-bottom: 1.1em; + + a { + color: _palette(fg-light); + } + } + + .copyright { + color: _palette(fg-light); + font-size: 0.8em; + text-align: center; + } + + @include breakpoint('<=large') { + .menu { + font-size: 0.9em; + } + + .copyright { + font-size: 0.9em; + } + } + + @include breakpoint('<=xsmall') { + @include padding(3em, 1.5em); + } + } diff --git a/_scss/layout/_header.scss b/_scss/layout/_header.scss new file mode 100644 index 0000000..fdecb7c --- /dev/null +++ b/_scss/layout/_header.scss @@ -0,0 +1,97 @@ +/* Header */ + + @include keyframes('reveal-header') { + 0% { top: -4em; opacity: 0; } + 100% { top: 0; opacity: 1; } + } + + #header { + @include vendor('animation', 'none'); + @include vendor('display', 'flex'); + left: 0; + position: absolute; + top: 0; + width: 100%; + z-index: _misc(z-index-base) + 1; + padding: 1em; + -ms-flex-pack: justify; + + > a { + color: inherit; + font-size: 0.75em; + font-weight: _font(weight-bold); + letter-spacing: 0.13em; + height: 3em; + line-height: 3em; + text-decoration: none; + text-transform: uppercase; + margin-left: 2em; + + &.button { + padding: 0 1.5em; + } + + &:first-child { + margin-left: 0; + } + + &[href="#menu"] { + @include icon(false, solid); + margin-right: auto; + -webkit-tap-highlight-color: rgba(0,0,0,0); + padding-left: 0.5em; + + &:before { + content: '\f0c9'; + line-height: inherit; + margin: 0 0.5em 0 0; + } + } + } + + &.alt { + @include vendor('animation', 'reveal-header 0.5s ease'); + box-shadow: 0 0 0.15em 0 rgba(0,0,0,0.1); + position: fixed; + top: 0; + left: 0; + width: 100%; + background-color: transparentize(_palette(bg), 0.05); + padding: 0.5em; + + a { + &[href="#menu"] { + padding-left: 1em; + } + } + } + } + + @include breakpoint('<=medium') { + #header { + > h1 { + left: 1em; + + a { + font-size: 1em; + } + } + } + } + + @include breakpoint('<=xsmall') { + #header { + padding: 0.5em; + min-width: 320px; + + &.alt { + padding: 0.5em; + + a { + &[href="#menu"] { + padding-left: 0.5em; + } + } + } + } + } diff --git a/_scss/layout/_main.scss b/_scss/layout/_main.scss new file mode 100644 index 0000000..b5634b7 --- /dev/null +++ b/_scss/layout/_main.scss @@ -0,0 +1,41 @@ +/* Main */ + + #main { + padding-top: 10em; + + > .inner { + > .content { + padding: 2em 3em 3em; + } + } + + @include breakpoint('<=large') { + padding-top: 8em; + + > .inner { + > .content { + padding: 2.5em; + } + } + } + + @include breakpoint('<=medium') { + > .inner { + > .content { + padding: 2em; + } + } + } + + @include breakpoint('<=small') { + padding-top: 6em; + } + + @include breakpoint('<=xsmall') { + > .inner { + > .content { + padding: 1em; + } + } + } + } diff --git a/_scss/layout/_menu.scss b/_scss/layout/_menu.scss new file mode 100644 index 0000000..4ea4c65 --- /dev/null +++ b/_scss/layout/_menu.scss @@ -0,0 +1,102 @@ +/* Menu */ + + $menu-palette: accent1; + + #menu { + @include vendor('transform', 'translateX(-100%)'); + @include vendor('transition', ('transform #{_duration(menu)} ease', 'box-shadow #{_duration(menu)} ease', 'visibility #{_duration(menu)}')); + -webkit-overflow-scrolling: touch; + background: _palette($menu-palette, bg); + box-shadow: none; + height: 100%; + left: 0; + max-width: 80%; + overflow-y: auto; + padding: 3em 2em; + position: fixed; + top: 0; + visibility: hidden; + width: 20em; + z-index: _misc(z-index-base) + 2; + + > ul { + margin: 0 0 (_size(element-margin) * 0.5) 0; + + &.links { + list-style: none; + padding: 0; + + > li { + font-weight: _font(weight-bold); + letter-spacing: 0.15em; + padding: 0; + text-transform: uppercase; + + > a:not(.button) { + border: 0; + border-top: solid 1px _palette($menu-palette, border); + color: inherit; + display: block; + letter-spacing: _size(letter-spacing-alt); + line-height: 3.5em; + text-decoration: none; + font-size: 0.9em; + } + + > .button { + display: block; + margin: 0.5em 0 0 0; + } + + &:first-child { + > a:not(.button) { + border-top: 0 !important; + } + } + } + } + } + + .close { + @include icon(false, solid); + @include vendor('transition', 'color #{_duration(transition)} ease-in-out'); + -webkit-tap-highlight-color: rgba(0,0,0,0); + border: 0; + color: _palette($menu-palette, fg-light); + cursor: pointer; + display: block; + height: 3.25em; + line-height: 3.25em; + padding-right: 1.25em; + position: absolute; + right: 0; + text-align: right; + top: 0; + vertical-align: middle; + width: 7em; + + &:before { + content: '\f00d'; + font-size: 1.25em; + } + + &:hover { + color: _palette($menu-palette, fg); + } + + @include breakpoint('<=small') { + height: 4em; + line-height: 4em; + } + } + + &.visible { + @include vendor('transform', 'translateX(0)'); + box-shadow: 0 0 4em 0 rgba(0,0,0,0.1); + visibility: visible; + } + + @include breakpoint('<=small') { + padding: 2.5em 1.75em; + } + } diff --git a/_scss/libs/_breakpoints.scss b/_scss/libs/_breakpoints.scss new file mode 100644 index 0000000..c5301d8 --- /dev/null +++ b/_scss/libs/_breakpoints.scss @@ -0,0 +1,223 @@ +// breakpoints.scss v1.0 | @ajlkn | MIT licensed */ + +// Vars. + + /// Breakpoints. + /// @var {list} + $breakpoints: () !global; + +// Mixins. + + /// Sets breakpoints. + /// @param {map} $x Breakpoints. + @mixin breakpoints($x: ()) { + $breakpoints: $x !global; + } + + /// Wraps @content in a @media block targeting a specific orientation. + /// @param {string} $orientation Orientation. + @mixin orientation($orientation) { + @media screen and (orientation: #{$orientation}) { + @content; + } + } + + /// Wraps @content in a @media block using a given query. + /// @param {string} $query Query. + @mixin breakpoint($query: null) { + + $breakpoint: null; + $op: null; + $media: null; + + // Determine operator, breakpoint. + + // Greater than or equal. + @if (str-slice($query, 0, 2) == '>=') { + + $op: 'gte'; + $breakpoint: str-slice($query, 3); + + } + + // Less than or equal. + @elseif (str-slice($query, 0, 2) == '<=') { + + $op: 'lte'; + $breakpoint: str-slice($query, 3); + + } + + // Greater than. + @elseif (str-slice($query, 0, 1) == '>') { + + $op: 'gt'; + $breakpoint: str-slice($query, 2); + + } + + // Less than. + @elseif (str-slice($query, 0, 1) == '<') { + + $op: 'lt'; + $breakpoint: str-slice($query, 2); + + } + + // Not. + @elseif (str-slice($query, 0, 1) == '!') { + + $op: 'not'; + $breakpoint: str-slice($query, 2); + + } + + // Equal. + @else { + + $op: 'eq'; + $breakpoint: $query; + + } + + // Build media. + @if ($breakpoint and map-has-key($breakpoints, $breakpoint)) { + + $a: map-get($breakpoints, $breakpoint); + + // Range. + @if (type-of($a) == 'list') { + + $x: nth($a, 1); + $y: nth($a, 2); + + // Max only. + @if ($x == null) { + + // Greater than or equal (>= 0 / anything) + @if ($op == 'gte') { + $media: 'screen'; + } + + // Less than or equal (<= y) + @elseif ($op == 'lte') { + $media: 'screen and (max-width: ' + $y + ')'; + } + + // Greater than (> y) + @elseif ($op == 'gt') { + $media: 'screen and (min-width: ' + ($y + 1) + ')'; + } + + // Less than (< 0 / invalid) + @elseif ($op == 'lt') { + $media: 'screen and (max-width: -1px)'; + } + + // Not (> y) + @elseif ($op == 'not') { + $media: 'screen and (min-width: ' + ($y + 1) + ')'; + } + + // Equal (<= y) + @else { + $media: 'screen and (max-width: ' + $y + ')'; + } + + } + + // Min only. + @else if ($y == null) { + + // Greater than or equal (>= x) + @if ($op == 'gte') { + $media: 'screen and (min-width: ' + $x + ')'; + } + + // Less than or equal (<= inf / anything) + @elseif ($op == 'lte') { + $media: 'screen'; + } + + // Greater than (> inf / invalid) + @elseif ($op == 'gt') { + $media: 'screen and (max-width: -1px)'; + } + + // Less than (< x) + @elseif ($op == 'lt') { + $media: 'screen and (max-width: ' + ($x - 1) + ')'; + } + + // Not (< x) + @elseif ($op == 'not') { + $media: 'screen and (max-width: ' + ($x - 1) + ')'; + } + + // Equal (>= x) + @else { + $media: 'screen and (min-width: ' + $x + ')'; + } + + } + + // Min and max. + @else { + + // Greater than or equal (>= x) + @if ($op == 'gte') { + $media: 'screen and (min-width: ' + $x + ')'; + } + + // Less than or equal (<= y) + @elseif ($op == 'lte') { + $media: 'screen and (max-width: ' + $y + ')'; + } + + // Greater than (> y) + @elseif ($op == 'gt') { + $media: 'screen and (min-width: ' + ($y + 1) + ')'; + } + + // Less than (< x) + @elseif ($op == 'lt') { + $media: 'screen and (max-width: ' + ($x - 1) + ')'; + } + + // Not (< x and > y) + @elseif ($op == 'not') { + $media: 'screen and (max-width: ' + ($x - 1) + '), screen and (min-width: ' + ($y + 1) + ')'; + } + + // Equal (>= x and <= y) + @else { + $media: 'screen and (min-width: ' + $x + ') and (max-width: ' + $y + ')'; + } + + } + + } + + // String. + @else { + + // Missing a media type? Prefix with "screen". + @if (str-slice($a, 0, 1) == '(') { + $media: 'screen and ' + $a; + } + + // Otherwise, use as-is. + @else { + $media: $a; + } + + } + + } + + // Output. + @media #{$media} { + @content; + } + + } \ No newline at end of file diff --git a/_scss/libs/_functions.scss b/_scss/libs/_functions.scss new file mode 100644 index 0000000..f563aab --- /dev/null +++ b/_scss/libs/_functions.scss @@ -0,0 +1,90 @@ +/// Removes a specific item from a list. +/// @author Hugo Giraudel +/// @param {list} $list List. +/// @param {integer} $index Index. +/// @return {list} Updated list. +@function remove-nth($list, $index) { + + $result: null; + + @if type-of($index) != number { + @warn "$index: #{quote($index)} is not a number for `remove-nth`."; + } + @else if $index == 0 { + @warn "List index 0 must be a non-zero integer for `remove-nth`."; + } + @else if abs($index) > length($list) { + @warn "List index is #{$index} but list is only #{length($list)} item long for `remove-nth`."; + } + @else { + + $result: (); + $index: if($index < 0, length($list) + $index + 1, $index); + + @for $i from 1 through length($list) { + + @if $i != $index { + $result: append($result, nth($list, $i)); + } + + } + + } + + @return $result; + +} + +/// Gets a value from a map. +/// @author Hugo Giraudel +/// @param {map} $map Map. +/// @param {string} $keys Key(s). +/// @return {string} Value. +@function val($map, $keys...) { + + @if nth($keys, 1) == null { + $keys: remove-nth($keys, 1); + } + + @each $key in $keys { + $map: map-get($map, $key); + } + + @return $map; + +} + +/// Gets a duration value. +/// @param {string} $keys Key(s). +/// @return {string} Value. +@function _duration($keys...) { + @return val($duration, $keys...); +} + +/// Gets a font value. +/// @param {string} $keys Key(s). +/// @return {string} Value. +@function _font($keys...) { + @return val($font, $keys...); +} + +/// Gets a misc value. +/// @param {string} $keys Key(s). +/// @return {string} Value. +@function _misc($keys...) { + @return val($misc, $keys...); +} + +/// Gets a palette value. +/// @param {string} $keys Key(s). +/// @return {string} Value. +@function _palette($keys...) { + @return val($palette, $keys...); +} + +/// Gets a size value. +/// @param {string} $keys Key(s). +/// @return {string} Value. +@function _size($keys...) { + @return val($size, $keys...); +} \ No newline at end of file diff --git a/_scss/libs/_html-grid.scss b/_scss/libs/_html-grid.scss new file mode 100644 index 0000000..2b2b5a5 --- /dev/null +++ b/_scss/libs/_html-grid.scss @@ -0,0 +1,149 @@ +// html-grid.scss v1.0 | @ajlkn | MIT licensed */ + +// Mixins. + + /// Initializes the current element as an HTML grid. + /// @param {mixed} $gutters Gutters (either a single number to set both column/row gutters, or a list to set them individually). + /// @param {mixed} $suffix Column class suffix (optional; either a single suffix or a list). + @mixin html-grid($gutters: 1.5em, $suffix: '') { + + // Initialize. + $cols: 12; + $multipliers: 0, 0.25, 0.5, 1, 1.50, 2.00; + $unit: 100% / $cols; + + // Suffixes. + $suffixes: null; + + @if (type-of($suffix) == 'list') { + $suffixes: $suffix; + } + @else { + $suffixes: ($suffix); + } + + // Gutters. + $guttersCols: null; + $guttersRows: null; + + @if (type-of($gutters) == 'list') { + + $guttersCols: nth($gutters, 1); + $guttersRows: nth($gutters, 2); + + } + @else { + + $guttersCols: $gutters; + $guttersRows: 0; + + } + + // Row. + display: flex; + flex-wrap: wrap; + box-sizing: border-box; + align-items: stretch; + + // Columns. + > * { + box-sizing: border-box; + } + + // Gutters. + &.gtr-uniform { + > * { + > :last-child { + margin-bottom: 0; + } + } + } + + // Alignment. + &.aln-left { + justify-content: flex-start; + } + + &.aln-center { + justify-content: center; + } + + &.aln-right { + justify-content: flex-end; + } + + &.aln-top { + align-items: flex-start; + } + + &.aln-middle { + align-items: center; + } + + &.aln-bottom { + align-items: flex-end; + } + + // Step through suffixes. + @each $suffix in $suffixes { + + // Suffix. + @if ($suffix != '') { + $suffix: '-' + $suffix; + } + @else { + $suffix: ''; + } + + // Row. + + // Important. + > .imp#{$suffix} { + order: -1; + } + + // Columns, offsets. + @for $i from 1 through $cols { + > .col-#{$i}#{$suffix} { + width: $unit * $i; + } + + > .off-#{$i}#{$suffix} { + margin-left: $unit * $i; + } + } + + // Step through multipliers. + @each $multiplier in $multipliers { + + // Gutters. + $class: null; + + @if ($multiplier != 1) { + $class: '.gtr-' + ($multiplier * 100); + } + + &#{$class} { + margin-top: ($guttersRows * $multiplier * -1); + margin-left: ($guttersCols * $multiplier * -1); + + > * { + padding: ($guttersRows * $multiplier) 0 0 ($guttersCols * $multiplier); + } + + // Uniform. + &.gtr-uniform { + margin-top: $guttersCols * $multiplier * -1; + + > * { + padding-top: $guttersCols * $multiplier; + } + } + + } + + } + + } + + } diff --git a/_scss/libs/_mixins.scss b/_scss/libs/_mixins.scss new file mode 100644 index 0000000..a331483 --- /dev/null +++ b/_scss/libs/_mixins.scss @@ -0,0 +1,78 @@ +/// Makes an element's :before pseudoelement a FontAwesome icon. +/// @param {string} $content Optional content value to use. +/// @param {string} $category Optional category to use. +/// @param {string} $where Optional pseudoelement to target (before or after). +@mixin icon($content: false, $category: regular, $where: before) { + + text-decoration: none; + + &:#{$where} { + + @if $content { + content: $content; + } + + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; + text-transform: none !important; + + @if ($category == brands) { + font-family: 'Font Awesome 5 Brands'; + } + @elseif ($category == solid) { + font-family: 'Font Awesome 5 Free'; + font-weight: 900; + } + @else { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; + } + + } + +} + +/// Applies padding to an element, taking the current element-margin value into account. +/// @param {mixed} $tb Top/bottom padding. +/// @param {mixed} $lr Left/right padding. +/// @param {list} $pad Optional extra padding (in the following order top, right, bottom, left) +/// @param {bool} $important If true, adds !important. +@mixin padding($tb, $lr, $pad: (0,0,0,0), $important: null) { + + @if $important { + $important: '!important'; + } + + $x: 0.1em; + + @if unit(_size(element-margin)) == 'rem' { + $x: 0.1rem; + } + + padding: ($tb + nth($pad,1)) ($lr + nth($pad,2)) max($x, $tb - _size(element-margin) + nth($pad,3)) ($lr + nth($pad,4)) #{$important}; + +} + +/// Encodes a SVG data URL so IE doesn't choke (via codepen.io/jakob-e/pen/YXXBrp). +/// @param {string} $svg SVG data URL. +/// @return {string} Encoded SVG data URL. +@function svg-url($svg) { + + $svg: str-replace($svg, '"', '\''); + $svg: str-replace($svg, '%', '%25'); + $svg: str-replace($svg, '<', '%3C'); + $svg: str-replace($svg, '>', '%3E'); + $svg: str-replace($svg, '&', '%26'); + $svg: str-replace($svg, '#', '%23'); + $svg: str-replace($svg, '{', '%7B'); + $svg: str-replace($svg, '}', '%7D'); + $svg: str-replace($svg, ';', '%3B'); + + @return url("data:image/svg+xml;charset=utf8,#{$svg}"); + +} \ No newline at end of file diff --git a/_scss/libs/_vars.scss b/_scss/libs/_vars.scss new file mode 100644 index 0000000..9d68b80 --- /dev/null +++ b/_scss/libs/_vars.scss @@ -0,0 +1,89 @@ +// Misc. + $misc: ( + z-index-base: 10000 + ); + +// Duration. + $duration: ( + menu: 0.5s, + transition: 0.2s + ); + +// Size. + $size: ( + border-radius: 4px, + border-width: 2px, + element-height: 2.75em, + element-margin: 1em, + inner: 58.5em + ); + +// Font. + $font: ( + family: ('Ubuntu', Arial, Helvetica, sans-serif), + family-fixed: ('Courier New', monospace), + weight: 300, + weight-bold: 400, + weight-bolder: 600 + ); + +// Palette. + $palette: ( + bg: #fff, + fg: #484459, + fg-bold: #413D53, + fg-light: #999, + border: rgba(144,144,144,0.25), + border-bg: rgba(144,144,144,0.15), + border2: rgba(144,144,144,0.5), + border2-bg: rgba(144,144,144,0.2), + highlight: accent3, + + accent1: ( + bg: #fff, + fg: #484459, + fg-bold: #413D53, + fg-light: #999, + border: rgba(144,144,144,0.25), + border-bg: rgba(144,144,144,0.15), + border2: rgba(144,144,144,0.5), + border2-bg: rgba(144,144,144,0.2), + highlight: accent3, + ), + + accent2: ( + bg: #7cafa3, + fg: #fff, + fg-bold: #fff, + fg-light: #a8cebd, + border: rgba(255,255,255,0.15), + border-bg: rgba(255,255,255,0.075), + border2: rgba(255,255,255,0.5), + border2-bg: rgba(255,255,255,0.2), + highlight: accent1 + ), + + accent3: ( + bg: #6c85ab, + fg: #fff, + fg-bold: #fff, + fg-light: #bec4dd, + border: rgba(255,255,255,0.15), + border-bg: rgba(255,255,255,0.075), + border2: rgba(255,255,255,0.5), + border2-bg: rgba(255,255,255,0.2), + highlight: accent1 + ), + + accent4: ( + bg: #b67e96, + fg: #fff, + fg-bold: #fff, + fg-light: #81c1cd, + border: rgba(255,255,255,0.15), + border-bg: rgba(255,255,255,0.075), + border2: rgba(255,255,255,0.5), + border2-bg: rgba(255,255,255,0.2), + highlight: accent1 + ) + ); diff --git a/_scss/libs/_vendor.scss b/_scss/libs/_vendor.scss new file mode 100644 index 0000000..6599a3f --- /dev/null +++ b/_scss/libs/_vendor.scss @@ -0,0 +1,376 @@ +// vendor.scss v1.0 | @ajlkn | MIT licensed */ + +// Vars. + + /// Vendor prefixes. + /// @var {list} + $vendor-prefixes: ( + '-moz-', + '-webkit-', + '-ms-', + '' + ); + + /// Properties that should be vendorized. + /// Data via caniuse.com, github.com/postcss/autoprefixer, and developer.mozilla.org + /// @var {list} + $vendor-properties: ( + + // Animation. + 'animation', + 'animation-delay', + 'animation-direction', + 'animation-duration', + 'animation-fill-mode', + 'animation-iteration-count', + 'animation-name', + 'animation-play-state', + 'animation-timing-function', + + // Appearance. + 'appearance', + + // Backdrop filter. + 'backdrop-filter', + + // Background image options. + 'background-clip', + 'background-origin', + 'background-size', + + // Box sizing. + 'box-sizing', + + // Clip path. + 'clip-path', + + // Filter effects. + 'filter', + + // Flexbox. + 'align-content', + 'align-items', + 'align-self', + 'flex', + 'flex-basis', + 'flex-direction', + 'flex-flow', + 'flex-grow', + 'flex-shrink', + 'flex-wrap', + 'justify-content', + 'order', + + // Font feature. + 'font-feature-settings', + 'font-language-override', + 'font-variant-ligatures', + + // Font kerning. + 'font-kerning', + + // Fragmented borders and backgrounds. + 'box-decoration-break', + + // Grid layout. + 'grid-column', + 'grid-column-align', + 'grid-column-end', + 'grid-column-start', + 'grid-row', + 'grid-row-align', + 'grid-row-end', + 'grid-row-start', + 'grid-template-columns', + 'grid-template-rows', + + // Hyphens. + 'hyphens', + 'word-break', + + // Masks. + 'mask', + 'mask-border', + 'mask-border-outset', + 'mask-border-repeat', + 'mask-border-slice', + 'mask-border-source', + 'mask-border-width', + 'mask-clip', + 'mask-composite', + 'mask-image', + 'mask-origin', + 'mask-position', + 'mask-repeat', + 'mask-size', + + // Multicolumn. + 'break-after', + 'break-before', + 'break-inside', + 'column-count', + 'column-fill', + 'column-gap', + 'column-rule', + 'column-rule-color', + 'column-rule-style', + 'column-rule-width', + 'column-span', + 'column-width', + 'columns', + + // Object fit. + 'object-fit', + 'object-position', + + // Regions. + 'flow-from', + 'flow-into', + 'region-fragment', + + // Scroll snap points. + 'scroll-snap-coordinate', + 'scroll-snap-destination', + 'scroll-snap-points-x', + 'scroll-snap-points-y', + 'scroll-snap-type', + + // Shapes. + 'shape-image-threshold', + 'shape-margin', + 'shape-outside', + + // Tab size. + 'tab-size', + + // Text align last. + 'text-align-last', + + // Text decoration. + 'text-decoration-color', + 'text-decoration-line', + 'text-decoration-skip', + 'text-decoration-style', + + // Text emphasis. + 'text-emphasis', + 'text-emphasis-color', + 'text-emphasis-position', + 'text-emphasis-style', + + // Text size adjust. + 'text-size-adjust', + + // Text spacing. + 'text-spacing', + + // Transform. + 'transform', + 'transform-origin', + + // Transform 3D. + 'backface-visibility', + 'perspective', + 'perspective-origin', + 'transform-style', + + // Transition. + 'transition', + 'transition-delay', + 'transition-duration', + 'transition-property', + 'transition-timing-function', + + // Unicode bidi. + 'unicode-bidi', + + // User select. + 'user-select', + + // Writing mode. + 'writing-mode', + + ); + + /// Values that should be vendorized. + /// Data via caniuse.com, github.com/postcss/autoprefixer, and developer.mozilla.org + /// @var {list} + $vendor-values: ( + + // Cross fade. + 'cross-fade', + + // Element function. + 'element', + + // Filter function. + 'filter', + + // Flexbox. + 'flex', + 'inline-flex', + + // Grab cursors. + 'grab', + 'grabbing', + + // Gradients. + 'linear-gradient', + 'repeating-linear-gradient', + 'radial-gradient', + 'repeating-radial-gradient', + + // Grid layout. + 'grid', + 'inline-grid', + + // Image set. + 'image-set', + + // Intrinsic width. + 'max-content', + 'min-content', + 'fit-content', + 'fill', + 'fill-available', + 'stretch', + + // Sticky position. + 'sticky', + + // Transform. + 'transform', + + // Zoom cursors. + 'zoom-in', + 'zoom-out', + + ); + +// Functions. + + /// Removes a specific item from a list. + /// @author Hugo Giraudel + /// @param {list} $list List. + /// @param {integer} $index Index. + /// @return {list} Updated list. + @function remove-nth($list, $index) { + + $result: null; + + @if type-of($index) != number { + @warn "$index: #{quote($index)} is not a number for `remove-nth`."; + } + @else if $index == 0 { + @warn "List index 0 must be a non-zero integer for `remove-nth`."; + } + @else if abs($index) > length($list) { + @warn "List index is #{$index} but list is only #{length($list)} item long for `remove-nth`."; + } + @else { + + $result: (); + $index: if($index < 0, length($list) + $index + 1, $index); + + @for $i from 1 through length($list) { + + @if $i != $index { + $result: append($result, nth($list, $i)); + } + + } + + } + + @return $result; + + } + + /// Replaces a substring within another string. + /// @author Hugo Giraudel + /// @param {string} $string String. + /// @param {string} $search Substring. + /// @param {string} $replace Replacement. + /// @return {string} Updated string. + @function str-replace($string, $search, $replace: '') { + + $index: str-index($string, $search); + + @if $index { + @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace); + } + + @return $string; + + } + + /// Replaces a substring within each string in a list. + /// @param {list} $strings List of strings. + /// @param {string} $search Substring. + /// @param {string} $replace Replacement. + /// @return {list} Updated list of strings. + @function str-replace-all($strings, $search, $replace: '') { + + @each $string in $strings { + $strings: set-nth($strings, index($strings, $string), str-replace($string, $search, $replace)); + } + + @return $strings; + + } + +// Mixins. + + /// Wraps @content in vendorized keyframe blocks. + /// @param {string} $name Name. + @mixin keyframes($name) { + + @-moz-keyframes #{$name} { @content; } + @-webkit-keyframes #{$name} { @content; } + @-ms-keyframes #{$name} { @content; } + @keyframes #{$name} { @content; } + + } + + /// Vendorizes a declaration's property and/or value(s). + /// @param {string} $property Property. + /// @param {mixed} $value String/list of value(s). + @mixin vendor($property, $value) { + + // Determine if property should expand. + $expandProperty: index($vendor-properties, $property); + + // Determine if value should expand (and if so, add '-prefix-' placeholder). + $expandValue: false; + + @each $x in $value { + @each $y in $vendor-values { + @if $y == str-slice($x, 1, str-length($y)) { + + $value: set-nth($value, index($value, $x), '-prefix-' + $x); + $expandValue: true; + + } + } + } + + // Expand property? + @if $expandProperty { + @each $vendor in $vendor-prefixes { + #{$vendor}#{$property}: #{str-replace-all($value, '-prefix-', $vendor)}; + } + } + + // Expand just the value? + @elseif $expandValue { + @each $vendor in $vendor-prefixes { + #{$property}: #{str-replace-all($value, '-prefix-', $vendor)}; + } + } + + // Neither? Treat them as a normal declaration. + @else { + #{$property}: #{$value}; + } + + } \ No newline at end of file diff --git a/_scss/styles.scss b/_scss/styles.scss new file mode 100644 index 0000000..249ffa3 --- /dev/null +++ b/_scss/styles.scss @@ -0,0 +1,70 @@ +@import 'libs/vars'; +@import 'libs/functions'; +@import 'libs/mixins'; +@import 'libs/vendor'; +@import 'libs/breakpoints'; +@import 'libs/html-grid'; +@import 'fontawesome-all.min.css'; +@import url('https://fonts.googleapis.com/css2?family=Ubuntu:wght@300&display=swap'); + + + @include breakpoints(( + xlarge: ( 1281px, 1680px ), + large: ( 981px, 1280px ), + medium: ( 737px, 980px ), + small: ( 481px, 736px ), + xsmall: ( null, 480px ) + )); + +// Mixins. + + @mixin color($p) { + @include color-typography($p); + @include color-box($p); + @include color-button($p); + @include color-form($p); + @include color-list($p); + @include color-menu($p); + @include color-alt-icons($p); + @include color-table($p); + @include color-split($p); + @include color-spotlights($p); + @include color-features($p); + } + +// Base. + + @import 'base/reset'; + @import 'base/page'; + @import 'base/typography'; + +// Component. + + @import 'components/row'; + @import 'components/box'; + @import 'components/button'; + @import 'components/form'; + @import 'components/icon'; + @import 'components/image'; + @import 'components/list'; + @import 'components/actions'; + @import 'components/icons'; + @import 'components/menu'; + @import 'components/alt-icons'; + @import 'components/section'; + @import 'components/table'; + @import 'components/split'; + @import 'components/spotlights'; + @import 'components/features'; + @import 'components/wrapper'; + +// Layout. + + @import 'layout/header'; + @import 'layout/menu'; + @import 'layout/banner'; + @import 'layout/main'; + @import 'layout/footer'; + +// Custom. + @import 'custom'; diff --git a/assets/css/fontawesome-all.min.css b/assets/css/fontawesome-all.min.css new file mode 100644 index 0000000..d934517 --- /dev/null +++ b/assets/css/fontawesome-all.min.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:normal;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900} diff --git a/assets/css/images/angular-lines-down_backup.svg b/assets/css/images/angular-lines-down_backup.svg new file mode 100644 index 0000000..0004174 --- /dev/null +++ b/assets/css/images/angular-lines-down_backup.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/css/images/angular-lines-up.svg b/assets/css/images/angular-lines-up.svg new file mode 100644 index 0000000..a5ea392 --- /dev/null +++ b/assets/css/images/angular-lines-up.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/css/images/checker-pattern.svg b/assets/css/images/checker-pattern.svg new file mode 100644 index 0000000..305b4d6 --- /dev/null +++ b/assets/css/images/checker-pattern.svg @@ -0,0 +1,17 @@ + + + + + + + + + + \ No newline at end of file diff --git a/assets/css/images/overlay.png b/assets/css/images/overlay.png new file mode 100644 index 0000000..0f8cdc8 Binary files /dev/null and b/assets/css/images/overlay.png differ diff --git a/assets/css/main.scss b/assets/css/main.scss new file mode 100644 index 0000000..ed277e4 --- /dev/null +++ b/assets/css/main.scss @@ -0,0 +1,4 @@ +--- +# Only the main Sass file needs front matter (the dashes are enough) +--- +@import "styles" diff --git a/assets/icons/favicon.ico b/assets/icons/favicon.ico new file mode 100644 index 0000000..44662af Binary files /dev/null and b/assets/icons/favicon.ico differ diff --git a/assets/images/andy-holmes-EOAKUQcsFIU-unsplash.jpg b/assets/images/andy-holmes-EOAKUQcsFIU-unsplash.jpg new file mode 100644 index 0000000..295c3ce Binary files /dev/null and b/assets/images/andy-holmes-EOAKUQcsFIU-unsplash.jpg differ diff --git a/assets/images/bg.webp b/assets/images/bg.webp new file mode 100644 index 0000000..794bea4 Binary files /dev/null and b/assets/images/bg.webp differ diff --git a/assets/images/design.webp b/assets/images/design.webp new file mode 100644 index 0000000..4a32784 Binary files /dev/null and b/assets/images/design.webp differ diff --git a/assets/images/hardware.webp b/assets/images/hardware.webp new file mode 100644 index 0000000..317fb6a Binary files /dev/null and b/assets/images/hardware.webp differ diff --git a/assets/images/hardware2.webp b/assets/images/hardware2.webp new file mode 100644 index 0000000..efa9b09 Binary files /dev/null and b/assets/images/hardware2.webp differ diff --git a/assets/images/pic01.jpg b/assets/images/pic01.jpg new file mode 100644 index 0000000..646e317 Binary files /dev/null and b/assets/images/pic01.jpg differ diff --git a/assets/images/pic02.jpg b/assets/images/pic02.jpg new file mode 100644 index 0000000..5ec5ab4 Binary files /dev/null and b/assets/images/pic02.jpg differ diff --git a/assets/images/pic03.jpg b/assets/images/pic03.jpg new file mode 100644 index 0000000..9fbd19d Binary files /dev/null and b/assets/images/pic03.jpg differ diff --git a/assets/images/pic04.jpg b/assets/images/pic04.jpg new file mode 100644 index 0000000..c7dd458 Binary files /dev/null and b/assets/images/pic04.jpg differ diff --git a/assets/images/pic05.jpg b/assets/images/pic05.jpg new file mode 100644 index 0000000..1993045 Binary files /dev/null and b/assets/images/pic05.jpg differ diff --git a/assets/images/pic06.jpg b/assets/images/pic06.jpg new file mode 100644 index 0000000..67ec82a Binary files /dev/null and b/assets/images/pic06.jpg differ diff --git a/assets/images/pic07.jpg b/assets/images/pic07.jpg new file mode 100644 index 0000000..0628368 Binary files /dev/null and b/assets/images/pic07.jpg differ diff --git a/assets/images/programming.webp b/assets/images/programming.webp new file mode 100644 index 0000000..2d59d26 Binary files /dev/null and b/assets/images/programming.webp differ diff --git a/assets/images/software.webp b/assets/images/software.webp new file mode 100644 index 0000000..bbae287 Binary files /dev/null and b/assets/images/software.webp differ diff --git a/assets/images/st_logo125.svg b/assets/images/st_logo125.svg new file mode 100644 index 0000000..8a448c7 --- /dev/null +++ b/assets/images/st_logo125.svg @@ -0,0 +1,1291 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Charles Sharpe + + + + + Charles Sharpe + + + + + Charles Sharpe + + + Charles Sharpe + https://www.sharpetronics.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/js/breakpoints.min.js b/assets/js/breakpoints.min.js new file mode 100644 index 0000000..32419cc --- /dev/null +++ b/assets/js/breakpoints.min.js @@ -0,0 +1,2 @@ +/* breakpoints.js v1.0 | @ajlkn | MIT licensed */ +var breakpoints=function(){"use strict";function e(e){t.init(e)}var t={list:null,media:{},events:[],init:function(e){t.list=e,window.addEventListener("resize",t.poll),window.addEventListener("orientationchange",t.poll),window.addEventListener("load",t.poll),window.addEventListener("fullscreenchange",t.poll)},active:function(e){var n,a,s,i,r,d,c;if(!(e in t.media)){if(">="==e.substr(0,2)?(a="gte",n=e.substr(2)):"<="==e.substr(0,2)?(a="lte",n=e.substr(2)):">"==e.substr(0,1)?(a="gt",n=e.substr(1)):"<"==e.substr(0,1)?(a="lt",n=e.substr(1)):"!"==e.substr(0,1)?(a="not",n=e.substr(1)):(a="eq",n=e),n&&n in t.list)if(i=t.list[n],Array.isArray(i)){if(r=parseInt(i[0]),d=parseInt(i[1]),isNaN(r)){if(isNaN(d))return;c=i[1].substr(String(d).length)}else c=i[0].substr(String(r).length);if(isNaN(r))switch(a){case"gte":s="screen";break;case"lte":s="screen and (max-width: "+d+c+")";break;case"gt":s="screen and (min-width: "+(d+1)+c+")";break;case"lt":s="screen and (max-width: -1px)";break;case"not":s="screen and (min-width: "+(d+1)+c+")";break;default:s="screen and (max-width: "+d+c+")"}else if(isNaN(d))switch(a){case"gte":s="screen and (min-width: "+r+c+")";break;case"lte":s="screen";break;case"gt":s="screen and (max-width: -1px)";break;case"lt":s="screen and (max-width: "+(r-1)+c+")";break;case"not":s="screen and (max-width: "+(r-1)+c+")";break;default:s="screen and (min-width: "+r+c+")"}else switch(a){case"gte":s="screen and (min-width: "+r+c+")";break;case"lte":s="screen and (max-width: "+d+c+")";break;case"gt":s="screen and (min-width: "+(d+1)+c+")";break;case"lt":s="screen and (max-width: "+(r-1)+c+")";break;case"not":s="screen and (max-width: "+(r-1)+c+"), screen and (min-width: "+(d+1)+c+")";break;default:s="screen and (min-width: "+r+c+") and (max-width: "+d+c+")"}}else s="("==i.charAt(0)?"screen and "+i:i;t.media[e]=!!s&&s}return t.media[e]!==!1&&window.matchMedia(t.media[e]).matches},on:function(e,n){t.events.push({query:e,handler:n,state:!1}),t.active(e)&&n()},poll:function(){var e,n;for(e=0;e0:!!("ontouchstart"in window),e.mobile="wp"==e.os||"android"==e.os||"ios"==e.os||"bb"==e.os}};return e.init(),e}();!function(e,n){"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?module.exports=n():e.browser=n()}(this,function(){return browser}); diff --git a/assets/js/jquery.min.js b/assets/js/jquery.min.js new file mode 100644 index 0000000..a1c07fd --- /dev/null +++ b/assets/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 01){for(var r=0;r=i&&o>=t};break;case"bottom":h=function(t,e,n,i,o){return n>=i&&o>=n};break;case"middle":h=function(t,e,n,i,o){return e>=i&&o>=e};break;case"top-only":h=function(t,e,n,i,o){return i>=t&&n>=i};break;case"bottom-only":h=function(t,e,n,i,o){return n>=o&&o>=t};break;default:case"default":h=function(t,e,n,i,o){return n>=i&&o>=t}}return c=function(t){var i,o,l,s,r,a,u=this.state,h=!1,c=this.$element.offset();i=n.height(),o=t+i/2,l=t+i,s=this.$element.outerHeight(),r=c.top+e(this.options.top,s,i),a=c.top+s-e(this.options.bottom,s,i),h=this.test(t,o,l,r,a),h!=u&&(this.state=h,h?this.options.enter&&this.options.enter.apply(this.element):this.options.leave&&this.options.leave.apply(this.element)),this.options.scroll&&this.options.scroll.apply(this.element,[(o-r)/(a-r)])},p={id:a,options:u,test:h,handler:c,state:null,element:this,$element:s,timeoutId:null},o[a]=p,s.data("_scrollexId",p.id),p.options.initialize&&p.options.initialize.apply(this),s},jQuery.fn.unscrollex=function(){var e=t(this);if(0==this.length)return e;if(this.length>1){for(var n=0;n1){for(o=0;o') + .appendTo($body) + .panel({ + delay: 500, + hideOnClick: true, + hideOnSwipe: true, + resetScroll: true, + resetForms: true, + side: 'right' + }); + + // Header. + $window.on('resize', function() { $window.trigger('scroll'); }); + + $body.scrollex({ + top: '25vh', + mode: 'top', + enter: function() { $header.addClass('alt'); }, + leave: function() { $header.removeClass('alt'); } + }); + +})(jQuery); diff --git a/assets/js/util.js b/assets/js/util.js new file mode 100644 index 0000000..bdb8e9f --- /dev/null +++ b/assets/js/util.js @@ -0,0 +1,587 @@ +(function($) { + + /** + * Generate an indented list of links from a nav. Meant for use with panel(). + * @return {jQuery} jQuery object. + */ + $.fn.navList = function() { + + var $this = $(this); + $a = $this.find('a'), + b = []; + + $a.each(function() { + + var $this = $(this), + indent = Math.max(0, $this.parents('li').length - 1), + href = $this.attr('href'), + target = $this.attr('target'); + + b.push( + '' + + '' + + $this.text() + + '' + ); + + }); + + return b.join(''); + + }; + + /** + * Panel-ify an element. + * @param {object} userConfig User config. + * @return {jQuery} jQuery object. + */ + $.fn.panel = function(userConfig) { + + // No elements? + if (this.length == 0) + return $this; + + // Multiple elements? + if (this.length > 1) { + + for (var i=0; i < this.length; i++) + $(this[i]).panel(userConfig); + + return $this; + + } + + // Vars. + var $this = $(this), + $body = $('body'), + $window = $(window), + id = $this.attr('id'), + config; + + // Config. + config = $.extend({ + + // Delay. + delay: 0, + + // Hide panel on link click. + hideOnClick: false, + + // Hide panel on escape keypress. + hideOnEscape: false, + + // Hide panel on swipe. + hideOnSwipe: false, + + // Reset scroll position on hide. + resetScroll: false, + + // Reset forms on hide. + resetForms: false, + + // Side of viewport the panel will appear. + side: null, + + // Target element for "class". + target: $this, + + // Class to toggle. + visibleClass: 'visible' + + }, userConfig); + + // Expand "target" if it's not a jQuery object already. + if (typeof config.target != 'jQuery') + config.target = $(config.target); + + // Panel. + + // Methods. + $this._hide = function(event) { + + // Already hidden? Bail. + if (!config.target.hasClass(config.visibleClass)) + return; + + // If an event was provided, cancel it. + if (event) { + + event.preventDefault(); + event.stopPropagation(); + + } + + // Hide. + config.target.removeClass(config.visibleClass); + + // Post-hide stuff. + window.setTimeout(function() { + + // Reset scroll position. + if (config.resetScroll) + $this.scrollTop(0); + + // Reset forms. + if (config.resetForms) + $this.find('form').each(function() { + this.reset(); + }); + + }, config.delay); + + }; + + // Vendor fixes. + $this + .css('-ms-overflow-style', '-ms-autohiding-scrollbar') + .css('-webkit-overflow-scrolling', 'touch'); + + // Hide on click. + if (config.hideOnClick) { + + $this.find('a') + .css('-webkit-tap-highlight-color', 'rgba(0,0,0,0)'); + + $this + .on('click', 'a', function(event) { + + var $a = $(this), + href = $a.attr('href'), + target = $a.attr('target'); + + if (!href || href == '#' || href == '' || href == '#' + id) + return; + + // Cancel original event. + event.preventDefault(); + event.stopPropagation(); + + // Hide panel. + $this._hide(); + + // Redirect to href. + window.setTimeout(function() { + + if (target == '_blank') + window.open(href); + else + window.location.href = href; + + }, config.delay + 10); + + }); + + } + + // Event: Touch stuff. + $this.on('touchstart', function(event) { + + $this.touchPosX = event.originalEvent.touches[0].pageX; + $this.touchPosY = event.originalEvent.touches[0].pageY; + + }) + + $this.on('touchmove', function(event) { + + if ($this.touchPosX === null + || $this.touchPosY === null) + return; + + var diffX = $this.touchPosX - event.originalEvent.touches[0].pageX, + diffY = $this.touchPosY - event.originalEvent.touches[0].pageY, + th = $this.outerHeight(), + ts = ($this.get(0).scrollHeight - $this.scrollTop()); + + // Hide on swipe? + if (config.hideOnSwipe) { + + var result = false, + boundary = 20, + delta = 50; + + switch (config.side) { + + case 'left': + result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX > delta); + break; + + case 'right': + result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX < (-1 * delta)); + break; + + case 'top': + result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY > delta); + break; + + case 'bottom': + result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY < (-1 * delta)); + break; + + default: + break; + + } + + if (result) { + + $this.touchPosX = null; + $this.touchPosY = null; + $this._hide(); + + return false; + + } + + } + + // Prevent vertical scrolling past the top or bottom. + if (($this.scrollTop() < 0 && diffY < 0) + || (ts > (th - 2) && ts < (th + 2) && diffY > 0)) { + + event.preventDefault(); + event.stopPropagation(); + + } + + }); + + // Event: Prevent certain events inside the panel from bubbling. + $this.on('click touchend touchstart touchmove', function(event) { + event.stopPropagation(); + }); + + // Event: Hide panel if a child anchor tag pointing to its ID is clicked. + $this.on('click', 'a[href="#' + id + '"]', function(event) { + + event.preventDefault(); + event.stopPropagation(); + + config.target.removeClass(config.visibleClass); + + }); + + // Body. + + // Event: Hide panel on body click/tap. + $body.on('click touchend', function(event) { + $this._hide(event); + }); + + // Event: Toggle. + $body.on('click', 'a[href="#' + id + '"]', function(event) { + + event.preventDefault(); + event.stopPropagation(); + + config.target.toggleClass(config.visibleClass); + + }); + + // Window. + + // Event: Hide on ESC. + if (config.hideOnEscape) + $window.on('keydown', function(event) { + + if (event.keyCode == 27) + $this._hide(event); + + }); + + return $this; + + }; + + /** + * Apply "placeholder" attribute polyfill to one or more forms. + * @return {jQuery} jQuery object. + */ + $.fn.placeholder = function() { + + // Browser natively supports placeholders? Bail. + if (typeof (document.createElement('input')).placeholder != 'undefined') + return $(this); + + // No elements? + if (this.length == 0) + return $this; + + // Multiple elements? + if (this.length > 1) { + + for (var i=0; i < this.length; i++) + $(this[i]).placeholder(); + + return $this; + + } + + // Vars. + var $this = $(this); + + // Text, TextArea. + $this.find('input[type=text],textarea') + .each(function() { + + var i = $(this); + + if (i.val() == '' + || i.val() == i.attr('placeholder')) + i + .addClass('polyfill-placeholder') + .val(i.attr('placeholder')); + + }) + .on('blur', function() { + + var i = $(this); + + if (i.attr('name').match(/-polyfill-field$/)) + return; + + if (i.val() == '') + i + .addClass('polyfill-placeholder') + .val(i.attr('placeholder')); + + }) + .on('focus', function() { + + var i = $(this); + + if (i.attr('name').match(/-polyfill-field$/)) + return; + + if (i.val() == i.attr('placeholder')) + i + .removeClass('polyfill-placeholder') + .val(''); + + }); + + // Password. + $this.find('input[type=password]') + .each(function() { + + var i = $(this); + var x = $( + $('
') + .append(i.clone()) + .remove() + .html() + .replace(/type="password"/i, 'type="text"') + .replace(/type=password/i, 'type=text') + ); + + if (i.attr('id') != '') + x.attr('id', i.attr('id') + '-polyfill-field'); + + if (i.attr('name') != '') + x.attr('name', i.attr('name') + '-polyfill-field'); + + x.addClass('polyfill-placeholder') + .val(x.attr('placeholder')).insertAfter(i); + + if (i.val() == '') + i.hide(); + else + x.hide(); + + i + .on('blur', function(event) { + + event.preventDefault(); + + var x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]'); + + if (i.val() == '') { + + i.hide(); + x.show(); + + } + + }); + + x + .on('focus', function(event) { + + event.preventDefault(); + + var i = x.parent().find('input[name=' + x.attr('name').replace('-polyfill-field', '') + ']'); + + x.hide(); + + i + .show() + .focus(); + + }) + .on('keypress', function(event) { + + event.preventDefault(); + x.val(''); + + }); + + }); + + // Events. + $this + .on('submit', function() { + + $this.find('input[type=text],input[type=password],textarea') + .each(function(event) { + + var i = $(this); + + if (i.attr('name').match(/-polyfill-field$/)) + i.attr('name', ''); + + if (i.val() == i.attr('placeholder')) { + + i.removeClass('polyfill-placeholder'); + i.val(''); + + } + + }); + + }) + .on('reset', function(event) { + + event.preventDefault(); + + $this.find('select') + .val($('option:first').val()); + + $this.find('input,textarea') + .each(function() { + + var i = $(this), + x; + + i.removeClass('polyfill-placeholder'); + + switch (this.type) { + + case 'submit': + case 'reset': + break; + + case 'password': + i.val(i.attr('defaultValue')); + + x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]'); + + if (i.val() == '') { + i.hide(); + x.show(); + } + else { + i.show(); + x.hide(); + } + + break; + + case 'checkbox': + case 'radio': + i.attr('checked', i.attr('defaultValue')); + break; + + case 'text': + case 'textarea': + i.val(i.attr('defaultValue')); + + if (i.val() == '') { + i.addClass('polyfill-placeholder'); + i.val(i.attr('placeholder')); + } + + break; + + default: + i.val(i.attr('defaultValue')); + break; + + } + }); + + }); + + return $this; + + }; + + /** + * Moves elements to/from the first positions of their respective parents. + * @param {jQuery} $elements Elements (or selector) to move. + * @param {bool} condition If true, moves elements to the top. Otherwise, moves elements back to their original locations. + */ + $.prioritize = function($elements, condition) { + + var key = '__prioritize'; + + // Expand $elements if it's not already a jQuery object. + if (typeof $elements != 'jQuery') + $elements = $($elements); + + // Step through elements. + $elements.each(function() { + + var $e = $(this), $p, + $parent = $e.parent(); + + // No parent? Bail. + if ($parent.length == 0) + return; + + // Not moved? Move it. + if (!$e.data(key)) { + + // Condition is false? Bail. + if (!condition) + return; + + // Get placeholder (which will serve as our point of reference for when this element needs to move back). + $p = $e.prev(); + + // Couldn't find anything? Means this element's already at the top, so bail. + if ($p.length == 0) + return; + + // Move element to top of parent. + $e.prependTo($parent); + + // Mark element as moved. + $e.data(key, $p); + + } + + // Moved already? + else { + + // Condition is true? Bail. + if (condition) + return; + + $p = $e.data(key); + + // Move element back to its original location (using our placeholder). + $e.insertAfter($p); + + // Unmark element as moved. + $e.removeData(key); + + } + + }); + + }; + +})(jQuery); \ No newline at end of file diff --git a/assets/webfonts/fa-brands-400.woff b/assets/webfonts/fa-brands-400.woff new file mode 100644 index 0000000..a2d8025 Binary files /dev/null and b/assets/webfonts/fa-brands-400.woff differ diff --git a/assets/webfonts/fa-brands-400.woff2 b/assets/webfonts/fa-brands-400.woff2 new file mode 100644 index 0000000..e27b0bf Binary files /dev/null and b/assets/webfonts/fa-brands-400.woff2 differ diff --git a/assets/webfonts/fa-regular-400.woff b/assets/webfonts/fa-regular-400.woff new file mode 100644 index 0000000..43b1a9a Binary files /dev/null and b/assets/webfonts/fa-regular-400.woff differ diff --git a/assets/webfonts/fa-regular-400.woff2 b/assets/webfonts/fa-regular-400.woff2 new file mode 100644 index 0000000..b9344a7 Binary files /dev/null and b/assets/webfonts/fa-regular-400.woff2 differ diff --git a/assets/webfonts/fa-solid-900.woff b/assets/webfonts/fa-solid-900.woff new file mode 100644 index 0000000..77c1786 Binary files /dev/null and b/assets/webfonts/fa-solid-900.woff differ diff --git a/assets/webfonts/fa-solid-900.woff2 b/assets/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000..e30fb67 Binary files /dev/null and b/assets/webfonts/fa-solid-900.woff2 differ diff --git a/collections/_drafts/2017-08-22-telemetry.md b/collections/_drafts/2017-08-22-telemetry.md new file mode 100644 index 0000000..3450c12 --- /dev/null +++ b/collections/_drafts/2017-08-22-telemetry.md @@ -0,0 +1,19 @@ +--- +layout: journal_single + +author: Charles #case sensitive, please use capitalization for names. + +title: New Research Center +sub_heading: Integer posuere urna mollis ornare vel eu leo. + +banner_image: "/assets/images/pic01.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Engineering +tag: Research + + +--- +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. diff --git a/collections/_drafts/2017-09-25-introduction.md b/collections/_drafts/2017-09-25-introduction.md new file mode 100644 index 0000000..e52e63e --- /dev/null +++ b/collections/_drafts/2017-09-25-introduction.md @@ -0,0 +1,19 @@ +--- +title: Welcome to the SharpeTronics Demo Site!s +date: 2017-09-25T09:09:13.000+00:00 +related_posts: +- _posts/2017-02-12-modern.md +- _posts/2017-08-01-welcome.md +sub_heading: An introduction to SharpeTronics +tags: +- Demo +- Forestry +layout: journal_single +banner_image: '' + +--- +Welcome to the Belkirk College of Engineering Demo Site! + +This site allows you to explore SharpeTronics's features and functionality, and is **not** meant to be used as a production website. To get started building your own site, please see our [documentation](https://sharpetronics.com/help). + +Thank you for choosing to demo SharpeTronics! diff --git a/collections/_drafts/2020-02-12-geometry.md b/collections/_drafts/2020-02-12-geometry.md new file mode 100644 index 0000000..3ccb55a --- /dev/null +++ b/collections/_drafts/2020-02-12-geometry.md @@ -0,0 +1,20 @@ +--- +layout: journal_single + +author: Charles #case sensitive, please use capitalization for names. + +title: Geometry in Fundamental Singularities +sub_heading: Nullam quis risus eget urna mollis ornare vel eu leo. + +banner_image: "/assets/images/pic03.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Engineering +tag: Engineering + +--- +Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. diff --git a/collections/_drafts/2020-03-21-another-post.md b/collections/_drafts/2020-03-21-another-post.md new file mode 100644 index 0000000..5fc36e2 --- /dev/null +++ b/collections/_drafts/2020-03-21-another-post.md @@ -0,0 +1,18 @@ +--- +layout: journal_single + +author: Charles #case sensitive, please use capitalization for names. + +title: Meditation in the Modern Age +sub_heading: A post sub_heading for viewing pleasure + +banner_image: "/assets/images/pic02.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Research +tag: Demo + +--- +Mauris neque quam, fermentum ut nisl vitae, convallis maximus nisl. Sed mattis nunc id lorem euismod placerat. Vivamus porttitor magna enim, ac accumsan tortor cursus at. Phasellus sed ultricies mi non congue ullam corper. Praesent tincidunt sed tellus ut rutrum. Sed vitae justo condimentum, porta lectus vitae, ultricies congue gravida diam non fringilla. + +Nunc quis dui scelerisque, scelerisque urna ut, dapibus orci. Sed vitae condimentum lectus, ut imperdiet quam. Maecenas in justo ut nulla aliquam sodales vel at ligula. Sed blandit diam odio, sed fringilla lectus molestie sit amet. Praesent eu tortor viverra lorem mattis pulvinar feugiat in turpis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce ullamcorper tellus sit amet mattis dignissim. Phasellus ut metus ligula. Curabitur nec leo diff --git a/collections/_drafts/2020-08-22-artistic-creativity.md b/collections/_drafts/2020-08-22-artistic-creativity.md new file mode 100644 index 0000000..5e7bff9 --- /dev/null +++ b/collections/_drafts/2020-08-22-artistic-creativity.md @@ -0,0 +1,30 @@ +--- +layout: journal_single + +author: Charles #case sensitive, please use capitalization for names. + +title: Artistic Creativity with Minimalism +sub_heading: Integer posuere urna mollis ornare vel eu leo. + +banner_image: "/assets/images/pic05.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Research +tag: Research + +--- +![My helpful screenshot](/assets/images/profile-pic.jpg) + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. diff --git a/collections/_legal/2020-02-03-privacy-policy.md b/collections/_legal/2020-02-03-privacy-policy.md new file mode 100644 index 0000000..b565b56 --- /dev/null +++ b/collections/_legal/2020-02-03-privacy-policy.md @@ -0,0 +1,107 @@ +--- +layout: journal_single + +author: Charles #case sensitive, please use capitalization for names. + +title: Privacy Policy +sub_heading: Maecenas faucibus mollis interdum. Vivamus sagittis lacus + +banner_image: "/assets/images/pic01.jpg" #Size of banner_image 840x341 +banner_image_alt: "privacy policy" + +category: Legal +tag: Legal + +--- +

Privacy Policy for SharpeTronics

+ +

At SharpeTronics, accessible from https://www.sharpetronics.com, one of our main priorities is the privacy of our visitors. This Privacy Policy document contains types of information that is collected and recorded by SharpeTronics and how we use it.

+ +

If you have additional questions or require more information about our Privacy Policy, do not hesitate to contact us.

+ +

This Privacy Policy applies only to our online activities and is valid for visitors to our website with regards to the information that they shared and/or collect in SharpeTronics. This policy is not applicable to any information collected offline or via channels other than this website.

+ +

Consent

+ +

By using our website, you hereby consent to our Privacy Policy and agree to its terms.

+ +

Information we collect

+ +

The personal information that you are asked to provide, and the reasons why you are asked to provide it, will be made clear to you at the point we ask you to provide your personal information.

+

If you contact us directly, we may receive additional information about you such as your name, email address, phone number, the contents of the message and/or attachments you may send us, and any other information you may choose to provide.

+

When you register for an Account, we may ask for your contact information, including items such as name, company name, address, email address, and telephone number.

+ +

How we use your information

+ +

We use the information we collect in various ways, including to:

+ +
    +
  • Provide, operate, and maintain our webste
  • +
  • Improve, personalize, and expand our webste
  • +
  • Understand and analyze how you use our webste
  • +
  • Develop new products, services, features, and functionality
  • +
  • Communicate with you, either directly or through one of our partners, including for customer service, to provide you with updates and other information relating to the webste, and for marketing and promotional purposes
  • +
  • Send you emails
  • +
  • Find and prevent fraud
  • +
+ +

Log Files

+ +

SharpeTronics follows a standard procedure of using log files. These files log visitors when they visit websites. All hosting companies do this and a part of hosting services' analytics. The information collected by log files include internet protocol (IP) addresses, browser type, Internet Service Provider (ISP), date and time stamp, referring/exit pages, and possibly the number of clicks. These are not linked to any information that is personally identifiable. The purpose of the information is for analyzing trends, administering the site, tracking users' movement on the website, and gathering demographic information.

+ +

Cookies and Web Beacons

+ +

Like any other website, SharpeTronics uses 'cookies'. These cookies are used to store information including visitors' preferences, and the pages on the website that the visitor accessed or visited. The information is used to optimize the users' experience by customizing our web page content based on visitors' browser type and/or other information.

+ +

For more general information on cookies, please read "What Are Cookies" from Cookie Consent.

+ + +

Our Advertising Partners

+ +

Some of advertisers on our site may use cookies and web beacons. Our advertising partners are listed below. Each of our advertising partners has their own Privacy Policy for their policies on user data. For easier access, we hyperlinked to their Privacy Policies below.

+ + + +

Advertising Partners Privacy Policies

+ +

You may consult this list to find the Privacy Policy for each of the advertising partners of SharpeTronics.

+ +

Third-party ad servers or ad networks uses technologies like cookies, JavaScript, or Web Beacons that are used in their respective advertisements and links that appear on SharpeTronics, which are sent directly to users' browser. They automatically receive your IP address when this occurs. These technologies are used to measure the effectiveness of their advertising campaigns and/or to personalize the advertising content that you see on websites that you visit.

+ +

Note that SharpeTronics has no access to or control over these cookies that are used by third-party advertisers.

+ +

Third Party Privacy Policies

+ +

SharpeTronics's Privacy Policy does not apply to other advertisers or websites. Thus, we are advising you to consult the respective Privacy Policies of these third-party ad servers for more detailed information. It may include their practices and instructions about how to opt-out of certain options.

+ +

You can choose to disable cookies through your individual browser options. To know more detailed information about cookie management with specific web browsers, it can be found at the browsers' respective websites.

+ +

CCPA Privacy Rights (Do Not Sell My Personal Information)

+ +

Under the CCPA, among other rights, California consumers have the right to:

+

Request that a business that collects a consumer's personal data disclose the categories and specific pieces of personal data that a business has collected about consumers.

+

Request that a business delete any personal data about the consumer that a business has collected.

+

Request that a business that sells a consumer's personal data, not sell the consumer's personal data.

+

If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us.

+ +

GDPR Data Protection Rights

+ +

We would like to make sure you are fully aware of all of your data protection rights. Every user is entitled to the following:

+

The right to access – You have the right to request copies of your personal data. We may charge you a small fee for this service.

+

The right to rectification – You have the right to request that we correct any information you believe is inaccurate. You also have the right to request that we complete the information you believe is incomplete.

+

The right to erasure – You have the right to request that we erase your personal data, under certain conditions.

+

The right to restrict processing – You have the right to request that we restrict the processing of your personal data, under certain conditions.

+

The right to object to processing – You have the right to object to our processing of your personal data, under certain conditions.

+

The right to data portability – You have the right to request that we transfer the data that we have collected to another organization, or directly to you, under certain conditions.

+

If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us.

+ +

Children's Information

+ +

Another part of our priority is adding protection for children while using the internet. We encourage parents and guardians to observe, participate in, and/or monitor and guide their online activity.

+ +

SharpeTronics does not knowingly collect any Personal Identifiable Information from children under the age of 13. If you think that your child provided this kind of information on our website, we strongly encourage you to contact us immediately and we will do our best efforts to promptly remove such information from our records.

diff --git a/collections/_legal/2020-02-03-terms-conditions.md b/collections/_legal/2020-02-03-terms-conditions.md new file mode 100644 index 0000000..62597dc --- /dev/null +++ b/collections/_legal/2020-02-03-terms-conditions.md @@ -0,0 +1,138 @@ +--- +layout: journal_single + +author: Charles #case sensitive, please use capitalization for names. + +title: Terms & Conditions +sub_heading: Maecenas faucibus mollis interdum. Vivamus sagittis lacus + +banner_image: "/assets/images/pic01.jpg" #Size of banner_image 840x341 +banner_image_alt: "terms and conditions" + +category: Legal +tag: Legal + +--- +

Terms and Conditions

+ +

Welcome to SharpeTronics!

+ +

These terms and conditions outline the rules and regulations for the use of SharpeTronics's Website, located at https://www.sharpetronics.com.

+ +

By accessing this website we assume you accept these terms and conditions. Do not continue to use SharpeTronics if you do not agree to take all of the terms and conditions stated on this page.

+ +

The following terminology applies to these Terms and Conditions, Privacy Statement and Disclaimer Notice and all Agreements: "Client", "You" and "Your" refers to you, the person log on this website and compliant to the Company’s terms and conditions. "The Company", "Ourselves", "We", "Our" and "Us", refers to our Company. "Party", "Parties", or "Us", refers to both the Client and ourselves. All terms refer to the offer, acceptance and consideration of payment necessary to undertake the process of our assistance to the Client in the most appropriate manner for the express purpose of meeting the Client’s needs in respect of provision of the Company’s stated services, in accordance with and subject to, prevailing law of Netherlands. Any use of the above terminology or other words in the singular, plural, capitalization and/or he/she or they, are taken as interchangeable and therefore as referring to same.

+ +

Cookies

+ +

We employ the use of cookies. By accessing SharpeTronics, you agreed to use cookies in agreement with the SharpeTronics's Privacy Policy.

+ +

Most interactive websites use cookies to let us retrieve the user’s details for each visit. Cookies are used by our website to enable the functionality of certain areas to make it easier for people visiting our website. Some of our affiliate/advertising partners may also use cookies.

+ +

License

+ +

Unless otherwise stated, SharpeTronics and/or its licensors own the intellectual property rights for all material on SharpeTronics. All intellectual property rights are reserved. You may access this from SharpeTronics for your own personal use subjected to restrictions set in these terms and conditions.

+ +

You must not:

+
    +
  • Republish material from SharpeTronics
  • +
  • Sell, rent or sub-license material from SharpeTronics
  • +
  • Reproduce, duplicate or copy material from SharpeTronics
  • +
  • Redistribute content from SharpeTronics
  • +
+ +

This Agreement shall begin on the date hereof.

+ +

Parts of this website offer an opportunity for users to post and exchange opinions and information in certain areas of the website. SharpeTronics does not filter, edit, publish or review Comments prior to their presence on the website. Comments do not reflect the views and opinions of SharpeTronics,its agents and/or affiliates. Comments reflect the views and opinions of the person who post their views and opinions. To the extent permitted by applicable laws, SharpeTronics shall not be liable for the Comments or for any liability, damages or expenses caused and/or suffered as a result of any use of and/or posting of and/or appearance of the Comments on this website.

+ +

SharpeTronics reserves the right to monitor all Comments and to remove any Comments which can be considered inappropriate, offensive or causes breach of these Terms and Conditions.

+ +

You warrant and represent that:

+ +
    +
  • You are entitled to post the Comments on our website and have all necessary licenses and consents to do so;
  • +
  • The Comments do not invade any intellectual property right, including without limitation copyright, patent or trademark of any third party;
  • +
  • The Comments do not contain any defamatory, libelous, offensive, indecent or otherwise unlawful material which is an invasion of privacy
  • +
  • The Comments will not be used to solicit or promote business or custom or present commercial activities or unlawful activity.
  • +
+ +

You hereby grant SharpeTronics a non-exclusive license to use, reproduce, edit and authorize others to use, reproduce and edit any of your Comments in any and all forms, formats or media.

+ +

Hyperlinking to our Content

+ +

The following organizations may link to our Website without prior written approval:

+ +
    +
  • Government agencies;
  • +
  • Search engines;
  • +
  • News organizations;
  • +
  • Online directory distributors may link to our Website in the same manner as they hyperlink to the Websites of other listed businesses; and
  • +
  • System wide Accredited Businesses except soliciting non-profit organizations, charity shopping malls, and charity fundraising groups which may not hyperlink to our Web site.
  • +
+ +

These organizations may link to our home page, to publications or to other Website information so long as the link: (a) is not in any way deceptive; (b) does not falsely imply sponsorship, endorsement or approval of the linking party and its products and/or services; and (c) fits within the context of the linking party’s site.

+ +

We may consider and approve other link requests from the following types of organizations:

+ +
    +
  • commonly-known consumer and/or business information sources;
  • +
  • dot.com community sites;
  • +
  • associations or other groups representing charities;
  • +
  • online directory distributors;
  • +
  • internet portals;
  • +
  • accounting, law and consulting firms; and
  • +
  • educational institutions and trade associations.
  • +
+ +

We will approve link requests from these organizations if we decide that: (a) the link would not make us look unfavorably to ourselves or to our accredited businesses; (b) the organization does not have any negative records with us; (c) the benefit to us from the visibility of the hyperlink compensates the absence of SharpeTronics; and (d) the link is in the context of general resource information.

+ +

These organizations may link to our home page so long as the link: (a) is not in any way deceptive; (b) does not falsely imply sponsorship, endorsement or approval of the linking party and its products or services; and (c) fits within the context of the linking party’s site.

+ +

If you are one of the organizations listed in paragraph 2 above and are interested in linking to our website, you must inform us by sending an e-mail to SharpeTronics. Please include your name, your organization name, contact information as well as the URL of your site, a list of any URLs from which you intend to link to our Website, and a list of the URLs on our site to which you would like to link. Wait 2-3 weeks for a response.

+ +

Approved organizations may hyperlink to our Website as follows:

+ +
    +
  • By use of our corporate name; or
  • +
  • By use of the uniform resource locator being linked to; or
  • +
  • By use of any other description of our Website being linked to that makes sense within the context and format of content on the linking party’s site.
  • +
+ +

No use of SharpeTronics's logo or other artwork will be allowed for linking absent a trademark license agreement.

+ +

iFrames

+ +

Without prior approval and written permission, you may not create frames around our Webpages that alter in any way the visual presentation or appearance of our Website.

+ +

Content Liability

+ +

We shall not be hold responsible for any content that appears on your Website. You agree to protect and defend us against all claims that is rising on your Website. No link(s) should appear on any Website that may be interpreted as libelous, obscene or criminal, or which infringes, otherwise violates, or advocates the infringement or other violation of, any third party rights.

+ +

Your Privacy

+ +

Please read Privacy Policy

+ +

Reservation of Rights

+ +

We reserve the right to request that you remove all links or any particular link to our Website. You approve to immediately remove all links to our Website upon request. We also reserve the right to amen these terms and conditions and it’s linking policy at any time. By continuously linking to our Website, you agree to be bound to and follow these linking terms and conditions.

+ +

Removal of links from our website

+ +

If you find any link on our Website that is offensive for any reason, you are free to contact and inform us any moment. We will consider requests to remove links but we are not obligated to or so or to respond to you directly.

+ +

We do not ensure that the information on this website is correct, we do not warrant its completeness or accuracy; nor do we promise to ensure that the website remains available or that the material on the website is kept up to date.

+ +

Disclaimer

+ +

To the maximum extent permitted by applicable law, we exclude all representations, warranties and conditions relating to our website and the use of this website. Nothing in this disclaimer will:

+ +
    +
  • limit or exclude our or your liability for death or personal injury;
  • +
  • limit or exclude our or your liability for fraud or fraudulent misrepresentation;
  • +
  • limit any of our or your liabilities in any way that is not permitted under applicable law; or
  • +
  • exclude any of our or your liabilities that may not be excluded under applicable law.
  • +
+ +

The limitations and prohibitions of liability set in this Section and elsewhere in this disclaimer: (a) are subject to the preceding paragraph; and (b) govern all liabilities arising under the disclaimer, including liabilities arising in contract, in tort and for breach of statutory duty.

+ +

As long as the website and the information and services on the website are provided free of charge, we will not be liable for any loss or damage of any nature.

diff --git a/collections/_posts/2017-02-03-robotics.md b/collections/_posts/2017-02-03-robotics.md new file mode 100644 index 0000000..ff23c03 --- /dev/null +++ b/collections/_posts/2017-02-03-robotics.md @@ -0,0 +1,20 @@ +--- +layout: journal_single + +author: Charles #case sensitive, please use capitalization for names. + +title: Welcome Home You +sub_heading: Maecenas faucibus mollis interdum. Vivamus sagittis lacus + +banner_image: "/assets/images/pic01.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Partnerships +tag: Partnerships + +--- +Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. diff --git a/collections/_posts/2017-02-03-teleportation.md b/collections/_posts/2017-02-03-teleportation.md new file mode 100644 index 0000000..46b4f83 --- /dev/null +++ b/collections/_posts/2017-02-03-teleportation.md @@ -0,0 +1,20 @@ +--- +layout: journal_single + +author: Charles #case sensitive, please use capitalization for names. + +title: Welcome Home YOU +sub_heading: A sub_heading for your viewing pleasure + +banner_image: "/assets/images/pic02.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Partnerships +tag: Partnerships + +--- +Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. diff --git a/collections/_posts/2017-02-12-modern.md b/collections/_posts/2017-02-12-modern.md new file mode 100644 index 0000000..f6e8a32 --- /dev/null +++ b/collections/_posts/2017-02-12-modern.md @@ -0,0 +1,20 @@ +--- +layout: journal_single + +author: Charles #case sensitive, please use capitalization for names. + +title: Modern Engineering 2nd Edition +sub_heading: Nullam quis risus eget urna mollis ornare vel eu leo. + +banner_image: "/assets/images/pic01.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Engineering +tag: Engineering + +--- +Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. diff --git a/collections/_posts/2017-08-01-welcome.md b/collections/_posts/2017-08-01-welcome.md new file mode 100644 index 0000000..d136771 --- /dev/null +++ b/collections/_posts/2017-08-01-welcome.md @@ -0,0 +1,20 @@ +--- +layout: journal_single + +author: Charles #case sensitive, please use capitalization for names. + +title: New Industry Partner +sub_heading: Maecenas faucibus mollis interdum. Vivamus sagittis lacus + +banner_image: "/assets/images/pic01.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Engineering +tag: Partnerships + +--- +Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. diff --git a/collections/_posts/2017-08-22-research.md b/collections/_posts/2017-08-22-research.md new file mode 100644 index 0000000..26f4c95 --- /dev/null +++ b/collections/_posts/2017-08-22-research.md @@ -0,0 +1,19 @@ +--- +layout: journal_single + +author: Charles #case sensitive, please use capitalization for names. + +title: New Research Center +sub_heading: Integer posuere urna mollis ornare vel eu leo. + +banner_image: "/assets/images/pic02.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Engineering +tag: Research + + +--- +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. diff --git a/collections/_posts/2021-01-3-sharpetronics-welcomes-you.md b/collections/_posts/2021-01-3-sharpetronics-welcomes-you.md new file mode 100644 index 0000000..91a39a2 --- /dev/null +++ b/collections/_posts/2021-01-3-sharpetronics-welcomes-you.md @@ -0,0 +1,27 @@ +--- +layout: journal_single + +author: Charles #case sensitive, please use capitalization for names. + +title: Welcome To An Appalachian Technology Company +sub_heading: Where light travels at high altitudes. + +banner_image: "/uploads/2021/wv-seneca-rocks-sky.webp" #Size of banner_image 840x341 +banner_image_alt: "WV Sky Seneca Rocks" + +category: Company +tag: General +--- +Welcome to SharpeTronics, where light travels at high altitudes. We are a mountain made company in the Appalachians of West Virginia that strives with software and hardware technologies. We are statewide leaders in our area of expertise and invite you to support local business. + +Our mission is to enable a modern web architecture that empowers the user and enables accessibility for both beginners and experts. We are a technology business that challenges the status quo of web development and shares technical knowledge for both local and remote stations. + +Our commitment to you is quality satisfaction, affordable and lightweight performance for worldwide availability with no strings attached. + +We provide solutions that create resilient, secure and portable online infrastructure built to last the future, while enabling straight-forward seamless integration's for happy developers and editors alike. + +We say NO to the complex insecurities and inaccessible culture created around hefty JavaScript frameworks like Angular, React or heavy database integration's like WordPress or Joomla. These structures create more resistance than needed and end up crafting solutions that are complicated, costly and unfriendly. + +Our web stack delivers headless content management, worldwide availability, resiliency, accessibility and scalability, while maintaining simplicity, affordability and lightning performance. We remove unneeded barriers and strengthen connections between the user and developer. + +Some keywords that are associated with our software stack include: JAMstack, progressive web apps (PWA), content management systems (CMS), ecommerce, newsletters and static websites. If you are eager to learn, get in touch or join our team, please contact us via email. We are available 5 days a week Monday - Friday. diff --git a/collections/_products/2015-02-03-hat.md b/collections/_products/2015-02-03-hat.md new file mode 100644 index 0000000..1e46415 --- /dev/null +++ b/collections/_products/2015-02-03-hat.md @@ -0,0 +1,22 @@ +--- +layout: shop_single + +featured: 0 #starred, featured or simple for product pages display sections. + +author: Charles #case sensitive, please use capitalization for names. + +title: Our Most Recent Rest Product Title +sub_heading: Maecenas faucibus mollis interdum. Vivamus sagittis lacus + +banner_image: "/assets/images/pic02.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Product +tag: Electronics + +--- +Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. diff --git a/collections/_products/2016-11-03-paper.md b/collections/_products/2016-11-03-paper.md new file mode 100644 index 0000000..a522d1e --- /dev/null +++ b/collections/_products/2016-11-03-paper.md @@ -0,0 +1,22 @@ +--- +layout: shop_single + +featured: 0 #starred, featured or simple for product pages display sections. + +author: Charles #case sensitive, please use capitalization for names. + +title: Our Most Recent Rest Product Title +sub_heading: Maecenas faucibus mollis interdum. Vivamus sagittis lacus + +banner_image: "/assets/images/pic03.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Product +tag: Electronics + +--- +Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. diff --git a/collections/_products/2017-02-03-dragon.md b/collections/_products/2017-02-03-dragon.md new file mode 100644 index 0000000..9be0ae9 --- /dev/null +++ b/collections/_products/2017-02-03-dragon.md @@ -0,0 +1,23 @@ +--- +layout: shop_single + +featured: true #starred, featured or simple for product pages display sections. +record: product-one + +author: Charles #case sensitive, please use capitalization for names. + +title: Our Most Recent Rest Product Title +sub_heading: Maecenas faucibus mollis interdum. Vivamus sagittis lacus + +banner_image: "/assets/images/pic01.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Product +tag: Electronics + +--- +Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. diff --git a/collections/_products/2018-02-03-example.md b/collections/_products/2018-02-03-example.md new file mode 100644 index 0000000..eee90c3 --- /dev/null +++ b/collections/_products/2018-02-03-example.md @@ -0,0 +1,23 @@ +--- +layout: shop_single + +featured: true #starred, featured or simple for product pages display sections. + + +author: Charles #case sensitive, please use capitalization for names. + +title: Our Most Recent Rest Product Title +sub_heading: Maecenas faucibus mollis interdum. Vivamus sagittis lacus + +banner_image: "/assets/images/pic02.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Product +tag: Electronics + +--- +Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. diff --git a/collections/_products/2018-12-03-towel.md b/collections/_products/2018-12-03-towel.md new file mode 100644 index 0000000..a522d1e --- /dev/null +++ b/collections/_products/2018-12-03-towel.md @@ -0,0 +1,22 @@ +--- +layout: shop_single + +featured: 0 #starred, featured or simple for product pages display sections. + +author: Charles #case sensitive, please use capitalization for names. + +title: Our Most Recent Rest Product Title +sub_heading: Maecenas faucibus mollis interdum. Vivamus sagittis lacus + +banner_image: "/assets/images/pic03.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Product +tag: Electronics + +--- +Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. diff --git a/collections/_products/2019-07-03-tea.md b/collections/_products/2019-07-03-tea.md new file mode 100644 index 0000000..e509c07 --- /dev/null +++ b/collections/_products/2019-07-03-tea.md @@ -0,0 +1,22 @@ +--- +layout: shop_single + +featured: 0 #starred, featured or simple for product pages display sections. + +author: Charles #case sensitive, please use capitalization for names. + +title: Our Most Recent Rest Product Title +sub_heading: Maecenas faucibus mollis interdum. Vivamus sagittis lacus + +banner_image: "/assets/images/pic01.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Product +tag: Electronics + +--- +Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. diff --git a/collections/_products/2019-10-03-rocket.md b/collections/_products/2019-10-03-rocket.md new file mode 100644 index 0000000..e509c07 --- /dev/null +++ b/collections/_products/2019-10-03-rocket.md @@ -0,0 +1,22 @@ +--- +layout: shop_single + +featured: 0 #starred, featured or simple for product pages display sections. + +author: Charles #case sensitive, please use capitalization for names. + +title: Our Most Recent Rest Product Title +sub_heading: Maecenas faucibus mollis interdum. Vivamus sagittis lacus + +banner_image: "/assets/images/pic01.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Product +tag: Electronics + +--- +Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. diff --git a/collections/_products/2020-01-03-phone.md b/collections/_products/2020-01-03-phone.md new file mode 100644 index 0000000..178d018 --- /dev/null +++ b/collections/_products/2020-01-03-phone.md @@ -0,0 +1,22 @@ +--- +layout: shop_single + +featured: 0 #starred, featured or simple for product pages display sections. + +author: Charles #case sensitive, please use capitalization for names. + +title: Our Most Recent Featured Product Title +sub_heading: Maecenas faucibus mollis interdum. Vivamus sagittis lacus + +banner_image: "/assets/images/pic01.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Product +tag: Electronics + +--- +Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. diff --git a/collections/_products/2020-02-07-ball.md b/collections/_products/2020-02-07-ball.md new file mode 100644 index 0000000..178d018 --- /dev/null +++ b/collections/_products/2020-02-07-ball.md @@ -0,0 +1,22 @@ +--- +layout: shop_single + +featured: 0 #starred, featured or simple for product pages display sections. + +author: Charles #case sensitive, please use capitalization for names. + +title: Our Most Recent Featured Product Title +sub_heading: Maecenas faucibus mollis interdum. Vivamus sagittis lacus + +banner_image: "/assets/images/pic01.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Product +tag: Electronics + +--- +Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. diff --git a/collections/_products/2020-02-15-block.md b/collections/_products/2020-02-15-block.md new file mode 100644 index 0000000..178d018 --- /dev/null +++ b/collections/_products/2020-02-15-block.md @@ -0,0 +1,22 @@ +--- +layout: shop_single + +featured: 0 #starred, featured or simple for product pages display sections. + +author: Charles #case sensitive, please use capitalization for names. + +title: Our Most Recent Featured Product Title +sub_heading: Maecenas faucibus mollis interdum. Vivamus sagittis lacus + +banner_image: "/assets/images/pic01.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Product +tag: Electronics + +--- +Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. diff --git a/collections/_products/2020-05-03-hoop.md b/collections/_products/2020-05-03-hoop.md new file mode 100644 index 0000000..178d018 --- /dev/null +++ b/collections/_products/2020-05-03-hoop.md @@ -0,0 +1,22 @@ +--- +layout: shop_single + +featured: 0 #starred, featured or simple for product pages display sections. + +author: Charles #case sensitive, please use capitalization for names. + +title: Our Most Recent Featured Product Title +sub_heading: Maecenas faucibus mollis interdum. Vivamus sagittis lacus + +banner_image: "/assets/images/pic01.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Product +tag: Electronics + +--- +Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. diff --git a/collections/_products/2020-06-03-cup.md b/collections/_products/2020-06-03-cup.md new file mode 100644 index 0000000..2d6038c --- /dev/null +++ b/collections/_products/2020-06-03-cup.md @@ -0,0 +1,20 @@ +--- +layout: shop_single + +featured: 0 #starred, featured or simple for product pages display sections. + +author: Charles #case sensitive, please use capitalization for names. + +title: Product Title +sub_heading: Maecenas faucibus mollis interdum. Vivamus sagittis lacus + +banner_image: "/assets/images/andy-holmes-EOAKUQcsFIU-unsplash.jpg" #Size of banner_image 840x341 +banner_image_alt: "image alt" + +category: Product +tag: Electronics +--- +Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. +Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Etiam porta sem malesuada magna mollis euismod. diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..2c0f257 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,75 @@ +###BEGINNING/COLLABORATING WITH NEW DOCKER/JEKYLL PROJECT### +#====================================# + +## 0. Set Shell JEKYLL_VERSION +# export JEKYLL_VERSION=4.0 + +## 1. Creating a New Project with Docker +# docker run --rm --volume="$PWD:/srv/jekyll" -it jekyll/jekyll:$JEKYLL_VERSION jekyll new mynewproject + +## 2. Serving the Blog +# docker run --name mynewproject --volume="$PWD:/srv/jekyll" -p 4000:4000 -it jekyll/jekyll:$JEKYLL_VERSION jekyll serve --watch --drafts + +## 3. [optional] Building an Existing Site for PRODUCTION _site directory +# docker run --rm --volume="$PWD:/srv/jekyll" -it jekyll/jekyll:$JEKYLL_VERSION jekyll build --trace + +## 4. Setup docker-compose commands for easy & quicker docker container management [docker-compose --help] +## Create and start containers in relative directory +# docker-compose up +## Stop and remove containers, networks, images, and volumes +# docker-compose down + +## Start docker services +# docker-compose start +## Stop docker services +# docker-compose stop + +#====================================# + +## Executing commands in the docker container +# docker exec -ti myblog gem install "jekyll-theme-hydeout" + +## Removing docker container +# docker rm -f myblog + +## Serve docker-compose container in . OR Serve manually +## docker-compose up +# docker run --name myblog --volume="$PWD:/srv/jekyll" -p 4000:4000 -it jekyll/jekyll:$JEKYLL_VERSION jekyll serve --watch --drafts + +## Discover container ID +# docker container ls + +## Executing a shell in the container +# docker exec -ti 2d5913b926fc /bin/sh + +## Copy template from docker jekyll site container shell +# cp -R /usr/local/bundle/gems/minima-2.5.1/ /srv/jekyll + +# Change ownership from root to user:group after exit shell +## sudo chown -R username:group foldername/ + +#Command Options +## command: 'jekyll serve --watch --drafts --verbose --trace' + +#====================================# + +## Steps to install packages within docker container; as an example, we need imageMagick with jekyll_picture_tag plugin to convert images in required format. +# 0. After docker & docker-compose have been setup and running with JEKYLL +# 1. (discover container ID's & copy ID for step 3) docker container ls --all +# 2. (in relative jekyll website directory) docker-compose up +# 3. (While docker container is running, sh into docker image) Open new terminal > docker exec -ti e1906de4a037 /bin/sh (Note: replace container ID with yours) +# 4. (Once logged into the Docker container RUN) apk --update add imagemagick +# 5. (Verify package has been installed) convert --version +# 6. Test jekyll_picture_tag plugin via {% picture test.jpg %} + +#====================================# + +version: '3' +services: + jekyll-serve: + image: jekyll/jekyll:4.0 + volumes: + - '.:/srv/jekyll' + ports: + - 4000:4000 + command: 'jekyll serve --lsi --watch --verbose --trace' diff --git a/feed.xml b/feed.xml new file mode 100644 index 0000000..9d2bc26 --- /dev/null +++ b/feed.xml @@ -0,0 +1,30 @@ +--- +layout: null +--- + + + + + + {{ site.data.global.title }} + {{ site.url }} + + {{ site.data.global.description }} + {{ site.data.global.time | date_to_rfc822 }} + {% for post in site.posts %} + + {{ post.title }} + + {{ post.url | prepend: site.url }} + + + {{ post.content | escape | truncate: '400' }} + + {{ post.date | date_to_rfc822 }} + + {{ post.url | prepend: site.url }} + + + {% endfor %} + + diff --git a/humans.txt b/humans.txt new file mode 100644 index 0000000..5b16ed9 --- /dev/null +++ b/humans.txt @@ -0,0 +1,119 @@ + ____ __ ______ + /\ _`\ /\ \ /\__ _\ __ + \ \,\L\_\ \ \___ __ _ __ _____ _\/_/\ \/ _ __ ___ ___ /\_\ ___ ____ + \/_\__ \\ \ _ `\ /'__`\ /\`'__/\ '__`\ /'__`\\ \ \/\`'__/ __`\/' _ `\/\ \ /'___\ /',__\ + /\ \L\ \ \ \ \ \/\ \L\.\\ \ \/\ \ \L\ /\ __/ \ \ \ \ \/\ \L\ /\ \/\ \ \ \/\ \__//\__, `\ + \/_____/\/_/\/_/\/__/\/_/\/_/ \ \ \/ \/____/ \/_/\/_/\/___/ \/_/\/_/\/_/\/____/\/___/ + \ \_\ + \/_/ +Owner: @csharpe_me (Charles Sharpe) +Designer: @ajlkn, @csharpe_me +Developer: @ajlkn, @csharpe_me +Editor: @csharpe_me +Engineering: @csharpe_me +Quality Assurance: @csharpe_me + +The team, technology & tools behind this site. + + +SHARPETRONICS TEAM +-------- + +Made with Cosmic love in West Virginia. + +Charles Sharpe (@csharpe_me) +csharpe.me + + +SPECIAL THANKS +-------------- +@YOU + +@ajlkn +aj.lkn.io + +@oakstudios +oak.is + + +TECHNOLOGY +---------- + +Siteleaf - Content management system +siteleaf.com + +Jekyll - Static site generator +jekyllrb.com + +Jekyll Plugins - Plugins created by Jekyll community +jekyll-menus, jekyll-paginate-v2 + +HTML5 - Hypertext Markup Language +w3schools.com/html + +Sass - CSS pre-processor +sass-lang.com + +Liquid - Templating +shopify.github.io/liquid + +YAML - Data serialization for all programming languages +yaml.org + +Docker - Container virtualization +docker.com + +Git, GitHub, GitHub Actions & GitHub Pages - Code collaboration, continuous delivery, version management, DevOps & static hosting +github.com + +Font Awesome - Premium Web icons +fontawesome.com + +JavaScript libraries include: +jQuery, breakpoints.js + + +TOOLS +----- + +Linux - Operating system +pop.system76.com + +Cloudflare - DNS & CDN +cloudflare.com + +Atom - Text editor +atom.io + +Figma - UI/UX collaboration editor +figma.com + +Mailjet - Newsletters & Emails +mailjet.com + +Google Workspace - Business & collaboration tools +workspace.google.com + +Inkscape, Imagemagick & Gimp - Graphics editor +inkscape.org, imagemagick.org, gimp.org + +Unsplash - The internet’s source of freely-usable images. +unsplash.com + +Licensing - Use & distribute software +creativecommons.org, gnu.org, fsf.org + +Web Browser Testing - Testing UI/UX of the website +google.com/chrome/, www.mozilla.org/en-US/firefox + +DuckDuckGo - Search engine privacy +duckduckgo.com + + +FONTS +----- + +Ubuntu +Designed by Dalton Maag +License: Ubuntu Font License +www.daltonmaag.com/ diff --git a/pages/404.html b/pages/404.html new file mode 100644 index 0000000..9b5bc33 --- /dev/null +++ b/pages/404.html @@ -0,0 +1,31 @@ +--- +permalink: /404.html +layout: page +--- + + + +
+

404

+ +

Page Not Found :(

+

The requested page could not be found.

+

Go back Home

+
diff --git a/pages/index.html b/pages/index.html new file mode 100644 index 0000000..e938057 --- /dev/null +++ b/pages/index.html @@ -0,0 +1,5 @@ +--- +layout: landing +permalink: / +title: Home +--- diff --git a/pages/journal/index.html b/pages/journal/index.html new file mode 100644 index 0000000..59d9fa5 --- /dev/null +++ b/pages/journal/index.html @@ -0,0 +1,11 @@ +--- +layout: journals +title: Journal +sub_title: A collection of articles about technology. +permalink: /blog/ + +pagination: + enabled: true + collection: posts + permalink: '/blog/:num/' +--- diff --git a/pages/legal/index.html b/pages/legal/index.html new file mode 100644 index 0000000..dd5313e --- /dev/null +++ b/pages/legal/index.html @@ -0,0 +1,11 @@ +--- +layout: journals +title: Legal +sub_title: A collection of legal documents. +permalink: /legal/ + +pagination: + enabled: true + collection: legal + permalink: '/legal/:num/' +--- diff --git a/pages/products/index.html b/pages/products/index.html new file mode 100644 index 0000000..b50c813 --- /dev/null +++ b/pages/products/index.html @@ -0,0 +1,11 @@ +--- +layout: shop +title: Shop +sub_title: A collection of fine products. +permalink: /products/ + +pagination: + enabled: true + collection: products + permalink: '/products/:num/' +--- diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..d319995 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,27 @@ +--- +layout: null +search: exclude +--- + + + + + {% for page in site.pages %} + + {{page.url}} + {{site.time | date: '%Y-%m-%d' }} + daily + 0.5 + + {% endfor %} + + {% for post in site.posts %} + + {{post.url}} + {{site.time | date: '%Y-%m-%d' }} + daily + 0.5 + + {% endfor %} + + diff --git a/uploads/2021/wv-seneca-rocks-sky.webp b/uploads/2021/wv-seneca-rocks-sky.webp new file mode 100644 index 0000000..748d486 Binary files /dev/null and b/uploads/2021/wv-seneca-rocks-sky.webp differ diff --git a/uploads/authors/c-avatar.webp b/uploads/authors/c-avatar.webp new file mode 100644 index 0000000..fe41c96 Binary files /dev/null and b/uploads/authors/c-avatar.webp differ diff --git a/uploads/authors/default-avatar.jpg b/uploads/authors/default-avatar.jpg new file mode 100644 index 0000000..106b4af Binary files /dev/null and b/uploads/authors/default-avatar.jpg differ