Files
cutThink_lite/preview-ui.html
Claude e2ea309ee6 feat: CutThenThink v3.0 初始版本
完整实现 Tauri + Vanilla JS 轻量级截图工具

Phase 1 - 项目搭建
- Tauri 2.x 项目初始化
- Vite 前端项目搭建
- 基础 UI 框架(CSS 变量、组件库)
- 构建配置优化

Phase 2 - 核心截图功能
- 全屏/区域/窗口截图
- 截图预览和管理
- 文件命名和缩略图
- 全局快捷键集成

Phase 3 - 上传与存储
- 多图床上传(GitHub/Imgur/自定义)
- 配置管理系统
- SQLite 数据库

Phase 4 - OCR 集成
- 云端 OCR(百度/腾讯云)
- 插件管理系统
- 本地 OCR 插件(Go)
- OCR 结果处理

Phase 5 - AI 分类系统
- Claude/OpenAI API 集成
- Prompt 模板引擎
- 模板管理界面
- 自动分类流程

Phase 6 - 历史记录与管理
- 图库视图(网格/列表)
- 搜索与筛选
- 批量操作
- 导出功能(JSON/CSV/ZIP)

Phase 7 - 打包与发布
- 多平台构建配置
- CI/CD 工作流
- 图标和资源
- 安装包配置

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 18:59:26 +08:00

