Compare commits

..

15 Commits

Author SHA1 Message Date
bcc6e8652b port 3010 2025-08-18 15:24:43 -05:00
77fc0ab119 node 22 2025-08-18 14:58:41 -05:00
5fbd696ad0 few changes 2025-08-18 14:50:38 -05:00
447af46fa0 posthog 2025-08-17 14:30:52 -05:00
1179b406b8 Posthog integration 2025-08-11 08:57:04 +02:00
878dbc63f7 remove special chars & .next ignore 2025-08-09 12:31:08 -05:00
97057765b4 remove .next directory 2025-08-09 12:30:26 -05:00
519b282246 verbesserungen 2025-08-06 13:08:45 +02:00
feb3f96984 Sollte richtig sein aber zu viele fonts 2025-08-06 11:17:40 +02:00
da306a8f0f neue methode fonts zu laden 2025-08-05 17:03:53 +02:00
69a825e613 neue methode fonts zu laden 2025-08-05 16:39:27 +02:00
2d2c2db261 Fonts werden teilweise geladen 2025-08-04 22:17:34 +02:00
d9508cc196 Fonts werden teilweise geladen 2025-08-04 20:04:08 +02:00
b701dbe30d Gute version, fonts laden nicht 2025-08-04 16:33:05 +02:00
62ebe48adb Initial commit 2025-08-03 18:48:24 +02:00
91 changed files with 5627 additions and 1310 deletions

2
.env.local Normal file
View File

@@ -0,0 +1,2 @@
NEXT_PUBLIC_POSTHOG_KEY=phc_xxx
NEXT_PUBLIC_POSTHOG_HOST=https://us.i.posthog.com

View File

@@ -1,5 +1,5 @@
# 1) Base # 1) Base
FROM node:18-alpine AS base FROM node:22-alpine AS base
WORKDIR /app WORKDIR /app
ENV NEXT_TELEMETRY_DISABLED=1 ENV NEXT_TELEMETRY_DISABLED=1
@@ -22,7 +22,7 @@ RUN npm run build
RUN npm prune --omit=dev RUN npm prune --omit=dev
# 4) Runner # 4) Runner
FROM node:18-alpine AS runner FROM node:22-alpine AS runner
WORKDIR /app WORKDIR /app
ENV NODE_ENV=production \ ENV NODE_ENV=production \
NEXT_TELEMETRY_DISABLED=1 \ NEXT_TELEMETRY_DISABLED=1 \

100
build-fontfaces.sh Normal file
View File

@@ -0,0 +1,100 @@
#!/usr/bin/env bash
set -euo pipefail
UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123 Safari/537.36"
DISPLAY="swap"
WEIGHT="400"
# Paare: Google-Fontname (URL-Form) | CSS-Fontname (CamelCase wie in deinen Utilities)
readarray -t FONTS <<'EOF'
Abril+Fatface|AbrilFatface
Alegreya|Alegreya
Alfa+Slab+One|AlfaSlabOne
Almendra|Almendra
Amatic+SC|AmaticSc
Andika|Andika
Architects+Daughter|ArchitectsDaughter
Audiowide|Audiowide
Averia+Libre|AveriaLibre
Bebas+Neue|BebasNeue
Black+Ops+One|BlackOpsOne
Caveat|Caveat
Cinzel+Decorative|CinzelDecorative
Courgette|Courgette
Dancing+Script|DancingScript
Exo|Exo
Fjalla+One|FjallaOne
Germania+One|GermaniaOne
Glass+Antiqua|GlassAntiqua
Gloria+Hallelujah|GloriaHallelujah
Great+Vibes|GreatVibes
Holtwood+One+SC|HoltwoodOneSc
Indie+Flower|IndieFlower
Italiana|Italiana
Jost|Jost
Kaushan+Script|KaushanScript
Lato|Lato
Metal+Mania|MetalMania
Montserrat|Montserrat
Neucha|Neucha
Noto+Sans|NotoSans
Open+Sans|OpenSans
Orbitron|Orbitron
Oswald|Oswald
Pacifico|Pacifico
Permanent+Marker|PermanentMarker
Philosopher|Philosopher
Playfair+Display|PlayfairDisplay
Poppins|Poppins
Press+Start+2P|PressStart2P
Questrial|Questrial
Quicksand|Quicksand
Rajdhani|Rajdhani
Raleway|Raleway
Righteous|Righteous
Roboto|Roboto
Sacramento|Sacramento
Satisfy|Satisfy
Space+Mono|SpaceMono
Spectral|Spectral
Staatliches|Staatliches
Stint+Ultra+Condensed|StintUltraCondensed
Syncopate|Syncopate
Ultra|Ultra
Unica+One|UnicaOne
Work+Sans|WorkSans
Yellowtail|Yellowtail
EOF
for line in "${FONTS[@]}"; do
GF="${line%%|*}"
CSS_FAMILY="${line##*|}"
API_URL="https://fonts.googleapis.com/css2?family=${GF}:wght@${WEIGHT}&display=${DISPLAY}"
CSS="$(curl -s -H "User-Agent: ${UA}" --compressed "$API_URL")"
# Bevorzugt den /* latin */-Block, sonst den ersten @font-face mit font-style: normal
BLOCK="$(awk '/\/\* latin \*\//,/\}/' <<<"$CSS")"
if [[ -z "$BLOCK" ]]; then
BLOCK="$(awk -v RS='}' '/@font-face/ && /font-style:[[:space:]]*normal/ {print $0 RS; exit}' <<<"$CSS")"
fi
SRC="$(grep -o 'https://fonts\.gstatic\.com[^)]*\.woff2' <<<"$BLOCK" | head -n1 || true)"
URANGE="$(sed -n 's/^[[:space:]]*unicode-range:[[:space:]]*\(.*\);/\1/p' <<<"$BLOCK" || true)"
if [[ -z "$SRC" ]]; then
echo "/* WARN: no woff2 for ${GF} */" >&2
continue
fi
cat <<CSSBLOCK
@font-face {
font-family: "${CSS_FAMILY}";
font-style: normal;
font-weight: ${WEIGHT};
font-display: ${DISPLAY};
src: url("${SRC}") format("woff2");
${URANGE:+ unicode-range: ${URANGE};}
}
CSSBLOCK
done

View File

@@ -0,0 +1,64 @@
import { useState } from "react";
import { fontTransforms, transformText } from "@/components/fontTransforms";
export default function FancyTextPreview() {
const [inputText, setInputText] = useState("Hello Instagram");
const [copiedIndex, setCopiedIndex] = useState(null);
const allFonts = Object.keys(fontTransforms);
const handleCopy = async (text, index) => {
try {
await navigator.clipboard.writeText(text);
setCopiedIndex(index);
setTimeout(() => setCopiedIndex(null), 1500);
} catch (err) {
console.error("Copy failed:", err);
}
};
return (
<div className="max-w-3xl mx-auto p-4">
<input
type="text"
className="w-full border rounded px-4 py-2 mb-6 text-lg"
value={inputText}
onChange={(e) => setInputText(e.target.value)}
placeholder="Type something..."
/>
<div className="space-y-6">
{allFonts.map((fontName, index) => {
const { transformed, fontClassName } = transformText(inputText, fontName);
return (
<div
key={fontName}
className="border-b pb-4 flex flex-col gap-2"
>
<p className="text-sm font-semibold text-gray-700">{fontName}</p>
<div className="flex flex-col gap-1">
{/* ⬇️ Normale Textvorschau mit Webfont */}
<p className={`text-xl ${fontClassName}`}>
{inputText || "Hello Instagram"}
</p>
{/* ⬇️ Fancy Unicode-Text */}
<p className="text-xl text-gray-600">
{transformed}
</p>
</div>
<button
className="self-start mt-1 text-sm bg-gray-200 hover:bg-gray-300 rounded px-3 py-1"
onClick={() => handleCopy(transformed, index)}
>
{copiedIndex === index ? "Copied!" : "Copy"}
</button>
</div>
);
})}
</div>
</div>
);
}

View File

