From d713d2c4a76dc067ec634c0b6aa550a083cb6fe4 Mon Sep 17 00:00:00 2001 From: gahusb Date: Thu, 22 Jan 2026 20:34:28 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9B=B9=20=ED=8E=98=EC=9D=B4=EC=A7=80=20?= =?UTF-8?q?=ED=94=84=EB=A1=A0=ED=8A=B8=EC=97=94=EB=93=9C=20UI=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=20-=20=EB=AA=A8=EB=B0=94=EC=9D=BC=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EB=B4=A4=EC=9D=84=20=EB=95=8C=20UI/UX=20=EC=9D=B4?= =?UTF-8?q?=EC=83=81=ED=95=98=EA=B3=A0=20=EB=B6=88=ED=8E=B8=ED=96=88?= =?UTF-8?q?=EB=8D=98=20=EB=B6=80=EB=B6=84=20=EC=88=98=EC=A0=95=20=20-=20?= =?UTF-8?q?=EB=B8=94=EB=A1=9C=EA=B7=B8=20=EA=B8=80=20=EB=AA=A8=EB=B0=94?= =?UTF-8?q?=EC=9D=BC=20=ED=81=AC=EA=B8=B0=20=EC=8B=9C=20=EB=A6=AC=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=95=84=EB=9E=98=EB=A1=9C=20=EA=B8=80=EC=9D=B4=20?= =?UTF-8?q?=EB=82=B4=EB=A0=A4=EA=B0=80=EB=8A=94=20=EB=B6=80=EB=B6=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=20-=20=EC=A0=84=EC=B2=B4=20=EB=B0=B0?= =?UTF-8?q?=EA=B2=BD=20=EC=9D=B4=EC=96=B4=20=EB=B6=99=EC=9D=B4=EA=B8=B0?= =?UTF-8?q?=EA=B0=80=20=EC=95=84=EB=8B=8C=20=EA=B3=A0=EC=A0=95=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=8A=A4=ED=81=AC=EB=A1=A4=20=EC=8B=9C=EC=97=90?= =?UTF-8?q?=EB=8F=84=20=EC=96=B4=EC=83=89=ED=95=98=EC=A7=80=20=EC=95=8A?= =?UTF-8?q?=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 12 +-- src/App.css | 6 ++ src/components/Navbar.css | 33 ++++++++ src/index.css | 12 ++- src/pages/blog/Blog.css | 145 +++++++++++++++++++++++++++++++++++- src/pages/blog/Blog.jsx | 36 ++++++++- src/pages/home/Home.css | 48 ++++++++++++ src/pages/home/Home.jsx | 3 +- src/pages/lotto/Lotto.css | 40 ++++++++++ src/pages/travel/Travel.css | 33 ++++++++ src/pages/travel/Travel.jsx | 37 ++++++++- 11 files changed, 385 insertions(+), 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index a101ddd..a3d48b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,7 +58,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -1525,7 +1524,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1631,7 +1629,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -1853,7 +1850,6 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -2381,8 +2377,7 @@ "version": "1.9.4", "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==", - "license": "BSD-2-Clause", - "peer": true + "license": "BSD-2-Clause" }, "node_modules/levn": { "version": "0.4.1", @@ -2636,7 +2631,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -2698,7 +2692,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -2711,7 +2704,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" @@ -3006,7 +2998,6 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -3128,7 +3119,6 @@ "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/src/App.css b/src/App.css index 6002b7c..f1b0b1b 100644 --- a/src/App.css +++ b/src/App.css @@ -20,6 +20,12 @@ padding: 40px 20px 80px; } +@media (max-width: 768px) { + .site-main { + padding: 20px 16px 60px; + } +} + @keyframes fadeUp { from { opacity: 0; diff --git a/src/components/Navbar.css b/src/components/Navbar.css index 04b5753..30b50d7 100644 --- a/src/components/Navbar.css +++ b/src/components/Navbar.css @@ -91,3 +91,36 @@ align-items: flex-start; } } + +@media (max-width: 768px) { + .site-nav__inner { + padding: 14px 16px; + gap: 12px; + } + + .site-nav__brand { + gap: 10px; + } + + .site-nav__logo-image { + width: 36px; + height: 36px; + } + + .site-nav__title { + font-size: 14px; + } + + .site-nav__subtitle { + font-size: 11px; + } + + .site-nav__links { + gap: 8px; + } + + .site-nav__link { + font-size: 13px; + padding: 6px 10px; + } +} diff --git a/src/index.css b/src/index.css index e1cebe2..f7110dd 100644 --- a/src/index.css +++ b/src/index.css @@ -11,13 +11,21 @@ body { body { margin: 0; - background: radial-gradient(1000px 600px at 15% 5%, rgba(247, 168, 165, 0.25), transparent 60%), - radial-gradient(800px 600px at 85% 0%, rgba(253, 212, 177, 0.18), transparent 60%), + background: radial-gradient(2000px 1200px at 15% 5%, rgba(247, 168, 165, 0.25), transparent 70%), + radial-gradient(1600px 1200px at 85% 0%, rgba(253, 212, 177, 0.18), transparent 70%), + radial-gradient(1500px 800px at 50% 50%, rgba(151, 201, 170, 0.1), transparent 80%), #0f0d12; + background-attachment: fixed; color: var(--text); font-family: var(--font-body); } +@media (max-width: 768px) { + body { + background-attachment: scroll; + } +} + a { color: inherit; } diff --git a/src/pages/blog/Blog.css b/src/pages/blog/Blog.css index f6d16f2..3bd5808 100644 --- a/src/pages/blog/Blog.css +++ b/src/pages/blog/Blog.css @@ -53,6 +53,29 @@ align-items: start; } +.blog-toggle-list { + display: none; + position: fixed; + top: 20px; + left: 20px; + z-index: 1000; + width: 40px; + height: 40px; + border-radius: 50%; + border: 1px solid var(--line); + background: rgba(10, 12, 20, 0.8); + color: var(--text); + font-size: 18px; + cursor: pointer; + backdrop-filter: blur(10px); + transition: transform 0.2s ease, opacity 0.2s ease; +} + +.blog-toggle-list:hover { + transform: scale(1.1); + opacity: 0.9; +} + .blog-list { display: grid; gap: 12px; @@ -184,7 +207,10 @@ .blog-article__body h1, .blog-article__body h2, -.blog-article__body h3 { +.blog-article__body h3, +.blog-article__body h4, +.blog-article__body h5, +.blog-article__body h6 { font-family: var(--font-display); margin: 22px 0 10px; } @@ -201,6 +227,18 @@ font-size: 20px; } +.blog-article__body h4 { + font-size: 18px; +} + +.blog-article__body h5 { + font-size: 16px; +} + +.blog-article__body h6 { + font-size: 14px; +} + .md-paragraph { margin: 0 0 14px; color: var(--muted); @@ -220,6 +258,11 @@ font-size: 0.85em; } +.blog-article__body del { + text-decoration: line-through; + opacity: 0.7; +} + .blog-article__body a { color: #f7d4c9; } @@ -325,4 +368,104 @@ .blog-grid { grid-template-columns: 1fr; } + + .blog-toggle-list { + display: block; + } + + .blog-list { + display: none; + } + + .blog-list.is-visible { + display: block; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(6, 8, 12, 0.7); + z-index: 999; + padding: 80px 20px 20px; + overflow-y: auto; + backdrop-filter: blur(10px); + display: flex; + flex-direction: column; + gap: 16px; + } + + .blog-list.is-visible .blog-category-filter { + margin-bottom: 8px; + } + + .blog-list.is-visible .blog-pagination { + margin-top: 8px; + } + + .blog-article { + width: 100%; + } +} + +@media (max-width: 768px) { + .blog-header h1 { + font-size: clamp(24px, 6vw, 32px); + } + + .blog-grid { + gap: 18px; + } + + .blog-list { + gap: 10px; + } + + .blog-list__item { + padding: 14px; + } + + .blog-list__title { + font-size: 15px; + } + + .blog-list__excerpt { + font-size: 12px; + } + + .blog-article { + padding: 18px; + } + + .blog-article__body h1 { + font-size: 24px; + } + + .blog-article__body h2 { + font-size: 20px; + } + + .blog-article__body h3 { + font-size: 18px; + } + + .blog-article__body h4 { + font-size: 16px; + } + + .blog-article__body h5 { + font-size: 14px; + } + + .blog-article__body h6 { + font-size: 12px; + } + + .blog-categories__grid { + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 14px; + } + + .blog-category-card { + padding: 16px; + } } diff --git a/src/pages/blog/Blog.jsx b/src/pages/blog/Blog.jsx index 7651ce8..70b77f4 100644 --- a/src/pages/blog/Blog.jsx +++ b/src/pages/blog/Blog.jsx @@ -5,7 +5,7 @@ import './Blog.css'; const renderInline = (text) => { const normalized = text.replace(//gi, '\n'); const pattern = - /(!\[[^\]]*\]\([^)]+\)|\[[^\]]+\]\([^)]+\)|\*\*[^*]+\*\*|\*[^*]+\*|`[^`]+`)/g; + /(!\[[^\]]*\]\([^)]+\)|\[[^\]]+\]\([^)]+\)|\*\*[^*]+\*\*|\*[^*]+\*|~~[^~]+~~|`[^`]+`)/g; const segments = normalized.split('\n'); return segments.flatMap((segment, segmentIndex) => { @@ -48,6 +48,9 @@ const renderInline = (text) => { if (part.startsWith('*')) { return {part.replace(/\*/g, '')}; } + if (part.startsWith('~~')) { + return {part.replace(/~~/g, '')}; + } if (part.startsWith('`')) { return {part.replace(/`/g, '')}; } @@ -123,6 +126,18 @@ const renderMarkdown = (body) => { return; } + if (line.startsWith('###### ')) { + blocks.push({ type: 'h6', value: line.replace(/^######\s+/, '') }); + return; + } + if (line.startsWith('##### ')) { + blocks.push({ type: 'h5', value: line.replace(/^#####\s+/, '') }); + return; + } + if (line.startsWith('#### ')) { + blocks.push({ type: 'h4', value: line.replace(/^####\s+/, '') }); + return; + } if (line.startsWith('### ')) { blocks.push({ type: 'h3', value: line.replace(/^###\s+/, '') }); return; @@ -146,6 +161,9 @@ const renderMarkdown = (body) => { if (block.type === 'h1') return

{block.value}

; if (block.type === 'h2') return

{block.value}

; if (block.type === 'h3') return

{block.value}

; + if (block.type === 'h4') return

{block.value}

; + if (block.type === 'h5') return
{block.value}
; + if (block.type === 'h6') return
{block.value}
; if (block.type === 'list') return (