aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPinapelz <yukais@pinapelz.com>2025-11-28 22:46:47 -0500
committerPinapelz <yukais@pinapelz.com>2025-11-28 22:46:47 -0500
commit5658441ab9b703c95a48e654d41e45cc3a55ffd3 (patch)
treeead5b59fe41459b3403393cea956ae544856c444
parent7681e421edb3933c8727cb0936bc8310d79df6e2 (diff)
middleware: migrate to tailwindcss
-rw-r--r--middleware/package.json5
-rw-r--r--middleware/pnpm-lock.yaml470
-rw-r--r--middleware/postcss.config.mjs8
-rw-r--r--middleware/src/app/[gameName]/page.tsx203
-rw-r--r--middleware/src/app/globals.css73
5 files changed, 469 insertions, 290 deletions
diff --git a/middleware/package.json b/middleware/package.json
index f2d772e..b54eb7a 100644
--- a/middleware/package.json
+++ b/middleware/package.json
@@ -21,8 +21,13 @@
"eslint-config-next": "15.3.4",
"global": "^4.4.0",
"next": "^15.3.4",
+ "postcss": "^8.5.6",
"react": "19.1.0",
"react-dom": "19.1.0",
"typescript": "5.8.3"
+ },
+ "devDependencies": {
+ "@tailwindcss/postcss": "^4.1.17",
+ "tailwindcss": "^4.1.17"
}
}
diff --git a/middleware/pnpm-lock.yaml b/middleware/pnpm-lock.yaml
index 2f92b7b..2e2f6e2 100644
--- a/middleware/pnpm-lock.yaml
+++ b/middleware/pnpm-lock.yaml
@@ -34,16 +34,19 @@ importers:
version: 0.6.8
eslint:
specifier: 9.30.0
- version: 9.30.0
+ version: 9.30.0(jiti@2.6.1)
eslint-config-next:
specifier: 15.3.4
- version: 15.3.4(eslint@9.30.0)(typescript@5.8.3)
+ version: 15.3.4(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)
global:
specifier: ^4.4.0
version: 4.4.0
next:
specifier: ^15.3.4
version: 15.3.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ postcss:
+ specifier: ^8.5.6
+ version: 8.5.6
react:
specifier: 19.1.0
version: 19.1.0
@@ -53,9 +56,20 @@ importers:
typescript:
specifier: 5.8.3
version: 5.8.3
+ devDependencies:
+ '@tailwindcss/postcss':
+ specifier: ^4.1.17
+ version: 4.1.17
+ tailwindcss:
+ specifier: ^4.1.17
+ version: 4.1.17
packages:
+ '@alloc/quick-lru@5.2.0':
+ resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
+ engines: {node: '>=10'}
+
'@emnapi/core@1.4.3':
resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==}
@@ -243,6 +257,22 @@ packages:
cpu: [x64]
os: [win32]
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
'@libsql/client@0.15.15':
resolution: {integrity: sha512-twC0hQxPNHPKfeOv3sNT6u2pturQjLcI+CnpTM0SjRpocEGgfiZ7DWKXLNnsothjyJmDqEsBQJ5ztq9Wlu470w==}
@@ -406,6 +436,94 @@ packages:
'@swc/helpers@0.5.15':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
+ '@tailwindcss/node@4.1.17':
+ resolution: {integrity: sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==}
+
+ '@tailwindcss/oxide-android-arm64@4.1.17':
+ resolution: {integrity: sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [android]
+
+ '@tailwindcss/oxide-darwin-arm64@4.1.17':
+ resolution: {integrity: sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-darwin-x64@4.1.17':
+ resolution: {integrity: sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-freebsd-x64@4.1.17':
+ resolution: {integrity: sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17':
+ resolution: {integrity: sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.1.17':
+ resolution: {integrity: sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.1.17':
+ resolution: {integrity: sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.1.17':
+ resolution: {integrity: sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-x64-musl@4.1.17':
+ resolution: {integrity: sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@tailwindcss/oxide-wasm32-wasi@4.1.17':
+ resolution: {integrity: sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+ bundledDependencies:
+ - '@napi-rs/wasm-runtime'
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ - '@tybys/wasm-util'
+ - '@emnapi/wasi-threads'
+ - tslib
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.1.17':
+ resolution: {integrity: sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.1.17':
+ resolution: {integrity: sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@tailwindcss/oxide@4.1.17':
+ resolution: {integrity: sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==}
+ engines: {node: '>= 10'}
+
+ '@tailwindcss/postcss@4.1.17':
+ resolution: {integrity: sha512-+nKl9N9mN5uJ+M7dBOOCzINw94MPstNR/GtIhz1fpZysxL/4a+No64jCBD6CPN+bIHWFx3KWuu8XJRrj/572Dw==}
+
'@tybys/wasm-util@0.9.0':
resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==}
@@ -857,6 +975,10 @@ packages:
emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+ enhanced-resolve@5.18.3:
+ resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
+ engines: {node: '>=10.13.0'}
+
es-abstract@1.24.0:
resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==}
engines: {node: '>= 0.4'}
@@ -1122,6 +1244,9 @@ packages:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
graphemer@1.4.0:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
@@ -1292,6 +1417,10 @@ packages:
resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
engines: {node: '>= 0.4'}
+ jiti@2.6.1:
+ resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
+ hasBin: true
+
js-base64@3.7.8:
resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==}
@@ -1338,6 +1467,76 @@ packages:
cpu: [x64, arm64, wasm32, arm]
os: [darwin, linux, win32]
+ lightningcss-android-arm64@1.30.2:
+ resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ lightningcss-darwin-arm64@1.30.2:
+ resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.30.2:
+ resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.30.2:
+ resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.30.2:
+ resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.30.2:
+ resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-arm64-musl@1.30.2:
+ resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-x64-gnu@1.30.2:
+ resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-linux-x64-musl@1.30.2:
+ resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-win32-arm64-msvc@1.30.2:
+ resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.30.2:
+ resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.30.2:
+ resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==}
+ engines: {node: '>= 12.0.0'}
+
linebreak@1.1.0:
resolution: {integrity: sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==}
@@ -1352,6 +1551,9 @@ packages:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
@@ -1514,6 +1716,10 @@ packages:
resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
engines: {node: ^10 || ^12 || >=14}
+ postcss@8.5.6:
+ resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+ engines: {node: ^10 || ^12 || >=14}
+
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
@@ -1719,6 +1925,13 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
+ tailwindcss@4.1.17:
+ resolution: {integrity: sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==}
+
+ tapable@2.3.0:
+ resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
+ engines: {node: '>=6'}
+
tiny-inflate@1.0.3:
resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==}
@@ -1836,6 +2049,8 @@ packages:
snapshots:
+ '@alloc/quick-lru@5.2.0': {}
+
'@emnapi/core@1.4.3':
dependencies:
'@emnapi/wasi-threads': 1.0.2
@@ -1852,9 +2067,9 @@ snapshots:
tslib: 2.8.1
optional: true
- '@eslint-community/eslint-utils@4.7.0(eslint@9.30.0)':
+ '@eslint-community/eslint-utils@4.7.0(eslint@9.30.0(jiti@2.6.1))':
dependencies:
- eslint: 9.30.0
+ eslint: 9.30.0(jiti@2.6.1)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
@@ -1994,6 +2209,25 @@ snapshots:
'@img/sharp-win32-x64@0.34.2':
optional: true
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
'@libsql/client@0.15.15':
dependencies:
'@libsql/core': 0.15.15
@@ -2130,6 +2364,75 @@ snapshots:
dependencies:
tslib: 2.8.1
+ '@tailwindcss/node@4.1.17':
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ enhanced-resolve: 5.18.3
+ jiti: 2.6.1
+ lightningcss: 1.30.2
+ magic-string: 0.30.21
+ source-map-js: 1.2.1
+ tailwindcss: 4.1.17
+
+ '@tailwindcss/oxide-android-arm64@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-arm64@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-x64@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-freebsd-x64@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-musl@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-wasm32-wasi@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide@4.1.17':
+ optionalDependencies:
+ '@tailwindcss/oxide-android-arm64': 4.1.17
+ '@tailwindcss/oxide-darwin-arm64': 4.1.17
+ '@tailwindcss/oxide-darwin-x64': 4.1.17
+ '@tailwindcss/oxide-freebsd-x64': 4.1.17
+ '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.17
+ '@tailwindcss/oxide-linux-arm64-gnu': 4.1.17
+ '@tailwindcss/oxide-linux-arm64-musl': 4.1.17
+ '@tailwindcss/oxide-linux-x64-gnu': 4.1.17
+ '@tailwindcss/oxide-linux-x64-musl': 4.1.17
+ '@tailwindcss/oxide-wasm32-wasi': 4.1.17
+ '@tailwindcss/oxide-win32-arm64-msvc': 4.1.17
+ '@tailwindcss/oxide-win32-x64-msvc': 4.1.17
+
+ '@tailwindcss/postcss@4.1.17':
+ dependencies:
+ '@alloc/quick-lru': 5.2.0
+ '@tailwindcss/node': 4.1.17
+ '@tailwindcss/oxide': 4.1.17
+ postcss: 8.5.6
+ tailwindcss: 4.1.17
+
'@tybys/wasm-util@0.9.0':
dependencies:
tslib: 2.8.1
@@ -2157,15 +2460,15 @@ snapshots:
dependencies:
'@types/node': 24.0.8
- '@typescript-eslint/eslint-plugin@8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(typescript@5.8.3)':
+ '@typescript-eslint/eslint-plugin@8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)':
dependencies:
'@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.35.1(eslint@9.30.0)(typescript@5.8.3)
+ '@typescript-eslint/parser': 8.35.1(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.35.1
- '@typescript-eslint/type-utils': 8.35.1(eslint@9.30.0)(typescript@5.8.3)
- '@typescript-eslint/utils': 8.35.1(eslint@9.30.0)(typescript@5.8.3)
+ '@typescript-eslint/type-utils': 8.35.1(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)
+ '@typescript-eslint/utils': 8.35.1(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)
'@typescript-eslint/visitor-keys': 8.35.1
- eslint: 9.30.0
+ eslint: 9.30.0(jiti@2.6.1)
graphemer: 1.4.0
ignore: 7.0.5
natural-compare: 1.4.0
@@ -2174,14 +2477,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.35.1(eslint@9.30.0)(typescript@5.8.3)':
+ '@typescript-eslint/parser@8.35.1(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)':
dependencies:
'@typescript-eslint/scope-manager': 8.35.1
'@typescript-eslint/types': 8.35.1
'@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3)
'@typescript-eslint/visitor-keys': 8.35.1
debug: 4.4.1
- eslint: 9.30.0
+ eslint: 9.30.0(jiti@2.6.1)
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
@@ -2204,12 +2507,12 @@ snapshots:
dependencies:
typescript: 5.8.3
- '@typescript-eslint/type-utils@8.35.1(eslint@9.30.0)(typescript@5.8.3)':
+ '@typescript-eslint/type-utils@8.35.1(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)':
dependencies:
'@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3)
- '@typescript-eslint/utils': 8.35.1(eslint@9.30.0)(typescript@5.8.3)
+ '@typescript-eslint/utils': 8.35.1(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)
debug: 4.4.1
- eslint: 9.30.0
+ eslint: 9.30.0(jiti@2.6.1)
ts-api-utils: 2.1.0(typescript@5.8.3)
typescript: 5.8.3
transitivePeerDependencies:
@@ -2233,13 +2536,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.35.1(eslint@9.30.0)(typescript@5.8.3)':
+ '@typescript-eslint/utils@8.35.1(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0)
+ '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.6.1))
'@typescript-eslint/scope-manager': 8.35.1
'@typescript-eslint/types': 8.35.1
'@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3)
- eslint: 9.30.0
+ eslint: 9.30.0(jiti@2.6.1)
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
@@ -2562,8 +2865,7 @@ snapshots:
detect-libc@2.0.2: {}
- detect-libc@2.0.4:
- optional: true
+ detect-libc@2.0.4: {}
doctrine@2.1.0:
dependencies:
@@ -2581,6 +2883,11 @@ snapshots:
emoji-regex@9.2.2: {}
+ enhanced-resolve@5.18.3:
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.3.0
+
es-abstract@1.24.0:
dependencies:
array-buffer-byte-length: 1.0.2
@@ -2686,19 +2993,19 @@ snapshots:
escape-string-regexp@4.0.0: {}
- eslint-config-next@15.3.4(eslint@9.30.0)(typescript@5.8.3):
+ eslint-config-next@15.3.4(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3):
dependencies:
'@next/eslint-plugin-next': 15.3.4
'@rushstack/eslint-patch': 1.12.0
- '@typescript-eslint/eslint-plugin': 8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(typescript@5.8.3)
- '@typescript-eslint/parser': 8.35.1(eslint@9.30.0)(typescript@5.8.3)
- eslint: 9.30.0
+ '@typescript-eslint/eslint-plugin': 8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)
+ '@typescript-eslint/parser': 8.35.1(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)
+ eslint: 9.30.0(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.30.0)
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.35.1(eslint@9.30.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.0)
- eslint-plugin-jsx-a11y: 6.10.2(eslint@9.30.0)
- eslint-plugin-react: 7.37.5(eslint@9.30.0)
- eslint-plugin-react-hooks: 5.2.0(eslint@9.30.0)
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.30.0(jiti@2.6.1))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.35.1(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.0(jiti@2.6.1))
+ eslint-plugin-jsx-a11y: 6.10.2(eslint@9.30.0(jiti@2.6.1))
+ eslint-plugin-react: 7.37.5(eslint@9.30.0(jiti@2.6.1))
+ eslint-plugin-react-hooks: 5.2.0(eslint@9.30.0(jiti@2.6.1))
optionalDependencies:
typescript: 5.8.3
transitivePeerDependencies:
@@ -2714,33 +3021,33 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.30.0):
+ eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.30.0(jiti@2.6.1)):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.4.1
- eslint: 9.30.0
+ eslint: 9.30.0(jiti@2.6.1)
get-tsconfig: 4.10.1
is-bun-module: 2.0.0
stable-hash: 0.0.5
tinyglobby: 0.2.14
unrs-resolver: 1.9.2
optionalDependencies:
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.35.1(eslint@9.30.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.0)
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.35.1(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.0(jiti@2.6.1))
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.35.1(eslint@9.30.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.0):
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@8.35.1(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.0(jiti@2.6.1)):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 8.35.1(eslint@9.30.0)(typescript@5.8.3)
- eslint: 9.30.0
+ '@typescript-eslint/parser': 8.35.1(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)
+ eslint: 9.30.0(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.30.0)
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.30.0(jiti@2.6.1))
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.35.1(eslint@9.30.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.0):
+ eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.35.1(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.0(jiti@2.6.1)):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.9
@@ -2749,9 +3056,9 @@ snapshots:
array.prototype.flatmap: 1.3.3
debug: 3.2.7
doctrine: 2.1.0
- eslint: 9.30.0
+ eslint: 9.30.0(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.35.1(eslint@9.30.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.0)
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.35.1(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.0(jiti@2.6.1))
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -2763,13 +3070,13 @@ snapshots:
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.35.1(eslint@9.30.0)(typescript@5.8.3)
+ '@typescript-eslint/parser': 8.35.1(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-jsx-a11y@6.10.2(eslint@9.30.0):
+ eslint-plugin-jsx-a11y@6.10.2(eslint@9.30.0(jiti@2.6.1)):
dependencies:
aria-query: 5.3.2
array-includes: 3.1.9
@@ -2779,7 +3086,7 @@ snapshots:
axobject-query: 4.1.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
- eslint: 9.30.0
+ eslint: 9.30.0(jiti@2.6.1)
hasown: 2.0.2
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
@@ -2788,11 +3095,11 @@ snapshots:
safe-regex-test: 1.1.0
string.prototype.includes: 2.0.1
- eslint-plugin-react-hooks@5.2.0(eslint@9.30.0):
+ eslint-plugin-react-hooks@5.2.0(eslint@9.30.0(jiti@2.6.1)):
dependencies:
- eslint: 9.30.0
+ eslint: 9.30.0(jiti@2.6.1)
- eslint-plugin-react@7.37.5(eslint@9.30.0):
+ eslint-plugin-react@7.37.5(eslint@9.30.0(jiti@2.6.1)):
dependencies:
array-includes: 3.1.9
array.prototype.findlast: 1.2.5
@@ -2800,7 +3107,7 @@ snapshots:
array.prototype.tosorted: 1.1.4
doctrine: 2.1.0
es-iterator-helpers: 1.2.1
- eslint: 9.30.0
+ eslint: 9.30.0(jiti@2.6.1)
estraverse: 5.3.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
@@ -2823,9 +3130,9 @@ snapshots:
eslint-visitor-keys@4.2.1: {}
- eslint@9.30.0:
+ eslint@9.30.0(jiti@2.6.1):
dependencies:
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0)
+ '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.6.1))
'@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.21.0
'@eslint/config-helpers': 0.3.0
@@ -2860,6 +3167,8 @@ snapshots:
minimatch: 3.1.2
natural-compare: 1.4.0
optionator: 0.9.4
+ optionalDependencies:
+ jiti: 2.6.1
transitivePeerDependencies:
- supports-color
@@ -3009,6 +3318,8 @@ snapshots:
gopd@1.2.0: {}
+ graceful-fs@4.2.11: {}
+
graphemer@1.4.0: {}
has-bigints@1.1.0: {}
@@ -3179,6 +3490,8 @@ snapshots:
has-symbols: 1.1.0
set-function-name: 2.0.2
+ jiti@2.6.1: {}
+
js-base64@3.7.8: {}
js-tokens@4.0.0: {}
@@ -3234,6 +3547,55 @@ snapshots:
'@libsql/linux-x64-musl': 0.5.22
'@libsql/win32-x64-msvc': 0.5.22
+ lightningcss-android-arm64@1.30.2:
+ optional: true
+
+ lightningcss-darwin-arm64@1.30.2:
+ optional: true
+
+ lightningcss-darwin-x64@1.30.2:
+ optional: true
+
+ lightningcss-freebsd-x64@1.30.2:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.30.2:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.30.2:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.30.2:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.30.2:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.30.2:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.30.2:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.30.2:
+ optional: true
+
+ lightningcss@1.30.2:
+ dependencies:
+ detect-libc: 2.0.4
+ optionalDependencies:
+ lightningcss-android-arm64: 1.30.2
+ lightningcss-darwin-arm64: 1.30.2
+ lightningcss-darwin-x64: 1.30.2
+ lightningcss-freebsd-x64: 1.30.2
+ lightningcss-linux-arm-gnueabihf: 1.30.2
+ lightningcss-linux-arm64-gnu: 1.30.2
+ lightningcss-linux-arm64-musl: 1.30.2
+ lightningcss-linux-x64-gnu: 1.30.2
+ lightningcss-linux-x64-musl: 1.30.2
+ lightningcss-win32-arm64-msvc: 1.30.2
+ lightningcss-win32-x64-msvc: 1.30.2
+
linebreak@1.1.0:
dependencies:
base64-js: 0.0.8
@@ -3249,6 +3611,10 @@ snapshots:
dependencies:
js-tokens: 4.0.0
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
math-intrinsics@1.1.0: {}
merge2@1.4.1: {}
@@ -3411,6 +3777,12 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
+ postcss@8.5.6:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
prelude-ls@1.2.1: {}
process@0.11.10: {}
@@ -3685,6 +4057,10 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
+ tailwindcss@4.1.17: {}
+
+ tapable@2.3.0: {}
+
tiny-inflate@1.0.3: {}
tinyglobby@0.2.14:
diff --git a/middleware/postcss.config.mjs b/middleware/postcss.config.mjs
new file mode 100644
index 0000000..d5744c4
--- /dev/null
+++ b/middleware/postcss.config.mjs
@@ -0,0 +1,8 @@
+/** @type {import('postcss-load-config').Config} */
+const config = {
+ plugins: {
+ '@tailwindcss/postcss': {},
+ },
+}
+
+export default config \ No newline at end of file
diff --git a/middleware/src/app/[gameName]/page.tsx b/middleware/src/app/[gameName]/page.tsx
index f87edc1..ed5361a 100644
--- a/middleware/src/app/[gameName]/page.tsx
+++ b/middleware/src/app/[gameName]/page.tsx
@@ -91,7 +91,7 @@ export async function generateMetadata({
const images = imagesResult.rows.map((img) => ({
image: img.image_url,
link: img.link_url,
- }));
+ }));
const dbPost = {
news_id: row.news_id,
date: row.date,
@@ -356,92 +356,36 @@ function NewsPostPage({
: null;
return (
- <main
- style={{
- minHeight: "100vh",
- color: "white",
- fontFamily: "system-ui, -apple-system, sans-serif",
- }}
- >
- <div style={{
- width: '100%',
- maxWidth: '600px',
- margin: '0 auto',
- padding: '10px',
- paddingTop: '20px',
- paddingBottom: '20px',
- boxSizing: 'border-box'
- }}>
- <div style={{
- backgroundColor: '#1e293b',
- border: '1px solid #334155',
- borderRadius: '8px',
- boxShadow: '0 10px 20px -5px rgba(0, 0, 0, 0.3)',
- overflow: 'hidden',
- width: '100%',
- boxSizing: 'border-box'
- }}>
+ <main className="min-h-screen text-white font-sans bg-black">
+ <div className="w-full max-w-xl mx-auto px-3 sm:px-4 py-5 box-border">
+ <div className="w-full bg-slate-800 border border-slate-700 rounded-lg shadow-xl shadow-black/30 overflow-hidden box-border">
{/* Post Header */}
- <div style={{
- padding: '12px',
- borderBottom: '1px solid #475569'
- }}>
- <div style={{
- fontSize: '13px',
- opacity: 0.8,
- marginBottom: '6px',
- color: '#94a3b8'
- }}>
+ <div className="p-3 border-b border-slate-600">
+ <div className="text-[13px] text-slate-400/80 mb-1.5">
{date}
</div>
{newsPost.type && (
- <div style={{
- fontSize: '12px',
- fontStyle: 'italic',
- opacity: 0.8,
- color: '#64748b',
- backgroundColor: '#334155',
- padding: '3px 6px',
- borderRadius: '3px',
- display: 'inline-block'
- }}>
+ <div className="inline-block text-[12px] italic text-slate-400 bg-slate-700 px-1.5 py-0.5 rounded">
{newsPost.type}
</div>
)}
</div>
{/* Content */}
- <div style={{
- padding: '12px',
- minHeight: '120px'
- }}>
+ <div className="p-3 min-h-[120px]">
{displayHeadline && (
- <h2 style={{
- fontWeight: '700',
- fontSize: '16px',
- marginBottom: '12px',
- margin: '0 0 12px 0',
- lineHeight: '1.3',
- color: '#f1f5f9',
- wordWrap: 'break-word',
- overflowWrap: 'break-word'
- }}>
+ <h2 className="font-bold text-base sm:text-lg mb-3 leading-snug text-slate-50 break-words">
{displayHeadline}
</h2>
)}
- <div style={{
- fontSize: '13px',
- whiteSpace: 'pre-line',
- marginBottom: '12px',
- margin: '0 0 12px 0',
- lineHeight: '1.5',
- color: '#e2e8f0'
- }}>
+
+ <div className="text-[13px] sm:text-sm whitespace-pre-line mb-3 leading-relaxed text-slate-200">
{displayContent
.split(/(\[.*?\]\(.*?\)|https?:\/\/[^\s]+)/g)
.map((part, idx) => {
const linkMatch = part.match(/\[(.*?)\]\((.*?)\)/);
const urlMatch = part.match(/https?:\/\/[^\s]+/);
+
if (linkMatch) {
return (
<Link
@@ -449,17 +393,13 @@ function NewsPostPage({
href={linkMatch[2]}
target="_blank"
rel="noopener noreferrer"
- style={{
- color: "#60a5fa",
- textDecoration: "underline",
- textDecorationColor: "#3b82f6",
- fontWeight: "500",
- }}
+ className="text-sky-400 underline decoration-blue-500 underline-offset-2 font-medium"
>
{linkMatch[1]}
</Link>
);
}
+
if (urlMatch) {
return (
<Link
@@ -467,94 +407,55 @@ function NewsPostPage({
href={urlMatch[0]}
target="_blank"
rel="noopener noreferrer"
- style={{
- color: "#60a5fa",
- textDecoration: "underline",
- textDecorationColor: "#3b82f6",
- fontWeight: "500",
- }}
+ className="text-sky-400 underline decoration-blue-500 underline-offset-2 font-medium"
>
{urlMatch[0]}
</Link>
);
}
- return part;
+
+ return (
+ <span key={idx}>
+ {part}
+ </span>
+ );
})}
</div>
</div>
{/* AI Disclaimer */}
{newsPost.is_ai_summary && (
- <div
- style={{
- backgroundColor: "#475569",
- padding: "10px 16px",
- fontSize: "12px",
- textAlign: "center",
- color: "#cbd5e1",
- }}
- >
+ <div className="bg-slate-600 px-4 py-2.5 text-[12px] text-center text-slate-300">
This content was generated using AI and may contain inaccuracies
</div>
)}
{/* Machine Translation Disclaimer */}
{(newsPost.en_headline || newsPost.en_content) && lang === "en" && (
- <div
- style={{
- backgroundColor: "#475569",
- padding: "10px 16px",
- fontSize: "12px",
- textAlign: "center",
- color: "#cbd5e1",
- }}
- >
+ <div className="bg-slate-600 px-4 py-2.5 text-[12px] text-center text-slate-300">
This is a machine translation and may contain errors
</div>
)}
{/* Images */}
{newsPost.images && newsPost.images.length > 0 && (
- <div
- style={{
- width: "100%",
- overflow: "hidden",
- }}
- >
+ <div className="w-full overflow-hidden">
<img
src={newsPost.images[0].image}
alt="News visual"
- style={{
- width: "100%",
- height: "auto",
- maxHeight: "400px",
- objectFit: "contain",
- display: "block",
- }}
+ className="w-full h-auto max-h-[400px] object-contain block"
/>
</div>
)}
{/* Read More Link */}
{newsPost.url && (
- <div
- style={{
- backgroundColor: "#475569",
- padding: "12px 16px",
- textAlign: "center",
- }}
- >
+ <div className="bg-slate-600 px-4 py-3 text-center">
<Link
href={newsPost.url}
target="_blank"
rel="noopener noreferrer"
- style={{
- fontSize: "15px",
- textDecoration: "underline",
- textDecorationColor: "#60a5fa",
- fontWeight: "600",
- color: "#60a5fa",
- }}
+ className="text-[15px] font-semibold text-sky-400 underline decoration-sky-400 underline-offset-2"
>
READ MORE
</Link>
@@ -563,29 +464,11 @@ function NewsPostPage({
</div>
{/* About 573 UPDATES */}
- <div style={{
- textAlign: 'center',
- marginTop: '24px',
- marginBottom: '16px',
- padding: '12px',
- backgroundColor: '#334155',
- borderRadius: '6px',
- border: '1px solid #475569'
- }}>
- <h3 style={{
- fontSize: '15px',
- fontWeight: '600',
- margin: '0 0 6px 0',
- color: '#f1f5f9'
- }}>
+ <div className="mt-6 mb-4 p-3 text-center bg-slate-700 rounded-md border border-slate-600">
+ <h3 className="text-[15px] font-semibold mb-1.5 text-slate-50">
This is a perma-link hosted on 573 UPDATES
</h3>
- <p style={{
- fontSize: '12px',
- color: '#cbd5e1',
- margin: 0,
- lineHeight: '1.4'
- }}>
+ <p className="text-[12px] text-slate-300 leading-tight">
A news aggregator for some arcade (and some not-so arcade) games.
Image data is loaded from external sources, and as such may not
always be available.
@@ -593,32 +476,10 @@ function NewsPostPage({
</div>
{/* Navigation Buttons */}
- <div style={{
- textAlign: 'center',
- marginTop: '12px',
- display: 'flex',
- flexDirection: 'column',
- gap: '10px',
- alignItems: 'center'
- }}>
+ <div className="mt-3 flex flex-col items-center gap-2.5 text-center">
<Link
href="/"
- style={{
- display: 'block',
- background: 'linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%)',
- color: 'white',
- padding: '14px 20px',
- borderRadius: '6px',
- textDecoration: 'none',
- fontSize: '14px',
- fontWeight: '600',
- boxShadow: '0 4px 12px rgba(59, 130, 246, 0.3)',
- border: 'none',
- transition: 'all 0.2s ease',
- width: '100%',
- maxWidth: '280px',
- textAlign: 'center'
- }}
+ className="block w-full max-w-xs bg-gradient-to-br from-blue-500 to-blue-700 text-white px-5 py-3.5 rounded-md text-sm font-semibold shadow-md shadow-blue-500/30 no-underline border-0 transition-all duration-200 text-center hover:brightness-110 active:translate-y-px"
>
Back to 573 UPDATES
</Link>
diff --git a/middleware/src/app/globals.css b/middleware/src/app/globals.css
index ff7d975..a461c50 100644
--- a/middleware/src/app/globals.css
+++ b/middleware/src/app/globals.css
@@ -1,72 +1 @@
-:root {
- --dark-bg: #000000;
- --text-primary: #ffffff;
- --text-secondary: #888888;
- --accent: #666666;
-}
-
-* {
- box-sizing: border-box;
- padding: 0;
- margin: 0;
-}
-
-html,
-body {
- height: 100%;
- overflow: hidden;
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
-}
-
-body {
- background: var(--dark-bg);
- color: var(--text-primary);
- display: flex;
- align-items: center;
- justify-content: center;
-}
-
-/* Main container */
-.main {
- width: 100%;
- height: 100vh;
- display: flex;
- align-items: center;
- justify-content: center;
-}
-
-.content-wrapper {
- text-align: center;
-}
-
-.title {
- font-size: 3rem;
- font-weight: 300;
- letter-spacing: 0.5rem;
- margin-bottom: 3rem;
- color: var(--text-primary);
-}
-
-.redirect-link {
- color: var(--text-secondary);
- font-size: 2rem;
- text-decoration: none;
- transition: color 0.3s ease;
- letter-spacing: 0.1rem;
-}
-
-.redirect-link:hover {
- color: var(--text-primary);
-}
-
-/* Responsive */
-@media (max-width: 768px) {
- .title {
- font-size: 2rem;
- letter-spacing: 0.3rem;
- }
-
- .redirect-link {
- font-size: 0.75rem;
- }
-}
+@import "tailwindcss"; \ No newline at end of file
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage