@tailwind base; @tailwind components; @tailwind utilities; :root { --bg-deep: #060912; --bg-card: rgba(16, 22, 36, 0.78); --accent: #22d3ee; --accent2: #a78bfa; --danger: #f43f5e; --ok: #34d399; --text: #e8edf7; --muted: #94a3b8; --ring-offset: #060912; } html[data-theme="light"] { --bg-deep: #f1f5f9; --bg-card: rgba(255, 255, 255, 0.88); --text: #0f172a; --muted: #64748b; --ring-offset: #f1f5f9; } body { color: var(--text); background: var(--bg-deep); min-height: 100vh; font-family: var(--font-geist-sans), system-ui, sans-serif; transition: background-color 0.35s ease, color 0.25s ease; } .app-bg-layer { position: fixed; inset: 0; z-index: -1; opacity: 0.92; pointer-events: none; background: radial-gradient(ellipse 80% 50% at 50% -20%, rgba(34, 211, 238, 0.22), transparent), radial-gradient(ellipse 60% 40% at 100% 0%, rgba(167, 139, 250, 0.18), transparent), radial-gradient(ellipse 50% 30% at 0% 100%, rgba(59, 130, 246, 0.12), transparent); transition: opacity 0.35s ease; } html[data-theme="light"] .app-bg-layer { opacity: 0.75; background: radial-gradient(ellipse 80% 50% at 50% -20%, rgba(14, 165, 233, 0.12), transparent), radial-gradient(ellipse 60% 40% at 100% 0%, rgba(139, 92, 246, 0.1), transparent), radial-gradient(ellipse 50% 30% at 0% 100%, rgba(59, 130, 246, 0.08), transparent); } html[data-theme="light"] .chart-surface { border-color: rgba(15, 23, 42, 0.12) !important; background: rgba(255, 255, 255, 0.65) !important; } ::selection { background: rgba(34, 211, 238, 0.25); } @layer utilities { .glass { @apply border border-white/[0.08] shadow-2xl shadow-black/40; background: var(--bg-card); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); transition: border-color 0.25s ease, box-shadow 0.25s ease, background 0.25s ease; } html[data-theme="light"] .glass { @apply border-slate-200/90 shadow-slate-400/15; } .section-title { @apply text-lg font-semibold tracking-tight; color: var(--text); } .section-lead { @apply mt-2 text-xs leading-relaxed; color: var(--muted); } .meta-chip { @apply rounded-2xl border px-4 py-3 text-xs font-mono leading-relaxed; border-color: rgb(255 255 255 / 0.1); background: rgb(0 0 0 / 0.22); color: var(--muted); } html[data-theme="light"] .meta-chip { border-color: rgb(226 232 240 / 0.95); background: rgb(255 255 255 / 0.72); color: var(--muted); } .tab-strip { @apply -mx-1 flex gap-2 overflow-x-auto pb-1.5 pt-0.5 md:flex-wrap md:overflow-visible; scroll-snap-type: x proximity; -webkit-overflow-scrolling: touch; } .tab-btn { @apply btn-focus shrink-0 snap-start rounded-2xl border px-4 py-2.5 text-sm font-medium transition-colors duration-200; border-color: rgb(255 255 255 / 0.12); background: rgb(0 0 0 / 0.22); color: rgb(203 213 225); } .tab-btn:hover { border-color: rgb(34 211 238 / 0.25); color: rgb(226 232 240); } .tab-btn-active { border-color: rgb(34 211 238 / 0.45) !important; background: rgb(34 211 238 / 0.12) !important; color: rgb(207 250 254) !important; } html[data-theme="light"] .tab-btn { border-color: rgb(226 232 240); background: rgb(255 255 255 / 0.75); color: rgb(71 85 105); } html[data-theme="light"] .tab-btn:hover { border-color: rgb(6 182 212 / 0.45); color: rgb(15 118 110); } html[data-theme="light"] .tab-btn-active { border-color: rgb(6 182 212 / 0.55) !important; background: rgb(207 250 254 / 0.55) !important; color: rgb(14 116 144) !important; } .link-tile { @apply btn-focus block rounded-2xl border px-4 py-2.5 text-sm font-medium transition-colors duration-200; border-color: rgb(255 255 255 / 0.1); background: rgb(0 0 0 / 0.2); color: rgb(241 245 249); } .link-tile:hover { border-color: rgb(34 211 238 / 0.35); } html[data-theme="light"] .link-tile { border-color: rgb(226 232 240); background: rgb(255 255 255 / 0.65); color: rgb(30 41 59); } .link-tile-accent { border-color: rgb(34 211 238 / 0.28); background: rgb(34 211 238 / 0.1); color: rgb(236 254 255); } .link-tile-accent:hover { border-color: rgb(34 211 238 / 0.55); } html[data-theme="light"] .link-tile-accent { border-color: rgb(6 182 212 / 0.35); background: rgb(207 250 254 / 0.65); color: rgb(14 116 144); } .link-tile-warn { border-color: rgb(251 191 36 / 0.25); background: rgb(251 191 36 / 0.1); color: rgb(254 252 232); } html[data-theme="light"] .link-tile-warn { border-color: rgb(251 191 36 / 0.45); background: rgb(254 252 232 / 0.9); color: rgb(120 53 15); } .service-card { @apply rounded-3xl border p-5 transition-shadow duration-200; border-color: rgb(255 255 255 / 0.08); background: rgb(0 0 0 / 0.2); } .service-card:hover { box-shadow: 0 12px 40px -24px rgb(34 211 238 / 0.35); } html[data-theme="light"] .service-card { border-color: rgb(226 232 240 / 0.95); background: rgb(255 255 255 / 0.55); } .panel-inset { @apply rounded-2xl border p-4 text-sm; border-color: rgb(255 255 255 / 0.08); background: rgb(0 0 0 / 0.2); color: rgb(203 213 225); } html[data-theme="light"] .panel-inset { border-color: rgb(226 232 240 / 0.85); background: rgb(255 255 255 / 0.5); color: rgb(51 65 85); } .field-select { @apply w-full rounded-2xl border px-4 py-3 text-sm outline-none transition; border-color: rgb(255 255 255 / 0.12); background: rgb(2 6 23 / 0.55); color: rgb(248 250 252); } html[data-theme="light"] .field-select { border-color: rgb(226 232 240); background: rgb(255 255 255 / 0.9); color: rgb(15 23 42); } .glow-text { text-shadow: 0 0 32px rgba(34, 211, 238, 0.28); } .btn-focus { @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-400/50 focus-visible:ring-offset-2; --tw-ring-offset-color: var(--ring-offset); } } /* H5 底部导航安全区 */ .safe-pb-nav { padding-bottom: calc(5.5rem + env(safe-area-inset-bottom, 0px)); } @media (min-width: 768px) { .safe-pb-nav { padding-bottom: 4rem; } } @keyframes toast-in { from { opacity: 0; transform: translate(-50%, 12px); } to { opacity: 1; transform: translate(-50%, 0); } } .animate-toast-in { animation: toast-in 0.35s ease-out both; } @keyframes pulse-soft { 0%, 100% { opacity: 1; } 50% { opacity: 0.65; } } .animate-pulse-soft { animation: pulse-soft 2s ease-in-out infinite; } /* 自定义滚动条,日志区更易读 */ .log-scroll { scrollbar-width: thin; scrollbar-color: rgba(148, 163, 184, 0.35) transparent; } .log-scroll::-webkit-scrollbar { width: 6px; height: 6px; } .log-scroll::-webkit-scrollbar-thumb { background: rgba(148, 163, 184, 0.35); border-radius: 6px; } /* 门户首页(/)轻量网格背景,与控制台 glass 风格区分 */ .portal-grid-bg { background-image: linear-gradient(rgba(255, 255, 255, 0.05) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, 0.05) 1px, transparent 1px); background-size: 28px 28px; } /* Live Hub 产品壳:噪点与光晕 */ .lp-noise { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E"); }