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 @@