|
@@ -1,268 +1,185 @@
|
|
<template>
|
|
<template>
|
|
- <div class="holographic-container min-h-screen bg-gradient-to-br from-purple-900 via-blue-900 to-indigo-900">
|
|
|
|
|
|
+ <div class="holographic-container min-h-screen bg-gradient-to-br from-blue-900 to-purple-900">
|
|
<!-- 顶部导航栏 -->
|
|
<!-- 顶部导航栏 -->
|
|
- <div class="holographic-nav p-4">
|
|
|
|
- <div class="container mx-auto flex justify-between items-center">
|
|
|
|
- <h1 class="text-2xl font-bold text-white">全息设计系统</h1>
|
|
|
|
- <div class="flex space-x-4">
|
|
|
|
- <button class="holographic-btn">首页</button>
|
|
|
|
- <button class="holographic-btn">组件</button>
|
|
|
|
- <button class="holographic-btn">文档</button>
|
|
|
|
|
|
+ <div class="holographic-header">
|
|
|
|
+ <div class="holographic-header-content">
|
|
|
|
+ <div class="holographic-logo">
|
|
|
|
+ <img :src="logoUrl" alt="Holographic Logo" class="holographic-logo-img">
|
|
|
|
+ <span class="holographic-logo-text">Holographic</span>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="holographic-nav">
|
|
|
|
+ <a href="#" class="holographic-nav-item active">首页</a>
|
|
|
|
+ <a href="#" class="holographic-nav-item">组件</a>
|
|
|
|
+ <a href="#" class="holographic-nav-item">文档</a>
|
|
|
|
+ <a href="#" class="holographic-nav-item">主题</a>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="holographic-header-actions">
|
|
|
|
+ <button class="holographic-btn text">
|
|
|
|
+ <Search class="w-5 h-5" />
|
|
|
|
+ </button>
|
|
|
|
+ <button class="holographic-btn text">
|
|
|
|
+ <Bell class="w-5 h-5" />
|
|
|
|
+ </button>
|
|
|
|
+ <button class="holographic-btn text">
|
|
|
|
+ <User class="w-5 h-5" />
|
|
|
|
+ </button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<!-- 主要内容区 -->
|
|
<!-- 主要内容区 -->
|
|
- <div class="container mx-auto p-8">
|
|
|
|
- <!-- 设计原则 -->
|
|
|
|
- <div class="holographic-card p-6 mb-8">
|
|
|
|
- <h2 class="text-xl font-bold mb-4 text-white">设计原则</h2>
|
|
|
|
- <div class="grid grid-cols-3 gap-4">
|
|
|
|
- <div class="p-4 border border-white/20 rounded-lg">
|
|
|
|
- <Sparkles class="w-8 h-8 mb-2 text-white" />
|
|
|
|
- <h3 class="text-lg font-semibold text-white mb-2">透明与光效</h3>
|
|
|
|
- <p class="text-white/80">利用半透明效果和光效创造未来科技感</p>
|
|
|
|
- </div>
|
|
|
|
- <div class="p-4 border border-white/20 rounded-lg">
|
|
|
|
- <Zap class="w-8 h-8 mb-2 text-white" />
|
|
|
|
- <h3 class="text-lg font-semibold text-white mb-2">动态交互</h3>
|
|
|
|
- <p class="text-white/80">流畅的动画和交互效果增强用户体验</p>
|
|
|
|
- </div>
|
|
|
|
- <div class="p-4 border border-white/20 rounded-lg">
|
|
|
|
- <Stars class="w-8 h-8 mb-2 text-white" />
|
|
|
|
- <h3 class="text-lg font-semibold text-white mb-2">空间层次</h3>
|
|
|
|
- <p class="text-white/80">通过深度和层次感创造立体空间效果</p>
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
-
|
|
|
|
- <div class="grid grid-cols-3 gap-8">
|
|
|
|
- <!-- 左侧栏:颜色系统 -->
|
|
|
|
- <div class="holographic-card p-6">
|
|
|
|
- <h2 class="text-xl font-bold mb-4 text-white">颜色系统</h2>
|
|
|
|
- <div class="space-y-4">
|
|
|
|
- <div class="color-swatch bg-gradient-to-r from-purple-500 to-pink-500 h-12 rounded"></div>
|
|
|
|
- <div class="color-swatch bg-gradient-to-r from-blue-500 to-cyan-500 h-12 rounded"></div>
|
|
|
|
- <div class="color-swatch bg-gradient-to-r from-indigo-500 to-purple-500 h-12 rounded"></div>
|
|
|
|
- <div class="color-swatch bg-gradient-to-r from-pink-500 to-rose-500 h-12 rounded"></div>
|
|
|
|
|
|
+ <div class="holographic-main">
|
|
|
|
+ <!-- 卡片列表 -->
|
|
|
|
+ <div class="holographic-card-list">
|
|
|
|
+ <div v-for="card in cards" :key="card.id" class="holographic-card">
|
|
|
|
+ <div class="holographic-card-cover">
|
|
|
|
+ <img :src="card.cover" :alt="card.title" class="holographic-card-cover-img">
|
|
</div>
|
|
</div>
|
|
- </div>
|
|
|
|
-
|
|
|
|
- <!-- 中间栏:组件展示 -->
|
|
|
|
- <div class="holographic-card p-6">
|
|
|
|
- <h2 class="text-xl font-bold mb-4 text-white">组件展示</h2>
|
|
|
|
- <div class="space-y-6">
|
|
|
|
- <!-- 按钮 -->
|
|
|
|
- <div class="space-y-2">
|
|
|
|
- <button class="holographic-btn w-full">主要按钮</button>
|
|
|
|
- <button class="holographic-btn-secondary w-full">次要按钮</button>
|
|
|
|
- <button class="holographic-btn-icon w-full flex items-center justify-center">
|
|
|
|
- <Sparkles class="w-4 h-4 mr-2" />
|
|
|
|
- 图标按钮
|
|
|
|
- </button>
|
|
|
|
- </div>
|
|
|
|
-
|
|
|
|
- <!-- 输入框 -->
|
|
|
|
- <div class="space-y-2">
|
|
|
|
- <input type="text" class="holographic-input" placeholder="输入文本">
|
|
|
|
- <textarea class="holographic-input" placeholder="多行文本"></textarea>
|
|
|
|
- <div class="holographic-select">
|
|
|
|
- <select class="w-full">
|
|
|
|
- <option>选项 1</option>
|
|
|
|
- <option>选项 2</option>
|
|
|
|
- <option>选项 3</option>
|
|
|
|
- </select>
|
|
|
|
|
|
+ <div class="holographic-card-body">
|
|
|
|
+ <div class="holographic-card-meta">
|
|
|
|
+ <div class="holographic-card-meta-avatar">
|
|
|
|
+ <div class="holographic-avatar" :class="card.avatarClass">
|
|
|
|
+ {{ card.initials }}
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
- </div>
|
|
|
|
-
|
|
|
|
- <!-- 开关和复选框 -->
|
|
|
|
- <div class="space-y-2">
|
|
|
|
- <label class="holographic-switch">
|
|
|
|
- <input type="checkbox">
|
|
|
|
- <span class="slider"></span>
|
|
|
|
- </label>
|
|
|
|
- <div class="holographic-checkbox">
|
|
|
|
- <input type="checkbox" id="checkbox1">
|
|
|
|
- <label for="checkbox1">复选框</label>
|
|
|
|
|
|
+ <div class="holographic-card-meta-content">
|
|
|
|
+ <h3 class="holographic-card-meta-title">{{ card.title }}</h3>
|
|
|
|
+ <p class="holographic-card-meta-description">{{ card.description }}</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
-
|
|
|
|
- <!-- 右侧栏:特效展示 -->
|
|
|
|
- <div class="holographic-card p-6">
|
|
|
|
- <h2 class="text-xl font-bold mb-4 text-white">特效展示</h2>
|
|
|
|
- <div class="space-y-4">
|
|
|
|
- <div class="holographic-effect"></div>
|
|
|
|
- <div class="holographic-grid"></div>
|
|
|
|
- <div class="holographic-card-small p-4">
|
|
|
|
- <h3 class="text-lg font-semibold text-white mb-2">卡片悬浮效果</h3>
|
|
|
|
- <p class="text-white/80">带有光效和透明度的卡片设计</p>
|
|
|
|
|
|
+ <p class="holographic-card-content">{{ card.content }}</p>
|
|
|
|
+ <div class="holographic-card-actions">
|
|
|
|
+ <button class="holographic-btn text">
|
|
|
|
+ <Heart class="w-5 h-5" />
|
|
|
|
+ <span>{{ card.likes }}</span>
|
|
|
|
+ </button>
|
|
|
|
+ <button class="holographic-btn text">
|
|
|
|
+ <MessageSquare class="w-5 h-5" />
|
|
|
|
+ <span>{{ card.comments }}</span>
|
|
|
|
+ </button>
|
|
|
|
+ <button class="holographic-btn text">
|
|
|
|
+ <Share2 class="w-5 h-5" />
|
|
|
|
+ </button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
- <!-- 应用场景展示 -->
|
|
|
|
- <div class="holographic-card p-6 mt-8">
|
|
|
|
- <h2 class="text-xl font-bold mb-4 text-white">应用场景</h2>
|
|
|
|
- <div class="grid grid-cols-2 gap-6">
|
|
|
|
- <div class="holographic-scene p-6">
|
|
|
|
- <h3 class="text-lg font-semibold text-white mb-4">数据可视化</h3>
|
|
|
|
- <div class="holographic-chart"></div>
|
|
|
|
- <div class="mt-4 flex justify-between">
|
|
|
|
- <div class="holographic-stat">
|
|
|
|
- <div class="text-2xl font-bold text-white">1,234</div>
|
|
|
|
- <div class="text-white/60">今日访问</div>
|
|
|
|
- </div>
|
|
|
|
- <div class="holographic-stat">
|
|
|
|
- <div class="text-2xl font-bold text-white">89%</div>
|
|
|
|
- <div class="text-white/60">转化率</div>
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
|
|
+ <!-- 表单元素 -->
|
|
|
|
+ <div class="holographic-form">
|
|
|
|
+ <div class="holographic-form-item">
|
|
|
|
+ <label class="holographic-form-item-label">文本输入</label>
|
|
|
|
+ <div class="holographic-form-item-control">
|
|
|
|
+ <input type="text" placeholder="请输入内容" class="holographic-input">
|
|
</div>
|
|
</div>
|
|
- <div class="holographic-scene p-6">
|
|
|
|
- <h3 class="text-lg font-semibold text-white mb-4">控制面板</h3>
|
|
|
|
- <div class="holographic-controls grid grid-cols-2 gap-4">
|
|
|
|
- <button class="holographic-btn-small">控制 1</button>
|
|
|
|
- <button class="holographic-btn-small">控制 2</button>
|
|
|
|
- <button class="holographic-btn-small">控制 3</button>
|
|
|
|
- <button class="holographic-btn-small">控制 4</button>
|
|
|
|
- </div>
|
|
|
|
- <div class="mt-4">
|
|
|
|
- <div class="holographic-progress">
|
|
|
|
- <div class="progress-bar" style="width: 75%"></div>
|
|
|
|
- </div>
|
|
|
|
- <div class="text-white/60 mt-2">系统负载: 75%</div>
|
|
|
|
- </div>
|
|
|
|
|
|
+ </div>
|
|
|
|
+ <div class="holographic-form-item">
|
|
|
|
+ <label class="holographic-form-item-label">密码输入</label>
|
|
|
|
+ <div class="holographic-form-item-control">
|
|
|
|
+ <input type="password" placeholder="请输入密码" class="holographic-input">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- </div>
|
|
|
|
-
|
|
|
|
- <!-- 通知系统 -->
|
|
|
|
- <div class="holographic-card p-6 mt-8">
|
|
|
|
- <h2 class="text-xl font-bold mb-4 text-white">通知系统</h2>
|
|
|
|
- <div class="space-y-4">
|
|
|
|
- <div class="holographic-notification">
|
|
|
|
- <div class="flex items-start">
|
|
|
|
- <div class="notification-icon">
|
|
|
|
- <Sparkles class="w-5 h-5" />
|
|
|
|
- </div>
|
|
|
|
- <div class="ml-3">
|
|
|
|
- <h4 class="text-white font-semibold">系统更新</h4>
|
|
|
|
- <p class="text-white/60">新版本已发布,包含多项性能优化</p>
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
|
|
+ <div class="holographic-form-item">
|
|
|
|
+ <label class="holographic-form-item-label">下拉选择</label>
|
|
|
|
+ <div class="holographic-form-item-control">
|
|
|
|
+ <select class="holographic-select">
|
|
|
|
+ <option>选项 1</option>
|
|
|
|
+ <option>选项 2</option>
|
|
|
|
+ <option>选项 3</option>
|
|
|
|
+ </select>
|
|
</div>
|
|
</div>
|
|
- <div class="holographic-notification">
|
|
|
|
- <div class="flex items-start">
|
|
|
|
- <div class="notification-icon warning">
|
|
|
|
- <Zap class="w-5 h-5" />
|
|
|
|
- </div>
|
|
|
|
- <div class="ml-3">
|
|
|
|
- <h4 class="text-white font-semibold">警告</h4>
|
|
|
|
- <p class="text-white/60">系统资源使用率过高</p>
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
|
|
+ </div>
|
|
|
|
+ <div class="holographic-form-item">
|
|
|
|
+ <label class="holographic-form-item-label">开关</label>
|
|
|
|
+ <div class="holographic-form-item-control">
|
|
|
|
+ <label class="holographic-switch">
|
|
|
|
+ <input type="checkbox">
|
|
|
|
+ <span class="holographic-switch-inner"></span>
|
|
|
|
+ </label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
- <!-- 导航菜单 -->
|
|
|
|
- <div class="holographic-card p-6 mt-8">
|
|
|
|
- <h2 class="text-xl font-bold mb-4 text-white">导航菜单</h2>
|
|
|
|
- <div class="grid grid-cols-4 gap-4">
|
|
|
|
- <div class="holographic-nav-item">
|
|
|
|
- <div class="nav-icon">
|
|
|
|
- <Sparkles class="w-6 h-6" />
|
|
|
|
- </div>
|
|
|
|
- <span class="text-white/80">首页</span>
|
|
|
|
|
|
+ <!-- 按钮组 -->
|
|
|
|
+ <div class="holographic-btn-group">
|
|
|
|
+ <button class="holographic-btn primary">主要按钮</button>
|
|
|
|
+ <button class="holographic-btn secondary">次要按钮</button>
|
|
|
|
+ <button class="holographic-btn outline">轮廓按钮</button>
|
|
|
|
+ <button class="holographic-btn text">文本按钮</button>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <!-- 标签页 -->
|
|
|
|
+ <div class="holographic-tabs">
|
|
|
|
+ <div class="holographic-tabs-nav">
|
|
|
|
+ <div
|
|
|
|
+ v-for="tab in tabs"
|
|
|
|
+ :key="tab.id"
|
|
|
|
+ class="holographic-tabs-tab"
|
|
|
|
+ :class="{ active: activeTab === tab.id }"
|
|
|
|
+ @click="activeTab = tab.id"
|
|
|
|
+ >
|
|
|
|
+ {{ tab.label }}
|
|
</div>
|
|
</div>
|
|
- <div class="holographic-nav-item">
|
|
|
|
- <div class="nav-icon">
|
|
|
|
- <Zap class="w-6 h-6" />
|
|
|
|
- </div>
|
|
|
|
- <span class="text-white/80">分析</span>
|
|
|
|
|
|
+ </div>
|
|
|
|
+ <div class="holographic-tabs-content">
|
|
|
|
+ <div v-if="activeTab === 'tab1'" class="holographic-tabs-tabpane">
|
|
|
|
+ <p>标签页 1 的内容</p>
|
|
</div>
|
|
</div>
|
|
- <div class="holographic-nav-item">
|
|
|
|
- <div class="nav-icon">
|
|
|
|
- <Stars class="w-6 h-6" />
|
|
|
|
- </div>
|
|
|
|
- <span class="text-white/80">设置</span>
|
|
|
|
|
|
+ <div v-if="activeTab === 'tab2'" class="holographic-tabs-tabpane">
|
|
|
|
+ <p>标签页 2 的内容</p>
|
|
</div>
|
|
</div>
|
|
- <div class="holographic-nav-item">
|
|
|
|
- <div class="nav-icon">
|
|
|
|
- <ChevronDown class="w-6 h-6" />
|
|
|
|
- </div>
|
|
|
|
- <span class="text-white/80">更多</span>
|
|
|
|
|
|
+ <div v-if="activeTab === 'tab3'" class="holographic-tabs-tabpane">
|
|
|
|
+ <p>标签页 3 的内容</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
- <!-- 模态框展示 -->
|
|
|
|
- <div class="holographic-card p-6 mt-8">
|
|
|
|
- <h2 class="text-xl font-bold mb-4 text-white">模态框</h2>
|
|
|
|
- <button class="holographic-btn" @click="showModal = true">打开模态框</button>
|
|
|
|
- <div v-if="showModal" class="holographic-modal">
|
|
|
|
- <div class="modal-content">
|
|
|
|
- <div class="modal-header">
|
|
|
|
- <h3 class="text-xl font-bold text-white">系统提示</h3>
|
|
|
|
- <button class="modal-close" @click="showModal = false">
|
|
|
|
- <X class="w-5 h-5" />
|
|
|
|
- </button>
|
|
|
|
- </div>
|
|
|
|
- <div class="modal-body">
|
|
|
|
- <p class="text-white/80">这是一个全息风格的模态框示例,展示了系统的提示信息。</p>
|
|
|
|
- </div>
|
|
|
|
- <div class="modal-footer">
|
|
|
|
- <button class="holographic-btn-secondary" @click="showModal = false">取消</button>
|
|
|
|
- <button class="holographic-btn" @click="showModal = false">确认</button>
|
|
|
|
|
|
+ <!-- 对话框 -->
|
|
|
|
+ <div v-if="showDialog" class="holographic-modal-mask">
|
|
|
|
+ <div class="holographic-modal-wrap">
|
|
|
|
+ <div class="holographic-modal">
|
|
|
|
+ <div class="holographic-modal-content">
|
|
|
|
+ <div class="holographic-modal-header">
|
|
|
|
+ <div class="holographic-modal-title">对话框标题</div>
|
|
|
|
+ <button class="holographic-modal-close" @click="showDialog = false">
|
|
|
|
+ <X class="w-5 h-5" />
|
|
|
|
+ </button>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="holographic-modal-body">
|
|
|
|
+ <p>这是一个全息投影风格的对话框示例。</p>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="holographic-modal-footer">
|
|
|
|
+ <button class="holographic-btn" @click="showDialog = false">取消</button>
|
|
|
|
+ <button class="holographic-btn primary" @click="showDialog = false">确定</button>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
- <!-- 标签页展示 -->
|
|
|
|
- <div class="holographic-card p-6 mt-8">
|
|
|
|
- <h2 class="text-xl font-bold mb-4 text-white">标签页</h2>
|
|
|
|
- <div class="holographic-tabs">
|
|
|
|
- <div class="tabs-header">
|
|
|
|
- <button
|
|
|
|
- v-for="(tab, index) in tabs"
|
|
|
|
- :key="index"
|
|
|
|
- :class="['tab-button', { active: currentTab === index }]"
|
|
|
|
- @click="currentTab = index"
|
|
|
|
- >
|
|
|
|
- {{ tab.title }}
|
|
|
|
- </button>
|
|
|
|
- </div>
|
|
|
|
- <div class="tabs-content">
|
|
|
|
- <div v-for="(tab, index) in tabs"
|
|
|
|
- :key="index"
|
|
|
|
- :class="['tab-panel', { active: currentTab === index }]"
|
|
|
|
- >
|
|
|
|
- {{ tab.content }}
|
|
|
|
- </div>
|
|
|
|
|
|
+ <!-- 消息提示 -->
|
|
|
|
+ <div v-if="showMessage" class="holographic-message">
|
|
|
|
+ <div class="holographic-message-notice">
|
|
|
|
+ <div class="holographic-message-notice-content">
|
|
|
|
+ <Info class="w-5 h-5" />
|
|
|
|
+ <span>这是一条消息提示</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
- <!-- 加载状态 -->
|
|
|
|
- <div class="holographic-card p-6 mt-8">
|
|
|
|
- <h2 class="text-xl font-bold mb-4 text-white">加载状态</h2>
|
|
|
|
- <div class="grid grid-cols-3 gap-4">
|
|
|
|
- <div class="holographic-loader">
|
|
|
|
- <div class="loader-circle"></div>
|
|
|
|
- <span class="text-white/80">加载中...</span>
|
|
|
|
- </div>
|
|
|
|
- <div class="holographic-skeleton">
|
|
|
|
- <div class="skeleton-header"></div>
|
|
|
|
- <div class="skeleton-content"></div>
|
|
|
|
- <div class="skeleton-content"></div>
|
|
|
|
- </div>
|
|
|
|
- <div class="holographic-spinner">
|
|
|
|
- <div class="spinner"></div>
|
|
|
|
|
|
+ <!-- 通知面板 -->
|
|
|
|
+ <div v-if="showNotifications" class="holographic-notification">
|
|
|
|
+ <div class="holographic-notification-notice">
|
|
|
|
+ <div class="holographic-notification-notice-content">
|
|
|
|
+ <div class="holographic-notification-notice-icon">
|
|
|
|
+ <Bell class="w-5 h-5" />
|
|
|
|
+ </div>
|
|
|
|
+ <div class="holographic-notification-notice-message">通知标题</div>
|
|
|
|
+ <div class="holographic-notification-notice-description">通知内容</div>
|
|
</div>
|
|
</div>
|
|
|
|
+ <button class="holographic-notification-notice-close" @click="showNotifications = false">
|
|
|
|
+ <X class="w-5 h-5" />
|
|
|
|
+ </button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@@ -271,590 +188,359 @@
|
|
|
|
|
|
<script setup>
|
|
<script setup>
|
|
import { ref } from 'vue'
|
|
import { ref } from 'vue'
|
|
-import { Sparkles, Zap, Stars, ChevronDown, X } from 'lucide-vue-next'
|
|
|
|
|
|
+import {
|
|
|
|
+ Search, Bell, User, MoreVertical,
|
|
|
|
+ Heart, MessageSquare, Share2, X,
|
|
|
|
+ Info
|
|
|
|
+} from 'lucide-vue-next'
|
|
|
|
+
|
|
|
|
+const showDialog = ref(false)
|
|
|
|
+const showMessage = ref(false)
|
|
|
|
+const showNotifications = ref(false)
|
|
|
|
+const activeTab = ref('tab1')
|
|
|
|
+
|
|
|
|
+const logoUrl = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSIxNiIgY3k9IjE2IiByPSIxNiIgZmlsbD0idXJsKCNwYWludDApIi8+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJwYWludDAiIHgxPSIwIiB5MT0iMCIgeDI9IjMyIiB5Mj0iMzIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjMDA2NkZGIi8+PHN0b3Agb2Zmc2V0PSIwLjUiIHN0b3AtY29sb3I9IiNGRjAwRkYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNGRkZGMDAiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48L3N2Zz4='
|
|
|
|
+
|
|
|
|
+const cards = ref([
|
|
|
|
+ {
|
|
|
|
+ id: 1,
|
|
|
|
+ title: '卡片标题',
|
|
|
|
+ description: '副标题',
|
|
|
|
+ content: '这是卡片的内容,可以包含多行文本。',
|
|
|
|
+ cover: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIwIiBoZWlnaHQ9IjI0MCIgdmlld0JveD0iMCAwIDMyMCAyNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE2MCAyMEM4MC4yNjggMjAgMjAgODAuMjY4IDIwIDE2MEMyMCAyMzkuNzMyIDgwLjI2OCAzMDAgMTYwIDMwMEMyMzkuNzMyIDMwMCAzMDAgMjM5LjczMiAzMDAgMTYwQzMwMCA4MC4yNjggMjM5LjczMiAyMCAxNjAgMjBaIiBmaWxsPSJ1cmwoI3BhaW50MCkiLz48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MCIgeDE9IjAiIHkxPSIwIiB4Mj0iMzIwIiB5Mj0iMjQwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI0ZGQjRGRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0ZGODBGRiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPg==',
|
|
|
|
+ likes: 42,
|
|
|
|
+ comments: 8,
|
|
|
|
+ initials: 'JD',
|
|
|
|
+ avatarClass: 'bg-pink-500'
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ id: 2,
|
|
|
|
+ title: '另一个标题',
|
|
|
|
+ description: '另一个副标题',
|
|
|
|
+ content: '这是另一个卡片的内容。',
|
|
|
|
+ cover: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIwIiBoZWlnaHQ9IjI0MCIgdmlld0JveD0iMCAwIDMyMCAyNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE2MCAyMEM4MC4yNjggMjAgMjAgODAuMjY4IDIwIDE2MEMyMCAyMzkuNzMyIDgwLjI2OCAzMDAgMTYwIDMwMEMyMzkuNzMyIDMwMCAzMDAgMjM5LjczMiAzMDAgMTYwQzMwMCA4MC4yNjggMjM5LjczMiAyMCAxNjAgMjBaIiBmaWxsPSJ1cmwoI3BhaW50MCkiLz48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MCIgeDE9IjAiIHkxPSIwIiB4Mj0iMzIwIiB5Mj0iMjQwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI0ZGQjRGRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0ZGODBGRiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPg==',
|
|
|
|
+ likes: 36,
|
|
|
|
+ comments: 5,
|
|
|
|
+ initials: 'AB',
|
|
|
|
+ avatarClass: 'bg-pink-600'
|
|
|
|
+ }
|
|
|
|
+])
|
|
|
|
|
|
-const showModal = ref(false)
|
|
|
|
-const currentTab = ref(0)
|
|
|
|
const tabs = ref([
|
|
const tabs = ref([
|
|
- { title: '标签一', content: '这是第一个标签页的内容' },
|
|
|
|
- { title: '标签二', content: '这是第二个标签页的内容' },
|
|
|
|
- { title: '标签三', content: '这是第三个标签页的内容' }
|
|
|
|
|
|
+ { id: 'tab1', label: '标签页 1' },
|
|
|
|
+ { id: 'tab2', label: '标签页 2' },
|
|
|
|
+ { id: 'tab3', label: '标签页 3' }
|
|
])
|
|
])
|
|
</script>
|
|
</script>
|
|
|
|
|
|
<style scoped>
|
|
<style scoped>
|
|
.holographic-container {
|
|
.holographic-container {
|
|
|
|
+ font-family: 'Orbitron', sans-serif;
|
|
background-image:
|
|
background-image:
|
|
- linear-gradient(45deg, rgba(255,255,255,0.1) 25%, transparent 25%),
|
|
|
|
- linear-gradient(-45deg, rgba(255,255,255,0.1) 25%, transparent 25%);
|
|
|
|
- background-size: 60px 60px;
|
|
|
|
|
|
+ linear-gradient(45deg, rgba(0, 255, 255, 0.1) 25%, transparent 25%),
|
|
|
|
+ linear-gradient(-45deg, rgba(0, 255, 255, 0.1) 25%, transparent 25%),
|
|
|
|
+ linear-gradient(45deg, transparent 75%, rgba(0, 255, 255, 0.1) 75%),
|
|
|
|
+ linear-gradient(-45deg, transparent 75%, rgba(0, 255, 255, 0.1) 75%);
|
|
|
|
+ background-size: 20px 20px;
|
|
|
|
+ background-position: 0 0, 0 10px, 10px -10px, -10px 0px;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-card {
|
|
|
|
- background: rgba(255, 255, 255, 0.1);
|
|
|
|
- backdrop-filter: blur(10px);
|
|
|
|
- border: 1px solid rgba(255, 255, 255, 0.2);
|
|
|
|
- border-radius: 12px;
|
|
|
|
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
|
|
|
|
|
|
+.holographic-header {
|
|
|
|
+ @apply fixed top-0 left-0 right-0 h-16 backdrop-blur-md bg-black/30 z-10;
|
|
|
|
+ box-shadow: 0 0 20px rgba(0, 255, 255, 0.3);
|
|
|
|
+ border-bottom: 1px solid rgba(0, 255, 255, 0.2);
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-btn {
|
|
|
|
- background: linear-gradient(45deg, #6366f1, #8b5cf6);
|
|
|
|
- color: white;
|
|
|
|
- padding: 0.75rem 1.5rem;
|
|
|
|
- border: none;
|
|
|
|
- border-radius: 8px;
|
|
|
|
- font-weight: bold;
|
|
|
|
- transition: all 0.3s ease;
|
|
|
|
- position: relative;
|
|
|
|
- overflow: hidden;
|
|
|
|
|
|
+.holographic-header-content {
|
|
|
|
+ @apply container mx-auto px-4 h-full flex items-center justify-between;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-btn::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: 0.5s;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.holographic-btn:hover::before {
|
|
|
|
- left: 100%;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.holographic-btn-secondary {
|
|
|
|
- background: transparent;
|
|
|
|
- color: white;
|
|
|
|
- padding: 0.75rem 1.5rem;
|
|
|
|
- border: 1px solid rgba(255,255,255,0.2);
|
|
|
|
- border-radius: 8px;
|
|
|
|
- font-weight: bold;
|
|
|
|
- transition: all 0.3s ease;
|
|
|
|
|
|
+.holographic-logo {
|
|
|
|
+ @apply flex items-center;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-input {
|
|
|
|
- width: 100%;
|
|
|
|
- padding: 0.75rem;
|
|
|
|
- background: rgba(255,255,255,0.1);
|
|
|
|
- border: 1px solid rgba(255,255,255,0.2);
|
|
|
|
- border-radius: 8px;
|
|
|
|
- color: white;
|
|
|
|
- transition: all 0.3s ease;
|
|
|
|
|
|
+.holographic-logo-img {
|
|
|
|
+ @apply h-8 w-8;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-input:focus {
|
|
|
|
- outline: none;
|
|
|
|
- border-color: #6366f1;
|
|
|
|
- box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.2);
|
|
|
|
|
|
+.holographic-logo-text {
|
|
|
|
+ @apply ml-2 text-xl font-medium text-cyan-400;
|
|
|
|
+ text-shadow: 0 0 10px rgba(0, 255, 255, 0.5);
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-effect {
|
|
|
|
- width: 100%;
|
|
|
|
- height: 100px;
|
|
|
|
- background: linear-gradient(45deg, #6366f1, #8b5cf6);
|
|
|
|
- border-radius: 8px;
|
|
|
|
- position: relative;
|
|
|
|
- overflow: hidden;
|
|
|
|
|
|
+.holographic-nav {
|
|
|
|
+ @apply flex items-center space-x-6;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-effect::before {
|
|
|
|
- content: '';
|
|
|
|
- position: absolute;
|
|
|
|
- top: -50%;
|
|
|
|
- left: -50%;
|
|
|
|
- width: 200%;
|
|
|
|
- height: 200%;
|
|
|
|
- background: linear-gradient(45deg, transparent, rgba(255,255,255,0.1), transparent);
|
|
|
|
- transform: rotate(45deg);
|
|
|
|
- animation: shine 3s infinite;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.holographic-grid {
|
|
|
|
- width: 100%;
|
|
|
|
- height: 100px;
|
|
|
|
- background:
|
|
|
|
- linear-gradient(90deg, rgba(255,255,255,0.1) 1px, transparent 1px) 0 0 / 20px 20px,
|
|
|
|
- linear-gradient(0deg, rgba(255,255,255,0.1) 1px, transparent 1px) 0 0 / 20px 20px;
|
|
|
|
- border-radius: 8px;
|
|
|
|
- animation: gridMove 20s linear infinite;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-@keyframes shine {
|
|
|
|
- 0% {
|
|
|
|
- transform: translateX(-100%) rotate(45deg);
|
|
|
|
- }
|
|
|
|
- 100% {
|
|
|
|
- transform: translateX(100%) rotate(45deg);
|
|
|
|
- }
|
|
|
|
|
|
+.holographic-nav-item {
|
|
|
|
+ @apply text-cyan-400 hover:text-cyan-300;
|
|
|
|
+ text-shadow: 0 0 10px rgba(0, 255, 255, 0.3);
|
|
}
|
|
}
|
|
|
|
|
|
-@keyframes gridMove {
|
|
|
|
- 0% {
|
|
|
|
- background-position: 0 0;
|
|
|
|
- }
|
|
|
|
- 100% {
|
|
|
|
- background-position: 40px 40px;
|
|
|
|
- }
|
|
|
|
|
|
+.holographic-nav-item.active {
|
|
|
|
+ @apply text-cyan-300;
|
|
|
|
+ text-shadow: 0 0 15px rgba(0, 255, 255, 0.5);
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-switch {
|
|
|
|
- position: relative;
|
|
|
|
- display: inline-block;
|
|
|
|
- width: 60px;
|
|
|
|
- height: 34px;
|
|
|
|
|
|
+.holographic-header-actions {
|
|
|
|
+ @apply flex items-center space-x-2;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-switch input {
|
|
|
|
- opacity: 0;
|
|
|
|
- width: 0;
|
|
|
|
- height: 0;
|
|
|
|
|
|
+.holographic-main {
|
|
|
|
+ @apply pt-20 pb-8 px-4;
|
|
}
|
|
}
|
|
|
|
|
|
-.slider {
|
|
|
|
- position: absolute;
|
|
|
|
- cursor: pointer;
|
|
|
|
- top: 0;
|
|
|
|
- left: 0;
|
|
|
|
- right: 0;
|
|
|
|
- bottom: 0;
|
|
|
|
- background-color: rgba(255, 255, 255, 0.1);
|
|
|
|
- transition: .4s;
|
|
|
|
- border-radius: 34px;
|
|
|
|
|
|
+.holographic-card-list {
|
|
|
|
+ @apply grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4;
|
|
}
|
|
}
|
|
|
|
|
|
-.slider:before {
|
|
|
|
- position: absolute;
|
|
|
|
- content: "";
|
|
|
|
- height: 26px;
|
|
|
|
- width: 26px;
|
|
|
|
- left: 4px;
|
|
|
|
- bottom: 4px;
|
|
|
|
- background-color: white;
|
|
|
|
- transition: .4s;
|
|
|
|
- border-radius: 50%;
|
|
|
|
|
|
+.holographic-card {
|
|
|
|
+ @apply backdrop-blur-md bg-black/30 rounded-xl overflow-hidden;
|
|
|
|
+ box-shadow: 0 0 20px rgba(0, 255, 255, 0.2);
|
|
|
|
+ border: 1px solid rgba(0, 255, 255, 0.2);
|
|
|
|
+ transition: all 0.3s ease;
|
|
}
|
|
}
|
|
|
|
|
|
-input:checked + .slider {
|
|
|
|
- background: linear-gradient(45deg, #6366f1, #8b5cf6);
|
|
|
|
|
|
+.holographic-card:hover {
|
|
|
|
+ box-shadow: 0 0 30px rgba(0, 255, 255, 0.3);
|
|
|
|
+ transform: translateY(-5px);
|
|
}
|
|
}
|
|
|
|
|
|
-input:checked + .slider:before {
|
|
|
|
- transform: translateX(26px);
|
|
|
|
|
|
+.holographic-card-cover {
|
|
|
|
+ @apply relative h-48 overflow-hidden;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-checkbox {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- gap: 8px;
|
|
|
|
|
|
+.holographic-card-cover-img {
|
|
|
|
+ @apply w-full h-full object-cover;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-checkbox input[type="checkbox"] {
|
|
|
|
- appearance: none;
|
|
|
|
- width: 20px;
|
|
|
|
- height: 20px;
|
|
|
|
- border: 2px solid rgba(255, 255, 255, 0.2);
|
|
|
|
- border-radius: 4px;
|
|
|
|
- background: rgba(255, 255, 255, 0.1);
|
|
|
|
- cursor: pointer;
|
|
|
|
- position: relative;
|
|
|
|
|
|
+.holographic-card-body {
|
|
|
|
+ @apply p-4;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-checkbox input[type="checkbox"]:checked {
|
|
|
|
- background: linear-gradient(45deg, #6366f1, #8b5cf6);
|
|
|
|
- border-color: transparent;
|
|
|
|
|
|
+.holographic-card-meta {
|
|
|
|
+ @apply flex items-start mb-4;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-checkbox input[type="checkbox"]:checked::after {
|
|
|
|
- content: "✓";
|
|
|
|
- position: absolute;
|
|
|
|
- color: white;
|
|
|
|
- font-size: 14px;
|
|
|
|
- top: 50%;
|
|
|
|
- left: 50%;
|
|
|
|
- transform: translate(-50%, -50%);
|
|
|
|
|
|
+.holographic-card-meta-avatar {
|
|
|
|
+ @apply mr-4;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-select {
|
|
|
|
- position: relative;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.holographic-select select {
|
|
|
|
- appearance: none;
|
|
|
|
- background: rgba(255, 255, 255, 0.1);
|
|
|
|
- border: 1px solid rgba(255, 255, 255, 0.2);
|
|
|
|
- border-radius: 8px;
|
|
|
|
- padding: 0.75rem;
|
|
|
|
- color: white;
|
|
|
|
- cursor: pointer;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.holographic-select::after {
|
|
|
|
- content: "";
|
|
|
|
- position: absolute;
|
|
|
|
- right: 1rem;
|
|
|
|
- top: 50%;
|
|
|
|
- transform: translateY(-50%);
|
|
|
|
- width: 0;
|
|
|
|
- height: 0;
|
|
|
|
- border-left: 6px solid transparent;
|
|
|
|
- border-right: 6px solid transparent;
|
|
|
|
- border-top: 6px solid white;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.holographic-card-small {
|
|
|
|
- background: rgba(255, 255, 255, 0.05);
|
|
|
|
- backdrop-filter: blur(5px);
|
|
|
|
- border: 1px solid rgba(255, 255, 255, 0.1);
|
|
|
|
- border-radius: 8px;
|
|
|
|
- transition: all 0.3s ease;
|
|
|
|
|
|
+.holographic-avatar {
|
|
|
|
+ @apply w-10 h-10 rounded-full flex items-center justify-center text-white font-medium;
|
|
|
|
+ box-shadow: 0 0 15px rgba(0, 255, 255, 0.3);
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-card-small:hover {
|
|
|
|
- background: rgba(255, 255, 255, 0.1);
|
|
|
|
- transform: translateY(-2px);
|
|
|
|
|
|
+.holographic-card-meta-content {
|
|
|
|
+ @apply flex-1;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-scene {
|
|
|
|
- background: rgba(255, 255, 255, 0.05);
|
|
|
|
- backdrop-filter: blur(5px);
|
|
|
|
- border: 1px solid rgba(255, 255, 255, 0.1);
|
|
|
|
- border-radius: 12px;
|
|
|
|
|
|
+.holographic-card-meta-title {
|
|
|
|
+ @apply text-base font-medium text-cyan-400;
|
|
|
|
+ text-shadow: 0 0 10px rgba(0, 255, 255, 0.3);
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-chart {
|
|
|
|
- height: 200px;
|
|
|
|
- background: linear-gradient(45deg, rgba(99, 102, 241, 0.2), rgba(139, 92, 246, 0.2));
|
|
|
|
- border-radius: 8px;
|
|
|
|
- position: relative;
|
|
|
|
- overflow: hidden;
|
|
|
|
|
|
+.holographic-card-meta-description {
|
|
|
|
+ @apply text-sm text-cyan-300;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-chart::before {
|
|
|
|
- content: "";
|
|
|
|
- position: absolute;
|
|
|
|
- top: 0;
|
|
|
|
- left: 0;
|
|
|
|
- right: 0;
|
|
|
|
- bottom: 0;
|
|
|
|
- background:
|
|
|
|
- linear-gradient(90deg, rgba(255,255,255,0.1) 1px, transparent 1px) 0 0 / 20px 20px,
|
|
|
|
- linear-gradient(0deg, rgba(255,255,255,0.1) 1px, transparent 1px) 0 0 / 20px 20px;
|
|
|
|
- animation: gridMove 20s linear infinite;
|
|
|
|
|
|
+.holographic-card-content {
|
|
|
|
+ @apply text-cyan-200 mb-4;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-btn-small {
|
|
|
|
- background: rgba(255, 255, 255, 0.1);
|
|
|
|
- color: white;
|
|
|
|
- padding: 0.5rem 1rem;
|
|
|
|
- border: 1px solid rgba(255, 255, 255, 0.2);
|
|
|
|
- border-radius: 6px;
|
|
|
|
- font-size: 0.875rem;
|
|
|
|
- transition: all 0.3s ease;
|
|
|
|
|
|
+.holographic-card-actions {
|
|
|
|
+ @apply flex items-center border-t border-cyan-500/20 pt-4;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-btn-small:hover {
|
|
|
|
- background: rgba(255, 255, 255, 0.2);
|
|
|
|
- transform: translateY(-2px);
|
|
|
|
|
|
+.holographic-form {
|
|
|
|
+ @apply space-y-4 mt-6;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-btn-icon {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- justify-content: center;
|
|
|
|
- gap: 0.5rem;
|
|
|
|
- background: linear-gradient(45deg, #6366f1, #8b5cf6);
|
|
|
|
- color: white;
|
|
|
|
- padding: 0.75rem 1.5rem;
|
|
|
|
- border: none;
|
|
|
|
- border-radius: 8px;
|
|
|
|
- font-weight: bold;
|
|
|
|
- transition: all 0.3s ease;
|
|
|
|
|
|
+.holographic-form-item {
|
|
|
|
+ @apply flex flex-col;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-btn-icon:hover {
|
|
|
|
- transform: translateY(-2px);
|
|
|
|
- box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);
|
|
|
|
|
|
+.holographic-form-item-label {
|
|
|
|
+ @apply mb-2 text-cyan-400;
|
|
|
|
+ text-shadow: 0 0 10px rgba(0, 255, 255, 0.3);
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-stat {
|
|
|
|
- background: rgba(255, 255, 255, 0.05);
|
|
|
|
- padding: 1rem;
|
|
|
|
- border-radius: 8px;
|
|
|
|
- text-align: center;
|
|
|
|
- min-width: 100px;
|
|
|
|
|
|
+.holographic-form-item-control {
|
|
|
|
+ @apply flex-1;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-progress {
|
|
|
|
- height: 4px;
|
|
|
|
- background: rgba(255, 255, 255, 0.1);
|
|
|
|
- border-radius: 2px;
|
|
|
|
- overflow: hidden;
|
|
|
|
|
|
+.holographic-input,
|
|
|
|
+.holographic-select {
|
|
|
|
+ @apply w-full px-4 py-2 backdrop-blur-md bg-black/30 rounded-xl border border-cyan-500/20 focus:border-cyan-500 focus:ring-1 focus:ring-cyan-500 text-cyan-200;
|
|
|
|
+ box-shadow: 0 0 15px rgba(0, 255, 255, 0.1);
|
|
}
|
|
}
|
|
|
|
|
|
-.progress-bar {
|
|
|
|
- height: 100%;
|
|
|
|
- background: linear-gradient(90deg, #6366f1, #8b5cf6);
|
|
|
|
- border-radius: 2px;
|
|
|
|
- animation: progress 2s ease-in-out;
|
|
|
|
|
|
+.holographic-switch {
|
|
|
|
+ @apply relative inline-block w-12 h-6;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-notification {
|
|
|
|
- background: rgba(255, 255, 255, 0.05);
|
|
|
|
- padding: 1rem;
|
|
|
|
- border-radius: 8px;
|
|
|
|
- border-left: 3px solid #6366f1;
|
|
|
|
- transition: all 0.3s ease;
|
|
|
|
|
|
+.holographic-switch input {
|
|
|
|
+ @apply hidden;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-notification:hover {
|
|
|
|
- background: rgba(255, 255, 255, 0.1);
|
|
|
|
- transform: translateX(4px);
|
|
|
|
|
|
+.holographic-switch-inner {
|
|
|
|
+ @apply absolute inset-0 rounded-full backdrop-blur-md bg-black/30 transition-colors duration-300;
|
|
|
|
+ box-shadow: 0 0 15px rgba(0, 255, 255, 0.2);
|
|
|
|
+ border: 1px solid rgba(0, 255, 255, 0.2);
|
|
}
|
|
}
|
|
|
|
|
|
-.notification-icon {
|
|
|
|
- width: 32px;
|
|
|
|
- height: 32px;
|
|
|
|
- border-radius: 50%;
|
|
|
|
- background: rgba(99, 102, 241, 0.2);
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- justify-content: center;
|
|
|
|
|
|
+.holographic-switch-inner:after {
|
|
|
|
+ content: '';
|
|
|
|
+ @apply absolute w-5 h-5 rounded-full bg-cyan-400 top-0.5 left-0.5 shadow transition-transform duration-300;
|
|
|
|
+ box-shadow: 0 0 10px rgba(0, 255, 255, 0.5);
|
|
}
|
|
}
|
|
|
|
|
|
-.notification-icon.warning {
|
|
|
|
- background: rgba(234, 179, 8, 0.2);
|
|
|
|
|
|
+.holographic-switch input:checked + .holographic-switch-inner {
|
|
|
|
+ @apply bg-cyan-500/30;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-nav-item {
|
|
|
|
- display: flex;
|
|
|
|
- flex-direction: column;
|
|
|
|
- align-items: center;
|
|
|
|
- gap: 0.5rem;
|
|
|
|
- padding: 1rem;
|
|
|
|
- border-radius: 8px;
|
|
|
|
- transition: all 0.3s ease;
|
|
|
|
- cursor: pointer;
|
|
|
|
|
|
+.holographic-switch input:checked + .holographic-switch-inner:after {
|
|
|
|
+ @apply translate-x-6;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-nav-item:hover {
|
|
|
|
- background: rgba(255, 255, 255, 0.1);
|
|
|
|
|
|
+.holographic-btn-group {
|
|
|
|
+ @apply flex flex-wrap gap-2 mt-6;
|
|
}
|
|
}
|
|
|
|
|
|
-.nav-icon {
|
|
|
|
- width: 40px;
|
|
|
|
- height: 40px;
|
|
|
|
- border-radius: 50%;
|
|
|
|
- background: rgba(255, 255, 255, 0.1);
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- justify-content: center;
|
|
|
|
|
|
+.holographic-btn {
|
|
|
|
+ @apply px-4 py-2 rounded-xl text-sm font-medium transition-all duration-300;
|
|
}
|
|
}
|
|
|
|
|
|
-@keyframes progress {
|
|
|
|
- from {
|
|
|
|
- width: 0;
|
|
|
|
- }
|
|
|
|
- to {
|
|
|
|
- width: 75%;
|
|
|
|
- }
|
|
|
|
|
|
+.holographic-btn.primary {
|
|
|
|
+ @apply backdrop-blur-md bg-cyan-500/30 text-cyan-400 hover:bg-cyan-500/40;
|
|
|
|
+ box-shadow: 0 0 20px rgba(0, 255, 255, 0.2);
|
|
|
|
+ border: 1px solid rgba(0, 255, 255, 0.2);
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-modal {
|
|
|
|
- position: fixed;
|
|
|
|
- top: 0;
|
|
|
|
- left: 0;
|
|
|
|
- right: 0;
|
|
|
|
- bottom: 0;
|
|
|
|
- background: rgba(0, 0, 0, 0.5);
|
|
|
|
- backdrop-filter: blur(5px);
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- justify-content: center;
|
|
|
|
- z-index: 1000;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.modal-content {
|
|
|
|
- background: rgba(255, 255, 255, 0.1);
|
|
|
|
- backdrop-filter: blur(10px);
|
|
|
|
- border: 1px solid rgba(255, 255, 255, 0.2);
|
|
|
|
- border-radius: 12px;
|
|
|
|
- width: 90%;
|
|
|
|
- max-width: 500px;
|
|
|
|
- padding: 1.5rem;
|
|
|
|
- animation: modalSlide 0.3s ease-out;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.modal-header {
|
|
|
|
- display: flex;
|
|
|
|
- justify-content: space-between;
|
|
|
|
- align-items: center;
|
|
|
|
- margin-bottom: 1rem;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.modal-close {
|
|
|
|
- background: transparent;
|
|
|
|
- border: none;
|
|
|
|
- color: white;
|
|
|
|
- cursor: pointer;
|
|
|
|
- padding: 0.5rem;
|
|
|
|
- border-radius: 50%;
|
|
|
|
- transition: all 0.3s ease;
|
|
|
|
|
|
+.holographic-btn.secondary {
|
|
|
|
+ @apply backdrop-blur-md bg-purple-500/30 text-purple-400 hover:bg-purple-500/40;
|
|
|
|
+ box-shadow: 0 0 20px rgba(147, 51, 234, 0.2);
|
|
|
|
+ border: 1px solid rgba(147, 51, 234, 0.2);
|
|
}
|
|
}
|
|
|
|
|
|
-.modal-close:hover {
|
|
|
|
- background: rgba(255, 255, 255, 0.1);
|
|
|
|
|
|
+.holographic-btn.outline {
|
|
|
|
+ @apply backdrop-blur-md bg-transparent text-cyan-400 border border-cyan-500/20 hover:border-cyan-500;
|
|
|
|
+ box-shadow: 0 0 15px rgba(0, 255, 255, 0.1);
|
|
}
|
|
}
|
|
|
|
|
|
-.modal-footer {
|
|
|
|
- display: flex;
|
|
|
|
- justify-content: flex-end;
|
|
|
|
- gap: 1rem;
|
|
|
|
- margin-top: 1.5rem;
|
|
|
|
|
|
+.holographic-btn.text {
|
|
|
|
+ @apply bg-transparent text-cyan-400 hover:text-cyan-300;
|
|
}
|
|
}
|
|
|
|
|
|
.holographic-tabs {
|
|
.holographic-tabs {
|
|
- background: rgba(255, 255, 255, 0.05);
|
|
|
|
- border-radius: 8px;
|
|
|
|
- overflow: hidden;
|
|
|
|
|
|
+ @apply mt-6;
|
|
}
|
|
}
|
|
|
|
|
|
-.tabs-header {
|
|
|
|
- display: flex;
|
|
|
|
- border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
|
|
|
|
|
+.holographic-tabs-nav {
|
|
|
|
+ @apply flex border-b border-cyan-500/20;
|
|
}
|
|
}
|
|
|
|
|
|
-.tab-button {
|
|
|
|
- padding: 1rem 1.5rem;
|
|
|
|
- background: transparent;
|
|
|
|
- color: rgba(255, 255, 255, 0.6);
|
|
|
|
- border: none;
|
|
|
|
- cursor: pointer;
|
|
|
|
- transition: all 0.3s ease;
|
|
|
|
- position: relative;
|
|
|
|
|
|
+.holographic-tabs-tab {
|
|
|
|
+ @apply px-4 py-3 text-cyan-400 cursor-pointer hover:text-cyan-300;
|
|
|
|
+ text-shadow: 0 0 10px rgba(0, 255, 255, 0.3);
|
|
}
|
|
}
|
|
|
|
|
|
-.tab-button.active {
|
|
|
|
- color: white;
|
|
|
|
|
|
+.holographic-tabs-tab.active {
|
|
|
|
+ @apply text-cyan-300 border-b-2 border-cyan-500;
|
|
|
|
+ text-shadow: 0 0 15px rgba(0, 255, 255, 0.5);
|
|
}
|
|
}
|
|
|
|
|
|
-.tab-button.active::after {
|
|
|
|
- content: '';
|
|
|
|
- position: absolute;
|
|
|
|
- bottom: 0;
|
|
|
|
- left: 0;
|
|
|
|
- right: 0;
|
|
|
|
- height: 2px;
|
|
|
|
- background: linear-gradient(90deg, #6366f1, #8b5cf6);
|
|
|
|
|
|
+.holographic-tabs-content {
|
|
|
|
+ @apply p-4;
|
|
}
|
|
}
|
|
|
|
|
|
-.tabs-content {
|
|
|
|
- padding: 1.5rem;
|
|
|
|
|
|
+.holographic-tabs-tabpane {
|
|
|
|
+ @apply backdrop-blur-md bg-black/30 rounded-xl p-4;
|
|
|
|
+ box-shadow: 0 0 20px rgba(0, 255, 255, 0.2);
|
|
|
|
+ border: 1px solid rgba(0, 255, 255, 0.2);
|
|
}
|
|
}
|
|
|
|
|
|
-.tab-panel {
|
|
|
|
- display: none;
|
|
|
|
- color: rgba(255, 255, 255, 0.8);
|
|
|
|
|
|
+.holographic-modal-mask {
|
|
|
|
+ @apply fixed inset-0 bg-black/50 backdrop-blur-sm flex items-center justify-center z-50;
|
|
}
|
|
}
|
|
|
|
|
|
-.tab-panel.active {
|
|
|
|
- display: block;
|
|
|
|
- animation: fadeIn 0.3s ease-out;
|
|
|
|
|
|
+.holographic-modal-wrap {
|
|
|
|
+ @apply fixed inset-0 overflow-auto;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-loader {
|
|
|
|
- display: flex;
|
|
|
|
- flex-direction: column;
|
|
|
|
- align-items: center;
|
|
|
|
- gap: 1rem;
|
|
|
|
- padding: 2rem;
|
|
|
|
- background: rgba(255, 255, 255, 0.05);
|
|
|
|
- border-radius: 8px;
|
|
|
|
|
|
+.holographic-modal {
|
|
|
|
+ @apply relative top-20 mx-auto w-full max-w-md;
|
|
}
|
|
}
|
|
|
|
|
|
-.loader-circle {
|
|
|
|
- width: 40px;
|
|
|
|
- height: 40px;
|
|
|
|
- border: 3px solid rgba(255, 255, 255, 0.1);
|
|
|
|
- border-top-color: #6366f1;
|
|
|
|
- border-radius: 50%;
|
|
|
|
- animation: spin 1s linear infinite;
|
|
|
|
|
|
+.holographic-modal-content {
|
|
|
|
+ @apply backdrop-blur-md bg-black/30 rounded-xl shadow-lg;
|
|
|
|
+ box-shadow: 0 0 30px rgba(0, 255, 255, 0.3);
|
|
|
|
+ border: 1px solid rgba(0, 255, 255, 0.2);
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-skeleton {
|
|
|
|
- padding: 1.5rem;
|
|
|
|
- background: rgba(255, 255, 255, 0.05);
|
|
|
|
- border-radius: 8px;
|
|
|
|
|
|
+.holographic-modal-header {
|
|
|
|
+ @apply flex justify-between items-center p-4 border-b border-cyan-500/20;
|
|
}
|
|
}
|
|
|
|
|
|
-.skeleton-header {
|
|
|
|
- height: 24px;
|
|
|
|
- background: linear-gradient(90deg, rgba(255,255,255,0.1) 25%, rgba(255,255,255,0.2) 50%, rgba(255,255,255,0.1) 75%);
|
|
|
|
- background-size: 200% 100%;
|
|
|
|
- animation: skeleton 1.5s infinite;
|
|
|
|
- border-radius: 4px;
|
|
|
|
- margin-bottom: 1rem;
|
|
|
|
|
|
+.holographic-modal-title {
|
|
|
|
+ @apply text-lg font-medium text-cyan-400;
|
|
|
|
+ text-shadow: 0 0 10px rgba(0, 255, 255, 0.3);
|
|
}
|
|
}
|
|
|
|
|
|
-.skeleton-content {
|
|
|
|
- height: 16px;
|
|
|
|
- background: linear-gradient(90deg, rgba(255,255,255,0.1) 25%, rgba(255,255,255,0.2) 50%, rgba(255,255,255,0.1) 75%);
|
|
|
|
- background-size: 200% 100%;
|
|
|
|
- animation: skeleton 1.5s infinite;
|
|
|
|
- border-radius: 4px;
|
|
|
|
- margin-bottom: 0.5rem;
|
|
|
|
|
|
+.holographic-modal-close {
|
|
|
|
+ @apply text-cyan-400 hover:text-cyan-300;
|
|
}
|
|
}
|
|
|
|
|
|
-.holographic-spinner {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- justify-content: center;
|
|
|
|
- padding: 2rem;
|
|
|
|
- background: rgba(255, 255, 255, 0.05);
|
|
|
|
- border-radius: 8px;
|
|
|
|
|
|
+.holographic-modal-body {
|
|
|
|
+ @apply p-4;
|
|
}
|
|
}
|
|
|
|
|
|
-.spinner {
|
|
|
|
- width: 40px;
|
|
|
|
- height: 40px;
|
|
|
|
- border: 3px solid transparent;
|
|
|
|
- border-top-color: #6366f1;
|
|
|
|
- border-right-color: #8b5cf6;
|
|
|
|
- border-radius: 50%;
|
|
|
|
- animation: spin 1s linear infinite;
|
|
|
|
|
|
+.holographic-modal-footer {
|
|
|
|
+ @apply flex justify-end space-x-2 p-4 border-t border-cyan-500/20;
|
|
}
|
|
}
|
|
|
|
|
|
-@keyframes modalSlide {
|
|
|
|
- from {
|
|
|
|
- transform: translateY(-20px);
|
|
|
|
- opacity: 0;
|
|
|
|
- }
|
|
|
|
- to {
|
|
|
|
- transform: translateY(0);
|
|
|
|
- opacity: 1;
|
|
|
|
- }
|
|
|
|
|
|
+.holographic-message {
|
|
|
|
+ @apply fixed top-4 right-4 z-50;
|
|
}
|
|
}
|
|
|
|
|
|
-@keyframes fadeIn {
|
|
|
|
- from {
|
|
|
|
- opacity: 0;
|
|
|
|
- }
|
|
|
|
- to {
|
|
|
|
- opacity: 1;
|
|
|
|
- }
|
|
|
|
|
|
+.holographic-message-notice {
|
|
|
|
+ @apply mb-4;
|
|
}
|
|
}
|
|
|
|
|
|
-@keyframes spin {
|
|
|
|
- to {
|
|
|
|
- transform: rotate(360deg);
|
|
|
|
- }
|
|
|
|
|
|
+.holographic-message-notice-content {
|
|
|
|
+ @apply flex items-center px-4 py-3 backdrop-blur-md bg-black/30 rounded-xl shadow-lg;
|
|
|
|
+ box-shadow: 0 0 20px rgba(0, 255, 255, 0.2);
|
|
|
|
+ border: 1px solid rgba(0, 255, 255, 0.2);
|
|
}
|
|
}
|
|
|
|
|
|
-@keyframes skeleton {
|
|
|
|
- to {
|
|
|
|
- background-position: 200% 0;
|
|
|
|
- }
|
|
|
|
|
|
+.holographic-notification {
|
|
|
|
+ @apply fixed top-4 right-4 z-50;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.holographic-notification-notice {
|
|
|
|
+ @apply mb-4 backdrop-blur-md bg-black/30 rounded-xl shadow-lg overflow-hidden;
|
|
|
|
+ box-shadow: 0 0 20px rgba(0, 255, 255, 0.2);
|
|
|
|
+ border: 1px solid rgba(0, 255, 255, 0.2);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.holographic-notification-notice-content {
|
|
|
|
+ @apply p-4;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.holographic-notification-notice-icon {
|
|
|
|
+ @apply float-left mr-4 text-cyan-400;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.holographic-notification-notice-message {
|
|
|
|
+ @apply text-base font-medium text-cyan-400;
|
|
|
|
+ text-shadow: 0 0 10px rgba(0, 255, 255, 0.3);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.holographic-notification-notice-description {
|
|
|
|
+ @apply mt-1 text-sm text-cyan-300;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.holographic-notification-notice-close {
|
|
|
|
+ @apply absolute top-4 right-4 text-cyan-400 hover:text-cyan-300;
|
|
}
|
|
}
|
|
</style>
|
|
</style>
|