/* 多宫格导航页面样式 - 炫酷有氛围版本 */ :root { --primary-color: #6366f1; --secondary-color: #8b5cf6; --accent-color: #06b6d4; --text-light: #f8fafc; --text-dark: #1e293b; --bg-overlay: rgba(0, 0, 0, 0.3); --card-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); --card-glow: 0 0 20px rgba(99, 102, 241, 0.3); --card-text-color: #f8fafc; } /* 顶部右侧滑块(打开方式 + 本地背景) */ .top-right-controls { position: fixed; top: 16px; right: 16px; z-index: 1000; display: flex; gap: 10px; align-items: center; } .ios-switch { position: relative; display: inline-flex; flex-direction: column; align-items: center; gap: 2px; width: 52px; height: 46px; cursor: pointer; } .ios-switch input { opacity: 0; width: 0; height: 0; position: absolute; top: 16px; } .ios-switch .slider { position: absolute; top: 0; left: 0; right: 0; height: 28px; background: linear-gradient(135deg, #334155, #0f172a); border: 1px solid rgba(255,255,255,0.15); border-radius: 999px; box-shadow: 0 4px 12px rgba(0,0,0,0.4) inset; transition: all .25s ease; } .ios-switch .slider::before { content: ''; position: absolute; height: 22px; width: 22px; left: 3px; top: 3px; background: radial-gradient(circle at 30% 30%, #ffffff, #cbd5e1); border-radius: 50%; box-shadow: 0 4px 10px rgba(0,0,0,0.35); transition: transform .25s ease, background .25s ease; } .ios-switch input:checked + .slider { background: linear-gradient(135deg, #22c55e, #0ea5e9); border-color: rgba(255,255,255,0.3); } .ios-switch input:checked + .slider::before { transform: translateX(24px); background: radial-gradient(circle at 30% 30%, #ffffff, #e2e8f0); } /* 备注:已移除内嵌弹层样式,改为新标签/窗口打开 */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Segoe UI', system-ui, sans-serif; min-height: 100vh; overflow-x: hidden; position: relative; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); transition: background 1.5s ease-in-out; } /* 背景图片容器 */ .background-container { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; overflow: hidden; } .background-image { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; transition: opacity 1.5s ease-in-out; } .background-image.active { opacity: 1; } /* 背景遮罩 */ .background-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: var(--bg-overlay); backdrop-filter: blur(2px); } /* 主容器 */ .main-container { min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 2rem; position: relative; z-index: 1; } /* 标题区域 */ .header { text-align: center; margin-bottom: 3rem; color: var(--text-light); } .header h1 { font-size: 3rem; font-weight: 700; margin-bottom: 0.5rem; text-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); background: linear-gradient(135deg, #f0f4ff, #e0e7ff); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .header p { font-size: 1.2rem; opacity: 0.9; font-weight: 300; } /* 多宫格布局 */ .tool-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1.5rem; max-width: 1200px; width: 100%; margin: 0 auto; } /* 工具卡片样式 */ .tool-card { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 2rem 1.5rem; border-radius: 12px; text-decoration: none; transition: all 0.1s cubic-bezier(0.4, 0, 0.2, 1); position: relative; overflow: hidden; backdrop-filter: blur(8px); border: 1px solid rgba(255, 255, 255, 0.2); background: rgba(0, 0, 0, 0.4); box-shadow: var(--card-shadow); min-height: 140px; color: #ffffff; } .tool-card, .tool-card:link, .tool-card:visited, .tool-card:hover, .tool-card:active { color: #ffffff; } .tool-card:hover { background: rgba(60, 60, 60, 0.6); /* 稍微变亮 */ transform: translateY(-5px); } .tool-card::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); transition: left 0.5s; } .tool-card:hover { transform: translateY(-4px) scale(1.02); box-shadow: var(--card-shadow), var(--card-glow); background: rgba(255, 255, 255, 0.15); } .tool-card:hover::before { left: 100%; } .tool-card:active { transform: translateY(-2px) scale(0.98); transition: all 0.1s; } /* 图标样式 */ .tool-icon { font-size: 2.5rem; margin-bottom: 0.75rem; transition: transform 0.3s ease; filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2)); } .tool-card:hover .tool-icon { transform: scale(1.1); } /* 文字样式 */ .tool-text { font-size: 1.1rem; font-weight: 600; text-align: center; transition: all 0.3s ease; text-shadow: 0 1px 4px rgba(0, 0, 0, 0.45); color: var(--card-text-color); } /* 特效容器 */ .effects-container { position: fixed; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 0; } /* 流星特效 */ .meteor { position: absolute; width: 2px; height: 2px; background: linear-gradient(90deg, rgba(255, 255, 255, 0.8), transparent); border-radius: 50%; animation: meteor-fall 10s linear infinite; opacity: 0; } @keyframes meteor-fall { 0% { transform: translateX(-100px) translateY(-100px); opacity: 0; } 10% { opacity: 1; } 90% { opacity: 0.5; } 100% { transform: translateX(100vw) translateY(100vh); opacity: 0; } } /* 换背景按钮容器(按钮 + 本地模式开关) */ .bg-btn-wrapper { position: fixed; bottom: 2rem; right: 2rem; display: flex; align-items: center; gap: 12px; z-index: 1000; } .bg-btn-wrapper .bg-local-switch { flex-direction: row; height: 28px; gap: 0; } .bg-btn-wrapper .bg-local-switch input { top: 0; } /* 换背景按钮(仅图标) */ .change-background-btn { background: transparent; border: none; border-radius: 50%; width: 28px; height: 28px; padding: 0; color: var(--text-light); font-size: 1.2rem; line-height: 1; cursor: pointer; transition: all 0.2s ease; backdrop-filter: none; display: flex; align-items: center; justify-content: center; } .change-background-btn:hover { background: rgba(255, 255, 255, 0.2); outline: 1px solid rgba(255, 255, 255, 0.3); backdrop-filter: blur(10px); } .change-background-btn::after { content: '🎨'; } /* 响应式设计 */ @media (max-width: 768px) { .tool-grid { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 1rem; } .tool-card { padding: 1.5rem 1rem; min-height: 120px; } .tool-icon { font-size: 2rem; } .tool-text { font-size: 1rem; } .header h1 { font-size: 2rem; } .header p { font-size: 1rem; } } @media (max-width: 480px) { .tool-grid { grid-template-columns: repeat(2, 1fr); } .main-container { padding: 1rem; } } .tab-bar { display: flex; gap: 12px; flex-wrap: wrap; justify-content: center; margin-bottom: 1.5rem; } .tab-btn { border: 1px solid rgba(255, 255, 255, 0.25); background: rgba(0, 0, 0, 0.35); color: #ffffff; padding: 0.5rem 1rem; border-radius: 999px; cursor: pointer; font-size: 0.95rem; transition: all 0.2s ease; } .tab-btn.active { background: rgba(255, 255, 255, 0.25); box-shadow: var(--card-shadow); } .tab-pages { width: 100%; max-width: 1200px; } .tab-page { display: none; width: 100%; } .tab-page.active { display: block; } .tab-page.admin-visible .bookmark-toolbar, .tab-page.admin-visible .bookmark-sections, .tab-page.admin-visible .bookmark-empty { display: none; } .bookmark-toolbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; width: 100%; margin-bottom: 16px; } .bookmark-search { flex: 1; min-width: 200px; padding: 0.5rem 0.8rem; border-radius: 8px; border: 1px solid rgba(255, 255, 255, 0.3); background: rgba(0, 0, 0, 0.35); color: #ffffff; outline: none; } .bookmark-btn { border: 1px solid rgba(255, 255, 255, 0.25); background: rgba(0, 0, 0, 0.35); color: #ffffff; padding: 0.5rem 0.9rem; border-radius: 8px; cursor: pointer; font-size: 0.9rem; transition: all 0.2s ease; } .bookmark-btn.primary { background: rgba(99, 102, 241, 0.5); } .bookmark-btn.danger { background: rgba(239, 68, 68, 0.5); } .bookmark-sections { display: flex; flex-direction: column; gap: 14px; } .bookmark-section { padding: 12px; border-radius: 12px; background: rgba(0, 0, 0, 0.28); border: 1px solid rgba(255, 255, 255, 0.18); } .bookmark-section-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .bookmark-section-title { font-weight: 600; font-size: 1rem; } .category-toggle { width: 28px; height: 28px; border-radius: 50%; border: 1px solid rgba(255, 255, 255, 0.2); background: rgba(0, 0, 0, 0.35); color: #ffffff; cursor: pointer; } .bookmark-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 10px; margin-top: 10px; } .bookmark-section.collapsed .bookmark-grid { display: none; } .bookmark-item { display: flex; align-items: center; gap: 8px; padding: 8px 10px; border-radius: 8px; background: rgba(0, 0, 0, 0.35); border: 1px solid rgba(255, 255, 255, 0.2); text-decoration: none; color: #ffffff; transition: all 0.2s ease; } .bookmark-item:hover { transform: translateY(-2px); background: rgba(255, 255, 255, 0.2); } .bookmark-icon { width: 16px; height: 16px; object-fit: contain; } .bookmark-text { font-size: 0.95rem; } .bookmark-empty { text-align: center; padding: 20px 0; opacity: 0.8; } .bookmark-admin { display: none; margin-top: 18px; padding: 16px; border-radius: 12px; background: rgba(0, 0, 0, 0.35); border: 1px solid rgba(255, 255, 255, 0.2); } .bookmark-admin.active { display: block; } .admin-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; } .admin-title { font-size: 1.1rem; font-weight: 600; } .admin-columns { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 16px; } .admin-panel { padding: 12px; border-radius: 10px; background: rgba(0, 0, 0, 0.3); border: 1px solid rgba(255, 255, 255, 0.18); } .admin-panel-title { font-weight: 600; margin-bottom: 8px; } .admin-form { display: grid; gap: 10px; margin-bottom: 12px; } .form-row { display: flex; flex-direction: column; gap: 6px; } .form-row input, .form-row select, .form-row textarea { border-radius: 8px; border: 1px solid rgba(255, 255, 255, 0.25); background: rgba(0, 0, 0, 0.35); color: #ffffff; padding: 0.45rem 0.6rem; outline: none; } .form-actions { display: flex; gap: 10px; } .admin-list { display: flex; flex-direction: column; gap: 8px; } .admin-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 8px; border-radius: 8px; background: rgba(0, 0, 0, 0.25); border: 1px solid rgba(255, 255, 255, 0.12); } .admin-row-main { display: flex; flex-direction: column; gap: 2px; } .admin-row-title { font-weight: 600; } .admin-row-meta { font-size: 0.85rem; opacity: 0.8; } .admin-row-actions { display: flex; gap: 6px; } .icon-input-row { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; } .icon-preview { display: flex; align-items: center; gap: 8px; min-height: 24px; opacity: 0.9; } .icon-preview img { width: 20px; height: 20px; object-fit: contain; } .readonly { padding: 0.45rem 0.6rem; border-radius: 8px; background: rgba(0, 0, 0, 0.2); border: 1px solid rgba(255, 255, 255, 0.15); min-height: 36px; display: flex; align-items: center; } .icon-picker { position: fixed; inset: 0; display: none; align-items: center; justify-content: center; background: rgba(0, 0, 0, 0.65); z-index: 2000; } .icon-picker.active { display: flex; } .fitness-diary-reminder, .weekly-report-reminder { position: fixed; inset: 0; display: none; align-items: center; justify-content: center; z-index: 3000; } .fitness-diary-reminder.active, .weekly-report-reminder.active { display: flex; } .fitness-diary-reminder-backdrop, .weekly-report-reminder-backdrop { position: absolute; inset: 0; background: rgba(3, 7, 18, 0.58); backdrop-filter: blur(8px); } .fitness-diary-reminder-panel, .weekly-report-reminder-panel { position: relative; width: min(480px, calc(100vw - 32px)); padding: 28px 24px 22px; border-radius: 20px; background: linear-gradient(135deg, rgba(15, 23, 42, 0.92), rgba(30, 41, 59, 0.82)); border: 1px solid rgba(255, 255, 255, 0.24); box-shadow: 0 24px 70px rgba(15, 23, 42, 0.45), 0 0 28px rgba(99, 102, 241, 0.18); color: #ffffff; overflow: hidden; } .fitness-diary-reminder-panel::before, .weekly-report-reminder-panel::before { content: ''; position: absolute; inset: 0; background: linear-gradient(135deg, rgba(99, 102, 241, 0.16), rgba(6, 182, 212, 0.06), rgba(34, 197, 94, 0.08)); pointer-events: none; } .fitness-diary-reminder-close, .weekly-report-reminder-close { position: absolute; top: 12px; right: 12px; width: 34px; height: 34px; border: 1px solid rgba(255, 255, 255, 0.18); border-radius: 50%; background: rgba(255, 255, 255, 0.08); color: #ffffff; font-size: 20px; cursor: pointer; z-index: 1; } .fitness-diary-reminder-badge, .fitness-diary-reminder-title, .fitness-diary-reminder-text, .fitness-diary-reminder-dates, .fitness-diary-reminder-actions, .weekly-report-reminder-badge, .weekly-report-reminder-title, .weekly-report-reminder-text, .weekly-report-reminder-dates, .weekly-report-reminder-actions { position: relative; z-index: 1; } .fitness-diary-reminder-badge, .weekly-report-reminder-badge { display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; border-radius: 999px; background: rgba(255, 255, 255, 0.12); border: 1px solid rgba(255, 255, 255, 0.16); font-size: 0.84rem; letter-spacing: 0.04em; } .fitness-diary-reminder-title, .weekly-report-reminder-title { margin-top: 14px; font-size: 1.55rem; line-height: 1.3; } .fitness-diary-reminder-text, .weekly-report-reminder-text { margin-top: 12px; color: rgba(255, 255, 255, 0.86); line-height: 1.7; } .fitness-diary-reminder-dates, .weekly-report-reminder-dates { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 18px; } .fitness-diary-reminder-date, .weekly-report-reminder-date { display: inline-flex; align-items: center; padding: 8px 12px; border-radius: 999px; background: rgba(255, 255, 255, 0.09); border: 1px solid rgba(255, 255, 255, 0.14); color: rgba(255, 255, 255, 0.96); font-size: 0.92rem; } .fitness-diary-reminder-actions, .weekly-report-reminder-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 22px; } .icon-picker-panel { width: min(960px, 95vw); max-height: 80vh; background: rgba(15, 23, 42, 0.95); border-radius: 12px; padding: 14px; border: 1px solid rgba(255, 255, 255, 0.2); display: flex; flex-direction: column; gap: 10px; } .icon-picker-header { display: flex; justify-content: space-between; align-items: center; font-weight: 600; } .icon-picker-grid { display: grid; grid-template-columns: repeat(20, 24px); gap: 6px; overflow: auto; padding: 8px; border-radius: 10px; background: rgba(0, 0, 0, 0.35); } .icon-picker-item { width: 24px; height: 24px; border-radius: 6px; border: 1px solid rgba(255, 255, 255, 0.15); background: rgba(0, 0, 0, 0.2); cursor: pointer; display: flex; align-items: center; justify-content: center; } .icon-picker-item img { width: 16px; height: 16px; } @media (max-width: 768px) { .bookmark-grid { grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); } .icon-picker-grid { grid-template-columns: repeat(10, 24px); } .fitness-diary-reminder-panel, .weekly-report-reminder-panel { padding: 24px 18px 18px; } .fitness-diary-reminder-title, .weekly-report-reminder-title { font-size: 1.35rem; } } @media (max-width: 480px) { .bookmark-toolbar { flex-direction: column; align-items: stretch; } .icon-picker-grid { grid-template-columns: repeat(6, 24px); } .fitness-diary-reminder-actions, .weekly-report-reminder-actions { flex-direction: column; } .fitness-diary-reminder-actions .bookmark-btn, .weekly-report-reminder-actions .bookmark-btn { width: 100%; } }