From e992d8cbe7706469c85b9f0e3c345cc2d761e99d Mon Sep 17 00:00:00 2001 From: Snowflake Date: Wed, 8 Jul 2026 16:19:33 +0800 Subject: [PATCH] Switch to warm minimal theme: linen texture, muted warm tones, add service links (Gitea/Cloudreve/MC) --- content/res/_index.md | 2 +- content/res/filelist.md | 2 +- content/softwares/_index.md | 2 +- content/softwares/btcli.md | 2 +- content/softwares/minesentinel.md | 2 +- content/softwares/mint.md | 2 +- content/softwares/reverberation.md | 2 +- content/xaguarder/_index.md | 2 +- content/xaguarder/warning.md | 2 +- data/projects.toml | 8 +- data/subjects.toml | 18 +- hugo.toml | 13 +- layouts/index.html | 57 +++- layouts/res/filelist.html | 2 +- layouts/res/list.html | 2 +- layouts/softwares/list.html | 2 +- layouts/xaguarder/list.html | 2 +- layouts/xaguarder/warning.html | 2 +- static/css/style.css | 517 +++++++++++------------------ static/js/stars.js | 68 ---- static/logo.svg | 60 ++-- 21 files changed, 300 insertions(+), 469 deletions(-) delete mode 100644 static/js/stars.js diff --git a/content/res/_index.md b/content/res/_index.md index fea4b46..2ceb180 100644 --- a/content/res/_index.md +++ b/content/res/_index.md @@ -1,7 +1,7 @@ --- title: "ISS 资源下载" description: "一班 · 自学支持 · 资源下载" -accent: "#1565c0" +accent: "#7a7a9e" --- 帮助学生查漏补缺、习题重练、预习复习。所有资源仅供自学使用。 diff --git a/content/res/filelist.md b/content/res/filelist.md index 8c1009b..b4ac8a3 100644 --- a/content/res/filelist.md +++ b/content/res/filelist.md @@ -1,6 +1,6 @@ --- title: "文件列表" description: "学科资源文件列表" -accent: "#1565c0" +accent: "#7a7a9e" layout: "filelist" --- diff --git a/content/softwares/_index.md b/content/softwares/_index.md index f1d0419..656750b 100644 --- a/content/softwares/_index.md +++ b/content/softwares/_index.md @@ -1,5 +1,5 @@ --- title: "我的作品" description: "S.A. 的开源项目与作品展示" -accent: "#009688" +accent: "#8a9a7e" --- diff --git a/content/softwares/btcli.md b/content/softwares/btcli.md index 9270be9..968b51d 100644 --- a/content/softwares/btcli.md +++ b/content/softwares/btcli.md @@ -1,7 +1,7 @@ --- title: "btcli" description: "命令行翻译工具,配备 TUI 界面" -accent: "#ff8f00" +accent: "#c8a87a" slug: "btcli" layout: "software-detail" project: "btcli" diff --git a/content/softwares/minesentinel.md b/content/softwares/minesentinel.md index 0c64dcb..05cc625 100644 --- a/content/softwares/minesentinel.md +++ b/content/softwares/minesentinel.md @@ -1,7 +1,7 @@ --- title: "MineSentinel" description: "Minecraft 服务器智能守护进程" -accent: "#00bcd4" +accent: "#7a9a6e" slug: "minesentinel" layout: "software-detail" project: "minesentinel" diff --git a/content/softwares/mint.md b/content/softwares/mint.md index 8f2b189..1747560 100644 --- a/content/softwares/mint.md +++ b/content/softwares/mint.md @@ -1,7 +1,7 @@ --- title: "Mint Runtime" description: "安全特性驱动的 Lua 运行时" -accent: "#7c4dff" +accent: "#a890b8" slug: "mint" layout: "software-detail" project: "mint" diff --git a/content/softwares/reverberation.md b/content/softwares/reverberation.md index 6f3f8fa..d0354a1 100644 --- a/content/softwares/reverberation.md +++ b/content/softwares/reverberation.md @@ -1,7 +1,7 @@ --- title: "Reverberation" description: "轻量级文本阅读器" -accent: "#607d8b" +accent: "#8a9a7e" slug: "reverberation" layout: "software-detail" project: "reverberation" diff --git a/content/xaguarder/_index.md b/content/xaguarder/_index.md index c093618..9fa6e04 100644 --- a/content/xaguarder/_index.md +++ b/content/xaguarder/_index.md @@ -1,5 +1,5 @@ --- title: "XAGuarder" description: "网站安全拦截服务" -accent: "#f44336" +accent: "#b87070" --- diff --git a/content/xaguarder/warning.md b/content/xaguarder/warning.md index b179ab4..3030fce 100644 --- a/content/xaguarder/warning.md +++ b/content/xaguarder/warning.md @@ -2,5 +2,5 @@ title: "XA Defended!" description: "XAGuarder 拦截警告页面" layout: "warning" -accent: "#f44336" +accent: "#b87070" --- diff --git a/data/projects.toml b/data/projects.toml index fca9b7e..6f7536f 100644 --- a/data/projects.toml +++ b/data/projects.toml @@ -2,7 +2,7 @@ name = "MineSentinel" slug = "minesentinel" description = "Minecraft 服务器智能守护进程,TCP 端口检测 + 崩溃自动重启 + 防循环冷却期" -accent = "#00bcd4" +accent = "#7a9a6e" repo_url = "https://gitee.com/snoware/minesentinel" demo_url = "/softwares/minesentinel/" doc_url = "https://gitee.com/snoware/minesentinel/blob/master/DEPLOY.md" @@ -23,7 +23,7 @@ author = "S.A. (@snoware)" name = "btcli" slug = "btcli" description = "一款命令行翻译工具,支持中文及其他语言,配备 TUI 界面" -accent = "#ff8f00" +accent = "#c8a87a" repo_url = "https://gitee.com/ironbayberry/btcli" demo_url = "/softwares/btcli/" doc_url = "https://docs.rs/btcli" @@ -50,7 +50,7 @@ has_drag_ball = true name = "Reverberation" slug = "reverberation" description = "轻量级文本阅读器,逐字显示文本内容" -accent = "#607d8b" +accent = "#8a9a7e" repo_url = "https://gitee.com/ironbayberry/reverberation" demo_url = "/softwares/reverberation/" doc_url = "https://docs.rs/reverberation" @@ -73,7 +73,7 @@ author = "S.A. (@snoware)" name = "Mint Runtime" slug = "mint" description = "安全特性驱动的 Lua 运行时,支持 i18n、字节码验证与细粒度访问控制" -accent = "#7c4dff" +accent = "#a890b8" repo_url = "https://gitee.com/snoware/mint" demo_url = "/softwares/mint/" doc_url = "https://docs.rs/mintrt" diff --git a/data/subjects.toml b/data/subjects.toml index 7ae9d30..dfaf992 100644 --- a/data/subjects.toml +++ b/data/subjects.toml @@ -2,52 +2,52 @@ name = "语文" password = "d1iq" url = "https://snowcloud.lanzoum.com/b0zkfchxi" -color = "#e91e63" +color = "#c89a6e" [[subjects]] name = "数学" password = "6rp9" url = "https://snowcloud.lanzoum.com/b0zkf9u4j" -color = "#2196f3" +color = "#8a9a7e" [[subjects]] name = "英语" password = "4wxy" url = "https://snowcloud.lanzoum.com/b0zkfchyj" -color = "#4caf50" +color = "#a890b8" [[subjects]] name = "物理" password = "4n48" url = "https://snowcloud.lanzoum.com/b0zkf9u5a" -color = "#ff9800" +color = "#c8a87a" [[subjects]] name = "化学" password = "kc1b" url = "https://snowcloud.lanzoum.com/b0zkf9tyd" -color = "#9c27b0" +color = "#b87070" [[subjects]] name = "生物" password = "dn3m" url = "https://snowcloud.lanzoum.com/b0zkf9u0f" -color = "#00bcd4" +color = "#7a9a6e" [[subjects]] name = "政治" password = "4xej" url = "https://snowcloud.lanzoum.com/b0zkf9u6b" -color = "#f44336" +color = "#a08060" [[subjects]] name = "历史" password = "i757" url = "https://snowcloud.lanzoum.com/b0zkf9u3i" -color = "#795548" +color = "#7e6858" [[subjects]] name = "地理" password = "dwrz" url = "https://snowcloud.lanzoum.com/b0zkf9u2h" -color = "#009688" +color = "#6a8a78" diff --git a/hugo.toml b/hugo.toml index 3f8b131..846b595 100644 --- a/hugo.toml +++ b/hugo.toml @@ -8,10 +8,15 @@ copyright = '© 2026 S.A. | SNOWARE' description = 'SNOWARE — S.A. 个人站点' logo = '/logo.svg' navLinks = [ - { name = '资源下载', url = '/res/', icon = 'download' }, - { name = '我的作品', url = '/softwares/', icon = 'code' }, - { name = 'B站空间', url = 'https://bilibili.com/1875249243', icon = 'play', external = true }, - { name = 'XAGuarder', url = '/xaguarder/', icon = 'shield' } + { name = '资源下载', url = '/res/' }, + { name = '我的作品', url = '/softwares/' }, + { name = 'B站空间', url = 'https://bilibili.com/1875249243', external = true }, + { name = 'XAGuarder', url = '/xaguarder/' } + ] + services = [ + { name = 'Gitea', url = 'http://103.217.186.98:3000/', icon = 'git', desc = '代码仓库' }, + { name = 'Cloudreve', url = 'http://103.217.186.98:5212/home', icon = 'cloud', desc = '云存储' }, + { name = 'Minecraft Server', url = '', icon = 'game', desc = 'QQ 758522192 注明来意' } ] [markup.goldmark.renderer] diff --git a/layouts/index.html b/layouts/index.html index fa52cef..2c888e9 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -1,22 +1,43 @@ {{ define "body" }} -
- -
-
- -
-

