|
@@ -0,0 +1,860 @@
|
|
|
+<template>
|
|
|
+ <div class="holographic-container min-h-screen bg-gradient-to-br from-purple-900 via-blue-900 to-indigo-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>
|
|
|
+ </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>
|
|
|
+ </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>
|
|
|
+ </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>
|
|
|
+ </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>
|
|
|
+ </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>
|
|
|
+ <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>
|
|
|
+ </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>
|
|
|
+ <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>
|
|
|
+ </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>
|
|
|
+ <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-nav-item">
|
|
|
+ <div class="nav-icon">
|
|
|
+ <Stars class="w-6 h-6" />
|
|
|
+ </div>
|
|
|
+ <span class="text-white/80">设置</span>
|
|
|
+ </div>
|
|
|
+ <div class="holographic-nav-item">
|
|
|
+ <div class="nav-icon">
|
|
|
+ <ChevronDown class="w-6 h-6" />
|
|
|
+ </div>
|
|
|
+ <span class="text-white/80">更多</span>
|
|
|
+ </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>
|
|
|
+ </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>
|
|
|
+ </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>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+import { ref } from 'vue'
|
|
|
+import { Sparkles, Zap, Stars, ChevronDown, X } from 'lucide-vue-next'
|
|
|
+
|
|
|
+const showModal = ref(false)
|
|
|
+const currentTab = ref(0)
|
|
|
+const tabs = ref([
|
|
|
+ { title: '标签一', content: '这是第一个标签页的内容' },
|
|
|
+ { title: '标签二', content: '这是第二个标签页的内容' },
|
|
|
+ { title: '标签三', content: '这是第三个标签页的内容' }
|
|
|
+])
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+.holographic-container {
|
|
|
+ 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;
|
|
|
+}
|
|
|
+
|
|
|
+.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-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-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-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-input:focus {
|
|
|
+ outline: none;
|
|
|
+ border-color: #6366f1;
|
|
|
+ box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.2);
|
|
|
+}
|
|
|
+
|
|
|
+.holographic-effect {
|
|
|
+ width: 100%;
|
|
|
+ height: 100px;
|
|
|
+ background: linear-gradient(45deg, #6366f1, #8b5cf6);
|
|
|
+ border-radius: 8px;
|
|
|
+ position: relative;
|
|
|
+ overflow: hidden;
|
|
|
+}
|
|
|
+
|
|
|
+.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);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+@keyframes gridMove {
|
|
|
+ 0% {
|
|
|
+ background-position: 0 0;
|
|
|
+ }
|
|
|
+ 100% {
|
|
|
+ background-position: 40px 40px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.holographic-switch {
|
|
|
+ position: relative;
|
|
|
+ display: inline-block;
|
|
|
+ width: 60px;
|
|
|
+ height: 34px;
|
|
|
+}
|
|
|
+
|
|
|
+.holographic-switch input {
|
|
|
+ opacity: 0;
|
|
|
+ width: 0;
|
|
|
+ height: 0;
|
|
|
+}
|
|
|
+
|
|
|
+.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;
|
|
|
+}
|
|
|
+
|
|
|
+.slider:before {
|
|
|
+ position: absolute;
|
|
|
+ content: "";
|
|
|
+ height: 26px;
|
|
|
+ width: 26px;
|
|
|
+ left: 4px;
|
|
|
+ bottom: 4px;
|
|
|
+ background-color: white;
|
|
|
+ transition: .4s;
|
|
|
+ border-radius: 50%;
|
|
|
+}
|
|
|
+
|
|
|
+input:checked + .slider {
|
|
|
+ background: linear-gradient(45deg, #6366f1, #8b5cf6);
|
|
|
+}
|
|
|
+
|
|
|
+input:checked + .slider:before {
|
|
|
+ transform: translateX(26px);
|
|
|
+}
|
|
|
+
|
|
|
+.holographic-checkbox {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 8px;
|
|
|
+}
|
|
|
+
|
|
|
+.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-checkbox input[type="checkbox"]:checked {
|
|
|
+ background: linear-gradient(45deg, #6366f1, #8b5cf6);
|
|
|
+ border-color: transparent;
|
|
|
+}
|
|
|
+
|
|
|
+.holographic-checkbox input[type="checkbox"]:checked::after {
|
|
|
+ content: "✓";
|
|
|
+ position: absolute;
|
|
|
+ color: white;
|
|
|
+ font-size: 14px;
|
|
|
+ top: 50%;
|
|
|
+ left: 50%;
|
|
|
+ transform: translate(-50%, -50%);
|
|
|
+}
|
|
|
+
|
|
|
+.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-card-small:hover {
|
|
|
+ background: rgba(255, 255, 255, 0.1);
|
|
|
+ transform: translateY(-2px);
|
|
|
+}
|
|
|
+
|
|
|
+.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-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-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-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-btn-small:hover {
|
|
|
+ background: rgba(255, 255, 255, 0.2);
|
|
|
+ transform: translateY(-2px);
|
|
|
+}
|
|
|
+
|
|
|
+.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-btn-icon:hover {
|
|
|
+ transform: translateY(-2px);
|
|
|
+ box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);
|
|
|
+}
|
|
|
+
|
|
|
+.holographic-stat {
|
|
|
+ background: rgba(255, 255, 255, 0.05);
|
|
|
+ padding: 1rem;
|
|
|
+ border-radius: 8px;
|
|
|
+ text-align: center;
|
|
|
+ min-width: 100px;
|
|
|
+}
|
|
|
+
|
|
|
+.holographic-progress {
|
|
|
+ height: 4px;
|
|
|
+ background: rgba(255, 255, 255, 0.1);
|
|
|
+ border-radius: 2px;
|
|
|
+ overflow: hidden;
|
|
|
+}
|
|
|
+
|
|
|
+.progress-bar {
|
|
|
+ height: 100%;
|
|
|
+ background: linear-gradient(90deg, #6366f1, #8b5cf6);
|
|
|
+ border-radius: 2px;
|
|
|
+ animation: progress 2s ease-in-out;
|
|
|
+}
|
|
|
+
|
|
|
+.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-notification:hover {
|
|
|
+ background: rgba(255, 255, 255, 0.1);
|
|
|
+ transform: translateX(4px);
|
|
|
+}
|
|
|
+
|
|
|
+.notification-icon {
|
|
|
+ width: 32px;
|
|
|
+ height: 32px;
|
|
|
+ border-radius: 50%;
|
|
|
+ background: rgba(99, 102, 241, 0.2);
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+}
|
|
|
+
|
|
|
+.notification-icon.warning {
|
|
|
+ background: rgba(234, 179, 8, 0.2);
|
|
|
+}
|
|
|
+
|
|
|
+.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-nav-item:hover {
|
|
|
+ background: rgba(255, 255, 255, 0.1);
|
|
|
+}
|
|
|
+
|
|
|
+.nav-icon {
|
|
|
+ width: 40px;
|
|
|
+ height: 40px;
|
|
|
+ border-radius: 50%;
|
|
|
+ background: rgba(255, 255, 255, 0.1);
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+}
|
|
|
+
|
|
|
+@keyframes progress {
|
|
|
+ from {
|
|
|
+ width: 0;
|
|
|
+ }
|
|
|
+ to {
|
|
|
+ width: 75%;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.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;
|
|
|
+}
|
|
|
+
|
|
|
+.modal-close:hover {
|
|
|
+ background: rgba(255, 255, 255, 0.1);
|
|
|
+}
|
|
|
+
|
|
|
+.modal-footer {
|
|
|
+ display: flex;
|
|
|
+ justify-content: flex-end;
|
|
|
+ gap: 1rem;
|
|
|
+ margin-top: 1.5rem;
|
|
|
+}
|
|
|
+
|
|
|
+.holographic-tabs {
|
|
|
+ background: rgba(255, 255, 255, 0.05);
|
|
|
+ border-radius: 8px;
|
|
|
+ overflow: hidden;
|
|
|
+}
|
|
|
+
|
|
|
+.tabs-header {
|
|
|
+ display: flex;
|
|
|
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
|
|
+}
|
|
|
+
|
|
|
+.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;
|
|
|
+}
|
|
|
+
|
|
|
+.tab-button.active {
|
|
|
+ color: white;
|
|
|
+}
|
|
|
+
|
|
|
+.tab-button.active::after {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ bottom: 0;
|
|
|
+ left: 0;
|
|
|
+ right: 0;
|
|
|
+ height: 2px;
|
|
|
+ background: linear-gradient(90deg, #6366f1, #8b5cf6);
|
|
|
+}
|
|
|
+
|
|
|
+.tabs-content {
|
|
|
+ padding: 1.5rem;
|
|
|
+}
|
|
|
+
|
|
|
+.tab-panel {
|
|
|
+ display: none;
|
|
|
+ color: rgba(255, 255, 255, 0.8);
|
|
|
+}
|
|
|
+
|
|
|
+.tab-panel.active {
|
|
|
+ display: block;
|
|
|
+ animation: fadeIn 0.3s ease-out;
|
|
|
+}
|
|
|
+
|
|
|
+.holographic-loader {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
+ gap: 1rem;
|
|
|
+ padding: 2rem;
|
|
|
+ background: rgba(255, 255, 255, 0.05);
|
|
|
+ border-radius: 8px;
|
|
|
+}
|
|
|
+
|
|
|
+.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-skeleton {
|
|
|
+ padding: 1.5rem;
|
|
|
+ background: rgba(255, 255, 255, 0.05);
|
|
|
+ border-radius: 8px;
|
|
|
+}
|
|
|
+
|
|
|
+.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;
|
|
|
+}
|
|
|
+
|
|
|
+.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-spinner {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ padding: 2rem;
|
|
|
+ background: rgba(255, 255, 255, 0.05);
|
|
|
+ border-radius: 8px;
|
|
|
+}
|
|
|
+
|
|
|
+.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;
|
|
|
+}
|
|
|
+
|
|
|
+@keyframes modalSlide {
|
|
|
+ from {
|
|
|
+ transform: translateY(-20px);
|
|
|
+ opacity: 0;
|
|
|
+ }
|
|
|
+ to {
|
|
|
+ transform: translateY(0);
|
|
|
+ opacity: 1;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+@keyframes fadeIn {
|
|
|
+ from {
|
|
|
+ opacity: 0;
|
|
|
+ }
|
|
|
+ to {
|
|
|
+ opacity: 1;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+@keyframes spin {
|
|
|
+ to {
|
|
|
+ transform: rotate(360deg);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+@keyframes skeleton {
|
|
|
+ to {
|
|
|
+ background-position: 200% 0;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|