This commit is contained in:
DelLevin-Home
2026-07-03 02:56:42 +08:00
parent 3f2a8bfdcd
commit 32e12dc801
8 changed files with 515 additions and 241 deletions

2
dist/index.html vendored
View File

@@ -1 +1 @@
<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>MookNote - 记录你的观影、阅读与笔记</title><meta name="description" content="MookNote是一款简洁优雅的观影阅读笔记应用帮助你记录生活中的每一份感动与思考。"><script defer="defer" src="js/chunk-vendors.474bdb90.js"></script><script defer="defer" src="js/app.54b407f8.js"></script><link href="css/app.d8127cf7.css" rel="stylesheet"></head><script defer="defer" src="https://umami.iletter.top/anyjs" data-website-id="a4035aea-31ff-4df4-86e3-90a904a348d0"></script><body><noscript><strong>We're sorry but MookNote doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html> <!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>MookNote - 记录你的观影、阅读与笔记</title><meta name="description" content="MookNote是一款简洁优雅的观影阅读笔记应用帮助你记录生活中的每一份感动与思考。"><script defer="defer" src="js/chunk-vendors.474bdb90.js"></script><script defer="defer" src="js/app.a1f755d5.js"></script><link href="css/app.f1e25e8e.css" rel="stylesheet"></head><script defer="defer" src="https://umami.iletter.top/anyjs" data-website-id="a4035aea-31ff-4df4-86e3-90a904a348d0"></script><body><noscript><strong>We're sorry but MookNote doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>

View File