1165 lines
35 KiB
HTML

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CutThenThink v3.0 - UI Preview</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
:root {
/* Color Palette */
--primary: #8B6914;
--primary-hover: #A67C00;
--primary-light: #F5E6C8;
--bg-main: #F8F9FA;
--bg-card: #FFFFFF;
--bg-sidebar: #FFFFFF;
--border-color: #E5E7EB;
--text-primary: #1F2937;
--text-secondary: #6B7280;
--text-muted: #9CA3AF;
--danger: #EF4444;
--success: #10B981;
--warning: #F59E0B;
--info: #3B82F6;
--shadow-sm: 0 1px 2px rgba(0,0,0,0.05);
--shadow-md: 0 4px 6px -1px rgba(0,0,0,0.1);
--shadow-lg: 0 10px 15px -3px rgba(0,0,0,0.1);
--radius-sm: 6px;
--radius-md: 8px;
--radius-lg: 12px;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
background: var(--bg-main);
color: var(--text-primary);
line-height: 1.5;
min-height: 100vh;
}
/* ==================== Header ==================== */
.header {
background: var(--bg-card);
border-bottom: 1px solid var(--border-color);
padding: 12px 24px;
display: flex;
align-items: center;
justify-content: space-between;
position: sticky;
top: 0;
z-index: 100;
}
.logo {
display: flex;
align-items: center;
gap: 12px;
}
.logo-icon {
width: 36px;
height: 36px;
background: var(--primary);
border-radius: var(--radius-sm);
display: flex;
align-items: center;
justify-content: center;
font-size: 20px;
}
.logo-text {
font-size: 18px;
font-weight: 600;
color: var(--text-primary);
}
.logo-version {
font-size: 11px;
background: var(--primary-light);
color: var(--primary);
padding: 2px 6px;
border-radius: 4px;
margin-left: 6px;
}
.search-bar {
flex: 1;
max-width: 400px;
margin: 0 24px;
}
.search-input {
width: 100%;
padding: 10px 16px 10px 40px;
border: 1px solid var(--border-color);
border-radius: var(--radius-md);
background: var(--bg-main);
font-size: 14px;
transition: all 0.2s;
}
.search-input:focus {
outline: none;
border-color: var(--primary);
box-shadow: 0 0 0 3px var(--primary-light);
}
.search-wrapper {
position: relative;
}
.search-icon {
position: absolute;
left: 12px;
top: 50%;
transform: translateY(-50%);
color: var(--text-muted);
font-size: 16px;
}
.header-actions {
display: flex;
gap: 12px;
}
.icon-btn {
width: 40px;
height: 40px;
border: none;
background: transparent;
border-radius: var(--radius-sm);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 18px;
transition: all 0.2s;
}
.icon-btn:hover {
background: var(--bg-main);
}
/* ==================== Main Container ==================== */
.main-container {
display: flex;
height: calc(100vh - 61px);
}
/* ==================== Sidebar ==================== */
.sidebar {
width: 240px;
background: var(--bg-sidebar);
border-right: 1px solid var(--border-color);
padding: 16px 12px;
display: flex;
flex-direction: column;
}
.nav-section {
margin-bottom: 24px;
}
.nav-section-title {
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
color: var(--text-muted);
padding: 0 12px 8px;
letter-spacing: 0.5px;
}
.nav-item {
display: flex;
align-items: center;
gap: 12px;
padding: 10px 12px;
border-radius: var(--radius-sm);
cursor: pointer;
transition: all 0.2s;
margin-bottom: 2px;
font-size: 14px;
color: var(--text-secondary);
}
.nav-item:hover {
background: var(--bg-main);
color: var(--text-primary);
}
.nav-item.active {
background: var(--primary-light);
color: var(--primary);
font-weight: 500;
}
.nav-icon {
font-size: 18px;
width: 24px;
text-align: center;
}
.sidebar-footer {
margin-top: auto;
padding-top: 16px;
border-top: 1px solid var(--border-color);
}
/* ==================== Content Area ==================== */
.content-area {
flex: 1;
padding: 24px;
overflow-y: auto;
display: flex;
flex-direction: column;
gap: 24px;
}
/* ==================== Screenshot Panel ==================== */
.screenshot-panel {
background: var(--bg-card);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-sm);
padding: 20px;
}
.panel-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 16px;
}
.panel-title {
font-size: 16px;
font-weight: 600;
display: flex;
align-items: center;
gap: 8px;
}
.toolbar {
display: flex;
gap: 12px;
margin-bottom: 20px;
}
.btn {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 12px 20px;
border: none;
border-radius: var(--radius-md);
font-size: 14px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
}
.btn.primary {
background: var(--primary);
color: white;
}
.btn.primary:hover {
background: var(--primary-hover);
}
.btn.secondary {
background: var(--bg-main);
color: var(--text-primary);
border: 1px solid var(--border-color);
}
.btn.secondary:hover {
background: var(--border-color);
}
.btn.action {
background: var(--bg-main);
color: var(--text-secondary);
border: 1px solid var(--border-color);
padding: 10px 16px;
}
.btn.action:hover:not(:disabled) {
border-color: var(--primary);
color: var(--primary);
}
.btn:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.shortcut {
font-size: 11px;
opacity: 0.7;
padding: 2px 6px;
background: rgba(0,0,0,0.1);
border-radius: 4px;
}
.btn.primary .shortcut {
background: rgba(255,255,255,0.2);
}
.preview-container {
background: var(--bg-main);
border-radius: var(--radius-md);
aspect-ratio: 16/9;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 16px;
border: 2px dashed var(--border-color);
overflow: hidden;
}
.preview-container.has-image {
border-style: solid;
border-color: var(--border-color);
}
.preview-img {
max-width: 100%;
max-height: 100%;
object-fit: contain;
}
.placeholder {
text-align: center;
color: var(--text-muted);
}
.placeholder-icon {
font-size: 48px;
opacity: 0.5;
margin-bottom: 12px;
}
.actions {
display: flex;
gap: 12px;
flex-wrap: wrap;
}
/* ==================== AI Result Panel ==================== */
.ai-result {
background: linear-gradient(135deg, #F5E6C8 0%, #FFF9E6 100%);
border-radius: var(--radius-md);
padding: 16px 20px;
margin-top: 16px;
border: 1px solid rgba(139, 105, 20, 0.2);
}
.ai-result.hidden {
display: none;
}
.result-header {
display: flex;
align-items: center;
gap: 8px;
font-weight: 600;
color: var(--primary);
margin-bottom: 12px;
}
.result-content {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
}
.field {
display: flex;
flex-direction: column;
gap: 4px;
}
.field.full {
grid-column: 1 / -1;
}
.field label {
font-size: 12px;
color: var(--text-muted);
font-weight: 500;
}
.field .value {
font-size: 14px;
color: var(--text-primary);
}
.tags {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.tag {
display: inline-flex;
align-items: center;
padding: 4px 10px;
background: white;
border-radius: 20px;
font-size: 12px;
color: var(--text-primary);
border: 1px solid rgba(139, 105, 20, 0.2);
}
.tag-icon {
margin-right: 4px;
}
/* ==================== Gallery Section ==================== */
.gallery-section {
background: var(--bg-card);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-sm);
padding: 20px;
}
.section-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 16px;
}
.section-title {
font-size: 16px;
font-weight: 600;
display: flex;
align-items: center;
gap: 8px;
}
.filter-tabs {
display: flex;
gap: 8px;
}
.filter-tab {
padding: 6px 12px;
border-radius: 20px;
font-size: 13px;
cursor: pointer;
transition: all 0.2s;
background: var(--bg-main);
color: var(--text-secondary);
}
.filter-tab:hover {
background: var(--border-color);
}
.filter-tab.active {
background: var(--primary);
color: white;
}
.gallery-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 16px;
}
.gallery-item {
background: var(--bg-main);
border-radius: var(--radius-md);
overflow: hidden;
cursor: pointer;
transition: all 0.2s;
border: 1px solid var(--border-color);
}
.gallery-item:hover {
transform: translateY(-2px);
box-shadow: var(--shadow-md);
}
.gallery-thumb {
aspect-ratio: 16/10;
background: linear-gradient(135deg, #E5E7EB 0%, #F3F4F6 100%);
display: flex;
align-items: center;
justify-content: center;
font-size: 48px;
}
.gallery-thumb.code {
background: linear-gradient(135deg, #1E293B 0%, #334155 100%);
color: #60A5FA;
}
.gallery-thumb.document {
background: linear-gradient(135deg, #EEF2FF 0%, #E0E7FF 100%);
color: #6366F1;
}
.gallery-thumb.chat {
background: linear-gradient(135deg, #DCFCE7 0%, #D1FAE5 100%);
color: #10B981;
}
.gallery-thumb.invoice {
background: linear-gradient(135deg, #FEF3C7 0%, #FDE68A 100%);
color: #F59E0B;
}
.gallery-info {
padding: 12px;
}
.gallery-category {
font-size: 12px;
font-weight: 600;
color: var(--primary);
margin-bottom: 4px;
}
.gallery-time {
font-size: 11px;
color: var(--text-muted);
}
.gallery-actions {
display: flex;
gap: 8px;
margin-top: 8px;
padding-top: 8px;
border-top: 1px solid var(--border-color);
}
.gallery-action {
padding: 4px 8px;
font-size: 11px;
background: white;
border-radius: 4px;
cursor: pointer;
transition: all 0.2s;
}
.gallery-action:hover {
background: var(--primary);
color: white;
}
/* ==================== Settings Modal ==================== */
.modal-overlay {
position: fixed;
inset: 0;
background: rgba(0,0,0,0.5);
display: none;
align-items: center;
justify-content: center;
z-index: 1000;
}
.modal-overlay.show {
display: flex;
}
.modal {
background: var(--bg-card);
border-radius: var(--radius-lg);
width: 90%;
max-width: 800px;
max-height: 80vh;
overflow: hidden;
box-shadow: var(--shadow-lg);
}
.modal-header {
padding: 20px 24px;
border-bottom: 1px solid var(--border-color);
display: flex;
align-items: center;
justify-content: space-between;
}
.modal-title {
font-size: 18px;
font-weight: 600;
}
.modal-close {
width: 36px;
height: 36px;
border: none;
background: var(--bg-main);
border-radius: 50%;
cursor: pointer;
font-size: 18px;
display: flex;
align-items: center;
justify-content: center;
}
.modal-body {
display: flex;
height: 500px;
}
.modal-sidebar {
width: 180px;
background: var(--bg-main);
border-right: 1px solid var(--border-color);
padding: 16px 12px;
}
.modal-nav-item {
display: flex;
align-items: center;
gap: 10px;
padding: 10px 12px;
border-radius: var(--radius-sm);
cursor: pointer;
font-size: 14px;
color: var(--text-secondary);
margin-bottom: 2px;
}
.modal-nav-item:hover {
background: white;
}
.modal-nav-item.active {
background: white;
color: var(--primary);
font-weight: 500;
box-shadow: var(--shadow-sm);
}
.modal-content {
flex: 1;
padding: 24px;
overflow-y: auto;
}
.content-title {
font-size: 16px;
font-weight: 600;
margin-bottom: 20px;
}
.form-group {
margin-bottom: 20px;
}
.form-label {
display: block;
font-size: 14px;
font-weight: 500;
margin-bottom: 8px;
color: var(--text-primary);
}
.form-input, .form-select {
width: 100%;
padding: 10px 12px;
border: 1px solid var(--border-color);
border-radius: var(--radius-sm);
font-size: 14px;
transition: all 0.2s;
}
.form-input:focus, .form-select:focus {
outline: none;
border-color: var(--primary);
box-shadow: 0 0 0 3px var(--primary-light);
}
.plugin-card {
background: var(--bg-main);
border-radius: var(--radius-md);
padding: 16px;
border: 1px solid var(--border-color);
}
.plugin-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12px;
}
.plugin-name {
font-weight: 600;
display: flex;
align-items: center;
gap: 8px;
}
.plugin-status {
font-size: 12px;
padding: 4px 8px;
border-radius: 20px;
}
.plugin-status.installed {
background: #D1FAE5;
color: #059669;
}
.plugin-status.not-installed {
background: #F3F4F6;
color: var(--text-muted);
}
.plugin-info {
font-size: 13px;
color: var(--text-secondary);
margin-bottom: 12px;
}
.btn-sm {
padding: 8px 16px;
font-size: 13px;
}
/* ==================== Toast Notification ==================== */
.toast-container {
position: fixed;
bottom: 24px;
right: 24px;
z-index: 2000;
display: flex;
flex-direction: column;
gap: 12px;
}
.toast {
background: var(--bg-card);
border-radius: var(--radius-md);
padding: 14px 18px;
box-shadow: var(--shadow-lg);
display: flex;
align-items: center;
gap: 12px;
min-width: 300px;
border-left: 4px solid var(--primary);
animation: slideIn 0.3s ease;
}
@keyframes slideIn {
from {
transform: translateX(100%);
opacity: 0;
}
to {
transform: translateX(0);
opacity: 1;
}
}
.toast-icon {
font-size: 20px;
}
.toast-content {
flex: 1;
}
.toast-title {
font-size: 14px;
font-weight: 500;
}
.toast-message {
font-size: 13px;
color: var(--text-secondary);
}
/* ==================== Stats Cards ==================== */
.stats-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
}
.stat-card {
background: var(--bg-card);
border-radius: var(--radius-md);
padding: 16px;
border: 1px solid var(--border-color);
}
.stat-label {
font-size: 12px;
color: var(--text-muted);
margin-bottom: 4px;
}
.stat-value {
font-size: 24px;
font-weight: 600;
color: var(--text-primary);
}
.stat-change {
font-size: 12px;
color: var(--success);
}
/* Demo active states */
.demo-btn {
background: var(--primary);
color: white;
border: none;
padding: 8px 16px;
border-radius: var(--radius-sm);
cursor: pointer;
font-size: 13px;
margin-right: 8px;
}
</style>
</head>
<body>
<!-- Header -->
<header class="header">
<div class="logo">
<div class="logo-icon">✂️</div>
<span class="logo-text">CutThenThink</span>
<span class="logo-version">v3.0</span>
</div>
<div class="search-bar">
<div class="search-wrapper">
<span class="search-icon">🔍</span>
<input type="text" class="search-input" placeholder="搜索截图记录、标签、分类...">
</div>
</div>
<div class="header-actions">
<button class="icon-btn" title="快捷键设置">⌨️</button>
<button class="icon-btn" onclick="openSettings()" title="设置">⚙️</button>
</div>
</header>
<!-- Main Container -->
<div class="main-container">
<!-- Sidebar -->
<aside class="sidebar">
<div class="nav-section">
<div class="nav-section-title">主要功能</div>
<div class="nav-item active">
<span class="nav-icon">📷</span>
<span>截图</span>
</div>
<div class="nav-item">
<span class="nav-icon">🖼️</span>
<span>图库</span>
</div>
<div class="nav-item">
<span class="nav-icon">☁️</span>
<span>上传管理</span>
</div>
</div>
<div class="nav-section">
<div class="nav-section-title">智能功能</div>
<div class="nav-item">
<span class="nav-icon">🔍</span>
<span>OCR 识别</span>
</div>
<div class="nav-item">
<span class="nav-icon">🤖</span>
<span>AI 分类</span>
</div>
<div class="nav-item">
<span class="nav-icon">📝</span>
<span>Prompt 模板</span>
</div>
</div>
<div class="sidebar-footer">
<div class="nav-item">
<span class="nav-icon">📊</span>
<span>统计</span>
</div>
</div>
</aside>
<!-- Content Area -->
<main class="content-area">
<!-- Screenshot Panel -->
<section class="screenshot-panel">
<div class="panel-header">
<div class="panel-title">📷 截图</div>
<div style="font-size: 12px; color: var(--text-muted);">
快捷键: <span style="background: var(--bg-main); padding: 2px 6px; border-radius: 4px;">Ctrl+Shift+A</span>
</div>
</div>
<div class="toolbar">
<button class="btn primary">
<span>📷</span>
<span>截全屏</span>
<span class="shortcut">Ctrl+Shift+A</span>
</button>
<button class="btn secondary">
<span></span>
<span>区域截图</span>
<span class="shortcut">Ctrl+Shift+R</span>
</button>
</div>
<div class="preview-container" id="preview-container">
<div class="placeholder">
<div class="placeholder-icon">📷</div>
<div>请先截图或拖拽图片到此处</div>
</div>
</div>
<div class="actions">
<button class="btn action" disabled>
<span>☁️</span>
<span>上传</span>
</button>
<button class="btn action" disabled>
<span>🔍</span>
<span>OCR识别</span>
</button>
<button class="btn action" disabled>
<span>🤖</span>
<span>AI分类</span>
</button>
<button class="btn action" disabled>
<span>💾</span>
<span>保存</span>
</button>
<button class="btn action" disabled>
<span>📋</span>
<span>复制</span>
</button>
</div>
<!-- AI Result Panel (Demo) -->
<div class="ai-result" id="ai-result" style="display: block;">
<div class="result-header">
<span>🤖</span>
<span>AI 分析结果</span>
<span style="margin-left: auto; font-size: 12px; opacity: 0.7;">置信度: 95%</span>
</div>
<div class="result-content">
<div class="field">
<label>分类</label>
<span class="value">💻 代码片段</span>
</div>
<div class="field">
<label>编程语言</label>
<span class="value">Rust</span>
</div>
<div class="field">
<label>标签</label>
<div class="tags">
<span class="tag"><span class="tag-icon">🏷️</span>Rust</span>
<span class="tag"><span class="tag-icon">🏷️</span>Tauri</span>
<span class="tag"><span class="tag-icon">🏷️</span>函数</span>
</div>
</div>
<div class="field full">
<label>摘要</label>
<span class="value">Rust OCR 模块的结构体定义和异步识别函数</span>
</div>
</div>
</div>
</section>
<!-- Gallery Section -->
<section class="gallery-section">
<div class="section-header">
<div class="section-title">🖼️ 最近记录</div>
<div class="filter-tabs">
<div class="filter-tab active">全部</div>
<div class="filter-tab">文档</div>
<div class="filter-tab">代码</div>
<div class="filter-tab">对话</div>
<div class="filter-tab">发票</div>
</div>
</div>
<div class="gallery-grid">
<div class="gallery-item">
<div class="gallery-thumb code">💻</div>
<div class="gallery-info">
<div class="gallery-category">代码片段</div>
<div class="gallery-time">2 分钟前</div>
<div class="gallery-actions">
<span class="gallery-action">🔍</span>
<span class="gallery-action">📋</span>
<span class="gallery-action">🗑️</span>
</div>
</div>
</div>
<div class="gallery-item">
<div class="gallery-thumb document">📄</div>
<div class="gallery-info">
<div class="gallery-category">文档资料</div>
<div class="gallery-time">1 小时前</div>
<div class="gallery-actions">
<span class="gallery-action">🔍</span>
<span class="gallery-action">📋</span>
<span class="gallery-action">🗑️</span>
</div>
</div>
</div>
<div class="gallery-item">
<div class="gallery-thumb chat">💬</div>
<div class="gallery-info">
<div class="gallery-category">对话记录</div>
<div class="gallery-time">3 小时前</div>
<div class="gallery-actions">
<span class="gallery-action">🔍</span>
<span class="gallery-action">📋</span>
<span class="gallery-action">🗑️</span>
</div>
</div>
</div>
<div class="gallery-item">
<div class="gallery-thumb invoice">🧾</div>
<div class="gallery-info">
<div class="gallery-category">发票票据</div>
<div class="gallery-time">昨天</div>
<div class="gallery-actions">
<span class="gallery-action">🔍</span>
<span class="gallery-action">📋</span>
<span class="gallery-action">🗑️</span>
</div>
</div>
</div>
</div>
</section>
</main>
</div>
<!-- Settings Modal -->
<div class="modal-overlay" id="settings-modal">
<div class="modal">
<div class="modal-header">
<div class="modal-title">⚙️ 设置</div>
<button class="modal-close" onclick="closeSettings()"></button>
</div>
<div class="modal-body">
<div class="modal-sidebar">
<div class="modal-nav-item active">🎛️ 通用</div>
<div class="modal-nav-item">🔍 OCR</div>
<div class="modal-nav-item">🤖 AI</div>
<div class="modal-nav-item">📝 Prompts</div>
<div class="modal-nav-item">☁️ 上传</div>
<div class="modal-nav-item">🧩 插件</div>
<div class="modal-nav-item">⌨️ 快捷键</div>
<div class="modal-nav-item">🎨 外观</div>
</div>
<div class="modal-content">
<div class="content-title">🔍 OCR 配置</div>
<div class="form-group">
<label class="form-label">OCR 提供商</label>
<select class="form-select">
<option>云端 API (默认)</option>
<option>本地插件 (需下载)</option>
</select>
</div>
<div class="plugin-card">
<div class="plugin-header">
<div class="plugin-name">
<span>🧩</span>
<span>离线 OCR 插件</span>
</div>
<span class="plugin-status not-installed">未安装</span>
</div>
<div class="plugin-info">
大小: 约 15MB • 支持中英文混合识别 • 无需网络连接
</div>
<button class="btn btn-sm primary">📥 下载离线插件</button>
</div>
<div class="form-group" style="margin-top: 24px;">
<label class="form-label">云端 API 提供商</label>
<select class="form-select">
<option>百度 OCR</option>
<option>阿里云 OCR</option>
<option>腾讯云 OCR</option>
<option>其他 API</option>
</select>
</div>
<div class="form-group">
<label class="form-label">API Key</label>
<input type="password" class="form-input" placeholder="请输入 API Key">
</div>
<div class="form-group">
<label class="form-label">Secret Key</label>
<input type="password" class="form-input" placeholder="请输入 Secret Key">
</div>
</div>
</div>
</div>
</div>
<!-- Toast Container -->
<div class="toast-container">
<div class="toast">
<span class="toast-icon"></span>
<div class="toast-content">
<div class="toast-title">截图成功</div>
<div class="toast-message">已保存到 /Screenshots/screenshot_20250212.png</div>
</div>
</div>
</div>
<script>
function openSettings() {
document.getElementById('settings-modal').classList.add('show');
}
function closeSettings() {
document.getElementById('settings-modal').classList.remove('show');
}
// Close modal on overlay click
document.getElementById('settings-modal').addEventListener('click', function(e) {
if (e.target === this) {
closeSettings();
}
});
// Filter tabs interaction
document.querySelectorAll('.filter-tab').forEach(tab => {
tab.addEventListener('click', function() {
document.querySelectorAll('.filter-tab').forEach(t => t.classList.remove('active'));
this.classList.add('active');
});
});
// Nav items interaction
document.querySelectorAll('.nav-item').forEach(item => {
item.addEventListener('click', function() {
document.querySelectorAll('.nav-item').forEach(i => i.classList.remove('active'));
this.classList.add('active');
});
});
// Modal nav items interaction
document.querySelectorAll('.modal-nav-item').forEach(item => {
item.addEventListener('click', function() {
document.querySelectorAll('.modal-nav-item').forEach(i => i.classList.remove('active'));
this.classList.add('active');
});
});
</script>
</body>
</html>