SNOWARE

- +
+
+
+

SNOWARE

+

冷静而温馨,简约而不简单。

+ + + {{ with .Site.Params.services }} + + {{ end }}
{{ end }} - -{{ define "extra_scripts" }} - -{{ end }} diff --git a/layouts/res/filelist.html b/layouts/res/filelist.html index 8efd8a4..35d1682 100644 --- a/layouts/res/filelist.html +++ b/layouts/res/filelist.html @@ -1,5 +1,5 @@ {{ define "body" }} -
+

学科资源列表

蓝奏云下载 · 点击学科即可跳转

diff --git a/layouts/res/list.html b/layouts/res/list.html index 5f0a9bc..ef4e82a 100644 --- a/layouts/res/list.html +++ b/layouts/res/list.html @@ -1,5 +1,5 @@ {{ define "body" }} -
+

{{ .Title }}

{{ .Description }}

diff --git a/layouts/softwares/list.html b/layouts/softwares/list.html index 00347cc..8c254b0 100644 --- a/layouts/softwares/list.html +++ b/layouts/softwares/list.html @@ -1,5 +1,5 @@ {{ define "body" }} -
+

{{ .Title }}

{{ .Description }}

diff --git a/layouts/xaguarder/list.html b/layouts/xaguarder/list.html index 68beb8b..27d5399 100644 --- a/layouts/xaguarder/list.html +++ b/layouts/xaguarder/list.html @@ -1,5 +1,5 @@ {{ define "body" }} -
+