@@ -1 +1 @@
[{"d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\main.js":"1","d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\App.vue":"2","d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\router\\index.js":"3","d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Home.vue":"4","d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Guide.vue":"5","d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Features.vue":"6","d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Contact.vue":"7","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\main.js":"8","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\App.vue":"9","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\router\\index.js":"10","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Home.vue":"11","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Guide.vue":"12","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Features.vue":"13","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Contact.vue":"14"},{"size":185,"mtime":1773039011232,"results":"15","hashOfConfig":"16"},{"size":5498,"mtime":1773039067514,"results":"17","hashOfConfig":"16"},{"size":751,"mtime":1773039011237,"results":"18","hashOfConfig":"16"},{"size":20348,"mtime":1773039198919,"results":"19","hashOfConfig":"16"},{"size":17167,"mtime":1773039467672,"results":"20","hashOfConfig":"16"},{"size":18441,"mtime":1773039396952,"results":"21","hashOfConfig":"16"},{"size":14128,"mtime":1773039566109,"results":"22","hashOfConfig":"16"},{"size":185,"mtime":1773039011232,"results":"23","hashOfConfig":"24"},{"size":5704,"mtime":1773063622700,"results":"25","hashOfConfig":"24"},{"size":751,"mtime":1773039011237,"results":"26","hashOfConfig":"24"},{"size":20345,"mtime":1773329796846,"results":"27","hashOfConfig":"24"},{"size":14384,"mtime":1773061457657,"results":"28","hashOfConfig":"24"},{"size":21770,"mtime":1773060984086,"results":"29","hashOfConfig":"24"},{"size":12549,"mtime":1773329769428,"results":"30","hashOfConfig":"24"},{"filePath":"31","messages":"32","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1d1ptc",{"filePath":"33","messages":"34","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35","messages":"36","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37","messages":"38","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39","messages":"40","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"41","messages":"42","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"43","messages":"44","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"45","messages":"46","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"gg8jao",{"filePath":"47","messages":"48","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"49","messages":"50","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"51","messages":"52","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"53","messages":"54","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"55","messages":"56","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"57","messages":"58","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\main.js",[],"d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\App.vue",[],"d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\router\\index.js",[],"d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Home.vue",[],"d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Guide.vue",[],"d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Features.vue",[],"d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Contact.vue",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\main.js",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\App.vue",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\router\\index.js",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Home.vue",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Guide.vue",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Features.vue",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Contact.vue",[]] [{"d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\main.js":"1","d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\App.vue":"2","d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\router\\index.js":"3","d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Home.vue":"4","d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Guide.vue":"5","d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Features.vue":"6","d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Contact.vue":"7","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\main.js":"8","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\App.vue":"9","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\router\\index.js":"10","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Home.vue":"11","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Guide.vue":"12","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Features.vue":"13","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Contact.vue":"14"},{"size":185,"mtime":1773039011232,"results":"15","hashOfConfig":"16"},{"size":5498,"mtime":1773039067514,"results":"17","hashOfConfig":"16"},{"size":751,"mtime":1773039011237,"results":"18","hashOfConfig":"16"},{"size":20348,"mtime":1773039198919,"results":"19","hashOfConfig":"16"},{"size":17167,"mtime":1773039467672,"results":"20","hashOfConfig":"16"},{"size":18441,"mtime":1773039396952,"results":"21","hashOfConfig":"16"},{"size":14128,"mtime":1773039566109,"results":"22","hashOfConfig":"16"},{"size":185,"mtime":1773039011232,"results":"23","hashOfConfig":"24"},{"size":7306,"mtime":1783015782005,"results":"25","hashOfConfig":"24"},{"size":751,"mtime":1773039011237,"results":"26","hashOfConfig":"24"},{"size":24309,"mtime":1783016162831,"results":"27","hashOfConfig":"24"},{"size":17358,"mtime":1783016780387,"results":"28","hashOfConfig":"24"},{"size":23596,"mtime":1783016698517,"results":"29","hashOfConfig":"24"},{"size":14012,"mtime":1783018248684,"results":"30","hashOfConfig":"24"},{"filePath":"31","messages":"32","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1d1ptc",{"filePath":"33","messages":"34","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35","messages":"36","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37","messages":"38","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39","messages":"40","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"41","messages":"42","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"43","messages":"44","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"45","messages":"46","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"7fv5t4",{"filePath":"47","messages":"48","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"49","messages":"50","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"51","messages":"52","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"53","messages":"54","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"55","messages":"56","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"57","messages":"58","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\main.js",[],"d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\App.vue",[],"d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\router\\index.js",[],"d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Home.vue",[],"d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Guide.vue",[],"d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Features.vue",[],"d:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Contact.vue",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\main.js",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\App.vue",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\router\\index.js",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Home.vue",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Guide.vue",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Features.vue",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Contact.vue",[]]

View File

@@ -1 +1 @@
[{"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\main.js":"1","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\App.vue":"2","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\router\\index.js":"3","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Features.vue":"4","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Home.vue":"5","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Guide.vue":"6","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Contact.vue":"7"},{"size":185,"mtime":1773039011232,"results":"8","hashOfConfig":"9"},{"size":5704,"mtime":1773063622700,"results":"10","hashOfConfig":"9"},{"size":751,"mtime":1773039011237,"results":"11","hashOfConfig":"9"},{"size":21770,"mtime":1773060984086,"results":"12","hashOfConfig":"9"},{"size":20345,"mtime":1773329796846,"results":"13","hashOfConfig":"9"},{"size":14384,"mtime":1773061457657,"results":"14","hashOfConfig":"9"},{"size":12549,"mtime":1773329769428,"results":"15","hashOfConfig":"9"},{"filePath":"16","messages":"17","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"18"},"1gqgkxc",{"filePath":"19","messages":"20","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21","messages":"22","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"18"},{"filePath":"23","messages":"24","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"25"},{"filePath":"26","messages":"27","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28","messages":"29","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"25"},{"filePath":"30","messages":"31","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\main.js",[],[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\App.vue",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\router\\index.js",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Features.vue",[],[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Home.vue",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Guide.vue",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Contact.vue",[]] [{"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\main.js":"1","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\App.vue":"2","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\router\\index.js":"3","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Features.vue":"4","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Home.vue":"5","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Guide.vue":"6","D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Contact.vue":"7"},{"size":185,"mtime":1773039011232,"results":"8","hashOfConfig":"9"},{"size":7306,"mtime":1783015782005,"results":"10","hashOfConfig":"9"},{"size":751,"mtime":1773039011237,"results":"11","hashOfConfig":"9"},{"size":23234,"mtime":1783018404809,"results":"12","hashOfConfig":"9"},{"size":24309,"mtime":1783016162831,"results":"13","hashOfConfig":"9"},{"size":17358,"mtime":1783016780387,"results":"14","hashOfConfig":"9"},{"size":14012,"mtime":1783018248684,"results":"15","hashOfConfig":"9"},{"filePath":"16","messages":"17","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"18"},"r0b2vc",{"filePath":"19","messages":"20","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"21"},{"filePath":"22","messages":"23","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"18"},{"filePath":"24","messages":"25","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26","messages":"27","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"21"},{"filePath":"28","messages":"29","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"21"},{"filePath":"30","messages":"31","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\main.js",[],[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\App.vue",[],[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\router\\index.js",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Features.vue",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Home.vue",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Guide.vue",[],"D:\\UserData\\Desktop\\my_proj\\mooknote_web\\src\\views\\Contact.vue",[]]

View File

@@ -1,18 +1,18 @@
<template> <template>
<div id="app"> <div id="app">
<nav class="navbar"> <nav class="navbar" :class="{ 'navbar-scrolled': scrolled }">
<div class="nav-container"> <div class="nav-container">
<div class="nav-brand"> <div class="nav-brand">
<span class="brand-icon">M</span> <span class="brand-icon">M</span>
<span class="brand-text">MookNote</span> <span class="brand-text">MookNote</span>
</div> </div>
<ul class="nav-menu"> <ul class="nav-menu" :class="{ active: menuOpen }">
<li><router-link to="/" exact>首页</router-link></li> <li><router-link to="/" exact @click.native="closeMenu">首页</router-link></li>
<li><router-link to="/features">功能特性</router-link></li> <li><router-link to="/features" @click.native="closeMenu">功能特性</router-link></li>
<li><router-link to="/guide">使用指南</router-link></li> <li><router-link to="/guide" @click.native="closeMenu">使用指南</router-link></li>
<li><router-link to="/contact">联系我</router-link></li> <li><router-link to="/contact" @click.native="closeMenu">联系我</router-link></li>
</ul> </ul>
<div class="nav-toggle" @click="toggleMenu"> <div class="nav-toggle" :class="{ active: menuOpen }" @click="toggleMenu">
<span></span> <span></span>
<span></span> <span></span>
<span></span> <span></span>
@@ -49,13 +49,27 @@ export default {
name: 'App', name: 'App',
data() { data() {
return { return {
menuOpen: false menuOpen: false,
scrolled: false
} }
}, },
mounted() {
window.addEventListener('scroll', this.handleScroll)
},
beforeDestroy() {
window.removeEventListener('scroll', this.handleScroll)
},
methods: { methods: {
toggleMenu() { toggleMenu() {
this.menuOpen = !this.menuOpen this.menuOpen = !this.menuOpen
document.querySelector('.nav-menu').classList.toggle('active') document.querySelector('.nav-menu').classList.toggle('active')
},
closeMenu() {
this.menuOpen = false
document.querySelector('.nav-menu').classList.remove('active')
},
handleScroll() {
this.scrolled = window.scrollY > 10
} }
} }
} }
@@ -101,8 +115,15 @@ body {
right: 0; right: 0;
background: rgba(255, 255, 255, 0.95); background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px); backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--color-border);
z-index: 1000; z-index: 1000;
transition: box-shadow 0.3s ease, background 0.3s ease;
}
.navbar-scrolled {
box-shadow: 0 1px 20px rgba(0, 0, 0, 0.06);
background: rgba(255, 255, 255, 0.98);
} }
.nav-container { .nav-container {
@@ -121,6 +142,11 @@ body {
gap: 10px; gap: 10px;
font-size: 20px; font-size: 20px;
font-weight: 600; font-weight: 600;
transition: transform 0.2s ease;
}
.nav-brand:hover {
transform: scale(1.02);
} }
.brand-icon { .brand-icon {
@@ -134,6 +160,7 @@ body {
justify-content: center; justify-content: center;
font-size: 16px; font-size: 16px;
font-weight: 700; font-weight: 700;
transition: background 0.2s ease;
} }
.nav-menu { .nav-menu {
@@ -164,6 +191,7 @@ body {
right: 0; right: 0;
height: 2px; height: 2px;
background: var(--color-accent); background: var(--color-accent);
border-radius: 1px;
} }
.nav-toggle { .nav-toggle {
@@ -178,7 +206,20 @@ body {
width: 24px; width: 24px;
height: 2px; height: 2px;
background: var(--color-text); background: var(--color-text);
transition: all 0.3s; transition: all 0.3s ease;
border-radius: 1px;
}
.nav-toggle.active span:nth-child(1) {
transform: rotate(45deg) translate(5px, 5px);
}
.nav-toggle.active span:nth-child(2) {
opacity: 0;
}
.nav-toggle.active span:nth-child(3) {
transform: rotate(-45deg) translate(5px, -5px);
} }
/* Main Content */ /* Main Content */
@@ -187,6 +228,15 @@ body {
padding-top: 64px; padding-top: 64px;
} }
/* Page transition */
.fade-enter-active, .fade-leave-active {
transition: opacity 0.3s ease;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
/* Footer */ /* Footer */
.footer { .footer {
background: var(--color-bg-secondary); background: var(--color-bg-secondary);
@@ -210,6 +260,14 @@ body {
margin-bottom: 12px; margin-bottom: 12px;
} }
.footer-brand .brand-icon {
transition: transform 0.3s ease;
}
.footer-brand:hover .brand-icon {
transform: rotate(5deg);
}
.footer-desc { .footer-desc {
color: var(--color-text-secondary); color: var(--color-text-secondary);
font-size: 14px; font-size: 14px;
@@ -220,7 +278,7 @@ body {
display: flex; display: flex;
justify-content: center; justify-content: center;
gap: 32px; gap: 32px;
margin-bottom: 32px; margin-bottom: 16px;
} }
.footer-links a { .footer-links a {
@@ -237,6 +295,7 @@ body {
.copyright { .copyright {
color: var(--color-text-muted); color: var(--color-text-muted);
font-size: 13px; font-size: 13px;
margin-top: 24px;
} }
/* Responsive */ /* Responsive */
@@ -254,7 +313,8 @@ body {
transform: translateY(-100%); transform: translateY(-100%);
opacity: 0; opacity: 0;
visibility: hidden; visibility: hidden;
transition: all 0.3s; transition: all 0.3s ease;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
} }
.nav-menu.active { .nav-menu.active {

View File

@@ -22,7 +22,7 @@
<section class="contact-options"> <section class="contact-options">
<div class="container"> <div class="container">
<div class="contact-grid"> <div class="contact-grid">
<div class="contact-card"> <div class="contact-card animate-on-scroll">
<div class="contact-icon"> <div class="contact-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/> <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>
@@ -32,7 +32,7 @@
<p>遇到 Bug 或有功能建议欢迎提交反馈帮助我们改进产品</p> <p>遇到 Bug 或有功能建议欢迎提交反馈帮助我们改进产品</p>
<a href="mailto:wonder1999@126.com" class="contact-link">wonder1999@126.com</a> <a href="mailto:wonder1999@126.com" class="contact-link">wonder1999@126.com</a>
</div> </div>
<div class="contact-card"> <div class="contact-card animate-on-scroll">
<div class="contact-icon"> <div class="contact-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"/> <path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"/>
@@ -42,7 +42,7 @@
<p>MookNote 是开源项目欢迎访问 GitHub 仓库提交 Issue PR</p> <p>MookNote 是开源项目欢迎访问 GitHub 仓库提交 Issue PR</p>
<a href="https://github.com/dellevin/mooknote" class="contact-link" >GitHub 仓库</a> <a href="https://github.com/dellevin/mooknote" class="contact-link" >GitHub 仓库</a>
</div> </div>
<div class="contact-card"> <div class="contact-card animate-on-scroll">
<div class="contact-icon"> <div class="contact-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/> <path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/>
@@ -63,11 +63,25 @@
<!-- About --> <!-- About -->
<section class="about-section"> <section class="about-section">
<div class="container"> <div class="container">
<div class="about-content"> <div class="about-content animate-on-scroll">
<h2>关于 MookNote</h2> <h2>关于 MookNote</h2>
<p>MookNote 是一款专注于个人记录的应用诞生于对简洁工具的追求我相信好的工具应该像纸笔一样自然不打扰思考只记录生活</p> <p>MookNote 是一款专注于个人记录的应用诞生于对简洁工具的追求相信好的工具应该像纸笔一样自然不打扰思考只记录生活</p>
<p>希望一款好的软件应该做到的是不断听取使用者意见不断改进和优化数据归于用户不做任何侵犯用户隐私的事情只提供最简单最实用的功能</p> <p>们坚持数据归于用户不做任何侵犯用户隐私的事情所有数据本地存储无需注册账号无需联网即可使用同时提供 WebDAV 云备份让你自由选择数据存储方式</p>
<p>应用采用 Flutter 框架开发</p> <p>应用采用 Flutter 框架开发支持 Android 平台未来计划支持 iOSWindowsmacOS Linux</p>
</div>
<div class="about-stats">
<div class="about-stat animate-on-scroll">
<span class="as-number">3</span>
<span class="as-label">核心模块</span>
</div>
<div class="about-stat animate-on-scroll">
<span class="as-number">6+</span>
<span class="as-label">配色方案</span>
</div>
<div class="about-stat animate-on-scroll">
<span class="as-number">0</span>
<span class="as-label">隐私收集</span>
</div>
</div> </div>
</div> </div>
</section> </section>
@@ -75,9 +89,11 @@
<!-- Changelog --> <!-- Changelog -->
<section class="changelog-section"> <section class="changelog-section">
<div class="container"> <div class="container">
<h2 class="section-title">更新日志</h2> <h2 class="changelog-title animate-on-scroll">更新日志</h2>
<p class="changelog-subtitle animate-on-scroll">持续迭代不断优化体验</p>
<div class="timeline-scroll">
<div class="timeline"> <div class="timeline">
<div v-for="(log, index) in changelogs" :key="index" class="timeline-item"> <div v-for="(log, index) in changelogs" :key="index" class="timeline-item animate-on-scroll">
<div class="timeline-marker"></div> <div class="timeline-marker"></div>
<div class="timeline-content"> <div class="timeline-content">
<div class="timeline-header"> <div class="timeline-header">
@@ -91,6 +107,7 @@
</div> </div>
</div> </div>
</div> </div>
</div>
</section> </section>
</div> </div>
</template> </template>
@@ -108,34 +125,25 @@ export default {
}, },
submitting: false, submitting: false,
showQRModal: false, showQRModal: false,
changelogs: [ changelogs: []
{ }
version: 'v0.1.6',
date: '2025年3月',
features: [
'可控制主界面功能的显示',
'底部加号长按添加对应数据(观影/阅读/笔记)',
'优化我的界面显示',
'优化影评/书评页面显示内容',
'优化影评/书评详情页面显示内容',
'优化笔记列表/详情/编辑界面',
'优化回收站界面显示',
'评分星星在首页展开显示(多颗星星)',
'支持修改已看/已读时间'
]
}, },
{ mounted() {
version: 'v0.1.5', fetch('https://api.mooknote.iletter.top/api/changelog')
date: '2025年2月', .then(res => res.json())
features: [ .then(data => {
'首个公开版本发布', if (data.items && Array.isArray(data.items)) {
'支持观影、阅读、笔记三大模块', this.changelogs = data.items
'本地备份与 WebDAV 云备份功能', // 数据加载完成后重新初始化动画
'数据统计与热力图展示' this.$nextTick(() => {
] this.initScrollObserver()
} })
]
} }
})
.catch(() => {})
// 初始化滚动动画(静态元素)
this.initScrollObserver()
}, },
methods: { methods: {
showComingSoon() { showComingSoon() {
@@ -146,12 +154,45 @@ export default {
}, },
closeQRModal() { closeQRModal() {
this.showQRModal = false this.showQRModal = false
},
initScrollObserver() {
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('is-visible')
}
})
}, { threshold: 0.1 })
this.$nextTick(() => {
const animatedElements = this.$el.querySelectorAll('.animate-on-scroll')
animatedElements.forEach(el => observer.observe(el))
})
} }
} }
} }
</script> </script>
<style scoped> <style scoped>
/* Animation utilities */
.animate-on-scroll {
opacity: 0;
transform: translateY(30px);
transition: opacity 0.6s ease, transform 0.6s ease;
}
.animate-on-scroll.is-visible {
opacity: 1;
transform: translateY(0);
}
.animate-on-scroll:nth-child(1) { transition-delay: 0.05s; }
.animate-on-scroll:nth-child(2) { transition-delay: 0.1s; }
.animate-on-scroll:nth-child(3) { transition-delay: 0.15s; }
.animate-on-scroll:nth-child(4) { transition-delay: 0.2s; }
.animate-on-scroll:nth-child(5) { transition-delay: 0.25s; }
.animate-on-scroll:nth-child(6) { transition-delay: 0.3s; }
/* Modal */ /* Modal */
.modal-overlay { .modal-overlay {
position: fixed; position: fixed;
@@ -164,6 +205,12 @@ export default {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
z-index: 1000; z-index: 1000;
animation: fadeIn 0.2s ease;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
} }
.modal-content { .modal-content {
@@ -174,6 +221,18 @@ export default {
position: relative; position: relative;
max-width: 360px; max-width: 360px;
width: 90%; width: 90%;
animation: slideUp 0.3s ease;
}
@keyframes slideUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
} }
.modal-close { .modal-close {
@@ -191,10 +250,12 @@ export default {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
transition: color 0.2s ease, transform 0.2s ease;
} }
.modal-close:hover { .modal-close:hover {
color: var(--color-text); color: var(--color-text);
transform: rotate(90deg);
} }
.modal-content h3 { .modal-content h3 {
@@ -252,11 +313,12 @@ export default {
background: var(--color-bg-secondary); background: var(--color-bg-secondary);
border-radius: 16px; border-radius: 16px;
text-align: center; text-align: center;
transition: transform 0.2s; transition: transform 0.3s ease, box-shadow 0.3s ease;
} }
.contact-card:hover { .contact-card:hover {
transform: translateY(-4px); transform: translateY(-6px);
box-shadow: 0 12px 40px rgba(0,0,0,0.08);
} }
.contact-icon { .contact-icon {
@@ -269,6 +331,11 @@ export default {
justify-content: center; justify-content: center;
margin: 0 auto 24px; margin: 0 auto 24px;
color: var(--color-text); color: var(--color-text);
transition: transform 0.3s ease;
}
.contact-card:hover .contact-icon {
transform: scale(1.1);
} }
.contact-icon svg { .contact-icon svg {
@@ -296,128 +363,12 @@ export default {
text-decoration: none; text-decoration: none;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--color-border);
padding-bottom: 2px; padding-bottom: 2px;
transition: border-color 0.2s; transition: border-color 0.2s ease, color 0.2s ease;
} }
.contact-link:hover { .contact-link:hover {
border-color: var(--color-text); border-color: var(--color-text);
} color: #333;
/* Feedback Section */
.feedback-section {
padding: 80px 24px;
background: var(--color-bg-secondary);
}
.feedback-wrapper {
display: flex;
gap: 80px;
max-width: 1000px;
margin: 0 auto;
}
.feedback-info {
flex: 1;
}
.feedback-info h2 {
font-size: 32px;
font-weight: 700;
margin-bottom: 20px;
color: var(--color-text);
}
.feedback-info p {
font-size: 16px;
color: var(--color-text-secondary);
line-height: 1.8;
margin-bottom: 32px;
}
.info-list {
display: flex;
flex-direction: column;
gap: 16px;
}
.info-item {
display: flex;
align-items: center;
gap: 12px;
font-size: 15px;
color: var(--color-text-secondary);
}
.info-icon {
width: 24px;
height: 24px;
background: var(--color-text);
color: white;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 12px;
flex-shrink: 0;
}
.feedback-form {
flex: 1;
background: white;
padding: 40px;
border-radius: 16px;
}
.form-group {
margin-bottom: 24px;
}
.form-group label {
display: block;
font-size: 14px;
font-weight: 500;
color: var(--color-text);
margin-bottom: 8px;
}
.form-group input,
.form-group select,
.form-group textarea {
width: 100%;
padding: 12px 16px;
border: 1px solid var(--color-border);
border-radius: 8px;
font-size: 15px;
font-family: inherit;
background: white;
color: var(--color-text);
transition: border-color 0.2s;
}
.form-group input:focus,
.form-group select:focus,
.form-group textarea:focus {
outline: none;
border-color: var(--color-text);
}
.form-group input::placeholder,
.form-group textarea::placeholder {
color: var(--color-text-muted);
}
.form-group textarea {
resize: vertical;
min-height: 120px;
}
.btn-block {
width: 100%;
}
button:disabled {
opacity: 0.6;
cursor: not-allowed;
} }
/* About Section */ /* About Section */
@@ -478,9 +429,52 @@ button:disabled {
background: var(--color-bg-secondary); background: var(--color-bg-secondary);
} }
.changelog-section .container {
max-width: 1200px;
margin: 0 auto;
}
.changelog-title {
font-size: 36px;
font-weight: 700;
text-align: center;
margin-bottom: 12px;
color: var(--color-text);
}
.changelog-subtitle {
font-size: 16px;
color: var(--color-text-secondary);
text-align: center;
margin-bottom: 48px;
}
.timeline-scroll {
max-height: 500px;
overflow-y: auto;
padding-right: 8px;
}
.timeline-scroll::-webkit-scrollbar {
width: 6px;
}
.timeline-scroll::-webkit-scrollbar-track {
background: transparent;
}
.timeline-scroll::-webkit-scrollbar-thumb {
background: var(--color-border);
border-radius: 3px;
}
.timeline-scroll::-webkit-scrollbar-thumb:hover {
background: var(--color-text-muted);
}
.timeline { .timeline {
max-width: 720px; max-width: 720px;
margin: 48px auto 0; margin: 0 auto;
position: relative; position: relative;
} }
@@ -513,6 +507,12 @@ button:disabled {
flex-shrink: 0; flex-shrink: 0;
position: relative; position: relative;
z-index: 1; z-index: 1;
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.timeline-item:hover .timeline-marker {
transform: scale(1.2);
box-shadow: 0 0 0 4px rgba(26, 26, 26, 0.1);
} }
.timeline-content { .timeline-content {
@@ -520,6 +520,12 @@ button:disabled {
background: white; background: white;
padding: 24px; padding: 24px;
border-radius: 12px; border-radius: 12px;
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.timeline-item:hover .timeline-content {
transform: translateX(4px);
box-shadow: 0 4px 16px rgba(0,0,0,0.06);
} }
.timeline-header { .timeline-header {
@@ -571,5 +577,11 @@ button:disabled {
align-items: flex-start; align-items: flex-start;
gap: 4px; gap: 4px;
} }
.animate-on-scroll {
opacity: 1;
transform: none;
transition: none;
}
} }
</style> </style>

View File

@@ -22,7 +22,7 @@
</div> </div>
<div class="df-text"> <div class="df-text">
<h4>三种观看状态</h4> <h4>三种观看状态</h4>
<p>已看在看想看清晰分类管理</p> <p>已看在看想看清晰分类管理你的观影清单</p>
</div> </div>
</div> </div>
<div class="df-item"> <div class="df-item">
@@ -31,7 +31,7 @@
</div> </div>
<div class="df-text"> <div class="df-text">
<h4>评分系统</h4> <h4>评分系统</h4>
<p>为每部电影打分记录你的真实感受</p> <p>为每部电影打分记录你的真实感受生成个人观影排行榜</p>
</div> </div>
</div> </div>
<div class="df-item"> <div class="df-item">
@@ -40,7 +40,7 @@
</div> </div>
<div class="df-text"> <div class="df-text">
<h4>观影笔记</h4> <h4>观影笔记</h4>
<p>记录观影心得保存经典台词</p> <p>记录观影心得经典台词让每一次观影都有收获</p>
</div> </div>
</div> </div>
<div class="df-item"> <div class="df-item">
@@ -49,7 +49,7 @@
</div> </div>
<div class="df-text"> <div class="df-text">
<h4>海报展示</h4> <h4>海报展示</h4>
<p>精美的瀑布流布局展示电影海报</p> <p>精美的瀑布流布局展示电影海报视觉体验更佳</p>
</div> </div>
</div> </div>
</div> </div>
@@ -115,7 +115,7 @@
</div> </div>
<div class="df-text"> <div class="df-text">
<h4>阅读状态追踪</h4> <h4>阅读状态追踪</h4>
<p>已读在读准备读一目了然</p> <p>已读在读准备读一目了然地管理你的阅读计划</p>
</div> </div>
</div> </div>
<div class="df-item"> <div class="df-item">
@@ -124,7 +124,7 @@
</div> </div>
<div class="df-text"> <div class="df-text">
<h4>书籍信息</h4> <h4>书籍信息</h4>
<p>记录作者出版日期简介等详细信息</p> <p>记录作者出版日期简介等详细信息打造个人书库</p>
</div> </div>
</div> </div>
<div class="df-item"> <div class="df-item">
@@ -133,7 +133,7 @@
</div> </div>
<div class="df-text"> <div class="df-text">
<h4>读书笔记</h4> <h4>读书笔记</h4>
<p>摘录金句记录感悟积累知识</p> <p>摘录金句记录感悟积累知识让阅读更有价值</p>
</div> </div>
</div> </div>
<div class="df-item"> <div class="df-item">
@@ -142,7 +142,7 @@
</div> </div>
<div class="df-text"> <div class="df-text">
<h4>阅读统计</h4> <h4>阅读统计</h4>
<p>年度阅读报告见证成长轨迹</p> <p>年度阅读报告可视化展示阅读数据见证成长轨迹</p>
</div> </div>
</div> </div>
</div> </div>
@@ -200,7 +200,7 @@
<div class="detail-row"> <div class="detail-row">
<div class="detail-content"> <div class="detail-content">
<h2>笔记整理</h2> <h2>笔记整理</h2>
<p class="detail-desc">随时记录灵感和想法支持图文混排让你的知识库井井有条</p> <p class="detail-desc">随时记录灵感和想法支持图文混排和富文本编辑让你的知识库井井有条</p>
<div class="detail-features"> <div class="detail-features">
<div class="df-item"> <div class="df-item">
<div class="df-icon"> <div class="df-icon">
@@ -208,7 +208,7 @@
</div> </div>
<div class="df-text"> <div class="df-text">
<h4>快速记录</h4> <h4>快速记录</h4>
<p>一键新建笔记捕捉瞬间灵感</p> <p>一键新建笔记捕捉瞬间灵感不错过任何有价值的想法</p>
</div> </div>
</div> </div>
<div class="df-item"> <div class="df-item">
@@ -217,7 +217,7 @@
</div> </div>
<div class="df-text"> <div class="df-text">
<h4>标签分类</h4> <h4>标签分类</h4>
<p>多维度标签灵活组织笔记</p> <p>多维度标签系统灵活组织笔记快速检索所需内容</p>
</div> </div>
</div> </div>
<div class="df-item"> <div class="df-item">
@@ -226,7 +226,7 @@
</div> </div>
<div class="df-text"> <div class="df-text">
<h4>图文混排</h4> <h4>图文混排</h4>
<p>支持插入图片丰富笔记内容</p> <p>支持插入图片丰富笔记内容图文并茂记录生活</p>
</div> </div>
</div> </div>
<div class="df-item"> <div class="df-item">
@@ -235,7 +235,7 @@
</div> </div>
<div class="df-text"> <div class="df-text">
<h4>全文搜索</h4> <h4>全文搜索</h4>
<p>快速定位所需内容</p> <p>快速定位所需内容再长的笔记也能秒速找到</p>
</div> </div>
</div> </div>
</div> </div>
@@ -289,49 +289,65 @@
<!-- Additional Features --> <!-- Additional Features -->
<section class="additional-features"> <section class="additional-features">
<div class="container"> <div class="container">
<h2 class="section-title">更多特性</h2> <h2 class="section-title animate-on-scroll">更多特性</h2>
<p class="section-subtitle animate-on-scroll">不止记录更是你的个人知识库</p>
<div class="af-grid"> <div class="af-grid">
<div class="af-card"> <div class="af-card animate-on-scroll">
<div class="af-icon"> <div class="af-icon">
<img src="../assets/icon/data.png" class="fixed-size-image"> <img src="../assets/icon/data.png" class="fixed-size-image">
</div> </div>
<h3>数据统计</h3> <h3>数据统计</h3>
<p>可视化展示观影阅读笔记的统计信息包括月度热力图年度回顾等</p> <p>可视化展示观影阅读笔记的统计信息包括月度热力图年度回顾等见证你的成长轨迹</p>
</div> </div>
<div class="af-card"> <div class="af-card animate-on-scroll">
<div class="af-icon"> <div class="af-icon">
<img src="../assets/icon/save.png" class="fixed-size-image"> <img src="../assets/icon/save.png" class="fixed-size-image">
</div> </div>
<h3>本地备份</h3> <h3>本地备份</h3>
<p>一键导出数据到本地支持 JSON 和数据库格式数据完全自主可控</p> <p>一键导出数据到本地支持 ZIP 格式打包数据完全自主可控换机无忧</p>
</div> </div>
<div class="af-card"> <div class="af-card animate-on-scroll">
<div class="af-icon"> <div class="af-icon">
<img src="../assets/icon/cloud.png" class="fixed-size-image"> <img src="../assets/icon/cloud.png" class="fixed-size-image">
</div> </div>
<h3>云备份</h3> <h3>WebDAV 云备份</h3>
<p>支持 WebDAV 协议可将数据备份到个人云盘多设备同步无忧</p> <p>支持 WebDAV 协议可将数据备份到个人云盘如坚果云多设备同步无忧</p>
</div> </div>
<div class="af-card"> <div class="af-card animate-on-scroll">
<div class="af-icon"> <div class="af-icon">
<img src="../assets/icon/回收站.png" class="fixed-size-image"> <img src="../assets/icon/回收站.png" class="fixed-size-image">
</div> </div>
<h3>回收站</h3> <h3>回收站</h3>
<p>误删的内容可在回收站中找回避免重要数据意外丢失</p> <p>误删的内容可在回收站中找回支持一键恢复避免重要数据意外丢失</p>
</div> </div>
<div class="af-card"> <div class="af-card animate-on-scroll">
<div class="af-icon"> <div class="af-icon">
<img src="../assets/icon/lock.png" class="fixed-size-image"> <img src="../assets/icon/lock.png" class="fixed-size-image">
</div> </div>
<h3>隐私保护</h3> <h3>隐私保护</h3>
<p>所有数据本地存储无需注册账号保护你的隐私安全</p> <p>所有数据本地存储无需注册账号不收集任何个人信息你的隐私你做主</p>
</div> </div>
<div class="af-card">
<div class="af-card animate-on-scroll">
<div class="af-icon"> <div class="af-icon">
<img src="../assets/icon/zap-fast.png" class="fixed-size-image"> <img src="../assets/icon/book3.png" class="fixed-size-image">
</div> </div>
<h3>轻量快速</h3> <h3>EPUB 阅读器</h3>
<p>应用体积小巧启动迅速流畅的使用体验</p> <p>内置 EPUB 电子书阅读器支持导入本地书籍自定义字体字号背景色沉浸式阅读体验</p>
</div>
<div class="af-card animate-on-scroll">
<div class="af-icon">
<img src="../assets/icon/note2.png" class="fixed-size-image">
</div>
<h3>高级笔记</h3>
<p>支持富文本编辑图文混排插入图片格式化文本满足更复杂的笔记需求</p>
</div>
<div class="af-card animate-on-scroll">
<div class="af-icon">
<img src="../assets/icon/movies-2.png" class="fixed-size-image">
</div>
<h3>豆瓣集成</h3>
<p>通过 WebView 搜索豆瓣信息一键获取电影书籍的详细资料和评分</p>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -120,7 +120,18 @@
<li>选择"笔记"类型</li> <li>选择"笔记"类型</li>
<li>输入笔记内容</li> <li>输入笔记内容</li>
<li>可选添加标签进行分类</li> <li>可选添加标签进行分类</li>
<li>可选txt格式支持插入图片</li> <li>可选插入图片丰富内容</li>
<li>点击保存</li>
</ol>
</div>
<div class="guide-section">
<h3>高级笔记富文本</h3>
<ol>
<li>在笔记页面切换到"高级笔记"标签</li>
<li>点击"+"按钮创建新笔记</li>
<li>使用富文本编辑器进行排版</li>
<li>支持加粗斜体标题列表等格式</li>
<li>支持插入图片和链接</li>
<li>点击保存</li> <li>点击保存</li>
</ol> </ol>
</div> </div>
@@ -136,6 +147,38 @@
</div> </div>
</div> </div>
<!-- EPUB Reader Guide -->
<div v-if="activeTab === 'epub'" class="guide-panel">
<div class="guide-section">
<h3>导入书籍</h3>
<ol>
<li>进入"阅读"页面切换到"书库"标签</li>
<li>点击"导入书籍"按钮</li>
<li>选择本地的 EPUB 格式电子书文件</li>
<li>等待导入完成书籍将显示在书库列表中</li>
</ol>
</div>
<div class="guide-section">
<h3>阅读设置</h3>
<ul>
<li><strong>字体调整</strong>支持多种字体切换包括霞鹜文楷OPPO Sans </li>
<li><strong>字号调节</strong>自由调整字体大小适应不同阅读习惯</li>
<li><strong>背景色</strong>支持浅色深色羊皮纸等多种背景</li>
<li><strong>行间距</strong>调节行间距提升阅读舒适度</li>
<li><strong>翻页模式</strong>支持滑动翻页和点击翻页</li>
</ul>
</div>
<div class="guide-section">
<h3>阅读功能</h3>
<ul>
<li><strong>目录导航</strong>点击目录按钮快速跳转章节</li>
<li><strong>进度保存</strong>自动保存阅读进度下次打开自动续读</li>
<li><strong>书签功能</strong>添加书签标记重要位置</li>
<li><strong>全文搜索</strong>在书中搜索关键词</li>
</ul>
</div>
</div>
<!-- Backup Guide --> <!-- Backup Guide -->
<div v-if="activeTab === 'backup'" class="guide-panel"> <div v-if="activeTab === 'backup'" class="guide-panel">
<div class="guide-section"> <div class="guide-section">
@@ -156,7 +199,7 @@
</div> </div>
<div class="guide-section"> <div class="guide-section">
<h3>云备份WebDAV</h3> <h3>云备份WebDAV</h3>
<p>云备份可以将数据同步到支持 WebDAV 的网盘</p> <p>云备份可以将数据同步到支持 WebDAV 的网盘如坚果云Nextcloud </p>
<ol> <ol>
<li>进入"我的"页面点击"云备份"</li> <li>进入"我的"页面点击"云备份"</li>
<li>配置 WebDAV 服务器地址用户名和密码</li> <li>配置 WebDAV 服务器地址用户名和密码</li>
@@ -165,7 +208,9 @@
</ol> </ol>
<p><strong>注意事项</strong></p> <p><strong>注意事项</strong></p>
<ul> <ul>
<li>webdav备份暂时不支持自动备份将在后续版本中添加</li> <li>WebDAV 备份暂时不支持自动备份建议定期手动同步</li>
<li>确保网盘支持 WebDAV 协议并已开启</li>
<li>同步前建议先进行本地备份以防数据冲突</li>
</ul> </ul>
</div> </div>
</div> </div>
@@ -210,16 +255,17 @@ export default {
{ id: 'movies', name: '观影记录' }, { id: 'movies', name: '观影记录' },
{ id: 'reading', name: '阅读管理' }, { id: 'reading', name: '阅读管理' },
{ id: 'notes', name: '笔记功能' }, { id: 'notes', name: '笔记功能' },
{ id: 'epub', name: 'EPUB 阅读' },
{ id: 'backup', name: '数据备份' } { id: 'backup', name: '数据备份' }
], ],
faqs: [ faqs: [
{ {
q: 'MookNote 是免费的吗?', q: 'MookNote 是免费的吗?',
a: '是的MookNote 完全免费,没有任何内购或订阅费用。' a: '是的MookNote 完全免费,没有任何内购或订阅费用。所有功能均可免费使用。'
}, },
{ {
q: '数据存储在哪里?', q: '数据存储在哪里?',
a: '所有数据都存储在您的设备本地,使用 SQLite 数据库。我们不会上传任何数据到服务器。' a: '所有数据都存储在您的设备本地,使用 SQLite 数据库。我们不会上传任何数据到服务器,你的隐私完全由你掌控。'
}, },
{ {
q: '如何迁移数据到新设备?', q: '如何迁移数据到新设备?',
@@ -231,7 +277,15 @@ export default {
}, },
{ {
q: '如何导出数据?', q: '如何导出数据?',
a: '使用本地备份功能可以将数据库导出到指download/mooknote路径下的zip文件。未来版本将支持更多导出格式如 pdfcsvjson 等。' a: '使用本地备份功能可以将数据库导出到指定路径下的 ZIP 文件。你也可以通过 WebDAV 云备份将数据同步到个人云盘。'
},
{
q: '支持哪些电子书格式?',
a: '目前支持 EPUB 格式的电子书。你可以导入本地的 EPUB 文件到书库中阅读。'
},
{
q: '高级笔记和普通笔记有什么区别?',
a: '普通笔记支持纯文本和基础图片插入;高级笔记基于富文本编辑器,支持加粗、斜体、标题、列表等格式排版,以及更丰富的图文混排。'
} }
] ]
} }

View File

@@ -3,26 +3,29 @@
<!-- Hero Section --> <!-- Hero Section -->
<section class="hero"> <section class="hero">
<div class="hero-content"> <div class="hero-content">
<h1 class="hero-title">MookNote</h1> <div class="hero-badge animate-on-scroll">MookNote</div>
<p class="hero-subtitle">记录你的观影阅读与笔记</p> <h1 class="hero-title animate-on-scroll">记录你的<br>观影阅读与笔记</h1>
<p class="hero-desc">一款简洁优雅的记录工具帮助你整理生活中的每一份感动与思考<br>支持观影记录阅读管理和笔记整理让回忆有迹可循</p> <p class="hero-desc animate-on-scroll">一款简洁优雅的记录工具帮助你整理生活中的每一份感动与思考<br>支持观影记录阅读管理和笔记整理让回忆有迹可循</p>
<div class="hero-actions"> <div class="hero-actions animate-on-scroll">
<a href="#download" class="btn btn-primary">立即下载</a> <a href="#download" class="btn btn-primary">立即下载</a>
<router-link to="/guide" class="btn btn-secondary">了解更多</router-link> <router-link to="/guide" class="btn btn-secondary">了解更多</router-link>
</div> </div>
<div class="hero-stats"> <div class="hero-stats animate-on-scroll">
<div class="stat-item"> <div class="stat-item">
<span class="stat-number">webdav支持</span> <span class="stat-number">WebDAV</span>
<span class="stat-label">云备份支持</span>
</div> </div>
<div class="stat-item"> <div class="stat-item">
<span class="stat-number">无需注册</span> <span class="stat-number">无需注册</span>
<span class="stat-label">零门槛使用</span>
</div> </div>
<div class="stat-item"> <div class="stat-item">
<span class="stat-number">本地存储</span> <span class="stat-number">本地存储</span>
<span class="stat-label">隐私安全</span>
</div> </div>
</div> </div>
</div> </div>
<div class="hero-visual"> <div class="hero-visual animate-on-scroll">
<div class="phone-mockup"> <div class="phone-mockup">
<div class="phone-screen"> <div class="phone-screen">
<div class="mockup-header"> <div class="mockup-header">
@@ -69,10 +72,10 @@
<!-- Features Preview --> <!-- Features Preview -->
<section class="features-preview"> <section class="features-preview">
<div class="container"> <div class="container">
<h2 class="section-title">核心功能</h2> <h2 class="section-title animate-on-scroll">核心功能</h2>
<p class="section-subtitle">三大模块全面记录你的生活点滴</p> <p class="section-subtitle animate-on-scroll">三大模块全面记录你的生活点滴</p>
<div class="features-grid"> <div class="features-grid">
<div class="feature-card"> <div class="feature-card animate-on-scroll">
<div class="feature-icon"> <div class="feature-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<rect x="2" y="2" width="20" height="20" rx="2.18"/> <rect x="2" y="2" width="20" height="20" rx="2.18"/>
@@ -88,7 +91,7 @@
<h3>观影记录</h3> <h3>观影记录</h3>
<p>记录已看在看想看的电影添加评分和观影笔记建立自己的观影档案</p> <p>记录已看在看想看的电影添加评分和观影笔记建立自己的观影档案</p>
</div> </div>
<div class="feature-card"> <div class="feature-card animate-on-scroll">
<div class="feature-icon"> <div class="feature-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/> <path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/>
@@ -98,7 +101,7 @@
<h3>阅读管理</h3> <h3>阅读管理</h3>
<p>追踪阅读进度记录已读在读准备读的书籍写下读书心得</p> <p>追踪阅读进度记录已读在读准备读的书籍写下读书心得</p>
</div> </div>
<div class="feature-card"> <div class="feature-card animate-on-scroll">
<div class="feature-icon"> <div class="feature-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/> <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/>
@@ -112,7 +115,7 @@
<p>随时记录灵感和想法支持标签分类让知识井井有条</p> <p>随时记录灵感和想法支持标签分类让知识井井有条</p>
</div> </div>
</div> </div>
<div class="features-cta"> <div class="features-cta animate-on-scroll">
<router-link to="/features" class="btn btn-outline">查看全部功能</router-link> <router-link to="/features" class="btn btn-outline">查看全部功能</router-link>
</div> </div>
</div> </div>
@@ -121,7 +124,7 @@
<!-- Highlights --> <!-- Highlights -->
<section class="highlights"> <section class="highlights">
<div class="container"> <div class="container">
<div class="highlight-row"> <div class="highlight-row animate-on-scroll">
<div class="highlight-content"> <div class="highlight-content">
<h3>简洁优雅的设计</h3> <h3>简洁优雅的设计</h3>
<p>采用极简黑白灰配色界面清爽无干扰专注于内容本身让记录成为一种享受</p> <p>采用极简黑白灰配色界面清爽无干扰专注于内容本身让记录成为一种享受</p>
@@ -161,7 +164,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="highlight-row reverse"> <div class="highlight-row reverse animate-on-scroll">
<div class="highlight-content"> <div class="highlight-content">
<h3>数据安全可控</h3> <h3>数据安全可控</h3>
<p>数据本地存储隐私完全掌控支持本地备份和云备份再也不怕数据丢失</p> <p>数据本地存储隐私完全掌控支持本地备份和云备份再也不怕数据丢失</p>
@@ -202,10 +205,10 @@
<!-- Download Section --> <!-- Download Section -->
<section id="download" class="download"> <section id="download" class="download">
<div class="container"> <div class="container">
<h2 class="section-title">开始使用</h2> <h2 class="section-title animate-on-scroll">开始使用</h2>
<p class="section-subtitle">目前仅支持 Android 平台iOS 版本正在开发中</p> <p class="section-subtitle animate-on-scroll">目前仅支持 Android 平台iOS 版本正在开发中</p>
<div class="download-options"> <div class="download-options">
<div class="download-card"> <div class="download-card animate-on-scroll">
<div class="download-icon"> <div class="download-icon">
<svg viewBox="0 0 24 24" fill="currentColor"> <svg viewBox="0 0 24 24" fill="currentColor">
<path d="M17.523 15.3414c-.5511 0-.9993-.4486-.9993-.9997s.4482-.9993.9993-.9993c.5511 0 .9993.4482.9993.9993.0001.5511-.4482.9997-.9993.9997m-11.046 0c-.5511 0-.9993-.4486-.9993-.9997s.4482-.9993.9993-.9993c.5511 0 .9993.4482.9993.9993 0 .5511-.4482.9997-.9993.9997m11.4045-6.02l1.9973-3.4592a.416.416 0 0 0-.1521-.5676.416.416 0 0 0-.5676.1521l-2.0225 3.503C15.5902 8.4796 13.8533 8.208 12 8.208c-1.8533 0-3.5902.2716-5.1368.7621L4.8407 5.4671a.416.416 0 0 0-.5676-.1521.416.416 0 0 0-.1521.5676l1.9973 3.4592C2.6889 11.1867.3432 14.6589.3432 18.6617h23.3136c0-4.0028-2.3457-7.475-5.775-9.3403"/> <path d="M17.523 15.3414c-.5511 0-.9993-.4486-.9993-.9997s.4482-.9993.9993-.9993c.5511 0 .9993.4482.9993.9993.0001.5511-.4482.9997-.9993.9997m-11.046 0c-.5511 0-.9993-.4486-.9993-.9997s.4482-.9993.9993-.9993c.5511 0 .9993.4482.9993.9993 0 .5511-.4482.9997-.9993.9997m11.4045-6.02l1.9973-3.4592a.416.416 0 0 0-.1521-.5676.416.416 0 0 0-.5676.1521l-2.0225 3.503C15.5902 8.4796 13.8533 8.208 12 8.208c-1.8533 0-3.5902.2716-5.1368.7621L4.8407 5.4671a.416.416 0 0 0-.5676-.1521.416.416 0 0 0-.1521.5676l1.9973 3.4592C2.6889 11.1867.3432 14.6589.3432 18.6617h23.3136c0-4.0028-2.3457-7.475-5.775-9.3403"/>
@@ -213,11 +216,11 @@
</div> </div>
<h3>Android</h3> <h3>Android</h3>
<p>支持 Android 5.0 及以上版本</p> <p>支持 Android 5.0 及以上版本</p>
<a href="https://mooknote.iletter.top/download/MookNote_V0.1.6.apk" class="btn btn-primary">下载 APK</a> <a href="https://mooknote.iletter.top/download/mooknote.apk" class="btn btn-primary">下载 APK</a>
</div> </div>
</div> </div>
<div class="version-info"> <div class="version-info animate-on-scroll">
<p>当前版本v0.1.6 | 更新日期2025年3月</p> <p>当前版本{{ latestVersion }} | 更新日期{{ latestDate }}</p>
</div> </div>
</div> </div>
</section> </section>
@@ -227,15 +230,79 @@
<script> <script>
export default { export default {
name: 'Home', name: 'Home',
data() {
return {
latestVersion: 'v0.1.7',
latestDate: '2025年3月',
visibleSections: {
hero: false,
features: false,
highlights: false,
download: false
}
}
},
mounted() {
fetch('https://api.mooknote.iletter.top/api/changelog')
.then(res => res.json())
.then(data => {
if (data.items && data.items.length) {
const latest = data.items.reduce((max, item) =>
(item.sort || 0) > (max.sort || 0) ? item : max
)
this.latestVersion = latest.version
this.latestDate = latest.date
}
})
.catch(() => {})
// 初始化滚动动画
this.initScrollObserver()
},
methods: { methods: {
showDownloadTip() { showDownloadTip() {
alert('APK 下载功能即将上线,敬请期待!') alert('APK 下载功能即将上线,敬请期待!')
},
initScrollObserver() {
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('is-visible')
}
})
}, { threshold: 0.1 })
// 观察所有需要动画的元素
this.$nextTick(() => {
const animatedElements = this.$el.querySelectorAll('.animate-on-scroll')
animatedElements.forEach(el => observer.observe(el))
})
} }
} }
} }
</script> </script>
<style scoped> <style scoped>
/* Animation utilities */
.animate-on-scroll {
opacity: 0;
transform: translateY(30px);
transition: opacity 0.6s ease, transform 0.6s ease;
}
.animate-on-scroll.is-visible {
opacity: 1;
transform: translateY(0);
}
/* Staggered animation delays */
.animate-on-scroll:nth-child(1) { transition-delay: 0.05s; }
.animate-on-scroll:nth-child(2) { transition-delay: 0.1s; }
.animate-on-scroll:nth-child(3) { transition-delay: 0.15s; }
.animate-on-scroll:nth-child(4) { transition-delay: 0.2s; }
.animate-on-scroll:nth-child(5) { transition-delay: 0.25s; }
.animate-on-scroll:nth-child(6) { transition-delay: 0.3s; }
/* Hero Section */ /* Hero Section */
.hero { .hero {
min-height: calc(100vh - 64px); min-height: calc(100vh - 64px);
@@ -268,6 +335,7 @@ export default {
letter-spacing: -1px; letter-spacing: -1px;
margin-bottom: 16px; margin-bottom: 16px;
color: var(--color-text); color: var(--color-text);
line-height: 1.15;
} }
.hero-subtitle { .hero-subtitle {
@@ -300,7 +368,7 @@ export default {
font-size: 15px; font-size: 15px;
font-weight: 500; font-weight: 500;
text-decoration: none; text-decoration: none;
transition: all 0.2s; transition: all 0.2s ease;
cursor: pointer; cursor: pointer;
border: none; border: none;
} }
@@ -308,10 +376,13 @@ export default {
.btn-primary { .btn-primary {
background: var(--color-accent); background: var(--color-accent);
color: white; color: white;
box-shadow: 0 2px 8px rgba(26, 26, 26, 0.15);
} }
.btn-primary:hover { .btn-primary:hover {
background: #333333; background: #333333;
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(26, 26, 26, 0.2);
} }
.btn-secondary { .btn-secondary {
@@ -321,6 +392,7 @@ export default {
.btn-secondary:hover { .btn-secondary:hover {
background: #EBEBEB; background: #EBEBEB;
transform: translateY(-1px);
} }
.btn-outline { .btn-outline {
@@ -331,6 +403,7 @@ export default {
.btn-outline:hover { .btn-outline:hover {
background: var(--color-bg-secondary); background: var(--color-bg-secondary);
transform: translateY(-1px);
} }
.hero-stats { .hero-stats {
@@ -345,16 +418,16 @@ export default {
.stat-number { .stat-number {
display: block; display: block;
font-size: 25px; font-size: 18px;
font-weight: 700; font-weight: 700;
color: var(--color-text); color: var(--color-text);
line-height: 1; line-height: 1;
margin-bottom: 6px;
} }
.stat-label { .stat-label {
font-size: 13px; font-size: 13px;
color: var(--color-text-muted); color: var(--color-text-muted);
margin-top: 6px;
} }
/* Phone Mockup */ /* Phone Mockup */
@@ -369,6 +442,11 @@ export default {
border-radius: 36px; border-radius: 36px;
padding: 12px; padding: 12px;
box-shadow: 0 25px 80px rgba(0,0,0,0.15); box-shadow: 0 25px 80px rgba(0,0,0,0.15);
transition: transform 0.3s ease;
}
.phone-mockup:hover {
transform: translateY(-8px) rotate(1deg);
} }
.phone-screen { .phone-screen {
@@ -451,6 +529,11 @@ export default {
background: var(--color-bg-secondary); background: var(--color-bg-secondary);
border-radius: 8px; border-radius: 8px;
overflow: hidden; overflow: hidden;
transition: transform 0.2s ease;
}
.mockup-card:hover {
transform: scale(1.03);
} }
.card-image { .card-image {
@@ -528,11 +611,12 @@ export default {
background: var(--color-bg-secondary); background: var(--color-bg-secondary);
border-radius: 16px; border-radius: 16px;
text-align: center; text-align: center;
transition: transform 0.2s; transition: transform 0.3s ease, box-shadow 0.3s ease;
} }
.feature-card:hover { .feature-card:hover {
transform: translateY(-4px); transform: translateY(-6px);
box-shadow: 0 12px 40px rgba(0,0,0,0.08);
} }
.feature-icon { .feature-icon {
@@ -545,6 +629,11 @@ export default {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
color: var(--color-text); color: var(--color-text);
transition: transform 0.3s ease;
}
.feature-card:hover .feature-icon {
transform: scale(1.1);
} }
.feature-icon svg { .feature-icon svg {
@@ -640,6 +729,12 @@ export default {
border-radius: 16px; border-radius: 16px;
padding: 24px; padding: 24px;
box-shadow: 0 4px 24px rgba(0,0,0,0.06); box-shadow: 0 4px 24px rgba(0,0,0,0.06);
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.visual-card:hover {
transform: translateY(-4px);
box-shadow: 0 8px 32px rgba(0,0,0,0.1);
} }
.visual-card.dark { .visual-card.dark {
@@ -647,6 +742,10 @@ export default {
color: white; color: white;
} }
.visual-card.dark:hover {
box-shadow: 0 8px 32px rgba(0,0,0,0.2);
}
.visual-header { .visual-header {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@@ -667,6 +766,11 @@ export default {
height: 56px; height: 56px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-radius: 50%; border-radius: 50%;
transition: transform 0.3s ease;
}
.visual-card:hover .avatar {
transform: scale(1.05);
} }
.info .name { .info .name {
@@ -716,12 +820,17 @@ export default {
padding: 16px 0; padding: 16px 0;
border-bottom: 1px solid rgba(255,255,255,0.1); border-bottom: 1px solid rgba(255,255,255,0.1);
font-size: 15px; font-size: 15px;
transition: color 0.2s ease;
} }
.backup-item:last-child { .backup-item:last-child {
border-bottom: none; border-bottom: none;
} }
.backup-item:hover {
color: rgba(255,255,255,0.8);
}
.backup-icon { .backup-icon {
margin-right: 12px; margin-right: 12px;
} }
@@ -729,6 +838,12 @@ export default {
.arrow { .arrow {
margin-left: auto; margin-left: auto;
color: rgba(255,255,255,0.5); color: rgba(255,255,255,0.5);
transition: transform 0.2s ease, color 0.2s ease;
}
.backup-item:hover .arrow {
transform: translateX(4px);
color: rgba(255,255,255,0.8);
} }
/* Download Section */ /* Download Section */
@@ -751,6 +866,12 @@ export default {
border-radius: 16px; border-radius: 16px;
text-align: center; text-align: center;
min-width: 280px; min-width: 280px;
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.download-card:hover {
transform: translateY(-6px);
box-shadow: 0 12px 40px rgba(0,0,0,0.08);
} }
.download-icon { .download-icon {
@@ -762,6 +883,11 @@ export default {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
transition: transform 0.3s ease;
}
.download-card:hover .download-icon {
transform: scale(1.1);
} }
.download-icon svg { .download-icon svg {
@@ -841,5 +967,11 @@ export default {
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
} }
.animate-on-scroll {
opacity: 1;
transform: none;
transition: none;
}
} }
</style> </style>