@@ -1,3 +1,4 @@
// components/ImprovedCategoryFilter.jsx
import React from "react"; import React from "react";
import { motion } from "framer-motion"; import { motion } from "framer-motion";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
@@ -13,31 +14,31 @@ export default function ImprovedCategoryFilter({
{ {
id: 'all', id: 'all',
name: '🔥 All Fonts', name: '🔥 All Fonts',
description: 'Complete collection', description: 'Complete collection of 60 styles',
gradient: 'from-pink-500 to-purple-600' gradient: 'from-pink-500 to-purple-600'
}, },
{ {
id: 'modern', id: 'modern',
name: '🔤 Modern', name: '🔤 Modern',
description: 'Clean & professional', description: 'Clean & professional fonts',
gradient: 'from-blue-500 to-indigo-600' gradient: 'from-blue-500 to-indigo-600'
}, },
{ {
id: 'handwriting', id: 'handwriting',
name: '✍️ Handwriting', name: '✍️ Handwriting',
description: 'Personal & casual', description: 'Personal, casual and handwritten',
gradient: 'from-green-500 to-emerald-600' gradient: 'from-green-500 to-emerald-600'
}, },
{ {
id: 'statement', id: 'statement',
name: '🧑‍🎤 Statement', name: '🧑‍🎤 Statement',
description: 'Bold & eye-catching', description: 'Bold & attention-grabbing',
gradient: 'from-red-500 to-pink-600' gradient: 'from-red-500 to-pink-600'
}, },
{ {
id: 'futuristic', id: 'futuristic',
name: '🚀 Futuristic', name: '🚀 Futuristic',
description: 'Tech & gaming', description: 'Tech & gaming inspired',
gradient: 'from-purple-500 to-violet-600' gradient: 'from-purple-500 to-violet-600'
}, },
{ {
@@ -59,7 +60,7 @@ export default function ImprovedCategoryFilter({
<div className="text-center mb-6"> <div className="text-center mb-6">
<h2 className="text-2xl font-bold text-white mb-2">Choose Your Style</h2> <h2 className="text-2xl font-bold text-white mb-2">Choose Your Style</h2>
<p className="text-white/70 text-sm"> <p className="text-white/70 text-sm">
Browse fonts by category or view all {fontCounts.all} unique styles Browse fonts by category or view all {fontCounts?.all ?? 60} unique styles
</p> </p>
</div> </div>
@@ -97,7 +98,7 @@ export default function ImprovedCategoryFilter({
: 'bg-white/10 text-white/80 border-white/20' : 'bg-white/10 text-white/80 border-white/20'
}`} }`}
> >
{fontCounts[category.id] || 0} fonts {fontCounts?.[category.id] ?? 0} fonts
</Badge> </Badge>
</div> </div>
</Button> </Button>
@@ -114,7 +115,7 @@ export default function ImprovedCategoryFilter({
> >
<div className="bg-white/10 backdrop-blur-sm rounded-lg p-3 inline-block"> <div className="bg-white/10 backdrop-blur-sm rounded-lg p-3 inline-block">
<p className="text-white/80 text-sm"> <p className="text-white/80 text-sm">
Showing <span className="font-semibold text-white">{fontCounts[selectedCategory]}</span> fonts Showing <span className="font-semibold text-white">{fontCounts?.[selectedCategory] ?? 0}</span> fonts
in <span className="font-semibold text-white">{categories.find(c => c.id === selectedCategory)?.name}</span> category in <span className="font-semibold text-white">{categories.find(c => c.id === selectedCategory)?.name}</span> category
</p> </p>
</div> </div>
@@ -122,4 +123,4 @@ export default function ImprovedCategoryFilter({
)} )}
</motion.div> </motion.div>
); );
} }

View File

@@ -1,3 +1,4 @@
// components/PerformanceOptimizedFontCard.jsx
import React, { useState, useCallback, forwardRef, memo } from "react"; import React, { useState, useCallback, forwardRef, memo } from "react";
import { Card } from "@/components/ui/card"; import { Card } from "@/components/ui/card";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
@@ -39,7 +40,7 @@ const PerformanceOptimizedFontCard = forwardRef(({
}); });
const handleCopy = useCallback(async () => { const handleCopy = useCallback(async () => {
const textToCopy = sStr(transformedText); const textToCopy = sStr(transformedText?.transformed ?? transformedText);
try { try {
await navigator.clipboard.writeText(textToCopy); await navigator.clipboard.writeText(textToCopy);
setCopied(true); setCopied(true);
@@ -76,7 +77,7 @@ const PerformanceOptimizedFontCard = forwardRef(({
}, [liked, fontName, onLike]); }, [liked, fontName, onLike]);
const handleShare = useCallback(async () => { const handleShare = useCallback(async () => {
const shareText = `${sStr(transformedText)}\n\nErstellt mit FancyText: ${window.location.href}`; const shareText = `${sStr(transformedText?.transformed ?? transformedText)}\n\nErstellt mit FancyText: ${window.location.href}`;
if (navigator.share) { if (navigator.share) {
try { try {
await navigator.share({ title: "Schau dir diese coole Schriftart an! 🔥", text: shareText, url: window.location.href }); await navigator.share({ title: "Schau dir diese coole Schriftart an! 🔥", text: shareText, url: window.location.href });
@@ -93,31 +94,10 @@ const PerformanceOptimizedFontCard = forwardRef(({
} }
}, [transformedText, fontName, onShare]); }, [transformedText, fontName, onShare]);
const getFontStyle = useCallback((name) => { const previewText = sStr(transformedText?.transformed ?? transformedText) || "Hallo Instagram!";
const baseStyle = { wordBreak: "break-word", lineHeight: "1.3", willChange: "auto" }; const fontClass = transformedText?.fontClassName ?? "";
const fontMap = { const displayName = fontTransforms[fontName]?.description;
Montserrat: { fontFamily: "Montserrat, sans-serif", fontWeight: "500" },
'Bebas Neue': { fontFamily: '"Bebas Neue", cursive', fontWeight: "400", textTransform: "uppercase", letterSpacing: "0.05em" },
Oswald: { fontFamily: "Oswald, sans-serif", fontWeight: "500", textTransform: "uppercase" },
Raleway: { fontFamily: "Raleway, sans-serif", fontWeight: "400" },
Poppins: { fontFamily: "Poppins, sans-serif", fontWeight: "500" },
Inter: { fontFamily: "Inter, sans-serif", fontWeight: "400" },
Caveat: { fontFamily: "Caveat, cursive", fontWeight: "400" },
Pacifico: { fontFamily: "Pacifico, cursive", fontWeight: "400" },
'Dancing Script': { fontFamily: '"Dancing Script", cursive', fontWeight: "400" },
'Amatic SC': { fontFamily: '"Amatic SC", cursive', fontWeight: "400" },
Anton: { fontFamily: "Anton, sans-serif", fontWeight: "400", textTransform: "uppercase" },
'Luckiest Guy': { fontFamily: '"Luckiest Guy", cursive', fontWeight: "400", textTransform: "uppercase" },
'Fredoka One': { fontFamily: '"Fredoka One", cursive', fontWeight: "400" },
Bangers: { fontFamily: "Bangers, cursive", fontWeight: "400", textTransform: "uppercase" },
Orbitron: { fontFamily: "Orbitron, sans-serif", fontWeight: "400" },
'Press Start 2P': { fontFamily: '"Press Start 2P", cursive', fontWeight: "400", fontSize: "0.85em" },
'Playfair Display': { fontFamily: '"Playfair Display", serif', fontWeight: "400" }
};
return { ...baseStyle, ...(fontMap[name] || {}) };
}, []);
const previewText = sStr(transformedText) || "Hallo Instagram!";
return ( return (
<div ref={ref} className="will-change-transform mb-6"> <div ref={ref} className="will-change-transform mb-6">
@@ -155,10 +135,10 @@ const PerformanceOptimizedFontCard = forwardRef(({
</Button> </Button>
</div> </div>
</div> </div>
{fontTransforms[fontName]?.description && ( {displayName && (
<p className="text-xs text-gray-500 mb-3 flex items-start gap-1 leading-tight"> <p className="text-xs text-gray-500 mb-3 flex items-start gap-1 leading-tight">
<Info className="w-3 h-3 mt-0.5 shrink-0" /> <Info className="w-3 h-3 mt-0.5 shrink-0" />
{fontTransforms[fontName].description} {displayName}
</p> </p>
)} )}
<div <div
@@ -167,8 +147,8 @@ const PerformanceOptimizedFontCard = forwardRef(({
tabIndex={0} tabIndex={0}
onKeyDown={(e) => (e.key === "Enter" || e.key === " ") && handleCopy()} onKeyDown={(e) => (e.key === "Enter" || e.key === " ") && handleCopy()}
aria-label="Click to copy text" aria-label="Click to copy text"
style={{ ...getFontStyle(fontName), pointerEvents: "auto" }} style={{ pointerEvents: "auto" }}
className="text-xl sm-text-2xl md-text-3xl mb-4 p-3 sm:p-4 bg-gray-50 rounded-xl text-center select-all text-gray-800 min-h-[70px] sm:min-h-[80px] flex items-center justify-center cursor-pointer hover:bg-gray-100 transition-colors" className={`text-xl sm-text-2xl md-text-3xl mb-4 p-3 sm:p-4 bg-gray-50 rounded-xl text-center select-all text-gray-800 min-h-[70px] sm:min-h-[80px] flex items-center justify-center cursor-pointer hover:bg-gray-100 transition-colors ${fontClass}`}
> >
{previewText} {previewText}
</div> </div>
@@ -185,7 +165,7 @@ const PerformanceOptimizedFontCard = forwardRef(({
{copied ? ( {copied ? (
<><Check className="w-4 h-4 mr-2" /> Copy! </> <><Check className="w-4 h-4 mr-2" /> Copy! </>
) : ( ) : (
<><Copy className="w-4 h-4 mr-2" /> Copy! </> <><Copy className="w-4 h-4 mr-2" /> Copy! </>
)} )}
</Button> </Button>
</div> </div>
@@ -195,4 +175,4 @@ const PerformanceOptimizedFontCard = forwardRef(({
}); });
PerformanceOptimizedFontCard.displayName = "PerformanceOptimizedFontCard"; PerformanceOptimizedFontCard.displayName = "PerformanceOptimizedFontCard";
export default memo(PerformanceOptimizedFontCard); export default memo(PerformanceOptimizedFontCard);

View File

@@ -1,86 +1,50 @@
// components/fontTransforms.jsx // components/fontTransforms.jsx
// Unicode-basiertes Font-Transformationsmapping für deine aktuelle Font-Liste
// Nutzt verschiedene Unicode-Blöcke, damit beim Kopieren der "fancy" Stil erhalten bleibt.
// 1) Definition der Unicode-Blöcke (Startpunkte) export const fontList = [
const unicodeBlocks = {   "abril-fatface", "alegreya", "alfa-slab-one", "almendra", "amatic-sc", "andika",
sansSerif: { upperStart: 0x1D5A0, lowerStart: 0x1D5BA }, // Mathematical Sans-Serif   "architects-daughter", "audiowide", "averia-libre", "bebas-neue", "black-ops-one",
sansSerifBold: { upperStart: 0x1D5D4, lowerStart: 0x1D5EE }, // Bold Sans-Serif   "caveat", "cinzel-decorative", "courgette", "dancing-script", "exo", "fjalla-one",
script: { upperStart: 0x1D49C, lowerStart: 0x1D4B6 }, // Mathematical Script   "germania-one", "glass-antiqua", "gloria-hallelujah", "great-vibes", "holtwood-one-sc",
scriptBold: { upperStart: 0x1D4D0, lowerStart: 0x1D4EA }, // Bold Script   "indie-flower", "italiana", "jost", "kaushan-script", "lato", "metal-mania", "montserrat",
fraktur: { upperStart: 0x1D504, lowerStart: 0x1D51E }, // Mathematical Fraktur   "neucha", "noto-sans", "open-sans", "orbitron", "oswald", "pacifico", "permanent-marker",
frakturBold: { upperStart: 0x1D56C, lowerStart: 0x1D586 }, // Bold Fraktur   "philosopher", "playfair-display", "poppins", "press-start-2p", "questrial", "quicksand",
monospace: { upperStart: 0x1D670, lowerStart: 0x1D68A }, // Mathematical Monospace   "rajdhani", "raleway", "righteous", "roboto", "sacramento", "satisfy", "space-mono",
fullwidth: { upperStart: 0xFF21, lowerStart: 0xFF41 } // Fullwidth Latin   "spectral", "staatliches", "stint-ultra-condensed", "syncopate", "ultra", "unica-one",
  "work-sans", "yellowtail"
];
const getCategory = (name) => {
  if (["caveat", "dancing-script", "pacifico", "amatic-sc", "kaushan-script", "courgette", "great-vibes", "satisfy", "sacramento", "neucha", "gloria-hallelujah", "almendra", "indie-flower", "architects-daughter"].includes(name)) return "handwriting";
  if (["bebas-neue", "black-ops-one", "holtwood-one-sc", "abril-fatface", "playfair-display", "permanent-marker", "alfa-slab-one", "germania-one", "oswald", "stint-ultra-condensed"].includes(name)) return "statement";
  if (["exo", "orbitron", "audiowide", "rajdhani", "space-mono", "questrial", "syncopate", "unica-one", "italiana", "staatliches"].includes(name)) return "futuristic";
  if (["press-start-2p", "righteous", "metal-mania", "alegreya", "spectral", "fjalla-one", "glass-antiqua", "cinzel-decorative", "andika"].includes(name)) return "aesthetic";
  return "modern";
}; };
// 2) Helfer zum Mappen von A-Z und a-z in den jeweiligen Unicode-Block export const fontTransforms = Object.fromEntries(
const mapUnicode = (char, block) => {   fontList.map((font) => {
const code = char.charCodeAt(0);     const name = font.replace(/-/g, " ").replace(/\b\w/g, (l) => l.toUpperCase());
if (code >= 65 && code <= 90) return String.fromCodePoint(block.upperStart + (code - 65));     const category = getCategory(font);
if (code >= 97 && code <= 122) return String.fromCodePoint(block.lowerStart + (code - 97));     return [font, {
return char;       category,
};       description: `Eine moderne, saubere Schriftart.`,
      className: `font-${font}`
const createTransform = (blockKey) => (text) =>     }];
text   })
.split('')
.map((c) => mapUnicode(c, unicodeBlocks[blockKey]))
.join('');
// 3) Font-Transformations für deine Liste
export const fontTransforms = {
// 🔤 Modern Clean & professional
Montserrat: { transform: createTransform('sansSerifBold'), category: 'modern', description: 'Montserrat Sans-Serif Bold Unicode' },
Lato: { transform: createTransform('sansSerif'), category: 'modern', description: 'Lato Humanistischer Sans-Serif Unicode' },
Raleway: { transform: createTransform('sansSerif'), category: 'modern', description: 'Raleway Elegant Display Unicode' },
Poppins: { transform: createTransform('sansSerif'), category: 'modern', description: 'Poppins Rund & freundlich Unicode' },
'Open Sans': { transform: createTransform('sansSerif'), category: 'modern', description: 'Open Sans Vielseitig Unicode' },
Roboto: { transform: createTransform('sansSerif'), category: 'modern', description: 'Roboto Modernes Grotesk Unicode' },
'Work Sans': { transform: createTransform('sansSerif'), category: 'modern', description: 'Work Sans Tech & Clean Unicode' },
// ✍️ Handwriting Personal & casual
Pacifico: { transform: createTransform('scriptBold'), category: 'handwriting', description: 'Pacifico Lockerer Pinsel Bold Script Unicode' },
Sacramento: { transform: createTransform('scriptBold'), category: 'handwriting', description: 'Sacramento Retro-Handlettering Bold Script Unicode' },
Caveat: { transform: createTransform('scriptBold'), category: 'handwriting', description: 'Caveat Natural Handwriting Bold Script Unicode' },
'Dancing Script': { transform: createTransform('scriptBold'), category: 'handwriting', description: 'Dancing Script Lebhafte Kursive Bold Script Unicode' },
'Indie Flower': { transform: createTransform('scriptBold'), category: 'handwriting', description: 'Indie Flower Verspieltes Bold Script Unicode' },
'Amatic SC': { transform: createTransform('scriptBold'), category: 'handwriting', description: 'Amatic SC Skizzenartiges Bold Script Unicode' },
'Kaushan Script': { transform: createTransform('scriptBold'), category: 'handwriting', description: 'Kaushan Script Fettere Kursive Bold Script Unicode' },
// 🧑‍🎤 Statement Bold & eye-catching
Oswald: { transform: createTransform('sansSerifBold'), category: 'statement', description: 'Oswald Bold Grotesk Unicode' },
'Bebas Neue': { transform: createTransform('fullwidth'), category: 'statement', description: 'Bebas Neue Fullwidth Caps Unicode' },
Anton: { transform: createTransform('fullwidth'), category: 'statement', description: 'Anton Plakative Fullwidth Unicode' },
Ultra: { transform: createTransform('sansSerifBold'), category: 'statement', description: 'Ultra Kompakte Bold Unicode' },
'Stint Ultra Condensed': { transform: createTransform('sansSerifBold'), category: 'statement', description: 'Stint Ultra Condensed Kompakte Bold Unicode' },
'Playfair Display': { transform: createTransform('scriptBold'), category: 'statement', description: 'Playfair Display Elegante Bold Script Unicode' },
'Abril Fatface': { transform: createTransform('scriptBold'), category: 'statement', description: 'Abril Fatface Fettere Bold Script Unicode' },
// 🚀 Futuristic Tech & gaming
Exo: { transform: createTransform('sansSerif'), category: 'futuristic', description: 'Exo Tech Grotesk Unicode' },
Orbitron: { transform: createTransform('monospace'), category: 'futuristic', description: 'Orbitron Sci-Fi Monospace Unicode' },
Audiowide: { transform: createTransform('monospace'), category: 'futuristic', description: 'Audiowide Rundes Monospace Unicode' },
Rajdhani: { transform: createTransform('monospace'), category: 'futuristic', description: 'Rajdhani Digital Monospace Unicode' },
'Space Mono': { transform: createTransform('monospace'), category: 'futuristic', description: 'Space Mono Tech Monospace Unicode' },
Questrial: { transform: createTransform('sansSerif'), category: 'futuristic', description: 'Questrial Clean Sans-Serif Unicode' },
// 🧢 Aesthetic Retro & Instagram vibes
'Press Start 2P': { transform: createTransform('monospace'), category: 'aesthetic', description: 'Press Start 2P Pixel Monospace Unicode' },
Righteous: { transform: createTransform('frakturBold'), category: 'aesthetic', description: 'Righteous Stylische Bold Fraktur Unicode' },
'Metal Mania': { transform: createTransform('scriptBold'), category: 'aesthetic', description: 'Metal Mania Fettere Script Unicode' }
};
// Hilfsfunktionen
export const getPopularFonts = () => Object.keys(fontTransforms).slice(0, 10);
export const getFontsByCategory = (category) => (
category === 'all'
? Object.keys(fontTransforms)
: Object.keys(fontTransforms).filter(f => fontTransforms[f].category === category)
); );
export const transformText = (text, fontName) => { export const transformText = (text, fontName) => {
const font = fontTransforms[fontName];   const font = fontTransforms[fontName];
if (!font || !text) return text;   if (!font || !text) return { transformed: text, fontClassName: "" };
return font.transform(text);   return {
    transformed: text,
    fontClassName: font.className
  };
}; };
export const getPopularFonts = () => fontList.slice(0, 10);
export const getFontsByCategory = (category) =>
  category === "all"
    ? fontList
    : fontList.filter((f) => getCategory(f) === category);

View File

@@ -4,8 +4,7 @@ import { Card } from "@/components/ui/card";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { Badge } from "@/components/ui/badge"; import { Badge } from "@/components/ui/badge";
import { Copy, Check, Heart, Share2, Info } from "lucide-react"; import { Copy, Check, Heart, Share2, Info } from "lucide-react";
import { fontTransforms } from "../fontTransforms"; import { transformText, fontTransforms } from "../fontTransforms";
import { getFontData } from "@/lib/fonts";
export default function FontCard({ export default function FontCard({
fontName, fontName,
@@ -18,67 +17,29 @@ export default function FontCard({
const [liked, setLiked] = useState(false); const [liked, setLiked] = useState(false);
const fontInfo = fontTransforms[fontName]; const fontInfo = fontTransforms[fontName];
const fontData = getFontData(fontName);
const displayText = transformedText || "Hallo Instagram!"; // Dynamisch Font-Klasse aus Fontnamen generieren (z.B. "Open Sans" → "font-open-sans")
const fontClass = `font-${fontName.toLowerCase().replace(/\s+/g, "-")}`;
// Fancy-Transformation
const rawText = "Hallo Instagram!";
const { transformed } = transformText(rawText, fontName);
const finalText = transformed || rawText;
const handleCopy = () => { const handleCopy = () => {
if (navigator.clipboard && window.isSecureContext) { navigator.clipboard.writeText(finalText).then(() => {
navigator.clipboard setCopied(true);
.writeText(displayText) setTimeout(() => setCopied(false), 1500);
.then(() => flashCopied()) });
.catch(() => fallbackCopy());
} else {
fallbackCopy();
}
}; };
const flashCopied = () => { const handleShare = () => {
setCopied(true); alert(`Teilen von: ${fontName}`);
setTimeout(() => setCopied(false), 2000);
};
const fallbackCopy = () => {
const textarea = document.createElement("textarea");
textarea.value = displayText;
textarea.setAttribute("readonly", "");
textarea.style.position = "fixed";
textarea.style.top = "0";
textarea.style.left = "0";
textarea.style.width = "1px";
textarea.style.height = "1px";
textarea.style.padding = "0";
textarea.style.border = "none";
textarea.style.outline = "none";
textarea.style.boxShadow = "none";
textarea.style.background = "transparent";
document.body.appendChild(textarea);
textarea.focus();
textarea.select();
try {
document.execCommand("copy");
flashCopied();
} catch (err) {
console.error("Fallback Copy fehlgeschlagen:", err);
}
document.body.removeChild(textarea);
};
const handleShare = async () => {
if (!navigator.share) return;
try {
await navigator.share({
title: `FancyText ${fontName}`,
text: displayText,
url: window.location.href,
});
} catch (err) {
console.error("Share fehlgeschlagen:", err);
}
}; };
return ( return (
<div style={{ pointerEvents: "none" }}> // Dieses Attribut wurde entfernt, da es alle Klicks blockiert hat.
<div>
<Card className="bg-white/90 backdrop-blur-sm border-0 shadow-xl hover:shadow-2xl transition-all duration-300 overflow-hidden"> <Card className="bg-white/90 backdrop-blur-sm border-0 shadow-xl hover:shadow-2xl transition-all duration-300 overflow-hidden">
<div className="p-6"> <div className="p-6">
<div className="flex items-center justify-between mb-4"> <div className="flex items-center justify-between mb-4">
@@ -108,7 +69,7 @@ export default function FontCard({
variant="ghost" variant="ghost"
size="sm" size="sm"
onClick={handleShare} onClick={handleShare}
className="text-gray-400 hover:text-blue-500" className="text-gray-400 hover:text-blue-500 pointer-events-auto"
> >
<Share2 className="w-4 h-4" /> <Share2 className="w-4 h-4" />
</Button> </Button>
@@ -124,9 +85,9 @@ export default function FontCard({
<input <input
type="text" type="text"
value={displayText} value={finalText}
readOnly readOnly
className={`${fontData.className} text-2xl md:text-3xl mb-6 p-4 bg-gray-50 rounded-xl text-center text-gray-800 min-h-[80px] w-full select-all border-0 focus:ring-0`} className={`${fontClass} text-2xl md:text-3xl mb-6 p-4 bg-gray-50 rounded-xl text-center text-gray-800 min-h-[80px] w-full select-all border-0 focus:ring-0 pointer-events-auto`}
style={{ lineHeight: "1.2" }} style={{ lineHeight: "1.2" }}
/> />
@@ -151,4 +112,4 @@ export default function FontCard({
</Card> </Card>
</div> </div>
); );
} }

View File

@@ -1,8 +1,7 @@
version: "3.8"
services: services:
fancytext-app: fancytext-app:
build: . build: .
ports: ports:
- "3001:3000" - "3010:3000"
environment: environment:
- NODE_ENV=production - NODE_ENV=production

40
dump_unicode_ranges.py Normal file
View File

@@ -0,0 +1,40 @@
from fontTools.ttLib import TTFont
from pathlib import Path
import sys, csv
def cps_from_font(p):
f = TTFont(p)
s = set()
for t in f["cmap"].tables:
s.update(t.cmap.keys())
return sorted(c for c in s if c is not None)
def to_ranges(cps):
if not cps:
return ""
out = []
a = b = cps[0]
for x in cps[1:]:
if x == b + 1:
b = x
else:
out.append((a, b))
a = b = x
out.append((a, b))
return ", ".join(
f"U+{a:04X}" if a == b else f"U+{a:04X}-{b:04X}"
for a, b in out
)
def main(argv):
w = csv.writer(sys.stdout)
w.writerow(["file", "unicode-range"])
for fp in argv:
cps = cps_from_font(fp)
w.writerow([Path(fp).name, to_ranges(cps)])
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Usage: python3 dump_unicode_ranges.py <font1.woff2> ...", file=sys.stderr)
sys.exit(1)
main(sys.argv[1:])

120
fetch-font-urls.sh Normal file
View File

@@ -0,0 +1,120 @@
#!/usr/bin/env bash
set -euo pipefail
# --- Einstellungen ---
SUBSET="latin" # für DE/EN am kleinsten; bei Bedarf "latin-ext"
WEIGHT="400"
DISPLAY="swap"
# Moderner UA erzwingt woff2 im Google-Fonts CSS
UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123 Safari/537.36"
# Familienliste (Leerzeichen -> '+')
FAMILIES=(
"Abril+Fatface"
"Alegreya"
"Alfa+Slab+One"
"Almendra"
"Amatic+SC"
"Andika"
"Architects+Daughter"
"Audiowide"
"Averia+Libre"
"Bebas+Neue"
"Black+Ops+One"
"Caveat"
"Cinzel+Decorative"
"Courgette"
"Dancing+Script"
"Exo"
"Fjalla+One"
"Germania+One"
"Glass+Antiqua"
"Gloria+Hallelujah"
"Great+Vibes"
"Holtwood+One+SC"
"Indie+Flower"
"Italiana"
"Jost"
"Kaushan+Script"
"Lato"
"Metal+Mania"
"Montserrat"
"Neucha"
"Noto+Sans"
"Open+Sans"
"Orbitron"
"Oswald"
"Pacifico"
"Permanent+Marker"
"Philosopher"
"Playfair+Display"
"Poppins"
"Press+Start+2P"
"Questrial"
"Quicksand"
"Rajdhani"
"Raleway"
"Righteous"
"Roboto"
"Sacramento"
"Satisfy"
"Space+Mono"
"Spectral"
"Staatliches"
"Stint+Ultra+Condensed"
"Syncopate"
"Ultra"
"Unica+One"
"Work+Sans"
"Yellowtail"
)
# --- Output vorbereiten ---
: > font-src-urls.csv
echo "family,woff2_url" >> font-src-urls.csv
: > fonts.css
echo "Hole woff2-URLs (Subset: $SUBSET, Weight: $WEIGHT) …" >&2
for FAMILY in "${FAMILIES[@]}"; do
API_URL="https://fonts.googleapis.com/css2?family=${FAMILY}:wght@${WEIGHT}&display=${DISPLAY}"
CSS="$(curl -s -H "User-Agent: ${UA}" "${API_URL}")"
# bevorzugt den /* latin */-Block
URL="$(printf "%s\n" "$CSS" \
| awk '/\/\* '"$SUBSET"' \*\//,/\}/' \
| grep -o 'https://fonts.gstatic.com[^)]*\.woff2' \
| head -n1 || true)"
# Fallback: erste woff2-URL überhaupt
if [[ -z "${URL}" ]]; then
URL="$(printf "%s\n" "$CSS" \
| grep -o 'https://fonts.gstatic.com[^)]*\.woff2' \
| head -n1 || true)"
fi
if [[ -z "${URL}" ]]; then
echo "WARN: Keine woff2-URL für ${FAMILY} gefunden" >&2
continue
fi
# CSV-Zeile
echo "${FAMILY},${URL}" >> font-src-urls.csv
# @font-face Snippet
CSS_FAMILY="${FAMILY//+/ }"
cat >> fonts.css <<CSS
@font-face {
font-family: '${CSS_FAMILY}';
font-style: normal;
font-weight: ${WEIGHT};
font-display: ${DISPLAY};
src: url('${URL}') format('woff2');
/* subset: ${SUBSET} (aus Google Fonts CSS v2) */
}
CSS
done
echo "Fertig. Siehe font-src-urls.csv und fonts.css" >&2

58
font-src-urls.csv Normal file
View File

@@ -0,0 +1,58 @@
family,woff2_url
Abril+Fatface,https://fonts.gstatic.com/s/abrilfatface/v24/zOL64pLDlL1D99S8g8PtiKchq-dmjQ.woff2
Alegreya,https://fonts.gstatic.com/s/alegreya/v38/4UacrEBBsBhlBjvfkQjt71kZfyBzPgNG9hU4-6qj.woff2
Alfa+Slab+One,https://fonts.gstatic.com/s/alfaslabone/v20/6NUQ8FmMKwSEKjnm5-4v-4Jh2dJhew.woff2
Almendra,https://fonts.gstatic.com/s/almendra/v27/H4ckBXKAlMnTn0CskxY9yL4.woff2
Amatic+SC,https://fonts.gstatic.com/s/amaticsc/v27/TUZyzwprpvBS1izr_vOECuSf.woff2
Andika,https://fonts.gstatic.com/s/andika/v26/mem_Ya6iyW-LwqgwarYQ.woff2
Architects+Daughter,https://fonts.gstatic.com/s/architectsdaughter/v19/KtkxAKiDZI_td1Lkx62xHZHDtgO_Y-bvTYlg4w.woff2
Audiowide,https://fonts.gstatic.com/s/audiowide/v21/l7gdbjpo0cum0ckerWCdlg_O.woff2
Averia+Libre,https://fonts.gstatic.com/s/averialibre/v16/2V0aKIcMGZEnV6xygz7eNjESBanI.woff2
Bebas+Neue,https://fonts.gstatic.com/s/bebasneue/v15/JTUSjIg69CK48gW7PXoo9Wlhyw.woff2
Black+Ops+One,https://fonts.gstatic.com/s/blackopsone/v20/qWcsB6-ypo7xBdr6Xshe96H3aDvbtw.woff2
Caveat,https://fonts.gstatic.com/s/caveat/v22/WnznHAc5bAfYB2QRah7pcpNvOx-pjfJ9eIWpYQ.woff2
Cinzel+Decorative,https://fonts.gstatic.com/s/cinzeldecorative/v18/daaCSScvJGqLYhG8nNt8KPPswUAPni7TTMw.woff2
Courgette,https://fonts.gstatic.com/s/courgette/v18/wEO_EBrAnc9BLjLQAUk1VvoK.woff2
Dancing+Script,https://fonts.gstatic.com/s/dancingscript/v28/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7BMSo3Sup8.woff2
Exo,https://fonts.gstatic.com/s/exo/v24/4UaZrEtFpBI4f1ZSIK9d4LjJ4lM3OwRmOw.woff2
Fjalla+One,https://fonts.gstatic.com/s/fjallaone/v15/Yq6R-LCAWCX3-6Ky7FAFrOF6kg.woff2
Germania+One,https://fonts.gstatic.com/s/germaniaone/v20/Fh4yPjrqIyv2ucM2qzBjeS3uywhP.woff2
Glass+Antiqua,https://fonts.gstatic.com/s/glassantiqua/v25/xfu30Wr0Wn3NOQM2piC0uXOjrLj6Ng.woff2
Gloria+Hallelujah,https://fonts.gstatic.com/s/gloriahallelujah/v23/LYjYdHv3kUk9BMV96EIswT9DIbW-MIS11zM.woff2
Great+Vibes,https://fonts.gstatic.com/s/greatvibes/v20/RWmMoKWR9v4ksMfaWd_JN9XFiaQ.woff2
Holtwood+One+SC,https://fonts.gstatic.com/s/holtwoodonesc/v22/yYLx0hLR0P-3vMFSk1TCq3Txg5BHdrz7.woff2
Indie+Flower,https://fonts.gstatic.com/s/indieflower/v23/m8JVjfNVeKWVnh3QMuKkFcZVaUuH.woff2
Italiana,https://fonts.gstatic.com/s/italiana/v21/QldNNTtLsx4E__B0XQmWaXw.woff2
Jost,https://fonts.gstatic.com/s/jost/v19/92zPtBhPNqw79Ij1E865zBUv7myjJTVBNIg.woff2
Kaushan+Script,https://fonts.gstatic.com/s/kaushanscript/v18/vm8vdRfvXFLG3OLnsO15WYS5DG74wNI.woff2
Lato,https://fonts.gstatic.com/s/lato/v24/S6uyw4BMUTPHjx4wXg.woff2
Metal+Mania,https://fonts.gstatic.com/s/metalmania/v22/RWmMoKWb4e8kqMfBUdPFJdXFiaQ.woff2
Montserrat,https://fonts.gstatic.com/s/montserrat/v30/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw5aXo.woff2
Neucha,https://fonts.gstatic.com/s/neucha/v17/q5uGsou0JOdh94bfvQlt.woff2
Noto+Sans,https://fonts.gstatic.com/s/notosans/v39/o-0mIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjcz6L1SoM-jCpoiyD9A-9a6VI.woff2
Open+Sans,https://fonts.gstatic.com/s/opensans/v43/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsjZ0B4gaVI.woff2
Orbitron,https://fonts.gstatic.com/s/orbitron/v34/yMJMMIlzdpvBhQQL_SC3X9yhF25-T1nyGy6BoWgz.woff2
Oswald,https://fonts.gstatic.com/s/oswald/v56/TK3_WkUHHAIjg75cFRf3bXL8LICs1_FvsUZiZQ.woff2
Pacifico,https://fonts.gstatic.com/s/pacifico/v22/FwZY7-Qmy14u9lezJ-6H6Mk.woff2
Permanent+Marker,https://fonts.gstatic.com/s/permanentmarker/v16/Fh4uPib9Iyv2ucM6pGQMWimMp004La2Cfw.woff2
Philosopher,https://fonts.gstatic.com/s/philosopher/v20/vEFV2_5QCwIS4_Dhez5jcWBuT00.woff2
Playfair+Display,https://fonts.gstatic.com/s/playfairdisplay/v39/nuFvD-vYSZviVYUb_rj3ij__anPXJzDwcbmjWBN2PKdFvXDXbtM.woff2
Poppins,https://fonts.gstatic.com/s/poppins/v23/pxiEyp8kv8JHgFVrJJfecg.woff2
Press+Start+2P,https://fonts.gstatic.com/s/pressstart2p/v15/e3t4euO8T-267oIAQAu6jDQyK3nVivM.woff2
Questrial,https://fonts.gstatic.com/s/questrial/v18/QdVUSTchPBm7nuUeVf70viFl.woff2
Quicksand,https://fonts.gstatic.com/s/quicksand/v36/6xK-dSZaM9iE8KbpRA_LJ3z8mH9BOJvgkP8o58a-wg.woff2
Rajdhani,https://fonts.gstatic.com/s/rajdhani/v16/LDIxapCSOBg7S-QT7p4HM-Y.woff2
Raleway,https://fonts.gstatic.com/s/raleway/v36/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCIPrE.woff2
Righteous,https://fonts.gstatic.com/s/righteous/v18/1cXxaUPXBpj2rGoU7C9WiHGF.woff2
Roboto,https://fonts.gstatic.com/s/roboto/v48/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWubEbVmUiAo.woff2
Sacramento,https://fonts.gstatic.com/s/sacramento/v16/buEzpo6gcdjy0EiZMBUG4C0f_Q.woff2
Satisfy,https://fonts.gstatic.com/s/satisfy/v22/rP2Hp2yn6lkG50LoCZOIHQ.woff2
Space+Mono,https://fonts.gstatic.com/s/spacemono/v17/i7dPIFZifjKcF5UAWdDRYEF8RQ.woff2
Spectral,https://fonts.gstatic.com/s/spectral/v14/rnCr-xNNww_2s0amA9M5kng.woff2
Staatliches,https://fonts.gstatic.com/s/staatliches/v14/HI_OiY8KO6hCsQSoAPmtMYebvpA.woff2
Stint+Ultra+Condensed,https://fonts.gstatic.com/s/stintultracondensed/v24/-W_gXIrsVjjeyEnPC45qD2NoFPtBE0xCh2AOrR8P.woff2
Syncopate,https://fonts.gstatic.com/s/syncopate/v23/pe0sMIuPIYBCpEV5eFdCBfe_.woff2
Ultra,https://fonts.gstatic.com/s/ultra/v25/zOLy4prXmrtY-uT9wrI.woff2
Unica+One,https://fonts.gstatic.com/s/unicaone/v19/DPEuYwWHyAYGVTSmalsRcd3e.woff2
Work+Sans,https://fonts.gstatic.com/s/worksans/v23/QGY_z_wNahGAdqQ43RhVcIgYT2Xz5u32K0nXBi8Jpg.woff2
Yellowtail,https://fonts.gstatic.com/s/yellowtail/v24/OZpGg_pnoDtINPfRIlLohlvHwQ.woff2
1 family woff2_url
2 Abril+Fatface https://fonts.gstatic.com/s/abrilfatface/v24/zOL64pLDlL1D99S8g8PtiKchq-dmjQ.woff2
3 Alegreya https://fonts.gstatic.com/s/alegreya/v38/4UacrEBBsBhlBjvfkQjt71kZfyBzPgNG9hU4-6qj.woff2
4 Alfa+Slab+One https://fonts.gstatic.com/s/alfaslabone/v20/6NUQ8FmMKwSEKjnm5-4v-4Jh2dJhew.woff2
5 Almendra https://fonts.gstatic.com/s/almendra/v27/H4ckBXKAlMnTn0CskxY9yL4.woff2
6 Amatic+SC https://fonts.gstatic.com/s/amaticsc/v27/TUZyzwprpvBS1izr_vOECuSf.woff2
7 Andika https://fonts.gstatic.com/s/andika/v26/mem_Ya6iyW-LwqgwarYQ.woff2
8 Architects+Daughter https://fonts.gstatic.com/s/architectsdaughter/v19/KtkxAKiDZI_td1Lkx62xHZHDtgO_Y-bvTYlg4w.woff2
9 Audiowide https://fonts.gstatic.com/s/audiowide/v21/l7gdbjpo0cum0ckerWCdlg_O.woff2
10 Averia+Libre https://fonts.gstatic.com/s/averialibre/v16/2V0aKIcMGZEnV6xygz7eNjESBanI.woff2
11 Bebas+Neue https://fonts.gstatic.com/s/bebasneue/v15/JTUSjIg69CK48gW7PXoo9Wlhyw.woff2
12 Black+Ops+One https://fonts.gstatic.com/s/blackopsone/v20/qWcsB6-ypo7xBdr6Xshe96H3aDvbtw.woff2
13 Caveat https://fonts.gstatic.com/s/caveat/v22/WnznHAc5bAfYB2QRah7pcpNvOx-pjfJ9eIWpYQ.woff2
14 Cinzel+Decorative https://fonts.gstatic.com/s/cinzeldecorative/v18/daaCSScvJGqLYhG8nNt8KPPswUAPni7TTMw.woff2
15 Courgette https://fonts.gstatic.com/s/courgette/v18/wEO_EBrAnc9BLjLQAUk1VvoK.woff2
16 Dancing+Script https://fonts.gstatic.com/s/dancingscript/v28/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7BMSo3Sup8.woff2
17 Exo https://fonts.gstatic.com/s/exo/v24/4UaZrEtFpBI4f1ZSIK9d4LjJ4lM3OwRmOw.woff2
18 Fjalla+One https://fonts.gstatic.com/s/fjallaone/v15/Yq6R-LCAWCX3-6Ky7FAFrOF6kg.woff2
19 Germania+One https://fonts.gstatic.com/s/germaniaone/v20/Fh4yPjrqIyv2ucM2qzBjeS3uywhP.woff2
20 Glass+Antiqua https://fonts.gstatic.com/s/glassantiqua/v25/xfu30Wr0Wn3NOQM2piC0uXOjrLj6Ng.woff2
21 Gloria+Hallelujah https://fonts.gstatic.com/s/gloriahallelujah/v23/LYjYdHv3kUk9BMV96EIswT9DIbW-MIS11zM.woff2
22 Great+Vibes https://fonts.gstatic.com/s/greatvibes/v20/RWmMoKWR9v4ksMfaWd_JN9XFiaQ.woff2
23 Holtwood+One+SC https://fonts.gstatic.com/s/holtwoodonesc/v22/yYLx0hLR0P-3vMFSk1TCq3Txg5BHdrz7.woff2
24 Indie+Flower https://fonts.gstatic.com/s/indieflower/v23/m8JVjfNVeKWVnh3QMuKkFcZVaUuH.woff2
25 Italiana https://fonts.gstatic.com/s/italiana/v21/QldNNTtLsx4E__B0XQmWaXw.woff2
26 Jost https://fonts.gstatic.com/s/jost/v19/92zPtBhPNqw79Ij1E865zBUv7myjJTVBNIg.woff2
27 Kaushan+Script https://fonts.gstatic.com/s/kaushanscript/v18/vm8vdRfvXFLG3OLnsO15WYS5DG74wNI.woff2
28 Lato https://fonts.gstatic.com/s/lato/v24/S6uyw4BMUTPHjx4wXg.woff2
29 Metal+Mania https://fonts.gstatic.com/s/metalmania/v22/RWmMoKWb4e8kqMfBUdPFJdXFiaQ.woff2
30 Montserrat https://fonts.gstatic.com/s/montserrat/v30/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw5aXo.woff2
31 Neucha https://fonts.gstatic.com/s/neucha/v17/q5uGsou0JOdh94bfvQlt.woff2
32 Noto+Sans https://fonts.gstatic.com/s/notosans/v39/o-0mIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjcz6L1SoM-jCpoiyD9A-9a6VI.woff2
33 Open+Sans https://fonts.gstatic.com/s/opensans/v43/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsjZ0B4gaVI.woff2
34 Orbitron https://fonts.gstatic.com/s/orbitron/v34/yMJMMIlzdpvBhQQL_SC3X9yhF25-T1nyGy6BoWgz.woff2
35 Oswald https://fonts.gstatic.com/s/oswald/v56/TK3_WkUHHAIjg75cFRf3bXL8LICs1_FvsUZiZQ.woff2
36 Pacifico https://fonts.gstatic.com/s/pacifico/v22/FwZY7-Qmy14u9lezJ-6H6Mk.woff2
37 Permanent+Marker https://fonts.gstatic.com/s/permanentmarker/v16/Fh4uPib9Iyv2ucM6pGQMWimMp004La2Cfw.woff2
38 Philosopher https://fonts.gstatic.com/s/philosopher/v20/vEFV2_5QCwIS4_Dhez5jcWBuT00.woff2
39 Playfair+Display https://fonts.gstatic.com/s/playfairdisplay/v39/nuFvD-vYSZviVYUb_rj3ij__anPXJzDwcbmjWBN2PKdFvXDXbtM.woff2
40 Poppins https://fonts.gstatic.com/s/poppins/v23/pxiEyp8kv8JHgFVrJJfecg.woff2
41 Press+Start+2P https://fonts.gstatic.com/s/pressstart2p/v15/e3t4euO8T-267oIAQAu6jDQyK3nVivM.woff2
42 Questrial https://fonts.gstatic.com/s/questrial/v18/QdVUSTchPBm7nuUeVf70viFl.woff2
43 Quicksand https://fonts.gstatic.com/s/quicksand/v36/6xK-dSZaM9iE8KbpRA_LJ3z8mH9BOJvgkP8o58a-wg.woff2
44 Rajdhani https://fonts.gstatic.com/s/rajdhani/v16/LDIxapCSOBg7S-QT7p4HM-Y.woff2
45 Raleway https://fonts.gstatic.com/s/raleway/v36/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCIPrE.woff2
46 Righteous https://fonts.gstatic.com/s/righteous/v18/1cXxaUPXBpj2rGoU7C9WiHGF.woff2
47 Roboto https://fonts.gstatic.com/s/roboto/v48/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWubEbVmUiAo.woff2
48 Sacramento https://fonts.gstatic.com/s/sacramento/v16/buEzpo6gcdjy0EiZMBUG4C0f_Q.woff2
49 Satisfy https://fonts.gstatic.com/s/satisfy/v22/rP2Hp2yn6lkG50LoCZOIHQ.woff2
50 Space+Mono https://fonts.gstatic.com/s/spacemono/v17/i7dPIFZifjKcF5UAWdDRYEF8RQ.woff2
51 Spectral https://fonts.gstatic.com/s/spectral/v14/rnCr-xNNww_2s0amA9M5kng.woff2
52 Staatliches https://fonts.gstatic.com/s/staatliches/v14/HI_OiY8KO6hCsQSoAPmtMYebvpA.woff2
53 Stint+Ultra+Condensed https://fonts.gstatic.com/s/stintultracondensed/v24/-W_gXIrsVjjeyEnPC45qD2NoFPtBE0xCh2AOrR8P.woff2
54 Syncopate https://fonts.gstatic.com/s/syncopate/v23/pe0sMIuPIYBCpEV5eFdCBfe_.woff2
55 Ultra https://fonts.gstatic.com/s/ultra/v25/zOLy4prXmrtY-uT9wrI.woff2
56 Unica+One https://fonts.gstatic.com/s/unicaone/v19/DPEuYwWHyAYGVTSmalsRcd3e.woff2
57 Work+Sans https://fonts.gstatic.com/s/worksans/v23/QGY_z_wNahGAdqQ43RhVcIgYT2Xz5u32K0nXBi8Jpg.woff2
58 Yellowtail https://fonts.gstatic.com/s/yellowtail/v24/OZpGg_pnoDtINPfRIlLohlvHwQ.woff2

456
fonts.css Normal file
View File

@@ -0,0 +1,456 @@
@font-face {
font-family: 'Abril Fatface';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/abrilfatface/v24/zOL64pLDlL1D99S8g8PtiKchq-dmjQ.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Alegreya';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/alegreya/v38/4UacrEBBsBhlBjvfkQjt71kZfyBzPgNG9hU4-6qj.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Alfa Slab One';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/alfaslabone/v20/6NUQ8FmMKwSEKjnm5-4v-4Jh2dJhew.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Almendra';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/almendra/v27/H4ckBXKAlMnTn0CskxY9yL4.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Amatic SC';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/amaticsc/v27/TUZyzwprpvBS1izr_vOECuSf.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Andika';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/andika/v26/mem_Ya6iyW-LwqgwarYQ.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Architects Daughter';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/architectsdaughter/v19/KtkxAKiDZI_td1Lkx62xHZHDtgO_Y-bvTYlg4w.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Audiowide';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/audiowide/v21/l7gdbjpo0cum0ckerWCdlg_O.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Averia Libre';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/averialibre/v16/2V0aKIcMGZEnV6xygz7eNjESBanI.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Bebas Neue';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/bebasneue/v15/JTUSjIg69CK48gW7PXoo9Wlhyw.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Black Ops One';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/blackopsone/v20/qWcsB6-ypo7xBdr6Xshe96H3aDvbtw.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Caveat';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/caveat/v22/WnznHAc5bAfYB2QRah7pcpNvOx-pjfJ9eIWpYQ.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Cinzel Decorative';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/cinzeldecorative/v18/daaCSScvJGqLYhG8nNt8KPPswUAPni7TTMw.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Courgette';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/courgette/v18/wEO_EBrAnc9BLjLQAUk1VvoK.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Dancing Script';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/dancingscript/v28/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7BMSo3Sup8.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Exo';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/exo/v24/4UaZrEtFpBI4f1ZSIK9d4LjJ4lM3OwRmOw.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Fjalla One';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/fjallaone/v15/Yq6R-LCAWCX3-6Ky7FAFrOF6kg.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Germania One';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/germaniaone/v20/Fh4yPjrqIyv2ucM2qzBjeS3uywhP.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Glass Antiqua';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/glassantiqua/v25/xfu30Wr0Wn3NOQM2piC0uXOjrLj6Ng.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Gloria Hallelujah';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/gloriahallelujah/v23/LYjYdHv3kUk9BMV96EIswT9DIbW-MIS11zM.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Great Vibes';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/greatvibes/v20/RWmMoKWR9v4ksMfaWd_JN9XFiaQ.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Holtwood One SC';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/holtwoodonesc/v22/yYLx0hLR0P-3vMFSk1TCq3Txg5BHdrz7.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Indie Flower';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/indieflower/v23/m8JVjfNVeKWVnh3QMuKkFcZVaUuH.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Italiana';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/italiana/v21/QldNNTtLsx4E__B0XQmWaXw.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Jost';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/jost/v19/92zPtBhPNqw79Ij1E865zBUv7myjJTVBNIg.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Kaushan Script';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/kaushanscript/v18/vm8vdRfvXFLG3OLnsO15WYS5DG74wNI.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Lato';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/lato/v24/S6uyw4BMUTPHjx4wXg.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Metal Mania';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/metalmania/v22/RWmMoKWb4e8kqMfBUdPFJdXFiaQ.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Montserrat';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/montserrat/v30/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw5aXo.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Neucha';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/neucha/v17/q5uGsou0JOdh94bfvQlt.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Noto Sans';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/notosans/v39/o-0mIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjcz6L1SoM-jCpoiyD9A-9a6VI.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/opensans/v43/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsjZ0B4gaVI.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Orbitron';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/orbitron/v34/yMJMMIlzdpvBhQQL_SC3X9yhF25-T1nyGy6BoWgz.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Oswald';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/oswald/v56/TK3_WkUHHAIjg75cFRf3bXL8LICs1_FvsUZiZQ.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Pacifico';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/pacifico/v22/FwZY7-Qmy14u9lezJ-6H6Mk.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Permanent Marker';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/permanentmarker/v16/Fh4uPib9Iyv2ucM6pGQMWimMp004La2Cfw.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Philosopher';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/philosopher/v20/vEFV2_5QCwIS4_Dhez5jcWBuT00.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Playfair Display';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/playfairdisplay/v39/nuFvD-vYSZviVYUb_rj3ij__anPXJzDwcbmjWBN2PKdFvXDXbtM.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Poppins';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/poppins/v23/pxiEyp8kv8JHgFVrJJfecg.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Press Start 2P';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/pressstart2p/v15/e3t4euO8T-267oIAQAu6jDQyK3nVivM.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Questrial';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/questrial/v18/QdVUSTchPBm7nuUeVf70viFl.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Quicksand';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/quicksand/v36/6xK-dSZaM9iE8KbpRA_LJ3z8mH9BOJvgkP8o58a-wg.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Rajdhani';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/rajdhani/v16/LDIxapCSOBg7S-QT7p4HM-Y.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Raleway';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/raleway/v36/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCIPrE.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Righteous';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/righteous/v18/1cXxaUPXBpj2rGoU7C9WiHGF.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/roboto/v48/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWubEbVmUiAo.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Sacramento';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/sacramento/v16/buEzpo6gcdjy0EiZMBUG4C0f_Q.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Satisfy';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/satisfy/v22/rP2Hp2yn6lkG50LoCZOIHQ.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Space Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/spacemono/v17/i7dPIFZifjKcF5UAWdDRYEF8RQ.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Spectral';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/spectral/v14/rnCr-xNNww_2s0amA9M5kng.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Staatliches';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/staatliches/v14/HI_OiY8KO6hCsQSoAPmtMYebvpA.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Stint Ultra Condensed';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/stintultracondensed/v24/-W_gXIrsVjjeyEnPC45qD2NoFPtBE0xCh2AOrR8P.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Syncopate';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/syncopate/v23/pe0sMIuPIYBCpEV5eFdCBfe_.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Ultra';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/ultra/v25/zOLy4prXmrtY-uT9wrI.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Unica One';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/unicaone/v19/DPEuYwWHyAYGVTSmalsRcd3e.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Work Sans';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/worksans/v23/QGY_z_wNahGAdqQ43RhVcIgYT2Xz5u32K0nXBi8Jpg.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}
@font-face {
font-family: 'Yellowtail';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://fonts.gstatic.com/s/yellowtail/v24/OZpGg_pnoDtINPfRIlLohlvHwQ.woff2') format('woff2');
/* subset: latin (aus Google Fonts CSS v2) */
}

456
fonts.generated.css Normal file
View File

@@ -0,0 +1,456 @@
@font-face {
font-family: "AbrilFatface";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/abrilfatface/v24/zOL64pLDlL1D99S8g8PtiKchq-dmjQ.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Alegreya";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/alegreya/v38/4UacrEBBsBhlBjvfkQjt71kZfyBzPgNG9hU4-6qj.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "AlfaSlabOne";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/alfaslabone/v20/6NUQ8FmMKwSEKjnm5-4v-4Jh2dJhew.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Almendra";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/almendra/v27/H4ckBXKAlMnTn0CskxY9yL4.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "AmaticSc";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/amaticsc/v27/TUZyzwprpvBS1izr_vOECuSf.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Andika";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/andika/v26/mem_Ya6iyW-LwqgwarYQ.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "ArchitectsDaughter";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/architectsdaughter/v19/KtkxAKiDZI_td1Lkx62xHZHDtgO_Y-bvTYlg4w.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Audiowide";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/audiowide/v21/l7gdbjpo0cum0ckerWCdlg_O.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "AveriaLibre";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/averialibre/v16/2V0aKIcMGZEnV6xygz7eNjESBanI.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "BebasNeue";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/bebasneue/v15/JTUSjIg69CK48gW7PXoo9Wlhyw.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "BlackOpsOne";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/blackopsone/v20/qWcsB6-ypo7xBdr6Xshe96H3aDvbtw.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Caveat";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/caveat/v22/WnznHAc5bAfYB2QRah7pcpNvOx-pjfJ9eIWpYQ.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "CinzelDecorative";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/cinzeldecorative/v18/daaCSScvJGqLYhG8nNt8KPPswUAPni7TTMw.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Courgette";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/courgette/v18/wEO_EBrAnc9BLjLQAUk1VvoK.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "DancingScript";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/dancingscript/v28/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7BMSo3Sup8.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Exo";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/exo/v24/4UaZrEtFpBI4f1ZSIK9d4LjJ4lM3OwRmOw.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "FjallaOne";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/fjallaone/v15/Yq6R-LCAWCX3-6Ky7FAFrOF6kg.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "GermaniaOne";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/germaniaone/v20/Fh4yPjrqIyv2ucM2qzBjeS3uywhP.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "GlassAntiqua";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/glassantiqua/v25/xfu30Wr0Wn3NOQM2piC0uXOjrLj6Ng.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "GloriaHallelujah";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/gloriahallelujah/v23/LYjYdHv3kUk9BMV96EIswT9DIbW-MIS11zM.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "GreatVibes";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/greatvibes/v20/RWmMoKWR9v4ksMfaWd_JN9XFiaQ.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "HoltwoodOneSc";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/holtwoodonesc/v22/yYLx0hLR0P-3vMFSk1TCq3Txg5BHdrz7.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "IndieFlower";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/indieflower/v23/m8JVjfNVeKWVnh3QMuKkFcZVaUuH.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Italiana";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/italiana/v21/QldNNTtLsx4E__B0XQmWaXw.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Jost";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/jost/v19/92zPtBhPNqw79Ij1E865zBUv7myjJTVBNIg.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "KaushanScript";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/kaushanscript/v18/vm8vdRfvXFLG3OLnsO15WYS5DG74wNI.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Lato";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/lato/v24/S6uyw4BMUTPHjx4wXg.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "MetalMania";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/metalmania/v22/RWmMoKWb4e8kqMfBUdPFJdXFiaQ.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Montserrat";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/montserrat/v30/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw5aXo.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Neucha";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/neucha/v17/q5uGsou0JOdh94bfvQlt.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "NotoSans";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/notosans/v39/o-0mIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjcz6L1SoM-jCpoiyD9A-9a6VI.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "OpenSans";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/opensans/v43/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsjZ0B4gaVI.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Orbitron";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/orbitron/v34/yMJMMIlzdpvBhQQL_SC3X9yhF25-T1nyGy6BoWgz.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Oswald";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/oswald/v56/TK3_WkUHHAIjg75cFRf3bXL8LICs1_FvsUZiZQ.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Pacifico";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/pacifico/v22/FwZY7-Qmy14u9lezJ-6H6Mk.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "PermanentMarker";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/permanentmarker/v16/Fh4uPib9Iyv2ucM6pGQMWimMp004La2Cfw.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Philosopher";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/philosopher/v20/vEFV2_5QCwIS4_Dhez5jcWBuT00.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "PlayfairDisplay";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/playfairdisplay/v39/nuFvD-vYSZviVYUb_rj3ij__anPXJzDwcbmjWBN2PKdFvXDXbtM.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/poppins/v23/pxiEyp8kv8JHgFVrJJfecg.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "PressStart2P";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/pressstart2p/v15/e3t4euO8T-267oIAQAu6jDQyK3nVivM.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Questrial";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/questrial/v18/QdVUSTchPBm7nuUeVf70viFl.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Quicksand";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/quicksand/v36/6xK-dSZaM9iE8KbpRA_LJ3z8mH9BOJvgkP8o58a-wg.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Rajdhani";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/rajdhani/v16/LDIxapCSOBg7S-QT7p4HM-Y.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Raleway";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/raleway/v36/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCIPrE.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Righteous";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/righteous/v18/1cXxaUPXBpj2rGoU7C9WiHGF.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/roboto/v48/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWubEbVmUiAo.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Sacramento";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/sacramento/v16/buEzpo6gcdjy0EiZMBUG4C0f_Q.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Satisfy";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/satisfy/v22/rP2Hp2yn6lkG50LoCZOIHQ.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "SpaceMono";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/spacemono/v17/i7dPIFZifjKcF5UAWdDRYEF8RQ.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Spectral";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/spectral/v14/rnCr-xNNww_2s0amA9M5kng.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Staatliches";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/staatliches/v14/HI_OiY8KO6hCsQSoAPmtMYebvpA.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "StintUltraCondensed";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/stintultracondensed/v24/-W_gXIrsVjjeyEnPC45qD2NoFPtBE0xCh2AOrR8P.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Syncopate";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/syncopate/v23/pe0sMIuPIYBCpEV5eFdCBfe_.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Ultra";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/ultra/v25/zOLy4prXmrtY-uT9wrI.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "UnicaOne";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/unicaone/v19/DPEuYwWHyAYGVTSmalsRcd3e.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "WorkSans";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/worksans/v23/QGY_z_wNahGAdqQ43RhVcIgYT2Xz5u32K0nXBi8Jpg.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "Yellowtail";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://fonts.gstatic.com/s/yellowtail/v24/OZpGg_pnoDtINPfRIlLohlvHwQ.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

24
instrumentation-client.js Normal file
View File

@@ -0,0 +1,24 @@
// instrumentation-client.js
import posthog from "posthog-js";
// envs lesen
const key = process.env.NEXT_PUBLIC_POSTHOG_KEY;
const host = process.env.NEXT_PUBLIC_POSTHOG_HOST || "https://us.i.posthog.com";
// nur im Browser initialisieren + Doppel-Init verhindern
if (typeof window !== "undefined" && !window.__posthogInitialized) {
if (key) {
posthog.init(key, {
api_host: host,
capture_pageview: false, // Pageviews trackst du selbst
loaded: () => {
if (process.env.NODE_ENV === "development") posthog.debug();
},
});
window.__posthogInitialized = true;
} else {
console.warn("NEXT_PUBLIC_POSTHOG_KEY ist nicht gesetzt");
}
}
export default posthog;

View File

@@ -5,5 +5,7 @@
"@/*": ["./*"] "@/*": ["./*"]
}, },
"forceConsistentCasingInFileNames": true "forceConsistentCasingInFileNames": true
} },
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"],
"exclude": ["node_modules"]
} }

View File

@@ -1,153 +1,355 @@
// 1) GoogleFonts Platzhalter // lib/fonts.js
export const inter = { className: "", variable: "--font-inter" }; import {
export const roboto = { className: "", variable: "--font-roboto" }; Montserrat,
export const openSans = { className: "", variable: "--font-opensans" }; Lato,
export const montserrat = { className: "", variable: "--font-montserrat" }; Raleway,
export const raleway = { className: "", variable: "--font-raleway" }; Poppins,
export const poppins = { className: "", variable: "--font-poppins" }; Open_Sans,
export const manrope = { className: "", variable: "--font-manrope" }; Roboto,
export const dmSans = { className: "", variable: "--font-dmsans" }; Work_Sans,
export const plusJakartaSans = { Noto_Sans,
className: "", Jost,
variable: "--font-plusjakarta", Quicksand,
}; Averia_Libre,
export const spaceGrotesk = { className: "", variable: "--font-spacegrotesk" }; Philosopher,
Pacifico,
Sacramento,
Caveat,
Dancing_Script,
Indie_Flower,
Amatic_SC,
Kaushan_Script,
Architects_Daughter,
Neucha,
Great_Vibes,
Satisfy,
Yellowtail,
Gloria_Hallelujah,
Courgette,
Almendra,
Oswald,
Bebas_Neue,
Ultra,
Stint_Ultra_Condensed,
Playfair_Display,
Abril_Fatface,
Permanent_Marker,
Alfa_Slab_One,
Black_Ops_One,
Germania_One,
Holtwood_One_SC,
Exo,
Orbitron,
Audiowide,
Rajdhani,
Space_Mono,
Questrial,
Syncopate,
Unica_One,
Italiana,
Staatliches,
Press_Start_2P,
Righteous,
Metal_Mania,
Alegreya,
Spectral,
Fjalla_One,
Glass_Antiqua,
Cinzel_Decorative,
Andika,
} from "next/font/google";
export const dancingScript = { // Moderne Schriftarten
className: "", export const montserrat = Montserrat({
variable: "--font-dancingscript", subsets: ["latin"],
}; weight: ["100", "200", "300", "400", "500", "600", "700", "800", "900"],
export const pacifico = { className: "", variable: "--font-pacifico" }; variable: "--font-montserrat",
export const caveat = { className: "", variable: "--font-caveat" }; });
export const indieFlower = { className: "", variable: "--font-indieflower" }; export const lato = Lato({
export const greatVibes = { className: "", variable: "--font-greatvibes" }; subsets: ["latin"],
export const sacramento = { className: "", variable: "--font-sacramento" }; weight: ["100", "300", "400", "700", "900"],
export const alexBrush = { className: "", variable: "--font-alexbrush" }; variable: "--font-lato",
export const amaticSC = { className: "", variable: "--font-amaticsc" }; });
export const marckScript = { className: "", variable: "--font-marckscript" }; export const raleway = Raleway({
export const protestRevolution = { subsets: ["latin"],
className: "", weight: ["100", "200", "300", "400", "500", "600", "700", "800", "900"],
variable: "--font-protestrevolution", variable: "--font-raleway",
}; });
export const poppins = Poppins({
subsets: ["latin"],
weight: ["100", "200", "300", "400", "500", "600", "700", "800", "900"],
variable: "--font-poppins",
});
export const openSans = Open_Sans({
subsets: ["latin"],
weight: ["300", "400", "500", "600", "700", "800"],
variable: "--font-open-sans",
});
export const roboto = Roboto({
subsets: ["latin"],
weight: ["100", "300", "400", "500", "700", "900"],
variable: "--font-roboto",
});
export const workSans = Work_Sans({
subsets: ["latin"],
weight: ["100", "200", "300", "400", "500", "600", "700", "800", "900"],
variable: "--font-work-sans",
});
export const notoSans = Noto_Sans({
subsets: ["latin"],
weight: ["100", "200", "300", "400", "500", "600", "700", "800", "900"],
variable: "--font-noto-sans",
});
export const jost = Jost({
subsets: ["latin"],
weight: ["100", "200", "300", "400", "500", "600", "700", "800", "900"],
variable: "--font-jost",
});
export const quicksand = Quicksand({
subsets: ["latin"],
weight: ["300", "400", "500", "600", "700"],
variable: "--font-quicksand",
});
export const averiaLibre = Averia_Libre({
subsets: ["latin"],
weight: "400",
variable: "--font-averia-libre",
});
export const philosopher = Philosopher({
subsets: ["latin"],
weight: "400",
variable: "--font-philosopher",
});
export const anton = { className: "", variable: "--font-anton" }; // Handschriften
export const bebasNeue = { className: "", variable: "--font-bebasneue" }; export const pacifico = Pacifico({
export const oswald = { className: "", variable: "--font-oswald" }; subsets: ["latin"],
export const bangers = { className: "", variable: "--font-bangers" }; weight: "400",
export const ultra = { className: "", variable: "--font-ultra" }; variable: "--font-pacifico",
export const abrilFatface = { className: "", variable: "--font-abrilfatface" }; });
export const fjallaOne = { className: "", variable: "--font-fjallaone" }; export const sacramento = Sacramento({
export const fredokaOne = { className: "", variable: "--font-fredokaone" }; subsets: ["latin"],
export const luckiestGuy = { className: "", variable: "--font-luckiestguy" }; weight: "400",
export const fugazOne = { className: "", variable: "--font-fugazone" }; variable: "--font-sacramento",
export const shrikhand = { className: "", variable: "--font-shrikhand" }; });
export const chango = { className: "", variable: "--font-chango" }; export const caveat = Caveat({
export const gravitasOne = { className: "", variable: "--font-gravitasone" }; subsets: ["latin"],
export const coiny = { className: "", variable: "--font-coiny" }; weight: "400",
export const quicksand = { className: "", variable: "--font-quicksand" }; variable: "--font-caveat",
});
export const dancingScript = Dancing_Script({
subsets: ["latin"],
weight: ["400", "500", "600", "700"],
variable: "--font-dancing-script",
});
export const indieFlower = Indie_Flower({
subsets: ["latin"],
weight: "400",
variable: "--font-indie-flower",
});
export const amatic = Amatic_SC({
subsets: ["latin"],
weight: "400",
variable: "--font-amatic-sc",
});
export const kaushan = Kaushan_Script({
subsets: ["latin"],
weight: "400",
variable: "--font-kaushan-script",
});
export const architects = Architects_Daughter({
subsets: ["latin"],
weight: "400",
variable: "--font-architects-daughter",
});
export const neucha = Neucha({
subsets: ["latin"],
weight: "400",
variable: "--font-neucha",
});
export const greatVibes = Great_Vibes({
subsets: ["latin"],
weight: "400",
variable: "--font-great-vibes",
});
export const satisfy = Satisfy({
subsets: ["latin"],
weight: "400",
variable: "--font-satisfy",
});
export const yellowtail = Yellowtail({
subsets: ["latin"],
weight: "400",
variable: "--font-yellowtail",
});
export const gloria = Gloria_Hallelujah({
subsets: ["latin"],
weight: "400",
variable: "--font-gloria-hallelujah",
});
export const courgette = Courgette({
subsets: ["latin"],
weight: "400",
variable: "--font-courgette",
});
export const almendra = Almendra({
subsets: ["latin"],
weight: "400",
variable: "--font-almendra",
});
export const orbitron = { className: "", variable: "--font-orbitron" }; // Statement-Schriftarten
export const zenDots = { className: "", variable: "--font-zendots" }; export const oswald = Oswald({
export const audiowide = { className: "", variable: "--font-audiowide" }; subsets: ["latin"],
export const exo2 = { className: "", variable: "--font-exo2" }; weight: ["200", "300", "400", "500", "600", "700"],
export const rajdhani = { className: "", variable: "--font-rajdhani" }; variable: "--font-oswald",
export const syncopate = { className: "", variable: "--font-syncopate" }; });
export const pressStart2p = { className: "", variable: "--font-pressstart2p" }; export const bebasNeue = Bebas_Neue({
export const shareTechMono = { subsets: ["latin"],
className: "", weight: "400",
variable: "--font-sharetechmono", variable: "--font-bebas-neue",
}; });
export const ultra = Ultra({
subsets: ["latin"],
weight: "400",
variable: "--font-ultra",
});
export const stint = Stint_Ultra_Condensed({
subsets: ["latin"],
weight: "400",
variable: "--font-stint-ultra-condensed",
});
export const playfair = Playfair_Display({
subsets: ["latin"],
weight: ["400", "500", "600", "700", "800", "900"],
variable: "--font-playfair-display",
});
export const abril = Abril_Fatface({
subsets: ["latin"],
weight: "400",
variable: "--font-abril-fatface",
});
export const permanentMarker = Permanent_Marker({
subsets: ["latin"],
weight: "400",
variable: "--font-permanent-marker",
});
export const alfaSlab = Alfa_Slab_One({
subsets: ["latin"],
weight: "400",
variable: "--font-alfa-slab-one",
});
export const blackOps = Black_Ops_One({
subsets: ["latin"],
weight: "400",
variable: "--font-black-ops-one",
});
export const germania = Germania_One({
subsets: ["latin"],
weight: "400",
variable: "--font-germania-one",
});
export const holtwood = Holtwood_One_SC({
subsets: ["latin"],
weight: "400",
variable: "--font-holtwood-one-sc",
});
export const playfairDisplay = { // Futuristische Schriftarten
className: "", export const exo = Exo({
variable: "--font-playfairdisplay", subsets: ["latin"],
}; weight: ["100", "200", "300", "400", "500", "600", "700", "800", "900"],
export const cinzel = { className: "", variable: "--font-cinzel" }; variable: "--font-exo",
export const italiana = { className: "", variable: "--font-italiana" }; });
export const youngSerif = { className: "", variable: "--font-youngserif" }; export const orbitron = Orbitron({
export const caprasimo = { className: "", variable: "--font-caprasimo" }; subsets: ["latin"],
export const righteous = { className: "", variable: "--font-righteous" }; weight: ["400", "500", "600", "700", "800", "900"],
export const luxuriousRoman = { variable: "--font-orbitron",
className: "", });
variable: "--font-luxuriousroman", export const audiowide = Audiowide({
}; subsets: ["latin"],
weight: "400",
variable: "--font-audiowide",
});
export const rajdhani = Rajdhani({
subsets: ["latin"],
weight: ["300", "400", "500", "600", "700"],
variable: "--font-rajdhani",
});
export const spaceMono = Space_Mono({
subsets: ["latin"],
weight: ["400", "700"],
variable: "--font-space-mono",
});
export const questrial = Questrial({
subsets: ["latin"],
weight: "400",
variable: "--font-questrial",
});
export const syncopate = Syncopate({
subsets: ["latin"],
weight: "400",
variable: "--font-syncopate",
});
export const unicaOne = Unica_One({
subsets: ["latin"],
weight: "400",
variable: "--font-unica-one",
});
export const italiana = Italiana({
subsets: ["latin"],
weight: "400",
variable: "--font-italiana",
});
export const staatliches = Staatliches({
subsets: ["latin"],
weight: "400",
variable: "--font-staatliches",
});
export const vt323 = { className: "", variable: "--font-vt323" }; // Ästhetische Schriftarten
export const neonderthaw = { className: "", variable: "--font-neonderthaw" }; export const pressStart2p = Press_Start_2P({
subsets: ["latin"],
// 2) SystemFonts weight: "400",
export const systemFonts = { variable: "--font-press-start-2p",
helvetica: { className: "font-helvetica", variable: "--font-helvetica" }, });
arial: { className: "font-arial", variable: "--font-arial" }, export const righteous = Righteous({
comicSans: { className: "font-comicsans", variable: "--font-comicsans" }, subsets: ["latin"],
}; weight: "400",
variable: "--font-righteous",
// 3) PseudoFonts });
export const pseudoFonts = { export const metalMania = Metal_Mania({
bubble: { className: "", variable: "--font-bubble" }, subsets: ["latin"],
glitch: { className: "", variable: "--font-glitch" }, weight: "400",
wide: { className: "", variable: "--font-wide" }, variable: "--font-metal-mania",
upsideDown: { className: "", variable: "--font-upsidedown" }, });
strikethrough: { className: "", variable: "--font-strikethrough" }, export const alegreya = Alegreya({
underline: { className: "", variable: "--font-underline" }, subsets: ["latin"],
}; weight: ["400", "500", "600", "700", "800", "900"],
variable: "--font-alegreya",
// Zusammenfassung aller Fonts });
export const fonts = { export const spectral = Spectral({
Inter: inter, subsets: ["latin"],
Roboto: roboto, weight: ["200", "300", "400", "500", "600", "700", "800"],
Open_Sans: openSans, variable: "--font-spectral",
Montserrat: montserrat, });
Raleway: raleway, export const fjallaOne = Fjalla_One({
Poppins: poppins, subsets: ["latin"],
Manrope: manrope, weight: "400",
DM_Sans: dmSans, variable: "--font-fjalla-one",
Plus_Jakarta_Sans: plusJakartaSans, });
Space_Grotesk: spaceGrotesk, export const glassAntiqua = Glass_Antiqua({
Dancing_Script: dancingScript, subsets: ["latin"],
Pacifico: pacifico, weight: "400",
Caveat: caveat, variable: "--font-glass-antiqua",
Indie_Flower: indieFlower, });
Great_Vibes: greatVibes, export const cinzelDecorative = Cinzel_Decorative({
Sacramento: sacramento, subsets: ["latin"],
Alex_Brush: alexBrush, weight: "400",
Amatic_SC: amaticSC, variable: "--font-cinzel-decorative",
Marck_Script: marckScript, });
Protest_Revolution: protestRevolution, export const andika = Andika({
Anton: anton, subsets: ["latin"],
Bebas_Neue: bebasNeue, weight: "400",
Oswald: oswald, variable: "--font-andika",
Bangers: bangers, });
Ultra: ultra,
Abril_Fatface: abrilFatface,
Fjalla_One: fjallaOne,
Fredoka_One: fredokaOne,
Luckiest_Guy: luckiestGuy,
Fugaz_One: fugazOne,
Shrikhand: shrikhand,
Chango: chango,
Gravitas_One: gravitasOne,
Coiny: coiny,
Quicksand: quicksand,
Orbitron: orbitron,
Zen_Dots: zenDots,
Audiowide: audiowide,
Exo_2: exo2,
Rajdhani: rajdhani,
Syncopate: syncopate,
Press_Start_2P: pressStart2p,
Share_Tech_Mono: shareTechMono,
Playfair_Display: playfairDisplay,
Cinzel: cinzel,
Italiana: italiana,
Young_Serif: youngSerif,
Caprasimo: caprasimo,
Righteous: righteous,
Luxurious_Roman: luxuriousRoman,
VT323: vt323,
Neonderthaw: neonderthaw,
...systemFonts,
...pseudoFonts,
};
export const getFontData = (key) => fonts[key] ?? inter;

21
lib/posthog.js Normal file
View File

@@ -0,0 +1,21 @@
// lib/posthog.ts
import { PostHog } from "posthog-node";
export function PostHogClient() {
// Server-Keys verwenden (ohne NEXT_PUBLIC_)
const key = 'phc_1j3wKLzEVz6QGnAZ6jg1njZP8XsAPbNDchwLGvjjc0e'//process.env.POSTHOG_API_KEY;
const host = process.env.POSTHOG_HOST ?? "https://us.i.posthog.com";
if (!key) {
// Fail fast sonst sendest du stumm nichts
throw new Error("POSTHOG_API_KEY ist nicht gesetzt (serverseitige Env).");
}
const client = new PostHog(key, {
host,
flushAt: 1,
flushInterval: 0,
});
return client;
}

View File

@@ -1,14 +1,68 @@
/** /**
* Enthält **nur** die CSSVariablenNamen, die next/font im Browser setzt. * Enthält **nur** die CSSVariablenNamen, die next/font im Browser setzt.
* In fonts.js werden sie erzeugt, hier referenzieren wir sie nur. * In fonts.js oder per @font-face werden sie erzeugt hier referenzieren wir sie.
*/ */
export default { export default {
montserrat: "--font-montserrat", montserrat: "--font-montserrat",
bebasneue: "--font-bebasneue", lato: "--font-lato",
raleway: "--font-raleway",
poppins: "--font-poppins",
"open-sans": "--font-open-sans",
roboto: "--font-roboto",
"work-sans": "--font-work-sans",
"noto-sans": "--font-noto-sans",
jost: "--font-jost",
quicksand: "--font-quicksand",
"averia-libre": "--font-averia-libre",
philosopher: "--font-philosopher",
pacifico: "--font-pacifico", pacifico: "--font-pacifico",
sacramento: "--font-sacramento",
caveat: "--font-caveat", caveat: "--font-caveat",
fredokaone: "--font-fredokaone", "dancing-script": "--font-dancing-script",
playfair: "--font-playfair", "indie-flower": "--font-indie-flower",
vt323: "--font-vt323", "amatic-sc": "--font-amatic-sc",
// … alle weiteren Fonts, die du brauchst "kaushan-script": "--font-kaushan-script",
"architects-daughter": "--font-architects-daughter",
neucha: "--font-neucha",
"great-vibes": "--font-great-vibes",
satisfy: "--font-satisfy",
yellowtail: "--font-yellowtail",
"gloria-hallelujah": "--font-gloria-hallelujah",
oswald: "--font-oswald",
"bebas-neue": "--font-bebas-neue",
ultra: "--font-ultra",
"stint-ultra-condensed": "--font-stint-ultra-condensed",
"playfair-display": "--font-playfair-display",
"abril-fatface": "--font-abril-fatface",
"permanent-marker": "--font-permanent-marker",
"alfa-slab-one": "--font-alfa-slab-one",
"black-ops-one": "--font-black-ops-one",
"germania-one": "--font-germania-one",
"holtwood-one-sc": "--font-holtwood-one-sc",
courgette: "--font-courgette",
exo: "--font-exo",
orbitron: "--font-orbitron",
audiowide: "--font-audiowide",
rajdhani: "--font-rajdhani",
"space-mono": "--font-space-mono",
questrial: "--font-questrial",
syncopate: "--font-syncopate",
"unica-one": "--font-unica-one",
italiana: "--font-italiana",
staatliches: "--font-staatliches",
"press-start-2p": "--font-press-start-2p",
righteous: "--font-righteous",
"metal-mania": "--font-metal-mania",
alegreya: "--font-alegreya",
spectral: "--font-spectral",
"fjalla-one": "--font-fjalla-one",
"glass-antiqua": "--font-glass-antiqua",
"cinzel-decorative": "--font-cinzel-decorative",
andika: "--font-andika",
almendra: "--font-almendra",
}; };

View File

@@ -1,9 +1,12 @@
/** @type {import('next').NextConfig} */ // next.config.js
const nextConfig = { const path = require('path');
// Deine sonstigen NextOptionen, z.B.: const withFlowbiteReact = require('flowbite-react/plugin/nextjs');
// reactStrictMode: true,
// images: { domains: [...] },
// rewrites: async () => [ ... ],
};
module.exports = nextConfig; const nextConfig = {
output: 'export',
images: { unoptimized: true },
webpack: (config) => {
config.resolve.alias['@'] = path.resolve(process.cwd());
return config;
},
};

View File

@@ -3,6 +3,8 @@ import path from "path";
import withFlowbiteReact from "flowbite-react/plugin/nextjs"; import withFlowbiteReact from "flowbite-react/plugin/nextjs";
const nextConfig = { const nextConfig = {
output: "export",
images: { unoptimized: true },
webpack: (config) => { webpack: (config) => {
config.resolve.alias["@"] = path.resolve(process.cwd()); config.resolve.alias["@"] = path.resolve(process.cwd());
return config; return config;

1270
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -20,6 +20,8 @@
"html2canvas": "^1.4.1", "html2canvas": "^1.4.1",
"lucide-react": "^0.292.0", "lucide-react": "^0.292.0",
"next": "^14.0.4", "next": "^14.0.4",
"posthog-js": "^1.259.0",
"posthog-node": "^5.6.0",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-helmet": "^6.1.0", "react-helmet": "^6.1.0",

View File

@@ -1,17 +1,75 @@
// pages/_app.jsx // pages/app.js
import "@/styles/tailwind.build.css"; // dein TailwindBuild import "@/styles/tailwind.build.css";
import "../styles/globals.css";
import { fonts } from "@/lib/fonts"; // Alle exportierten Schriftarten aus lib/fonts.js importieren
import {
// Alle CSSVariablen aus deinen next/fontLoaders, damit die Utilities greifen montserrat,
const allFontVars = Object.values(fonts) lato,
.map((f) => f.variable) raleway,
.join(" "); poppins,
openSans,
roboto,
workSans,
notoSans,
jost,
quicksand,
averiaLibre,
philosopher,
pacifico,
sacramento,
caveat,
dancingScript,
indieFlower,
amatic,
kaushan,
architects,
neucha,
greatVibes,
satisfy,
yellowtail,
gloria,
courgette,
almendra,
oswald,
bebasNeue,
ultra,
stint,
playfair,
abril,
permanentMarker,
alfaSlab,
blackOps,
germania,
holtwood,
exo,
orbitron,
audiowide,
rajdhani,
spaceMono,
questrial,
syncopate,
unicaOne,
italiana,
staatliches,
pressStart2p,
righteous,
metalMania,
alegreya,
spectral,
fjallaOne,
glassAntiqua,
cinzelDecorative,
andika,
} from "@/lib/fonts";
export default function MyApp({ Component, pageProps }) { export default function MyApp({ Component, pageProps }) {
// Die Variablennamen aller Schriftarten in einer Klasse zusammenfassen
const fontVariables = `${montserrat.variable} ${lato.variable} ${raleway.variable} ${poppins.variable} ${openSans.variable} ${roboto.variable} ${workSans.variable} ${notoSans.variable} ${jost.variable} ${quicksand.variable} ${averiaLibre.variable} ${philosopher.variable} ${pacifico.variable} ${sacramento.variable} ${caveat.variable} ${dancingScript.variable} ${indieFlower.variable} ${amatic.variable} ${kaushan.variable} ${architects.variable} ${neucha.variable} ${greatVibes.variable} ${satisfy.variable} ${yellowtail.variable} ${gloria.variable} ${courgette.variable} ${almendra.variable} ${oswald.variable} ${bebasNeue.variable} ${ultra.variable} ${stint.variable} ${playfair.variable} ${abril.variable} ${permanentMarker.variable} ${alfaSlab.variable} ${blackOps.variable} ${germania.variable} ${holtwood.variable} ${exo.variable} ${orbitron.variable} ${audiowide.variable} ${rajdhani.variable} ${spaceMono.variable} ${questrial.variable} ${syncopate.variable} ${unicaOne.variable} ${italiana.variable} ${staatliches.variable} ${pressStart2p.variable} ${righteous.variable} ${metalMania.variable} ${alegreya.variable} ${spectral.variable} ${fjallaOne.variable} ${glassAntiqua.variable} ${cinzelDecorative.variable} ${andika.variable}`;
return ( return (
<main className={allFontVars}> <div className={fontVariables}>
<Component {...pageProps} /> <Component {...pageProps} />
</main> </div>
); );
} }

View File

@@ -14,10 +14,18 @@ export default class MyDocument extends Document {
crossOrigin="" crossOrigin=""
/> />
{/* Alle 30 GoogleFonts */} {/* Google Fonts ALLE 60 Fonts */}
<link <link
rel="stylesheet" rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Inter:wght@100..900&family=Roboto:wght@100..900&family=Open+Sans&family=Montserrat:wght@100..900&family=Raleway:wght@100..900&family=Poppins:wght@100..900&family=Manrope:wght@100..700&family=Dancing+Script&family=Pacifico&family=Caveat&family=Indie+Flower&family=Great+Vibes&family=Sacramento&family=Alex+Brush&family=Anton&family=Bebas+Neue&family=Oswald:wght@200..700&family=Bangers&family=Abril+Fatface&family=Fredoka+One&family=Luckiest+Guy&family=Orbitron&family=Audiowide&family=Exo+2&family=Rajdhani&family=Syncopate&family=Press+Start+2P&family=Share+Tech+Mono&family=Playfair+Display&family=Cinzel&family=Italiana&family=Young+Serif&family=Caprasimo&family=Righteous&family=Luxurious+Roman&family=VT323&family=Neonderthaw&display=swap" href="https://fonts.googleapis.com/css2?family=Inter:wght@100..900&family=Roboto&family=Open+Sans&family=Montserrat:wght@100..900&family=Raleway:wght@100..900&family=Poppins:wght@100..900&family=Manrope:wght@100..700&family=Jost:wght@100..900&family=Quicksand&family=Noto+Sans&family=Syncopate&family=Orbitron&family=Work+Sans&family=Spectral&family=Philosopher&family=Alegreya&family=Holtwood+One+SC&family=Italiana&family=Almendra&family=Cinzel+Decorative&family=Staatliches&family=Averia+Libre&family=Germania+One&display=swap"
/>
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Pacifico&family=Great+Vibes&family=Courgette&family=Architects+Daughter&family=Neucha&family=Satisfy&family=Yellowtail&family=Indie+Flower&family=Gloria+Hallelujah&family=Alex+Brush&family=Dancing+Script&family=Kaushan+Script&family=Sacramento&family=Amatic+SC&family=Caveat&display=swap"
/>
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Anton&family=Bebas+Neue&family=Ultra&family=Oswald:wght@200..700&family=Playfair+Display&family=Abril+Fatface&family=Black+Ops+One&family=Righteous&family=Metal+Mania&family=Press+Start+2P&family=Stint+Ultra+Condensed&family=Exo&family=Audiowide&family=Rajdhani&family=Questrial&family=Space+Mono&family=Unica+One&family=Glass+Antiqua&family=Fjalla+One&family=Bungee&family=Andika&family=Alfa+Slab+One&family=Permanent+Marker&display=swap"
/> />
</Head> </Head>
<body> <body>

23
pages/api/track.js Normal file
View File

@@ -0,0 +1,23 @@
// pages/api/track.js
import { PostHogClient } from "@/lib/posthog";
export default async function handler(req, res) {
const posthog = PostHogClient();
try {
const { event, properties, distinctId } = req.body;
await posthog.capture({
distinctId: distinctId || "server_event",
event: event || "default_event",
properties: properties || {},
});
await posthog.shutdown();
return res.status(200).json({ success: true });
} catch (error) {
console.error("PostHog error:", error);
return res.status(500).json({ success: false, error: error.message });
}
}

View File

@@ -1,32 +0,0 @@
// pages/demo.jsx
import React from "react";
import FontCard from "@/components/ui/FontCard"; // DefaultImport
import { fonts } from "@/lib/fonts";
export default function Demo() {
// Absicherung gegen undefined beim SSR
const robotoClass = fonts.roboto?.className || "";
return (
<section className="space-y-8 p-8">
{/* 1. next/font (voll integriert) */}
<h2 className={`${robotoClass} text-4xl`}>
Roboto aus next/font
</h2>
{/* 2. TailwindUtility aus Map */}
<p className="font-montserrat text-xl">
Dieselbe Font via <code>font-montserrat</code>
</p>
{/* 3. Deine PreviewKomponente */}
<FontCard
fontName="Pacifico"
transformedText="Hallo Instagram!"
category="handwriting"
isPopular
index={0}
/>
</section>
);
}

View File

@@ -1,7 +1,9 @@
// pages/index.jsx // pages/index.jsx
import React, { useState, useEffect, useMemo, useCallback } from "react"; import React, { useState, useEffect, useMemo, useCallback } from "react";
import Head from "next/head"; import Head from "next/head";
import { useRouter } from "next/router";
import { motion, AnimatePresence } from "framer-motion"; import { motion, AnimatePresence } from "framer-motion";
import posthog from "posthog-js";
import { import {
fontTransforms, fontTransforms,
@@ -9,25 +11,93 @@ import {
getPopularFonts, getPopularFonts,
transformText, transformText,
} from "@/components/fontTransforms"; } from "@/components/fontTransforms";
import MobileOptimizedHeader from "@/components/MobileOptimizedHeader"; import MobileOptimizedHeader from "@/components/MobileOptimizedHeader";
import EnhancedTextInput from "@/components/EnhancedTextInput"; import EnhancedTextInput from "@/components/EnhancedTextInput";
import ImprovedCategoryFilter from "@/components/ImprovedCategoryFilter"; import ImprovedCategoryFilter from "@/components/ImprovedCategoryFilter";
import PerformanceOptimizedFontCard from "@/components/PerformanceOptimizedFontCard"; import PerformanceOptimizedFontCard from "@/components/PerformanceOptimizedFontCard";
import InfoSection from "@/components/InfoSection"; import InfoSection from "@/components/InfoSection";
import SocialButtons from "@/components/SocialButtons"; import SocialButtons from "@/components/SocialButtons";
import FancyTextPreview from "@/components/FancyTextPreview";
import SEOHead from "@/components/SEOHead"; import SEOHead from "@/components/SEOHead";
/* -------------------- PostHog: Client Init + Pageviews -------------------- */
// Fallback-Init (falls du instrumentation-client.ts noch nicht nutzt)
if (typeof window !== "undefined" && !(posthog).__initialized) {
const key = process.env.NEXT_PUBLIC_POSTHOG_KEY || "";
const host = process.env.NEXT_PUBLIC_POSTHOG_HOST || "https://us.i.posthog.com";
if (key) {
posthog.init(key, {
api_host: host,
capture_pageview: false, // Pageviews steuern wir selbst unten
loaded: () => {
if (process.env.NODE_ENV === "development") posthog.debug();
},
});
// kleiner Guard gegen Doppel-Init bei Fast Refresh
(posthog).__initialized = true;
} else {
console.warn("⚠️ NEXT_PUBLIC_POSTHOG_KEY ist nicht gesetzt");
}
}
/* ------------------------------------------------------------------------- */
if (typeof window !== "undefined") { if (typeof window !== "undefined") {
sessionStorage.removeItem("fancytext_recent_fonts"); sessionStorage.removeItem("fancytext_recent_fonts");
} }
export default function HomePage() { export default function HomePage() {
const router = useRouter();
// --- Helper: Server-Tracking via /api/track ---
const serverTrack = useCallback(async (payload) => {
try {
await fetch("/api/track", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload),
});
} catch {
// optional: console.warn("Server track failed", e);
}
}, []);
// Pageview-Tracking (pages router)
useEffect(() => {
const send = (url) => {
const href =
typeof window !== "undefined" && window.location ? window.location.href : url;
// Client-Pageview
posthog.capture("$pageview", {
$current_url: href,
path: url,
});
// Server-Pageview (optional, für serverseitige Analysen)
serverTrack({
distinctId: "anon_client",
event: "$pageview",
properties: { path: url, href },
});
};
// initial
if (router?.asPath) send(router.asPath);
const handleRouteChange = (url) => send(url);
router.events.on("routeChangeComplete", handleRouteChange);
return () => router.events.off("routeChangeComplete", handleRouteChange);
}, [router, serverTrack]);
const [inputText, setInputText] = useState("Hello Instagram!"); const [inputText, setInputText] = useState("Hello Instagram!");
const [previewFont, setPreviewFont] = useState(null); const [previewFont, setPreviewFont] = useState(null);
const [selectedCategory, setSelectedCategory] = useState("all"); const [selectedCategory, setSelectedCategory] = useState("all");
const [searchQuery, setSearchQuery] = useState(""); const [searchQuery, setSearchQuery] = useState("");
const [recentFonts, setRecentFonts] = useState([]); const [recentFonts, setRecentFonts] = useState([]);
const [isMobile, setIsMobile] = useState(false); const [isMobile, setIsMobile] = useState(false);
const [animationsEnabled, setAnimationsEnabled] = useState(() => { const [animationsEnabled, setAnimationsEnabled] = useState(() => {
if (typeof window !== "undefined") { if (typeof window !== "undefined") {
const hasReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches; const hasReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
@@ -40,7 +110,9 @@ export default function HomePage() {
useEffect(() => { useEffect(() => {
const checkMobile = () => { const checkMobile = () => {
if (typeof window !== "undefined") { if (typeof window !== "undefined") {
setIsMobile(window.innerWidth < 768 || /iPhone|iPad|iPod|Android/i.test(navigator.userAgent)); setIsMobile(
window.innerWidth < 768 || /iPhone|iPad|iPod|Android/i.test(navigator.userAgent)
);
} }
}; };
checkMobile(); checkMobile();
@@ -80,50 +152,124 @@ export default function HomePage() {
return counts; return counts;
}, []); }, []);
const trackFontCopy = useCallback((fontName, text) => { const trackFontCopy = useCallback(
window.gtag?.("event", "font_copied", { (fontName, text) => {
font_name: fontName, // Client-Event
text_length: text.length, posthog.capture("font_copied", {
category: fontTransforms[fontName]?.category, font_name: fontName,
}); text_length: text.length,
category: fontTransforms[fontName]?.category,
});
setRecentFonts((prev) => { // Server-Event
const updated = [fontName, ...prev.filter((f) => f !== fontName)].slice(0, 5); serverTrack({
return updated; distinctId: "anon_client",
}); event: "font_copied",
}, []); properties: {
font_name: fontName,
text_length: text.length,
category: fontTransforms[fontName]?.category,
},
});
const trackFontLike = useCallback((fontName, liked) => { setRecentFonts((prev) => {
window.gtag?.("event", "font_liked", { const updated = [fontName, ...prev.filter((f) => f !== fontName)].slice(0, 5);
font_name: fontName, return updated;
action: liked ? "like" : "unlike", });
}); },
}, []); [serverTrack]
);
const trackFontLike = useCallback(
(fontName, liked) => {
posthog.capture("font_liked", {
font_name: fontName,
action: liked ? "like" : "unlike",
});
serverTrack({
distinctId: "anon_client",
event: "font_liked",
properties: { font_name: fontName, action: liked ? "like" : "unlike" },
});
},
[serverTrack]
);
const handleQuickShare = useCallback(async () => { const handleQuickShare = useCallback(async () => {
const shareData = { const shareData = {
title: "FancyText - Cool Fonts! 🔥", title: "FancyText - Cool Fonts! 🔥",
text: "Check out this app for cool Instagram & TikTok fonts! 30+ fonts free ✨", text: "Check out this app for cool Instagram & TikTok fonts! 30+ fonts free ✨",
url: window.location.href, url: typeof window !== "undefined" ? window.location.href : "https://fancytext.app",
}; };
if (navigator.share) { if (navigator.share) {
try { try {
await navigator.share(shareData); await navigator.share(shareData);
} catch {} posthog.capture("app_shared", { method: "web_share_api" });
serverTrack({
distinctId: "anon_client",
event: "app_shared",
properties: { method: "web_share_api" },
});
} catch {
posthog.capture("app_share_failed");
serverTrack({
distinctId: "anon_client",
event: "app_share_failed",
properties: {},
});
}
} else { } else {
await navigator.clipboard.writeText(`${shareData.text}\n${shareData.url}`); await navigator.clipboard.writeText(`${shareData.text}\n${shareData.url}`);
posthog.capture("app_shared", { method: "clipboard_copy" });
serverTrack({
distinctId: "anon_client",
event: "app_shared",
properties: { method: "clipboard_copy" },
});
alert("Link copied to clipboard! 🗌"); alert("Link copied to clipboard! 🗌");
} }
window.gtag?.("event", "app_shared", { method: "button_click" }); }, [serverTrack]);
}, []);
const handleTextChange = useCallback((text) => { const handleTextChange = useCallback(
setInputText(text); (text) => {
setPreviewFont(null); setInputText(text);
}, []); setPreviewFont(null);
posthog.capture("text_changed", { length: text?.length ?? 0 });
serverTrack({
distinctId: "anon_client",
event: "text_changed",
properties: { length: text?.length ?? 0 },
});
},
[serverTrack]
);
const handleCategoryChange = useCallback((cat) => setSelectedCategory(cat), []); const handleCategoryChange = useCallback(
const handleSearch = useCallback((q) => setSearchQuery(q), []); (cat) => {
setSelectedCategory(cat);
posthog.capture("category_changed", { category: cat });
serverTrack({
distinctId: "anon_client",
event: "category_changed",
properties: { category: cat },
});
},
[serverTrack]
);
const handleSearch = useCallback(
(q) => {
setSearchQuery(q);
posthog.capture("font_search", { query_length: q?.length ?? 0 });
serverTrack({
distinctId: "anon_client",
event: "font_search",
properties: { query_length: q?.length ?? 0 },
});
},
[serverTrack]
);
const handleRandomFont = useCallback(() => { const handleRandomFont = useCallback(() => {
const fontList = Object.keys(fontTransforms); const fontList = Object.keys(fontTransforms);
@@ -136,7 +282,13 @@ export default function HomePage() {
} while (newFont === previewFont && tries < 50); } while (newFont === previewFont && tries < 50);
setPreviewFont(newFont); setPreviewFont(newFont);
}, [previewFont]); posthog.capture("random_font_selected", { font: newFont });
serverTrack({
distinctId: "anon_client",
event: "random_font_selected",
properties: { font: newFont },
});
}, [previewFont, serverTrack]);
const displayText = previewFont const displayText = previewFont
? transformText(inputText || "Try me!", previewFont) ? transformText(inputText || "Try me!", previewFont)
@@ -146,39 +298,56 @@ export default function HomePage() {
<> <>
<Head> <Head>
<title>FancyText | Viral Fonts</title> <title>FancyText | Viral Fonts</title>
<meta name="description" content="Make your posts pop with 30+ copy-paste fonts. Free, no login, mobile-ready. Works on IG, TikTok, Threads & more." /> <meta
name="description"
content="Make your posts pop with 30+ copy-paste fonts. Free, no login, mobile-ready. Works on IG, TikTok, Threads & more."
/>
<link rel="canonical" href="https://fancytext.app" /> <link rel="canonical" href="https://fancytext.app" />
<meta property="og:title" content="30+ Fancy Fonts for TikTok & Instagram 🔥" /> <meta property="og:title" content="30+ Fancy Fonts for TikTok & Instagram 🔥" />
<meta property="og:description" content="Create viral bios, comments & posts in seconds no login, always free." /> <meta
property="og:description"
content="Create viral bios, comments & posts in seconds no login, always free."
/>
<meta property="og:image" content="https://fancytext.app/social-preview.png" /> <meta property="og:image" content="https://fancytext.app/social-preview.png" />
<meta property="og:url" content="https://fancytext.app" /> <meta property="og:url" content="https://fancytext.app" />
<meta property="og:type" content="website" /> <meta property="og:type" content="website" />
<link rel="icon" href="/images/favicon.ico" /> <link rel="icon" href="/images/favicon.ico" />
<meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="mobile-web-app-capable" content="yes" /> <meta name="mobile-web-app-capable" content="yes" />
<script type="application/ld+json" dangerouslySetInnerHTML={{ <script
__html: JSON.stringify({ type="application/ld+json"
"@context": "https://schema.org", dangerouslySetInnerHTML={{
"@type": "WebApplication", __html: JSON.stringify({
name: "FancyText", "@context": "https://schema.org",
url: "https://fancytext.app", "@type": "WebApplication",
applicationCategory: "WebApp", name: "FancyText",
operatingSystem: "All", url: "https://fancytext.app",
offers: { applicationCategory: "WebApp",
"@type": "Offer", operatingSystem: "All",
price: "0.00", offers: {
priceCurrency: "USD", "@type": "Offer",
}, price: "0.00",
}) priceCurrency: "USD",
}} /> },
}),
}}
/>
</Head> </Head>
<div className="fixed top-4 right-4 z-[100] flex gap-4 text-sm text-black bg-white/90 px-3 py-1 rounded-lg shadow-lg backdrop-blur-sm"> <div className="fixed top-4 right-4 z-[100] flex gap-4 text-sm text-black bg-white/90 px-3 py-1 rounded-lg shadow-lg backdrop-blur-sm">
<a href="#about" className="hover:underline">About</a> <a href="#about" className="hover:underline">
<a href="#" onClick={(e) => { About
e.preventDefault(); </a>
document.getElementById("privacy")?.scrollIntoView({ behavior: "smooth" }); <a
}} className="hover:underline">Privacy</a> href="#"
onClick={(e) => {
e.preventDefault();
document.getElementById("privacy")?.scrollIntoView({ behavior: "smooth" });
}}
className="hover:underline"
>
Privacy
</a>
</div> </div>
<div className="min-h-screen bg-gradient-to-br from-indigo-900 via-purple-900 to-pink-800 relative overflow-hidden"> <div className="min-h-screen bg-gradient-to-br from-indigo-900 via-purple-900 to-pink-800 relative overflow-hidden">
@@ -186,7 +355,15 @@ export default function HomePage() {
<div className="relative z-10 container mx-auto px-4 py-8 max-w-6xl"> <div className="relative z-10 container mx-auto px-4 py-8 max-w-6xl">
<MobileOptimizedHeader <MobileOptimizedHeader
animationsEnabled={animationsEnabled} animationsEnabled={animationsEnabled}
onToggleAnimations={setAnimationsEnabled} onToggleAnimations={(val) => {
setAnimationsEnabled(val);
posthog.capture("animations_toggled", { enabled: val });
serverTrack({
distinctId: "anon_client",
event: "animations_toggled",
properties: { enabled: val },
});
}}
totalFonts={Object.keys(fontTransforms).length} totalFonts={Object.keys(fontTransforms).length}
onQuickShare={handleQuickShare} onQuickShare={handleQuickShare}
/> />
@@ -235,7 +412,10 @@ export default function HomePage() {
<PerformanceOptimizedFontCard <PerformanceOptimizedFontCard
key={name} key={name}
fontName={name} fontName={name}
transformedText={transformText(debouncedText, name)} transformedText={{
transformed: debouncedText,
fontClassName: fontTransforms[name].className,
}}
category={fontTransforms[name]?.category} category={fontTransforms[name]?.category}
isPopular={popularFonts.includes(name)} isPopular={popularFonts.includes(name)}
animationsEnabled={animationsEnabled} animationsEnabled={animationsEnabled}

Binary file not shown.

BIN
public/fonts/alegreya.woff2 Normal file

Binary file not shown.

Binary file not shown.

BIN
public/fonts/almendra.woff2 Normal file

Binary file not shown.

Binary file not shown.

BIN
public/fonts/andika.woff2 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/fonts/caveat.woff2 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/fonts/exo.woff2 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/fonts/italiana.woff2 Normal file

Binary file not shown.

BIN
public/fonts/jost.woff2 Normal file

Binary file not shown.

Binary file not shown.

BIN
public/fonts/lato.woff2 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/fonts/neucha.woff2 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/fonts/orbitron.woff2 Normal file

Binary file not shown.

BIN
public/fonts/oswald.woff2 Normal file

Binary file not shown.

BIN
public/fonts/pacifico.woff2 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/fonts/poppins.woff2 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/fonts/rajdhani.woff2 Normal file

Binary file not shown.

BIN
public/fonts/raleway.woff2 Normal file

Binary file not shown.

Binary file not shown.

BIN
public/fonts/roboto.woff2 Normal file

Binary file not shown.

Binary file not shown.

BIN
public/fonts/satisfy.woff2 Normal file

Binary file not shown.

Binary file not shown.

BIN
public/fonts/spectral.woff2 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/fonts/ultra.woff2 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

522
styles/local-fonts.css Normal file
View File

@@ -0,0 +1,522 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
/* ========== FONT-FACE DEFINITIONS ========== */
@font-face {
font-family: "abril-fatface";
src: url("/fonts/abril-fatface.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "alegreya";
src: url("/fonts/alegreya.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "alfa-slab-one";
src: url("/fonts/alfa-slab-one.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "almendra";
src: url("/fonts/almendra.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "amatic-sc";
src: url("/fonts/amatic-sc.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "andika";
src: url("/fonts/andika.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "architects-daughter";
src: url("/fonts/architects-daughter.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "audiowide";
src: url("/fonts/audiowide.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "averia-libre";
src: url("/fonts/averia-libre.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "bebas-neue";
src: url("/fonts/bebas-neue.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "black-ops-one";
src: url("/fonts/black-ops-one.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "caveat";
src: url("/fonts/caveat.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "cinzel-decorative";
src: url("/fonts/cinzel-decorative.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "courgette";
src: url("/fonts/courgette.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "dancing-script";
src: url("/fonts/dancing-script.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "exo";
src: url("/fonts/exo.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "fjalla-one";
src: url("/fonts/fjalla-one.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "germania-one";
src: url("/fonts/germania-one.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "glass-antiqua";
src: url("/fonts/glass-antiqua.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "gloria-hallelujah";
src: url("/fonts/gloria-hallelujah.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "great-vibes";
src: url("/fonts/great-vibes.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "holtwood-one-sc";
src: url("/fonts/holtwood-one-sc.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "indie-flower";
src: url("/fonts/indie-flower.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "italiana";
src: url("/fonts/italiana.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "jost";
src: url("/fonts/jost.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "kaushan-script";
src: url("/fonts/kaushan-script.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "lato";
src: url("/fonts/lato.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "metal-mania";
src: url("/fonts/metal-mania.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "montserrat";
src: url("/fonts/montserrat.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "neucha";
src: url("/fonts/neucha.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "noto-sans";
src: url("/fonts/noto-sans.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "open-sans";
src: url("/fonts/open-sans.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "orbitron";
src: url("/fonts/orbitron.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "oswald";
src: url("/fonts/oswald.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "pacifico";
src: url("/fonts/pacifico.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "permanent-marker";
src: url("/fonts/permanent-marker.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "philosopher";
src: url("/fonts/philosopher.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "playfair-display";
src: url("/fonts/playfair-display.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "poppins";
src: url("/fonts/poppins.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "press-start-2p";
src: url("/fonts/press-start-2p.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "questrial";
src: url("/fonts/questrial.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "quicksand";
src: url("/fonts/quicksand.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "rajdhani";
src: url("/fonts/rajdhani.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "raleway";
src: url("/fonts/raleway.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "righteous";
src: url("/fonts/righteous.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "roboto";
src: url("/fonts/roboto.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "sacramento";
src: url("/fonts/sacramento.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "satisfy";
src: url("/fonts/satisfy.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "space-mono";
src: url("/fonts/space-mono.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "spectral";
src: url("/fonts/spectral.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "staatliches";
src: url("/fonts/staatliches.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "stint-ultra-condensed";
src: url("/fonts/stint-ultra-condensed.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "syncopate";
src: url("/fonts/syncopate.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "ultra";
src: url("/fonts/ultra.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "unica-one";
src: url("/fonts/unica-one.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "work-sans";
src: url("/fonts/work-sans.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "yellowtail";
src: url("/fonts/yellowtail.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
/* ========== TAILWIND UTILITY CLASSES ========== */
@layer utilities {
.font-abril-fatface {
font-family: "abril-fatface", sans-serif;
}
.font-alegreya {
font-family: "alegreya", sans-serif;
}
.font-alfa-slab-one {
font-family: "alfa-slab-one", sans-serif;
}
.font-almendra {
font-family: "almendra", sans-serif;
}
.font-amatic-sc {
font-family: "amatic-sc", sans-serif;
}
.font-andika {
font-family: "andika", sans-serif;
}
.font-architects-daughter {
font-family: "architects-daughter", sans-serif;
}
.font-audiowide {
font-family: "audiowide", sans-serif;
}
.font-averia-libre {
font-family: "averia-libre", sans-serif;
}
.font-bebas-neue {
font-family: "bebas-neue", sans-serif;
}
.font-black-ops-one {
font-family: "black-ops-one", sans-serif;
}
.font-caveat {
font-family: "caveat", sans-serif;
}
.font-cinzel-decorative {
font-family: "cinzel-decorative", sans-serif;
}
.font-courgette {
font-family: "courgette", sans-serif;
}
.font-dancing-script {
font-family: "dancing-script", sans-serif;
}
.font-exo {
font-family: "exo", sans-serif;
}
.font-fjalla-one {
font-family: "fjalla-one", sans-serif;
}
.font-germania-one {
font-family: "germania-one", sans-serif;
}
.font-glass-antiqua {
font-family: "glass-antiqua", sans-serif;
}
.font-gloria-hallelujah {
font-family: "gloria-hallelujah", sans-serif;
}
.font-great-vibes {
font-family: "great-vibes", sans-serif;
}
.font-holtwood-one-sc {
font-family: "holtwood-one-sc", sans-serif;
}
.font-indie-flower {
font-family: "indie-flower", sans-serif;
}
.font-italiana {
font-family: "italiana", sans-serif;
}
.font-jost {
font-family: "jost", sans-serif;
}
.font-kaushan-script {
font-family: "kaushan-script", sans-serif;
}
.font-lato {
font-family: "lato", sans-serif;
}
.font-metal-mania {
font-family: "metal-mania", sans-serif;
}
.font-montserrat {
font-family: "montserrat", sans-serif;
}
.font-neucha {
font-family: "neucha", sans-serif;
}
.font-noto-sans {
font-family: "noto-sans", sans-serif;
}
.font-open-sans {
font-family: "open-sans", sans-serif;
}
.font-orbitron {
font-family: "orbitron", sans-serif;
}
.font-oswald {
font-family: "oswald", sans-serif;
}
.font-pacifico {
font-family: "pacifico", sans-serif;
}
.font-permanent-marker {
font-family: "permanent-marker", sans-serif;
}
.font-philosopher {
font-family: "philosopher", sans-serif;
}
.font-playfair-display {
font-family: "playfair-display", sans-serif;
}
.font-poppins {
font-family: "poppins", sans-serif;
}
.font-press-start-2p {
font-family: "press-start-2p", sans-serif;
}
.font-questrial {
font-family: "questrial", sans-serif;
}
.font-quicksand {
font-family: "quicksand", sans-serif;
}
.font-rajdhani {
font-family: "rajdhani", sans-serif;
}
.font-raleway {
font-family: "raleway", sans-serif;
}
.font-righteous {
font-family: "righteous", sans-serif;
}
.font-roboto {
font-family: "roboto", sans-serif;
}
.font-sacramento {
font-family: "sacramento", sans-serif;
}
.font-satisfy {
font-family: "satisfy", sans-serif;
}
.font-space-mono {
font-family: "space-mono", sans-serif;
}
.font-spectral {
font-family: "spectral", sans-serif;
}
.font-staatliches {
font-family: "staatliches", sans-serif;
}
.font-stint-ultra-condensed {
font-family: "stint-ultra-condensed", sans-serif;
}
.font-syncopate {
font-family: "syncopate", sans-serif;
}
.font-ultra {
font-family: "ultra", sans-serif;
}
.font-unica-one {
font-family: "unica-one", sans-serif;
}
.font-work-sans {
font-family: "work-sans", sans-serif;
}
.font-yellowtail {
font-family: "yellowtail", sans-serif;
}
}

View File

@@ -1,29 +1,79 @@
// tailwind.config.js /** @type {import('tailwindcss').Config} */
import { fonts } from "./lib/fonts.js"; module.exports = {
const fontFamily = Object.fromEntries(
Object.entries(fonts)
.filter(([, d]) => d?.variable)
.map(([name, d]) => [
name.toLowerCase().replace(/\s+/g, ""),
[`var(${d.variable})`],
])
);
export default {
content: [ content: [
"./pages/**/*.{js,jsx,ts,tsx}", "./pages/**/*.{js,jsx,ts,tsx}",
"./components/**/*.{js,jsx,ts,tsx}", "./components/**/*.{js,jsx,ts,tsx}",
"./lib/**/*.{js,jsx,ts,tsx}", "./lib/**/*.{js,jsx,ts,tsx}",
"./styles/**/*.{css,js}", "./styles/**/*.{css,js}",
], ],
theme: { extend: { fontFamily } }, theme: {
extend: {
fontFamily: {
"abril-fatface": ['"Abril Fatface"', "serif"],
alegreya: ["Alegreya", "sans-serif"],
"alfa-slab-one": ['"Alfa Slab One"', "sans-serif"],
almendra: ["Almendra", "serif"],
"amatic-sc": ['"Amatic SC"', "cursive"],
andika: ["Andika", "sans-serif"],
"architects-daughter": ['"Architects Daughter"', "cursive"],
audiowide: ["Audiowide", "sans-serif"],
"averia-libre": ['"Averia Libre"', "cursive"],
"bebas-neue": ['"Bebas Neue"', "sans-serif"],
"black-ops-one": ['"Black Ops One"', "sans-serif"],
caveat: ["Caveat", "cursive"],
"cinzel-decorative": ['"Cinzel Decorative"', "serif"],
courgette: ["Courgette", "cursive"],
"dancing-script": ['"Dancing Script"', "cursive"],
exo: ["Exo", "sans-serif"],
"fjalla-one": ['"Fjalla One"', "sans-serif"],
"germania-one": ['"Germania One"', "sans-serif"],
"glass-antiqua": ['"Glass Antiqua"', "cursive"],
"gloria-hallelujah": ['"Gloria Hallelujah"', "cursive"],
"great-vibes": ['"Great Vibes"', "cursive"],
"holtwood-one-sc": ['"Holtwood One SC"', "sans-serif"],
"indie-flower": ['"Indie Flower"', "cursive"],
italiana: ["Italiana", "serif"],
jost: ["Jost", "sans-serif"],
"kaushan-script": ['"Kaushan Script"', "cursive"],
lato: ["Lato", "sans-serif"],
"metal-mania": ['"Metal Mania"', "sans-serif"],
montserrat: ["Montserrat", "sans-serif"],
neucha: ["Neucha", "sans-serif"],
"noto-sans": ['"Noto Sans"', "sans-serif"],
"open-sans": ['"Open Sans"', "sans-serif"],
orbitron: ["Orbitron", "sans-serif"],
oswald: ["Oswald", "sans-serif"],
pacifico: ["Pacifico", "cursive"],
"permanent-marker": ['"Permanent Marker"', "sans-serif"],
philosopher: ["Philosopher", "serif"],
"playfair-display": ['"Playfair Display"', "serif"],
poppins: ["Poppins", "sans-serif"],
"press-start-2p": ['"Press Start 2P"', "monospace"],
questrial: ["Questrial", "sans-serif"],
quicksand: ["Quicksand", "sans-serif"],
rajdhani: ["Rajdhani", "sans-serif"],
raleway: ["Raleway", "serif"],
righteous: ["Righteous", "sans-serif"],
roboto: ["Roboto", "sans-serif"],
sacramento: ["Sacramento", "cursive"],
satisfy: ["Satisfy", "cursive"],
"space-mono": ['"Space Mono"', "sans-serif"],
spectral: ["Spectral", "sans-serif"],
staatliches: ["Staatliches", "serif"],
"stint-ultra-condensed": ['"Stint Ultra Condensed"', "sans-serif"],
syncopate: ["Syncopate", "sans-serif"],
ultra: ["Ultra", "serif"],
"unica-one": ['"Unica One"', "sans-serif"],
"work-sans": ['"Work Sans"', "sans-serif"],
yellowtail: ["Yellowtail", "cursive"],
},
},
},
plugins: [], plugins: [],
// <<< Hier kommt die Safelist >>>
safelist: [ safelist: [
{ {
pattern: /^font-/, pattern: /^font-/,
variants: ["sm", "md", "lg", "xl"], // optional, falls responsive Klassen gebraucht werden variants: ["sm", "md", "lg", "xl"],
}, },
], ],
}; };

View File

@@ -1,4 +1,4 @@
import tailwindFonts from "./lib/tailwind-font-map.js"; // ← **ASCIIMinus!** import tailwindFonts from "./lib/tailwind-font-map.js"; // ← **ASCIIMinus wichtig!**
/** @type {import('tailwindcss').Config} */ /** @type {import('tailwindcss').Config} */
export default { export default {
@@ -10,12 +10,15 @@ export default {
], ],
theme: { theme: {
extend: { extend: {
fontFamily: Object.fromEntries( fontFamily: {
Object.entries(tailwindFonts).map(([k, cssVar]) => [ // Dynamische Zuordnung: z.B. roboto: ['var(--font-roboto)']
k, ...Object.fromEntries(
[`var(${cssVar})`], Object.entries(tailwindFonts).map(([key, cssVar]) => [
]) key,
), [`var(${cssVar})`],
])
),
},
}, },
}, },
plugins: [], plugins: [],

870
unicode-ranges.csv Normal file
View File

@@ -0,0 +1,870 @@
/* latin-ext */
@font-face {
font-family: 'Abril Fatface';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/abrilfatface/v24/zOL64pLDlL1D99S8g8PtiKchq-lmjdLh.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Abril Fatface';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/abrilfatface/v24/zOL64pLDlL1D99S8g8PtiKchq-dmjQ.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Alegreya';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/alegreya/v38/4UacrEBBsBhlBjvfkQjt71kZfyBzPgNG9hU49aqjgSE.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Alegreya';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/alegreya/v38/4UacrEBBsBhlBjvfkQjt71kZfyBzPgNG9hU4-6qj.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Alfa Slab One';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/alfaslabone/v20/6NUQ8FmMKwSEKjnm5-4v-4Jh2dxhe-Wv.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Alfa Slab One';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/alfaslabone/v20/6NUQ8FmMKwSEKjnm5-4v-4Jh2dJhew.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Almendra';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/almendra/v27/H4ckBXKAlMnTn0CskxYzyL6Agw.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Almendra';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/almendra/v27/H4ckBXKAlMnTn0CskxY9yL4.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Amatic SC';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/amaticsc/v27/TUZyzwprpvBS1izr_vOEBOSfQZQ.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Amatic SC';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/amaticsc/v27/TUZyzwprpvBS1izr_vOECuSf.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Andika';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/andika/v26/mem_Ya6iyW-LwqgwZLYQarw.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Andika';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/andika/v26/mem_Ya6iyW-LwqgwarYQ.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Architects Daughter';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/architectsdaughter/v19/KtkxAKiDZI_td1Lkx62xHZHDtgO_Y-bvTYdg4_zg.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Architects Daughter';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/architectsdaughter/v19/KtkxAKiDZI_td1Lkx62xHZHDtgO_Y-bvTYlg4w.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Audiowide';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/audiowide/v21/l7gdbjpo0cum0ckerWCdmA_OIxo.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Audiowide';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/audiowide/v21/l7gdbjpo0cum0ckerWCdlg_O.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin */
@font-face {
font-family: 'Averia Libre';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/averialibre/v16/2V0aKIcMGZEnV6xygz7eNjESBanI.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Bebas Neue';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/bebasneue/v15/JTUSjIg69CK48gW7PXoo9Wdhyzbi.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Bebas Neue';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/bebasneue/v15/JTUSjIg69CK48gW7PXoo9Wlhyw.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Black Ops One';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/blackopsone/v20/qWcsB6-ypo7xBdr6Xshe96H3aDXbtwkh.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Black Ops One';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/blackopsone/v20/qWcsB6-ypo7xBdr6Xshe96H3aDvbtw.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Caveat';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/caveat/v22/WnznHAc5bAfYB2QRah7pcpNvOx-pjfJ9eIupYSxP.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Caveat';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/caveat/v22/WnznHAc5bAfYB2QRah7pcpNvOx-pjfJ9eIWpYQ.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Cinzel Decorative';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/cinzeldecorative/v18/daaCSScvJGqLYhG8nNt8KPPswUAPni7dTMx7aA.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Cinzel Decorative';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/cinzeldecorative/v18/daaCSScvJGqLYhG8nNt8KPPswUAPni7TTMw.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Courgette';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/courgette/v18/wEO_EBrAnc9BLjLQAUk1WPoK7Es.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Courgette';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/courgette/v18/wEO_EBrAnc9BLjLQAUk1VvoK.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Dancing Script';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/dancingscript/v28/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7BMSo3ROp8ltA.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Dancing Script';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/dancingscript/v28/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7BMSo3Sup8.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Exo';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/exo/v24/4UaZrEtFpBI4f1ZSIK9d4LjJ4lM3OwpmO24p.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Exo';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/exo/v24/4UaZrEtFpBI4f1ZSIK9d4LjJ4lM3OwRmOw.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Fjalla One';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/fjallaone/v15/Yq6R-LCAWCX3-6Ky7FAFrO96kigt.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Fjalla One';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/fjallaone/v15/Yq6R-LCAWCX3-6Ky7FAFrOF6kg.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin */
@font-face {
font-family: 'Germania One';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/germaniaone/v20/Fh4yPjrqIyv2ucM2qzBjeS3uywhP.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Glass Antiqua';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/glassantiqua/v25/xfu30Wr0Wn3NOQM2piC0uXOjrLb6NpfR.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Glass Antiqua';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/glassantiqua/v25/xfu30Wr0Wn3NOQM2piC0uXOjrLj6Ng.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Gloria Hallelujah';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/gloriahallelujah/v23/LYjYdHv3kUk9BMV96EIswT9DIbW-MIS71zO0vg.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Gloria Hallelujah';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/gloriahallelujah/v23/LYjYdHv3kUk9BMV96EIswT9DIbW-MIS11zM.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Great Vibes';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/greatvibes/v20/RWmMoKWR9v4ksMfaWd_JN9XLiaQ6DQ.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Great Vibes';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/greatvibes/v20/RWmMoKWR9v4ksMfaWd_JN9XFiaQ.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Holtwood One SC';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/holtwoodonesc/v22/yYLx0hLR0P-3vMFSk1TCq3Txg5BHeLz7HZs.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Holtwood One SC';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/holtwoodonesc/v22/yYLx0hLR0P-3vMFSk1TCq3Txg5BHdrz7.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Indie Flower';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/indieflower/v23/m8JVjfNVeKWVnh3QMuKkFcZVZ0uH5dI.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Indie Flower';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/indieflower/v23/m8JVjfNVeKWVnh3QMuKkFcZVaUuH.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin */
@font-face {
font-family: 'Italiana';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/italiana/v21/QldNNTtLsx4E__B0XQmWaXw.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Jost';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/jost/v19/92zPtBhPNqw79Ij1E865zBUv7myjJTVPNIg8mg.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Jost';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/jost/v19/92zPtBhPNqw79Ij1E865zBUv7myjJTVBNIg.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Kaushan Script';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/kaushanscript/v18/vm8vdRfvXFLG3OLnsO15WYS5DG72wNJHMw.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Kaushan Script';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/kaushanscript/v18/vm8vdRfvXFLG3OLnsO15WYS5DG74wNI.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Lato';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/lato/v24/S6uyw4BMUTPHjxAwXjeu.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Lato';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/lato/v24/S6uyw4BMUTPHjx4wXg.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Metal Mania';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/metalmania/v22/RWmMoKWb4e8kqMfBUdPFJdXLiaQ6DQ.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Metal Mania';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/metalmania/v22/RWmMoKWb4e8kqMfBUdPFJdXFiaQ.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Montserrat';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/montserrat/v30/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw3aXpsog.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Montserrat';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/montserrat/v30/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw5aXo.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic */
@font-face {
font-family: 'Neucha';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/neucha/v17/q5uGsou0JOdh94bfuQltOxU.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin */
@font-face {
font-family: 'Neucha';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/neucha/v17/q5uGsou0JOdh94bfvQlt.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Noto Sans';
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/notosans/v39/o-0mIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjcz6L1SoM-jCpoiyD9A-9U6VLKzA.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Noto Sans';
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/notosans/v39/o-0mIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjcz6L1SoM-jCpoiyD9A-9a6VI.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/opensans/v43/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsjZ0B4uaVIGxA.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/opensans/v43/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsjZ0B4gaVI.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin */
@font-face {
font-family: 'Orbitron';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/orbitron/v34/yMJMMIlzdpvBhQQL_SC3X9yhF25-T1nyGy6BoWgz.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Oswald';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/oswald/v56/TK3_WkUHHAIjg75cFRf3bXL8LICs1_FvsUhiZTaR.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Oswald';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/oswald/v56/TK3_WkUHHAIjg75cFRf3bXL8LICs1_FvsUZiZQ.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Pacifico';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/pacifico/v22/FwZY7-Qmy14u9lezJ-6J6MmTpA.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Pacifico';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/pacifico/v22/FwZY7-Qmy14u9lezJ-6H6Mk.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin */
@font-face {
font-family: 'Permanent Marker';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/permanentmarker/v16/Fh4uPib9Iyv2ucM6pGQMWimMp004La2Cfw.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Philosopher';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/philosopher/v20/vEFV2_5QCwIS4_Dhez5jcWBgT00k0w.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Philosopher';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/philosopher/v20/vEFV2_5QCwIS4_Dhez5jcWBuT00.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Playfair Display';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/playfairdisplay/v39/nuFvD-vYSZviVYUb_rj3ij__anPXJzDwcbmjWBN2PKdFvXDZbtPY_Q.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Playfair Display';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/playfairdisplay/v39/nuFvD-vYSZviVYUb_rj3ij__anPXJzDwcbmjWBN2PKdFvXDXbtM.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Poppins';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiEyp8kv8JHgFVrJJnecmNE.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Poppins';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiEyp8kv8JHgFVrJJfecg.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Press Start 2P';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/pressstart2p/v15/e3t4euO8T-267oIAQAu6jDQyK3nbivN04w.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Press Start 2P';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/pressstart2p/v15/e3t4euO8T-267oIAQAu6jDQyK3nVivM.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Questrial';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/questrial/v18/QdVUSTchPBm7nuUeVf70sCFlq20.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Questrial';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/questrial/v18/QdVUSTchPBm7nuUeVf70viFl.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Quicksand';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/quicksand/v36/6xK-dSZaM9iE8KbpRA_LJ3z8mH9BOJvgkP8o58i-wi40.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Quicksand';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/quicksand/v36/6xK-dSZaM9iE8KbpRA_LJ3z8mH9BOJvgkP8o58a-wg.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Rajdhani';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/rajdhani/v16/LDIxapCSOBg7S-QT7p4JM-aUWA.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Rajdhani';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/rajdhani/v16/LDIxapCSOBg7S-QT7p4HM-Y.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Raleway';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/raleway/v36/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCGPrEHJA.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Raleway';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/raleway/v36/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCIPrE.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Righteous';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/righteous/v18/1cXxaUPXBpj2rGoU7C9WhnGFucE.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Righteous';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/righteous/v18/1cXxaUPXBpj2rGoU7C9WiHGF.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWubEbVmaiArmlw.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWubEbVmUiAo.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Sacramento';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/sacramento/v16/buEzpo6gcdjy0EiZMBUG4CMf_exL.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Sacramento';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/sacramento/v16/buEzpo6gcdjy0EiZMBUG4C0f_Q.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin */
@font-face {
font-family: 'Satisfy';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/satisfy/v22/rP2Hp2yn6lkG50LoCZOIHQ.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Space Mono';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/spacemono/v17/i7dPIFZifjKcF5UAWdDRYE98RWq7.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Space Mono';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/spacemono/v17/i7dPIFZifjKcF5UAWdDRYEF8RQ.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Spectral';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/spectral/v14/rnCr-xNNww_2s0amA9M3knj-SA.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Spectral';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/spectral/v14/rnCr-xNNww_2s0amA9M5kng.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Staatliches';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/staatliches/v14/HI_OiY8KO6hCsQSoAPmtMYeVvpCNOw.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Staatliches';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/staatliches/v14/HI_OiY8KO6hCsQSoAPmtMYebvpA.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Stint Ultra Condensed';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/stintultracondensed/v24/-W_gXIrsVjjeyEnPC45qD2NoFPtBE0xCh2AOox8P6cM.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Stint Ultra Condensed';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/stintultracondensed/v24/-W_gXIrsVjjeyEnPC45qD2NoFPtBE0xCh2AOrR8P.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Syncopate';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/syncopate/v23/pe0sMIuPIYBCpEV5eFdCC_e_O98.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Syncopate';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/syncopate/v23/pe0sMIuPIYBCpEV5eFdCBfe_.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Ultra';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/ultra/v25/zOLy4prXmrtY-uTzwrKz6A.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Ultra';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/ultra/v25/zOLy4prXmrtY-uT9wrI.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Unica One';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/unicaone/v19/DPEuYwWHyAYGVTSmalsRf93eiEY.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Unica One';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/unicaone/v19/DPEuYwWHyAYGVTSmalsRcd3e.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Work Sans';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/worksans/v23/QGY_z_wNahGAdqQ43RhVcIgYT2Xz5u32K0nXBiEJpp_c.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Work Sans';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/worksans/v23/QGY_z_wNahGAdqQ43RhVcIgYT2Xz5u32K0nXBi8Jpg.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Yellowtail';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/yellowtail/v24/OZpGg_pnoDtINPfRIlLohlXHwXD-.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Yellowtail';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/yellowtail/v24/OZpGg_pnoDtINPfRIlLohlvHwQ.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
1 /* latin-ext */
2 @font-face {
3 font-family: 'Abril Fatface';
4 font-style: normal;
5 font-weight: 400;
6 src: url(https://fonts.gstatic.com/s/abrilfatface/v24/zOL64pLDlL1D99S8g8PtiKchq-lmjdLh.woff2) format('woff2');
7 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
8 }
9 /* latin */
10 @font-face {
11 font-family: 'Abril Fatface';
12 font-style: normal;
13 font-weight: 400;
14 src: url(https://fonts.gstatic.com/s/abrilfatface/v24/zOL64pLDlL1D99S8g8PtiKchq-dmjQ.woff2) format('woff2');
15 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
16 }
17 /* latin-ext */
18 @font-face {
19 font-family: 'Alegreya';
20 font-style: normal;
21 font-weight: 400;
22 src: url(https://fonts.gstatic.com/s/alegreya/v38/4UacrEBBsBhlBjvfkQjt71kZfyBzPgNG9hU49aqjgSE.woff2) format('woff2');
23 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
24 }
25 /* latin */
26 @font-face {
27 font-family: 'Alegreya';
28 font-style: normal;
29 font-weight: 400;
30 src: url(https://fonts.gstatic.com/s/alegreya/v38/4UacrEBBsBhlBjvfkQjt71kZfyBzPgNG9hU4-6qj.woff2) format('woff2');
31 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
32 }
33 /* latin-ext */
34 @font-face {
35 font-family: 'Alfa Slab One';
36 font-style: normal;
37 font-weight: 400;
38 src: url(https://fonts.gstatic.com/s/alfaslabone/v20/6NUQ8FmMKwSEKjnm5-4v-4Jh2dxhe-Wv.woff2) format('woff2');
39 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
40 }
41 /* latin */
42 @font-face {
43 font-family: 'Alfa Slab One';
44 font-style: normal;
45 font-weight: 400;
46 src: url(https://fonts.gstatic.com/s/alfaslabone/v20/6NUQ8FmMKwSEKjnm5-4v-4Jh2dJhew.woff2) format('woff2');
47 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
48 }
49 /* latin-ext */
50 @font-face {
51 font-family: 'Almendra';
52 font-style: normal;
53 font-weight: 400;
54 src: url(https://fonts.gstatic.com/s/almendra/v27/H4ckBXKAlMnTn0CskxYzyL6Agw.woff2) format('woff2');
55 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
56 }
57 /* latin */
58 @font-face {
59 font-family: 'Almendra';
60 font-style: normal;
61 font-weight: 400;
62 src: url(https://fonts.gstatic.com/s/almendra/v27/H4ckBXKAlMnTn0CskxY9yL4.woff2) format('woff2');
63 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
64 }
65 /* latin-ext */
66 @font-face {
67 font-family: 'Amatic SC';
68 font-style: normal;
69 font-weight: 400;
70 src: url(https://fonts.gstatic.com/s/amaticsc/v27/TUZyzwprpvBS1izr_vOEBOSfQZQ.woff2) format('woff2');
71 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
72 }
73 /* latin */
74 @font-face {
75 font-family: 'Amatic SC';
76 font-style: normal;
77 font-weight: 400;
78 src: url(https://fonts.gstatic.com/s/amaticsc/v27/TUZyzwprpvBS1izr_vOECuSf.woff2) format('woff2');
79 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
80 }
81 /* latin-ext */
82 @font-face {
83 font-family: 'Andika';
84 font-style: normal;
85 font-weight: 400;
86 src: url(https://fonts.gstatic.com/s/andika/v26/mem_Ya6iyW-LwqgwZLYQarw.woff2) format('woff2');
87 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
88 }
89 /* latin */
90 @font-face {
91 font-family: 'Andika';
92 font-style: normal;
93 font-weight: 400;
94 src: url(https://fonts.gstatic.com/s/andika/v26/mem_Ya6iyW-LwqgwarYQ.woff2) format('woff2');
95 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
96 }
97 /* latin-ext */
98 @font-face {
99 font-family: 'Architects Daughter';
100 font-style: normal;
101 font-weight: 400;
102 src: url(https://fonts.gstatic.com/s/architectsdaughter/v19/KtkxAKiDZI_td1Lkx62xHZHDtgO_Y-bvTYdg4_zg.woff2) format('woff2');
103 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
104 }
105 /* latin */
106 @font-face {
107 font-family: 'Architects Daughter';
108 font-style: normal;
109 font-weight: 400;
110 src: url(https://fonts.gstatic.com/s/architectsdaughter/v19/KtkxAKiDZI_td1Lkx62xHZHDtgO_Y-bvTYlg4w.woff2) format('woff2');
111 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
112 }
113 /* latin-ext */
114 @font-face {
115 font-family: 'Audiowide';
116 font-style: normal;
117 font-weight: 400;
118 src: url(https://fonts.gstatic.com/s/audiowide/v21/l7gdbjpo0cum0ckerWCdmA_OIxo.woff2) format('woff2');
119 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
120 }
121 /* latin */
122 @font-face {
123 font-family: 'Audiowide';
124 font-style: normal;
125 font-weight: 400;
126 src: url(https://fonts.gstatic.com/s/audiowide/v21/l7gdbjpo0cum0ckerWCdlg_O.woff2) format('woff2');
127 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
128 }
129 /* latin */
130 @font-face {
131 font-family: 'Averia Libre';
132 font-style: normal;
133 font-weight: 400;
134 src: url(https://fonts.gstatic.com/s/averialibre/v16/2V0aKIcMGZEnV6xygz7eNjESBanI.woff2) format('woff2');
135 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
136 }
137 /* latin-ext */
138 @font-face {
139 font-family: 'Bebas Neue';
140 font-style: normal;
141 font-weight: 400;
142 src: url(https://fonts.gstatic.com/s/bebasneue/v15/JTUSjIg69CK48gW7PXoo9Wdhyzbi.woff2) format('woff2');
143 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
144 }
145 /* latin */
146 @font-face {
147 font-family: 'Bebas Neue';
148 font-style: normal;
149 font-weight: 400;
150 src: url(https://fonts.gstatic.com/s/bebasneue/v15/JTUSjIg69CK48gW7PXoo9Wlhyw.woff2) format('woff2');
151 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
152 }
153 /* latin-ext */
154 @font-face {
155 font-family: 'Black Ops One';
156 font-style: normal;
157 font-weight: 400;
158 src: url(https://fonts.gstatic.com/s/blackopsone/v20/qWcsB6-ypo7xBdr6Xshe96H3aDXbtwkh.woff2) format('woff2');
159 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
160 }
161 /* latin */
162 @font-face {
163 font-family: 'Black Ops One';
164 font-style: normal;
165 font-weight: 400;
166 src: url(https://fonts.gstatic.com/s/blackopsone/v20/qWcsB6-ypo7xBdr6Xshe96H3aDvbtw.woff2) format('woff2');
167 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
168 }
169 /* latin-ext */
170 @font-face {
171 font-family: 'Caveat';
172 font-style: normal;
173 font-weight: 400;
174 src: url(https://fonts.gstatic.com/s/caveat/v22/WnznHAc5bAfYB2QRah7pcpNvOx-pjfJ9eIupYSxP.woff2) format('woff2');
175 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
176 }
177 /* latin */
178 @font-face {
179 font-family: 'Caveat';
180 font-style: normal;
181 font-weight: 400;
182 src: url(https://fonts.gstatic.com/s/caveat/v22/WnznHAc5bAfYB2QRah7pcpNvOx-pjfJ9eIWpYQ.woff2) format('woff2');
183 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
184 }
185 /* latin-ext */
186 @font-face {
187 font-family: 'Cinzel Decorative';
188 font-style: normal;
189 font-weight: 400;
190 src: url(https://fonts.gstatic.com/s/cinzeldecorative/v18/daaCSScvJGqLYhG8nNt8KPPswUAPni7dTMx7aA.woff2) format('woff2');
191 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
192 }
193 /* latin */
194 @font-face {
195 font-family: 'Cinzel Decorative';
196 font-style: normal;
197 font-weight: 400;
198 src: url(https://fonts.gstatic.com/s/cinzeldecorative/v18/daaCSScvJGqLYhG8nNt8KPPswUAPni7TTMw.woff2) format('woff2');
199 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
200 }
201 /* latin-ext */
202 @font-face {
203 font-family: 'Courgette';
204 font-style: normal;
205 font-weight: 400;
206 src: url(https://fonts.gstatic.com/s/courgette/v18/wEO_EBrAnc9BLjLQAUk1WPoK7Es.woff2) format('woff2');
207 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
208 }
209 /* latin */
210 @font-face {
211 font-family: 'Courgette';
212 font-style: normal;
213 font-weight: 400;
214 src: url(https://fonts.gstatic.com/s/courgette/v18/wEO_EBrAnc9BLjLQAUk1VvoK.woff2) format('woff2');
215 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
216 }
217 /* latin-ext */
218 @font-face {
219 font-family: 'Dancing Script';
220 font-style: normal;
221 font-weight: 400;
222 src: url(https://fonts.gstatic.com/s/dancingscript/v28/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7BMSo3ROp8ltA.woff2) format('woff2');
223 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
224 }
225 /* latin */
226 @font-face {
227 font-family: 'Dancing Script';
228 font-style: normal;
229 font-weight: 400;
230 src: url(https://fonts.gstatic.com/s/dancingscript/v28/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7BMSo3Sup8.woff2) format('woff2');
231 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
232 }
233 /* latin-ext */
234 @font-face {
235 font-family: 'Exo';
236 font-style: normal;
237 font-weight: 400;
238 src: url(https://fonts.gstatic.com/s/exo/v24/4UaZrEtFpBI4f1ZSIK9d4LjJ4lM3OwpmO24p.woff2) format('woff2');
239 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
240 }
241 /* latin */
242 @font-face {
243 font-family: 'Exo';
244 font-style: normal;
245 font-weight: 400;
246 src: url(https://fonts.gstatic.com/s/exo/v24/4UaZrEtFpBI4f1ZSIK9d4LjJ4lM3OwRmOw.woff2) format('woff2');
247 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
248 }
249 /* latin-ext */
250 @font-face {
251 font-family: 'Fjalla One';
252 font-style: normal;
253 font-weight: 400;
254 src: url(https://fonts.gstatic.com/s/fjallaone/v15/Yq6R-LCAWCX3-6Ky7FAFrO96kigt.woff2) format('woff2');
255 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
256 }
257 /* latin */
258 @font-face {
259 font-family: 'Fjalla One';
260 font-style: normal;
261 font-weight: 400;
262 src: url(https://fonts.gstatic.com/s/fjallaone/v15/Yq6R-LCAWCX3-6Ky7FAFrOF6kg.woff2) format('woff2');
263 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
264 }
265 /* latin */
266 @font-face {
267 font-family: 'Germania One';
268 font-style: normal;
269 font-weight: 400;
270 src: url(https://fonts.gstatic.com/s/germaniaone/v20/Fh4yPjrqIyv2ucM2qzBjeS3uywhP.woff2) format('woff2');
271 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
272 }
273 /* latin-ext */
274 @font-face {
275 font-family: 'Glass Antiqua';
276 font-style: normal;
277 font-weight: 400;
278 src: url(https://fonts.gstatic.com/s/glassantiqua/v25/xfu30Wr0Wn3NOQM2piC0uXOjrLb6NpfR.woff2) format('woff2');
279 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
280 }
281 /* latin */
282 @font-face {
283 font-family: 'Glass Antiqua';
284 font-style: normal;
285 font-weight: 400;
286 src: url(https://fonts.gstatic.com/s/glassantiqua/v25/xfu30Wr0Wn3NOQM2piC0uXOjrLj6Ng.woff2) format('woff2');
287 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
288 }
289 /* latin-ext */
290 @font-face {
291 font-family: 'Gloria Hallelujah';
292 font-style: normal;
293 font-weight: 400;
294 src: url(https://fonts.gstatic.com/s/gloriahallelujah/v23/LYjYdHv3kUk9BMV96EIswT9DIbW-MIS71zO0vg.woff2) format('woff2');
295 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
296 }
297 /* latin */
298 @font-face {
299 font-family: 'Gloria Hallelujah';
300 font-style: normal;
301 font-weight: 400;
302 src: url(https://fonts.gstatic.com/s/gloriahallelujah/v23/LYjYdHv3kUk9BMV96EIswT9DIbW-MIS11zM.woff2) format('woff2');
303 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
304 }
305 /* latin-ext */
306 @font-face {
307 font-family: 'Great Vibes';
308 font-style: normal;
309 font-weight: 400;
310 src: url(https://fonts.gstatic.com/s/greatvibes/v20/RWmMoKWR9v4ksMfaWd_JN9XLiaQ6DQ.woff2) format('woff2');
311 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
312 }
313 /* latin */
314 @font-face {
315 font-family: 'Great Vibes';
316 font-style: normal;
317 font-weight: 400;
318 src: url(https://fonts.gstatic.com/s/greatvibes/v20/RWmMoKWR9v4ksMfaWd_JN9XFiaQ.woff2) format('woff2');
319 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
320 }
321 /* latin-ext */
322 @font-face {
323 font-family: 'Holtwood One SC';
324 font-style: normal;
325 font-weight: 400;
326 src: url(https://fonts.gstatic.com/s/holtwoodonesc/v22/yYLx0hLR0P-3vMFSk1TCq3Txg5BHeLz7HZs.woff2) format('woff2');
327 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
328 }
329 /* latin */
330 @font-face {
331 font-family: 'Holtwood One SC';
332 font-style: normal;
333 font-weight: 400;
334 src: url(https://fonts.gstatic.com/s/holtwoodonesc/v22/yYLx0hLR0P-3vMFSk1TCq3Txg5BHdrz7.woff2) format('woff2');
335 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
336 }
337 /* latin-ext */
338 @font-face {
339 font-family: 'Indie Flower';
340 font-style: normal;
341 font-weight: 400;
342 src: url(https://fonts.gstatic.com/s/indieflower/v23/m8JVjfNVeKWVnh3QMuKkFcZVZ0uH5dI.woff2) format('woff2');
343 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
344 }
345 /* latin */
346 @font-face {
347 font-family: 'Indie Flower';
348 font-style: normal;
349 font-weight: 400;
350 src: url(https://fonts.gstatic.com/s/indieflower/v23/m8JVjfNVeKWVnh3QMuKkFcZVaUuH.woff2) format('woff2');
351 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
352 }
353 /* latin */
354 @font-face {
355 font-family: 'Italiana';
356 font-style: normal;
357 font-weight: 400;
358 src: url(https://fonts.gstatic.com/s/italiana/v21/QldNNTtLsx4E__B0XQmWaXw.woff2) format('woff2');
359 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
360 }
361 /* latin-ext */
362 @font-face {
363 font-family: 'Jost';
364 font-style: normal;
365 font-weight: 400;
366 src: url(https://fonts.gstatic.com/s/jost/v19/92zPtBhPNqw79Ij1E865zBUv7myjJTVPNIg8mg.woff2) format('woff2');
367 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
368 }
369 /* latin */
370 @font-face {
371 font-family: 'Jost';
372 font-style: normal;
373 font-weight: 400;
374 src: url(https://fonts.gstatic.com/s/jost/v19/92zPtBhPNqw79Ij1E865zBUv7myjJTVBNIg.woff2) format('woff2');
375 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
376 }
377 /* latin-ext */
378 @font-face {
379 font-family: 'Kaushan Script';
380 font-style: normal;
381 font-weight: 400;
382 src: url(https://fonts.gstatic.com/s/kaushanscript/v18/vm8vdRfvXFLG3OLnsO15WYS5DG72wNJHMw.woff2) format('woff2');
383 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
384 }
385 /* latin */
386 @font-face {
387 font-family: 'Kaushan Script';
388 font-style: normal;
389 font-weight: 400;
390 src: url(https://fonts.gstatic.com/s/kaushanscript/v18/vm8vdRfvXFLG3OLnsO15WYS5DG74wNI.woff2) format('woff2');
391 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
392 }
393 /* latin-ext */
394 @font-face {
395 font-family: 'Lato';
396 font-style: normal;
397 font-weight: 400;
398 src: url(https://fonts.gstatic.com/s/lato/v24/S6uyw4BMUTPHjxAwXjeu.woff2) format('woff2');
399 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
400 }
401 /* latin */
402 @font-face {
403 font-family: 'Lato';
404 font-style: normal;
405 font-weight: 400;
406 src: url(https://fonts.gstatic.com/s/lato/v24/S6uyw4BMUTPHjx4wXg.woff2) format('woff2');
407 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
408 }
409 /* latin-ext */
410 @font-face {
411 font-family: 'Metal Mania';
412 font-style: normal;
413 font-weight: 400;
414 src: url(https://fonts.gstatic.com/s/metalmania/v22/RWmMoKWb4e8kqMfBUdPFJdXLiaQ6DQ.woff2) format('woff2');
415 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
416 }
417 /* latin */
418 @font-face {
419 font-family: 'Metal Mania';
420 font-style: normal;
421 font-weight: 400;
422 src: url(https://fonts.gstatic.com/s/metalmania/v22/RWmMoKWb4e8kqMfBUdPFJdXFiaQ.woff2) format('woff2');
423 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
424 }
425 /* latin-ext */
426 @font-face {
427 font-family: 'Montserrat';
428 font-style: normal;
429 font-weight: 400;
430 src: url(https://fonts.gstatic.com/s/montserrat/v30/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw3aXpsog.woff2) format('woff2');
431 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
432 }
433 /* latin */
434 @font-face {
435 font-family: 'Montserrat';
436 font-style: normal;
437 font-weight: 400;
438 src: url(https://fonts.gstatic.com/s/montserrat/v30/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw5aXo.woff2) format('woff2');
439 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
440 }
441 /* cyrillic */
442 @font-face {
443 font-family: 'Neucha';
444 font-style: normal;
445 font-weight: 400;
446 src: url(https://fonts.gstatic.com/s/neucha/v17/q5uGsou0JOdh94bfuQltOxU.woff2) format('woff2');
447 unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
448 }
449 /* latin */
450 @font-face {
451 font-family: 'Neucha';
452 font-style: normal;
453 font-weight: 400;
454 src: url(https://fonts.gstatic.com/s/neucha/v17/q5uGsou0JOdh94bfvQlt.woff2) format('woff2');
455 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
456 }
457 /* latin-ext */
458 @font-face {
459 font-family: 'Noto Sans';
460 font-style: normal;
461 font-weight: 400;
462 font-stretch: 100%;
463 src: url(https://fonts.gstatic.com/s/notosans/v39/o-0mIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjcz6L1SoM-jCpoiyD9A-9U6VLKzA.woff2) format('woff2');
464 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
465 }
466 /* latin */
467 @font-face {
468 font-family: 'Noto Sans';
469 font-style: normal;
470 font-weight: 400;
471 font-stretch: 100%;
472 src: url(https://fonts.gstatic.com/s/notosans/v39/o-0mIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjcz6L1SoM-jCpoiyD9A-9a6VI.woff2) format('woff2');
473 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
474 }
475 /* latin-ext */
476 @font-face {
477 font-family: 'Open Sans';
478 font-style: normal;
479 font-weight: 400;
480 font-stretch: 100%;
481 src: url(https://fonts.gstatic.com/s/opensans/v43/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsjZ0B4uaVIGxA.woff2) format('woff2');
482 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
483 }
484 /* latin */
485 @font-face {
486 font-family: 'Open Sans';
487 font-style: normal;
488 font-weight: 400;
489 font-stretch: 100%;
490 src: url(https://fonts.gstatic.com/s/opensans/v43/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsjZ0B4gaVI.woff2) format('woff2');
491 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
492 }
493 /* latin */
494 @font-face {
495 font-family: 'Orbitron';
496 font-style: normal;
497 font-weight: 400;
498 src: url(https://fonts.gstatic.com/s/orbitron/v34/yMJMMIlzdpvBhQQL_SC3X9yhF25-T1nyGy6BoWgz.woff2) format('woff2');
499 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
500 }
501 /* latin-ext */
502 @font-face {
503 font-family: 'Oswald';
504 font-style: normal;
505 font-weight: 400;
506 src: url(https://fonts.gstatic.com/s/oswald/v56/TK3_WkUHHAIjg75cFRf3bXL8LICs1_FvsUhiZTaR.woff2) format('woff2');
507 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
508 }
509 /* latin */
510 @font-face {
511 font-family: 'Oswald';
512 font-style: normal;
513 font-weight: 400;
514 src: url(https://fonts.gstatic.com/s/oswald/v56/TK3_WkUHHAIjg75cFRf3bXL8LICs1_FvsUZiZQ.woff2) format('woff2');
515 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
516 }
517 /* latin-ext */
518 @font-face {
519 font-family: 'Pacifico';
520 font-style: normal;
521 font-weight: 400;
522 src: url(https://fonts.gstatic.com/s/pacifico/v22/FwZY7-Qmy14u9lezJ-6J6MmTpA.woff2) format('woff2');
523 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
524 }
525 /* latin */
526 @font-face {
527 font-family: 'Pacifico';
528 font-style: normal;
529 font-weight: 400;
530 src: url(https://fonts.gstatic.com/s/pacifico/v22/FwZY7-Qmy14u9lezJ-6H6Mk.woff2) format('woff2');
531 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
532 }
533 /* latin */
534 @font-face {
535 font-family: 'Permanent Marker';
536 font-style: normal;
537 font-weight: 400;
538 src: url(https://fonts.gstatic.com/s/permanentmarker/v16/Fh4uPib9Iyv2ucM6pGQMWimMp004La2Cfw.woff2) format('woff2');
539 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
540 }
541 /* latin-ext */
542 @font-face {
543 font-family: 'Philosopher';
544 font-style: normal;
545 font-weight: 400;
546 src: url(https://fonts.gstatic.com/s/philosopher/v20/vEFV2_5QCwIS4_Dhez5jcWBgT00k0w.woff2) format('woff2');
547 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
548 }
549 /* latin */
550 @font-face {
551 font-family: 'Philosopher';
552 font-style: normal;
553 font-weight: 400;
554 src: url(https://fonts.gstatic.com/s/philosopher/v20/vEFV2_5QCwIS4_Dhez5jcWBuT00.woff2) format('woff2');
555 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
556 }
557 /* latin-ext */
558 @font-face {
559 font-family: 'Playfair Display';
560 font-style: normal;
561 font-weight: 400;
562 src: url(https://fonts.gstatic.com/s/playfairdisplay/v39/nuFvD-vYSZviVYUb_rj3ij__anPXJzDwcbmjWBN2PKdFvXDZbtPY_Q.woff2) format('woff2');
563 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
564 }
565 /* latin */
566 @font-face {
567 font-family: 'Playfair Display';
568 font-style: normal;
569 font-weight: 400;
570 src: url(https://fonts.gstatic.com/s/playfairdisplay/v39/nuFvD-vYSZviVYUb_rj3ij__anPXJzDwcbmjWBN2PKdFvXDXbtM.woff2) format('woff2');
571 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
572 }
573 /* latin-ext */
574 @font-face {
575 font-family: 'Poppins';
576 font-style: normal;
577 font-weight: 400;
578 src: url(https://fonts.gstatic.com/s/poppins/v23/pxiEyp8kv8JHgFVrJJnecmNE.woff2) format('woff2');
579 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
580 }
581 /* latin */
582 @font-face {
583 font-family: 'Poppins';
584 font-style: normal;
585 font-weight: 400;
586 src: url(https://fonts.gstatic.com/s/poppins/v23/pxiEyp8kv8JHgFVrJJfecg.woff2) format('woff2');
587 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
588 }
589 /* latin-ext */
590 @font-face {
591 font-family: 'Press Start 2P';
592 font-style: normal;
593 font-weight: 400;
594 src: url(https://fonts.gstatic.com/s/pressstart2p/v15/e3t4euO8T-267oIAQAu6jDQyK3nbivN04w.woff2) format('woff2');
595 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
596 }
597 /* latin */
598 @font-face {
599 font-family: 'Press Start 2P';
600 font-style: normal;
601 font-weight: 400;
602 src: url(https://fonts.gstatic.com/s/pressstart2p/v15/e3t4euO8T-267oIAQAu6jDQyK3nVivM.woff2) format('woff2');
603 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
604 }
605 /* latin-ext */
606 @font-face {
607 font-family: 'Questrial';
608 font-style: normal;
609 font-weight: 400;
610 src: url(https://fonts.gstatic.com/s/questrial/v18/QdVUSTchPBm7nuUeVf70sCFlq20.woff2) format('woff2');
611 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
612 }
613 /* latin */
614 @font-face {
615 font-family: 'Questrial';
616 font-style: normal;
617 font-weight: 400;
618 src: url(https://fonts.gstatic.com/s/questrial/v18/QdVUSTchPBm7nuUeVf70viFl.woff2) format('woff2');
619 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
620 }
621 /* latin-ext */
622 @font-face {
623 font-family: 'Quicksand';
624 font-style: normal;
625 font-weight: 400;
626 src: url(https://fonts.gstatic.com/s/quicksand/v36/6xK-dSZaM9iE8KbpRA_LJ3z8mH9BOJvgkP8o58i-wi40.woff2) format('woff2');
627 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
628 }
629 /* latin */
630 @font-face {
631 font-family: 'Quicksand';
632 font-style: normal;
633 font-weight: 400;
634 src: url(https://fonts.gstatic.com/s/quicksand/v36/6xK-dSZaM9iE8KbpRA_LJ3z8mH9BOJvgkP8o58a-wg.woff2) format('woff2');
635 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
636 }
637 /* latin-ext */
638 @font-face {
639 font-family: 'Rajdhani';
640 font-style: normal;
641 font-weight: 400;
642 src: url(https://fonts.gstatic.com/s/rajdhani/v16/LDIxapCSOBg7S-QT7p4JM-aUWA.woff2) format('woff2');
643 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
644 }
645 /* latin */
646 @font-face {
647 font-family: 'Rajdhani';
648 font-style: normal;
649 font-weight: 400;
650 src: url(https://fonts.gstatic.com/s/rajdhani/v16/LDIxapCSOBg7S-QT7p4HM-Y.woff2) format('woff2');
651 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
652 }
653 /* latin-ext */
654 @font-face {
655 font-family: 'Raleway';
656 font-style: normal;
657 font-weight: 400;
658 src: url(https://fonts.gstatic.com/s/raleway/v36/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCGPrEHJA.woff2) format('woff2');
659 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
660 }
661 /* latin */
662 @font-face {
663 font-family: 'Raleway';
664 font-style: normal;
665 font-weight: 400;
666 src: url(https://fonts.gstatic.com/s/raleway/v36/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCIPrE.woff2) format('woff2');
667 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
668 }
669 /* latin-ext */
670 @font-face {
671 font-family: 'Righteous';
672 font-style: normal;
673 font-weight: 400;
674 src: url(https://fonts.gstatic.com/s/righteous/v18/1cXxaUPXBpj2rGoU7C9WhnGFucE.woff2) format('woff2');
675 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
676 }
677 /* latin */
678 @font-face {
679 font-family: 'Righteous';
680 font-style: normal;
681 font-weight: 400;
682 src: url(https://fonts.gstatic.com/s/righteous/v18/1cXxaUPXBpj2rGoU7C9WiHGF.woff2) format('woff2');
683 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
684 }
685 /* latin-ext */
686 @font-face {
687 font-family: 'Roboto';
688 font-style: normal;
689 font-weight: 400;
690 font-stretch: 100%;
691 src: url(https://fonts.gstatic.com/s/roboto/v48/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWubEbVmaiArmlw.woff2) format('woff2');
692 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
693 }
694 /* latin */
695 @font-face {
696 font-family: 'Roboto';
697 font-style: normal;
698 font-weight: 400;
699 font-stretch: 100%;
700 src: url(https://fonts.gstatic.com/s/roboto/v48/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWubEbVmUiAo.woff2) format('woff2');
701 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
702 }
703 /* latin-ext */
704 @font-face {
705 font-family: 'Sacramento';
706 font-style: normal;
707 font-weight: 400;
708 src: url(https://fonts.gstatic.com/s/sacramento/v16/buEzpo6gcdjy0EiZMBUG4CMf_exL.woff2) format('woff2');
709 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
710 }
711 /* latin */
712 @font-face {
713 font-family: 'Sacramento';
714 font-style: normal;
715 font-weight: 400;
716 src: url(https://fonts.gstatic.com/s/sacramento/v16/buEzpo6gcdjy0EiZMBUG4C0f_Q.woff2) format('woff2');
717 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
718 }
719 /* latin */
720 @font-face {
721 font-family: 'Satisfy';
722 font-style: normal;
723 font-weight: 400;
724 src: url(https://fonts.gstatic.com/s/satisfy/v22/rP2Hp2yn6lkG50LoCZOIHQ.woff2) format('woff2');
725 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
726 }
727 /* latin-ext */
728 @font-face {
729 font-family: 'Space Mono';
730 font-style: normal;
731 font-weight: 400;
732 src: url(https://fonts.gstatic.com/s/spacemono/v17/i7dPIFZifjKcF5UAWdDRYE98RWq7.woff2) format('woff2');
733 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
734 }
735 /* latin */
736 @font-face {
737 font-family: 'Space Mono';
738 font-style: normal;
739 font-weight: 400;
740 src: url(https://fonts.gstatic.com/s/spacemono/v17/i7dPIFZifjKcF5UAWdDRYEF8RQ.woff2) format('woff2');
741 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
742 }
743 /* latin-ext */
744 @font-face {
745 font-family: 'Spectral';
746 font-style: normal;
747 font-weight: 400;
748 src: url(https://fonts.gstatic.com/s/spectral/v14/rnCr-xNNww_2s0amA9M3knj-SA.woff2) format('woff2');
749 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
750 }
751 /* latin */
752 @font-face {
753 font-family: 'Spectral';
754 font-style: normal;
755 font-weight: 400;
756 src: url(https://fonts.gstatic.com/s/spectral/v14/rnCr-xNNww_2s0amA9M5kng.woff2) format('woff2');
757 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
758 }
759 /* latin-ext */
760 @font-face {
761 font-family: 'Staatliches';
762 font-style: normal;
763 font-weight: 400;
764 src: url(https://fonts.gstatic.com/s/staatliches/v14/HI_OiY8KO6hCsQSoAPmtMYeVvpCNOw.woff2) format('woff2');
765 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
766 }
767 /* latin */
768 @font-face {
769 font-family: 'Staatliches';
770 font-style: normal;
771 font-weight: 400;
772 src: url(https://fonts.gstatic.com/s/staatliches/v14/HI_OiY8KO6hCsQSoAPmtMYebvpA.woff2) format('woff2');
773 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
774 }
775 /* latin-ext */
776 @font-face {
777 font-family: 'Stint Ultra Condensed';
778 font-style: normal;
779 font-weight: 400;
780 src: url(https://fonts.gstatic.com/s/stintultracondensed/v24/-W_gXIrsVjjeyEnPC45qD2NoFPtBE0xCh2AOox8P6cM.woff2) format('woff2');
781 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
782 }
783 /* latin */
784 @font-face {
785 font-family: 'Stint Ultra Condensed';
786 font-style: normal;
787 font-weight: 400;
788 src: url(https://fonts.gstatic.com/s/stintultracondensed/v24/-W_gXIrsVjjeyEnPC45qD2NoFPtBE0xCh2AOrR8P.woff2) format('woff2');
789 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
790 }
791 /* latin-ext */
792 @font-face {
793 font-family: 'Syncopate';
794 font-style: normal;
795 font-weight: 400;
796 src: url(https://fonts.gstatic.com/s/syncopate/v23/pe0sMIuPIYBCpEV5eFdCC_e_O98.woff2) format('woff2');
797 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
798 }
799 /* latin */
800 @font-face {
801 font-family: 'Syncopate';
802 font-style: normal;
803 font-weight: 400;
804 src: url(https://fonts.gstatic.com/s/syncopate/v23/pe0sMIuPIYBCpEV5eFdCBfe_.woff2) format('woff2');
805 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
806 }
807 /* latin-ext */
808 @font-face {
809 font-family: 'Ultra';
810 font-style: normal;
811 font-weight: 400;
812 src: url(https://fonts.gstatic.com/s/ultra/v25/zOLy4prXmrtY-uTzwrKz6A.woff2) format('woff2');
813 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
814 }
815 /* latin */
816 @font-face {
817 font-family: 'Ultra';
818 font-style: normal;
819 font-weight: 400;
820 src: url(https://fonts.gstatic.com/s/ultra/v25/zOLy4prXmrtY-uT9wrI.woff2) format('woff2');
821 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
822 }
823 /* latin-ext */
824 @font-face {
825 font-family: 'Unica One';
826 font-style: normal;
827 font-weight: 400;
828 src: url(https://fonts.gstatic.com/s/unicaone/v19/DPEuYwWHyAYGVTSmalsRf93eiEY.woff2) format('woff2');
829 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
830 }
831 /* latin */
832 @font-face {
833 font-family: 'Unica One';
834 font-style: normal;
835 font-weight: 400;
836 src: url(https://fonts.gstatic.com/s/unicaone/v19/DPEuYwWHyAYGVTSmalsRcd3e.woff2) format('woff2');
837 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
838 }
839 /* latin-ext */
840 @font-face {
841 font-family: 'Work Sans';
842 font-style: normal;
843 font-weight: 400;
844 src: url(https://fonts.gstatic.com/s/worksans/v23/QGY_z_wNahGAdqQ43RhVcIgYT2Xz5u32K0nXBiEJpp_c.woff2) format('woff2');
845 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
846 }
847 /* latin */
848 @font-face {
849 font-family: 'Work Sans';
850 font-style: normal;
851 font-weight: 400;
852 src: url(https://fonts.gstatic.com/s/worksans/v23/QGY_z_wNahGAdqQ43RhVcIgYT2Xz5u32K0nXBi8Jpg.woff2) format('woff2');
853 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
854 }
855 /* latin-ext */
856 @font-face {
857 font-family: 'Yellowtail';
858 font-style: normal;
859 font-weight: 400;
860 src: url(https://fonts.gstatic.com/s/yellowtail/v24/OZpGg_pnoDtINPfRIlLohlXHwXD-.woff2) format('woff2');
861 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
862 }
863 /* latin */
864 @font-face {
865 font-family: 'Yellowtail';
866 font-style: normal;
867 font-weight: 400;
868 src: url(https://fonts.gstatic.com/s/yellowtail/v24/OZpGg_pnoDtINPfRIlLohlvHwQ.woff2) format('woff2');
869 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
870 }