The Fontspring Web Font End User License Agreement
Version 1.7.1 - February 24, 2020

By downloading, installing and/or embedding font software (“Web Font”), designed by the foundry (“Foundry”) and offered by Fontspring, you (“Licensee”) agree to be bound by the following terms and conditions of this End User Licensing Agreement (“EULA”):

1. Right Granted
Fontspring grants Licensee a perpetual, worldwide, non-exclusive and non-transferable license to link the Web Font to Websites using the @font-face selector in CSS files.

2. Requirements and Restrictions
Licensee agrees to abide by the following requirements and restrictions:
a. Licensee must use the Web Font provided by Fontspring under this EULA. Licensee may not link to the full, CFF OpenType or TrueType font intended for desktop installation.
b. The total traffic of the Website(s), measured in pageviews per month, may be no greater than the number of pageviews specified in the Receipt.
c. Licensee may only install the Web Font on Websites that it owns or controls.
d. Licensee may embed Web Font in reports generated by the Website(s), provided that Licensee does not sell the reports for profit.

3. Provision to Third Parties
Licensee may temporarily provide the Web Font to a producer, publisher or other agent who is working on behalf of the Licensee.

The third party designer, developer, agent, or independent contractor must:
a. Agree in writing to use the Web Font exclusively for Licensee’s work, according to the terms of this EULA.
b. Retain no copies of the Web Font upon completion of the work.
c. Use and embed the Web Font only in Websites owned or controlled by Licensee.

4. Term
This EULA grants a perpetual license for the rights set forth in Paragraph 1 unless and until the EULA terminates under Paragraph 7. Fontspring will not charge additional fees post purchase, annually or otherwise.

5. Modifications
Licensee may not modify the Web Font or create derivative fonts based upon the Web Font without prior written consent from Fontspring or the Foundry EXCEPT THAT Licensee may generate files necessary for embedding or linking in accordance with this EULA.

6. Copyright
The Web Font is protected by copyright law. The Foundry is the sole, exclusive owner of all intellectual property rights, including rights under copyright and trademark law. Licensee agrees not to use the Web Font in any manner that infringes the intellectual property rights of the Foundry or violates the terms of this EULA. Licensee will be held legally responsible, and indemnifies Fontspring, for any infringements on the Foundry’s rights caused by failure to abide by the terms of this EULA.

7. Termination
This EULA is effective until terminated. If Licensee fails to comply with any term of this EULA, Fontspring may terminate the EULA with 30 days notice. This EULA will terminate automatically 30 days after the issuance of such notice.

8. Refunds and Disclaimer
Fontspring will, upon request by the Licensee, provide a refund for the Web Font if:
a. The Web Font has not been used in any publicly available Website.
b. No more than 30 days have passed since the date of purchase, specified on the Receipt.
c. The Font has been uninstalled and deleted from all Licensee’s computers.

The Web Font is provided “as is.” Fontspring makes no warranty of any kind, either expressed or implied, including, but not limited to the implied warranties of merchantability and fitness for a particular purpose.

Fontspring shall not be liable for any direct, indirect, consequential, or incidental damages (including damages from loss of business profits, business interruption, loss of business information, and the like) arising out of the use of or inability to use the product even if Fontspring or the foundry has been advised of the possibility of such damages.

Because some states do not allow the exclusion or limitation of liability for consequential or incidental damages, the above limitation may not apply to Licensee.

9. Governing Law
This EULA is governed by the laws of the United States of America and the State of Delaware.

10. Entire Agreement
This EULA, in conjunction with the Receipt that accompanies each Web Font licensed from Fontspring, constitutes the entire agreement between Fontspring and Licensee.

11. Modification
Fontspring and Licensee may modify or amend this EULA in writing.

12. Waiver.
The waiver of one breach or default hereunder shall not constitute the waiver of any subsequent breach or default.