{{ .Title }}

{{ .Description }}

diff --git a/layouts/xaguarder/warning.html b/layouts/xaguarder/warning.html index 8972a3c..f7ac101 100644 --- a/layouts/xaguarder/warning.html +++ b/layouts/xaguarder/warning.html @@ -12,6 +12,6 @@ {{ define "extra_head" }} {{ end }} diff --git a/static/css/style.css b/static/css/style.css index 16820ef..c4dfbd8 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -1,452 +1,337 @@ -/* ===== SNOWARE Unified Dark Theme ===== */ +/* ===== SNOWARE — Minimal Warm Theme ===== */ :root { - --bg-deep: #060612; - --bg-card: rgba(15, 25, 55, 0.6); - --bg-glass: rgba(20, 35, 70, 0.35); - --accent: #4fc3f7; - --accent-alt: #7c4dff; - --text: #e8eaf6; - --text-muted: #90a4ae; - --radius: 12px; + --bg: #1c1b19; + --bg-soft: #262422; + --bg-card: #2e2c2a; + --accent: #c8a87a; + --accent-warm: #e8c9a0; + --accent-cool: #8a9a7e; + --text: #e0d8c8; + --text-muted: #9e9585; + --text-dim: #6b6358; + --border: rgba(200,168,122,0.12); + --border-hover: rgba(200,168,122,0.28); + --radius: 10px; --font: 'Segoe UI', system-ui, -apple-system, sans-serif; - --transition: 0.3s ease; + --mono: 'Cascadia Code', 'Fira Code', monospace; + --transition: 0.25s ease; } *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } - html { scroll-behavior: smooth; } body { font-family: var(--font); - background: var(--bg-deep); + background: var(--bg); color: var(--text); min-height: 100vh; display: flex; flex-direction: column; - line-height: 1.6; + line-height: 1.7; + /* Warm linen texture via subtle noise */ + background-image: + url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.03'/%3E%3C/svg%3E"); + background-repeat: repeat; + background-size: 256px 256px; } -.container { max-width: 960px; margin: 0 auto; padding: 0 24px; } +.container { max-width: 920px; margin: 0 auto; padding: 0 24px; } /* ===== Navigation ===== */ .site-nav { - position: sticky; - top: 0; - z-index: 100; - background: rgba(6, 6, 18, 0.85); - backdrop-filter: blur(12px); - border-bottom: 1px solid rgba(79, 195, 247, 0.1); - padding: 12px 0; -} -.nav-inner { - display: flex; - align-items: center; - justify-content: space-between; + position: sticky; top: 0; z-index: 100; + background: rgba(28,27,25,0.92); + backdrop-filter: blur(14px); + border-bottom: 1px solid var(--border); + padding: 10px 0; } +.nav-inner { display: flex; align-items: center; justify-content: space-between; } .nav-brand { - display: flex; - align-items: center; - gap: 10px; - color: var(--text); - font-weight: 700; - font-size: 18px; - text-decoration: none; + display: flex; align-items: center; gap: 10px; + color: var(--text); font-weight: 700; font-size: 17px; text-decoration: none; } -.nav-logo { border-radius: 50%; } -.nav-links { display: flex; gap: 20px; } +.nav-brand img { border-radius: 50%; } +.nav-links { display: flex; gap: 22px; } .nav-links a { - color: var(--text-muted); - text-decoration: none; - font-size: 14px; - transition: color var(--transition); - position: relative; + color: var(--text-muted); text-decoration: none; font-size: 13.5px; + transition: color var(--transition); position: relative; } -.nav-links a:hover { color: var(--accent); } +.nav-links a:hover { color: var(--accent-warm); } .nav-links a::after { - content: ''; - position: absolute; - bottom: -4px; - left: 0; - width: 0; - height: 2px; - background: var(--accent); + content: ''; position: absolute; bottom: -3px; left: 0; + width: 0; height: 1.5px; background: var(--accent); transition: width var(--transition); } .nav-links a:hover::after { width: 100%; } /* ===== Homepage ===== */ -#star-canvas-wrap { - position: relative; +.home-hero { min-height: 100vh; - display: flex; - align-items: center; - justify-content: center; + display: flex; flex-direction: column; + align-items: center; justify-content: center; + padding: 60px 24px; + gap: 32px; } -#star-canvas { - position: absolute; - inset: 0; - width: 100%; - height: 100%; -} -.home-overlay { - position: relative; - z-index: 2; - text-align: center; - padding: 40px 20px; -} -.logo-wrap { - position: relative; - display: inline-block; - margin-bottom: 20px; -} -.logo-wrap::before { - content: ''; - position: absolute; - inset: -8px; +.home-hero .logo-wrap { text-align: center; } +.home-hero .home-logo { + width: 160px; height: 160px; border-radius: 50%; - background: radial-gradient(circle, rgba(79,195,247,0.25), transparent 70%); -} -.home-logo { - border-radius: 50%; - border: 2px solid rgba(79,195,247,0.5); - background: rgba(15,25,55,0.6); + border: 2px solid rgba(200,168,122,0.3); + background: rgba(46,44,42,0.5); backdrop-filter: blur(8px); } .home-title { - font-size: 48px; - font-weight: 800; - letter-spacing: 8px; - color: var(--accent); - text-shadow: 0 0 30px rgba(79,195,247,0.4), 0 0 60px rgba(79,195,247,0.2); - margin-bottom: 32px; + font-size: 44px; font-weight: 700; letter-spacing: 6px; + color: var(--accent-warm); + margin: 0; } -.home-nav { - display: flex; - flex-wrap: wrap; - gap: 14px; - justify-content: center; +.home-subtitle { + color: var(--text-muted); font-size: 15px; text-align: center; max-width: 420px; } + +/* Homepage nav buttons */ +.home-nav { display: flex; flex-wrap: wrap; gap: 12px; justify-content: center; } .home-btn { - display: inline-block; - padding: 12px 28px; - border-radius: 50px; - background: var(--bg-glass); - border: 1px solid rgba(79,195,247,0.3); - color: var(--text); - text-decoration: none; - font-size: 15px; - font-weight: 500; + padding: 11px 26px; border-radius: 8px; + background: var(--bg-card); border: 1px solid var(--border); + color: var(--text); text-decoration: none; font-size: 14px; font-weight: 500; transition: all var(--transition); - backdrop-filter: blur(8px); } .home-btn:hover { - background: rgba(79,195,247,0.15); - border-color: var(--accent); - transform: translateY(-2px); - box-shadow: 0 4px 20px rgba(79,195,247,0.2); + border-color: var(--border-hover); + background: rgba(200,168,122,0.08); + transform: translateY(-1px); } +/* Services section on homepage */ +.home-services { + margin-top: 48px; + text-align: center; +} +.home-services h2 { + font-size: 15px; color: var(--text-dim); font-weight: 500; + letter-spacing: 2px; text-transform: uppercase; margin-bottom: 20px; +} +.services-grid { + display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; + max-width: 600px; margin: 0 auto; +} +.service-card { + padding: 20px 16px; border-radius: var(--radius); + background: var(--bg-card); border: 1px solid var(--border); + text-decoration: none; color: var(--text); + transition: all var(--transition); + text-align: center; +} +.service-card:hover { + border-color: var(--border-hover); + background: rgba(200,168,122,0.06); +} +.service-icon { + display: flex; justify-content: center; margin-bottom: 10px; +} +.service-icon svg { width: 28px; height: 28px; stroke: var(--accent); fill: none; stroke-width: 1.8; } +.service-card h3 { font-size: 14px; color: var(--accent-warm); margin-bottom: 4px; } +.service-card p { font-size: 12.5px; color: var(--text-muted); } +.service-card.no-link { cursor: default; } +.service-card.no-link:hover { background: var(--bg-card); border-color: var(--border); transform: none; } + /* ===== Page Hero ===== */ .page-hero { - text-align: center; - padding: 80px 24px 40px; - background: linear-gradient(180deg, rgba(6,6,18,0) 0%, rgba(6,6,18,1) 100%); + text-align: center; padding: 72px 24px 36px; } .page-hero h1 { - font-size: 40px; - font-weight: 800; - color: var(--accent); - text-shadow: 0 0 20px color-mix(in srgb, var(--accent) 30%, transparent); - margin-bottom: 8px; -} -.page-hero .subtitle { - color: var(--text-muted); - font-size: 18px; + font-size: 36px; font-weight: 700; + color: var(--accent-warm); margin-bottom: 6px; } +.page-hero .subtitle { color: var(--text-muted); font-size: 16px; } /* ===== Page Content ===== */ -.page-content { padding: 20px 24px 60px; } +.page-content { padding: 16px 24px 60px; } /* ===== Buttons ===== */ .btn { - display: inline-block; - padding: 10px 24px; - border-radius: 8px; - font-size: 15px; - font-weight: 500; - text-decoration: none; - transition: all var(--transition); - cursor: pointer; + display: inline-block; padding: 9px 22px; border-radius: 8px; + font-size: 14px; font-weight: 500; text-decoration: none; + transition: all var(--transition); cursor: pointer; border: 1px solid transparent; } -.btn-primary { - background: var(--accent); - color: #0a0a2e; - border-color: var(--accent); -} -.btn-primary:hover { opacity: 0.85; transform: translateY(-1px); } +.btn-primary { background: var(--accent); color: var(--bg); border-color: var(--accent); } +.btn-primary:hover { background: var(--accent-warm); } .btn-accent { - background: color-mix(in srgb, var(--accent) 20%, var(--bg-card)); - color: var(--accent); - border-color: color-mix(in srgb, var(--accent) 40%, transparent); -} -.btn-accent:hover { background: color-mix(in srgb, var(--accent) 30%, var(--bg-card)); } -.btn-outline { - background: transparent; - color: var(--text-muted); - border-color: rgba(144,164,174,0.3); + background: rgba(200,168,122,0.1); color: var(--accent); + border-color: var(--border-hover); } +.btn-accent:hover { background: rgba(200,168,122,0.18); } +.btn-outline { background: transparent; color: var(--text-muted); border-color: var(--border); } .btn-outline:hover { border-color: var(--text-muted); color: var(--text); } -.btn-lg { padding: 14px 32px; font-size: 17px; } +.btn-lg { padding: 13px 30px; font-size: 16px; } -/* ===== Glass Cards ===== */ -.feature-card { - background: var(--bg-glass); - border: 1px solid rgba(79,195,247,0.1); +/* ===== Cards ===== */ +.card-base { + background: var(--bg-card); + border: 1px solid var(--border); border-radius: var(--radius); - padding: 24px; - text-align: center; - backdrop-filter: blur(8px); - transition: border-color var(--transition); + backdrop-filter: blur(6px); + transition: all var(--transition); } -.feature-card:hover { border-color: rgba(79,195,247,0.3); } -.feature-card h3 { color: var(--accent); margin-bottom: 8px; } -.feature-card p { color: var(--text-muted); font-size: 14px; } -.feature-icon { font-size: 32px; margin-bottom: 12px; } +.card-base:hover { border-color: var(--border-hover); } + +.feature-card { + padding: 22px; text-align: center; +} +.feature-card h3 { color: var(--accent-warm); font-size: 15px; margin-bottom: 6px; } +.feature-card p { color: var(--text-muted); font-size: 13px; } +.feature-icon { font-size: 28px; margin-bottom: 10px; color: var(--accent); } /* ===== Resources Section ===== */ -.res-intro { - text-align: center; - margin-bottom: 32px; -} -.res-intro-text { color: var(--text); font-size: 16px; } -.res-intro-note { color: var(--text-muted); font-size: 14px; margin-top: 8px; } +.res-intro { text-align: center; margin-bottom: 28px; } +.res-intro-text { color: var(--text); font-size: 15px; } .res-actions { - display: flex; - gap: 16px; - justify-content: center; - margin-bottom: 40px; - flex-wrap: wrap; + display: flex; gap: 14px; justify-content: center; + margin-bottom: 36px; flex-wrap: wrap; } .res-features { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 20px; - margin-top: 32px; + display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-top: 28px; } /* ===== File List ===== */ .filelist-grid { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 20px; + display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; } .subject-card { - display: flex; - flex-direction: column; - align-items: center; - gap: 10px; - padding: 28px 20px; - background: var(--bg-glass); - border: 1px solid color-mix(in srgb, var(--color) 25%, transparent); + display: flex; flex-direction: column; align-items: center; gap: 8px; + padding: 24px 16px; + background: var(--bg-card); + border: 1px solid color-mix(in srgb, var(--color) 20%, transparent); border-radius: var(--radius); - text-decoration: none; - color: var(--text); - backdrop-filter: blur(8px); + text-decoration: none; color: var(--text); transition: all var(--transition); } .subject-card:hover { border-color: var(--color); - transform: translateY(-3px); - box-shadow: 0 8px 24px color-mix(in srgb, var(--color) 15%, transparent); + background: color-mix(in srgb, var(--color) 6%, var(--bg-card)); + transform: translateY(-2px); } -.subject-icon { color: var(--color); } -.subject-card h3 { font-size: 18px; } -.subject-pw { font-size: 13px; color: var(--text-muted); } +.subject-icon svg { width: 36px; height: 36px; stroke: var(--color); fill: none; stroke-width: 1.5; } +.subject-card h3 { font-size: 17px; } +.subject-pw { font-size: 12.5px; color: var(--text-muted); } .subject-pw code { - background: rgba(255,255,255,0.08); - padding: 2px 8px; - border-radius: 4px; - color: var(--color); + background: rgba(255,255,255,0.06); padding: 2px 7px; border-radius: 4px; + color: var(--color); font-family: var(--mono); } /* ===== Software Section ===== */ .about-intro { - text-align: center; - margin-bottom: 40px; - padding: 24px; - background: var(--bg-glass); - border-radius: var(--radius); -} -.about-intro p { color: var(--text-muted); margin-bottom: 16px; } -.project-grid { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 24px; + text-align: center; margin-bottom: 36px; padding: 22px; + background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); } +.about-intro p { color: var(--text-muted); margin-bottom: 14px; } +.project-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; } .project-card { - display: flex; - flex-direction: column; - gap: 12px; - padding: 28px; - background: var(--bg-glass); - border: 1px solid color-mix(in srgb, var(--accent) 20%, transparent); + display: flex; flex-direction: column; gap: 10px; padding: 24px; + background: var(--bg-card); + border: 1px solid color-mix(in srgb, var(--accent) 15%, transparent); border-radius: var(--radius); - text-decoration: none; - color: var(--text); - backdrop-filter: blur(8px); + text-decoration: none; color: var(--text); transition: all var(--transition); } .project-card:hover { border-color: var(--accent); - transform: translateY(-3px); - box-shadow: 0 8px 30px color-mix(in srgb, var(--accent) 12%, transparent); + background: color-mix(in srgb, var(--accent) 4%, var(--bg-card)); + transform: translateY(-2px); } .card-header { display: flex; justify-content: space-between; align-items: flex-start; } -.card-header h3 { font-size: 20px; color: var(--accent); } -.card-tags { display: flex; gap: 6px; flex-wrap: wrap; } +.card-header h3 { font-size: 18px; color: var(--accent-warm); } +.card-tags { display: flex; gap: 5px; flex-wrap: wrap; } .tag { - font-size: 11px; - padding: 3px 10px; - border-radius: 50px; - background: color-mix(in srgb, var(--accent) 15%, var(--bg-card)); - color: var(--accent); - border: 1px solid color-mix(in srgb, var(--accent) 30%, transparent); + font-size: 11px; padding: 2px 9px; border-radius: 50px; + background: color-mix(in srgb, var(--accent) 12%, var(--bg-card)); + color: var(--accent); border: 1px solid color-mix(in srgb, var(--accent) 25%, transparent); } -.card-desc { color: var(--text-muted); font-size: 14px; } +.card-desc { color: var(--text-muted); font-size: 13.5px; } .card-links { margin-top: auto; } -.card-link { font-size: 14px; color: var(--accent); } +.card-link { font-size: 13.5px; color: var(--accent); } /* ===== Software Detail ===== */ -.sw-links { - display: flex; - gap: 12px; - justify-content: center; - margin-bottom: 40px; - flex-wrap: wrap; -} -.sw-features { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 16px; - margin-bottom: 40px; -} +.sw-links { display: flex; gap: 10px; justify-content: center; margin-bottom: 36px; flex-wrap: wrap; } +.sw-features { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin-bottom: 36px; } .sw-section { - margin-bottom: 32px; - padding: 24px; - background: var(--bg-glass); - border-radius: var(--radius); -} -.sw-section h2 { - color: var(--accent); - margin-bottom: 12px; - font-size: 22px; + margin-bottom: 28px; padding: 22px; + background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); } +.sw-section h2 { color: var(--accent-warm); margin-bottom: 10px; font-size: 20px; } .sw-code { - background: rgba(255,255,255,0.06); - padding: 12px 18px; - border-radius: 8px; - font-family: 'Cascadia Code', 'Fira Code', monospace; - font-size: 14px; - overflow-x: auto; -} -.usage-list { display: flex; flex-direction: column; gap: 12px; } -.usage-item { - display: flex; - gap: 12px; - align-items: center; + background: rgba(255,255,255,0.05); padding: 10px 16px; border-radius: 6px; + font-family: var(--mono); font-size: 13px; overflow-x: auto; color: var(--text); } +.usage-list { display: flex; flex-direction: column; gap: 10px; } +.usage-item { display: flex; gap: 10px; align-items: center; } .usage-item code { - background: rgba(255,255,255,0.06); - padding: 6px 12px; - border-radius: 6px; - font-family: 'Cascadia Code', 'Fira Code', monospace; - font-size: 13px; - white-space: nowrap; + background: rgba(255,255,255,0.05); padding: 5px 10px; border-radius: 5px; + font-family: var(--mono); font-size: 12.5px; white-space: nowrap; } -.usage-item span { color: var(--text-muted); } +.usage-item span { color: var(--text-muted); font-size: 13px; } /* ===== Drag Ball ===== */ .drag-ball-area { - text-align: center; - padding: 24px; - margin: 40px 0; - background: var(--bg-glass); - border-radius: var(--radius); + text-align: center; padding: 22px; margin: 36px 0; + background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); } -.drag-hint { color: var(--text-muted); font-size: 14px; margin-top: 8px; } +.drag-hint { color: var(--text-muted); font-size: 13px; margin-top: 6px; } /* ===== XAGuarder ===== */ .xag-intro { - text-align: center; - padding: 40px; - background: var(--bg-glass); - border-radius: var(--radius); - max-width: 600px; - margin: 0 auto; + text-align: center; padding: 36px; + background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); + max-width: 560px; margin: 0 auto; } -.xag-logo { border-radius: 50%; margin-bottom: 16px; } -.xag-intro h2 { margin-bottom: 16px; color: var(--accent); } -.xag-intro p { color: var(--text-muted); margin-bottom: 20px; } +.xag-logo { border-radius: 50%; margin-bottom: 14px; } +.xag-intro h2 { margin-bottom: 14px; color: var(--accent-warm); } +.xag-intro p { color: var(--text-muted); margin-bottom: 18px; } /* ===== Warning Page ===== */ .warning-page { - min-height: 80vh; - display: flex; - align-items: center; - justify-content: center; + min-height: 80vh; display: flex; align-items: center; justify-content: center; } .warning-content { - text-align: center; - padding: 60px; - background: rgba(244,67,54,0.08); - border: 2px solid rgba(244,67,54,0.3); - border-radius: var(--radius); - max-width: 500px; + text-align: center; padding: 50px; + background: rgba(180,60,50,0.06); border: 2px solid rgba(180,60,50,0.25); + border-radius: var(--radius); max-width: 480px; } -.warning-logo { border-radius: 50%; margin-bottom: 20px; } -.warning-content h1 { color: #f44336; font-size: 28px; margin-bottom: 16px; } -.warning-text { font-size: 18px; color: var(--text); margin-bottom: 8px; } -.warning-sub { color: var(--text-muted); font-size: 14px; margin-bottom: 24px; } +.warning-logo { border-radius: 50%; margin-bottom: 18px; } +.warning-content h1 { color: #b84040; font-size: 26px; margin-bottom: 14px; } +.warning-text { font-size: 16px; color: var(--text); margin-bottom: 6px; } +.warning-sub { color: var(--text-muted); font-size: 13px; margin-bottom: 22px; } /* ===== Error Page ===== */ -.error-page { - min-height: 80vh; - display: flex; - align-items: center; - justify-content: center; -} +.error-page { min-height: 80vh; display: flex; align-items: center; justify-content: center; } .error-content { text-align: center; } -.error-logo { border-radius: 50%; margin-bottom: 20px; } -.error-content h1 { font-size: 72px; color: var(--accent); margin-bottom: 12px; } +.error-logo { border-radius: 50%; margin-bottom: 18px; } +.error-content h1 { font-size: 64px; color: var(--accent); margin-bottom: 10px; } .error-content p { color: var(--text-muted); } -.error-hint { font-size: 14px; margin-bottom: 24px; } +.error-hint { font-size: 13px; margin-bottom: 22px; } /* ===== Footer ===== */ .site-footer { - text-align: center; - padding: 24px; - border-top: 1px solid rgba(79,195,247,0.08); - color: var(--text-muted); - font-size: 13px; - margin-top: auto; + text-align: center; padding: 22px; + border-top: 1px solid var(--border); + color: var(--text-dim); font-size: 12.5px; margin-top: auto; } /* ===== Responsive ===== */ @media (max-width: 768px) { - .nav-inner { flex-direction: column; gap: 12px; } - .nav-links { gap: 12px; } - .home-title { font-size: 32px; letter-spacing: 4px; } - .home-logo { width: 140px; height: 140px; } - .home-nav { gap: 10px; } - .home-btn { padding: 10px 22px; font-size: 14px; } - .page-hero h1 { font-size: 28px; } + .nav-inner { flex-direction: column; gap: 10px; } + .nav-links { gap: 14px; } + .home-title { font-size: 30px; letter-spacing: 4px; } + .home-hero .home-logo { width: 120px; height: 120px; } + .services-grid { grid-template-columns: 1fr; max-width: 320px; } + .page-hero h1 { font-size: 26px; } .project-grid { grid-template-columns: 1fr; } .filelist-grid { grid-template-columns: repeat(2, 1fr); } .res-features, .sw-features { grid-template-columns: 1fr 1fr; } } - @media (max-width: 480px) { .filelist-grid { grid-template-columns: 1fr; } .res-features, .sw-features { grid-template-columns: 1fr; } diff --git a/static/js/stars.js b/static/js/stars.js deleted file mode 100644 index d8dfccf..0000000 --- a/static/js/stars.js +++ /dev/null @@ -1,68 +0,0 @@ -(function () { - const canvas = document.getElementById('star-canvas'); - if (!canvas) return; - const ctx = canvas.getContext('2d'); - let w, h; - - function resize() { - w = canvas.width = canvas.parentElement.clientWidth; - h = canvas.height = canvas.parentElement.clientHeight; - } - resize(); - window.addEventListener('resize', resize); - - const STAR_COUNT = 300; - const colors = ['#ffffff', '#e0f7fa', '#fff9c4', '#fce4ec', '#4fc3f7']; - const stars = []; - - for (let i = 0; i < STAR_COUNT; i++) { - stars.push({ - x: Math.random() * w, - y: Math.random() * h, - baseR: Math.random() * 1.5 + 0.3, - phase: Math.random() * Math.PI * 2, - speed: Math.random() * 0.02 + 0.005, - color: colors[Math.floor(Math.random() * colors.length)], - glow: Math.random() > 0.7 - }); - } - - function draw() { - ctx.clearRect(0, 0, w, h); - const t = performance.now() * 0.001; - - for (const s of stars) { - const r = s.baseR + Math.sin(t * s.speed * 10 + s.phase) * s.baseR * 0.6; - const alpha = 0.4 + Math.sin(t * s.speed * 8 + s.phase) * 0.35; - - ctx.globalAlpha = Math.max(0.1, alpha); - ctx.beginPath(); - ctx.arc(s.x, s.y, Math.max(0.1, r), 0, Math.PI * 2); - ctx.fillStyle = s.color; - ctx.fill(); - - if (s.glow) { - const gr = ctx.createRadialGradient(s.x, s.y, 0, s.x, s.y, r * 3); - gr.addColorStop(0, s.color); - gr.addColorStop(1, 'transparent'); - ctx.globalAlpha = alpha * 0.15; - ctx.beginPath(); - ctx.arc(s.x, s.y, r * 3, 0, Math.PI * 2); - ctx.fillStyle = gr; - ctx.fill(); - } - } - ctx.globalAlpha = 1; - requestAnimationFrame(draw); - } - - draw(); - - // reposition on resize - window.addEventListener('resize', () => { - for (const s of stars) { - s.x = (s.x / w) * canvas.width; - s.y = (s.y / h) * canvas.height; - } - }); -})(); diff --git a/static/logo.svg b/static/logo.svg index 37cbf1c..356bef0 100644 --- a/static/logo.svg +++ b/static/logo.svg @@ -1,47 +1,35 @@ - - + + - - - - - - + + + - - - - + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - S.A. + S.A.