Compare commits

..

5 Commits

Author SHA1 Message Date
87cd5beaac 'anton':
'bebas-neue':
'dancing-script':
'montserrat':
'orbitron':
'pacifico':
'playfair-display
'poppins': [
2025-08-04 23:01:46 -05:00
2587880a1f Anpassungen 2025-08-04 22:53:25 -05:00
7f63454701 removed .next folder 2025-08-04 18:35:39 -05: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
95 changed files with 4104 additions and 10849 deletions

1
.gitignore vendored
View File

@@ -1 +1,2 @@
node_modules node_modules
.next

View File

@@ -1,32 +0,0 @@
{
"polyfillFiles": [
"static/chunks/polyfills.js"
],
"devFiles": [
"static/chunks/react-refresh.js"
],
"ampDevFiles": [],
"lowPriorityFiles": [
"static/development/_buildManifest.js",
"static/development/_ssgManifest.js"
],
"rootMainFiles": [],
"pages": {
"/": [
"static/chunks/webpack.js",
"static/chunks/main.js",
"static/chunks/pages/index.js"
],
"/_app": [
"static/chunks/webpack.js",
"static/chunks/main.js",
"static/chunks/pages/_app.js"
],
"/_error": [
"static/chunks/webpack.js",
"static/chunks/main.js",
"static/chunks/pages/_error.js"
]
},
"ampFirstPages": []
}

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.

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.

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.

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.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1 +0,0 @@
{"type": "commonjs"}

View File

@@ -1 +0,0 @@
{}

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
self.__INTERCEPTION_ROUTE_REWRITE_MANIFEST="[]"

View File

@@ -1,34 +0,0 @@
self.__BUILD_MANIFEST = {
"polyfillFiles": [
"static/chunks/polyfills.js"
],
"devFiles": [
"static/chunks/react-refresh.js"
],
"ampDevFiles": [],
"lowPriorityFiles": [],
"rootMainFiles": [],
"pages": {
"/": [
"static/chunks/webpack.js",
"static/chunks/main.js",
"static/chunks/pages/index.js"
],
"/_app": [
"static/chunks/webpack.js",
"static/chunks/main.js",
"static/chunks/pages/_app.js"
],
"/_error": [
"static/chunks/webpack.js",
"static/chunks/main.js",
"static/chunks/pages/_error.js"
]
},
"ampFirstPages": []
};
self.__BUILD_MANIFEST.lowPriorityFiles = [
"/static/" + process.env.__NEXT_BUILD_ID + "/_buildManifest.js",
,"/static/" + process.env.__NEXT_BUILD_ID + "/_ssgManifest.js",
];

View File

@@ -1,6 +0,0 @@
{
"version": 3,
"middleware": {},
"functions": {},
"sortedMiddleware": []
}

View File

@@ -1 +0,0 @@
self.__REACT_LOADABLE_MANIFEST="{}"

View File

@@ -1 +0,0 @@
self.__NEXT_FONT_MANIFEST="{\"pages\":{},\"app\":{},\"appUsingSizeAdjust\":false,\"pagesUsingSizeAdjust\":false}"

View File

@@ -1 +0,0 @@
{"pages":{},"app":{},"appUsingSizeAdjust":false,"pagesUsingSizeAdjust":false}

View File

@@ -1,6 +0,0 @@
{
"/_document": "pages/_document.js",
"/_app": "pages/_app.js",
"/_error": "pages/_error.js",
"/": "pages/index.js"
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,35 +0,0 @@
"use strict";
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
exports.id = "vendor-chunks/@swc";
exports.ids = ["vendor-chunks/@swc"];
exports.modules = {
/***/ "./node_modules/@swc/helpers/cjs/_interop_require_default.cjs":
/*!********************************************************************!*\
!*** ./node_modules/@swc/helpers/cjs/_interop_require_default.cjs ***!
\********************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\n\nexports._ = exports._interop_require_default = _interop_require_default;\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2Nqcy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuY2pzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFNBQVMsR0FBRyxnQ0FBZ0M7QUFDNUM7QUFDQSwyQ0FBMkM7QUFDM0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mYW5jeXRleHQtZ2VuZXJhdG9yLy4vbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9janMvX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0LmNqcz8zYmQ2Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl8gPSBleHBvcnRzLl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdDtcbmZ1bmN0aW9uIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@swc/helpers/cjs/_interop_require_default.cjs\n");
/***/ }),
/***/ "./node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs":
/*!*********************************************************************!*\
!*** ./node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs ***!
\*********************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\n\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nexports._ = exports._interop_require_wildcard = _interop_require_wildcard;\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) return obj;\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") return { default: obj };\n\n var cache = _getRequireWildcardCache(nodeInterop);\n\n if (cache && cache.has(obj)) return cache.get(obj);\n\n var newObj = { __proto__: null };\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);\n else newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n\n if (cache) cache.set(obj, newObj);\n\n return newObj;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2Nqcy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLmNqcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLFNBQVMsR0FBRyxpQ0FBaUM7QUFDN0M7QUFDQTtBQUNBLHVGQUF1Rjs7QUFFdkY7O0FBRUE7O0FBRUEsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mYW5jeXRleHQtZ2VuZXJhdG9yLy4vbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9janMvX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5janM/Nzc5NyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKG5vZGVJbnRlcm9wKSB7XG4gICAgaWYgKHR5cGVvZiBXZWFrTWFwICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsO1xuXG4gICAgdmFyIGNhY2hlQmFiZWxJbnRlcm9wID0gbmV3IFdlYWtNYXAoKTtcbiAgICB2YXIgY2FjaGVOb2RlSW50ZXJvcCA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgICByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uKG5vZGVJbnRlcm9wKSB7XG4gICAgICAgIHJldHVybiBub2RlSW50ZXJvcCA/IGNhY2hlTm9kZUludGVyb3AgOiBjYWNoZUJhYmVsSW50ZXJvcDtcbiAgICB9KShub2RlSW50ZXJvcCk7XG59XG5leHBvcnRzLl8gPSBleHBvcnRzLl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkO1xuZnVuY3Rpb24gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZChvYmosIG5vZGVJbnRlcm9wKSB7XG4gICAgaWYgKCFub2RlSW50ZXJvcCAmJiBvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHJldHVybiBvYmo7XG4gICAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmogIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHsgZGVmYXVsdDogb2JqIH07XG5cbiAgICB2YXIgY2FjaGUgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUobm9kZUludGVyb3ApO1xuXG4gICAgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSByZXR1cm4gY2FjaGUuZ2V0KG9iaik7XG5cbiAgICB2YXIgbmV3T2JqID0geyBfX3Byb3RvX186IG51bGwgfTtcbiAgICB2YXIgaGFzUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChrZXkgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld09iaiwga2V5LCBkZXNjKTtcbiAgICAgICAgICAgIGVsc2UgbmV3T2JqW2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5ld09iai5kZWZhdWx0ID0gb2JqO1xuXG4gICAgaWYgKGNhY2hlKSBjYWNoZS5zZXQob2JqLCBuZXdPYmopO1xuXG4gICAgcmV0dXJuIG5ld09iajtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs\n");
/***/ })
};
;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,237 +0,0 @@
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
/******/ (() => { // webpackBootstrap
/******/ "use strict";
/******/ var __webpack_modules__ = ({});
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ var threw = true;
/******/ try {
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ threw = false;
/******/ } finally {
/******/ if(threw) delete __webpack_module_cache__[moduleId];
/******/ }
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = __webpack_modules__;
/******/
/************************************************************************/
/******/ /* webpack/runtime/async module */
/******/ (() => {
/******/ var webpackQueues = typeof Symbol === "function" ? Symbol("webpack queues") : "__webpack_queues__";
/******/ var webpackExports = typeof Symbol === "function" ? Symbol("webpack exports") : "__webpack_exports__";
/******/ var webpackError = typeof Symbol === "function" ? Symbol("webpack error") : "__webpack_error__";
/******/ var resolveQueue = (queue) => {
/******/ if(queue && queue.d < 1) {
/******/ queue.d = 1;
/******/ queue.forEach((fn) => (fn.r--));
/******/ queue.forEach((fn) => (fn.r-- ? fn.r++ : fn()));
/******/ }
/******/ }
/******/ var wrapDeps = (deps) => (deps.map((dep) => {
/******/ if(dep !== null && typeof dep === "object") {
/******/ if(dep[webpackQueues]) return dep;
/******/ if(dep.then) {
/******/ var queue = [];
/******/ queue.d = 0;
/******/ dep.then((r) => {
/******/ obj[webpackExports] = r;
/******/ resolveQueue(queue);
/******/ }, (e) => {
/******/ obj[webpackError] = e;
/******/ resolveQueue(queue);
/******/ });
/******/ var obj = {};
/******/ obj[webpackQueues] = (fn) => (fn(queue));
/******/ return obj;
/******/ }
/******/ }
/******/ var ret = {};
/******/ ret[webpackQueues] = x => {};
/******/ ret[webpackExports] = dep;
/******/ return ret;
/******/ }));
/******/ __webpack_require__.a = (module, body, hasAwait) => {
/******/ var queue;
/******/ hasAwait && ((queue = []).d = -1);
/******/ var depQueues = new Set();
/******/ var exports = module.exports;
/******/ var currentDeps;
/******/ var outerResolve;
/******/ var reject;
/******/ var promise = new Promise((resolve, rej) => {
/******/ reject = rej;
/******/ outerResolve = resolve;
/******/ });
/******/ promise[webpackExports] = exports;
/******/ promise[webpackQueues] = (fn) => (queue && fn(queue), depQueues.forEach(fn), promise["catch"](x => {}));
/******/ module.exports = promise;
/******/ body((deps) => {
/******/ currentDeps = wrapDeps(deps);
/******/ var fn;
/******/ var getResult = () => (currentDeps.map((d) => {
/******/ if(d[webpackError]) throw d[webpackError];
/******/ return d[webpackExports];
/******/ }))
/******/ var promise = new Promise((resolve) => {
/******/ fn = () => (resolve(getResult));
/******/ fn.r = 0;
/******/ var fnQueue = (q) => (q !== queue && !depQueues.has(q) && (depQueues.add(q), q && !q.d && (fn.r++, q.push(fn))));
/******/ currentDeps.map((dep) => (dep[webpackQueues](fnQueue)));
/******/ });
/******/ return fn.r ? promise : getResult();
/******/ }, (err) => ((err ? reject(promise[webpackError] = err) : outerResolve(exports)), resolveQueue(queue)));
/******/ queue && queue.d < 0 && (queue.d = 0);
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/compat get default export */
/******/ (() => {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = (module) => {
/******/ var getter = module && module.__esModule ?
/******/ () => (module['default']) :
/******/ () => (module);
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/ensure chunk */
/******/ (() => {
/******/ __webpack_require__.f = {};
/******/ // This file contains only the entry chunk.
/******/ // The chunk loading function for additional chunks
/******/ __webpack_require__.e = (chunkId) => {
/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {
/******/ __webpack_require__.f[key](chunkId, promises);
/******/ return promises;
/******/ }, []));
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/get javascript chunk filename */
/******/ (() => {
/******/ // This function allow to reference async chunks and sibling chunks for the entrypoint
/******/ __webpack_require__.u = (chunkId) => {
/******/ // return url for filenames based on template
/******/ return "" + chunkId + ".js";
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ (() => {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = (exports) => {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/startup entrypoint */
/******/ (() => {
/******/ __webpack_require__.X = (result, chunkIds, fn) => {
/******/ // arguments: chunkIds, moduleId are deprecated
/******/ var moduleId = chunkIds;
/******/ if(!fn) chunkIds = result, fn = () => (__webpack_require__(__webpack_require__.s = moduleId));
/******/ chunkIds.map(__webpack_require__.e, __webpack_require__)
/******/ var r = fn();
/******/ return r === undefined ? result : r;
/******/ }
/******/ })();
/******/
/******/ /* webpack/runtime/require chunk loading */
/******/ (() => {
/******/ // no baseURI
/******/
/******/ // object to store loaded chunks
/******/ // "1" means "loaded", otherwise not loaded yet
/******/ var installedChunks = {
/******/ "webpack-runtime": 1
/******/ };
/******/
/******/ // no on chunks loaded
/******/
/******/ var installChunk = (chunk) => {
/******/ var moreModules = chunk.modules, chunkIds = chunk.ids, runtime = chunk.runtime;
/******/ for(var moduleId in moreModules) {
/******/ if(__webpack_require__.o(moreModules, moduleId)) {
/******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
/******/ }
/******/ }
/******/ if(runtime) runtime(__webpack_require__);
/******/ for(var i = 0; i < chunkIds.length; i++)
/******/ installedChunks[chunkIds[i]] = 1;
/******/
/******/ };
/******/
/******/ // require() chunk loading for javascript
/******/ __webpack_require__.f.require = (chunkId, promises) => {
/******/ // "1" is the signal for "already loaded"
/******/ if(!installedChunks[chunkId]) {
/******/ if("webpack-runtime" != chunkId) {
/******/ installChunk(require("./" + __webpack_require__.u(chunkId)));
/******/ } else installedChunks[chunkId] = 1;
/******/ }
/******/ };
/******/
/******/ module.exports = __webpack_require__;
/******/ __webpack_require__.C = installChunk;
/******/
/******/ // no HMR
/******/
/******/ // no HMR manifest
/******/ })();
/******/
/************************************************************************/
/******/
/******/
/******/ })()
;

View File

@@ -1,28 +0,0 @@
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["/_error"],{
/***/ "./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=%2Fmnt%2Fc%2FUsers%2Fa931627%2FDocuments%2Ffancytextstuff%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&page=%2F_error!":
/*!******************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=%2Fmnt%2Fc%2FUsers%2Fa931627%2FDocuments%2Ffancytextstuff%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&page=%2F_error! ***!
\******************************************************************************************************************************************************************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
eval(__webpack_require__.ts("\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/_error\",\n function () {\n return __webpack_require__(/*! ./node_modules/next/dist/pages/_error.js */ \"./node_modules/next/dist/pages/_error.js\");\n }\n ]);\n if(true) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/_error\"])\n });\n }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWNsaWVudC1wYWdlcy1sb2FkZXIuanM/YWJzb2x1dGVQYWdlUGF0aD0lMkZtbnQlMkZjJTJGVXNlcnMlMkZhOTMxNjI3JTJGRG9jdW1lbnRzJTJGZmFuY3l0ZXh0c3R1ZmYlMkZub2RlX21vZHVsZXMlMkZuZXh0JTJGZGlzdCUyRnBhZ2VzJTJGX2Vycm9yLmpzJnBhZ2U9JTJGX2Vycm9yISIsIm1hcHBpbmdzIjoiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLDBGQUEwQztBQUNqRTtBQUNBO0FBQ0EsT0FBTyxJQUFVO0FBQ2pCLE1BQU0sVUFBVTtBQUNoQjtBQUNBLE9BQU87QUFDUDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8/ZGU5MSJdLCJzb3VyY2VzQ29udGVudCI6WyJcbiAgICAod2luZG93Ll9fTkVYVF9QID0gd2luZG93Ll9fTkVYVF9QIHx8IFtdKS5wdXNoKFtcbiAgICAgIFwiL19lcnJvclwiLFxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZShcIi4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9wYWdlcy9fZXJyb3IuanNcIik7XG4gICAgICB9XG4gICAgXSk7XG4gICAgaWYobW9kdWxlLmhvdCkge1xuICAgICAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2luZG93Ll9fTkVYVF9QLnB1c2goW1wiL19lcnJvclwiXSlcbiAgICAgIH0pO1xuICAgIH1cbiAgIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=%2Fmnt%2Fc%2FUsers%2Fa931627%2FDocuments%2Ffancytextstuff%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&page=%2F_error!\n"));
/***/ })
},
/******/ function(__webpack_require__) { // webpackRuntimeModules
/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
/******/ __webpack_require__.O(0, ["main"], function() { return __webpack_exec__("./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=%2Fmnt%2Fc%2FUsers%2Fa931627%2FDocuments%2Ffancytextstuff%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&page=%2F_error!"); });
/******/ var __webpack_exports__ = __webpack_require__.O();
/******/ _N_E = __webpack_exports__;
/******/ }
]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,28 +0,0 @@
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["pages/_error"],{
/***/ "./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=private-next-pages%2F_error&page=%2F_error!":
/*!***********************************************************************************************************************************************!*\
!*** ./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=private-next-pages%2F_error&page=%2F_error! ***!
\***********************************************************************************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
eval(__webpack_require__.ts("\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/_error\",\n function () {\n return __webpack_require__(/*! private-next-pages/_error */ \"./node_modules/next/dist/pages/_error.js\");\n }\n ]);\n if(true) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/_error\"])\n });\n }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWNsaWVudC1wYWdlcy1sb2FkZXIuanM/YWJzb2x1dGVQYWdlUGF0aD1wcml2YXRlLW5leHQtcGFnZXMlMkZfZXJyb3ImcGFnZT0lMkZfZXJyb3IhIiwibWFwcGluZ3MiOiI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1CQUFPLENBQUMsMkVBQTJCO0FBQ2xEO0FBQ0E7QUFDQSxPQUFPLElBQVU7QUFDakIsTUFBTSxVQUFVO0FBQ2hCO0FBQ0EsT0FBTztBQUNQO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLz84MDdiIl0sInNvdXJjZXNDb250ZW50IjpbIlxuICAgICh3aW5kb3cuX19ORVhUX1AgPSB3aW5kb3cuX19ORVhUX1AgfHwgW10pLnB1c2goW1xuICAgICAgXCIvX2Vycm9yXCIsXG4gICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlKFwicHJpdmF0ZS1uZXh0LXBhZ2VzL19lcnJvclwiKTtcbiAgICAgIH1cbiAgICBdKTtcbiAgICBpZihtb2R1bGUuaG90KSB7XG4gICAgICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKCkge1xuICAgICAgICB3aW5kb3cuX19ORVhUX1AucHVzaChbXCIvX2Vycm9yXCJdKVxuICAgICAgfSk7XG4gICAgfVxuICAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=private-next-pages%2F_error&page=%2F_error!\n"));
/***/ })
},
/******/ function(__webpack_require__) { // webpackRuntimeModules
/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
/******/ __webpack_require__.O(0, ["pages/_app","main"], function() { return __webpack_exec__("./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=private-next-pages%2F_error&page=%2F_error!"); });
/******/ var __webpack_exports__ = __webpack_require__.O();
/******/ _N_E = __webpack_exports__;
/******/ }
]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -1 +0,0 @@
self.__BUILD_MANIFEST = {__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":["static\u002Fchunks\u002Fpages\u002Findex.js"],"/_error":["static\u002Fchunks\u002Fpages\u002F_error.js"],sortedPages:["\u002F","\u002F_app","\u002F_error"]};self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()

View File

@@ -1 +0,0 @@
self.__SSG_MANIFEST=new Set;self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()

View File

@@ -1 +0,0 @@
{"c":["webpack"],"r":[],"m":[]}

View File

@@ -1 +0,0 @@
{"c":[],"r":[],"m":[]}

View File

@@ -1,18 +0,0 @@
"use strict";
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
self["webpackHotUpdate_N_E"]("webpack",{},
/******/ function(__webpack_require__) { // webpackRuntimeModules
/******/ /* webpack/runtime/getFullHash */
/******/ !function() {
/******/ __webpack_require__.h = function() { return "d1363c6e2dfbe09d"; }
/******/ }();
/******/
/******/ }
);

File diff suppressed because one or more lines are too long

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

@@ -39,7 +39,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 +76,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 });
@@ -96,6 +96,9 @@ const PerformanceOptimizedFontCard = forwardRef(({
const getFontStyle = useCallback((name) => { const getFontStyle = useCallback((name) => {
const baseStyle = { wordBreak: "break-word", lineHeight: "1.3", willChange: "auto" }; const baseStyle = { wordBreak: "break-word", lineHeight: "1.3", willChange: "auto" };
const fontEntry = fontTransforms[name]; const fontEntry = fontTransforms[name];
if (!fontEntry) {
console.warn(`Font definition missing for ${name}`);
}
if (!fontEntry) return baseStyle; if (!fontEntry) return baseStyle;
const style = { ...baseStyle }; const style = { ...baseStyle };
@@ -107,7 +110,8 @@ const PerformanceOptimizedFontCard = forwardRef(({
return style; return style;
}, []); }, []);
const previewText = sStr(transformedText) || "Hallo Instagram!"; const previewText = sStr(transformedText?.transformed ?? transformedText) || "Hallo Instagram!";
const fontClass = transformedText?.fontClassName ?? "";
return ( return (
<div ref={ref} className="will-change-transform mb-6"> <div ref={ref} className="will-change-transform mb-6">
@@ -158,7 +162,7 @@ const PerformanceOptimizedFontCard = forwardRef(({
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={{ ...getFontStyle(fontName), 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>
@@ -175,7 +179,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" /> Start Typing </> <><Copy className="w-4 h-4 mr-2" /> Copy! </>
)} )}
</Button> </Button>
</div> </div>

View File

@@ -1,18 +1,16 @@
// components/fontTransforms.jsx // components/fontTransforms.jsx
// 1) Unicode-Blöcke (Startpunkte)
const unicodeBlocks = { const unicodeBlocks = {
sansSerif: { upperStart: 0x1D5A0, lowerStart: 0x1D5BA }, sansSerif: { upperStart: 0x1D5A0, lowerStart: 0x1D5BA },
sansSerifBold: { upperStart: 0x1D5D4, lowerStart: 0x1D5EE }, sansSerifBold: { upperStart: 0x1D5D4, lowerStart: 0x1D5EE },
script: { upperStart: 0x1D49C, lowerStart: 0x1D4B6 }, script: { upperStart: 0x1D49C, lowerStart: 0x1D4B6 },
scriptBold: { upperStart: 0x1D4D0, lowerStart: 0x1D4EA }, scriptBold: { upperStart: 0x1D4D0, lowerStart: 0x1D4EA },
fraktur: { upperStart: 0x1D504, lowerStart: 0x1D51E }, fraktur: { upperStart: 0x1D504, lowerStart: 0x1D51E },
frakturBold: { upperStart: 0x1D56C, lowerStart: 0x1D586 }, frakturBold: { upperStart: 0x1D56C, lowerStart: 0x1D586 },
monospace: { upperStart: 0x1D670, lowerStart: 0x1D68A }, monospace: { upperStart: 0x1D670, lowerStart: 0x1D68A },
fullwidth: { upperStart: 0xFF21, lowerStart: 0xFF41 } fullwidth: { upperStart: 0xFF21, lowerStart: 0xFF41 }
}; };
// 2) Unicode-Mapping-Helfer
const mapUnicode = (char, block) => { const mapUnicode = (char, block) => {
const code = char.charCodeAt(0); const code = char.charCodeAt(0);
if (code >= 65 && code <= 90) return String.fromCodePoint(block.upperStart + (code - 65)); if (code >= 65 && code <= 90) return String.fromCodePoint(block.upperStart + (code - 65));
@@ -23,102 +21,55 @@ const mapUnicode = (char, block) => {
const createTransform = (blockKey) => (text) => const createTransform = (blockKey) => (text) =>
text.split('').map((c) => mapUnicode(c, unicodeBlocks[blockKey])).join(''); text.split('').map((c) => mapUnicode(c, unicodeBlocks[blockKey])).join('');
// 3) Font-Transformationen const fontList = [
"Anton", "Bebas Neue", "Dancing Script", "Montserrat", "Orbitron", "Pacifico",
"Playfair Display", "Poppins"
];
const getCategory = (name) => {
const normalizedName = name.toLowerCase().replace(/ /g, "-");
if (["dancing-script", "pacifico"].includes(normalizedName)) return "handwriting";
if (["anton", "bebas-neue", "playfair-display"].includes(normalizedName)) return "statement";
if (["orbitron"].includes(normalizedName)) return "futuristic";
if (["montserrat", "poppins"].includes(normalizedName)) return "modern";
return "aesthetic";
};
const blockForCategory = {
modern: "sansSerif",
handwriting: "scriptBold",
statement: "fullwidth",
futuristic: "monospace",
aesthetic: "frakturBold"
};
export const fontTransforms = Object.fromEntries( export const fontTransforms = Object.fromEntries(
Object.entries({ fontList.map((font) => {
// 🔤 Modern const normalizedFont = font.toLowerCase().replace(/ /g, "-");
Montserrat: ['sansSerifBold', 'modern', 'Montserrat Sans-Serif Bold Unicode'], const category = getCategory(font);
Lato: ['sansSerif', 'modern', 'Lato Humanistischer Sans-Serif Unicode'], return [font, {
Raleway: ['sansSerif', 'modern', 'Raleway Elegant Display Unicode'], transform: (text) => text, // Echte Fonts verwenden, keine Unicode-Transformation
Poppins: ['sansSerif', 'modern', 'Poppins Rund & freundlich Unicode'],
'Open Sans': ['sansSerif', 'modern', 'Open Sans Vielseitig Unicode'],
Roboto: ['sansSerif', 'modern', 'Roboto Modernes Grotesk Unicode'],
'Work Sans': ['sansSerif', 'modern', 'Work Sans Tech & Clean Unicode'],
'Noto Sans': ['sansSerif', 'modern', 'Noto Sans International Unicode'],
Jost: ['sansSerif', 'modern', 'Jost Geometrisch modern Unicode'],
Quicksand: ['sansSerif', 'modern', 'Quicksand Soft Rounded Unicode'],
'Averia Libre': ['sansSerif', 'modern', 'Averia Libre Experimentell Unicode'],
'Philosopher': ['sansSerif', 'modern', 'Philosopher Elegant Unicode'],
// ✍️ Handwriting
Pacifico: ['scriptBold', 'handwriting', 'Pacifico Lockerer Pinsel Bold Script Unicode'],
Sacramento: ['scriptBold', 'handwriting', 'Sacramento Retro-Handlettering Bold Script Unicode'],
Caveat: ['scriptBold', 'handwriting', 'Caveat Natural Handwriting Bold Script Unicode'],
'Dancing Script': ['scriptBold', 'handwriting', 'Dancing Script Lebhafte Kursive Bold Script Unicode'],
'Indie Flower': ['scriptBold', 'handwriting', 'Indie Flower Verspieltes Bold Script Unicode'],
'Amatic SC': ['scriptBold', 'handwriting', 'Amatic SC Skizzenartiges Bold Script Unicode'],
'Kaushan Script': ['scriptBold', 'handwriting', 'Kaushan Script Fettere Kursive Bold Script Unicode'],
'Architects Daughter': ['scriptBold','handwriting', 'Architects Daughter Skizzenhafte Handschrift Unicode'],
Neucha: ['scriptBold', 'handwriting', 'Neucha Persönlich und kantig Unicode'],
'Great Vibes': ['scriptBold', 'handwriting', 'Great Vibes Elegante Kalligraphie Unicode'],
Satisfy: ['scriptBold', 'handwriting', 'Satisfy Weiche Script Unicode'],
Yellowtail: ['scriptBold', 'handwriting', 'Yellowtail Vintage Script Unicode'],
'Gloria Hallelujah': ['scriptBold', 'handwriting', 'Gloria Hallelujah Lebendige Handschrift Unicode'],
// 🧑‍🎤 Statement
Oswald: ['sansSerifBold', 'statement', 'Oswald Bold Grotesk Unicode'],
'Bebas Neue': ['fullwidth', 'statement', 'Bebas Neue Fullwidth Caps Unicode'],
Ultra: ['sansSerifBold', 'statement', 'Ultra Kompakte Bold Unicode'],
'Stint Ultra Condensed': ['sansSerifBold', 'statement', 'Stint Ultra Condensed Kompakte Bold Unicode'],
'Playfair Display': ['scriptBold', 'statement', 'Playfair Display Elegante Bold Script Unicode'],
'Abril Fatface': ['scriptBold', 'statement', 'Abril Fatface Fettere Bold Script Unicode'],
'Permanent Marker': ['scriptBold', 'statement', 'Permanent Marker Marker-Style Unicode'],
'Alfa Slab One': ['fullwidth', 'statement', 'Alfa Slab One Slab Serif Heavy Unicode'],
'Black Ops One': ['fullwidth', 'statement', 'Black Ops One Military Display Unicode'],
'Germania One': ['frakturBold', 'statement', 'Germania One Oldstyle Fraktur Unicode'],
'Holtwood One SC': ['fullwidth', 'statement', 'Holtwood One SC Klassisch Bold Small Caps Unicode'],
Courgette: ['scriptBold', 'statement', 'Courgette Verspieltes Script Unicode'],
// 🚀 Futuristic
Exo: ['sansSerif', 'futuristic', 'Exo Tech Grotesk Unicode'],
Orbitron: ['monospace', 'futuristic', 'Orbitron Sci-Fi Monospace Unicode'],
Audiowide: ['monospace', 'futuristic', 'Audiowide Rundes Monospace Unicode'],
Rajdhani: ['monospace', 'futuristic', 'Rajdhani Digital Monospace Unicode'],
'Space Mono': ['monospace', 'futuristic', 'Space Mono Tech Monospace Unicode'],
Questrial: ['sansSerif', 'futuristic', 'Questrial Clean Sans-Serif Unicode'],
'Syncopate': ['monospace', 'futuristic', 'Syncopate Techno Unicode'],
'Unica One': ['monospace', 'futuristic', 'Unica One Monospace Mix Unicode'],
'Italiana': ['sansSerif', 'futuristic', 'Italiana Futuristisch Serif Unicode'],
'Staatliches': ['monospace', 'futuristic', 'Staatliches Moderne Grotesk Unicode'],
// 🧢 Aesthetic
'Press Start 2P': ['monospace', 'aesthetic', 'Press Start 2P Pixel Monospace Unicode'],
Righteous: ['frakturBold', 'aesthetic', 'Righteous Stylische Bold Fraktur Unicode'],
'Metal Mania': ['scriptBold', 'aesthetic', 'Metal Mania Fettere Script Unicode'],
'Alegreya': ['frakturBold', 'aesthetic', 'Alegreya Literatur Serif Unicode'],
'Spectral': ['frakturBold', 'aesthetic', 'Spectral Editorial Serif Unicode'],
'Fjalla One': ['sansSerifBold', 'aesthetic', 'Fjalla One Headline Sans Unicode'],
'Glass Antiqua': ['scriptBold', 'aesthetic', 'Glass Antiqua Zarte Antiqua Script Unicode'],
'Cinzel Decorative': ['scriptBold', 'aesthetic', 'Cinzel Decorative Klassische Zier-Serif Unicode'],
'Andika': ['sansSerif', 'aesthetic', 'Andika Leserlich Unicode'],
'Almendra': ['scriptBold', 'aesthetic', 'Almendra Historische Handschrift Unicode'],
}).map(([name, [block, category, description]]) => [
name,
{
transform: createTransform(block),
category, category,
description, description: `${font} Echte Schriftart verwendet`,
className: `font-${name.toLowerCase().replace(/\s+/g, '')}`, className: `font-${normalizedFont}`
}, }];
]) })
); );
// 🔝 Neue transformText-Funktion gibt transformierten Text **und** Tailwind-Klasse zurück
export const transformText = (text, fontName) => { export const transformText = (text, fontName) => {
const font = fontTransforms[fontName]; const font = fontTransforms[fontName];
if (!font || !text) return { transformed: text, fontClassName: '' }; if (!font || !text) return { transformed: text, fontClassName: "" };
return { return {
transformed: font.transform(text), transformed: font.transform(text),
fontClassName: font.className, fontClassName: font.className
}; };
}; };
// Weitere Helfer export const getPopularFonts = () => Object.keys(fontTransforms).slice(0, 5);
export const getPopularFonts = () => Object.keys(fontTransforms).slice(0, 10);
export const getFontsByCategory = (category) => export const getFontsByCategory = (category) =>
category === 'all' category === "all"
? Object.keys(fontTransforms) ? Object.keys(fontTransforms)
: Object.keys(fontTransforms).filter( : Object.keys(fontTransforms).filter(
(f) => fontTransforms[f].category === category (f) => fontTransforms[f].category === category
); );

View File

@@ -5,8 +5,6 @@ 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 { transformText, fontTransforms } from "../fontTransforms"; import { transformText, fontTransforms } from "../fontTransforms";
import { getFontData } from "@/lib/fonts";
import fontMap from "@/lib/tailwind-font-map";
export default function FontCard({ export default function FontCard({
fontName, fontName,
@@ -19,71 +17,24 @@ 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 fontKey = fontName.toLowerCase().replace(/\s+/g, "");
const fontVarName = fontMap[fontKey];
const fontVar = fontVarName ? { fontFamily: `var(${fontVarName})` } : {};
const fontClass = fontData?.className || "";
// 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 rawText = "Hallo Instagram!";
const transformed = transformText(rawText, fontName); const { transformed } = transformText(rawText, fontName);
const finalText = transformed?.transformed || rawText; const finalText = transformed || rawText;
const copyText = transformed?.transformed || rawText;
const handleCopy = () => { const handleCopy = () => {
if (navigator.clipboard && window.isSecureContext) { navigator.clipboard.writeText(finalText).then(() => {
navigator.clipboard setCopied(true);
.writeText(copyText) 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 = copyText;
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: copyText,
url: window.location.href,
});
} catch (err) {
console.error("Share fehlgeschlagen:", err);
}
}; };
return ( return (
@@ -117,7 +68,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>
@@ -135,8 +86,8 @@ export default function FontCard({
type="text" type="text"
value={finalText} value={finalText}
readOnly readOnly
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`} 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={{ ...fontVar, lineHeight: "1.2" }} style={{ lineHeight: "1.2" }}
/> />
<Button <Button

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,69 +0,0 @@
// lib/fonts.js
export const fonts = {
montserrat: "font-montserrat",
opensans: "font-opensans",
roboto: "font-roboto",
lato: "font-lato",
raleway: "font-raleway",
poppins: "font-poppins",
worksans: "font-worksans",
jost: "font-jost",
notosans: "font-notosans",
quicksand: "font-quicksand",
averialibre: "font-averialibre",
philosopher: "font-philosopher",
pacifico: "font-pacifico",
caveat: "font-caveat",
sacramento: "font-sacramento",
dancingscript: "font-dancingscript",
indieflower: "font-indieflower",
amatic: "font-amatic",
kaushan: "font-kaushan",
architects: "font-architects",
neucha: "font-neucha",
greatvibes: "font-greatvibes",
satisfy: "font-satisfy",
yellowtail: "font-yellowtail",
gloria: "font-gloria",
courgette: "font-courgette",
almendra: "font-almendra",
oswald: "font-oswald",
bebasneue: "font-bebasneue",
ultra: "font-ultra",
stint: "font-stint",
playfair: "font-playfair",
abril: "font-abril",
permanentmarker: "font-permanentmarker",
alfaslab: "font-alfaslab",
blackops: "font-blackops",
germania: "font-germania",
holtwood: "font-holtwood",
exo: "font-exo",
orbitron: "font-orbitron",
audiowide: "font-audiowide",
rajdhani: "font-rajdhani",
spacemono: "font-spacemono",
questrial: "font-questrial",
syncopate: "font-syncopate",
unicaone: "font-unicaone",
italiana: "font-italiana",
staatliches: "font-staatliches",
pressstart2p: "font-pressstart2p",
righteous: "font-righteous",
metalmania: "font-metalmania",
alegreya: "font-alegreya",
spectral: "font-spectral",
fjallaone: "font-fjallaone",
glassantiqua: "font-glassantiqua",
cinzeldecorative: "font-cinzeldecorative",
andika: "font-andika",
};
export const getFontData = (key) =>
fonts[key?.toLowerCase()] ?? fonts["montserrat"];

View File

@@ -1,68 +0,0 @@
/**
* Enthält **nur** die CSSVariablenNamen, die next/font im Browser setzt.
* In fonts.js oder per @font-face werden sie erzeugt hier referenzieren wir sie.
*/
export default {
montserrat: "--font-montserrat",
lato: "--font-lato",
raleway: "--font-raleway",
poppins: "--font-poppins",
opensans: "--font-opensans",
roboto: "--font-roboto",
worksans: "--font-worksans",
notosans: "--font-notosans",
jost: "--font-jost",
quicksand: "--font-quicksand",
averialibre: "--font-averialibre",
philosopher: "--font-philosopher",
pacifico: "--font-pacifico",
sacramento: "--font-sacramento",
caveat: "--font-caveat",
dancingscript: "--font-dancingscript",
indieflower: "--font-indieflower",
amaticsc: "--font-amatic",
kaushanscript: "--font-kaushan",
architectsdaughter: "--font-architects",
neucha: "--font-neucha",
greatvibes: "--font-greatvibes",
satisfy: "--font-satisfy",
yellowtail: "--font-yellowtail",
gloriahallelujah: "--font-gloria",
oswald: "--font-oswald",
bebasneue: "--font-bebasneue",
ultra: "--font-ultra",
stintultracondensed: "--font-stint",
playfairdisplay: "--font-playfair",
abrilfatface: "--font-abril",
permanentmarker: "--font-permanentmarker",
alfaslabone: "--font-alfaslab",
blackopsone: "--font-blackops",
germaniaone: "--font-germania",
holtwoodonesc: "--font-holtwood",
courgette: "--font-courgette",
exo: "--font-exo",
orbitron: "--font-orbitron",
audiowide: "--font-audiowide",
rajdhani: "--font-rajdhani",
spacemono: "--font-spacemono",
questrial: "--font-questrial",
syncopate: "--font-syncopate",
unicaone: "--font-unicaone",
italiana: "--font-italiana",
staatliches: "--font-staatliches",
pressstart2p: "--font-pressstart2p",
righteous: "--font-righteous",
metalmania: "--font-metalmania",
alegreya: "--font-alegreya",
spectral: "--font-spectral",
fjallaone: "--font-fjallaone",
glassantiqua: "--font-glassantiqua",
cinzeldecorative: "--font-cinzeldecorative",
andika: "--font-andika",
almendra: "--font-almendra",
};

View File

@@ -1,14 +1,7 @@
/** @type {import('next').NextConfig} */ /** @type {import('next').NextConfig} */
const nextConfig = { const nextConfig = {
experimental: { experimental: {
fontLoaders: [ // hier können andere gültige experimentelle Optionen stehen, falls nötig
{
loader: "@next/font/google",
options: {
subsets: ["latin"],
},
},
],
}, },
}; };

View File

@@ -1,12 +0,0 @@
// next.config.mjs
import path from "path";
import withFlowbiteReact from "flowbite-react/plugin/nextjs";
const nextConfig = {
webpack: (config) => {
config.resolve.alias["@"] = path.resolve(process.cwd());
return config;
},
};
export default withFlowbiteReact(nextConfig);

View File

@@ -1,17 +1,6 @@
// pages/_app.jsx import "@/styles/tailwind.build.css"; // dein Tailwind-Build
import "@/styles/tailwind.build.css"; // dein TailwindBuild import "../styles/globals.css";
import { fonts } from "@/lib/fonts";
// CSS-Variablen für alle Fonts aus next/font/google
const allFontVars = Object.values(fonts)
.filter((f) => f?.variable)
.map((f) => f.variable)
.join(" ");
export default function MyApp({ Component, pageProps }) { export default function MyApp({ Component, pageProps }) {
return ( return <Component {...pageProps} />;
<main className={allFontVars}>
<Component {...pageProps} />
</main>
);
} }

View File

@@ -9,12 +9,14 @@ 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";
if (typeof window !== "undefined") { if (typeof window !== "undefined") {
@@ -28,6 +30,7 @@ export default function HomePage() {
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;
@@ -248,6 +251,7 @@ export default function HomePage() {
</AnimatePresence> </AnimatePresence>
</motion.div> </motion.div>
<SocialButtons onShare={handleQuickShare} /> <SocialButtons onShare={handleQuickShare} />
<InfoSection currentText={debouncedText} /> <InfoSection currentText={debouncedText} />
</div> </div>

View File

@@ -1,659 +1,246 @@
/* globals.css */
@tailwind base; @tailwind base;
@tailwind components; @tailwind components;
@import "./local-fonts.css";
@tailwind utilities; @tailwind utilities;
/* === Lokale Fonts via woff2 einbinden === */ /* === Font-Definitionen === */
@font-face { @font-face {
font-family: "AbrilFatface"; font-family: 'Anton';
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: "AlfaSlabOne";
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: "AmaticSc";
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: "ArchitectsDaughter";
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: "AveriaLibre";
src: url("/fonts/averia-libre.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "BebasNeue";
src: url("/fonts/bebas-neue.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "BlackOpsOne";
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: "CinzelDecorative";
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: "DancingScript";
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: "FjallaOne";
src: url("/fonts/fjalla-one.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "GermaniaOne";
src: url("/fonts/germania-one.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "GlassAntiqua";
src: url("/fonts/glass-antiqua.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "GloriaHallelujah";
src: url("/fonts/gloria-hallelujah.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "GreatVibes";
src: url("/fonts/great-vibes.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "HoltwoodOneSc";
src: url("/fonts/holtwood-one-sc.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "IndieFlower";
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: "KaushanScript";
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: "MetalMania";
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: "NotoSans";
src: url("/fonts/noto-sans.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "OpenSans";
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: "PermanentMarker";
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: "PlayfairDisplay";
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: "PressStart2P";
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: "SpaceMono";
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: "StintUltraCondensed";
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: "UnicaOne";
src: url("/fonts/unica-one.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "WorkSans";
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;
}
@font-face {
font-family: "Vt323";
src: url("/fonts/vt323.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "FredokaOne";
src: url("/fonts/fredoka-one.woff2") format("woff2");
font-weight: 400;
font-style: normal; font-style: normal;
font-weight: 400;
font-display: swap;
src: ur[](https://fonts.gstatic.com/s/anton/v26/1Ptgg87LROyAm3K8-C8QSw.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
@font-face {
font-family: 'Anton';
font-style: normal;
font-weight: 400;
font-display: swap;
src: ur[](https://fonts.gstatic.com/s/anton/v26/1Ptgg87LROyAm3K9-C8QSw.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;
}
@font-face {
font-family: 'Anton';
font-style: normal;
font-weight: 400;
font-display: swap;
src: ur[](https://fonts.gstatic.com/s/anton/v26/1Ptgg87LROyAm3Kz-C8.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: 'Bebas Neue';
font-style: normal;
font-weight: 400;
font-display: swap;
src: ur[](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;
}
@font-face {
font-family: 'Bebas Neue';
font-style: normal;
font-weight: 400;
font-display: swap;
src: ur[](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: 'Dancing Script';
font-style: normal;
font-weight: 400;
font-display: swap;
src: ur[](https://fonts.gstatic.com/s/dancingscript/v28/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7BMSo3Rep8ltA.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
@font-face {
font-family: 'Dancing Script';
font-style: normal;
font-weight: 400;
font-display: swap;
src: ur[](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;
}
@font-face {
font-family: 'Dancing Script';
font-style: normal;
font-weight: 400;
font-display: swap;
src: ur[](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: 'Montserrat';
font-style: normal;
font-weight: 500;
font-display: swap;
src: ur[](https://fonts.gstatic.com/s/montserrat/v30/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtZ6Hw0aXpsog.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
@font-face {
font-family: 'Montserrat';
font-style: normal;
font-weight: 500;
font-display: swap;
src: ur[](https://fonts.gstatic.com/s/montserrat/v30/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtZ6Hw9aXpsog.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
font-family: 'Montserrat';
font-style: normal;
font-weight: 500;
font-display: swap;
src: ur[](https://fonts.gstatic.com/s/montserrat/v30/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtZ6Hw2aXpsog.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
@font-face {
font-family: 'Montserrat';
font-style: normal;
font-weight: 500;
font-display: swap;
src: ur[](https://fonts.gstatic.com/s/montserrat/v30/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtZ6Hw3aXpsog.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;
}
@font-face {
font-family: 'Montserrat';
font-style: normal;
font-weight: 500;
font-display: swap;
src: ur[](https://fonts.gstatic.com/s/montserrat/v30/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtZ6Hw5aXo.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: ur[](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: 'Pacifico';
font-style: normal;
font-weight: 400;
font-display: swap;
src: ur[](https://fonts.gstatic.com/s/pacifico/v22/FwZY7-Qmy14u9lezJ-6K6MmTpA.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
@font-face {
font-family: 'Pacifico';
font-style: normal;
font-weight: 400;
font-display: swap;
src: ur[](https://fonts.gstatic.com/s/pacifico/v22/FwZY7-Qmy14u9lezJ-6D6MmTpA.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
font-family: 'Pacifico';
font-style: normal;
font-weight: 400;
font-display: swap;
src: ur[](https://fonts.gstatic.com/s/pacifico/v22/FwZY7-Qmy14u9lezJ-6I6MmTpA.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
@font-face {
font-family: 'Pacifico';
font-style: normal;
font-weight: 400;
font-display: swap;
src: ur[](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;
}
@font-face {
font-family: 'Pacifico';
font-style: normal;
font-weight: 400;
font-display: swap;
src: ur[](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: 'Playfair Display';
font-style: normal;
font-weight: 400;
font-display: swap;
src: ur[](https://fonts.gstatic.com/s/playfairdisplay/v39/nuFvD-vYSZviVYUb_rj3ij__anPXJzDwcbmjWBN2PKdFvXDTbtPY_Q.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
font-family: 'Playfair Display';
font-style: normal;
font-weight: 400;
font-display: swap;
src: ur[](https://fonts.gstatic.com/s/playfairdisplay/v39/nuFvD-vYSZviVYUb_rj3ij__anPXJzDwcbmjWBN2PKdFvXDYbtPY_Q.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
@font-face {
font-family: 'Playfair Display';
font-style: normal;
font-weight: 400;
font-display: swap;
src: ur[](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;
}
@font-face {
font-family: 'Playfair Display';
font-style: normal;
font-weight: 400;
font-display: swap;
src: ur[](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: 500;
font-display: swap;
src: ur[](https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLGT9Z11lFc-K.woff2) format('woff2');
unicode-range: U+0900-097F, U+1CD0-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B09;
}
@font-face {
font-family: 'Poppins';
font-style: normal;
font-weight: 500;
font-display: swap;
src: ur[](https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLGT9Z1JlFc-K.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;
}
@font-face {
font-family: 'Poppins';
font-style: normal;
font-weight: 500;
font-display: swap;
src: ur[](https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLGT9Z1xlFQ.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;
} }
/* === Tailwind Utility-Klassen === */
@layer utilities { @layer utilities {
.font-abril-fatface { .font-anton {
font-family: "AbrilFatface", serif; font-family: 'Anton', sans-serif;
} }
.font-alegreya {
font-family: "Alegreya", sans-serif;
}
.font-alfa-slab-one {
font-family: "AlfaSlabOne", sans-serif;
}
.font-almendra {
font-family: "Almendra", serif;
}
.font-amatic-sc {
font-family: "AmaticSc", cursive;
}
.font-andika {
font-family: "Andika", sans-serif;
}
.font-architects-daughter {
font-family: "ArchitectsDaughter", cursive;
}
.font-audiowide {
font-family: "Audiowide", sans-serif;
}
.font-averia-libre {
font-family: "AveriaLibre", cursive;
}
.font-bebas-neue { .font-bebas-neue {
font-family: "BebasNeue", sans-serif; font-family: 'Bebas Neue', sans-serif;
} }
.font-black-ops-one {
font-family: "BlackOpsOne", sans-serif;
}
.font-caveat {
font-family: "Caveat", cursive;
}
.font-cinzel-decorative {
font-family: "CinzelDecorative", serif;
}
.font-courgette {
font-family: "Courgette", cursive;
}
.font-dancing-script { .font-dancing-script {
font-family: "DancingScript", cursive; font-family: 'Dancing Script', cursive;
} }
.font-exo {
font-family: "Exo", sans-serif;
}
.font-fjalla-one {
font-family: "FjallaOne", sans-serif;
}
.font-germania-one {
font-family: "GermaniaOne", sans-serif;
}
.font-glass-antiqua {
font-family: "GlassAntiqua", cursive;
}
.font-gloria-hallelujah {
font-family: "GloriaHallelujah", cursive;
}
.font-great-vibes {
font-family: "GreatVibes", cursive;
}
.font-holtwood-one-sc {
font-family: "HoltwoodOneSc", sans-serif;
}
.font-indie-flower {
font-family: "IndieFlower", cursive;
}
.font-italiana {
font-family: "Italiana", serif;
}
.font-jost {
font-family: "Jost", sans-serif;
}
.font-kaushan-script {
font-family: "KaushanScript", cursive;
}
.font-lato {
font-family: "Lato", sans-serif;
}
.font-metal-mania {
font-family: "MetalMania", sans-serif;
}
.font-montserrat { .font-montserrat {
font-family: "Montserrat", sans-serif; font-family: 'Montserrat', sans-serif;
} }
.font-neucha {
font-family: "Neucha", sans-serif;
}
.font-noto-sans {
font-family: "NotoSans", sans-serif;
}
.font-open-sans {
font-family: "OpenSans", sans-serif;
}
.font-orbitron { .font-orbitron {
font-family: "Orbitron", sans-serif; font-family: 'Orbitron', sans-serif;
} }
.font-oswald {
font-family: "Oswald", sans-serif;
}
.font-pacifico { .font-pacifico {
font-family: "Pacifico", cursive; font-family: 'Pacifico', cursive;
} }
.font-permanent-marker {
font-family: "PermanentMarker", sans-serif;
}
.font-philosopher {
font-family: "Philosopher", serif;
}
.font-playfair-display { .font-playfair-display {
font-family: "PlayfairDisplay", serif; font-family: 'Playfair Display', serif;
} }
.font-poppins { .font-poppins {
font-family: "Poppins", sans-serif; font-family: 'Poppins', sans-serif;
}
.font-press-start-2p {
font-family: "PressStart2P", monospace;
}
.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", serif;
}
.font-righteous {
font-family: "Righteous", sans-serif;
}
.font-roboto {
font-family: "Roboto", sans-serif;
}
.font-sacramento {
font-family: "Sacramento", cursive;
}
.font-satisfy {
font-family: "Satisfy", cursive;
}
.font-space-mono {
font-family: "SpaceMono", sans-serif;
}
.font-spectral {
font-family: "Spectral", sans-serif;
}
.font-staatliches {
font-family: "Staatliches", serif;
}
.font-stint-ultra-condensed {
font-family: "StintUltraCondensed", sans-serif;
}
.font-syncopate {
font-family: "Syncopate", sans-serif;
}
.font-ultra {
font-family: "Ultra", serif;
}
.font-unica-one {
font-family: "UnicaOne", sans-serif;
}
.font-work-sans {
font-family: "WorkSans", sans-serif;
}
.font-yellowtail {
font-family: "Yellowtail", cursive;
}
.font-vt323 {
font-family: "Vt323", monospace;
}
.font-fredoka-one {
font-family: "FredokaOne", sans-serif;
} }
} }
/* Komponenten */ /* Komponenten */
@layer components { @layer components {
.text-shadow-lg { .text-shadow-lg {
@@ -665,4 +252,4 @@
body { body {
background: #111; background: #111;
color: #fff; color: #fff;
} }

View File

@@ -1,628 +0,0 @@
@font-face {
font-family: "AbrilFatface";
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: "AlfaSlabOne";
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: "AmaticSc";
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: "ArchitectsDaughter";
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: "AveriaLibre";
src: url("/fonts/averia-libre.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "BebasNeue";
src: url("/fonts/bebas-neue.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "BlackOpsOne";
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: "CinzelDecorative";
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: "DancingScript";
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: "FjallaOne";
src: url("/fonts/fjalla-one.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "GermaniaOne";
src: url("/fonts/germania-one.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "GlassAntiqua";
src: url("/fonts/glass-antiqua.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "GloriaHallelujah";
src: url("/fonts/gloria-hallelujah.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "GreatVibes";
src: url("/fonts/great-vibes.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "HoltwoodOneSc";
src: url("/fonts/holtwood-one-sc.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "IndieFlower";
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: "KaushanScript";
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: "MetalMania";
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: "NotoSans";
src: url("/fonts/noto-sans.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "OpenSans";
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: "PermanentMarker";
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: "PlayfairDisplay";
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: "PressStart2P";
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: "SpaceMono";
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: "StintUltraCondensed";
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: "UnicaOne";
src: url("/fonts/unica-one.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "WorkSans";
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;
}
@layer utilities {
.font-abril-fatface {
font-family: "AbrilFatface", sans-serif;
}
.font-alegreya {
font-family: "Alegreya", sans-serif;
}
.font-alfa-slab-one {
font-family: "AlfaSlabOne", sans-serif;
}
.font-almendra {
font-family: "Almendra", sans-serif;
}
.font-amatic-sc {
font-family: "AmaticSc", sans-serif;
}
.font-andika {
font-family: "Andika", sans-serif;
}
.font-architects-daughter {
font-family: "ArchitectsDaughter", sans-serif;
}
.font-audiowide {
font-family: "Audiowide", sans-serif;
}
.font-averia-libre {
font-family: "AveriaLibre", sans-serif;
}
.font-bebas-neue {
font-family: "BebasNeue", sans-serif;
}
.font-black-ops-one {
font-family: "BlackOpsOne", sans-serif;
}
.font-caveat {
font-family: "Caveat", sans-serif;
}
.font-cinzel-decorative {
font-family: "CinzelDecorative", sans-serif;
}
.font-courgette {
font-family: "Courgette", sans-serif;
}
.font-dancing-script {
font-family: "DancingScript", sans-serif;
}
.font-exo {
font-family: "Exo", sans-serif;
}
.font-fjalla-one {
font-family: "FjallaOne", sans-serif;
}
.font-germania-one {
font-family: "GermaniaOne", sans-serif;
}
.font-glass-antiqua {
font-family: "GlassAntiqua", sans-serif;
}
.font-gloria-hallelujah {
font-family: "GloriaHallelujah", sans-serif;
}
.font-great-vibes {
font-family: "GreatVibes", sans-serif;
}
.font-holtwood-one-sc {
font-family: "HoltwoodOneSc", sans-serif;
}
.font-indie-flower {
font-family: "IndieFlower", sans-serif;
}
.font-italiana {
font-family: "Italiana", sans-serif;
}
.font-jost {
font-family: "Jost", sans-serif;
}
.font-kaushan-script {
font-family: "KaushanScript", sans-serif;
}
.font-lato {
font-family: "Lato", sans-serif;
}
.font-metal-mania {
font-family: "MetalMania", sans-serif;
}
.font-montserrat {
font-family: "Montserrat", sans-serif;
}
.font-neucha {
font-family: "Neucha", sans-serif;
}
.font-noto-sans {
font-family: "NotoSans", sans-serif;
}
.font-open-sans {
font-family: "OpenSans", 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: "PermanentMarker", sans-serif;
}
.font-philosopher {
font-family: "Philosopher", sans-serif;
}
.font-playfair-display {
font-family: "PlayfairDisplay", sans-serif;
}
.font-poppins {
font-family: "Poppins", sans-serif;
}
.font-press-start-2p {
font-family: "PressStart2P", 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: "SpaceMono", sans-serif;
}
.font-spectral {
font-family: "Spectral", sans-serif;
}
.font-staatliches {
font-family: "Staatliches", sans-serif;
}
.font-stint-ultra-condensed {
font-family: "StintUltraCondensed", sans-serif;
}
.font-syncopate {
font-family: "Syncopate", sans-serif;
}
.font-ultra {
font-family: "Ultra", sans-serif;
}
.font-unica-one {
font-family: "UnicaOne", sans-serif;
}
.font-work-sans {
font-family: "WorkSans", sans-serif;
}
.font-yellowtail {
font-family: "Yellowtail", sans-serif;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -9,80 +9,22 @@ module.exports = {
theme: { theme: {
extend: { extend: {
fontFamily: { fontFamily: {
// MODERN 'anton': ['"Anton"', 'sans-serif'],
montserrat: ["'Montserrat'", "sans-serif"], 'bebas-neue': ['"Bebas Neue"', 'sans-serif'],
lato: ["'Lato'", "sans-serif"], 'dancing-script': ['"Dancing Script"', 'cursive'],
raleway: ["'Raleway'", "sans-serif"], 'montserrat': ['"Montserrat"', 'sans-serif'],
poppins: ["'Poppins'", "sans-serif"], 'orbitron': ['"Orbitron"', 'sans-serif'],
"open-sans": ["'Open Sans'", "sans-serif"], 'pacifico': ['"Pacifico"', 'cursive'],
roboto: ["'Roboto'", "sans-serif"], 'playfair-display': ['"Playfair Display"', 'serif'],
"work-sans": ["'Work Sans'", "sans-serif"], 'poppins': ['"Poppins"', 'sans-serif'],
"noto-sans": ["'Noto Sans'", "sans-serif"],
jost: ["'Jost'", "sans-serif"],
quicksand: ["'Quicksand'", "sans-serif"],
"averia-libre": ["'Averia Libre'", "cursive"],
philosopher: ["'Philosopher'", "sans-serif"],
// HANDWRITING
pacifico: ["'Pacifico'", "cursive"],
sacramento: ["'Sacramento'", "cursive"],
caveat: ["'Caveat'", "cursive"],
"dancing-script": ["'Dancing Script'", "cursive"],
"indie-flower": ["'Indie Flower'", "cursive"],
"amatic-sc": ["'Amatic SC'", "cursive"],
"kaushan-script": ["'Kaushan Script'", "cursive"],
"architects-daughter": ["'Architects Daughter'", "cursive"],
neucha: ["'Neucha'", "cursive"],
"great-vibes": ["'Great Vibes'", "cursive"],
satisfy: ["'Satisfy'", "cursive"],
yellowtail: ["'Yellowtail'", "cursive"],
"gloria-hallelujah": ["'Gloria Hallelujah'", "cursive"],
// STATEMENT
oswald: ["'Oswald'", "sans-serif"],
"bebas-neue": ["'Bebas Neue'", "sans-serif"],
ultra: ["'Ultra'", "serif"],
"stint-ultra-condensed": ["'Stint Ultra Condensed'", "sans-serif"],
"playfair-display": ["'Playfair Display'", "serif"],
"abril-fatface": ["'Abril Fatface'", "serif"],
"permanent-marker": ["'Permanent Marker'", "cursive"],
"alfa-slab-one": ["'Alfa Slab One'", "serif"],
"black-ops-one": ["'Black Ops One'", "sans-serif"],
"germania-one": ["'Germania One'", "serif"],
"holtwood-one-sc": ["'Holtwood One SC'", "serif"],
courgette: ["'Courgette'", "cursive"],
// FUTURISTIC
exo: ["'Exo'", "sans-serif"],
orbitron: ["'Orbitron'", "sans-serif"],
audiowide: ["'Audiowide'", "sans-serif"],
rajdhani: ["'Rajdhani'", "sans-serif"],
"space-mono": ["'Space Mono'", "monospace"],
questrial: ["'Questrial'", "sans-serif"],
syncopate: ["'Syncopate'", "sans-serif"],
"unica-one": ["'Unica One'", "sans-serif"],
italiana: ["'Italiana'", "serif"],
staatliches: ["'Staatliches'", "serif"],
// AESTHETIC
"press-start-2p": ["'Press Start 2P'", "monospace"],
righteous: ["'Righteous'", "sans-serif"],
"metal-mania": ["'Metal Mania'", "cursive"],
alegreya: ["'Alegreya'", "serif"],
spectral: ["'Spectral'", "serif"],
"fjalla-one": ["'Fjalla One'", "sans-serif"],
"glass-antiqua": ["'Glass Antiqua'", "cursive"],
"cinzel-decorative": ["'Cinzel Decorative'", "serif"],
andika: ["'Andika'", "sans-serif"],
almendra: ["'Almendra'", "serif"],
}, },
}, },
}, },
plugins: [], plugins: [],
safelist: [ safelist: [
{ {
pattern: /^font-/, pattern: /^font-(anton|bebas-neue|dancing-script|montserrat|orbitron|pacifico|playfair-display|poppins)$/,
variants: ["sm", "md", "lg", "xl"], variants: ["sm", "md", "lg", "xl"],
}, },
], ],
}; };

View File

@@ -1,25 +0,0 @@
import tailwindFonts from "./lib/tailwind-font-map.js"; // ← **ASCIIMinus wichtig!**
/** @type {import('tailwindcss').Config} */
export default {
content: [
"./pages/**/*.{js,jsx,ts,tsx}",
"./components/**/*.{js,jsx,ts,tsx}",
"./entities/**/*.{js,jsx,ts,tsx}",
".flowbite-react/class-list.json",
],
theme: {
extend: {
fontFamily: {
// Dynamische Zuordnung: z.B. roboto: ['var(--font-roboto)']
...Object.fromEntries(
Object.entries(tailwindFonts).map(([key, cssVar]) => [
key,
[`var(${cssVar})`],
])
),
},
},
},
plugins: [],
};